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
OpenNull()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
TEST(ScopedHandle,DefaultConstructor)36 TEST(ScopedHandle, DefaultConstructor) {
37 ScopedHandle h;
38 EXPECT_FALSE(h.valid());
39 EXPECT_EQ(INVALID_HANDLE_VALUE, h.get());
40 }
41
TEST(ScopedHandle,Constructor)42 TEST(ScopedHandle, Constructor) {
43 ScopedHandle h(OpenNull());
44 EXPECT_TRUE(h.valid());
45 }
46
TEST(ScopedHandle,Release)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
TEST(ScopedHandle,Close)56 TEST(ScopedHandle, Close) {
57 ScopedHandle h(OpenNull());
58 EXPECT_TRUE(h.valid());
59 h.close();
60 EXPECT_FALSE(h.valid());
61 }
62
TEST(ScopedHandle,Swap)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