1 // Copyright 2014 The Android Open Source Project 2 // 3 // This software is licensed under the terms of the GNU General Public 4 // License version 2, as published by the Free Software Foundation, and 5 // may be copied, distributed, and modified under those terms. 6 // 7 // This program is distributed in the hope that it will be useful, 8 // but WITHOUT ANY WARRANTY; without even the implied warranty of 9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 // GNU General Public License for more details. 11 12 #include "android/base/files/ScopedStdioFile.h" 13 14 #include <gtest/gtest.h> 15 16 namespace android { 17 namespace base { 18 19 // The path of a file that can always be opened for reading on any platform. 20 #ifdef _WIN32 21 static const char kNullFile[] = "NUL"; 22 #else 23 static const char kNullFile[] = "/dev/null"; 24 #endif 25 26 TEST(ScopedStdioFile, DefaultConstructor) { 27 ScopedStdioFile f; 28 EXPECT_FALSE(f.get()); 29 } 30 31 TEST(ScopedStdioFile, Constructor) { 32 ScopedStdioFile f(fopen(kNullFile, "rb")); 33 EXPECT_TRUE(f.get()); 34 } 35 36 TEST(ScopedStdioFile, Release) { 37 FILE* handle = NULL; 38 ScopedStdioFile f(fopen(kNullFile, "rb")); 39 EXPECT_TRUE(f.get()); 40 handle = f.release(); 41 EXPECT_FALSE(f.get()); 42 EXPECT_TRUE(handle); 43 ::fclose(handle); 44 } 45 46 TEST(ScopedStdioFile, Close) { 47 ScopedStdioFile f(fopen(kNullFile, "rb")); 48 EXPECT_TRUE(f.get()); 49 f.close(); 50 EXPECT_FALSE(f.get()); 51 } 52 53 TEST(ScopedStdioFile, Swap) { 54 ScopedStdioFile f1; 55 ScopedStdioFile f2(fopen(kNullFile, "rb")); 56 EXPECT_FALSE(f1.get()); 57 EXPECT_TRUE(f2.get()); 58 f1.swap(&f2); 59 EXPECT_FALSE(f2.get()); 60 EXPECT_TRUE(f1.get()); 61 } 62 63 } // namespace base 64 } // namespace android 65