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/ScopedHandle.h" 13 14 #include <gtest/gtest.h> 15 16 namespace android { 17 namespace base { 18 19 namespace { 20 21 // The path of a file that can always be opened for reading on any platform. 22 static const char kNullFile[] = "NUL"; 23 24 HANDLE OpenNull() { 25 return ::CreateFile(kNullFile, 26 GENERIC_READ, 27 FILE_SHARE_READ|FILE_SHARE_WRITE, 28 NULL, 29 OPEN_EXISTING, 30 FILE_ATTRIBUTE_NORMAL, 31 NULL); 32 } 33 34 } // namespace 35 36 TEST(ScopedHandle, DefaultConstructor) { 37 ScopedHandle h; 38 EXPECT_FALSE(h.valid()); 39 EXPECT_EQ(INVALID_HANDLE_VALUE, h.get()); 40 } 41 42 TEST(ScopedHandle, Constructor) { 43 ScopedHandle h(OpenNull()); 44 EXPECT_TRUE(h.valid()); 45 } 46 47 TEST(ScopedHandle, Release) { 48 ScopedHandle h(OpenNull()); 49 EXPECT_TRUE(h.valid()); 50 HANDLE handle = h.release(); 51 EXPECT_FALSE(h.valid()); 52 EXPECT_NE(INVALID_HANDLE_VALUE, handle); 53 ::CloseHandle(handle); 54 } 55 56 TEST(ScopedHandle, Close) { 57 ScopedHandle h(OpenNull()); 58 EXPECT_TRUE(h.valid()); 59 h.close(); 60 EXPECT_FALSE(h.valid()); 61 } 62 63 TEST(ScopedHandle, Swap) { 64 ScopedHandle h1; 65 ScopedHandle h2(OpenNull()); 66 EXPECT_FALSE(h1.valid()); 67 EXPECT_TRUE(h2.valid()); 68 h1.swap(&h2); 69 EXPECT_FALSE(h2.valid()); 70 EXPECT_TRUE(h1.valid()); 71 } 72 73 } // namespace base 74 } // namespace android 75