• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
TEST(ScopedStdioFile,DefaultConstructor)26 TEST(ScopedStdioFile, DefaultConstructor) {
27     ScopedStdioFile f;
28     EXPECT_FALSE(f.get());
29 }
30 
TEST(ScopedStdioFile,Constructor)31 TEST(ScopedStdioFile, Constructor) {
32     ScopedStdioFile f(fopen(kNullFile, "rb"));
33     EXPECT_TRUE(f.get());
34 }
35 
TEST(ScopedStdioFile,Release)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 
TEST(ScopedStdioFile,Close)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 
TEST(ScopedStdioFile,Swap)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