197502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner// Copyright 2014 The Android Open Source Project 297502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner// 397502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner// This software is licensed under the terms of the GNU General Public 497502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner// License version 2, as published by the Free Software Foundation, and 597502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner// may be copied, distributed, and modified under those terms. 697502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner// 797502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner// This program is distributed in the hope that it will be useful, 897502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner// but WITHOUT ANY WARRANTY; without even the implied warranty of 997502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1097502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner// GNU General Public License for more details. 1197502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner 1297502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner#include "android/base/files/ScopedHandle.h" 1397502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner 1497502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner#include <gtest/gtest.h> 1597502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner 1697502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turnernamespace android { 1797502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turnernamespace base { 1897502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner 1997502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turnernamespace { 2097502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner 2197502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner// The path of a file that can always be opened for reading on any platform. 2297502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turnerstatic const char kNullFile[] = "NUL"; 2397502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner 2497502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' TurnerHANDLE OpenNull() { 2597502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner return ::CreateFile(kNullFile, 2697502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner GENERIC_READ, 2797502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner FILE_SHARE_READ|FILE_SHARE_WRITE, 2897502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner NULL, 2997502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner OPEN_EXISTING, 3097502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner FILE_ATTRIBUTE_NORMAL, 3197502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner NULL); 3297502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner} 3397502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner 3497502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner} // namespace 3597502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner 3697502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' TurnerTEST(ScopedHandle, DefaultConstructor) { 3797502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner ScopedHandle h; 3897502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner EXPECT_FALSE(h.valid()); 3997502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner EXPECT_EQ(INVALID_HANDLE_VALUE, h.get()); 4097502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner} 4197502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner 4297502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' TurnerTEST(ScopedHandle, Constructor) { 4397502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner ScopedHandle h(OpenNull()); 4497502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner EXPECT_TRUE(h.valid()); 4597502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner} 4697502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner 4797502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' TurnerTEST(ScopedHandle, Release) { 4897502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner ScopedHandle h(OpenNull()); 4997502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner EXPECT_TRUE(h.valid()); 5097502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner HANDLE handle = h.release(); 5197502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner EXPECT_FALSE(h.valid()); 5297502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner EXPECT_NE(INVALID_HANDLE_VALUE, handle); 5397502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner ::CloseHandle(handle); 5497502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner} 5597502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner 5697502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' TurnerTEST(ScopedHandle, Close) { 5797502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner ScopedHandle h(OpenNull()); 5897502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner EXPECT_TRUE(h.valid()); 5997502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner h.close(); 6097502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner EXPECT_FALSE(h.valid()); 6197502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner} 6297502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner 6397502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' TurnerTEST(ScopedHandle, Swap) { 6497502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner ScopedHandle h1; 6597502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner ScopedHandle h2(OpenNull()); 6697502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner EXPECT_FALSE(h1.valid()); 6797502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner EXPECT_TRUE(h2.valid()); 6897502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner h1.swap(&h2); 6997502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner EXPECT_FALSE(h2.valid()); 7097502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner EXPECT_TRUE(h1.valid()); 7197502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner} 7297502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner 7397502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner} // namespace base 7497502faffa2e99bf717749a2d249ba3e57d7da4dDavid 'Digit' Turner} // namespace android 75