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/ScopedFd.h" 13 14 #include <unistd.h> 15 #include <fcntl.h> 16 17 #include <gtest/gtest.h> 18 19 namespace android { 20 namespace base { 21 22 namespace { 23 24 // The path of a file that can always be opened for reading on any platform. 25 #ifdef _WIN32 26 static const char kNullFile[] = "NUL"; 27 #else 28 static const char kNullFile[] = "/dev/null"; 29 #endif 30 31 int OpenNull() { 32 return ::open(kNullFile, O_RDONLY); 33 } 34 35 } // namespace 36 37 TEST(ScopedFd, DefaultConstructor) { 38 ScopedFd f; 39 EXPECT_FALSE(f.valid()); 40 EXPECT_EQ(-1, f.get()); 41 } 42 43 TEST(ScopedFd, Constructor) { 44 ScopedFd f(OpenNull()); 45 EXPECT_TRUE(f.valid()); 46 } 47 48 TEST(ScopedFd, Release) { 49 ScopedFd f(OpenNull()); 50 EXPECT_TRUE(f.valid()); 51 int fd = f.release(); 52 EXPECT_FALSE(f.valid()); 53 EXPECT_NE(-1, fd); 54 ::close(fd); 55 } 56 57 TEST(ScopedFd, Close) { 58 ScopedFd f(OpenNull()); 59 EXPECT_TRUE(f.valid()); 60 f.close(); 61 EXPECT_FALSE(f.valid()); 62 } 63 64 TEST(ScopedFd, Swap) { 65 ScopedFd f1; 66 ScopedFd f2(OpenNull()); 67 EXPECT_FALSE(f1.valid()); 68 EXPECT_TRUE(f2.valid()); 69 f1.swap(&f2); 70 EXPECT_FALSE(f2.valid()); 71 EXPECT_TRUE(f1.valid()); 72 } 73 74 75 } // namespace base 76 } // namespace android 77