1dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Copyright 2008, Google Inc. 2dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// All rights reserved. 3dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 4dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Redistribution and use in source and binary forms, with or without 5dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// modification, are permitted provided that the following conditions are 6dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// met: 7dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 8dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// * Redistributions of source code must retain the above copyright 9dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// notice, this list of conditions and the following disclaimer. 10dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// * Redistributions in binary form must reproduce the above 11dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// copyright notice, this list of conditions and the following disclaimer 12dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// in the documentation and/or other materials provided with the 13dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// distribution. 14dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// * Neither the name of Google Inc. nor the names of its 15dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// contributors may be used to endorse or promote products derived from 16dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// this software without specific prior written permission. 17dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 18dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 30dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Authors: keith.ray@gmail.com (Keith Ray) 31dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 32dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Google Test filepath utilities 33dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 34dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// This file tests classes and functions used internally by 35dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Google Test. They are subject to change without notice. 36dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 37dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// This file is #included from gtest_unittest.cc, to avoid changing 38dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// build or make-files for some existing Google Test clients. Do not 39dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// #include this file anywhere else! 40dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 4146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#include "gtest/internal/gtest-filepath.h" 4246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#include "gtest/gtest.h" 43dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 44dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Indicates that this translation unit is part of Google Test's 45dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// implementation. It must come before gtest-internal-inl.h is 46dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// included, or there will be a compiler error. This trick is to 47dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// prevent a user from accidentally including gtest-internal-inl.h in 48dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// his code. 49dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GTEST_IMPLEMENTATION_ 1 50dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#include "src/gtest-internal-inl.h" 51dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#undef GTEST_IMPLEMENTATION_ 52dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 5346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#if GTEST_OS_WINDOWS_MOBILE 5446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# include <windows.h> // NOLINT 55dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#elif GTEST_OS_WINDOWS 5646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# include <direct.h> // NOLINT 5746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif // GTEST_OS_WINDOWS_MOBILE 58dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 59dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixternamespace testing { 60dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixternamespace internal { 61dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixternamespace { 62dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 6346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#if GTEST_OS_WINDOWS_MOBILE 6446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// TODO(wan@google.com): Move these to the POSIX adapter section in 6546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// gtest-port.h. 6646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 67dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Windows CE doesn't have the remove C function. 68dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterint remove(const char* path) { 69dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter LPCWSTR wpath = String::AnsiToUtf16(path); 70dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int ret = DeleteFile(wpath) ? 0 : -1; 71dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter delete [] wpath; 72dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return ret; 73dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 74dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Windows CE doesn't have the _rmdir C function. 75dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterint _rmdir(const char* path) { 76dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath filepath(path); 77dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter LPCWSTR wpath = String::AnsiToUtf16( 78dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter filepath.RemoveTrailingPathSeparator().c_str()); 79dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int ret = RemoveDirectory(wpath) ? 0 : -1; 80dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter delete [] wpath; 81dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return ret; 82dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 83dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 8446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#else 85dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 86dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(GetCurrentDirTest, ReturnsCurrentDir) { 87dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const FilePath original_dir = FilePath::GetCurrentDir(); 88dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(original_dir.IsEmpty()); 89dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 90dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter posix::ChDir(GTEST_PATH_SEP_); 91dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const FilePath cwd = FilePath::GetCurrentDir(); 92dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter posix::ChDir(original_dir.c_str()); 93dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 9446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# if GTEST_OS_WINDOWS 9546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 96dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Skips the ":". 97dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const char* const cwd_without_drive = strchr(cwd.c_str(), ':'); 98dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ASSERT_TRUE(cwd_without_drive != NULL); 99dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ(GTEST_PATH_SEP_, cwd_without_drive + 1); 10046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 10146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# else 10246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 103dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ(GTEST_PATH_SEP_, cwd.c_str()); 10446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 10546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# endif 106dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 107dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 10846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif // GTEST_OS_WINDOWS_MOBILE 109dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 110dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(IsEmptyTest, ReturnsTrueForEmptyPath) { 111dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(FilePath("").IsEmpty()); 112dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(FilePath(NULL).IsEmpty()); 113dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 114dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 115dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(IsEmptyTest, ReturnsFalseForNonEmptyPath) { 116dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(FilePath("a").IsEmpty()); 117dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(FilePath(".").IsEmpty()); 118dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(FilePath("a/b").IsEmpty()); 119dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(FilePath("a\\b\\").IsEmpty()); 120dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 121dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 122dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// RemoveDirectoryName "" -> "" 123dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(RemoveDirectoryNameTest, WhenEmptyName) { 124dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("", FilePath("").RemoveDirectoryName().c_str()); 125dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 126dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 127dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// RemoveDirectoryName "afile" -> "afile" 128dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(RemoveDirectoryNameTest, ButNoDirectory) { 129dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("afile", 130dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("afile").RemoveDirectoryName().c_str()); 131dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 132dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 133dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// RemoveDirectoryName "/afile" -> "afile" 134dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(RemoveDirectoryNameTest, RootFileShouldGiveFileName) { 135dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("afile", 136dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath(GTEST_PATH_SEP_ "afile").RemoveDirectoryName().c_str()); 137dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 138dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 139dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// RemoveDirectoryName "adir/" -> "" 140dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(RemoveDirectoryNameTest, WhereThereIsNoFileName) { 141dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("", 142dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("adir" GTEST_PATH_SEP_).RemoveDirectoryName().c_str()); 143dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 144dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 145dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// RemoveDirectoryName "adir/afile" -> "afile" 146dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(RemoveDirectoryNameTest, ShouldGiveFileName) { 147dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("afile", 148dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("adir" GTEST_PATH_SEP_ "afile").RemoveDirectoryName().c_str()); 149dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 150dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 151dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// RemoveDirectoryName "adir/subdir/afile" -> "afile" 152dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileName) { 153dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("afile", 154dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_ "afile") 155dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .RemoveDirectoryName().c_str()); 156dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 157dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 15846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#if GTEST_HAS_ALT_PATH_SEP_ 15946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 16046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Tests that RemoveDirectoryName() works with the alternate separator 16146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// on Windows. 16246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 16346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// RemoveDirectoryName("/afile") -> "afile" 16446108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(RemoveDirectoryNameTest, RootFileShouldGiveFileNameForAlternateSeparator) { 16546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_STREQ("afile", 16646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan FilePath("/afile").RemoveDirectoryName().c_str()); 16746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 16846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 16946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// RemoveDirectoryName("adir/") -> "" 17046108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(RemoveDirectoryNameTest, WhereThereIsNoFileNameForAlternateSeparator) { 17146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_STREQ("", 17246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan FilePath("adir/").RemoveDirectoryName().c_str()); 17346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 17446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 17546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// RemoveDirectoryName("adir/afile") -> "afile" 17646108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(RemoveDirectoryNameTest, ShouldGiveFileNameForAlternateSeparator) { 17746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_STREQ("afile", 17846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan FilePath("adir/afile").RemoveDirectoryName().c_str()); 17946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 18046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 18146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// RemoveDirectoryName("adir/subdir/afile") -> "afile" 18246108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileNameForAlternateSeparator) { 18346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_STREQ("afile", 18446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan FilePath("adir/subdir/afile").RemoveDirectoryName().c_str()); 18546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 18646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 18746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif 188dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 189dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// RemoveFileName "" -> "./" 190dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(RemoveFileNameTest, EmptyName) { 19146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#if GTEST_OS_WINDOWS_MOBILE 192dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // On Windows CE, we use the root as the current directory. 193dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ(GTEST_PATH_SEP_, 194dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("").RemoveFileName().c_str()); 195dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#else 196dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("." GTEST_PATH_SEP_, 197dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("").RemoveFileName().c_str()); 198dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#endif 199dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 200dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 201dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// RemoveFileName "adir/" -> "adir/" 202dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(RemoveFileNameTest, ButNoFile) { 203dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("adir" GTEST_PATH_SEP_, 204dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("adir" GTEST_PATH_SEP_).RemoveFileName().c_str()); 205dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 206dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 207dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// RemoveFileName "adir/afile" -> "adir/" 208dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(RemoveFileNameTest, GivesDirName) { 209dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("adir" GTEST_PATH_SEP_, 210dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("adir" GTEST_PATH_SEP_ "afile") 211dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .RemoveFileName().c_str()); 212dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 213dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 214dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// RemoveFileName "adir/subdir/afile" -> "adir/subdir/" 215dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(RemoveFileNameTest, GivesDirAndSubDirName) { 216dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_, 217dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_ "afile") 218dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .RemoveFileName().c_str()); 219dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 220dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 221dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// RemoveFileName "/afile" -> "/" 222dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(RemoveFileNameTest, GivesRootDir) { 223dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ(GTEST_PATH_SEP_, 224dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath(GTEST_PATH_SEP_ "afile").RemoveFileName().c_str()); 225dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 226dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 22746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#if GTEST_HAS_ALT_PATH_SEP_ 22846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 22946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Tests that RemoveFileName() works with the alternate separator on 23046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Windows. 23146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 23246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// RemoveFileName("adir/") -> "adir/" 23346108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(RemoveFileNameTest, ButNoFileForAlternateSeparator) { 23446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_STREQ("adir" GTEST_PATH_SEP_, 23546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan FilePath("adir/").RemoveFileName().c_str()); 23646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 23746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 23846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// RemoveFileName("adir/afile") -> "adir/" 23946108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(RemoveFileNameTest, GivesDirNameForAlternateSeparator) { 24046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_STREQ("adir" GTEST_PATH_SEP_, 24146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan FilePath("adir/afile").RemoveFileName().c_str()); 24246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 24346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 24446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// RemoveFileName("adir/subdir/afile") -> "adir/subdir/" 24546108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(RemoveFileNameTest, GivesDirAndSubDirNameForAlternateSeparator) { 24646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_STREQ("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_, 24746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan FilePath("adir/subdir/afile").RemoveFileName().c_str()); 24846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 24946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 25046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// RemoveFileName("/afile") -> "\" 25146108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(RemoveFileNameTest, GivesRootDirForAlternateSeparator) { 25246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_STREQ(GTEST_PATH_SEP_, 25346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan FilePath("/afile").RemoveFileName().c_str()); 25446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 25546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 25646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif 257dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 258dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(MakeFileNameTest, GenerateWhenNumberIsZero) { 259dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath actual = FilePath::MakeFileName(FilePath("foo"), FilePath("bar"), 260dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 0, "xml"); 261dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.c_str()); 262dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 263dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 264dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(MakeFileNameTest, GenerateFileNameNumberGtZero) { 265dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath actual = FilePath::MakeFileName(FilePath("foo"), FilePath("bar"), 266dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 12, "xml"); 267dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar_12.xml", actual.c_str()); 268dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 269dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 270dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(MakeFileNameTest, GenerateFileNameWithSlashNumberIsZero) { 271dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath actual = FilePath::MakeFileName(FilePath("foo" GTEST_PATH_SEP_), 272dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("bar"), 0, "xml"); 273dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.c_str()); 274dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 275dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 276dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(MakeFileNameTest, GenerateFileNameWithSlashNumberGtZero) { 277dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath actual = FilePath::MakeFileName(FilePath("foo" GTEST_PATH_SEP_), 278dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("bar"), 12, "xml"); 279dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar_12.xml", actual.c_str()); 280dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 281dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 282dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(MakeFileNameTest, GenerateWhenNumberIsZeroAndDirIsEmpty) { 283dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath actual = FilePath::MakeFileName(FilePath(""), FilePath("bar"), 284dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 0, "xml"); 285dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("bar.xml", actual.c_str()); 286dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 287dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 288dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(MakeFileNameTest, GenerateWhenNumberIsNotZeroAndDirIsEmpty) { 289dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath actual = FilePath::MakeFileName(FilePath(""), FilePath("bar"), 290dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 14, "xml"); 291dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("bar_14.xml", actual.c_str()); 292dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 293dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 294dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ConcatPathsTest, WorksWhenDirDoesNotEndWithPathSep) { 295dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath actual = FilePath::ConcatPaths(FilePath("foo"), 296dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("bar.xml")); 297dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.c_str()); 298dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 299dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 300dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ConcatPathsTest, WorksWhenPath1EndsWithPathSep) { 301dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath actual = FilePath::ConcatPaths(FilePath("foo" GTEST_PATH_SEP_), 302dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("bar.xml")); 303dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.c_str()); 304dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 305dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 306dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ConcatPathsTest, Path1BeingEmpty) { 307dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath actual = FilePath::ConcatPaths(FilePath(""), 308dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("bar.xml")); 309dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("bar.xml", actual.c_str()); 310dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 311dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 312dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ConcatPathsTest, Path2BeingEmpty) { 313dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath actual = FilePath::ConcatPaths(FilePath("foo"), 314dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("")); 315dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_, actual.c_str()); 316dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 317dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 318dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ConcatPathsTest, BothPathBeingEmpty) { 319dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath actual = FilePath::ConcatPaths(FilePath(""), 320dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("")); 321dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("", actual.c_str()); 322dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 323dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 324dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ConcatPathsTest, Path1ContainsPathSep) { 325dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath actual = FilePath::ConcatPaths(FilePath("foo" GTEST_PATH_SEP_ "bar"), 326dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("foobar.xml")); 327dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_ "foobar.xml", 328dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter actual.c_str()); 329dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 330dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 331dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ConcatPathsTest, Path2ContainsPathSep) { 332dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath actual = FilePath::ConcatPaths( 333dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("foo" GTEST_PATH_SEP_), 334dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("bar" GTEST_PATH_SEP_ "bar.xml")); 335dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_ "bar.xml", 336dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter actual.c_str()); 337dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 338dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 339dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ConcatPathsTest, Path2EndsWithPathSep) { 340dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath actual = FilePath::ConcatPaths(FilePath("foo"), 341dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("bar" GTEST_PATH_SEP_)); 342dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_, actual.c_str()); 343dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 344dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 345dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// RemoveTrailingPathSeparator "" -> "" 346dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(RemoveTrailingPathSeparatorTest, EmptyString) { 347dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("", 348dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("").RemoveTrailingPathSeparator().c_str()); 349dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 350dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 351dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// RemoveTrailingPathSeparator "foo" -> "foo" 352dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(RemoveTrailingPathSeparatorTest, FileNoSlashString) { 353dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo", 354dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("foo").RemoveTrailingPathSeparator().c_str()); 355dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 356dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 357dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// RemoveTrailingPathSeparator "foo/" -> "foo" 358dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(RemoveTrailingPathSeparatorTest, ShouldRemoveTrailingSeparator) { 359dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ( 360dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "foo", 361dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("foo" GTEST_PATH_SEP_).RemoveTrailingPathSeparator().c_str()); 36246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#if GTEST_HAS_ALT_PATH_SEP_ 36346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_STREQ("foo", 36446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan FilePath("foo/").RemoveTrailingPathSeparator().c_str()); 36546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif 366dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 367dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 368dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// RemoveTrailingPathSeparator "foo/bar/" -> "foo/bar/" 369dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(RemoveTrailingPathSeparatorTest, ShouldRemoveLastSeparator) { 370dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar", 371dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_) 372dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .RemoveTrailingPathSeparator().c_str()); 373dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 374dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 375dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// RemoveTrailingPathSeparator "foo/bar" -> "foo/bar" 376dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(RemoveTrailingPathSeparatorTest, ShouldReturnUnmodified) { 377dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar", 378dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("foo" GTEST_PATH_SEP_ "bar") 379dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .RemoveTrailingPathSeparator().c_str()); 380dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 381dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 382dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(DirectoryTest, RootDirectoryExists) { 383dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#if GTEST_OS_WINDOWS // We are on Windows. 384dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter char current_drive[_MAX_PATH]; // NOLINT 385dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter current_drive[0] = static_cast<char>(_getdrive() + 'A' - 1); 386dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter current_drive[1] = ':'; 387dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter current_drive[2] = '\\'; 388dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter current_drive[3] = '\0'; 389dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(FilePath(current_drive).DirectoryExists()); 390dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#else 391dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(FilePath("/").DirectoryExists()); 392dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#endif // GTEST_OS_WINDOWS 393dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 394dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 395dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#if GTEST_OS_WINDOWS 396dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(DirectoryTest, RootOfWrongDriveDoesNotExists) { 397dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const int saved_drive_ = _getdrive(); 398dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Find a drive that doesn't exist. Start with 'Z' to avoid common ones. 399dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter for (char drive = 'Z'; drive >= 'A'; drive--) 400dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter if (_chdrive(drive - 'A' + 1) == -1) { 401dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter char non_drive[_MAX_PATH]; // NOLINT 402dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter non_drive[0] = drive; 403dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter non_drive[1] = ':'; 404dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter non_drive[2] = '\\'; 405dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter non_drive[3] = '\0'; 406dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(FilePath(non_drive).DirectoryExists()); 407dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter break; 408dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 409dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter _chdrive(saved_drive_); 410dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 411dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#endif // GTEST_OS_WINDOWS 412dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 41346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#if !GTEST_OS_WINDOWS_MOBILE 414dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Windows CE _does_ consider an empty directory to exist. 415dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(DirectoryTest, EmptyPathDirectoryDoesNotExist) { 416dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(FilePath("").DirectoryExists()); 417dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 41846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif // !GTEST_OS_WINDOWS_MOBILE 419dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 420dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(DirectoryTest, CurrentDirectoryExists) { 421dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#if GTEST_OS_WINDOWS // We are on Windows. 42246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# ifndef _WIN32_CE // Windows CE doesn't have a current directory. 42346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 424dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(FilePath(".").DirectoryExists()); 425dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(FilePath(".\\").DirectoryExists()); 42646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 42746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# endif // _WIN32_CE 428dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#else 429dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(FilePath(".").DirectoryExists()); 430dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(FilePath("./").DirectoryExists()); 431dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#endif // GTEST_OS_WINDOWS 432dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 433dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 434dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(NormalizeTest, NullStringsEqualEmptyDirectory) { 435dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("", FilePath(NULL).c_str()); 436dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("", FilePath(String(NULL)).c_str()); 437dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 438dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 439dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// "foo/bar" == foo//bar" == "foo///bar" 440dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(NormalizeTest, MultipleConsecutiveSepaparatorsInMidstring) { 441dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar", 442dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("foo" GTEST_PATH_SEP_ "bar").c_str()); 443dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar", 444dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").c_str()); 445dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar", 446dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ 447dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GTEST_PATH_SEP_ "bar").c_str()); 448dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 449dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 450dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// "/bar" == //bar" == "///bar" 451dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringStart) { 452dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ(GTEST_PATH_SEP_ "bar", 453dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath(GTEST_PATH_SEP_ "bar").c_str()); 454dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ(GTEST_PATH_SEP_ "bar", 455dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").c_str()); 456dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ(GTEST_PATH_SEP_ "bar", 457dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").c_str()); 458dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 459dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 460dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// "foo/" == foo//" == "foo///" 461dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringEnd) { 462dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_, 463dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("foo" GTEST_PATH_SEP_).c_str()); 464dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_, 465dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_).c_str()); 466dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("foo" GTEST_PATH_SEP_, 467dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_).c_str()); 468dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 469dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 47046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#if GTEST_HAS_ALT_PATH_SEP_ 47146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 47246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Tests that separators at the end of the string are normalized 47346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// regardless of their combination (e.g. "foo\" =="foo/\" == 47446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// "foo\\/"). 47546108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(NormalizeTest, MixAlternateSeparatorAtStringEnd) { 47646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_STREQ("foo" GTEST_PATH_SEP_, 47746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan FilePath("foo/").c_str()); 47846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_STREQ("foo" GTEST_PATH_SEP_, 47946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan FilePath("foo" GTEST_PATH_SEP_ "/").c_str()); 48046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_STREQ("foo" GTEST_PATH_SEP_, 48146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan FilePath("foo//" GTEST_PATH_SEP_).c_str()); 48246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 48346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 48446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif 48546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 486dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(AssignmentOperatorTest, DefaultAssignedToNonDefault) { 487dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath default_path; 488dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath non_default_path("path"); 489dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter non_default_path = default_path; 490dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("", non_default_path.c_str()); 491dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("", default_path.c_str()); // RHS var is unchanged. 492dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 493dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 494dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(AssignmentOperatorTest, NonDefaultAssignedToDefault) { 495dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath non_default_path("path"); 496dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath default_path; 497dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter default_path = non_default_path; 498dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("path", default_path.c_str()); 499dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("path", non_default_path.c_str()); // RHS var is unchanged. 500dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 501dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 502dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(AssignmentOperatorTest, ConstAssignedToNonConst) { 503dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const FilePath const_default_path("const_path"); 504dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath non_default_path("path"); 505dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter non_default_path = const_default_path; 506dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("const_path", non_default_path.c_str()); 507dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 508dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 509dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass DirectoryCreationTest : public Test { 510dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter protected: 511dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual void SetUp() { 512dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter testdata_path_.Set(FilePath(String::Format("%s%s%s", 513dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter TempDir().c_str(), GetCurrentExecutableName().c_str(), 514dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "_directory_creation" GTEST_PATH_SEP_ "test" GTEST_PATH_SEP_))); 515dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter testdata_file_.Set(testdata_path_.RemoveTrailingPathSeparator()); 516dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 517dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter unique_file0_.Set(FilePath::MakeFileName(testdata_path_, FilePath("unique"), 518dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 0, "txt")); 519dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter unique_file1_.Set(FilePath::MakeFileName(testdata_path_, FilePath("unique"), 520dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1, "txt")); 521dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 522dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter remove(testdata_file_.c_str()); 523dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter remove(unique_file0_.c_str()); 524dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter remove(unique_file1_.c_str()); 525dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter posix::RmDir(testdata_path_.c_str()); 526dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 527dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 528dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual void TearDown() { 529dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter remove(testdata_file_.c_str()); 530dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter remove(unique_file0_.c_str()); 531dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter remove(unique_file1_.c_str()); 532dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter posix::RmDir(testdata_path_.c_str()); 533dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 534dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 535dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter String TempDir() const { 53646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#if GTEST_OS_WINDOWS_MOBILE 537dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return String("\\temp\\"); 538dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#elif GTEST_OS_WINDOWS 539dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const char* temp_dir = posix::GetEnv("TEMP"); 540dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter if (temp_dir == NULL || temp_dir[0] == '\0') 541dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return String("\\temp\\"); 542dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter else if (String(temp_dir).EndsWith("\\")) 543dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return String(temp_dir); 544dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter else 545dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return String::Format("%s\\", temp_dir); 546dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#else 547dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return String("/tmp/"); 54846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif // GTEST_OS_WINDOWS_MOBILE 549dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 550dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 551dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter void CreateTextFile(const char* filename) { 552dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FILE* f = posix::FOpen(filename, "w"); 553dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter fprintf(f, "text\n"); 554dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter fclose(f); 555dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 556dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 557dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Strings representing a directory and a file, with identical paths 558dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // except for the trailing separator character that distinquishes 559dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // a directory named 'test' from a file named 'test'. Example names: 560dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath testdata_path_; // "/tmp/directory_creation/test/" 561dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath testdata_file_; // "/tmp/directory_creation/test" 562dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath unique_file0_; // "/tmp/directory_creation/test/unique.txt" 563dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath unique_file1_; // "/tmp/directory_creation/test/unique_1.txt" 564dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 565dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 566dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST_F(DirectoryCreationTest, CreateDirectoriesRecursively) { 567dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.c_str(); 568dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively()); 569dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(testdata_path_.DirectoryExists()); 570dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 571dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 572dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST_F(DirectoryCreationTest, CreateDirectoriesForAlreadyExistingPath) { 573dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.c_str(); 574dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively()); 575dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Call 'create' again... should still succeed. 576dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively()); 577dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 578dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 579dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST_F(DirectoryCreationTest, CreateDirectoriesAndUniqueFilename) { 580dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath file_path(FilePath::GenerateUniqueFileName(testdata_path_, 581dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("unique"), "txt")); 582dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ(unique_file0_.c_str(), file_path.c_str()); 583dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(file_path.FileOrDirectoryExists()); // file not there 584dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 585dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter testdata_path_.CreateDirectoriesRecursively(); 586dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(file_path.FileOrDirectoryExists()); // file still not there 587dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter CreateTextFile(file_path.c_str()); 588dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(file_path.FileOrDirectoryExists()); 589dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 590dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath file_path2(FilePath::GenerateUniqueFileName(testdata_path_, 591dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath("unique"), "txt")); 592dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ(unique_file1_.c_str(), file_path2.c_str()); 593dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(file_path2.FileOrDirectoryExists()); // file not there 594dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter CreateTextFile(file_path2.c_str()); 595dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(file_path2.FileOrDirectoryExists()); 596dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 597dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 598dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST_F(DirectoryCreationTest, CreateDirectoriesFail) { 599dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // force a failure by putting a file where we will try to create a directory. 600dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter CreateTextFile(testdata_file_.c_str()); 601dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(testdata_file_.FileOrDirectoryExists()); 602dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(testdata_file_.DirectoryExists()); 603dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(testdata_file_.CreateDirectoriesRecursively()); 604dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 605dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 606dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(NoDirectoryCreationTest, CreateNoDirectoriesForDefaultXmlFile) { 607dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const FilePath test_detail_xml("test_detail.xml"); 608dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(test_detail_xml.CreateDirectoriesRecursively()); 609dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 610dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 611dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(FilePathTest, DefaultConstructor) { 612dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath fp; 613dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("", fp.c_str()); 614dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 615dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 616dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(FilePathTest, CharAndCopyConstructors) { 617dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const FilePath fp("spicy"); 618dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("spicy", fp.c_str()); 619dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 620dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const FilePath fp_copy(fp); 621dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("spicy", fp_copy.c_str()); 622dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 623dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 624dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(FilePathTest, StringConstructor) { 625dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const FilePath fp(String("cider")); 626dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("cider", fp.c_str()); 627dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 628dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 629dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(FilePathTest, Set) { 630dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const FilePath apple("apple"); 631dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter FilePath mac("mac"); 632dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter mac.Set(apple); // Implement Set() since overloading operator= is forbidden. 633dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("apple", mac.c_str()); 634dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("apple", apple.c_str()); 635dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 636dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 637dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(FilePathTest, ToString) { 638dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const FilePath file("drink"); 639dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter String str(file.ToString()); 640dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("drink", str.c_str()); 641dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 642dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 643dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(FilePathTest, RemoveExtension) { 644dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("app", FilePath("app.exe").RemoveExtension("exe").c_str()); 645dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("APP", FilePath("APP.EXE").RemoveExtension("exe").c_str()); 646dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 647dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 648dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(FilePathTest, RemoveExtensionWhenThereIsNoExtension) { 649dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_STREQ("app", FilePath("app").RemoveExtension("exe").c_str()); 650dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 651dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 652dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(FilePathTest, IsDirectory) { 653dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(FilePath("cola").IsDirectory()); 654dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(FilePath("koala" GTEST_PATH_SEP_).IsDirectory()); 65546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#if GTEST_HAS_ALT_PATH_SEP_ 65646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_TRUE(FilePath("koala/").IsDirectory()); 65746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif 658dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 659dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 660dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(FilePathTest, IsAbsolutePath) { 661dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(FilePath("is" GTEST_PATH_SEP_ "relative").IsAbsolutePath()); 662dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(FilePath("").IsAbsolutePath()); 663dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#if GTEST_OS_WINDOWS 664dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(FilePath("c:\\" GTEST_PATH_SEP_ "is_not" 665dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GTEST_PATH_SEP_ "relative").IsAbsolutePath()); 666dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(FilePath("c:foo" GTEST_PATH_SEP_ "bar").IsAbsolutePath()); 66746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_TRUE(FilePath("c:/" GTEST_PATH_SEP_ "is_not" 66846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_PATH_SEP_ "relative").IsAbsolutePath()); 669dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#else 670dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(FilePath(GTEST_PATH_SEP_ "is_not" GTEST_PATH_SEP_ "relative") 671dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .IsAbsolutePath()); 672dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#endif // GTEST_OS_WINDOWS 673dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 674dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 67546108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(FilePathTest, IsRootDirectory) { 67646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#if GTEST_OS_WINDOWS 67746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_TRUE(FilePath("a:\\").IsRootDirectory()); 67846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_TRUE(FilePath("Z:/").IsRootDirectory()); 67946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_TRUE(FilePath("e://").IsRootDirectory()); 68046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_FALSE(FilePath("").IsRootDirectory()); 68146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_FALSE(FilePath("b:").IsRootDirectory()); 68246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_FALSE(FilePath("b:a").IsRootDirectory()); 68346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_FALSE(FilePath("8:/").IsRootDirectory()); 68446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_FALSE(FilePath("c|/").IsRootDirectory()); 68546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#else 68646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_TRUE(FilePath("/").IsRootDirectory()); 68746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_TRUE(FilePath("//").IsRootDirectory()); 68846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_FALSE(FilePath("").IsRootDirectory()); 68946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_FALSE(FilePath("\\").IsRootDirectory()); 69046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_FALSE(FilePath("/x").IsRootDirectory()); 69146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif 69246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 69346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 694dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} // namespace 695dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} // namespace internal 696dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} // namespace testing 697