Home | History | Annotate | Download | only in files
      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