1890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner// Copyright 2014 The Android Open Source Project
2890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner//
3890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner// This software is licensed under the terms of the GNU General Public
4890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner// License version 2, as published by the Free Software Foundation, and
5890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner// may be copied, distributed, and modified under those terms.
6890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner//
7890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner// This program is distributed in the hope that it will be useful,
8890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner// but WITHOUT ANY WARRANTY; without even the implied warranty of
9890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner// GNU General Public License for more details.
11890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner
12890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner#include "android/base/files/ScopedStdioFile.h"
13890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner
14890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner#include <gtest/gtest.h>
15890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner
16890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turnernamespace android {
17890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turnernamespace base {
18890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner
19890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner// The path of a file that can always be opened for reading on any platform.
20890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner#ifdef _WIN32
21890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turnerstatic const char kNullFile[] = "NUL";
22890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner#else
23890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turnerstatic const char kNullFile[] = "/dev/null";
24890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner#endif
25890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner
26890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' TurnerTEST(ScopedStdioFile, DefaultConstructor) {
27890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    ScopedStdioFile f;
28890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    EXPECT_FALSE(f.get());
29890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner}
30890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner
31890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' TurnerTEST(ScopedStdioFile, Constructor) {
32890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    ScopedStdioFile f(fopen(kNullFile, "rb"));
33890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    EXPECT_TRUE(f.get());
34890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner}
35890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner
36890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' TurnerTEST(ScopedStdioFile, Release) {
37890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    FILE* handle = NULL;
38890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    ScopedStdioFile f(fopen(kNullFile, "rb"));
39890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    EXPECT_TRUE(f.get());
40890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    handle = f.release();
41890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    EXPECT_FALSE(f.get());
42890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    EXPECT_TRUE(handle);
43890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    ::fclose(handle);
44890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner}
45890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner
46890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' TurnerTEST(ScopedStdioFile, Close) {
47890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    ScopedStdioFile f(fopen(kNullFile, "rb"));
48890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    EXPECT_TRUE(f.get());
49890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    f.close();
50890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    EXPECT_FALSE(f.get());
51890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner}
52890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner
53890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' TurnerTEST(ScopedStdioFile, Swap) {
54890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    ScopedStdioFile f1;
55890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    ScopedStdioFile f2(fopen(kNullFile, "rb"));
56890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    EXPECT_FALSE(f1.get());
57890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    EXPECT_TRUE(f2.get());
58890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    f1.swap(&f2);
59890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    EXPECT_FALSE(f2.get());
60890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner    EXPECT_TRUE(f1.get());
61890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner}
62890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner
63890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner}  // namespace base
64890f46464b0a35cbee882a5d62bd86a49879cabcDavid 'Digit' Turner}  // namespace android
65