1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright 2008, Google Inc. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// All rights reserved. 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Redistribution and use in source and binary forms, with or without 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// modification, are permitted provided that the following conditions are 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// met: 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// * Redistributions of source code must retain the above copyright 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// notice, this list of conditions and the following disclaimer. 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// * Redistributions in binary form must reproduce the above 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// copyright notice, this list of conditions and the following disclaimer 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// in the documentation and/or other materials provided with the 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// distribution. 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// * Neither the name of Google Inc. nor the names of its 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// contributors may be used to endorse or promote products derived from 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// this software without specific prior written permission. 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Authors: keith.ray@gmail.com (Keith Ray) 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Google Test filepath utilities 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This file tests classes and functions used internally by 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Google Test. They are subject to change without notice. 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This file is #included from gtest_unittest.cc, to avoid changing 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// build or make-files for some existing Google Test clients. Do not 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// #include this file anywhere else! 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 41731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "gtest/internal/gtest-filepath.h" 42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "gtest/gtest.h" 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Indicates that this translation unit is part of Google Test's 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// implementation. It must come before gtest-internal-inl.h is 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// included, or there will be a compiler error. This trick is to 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// prevent a user from accidentally including gtest-internal-inl.h in 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// his code. 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTEST_IMPLEMENTATION_ 1 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "src/gtest-internal-inl.h" 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#undef GTEST_IMPLEMENTATION_ 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if GTEST_OS_WINDOWS_MOBILE 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen# include <windows.h> // NOLINT 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#elif GTEST_OS_WINDOWS 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen# include <direct.h> // NOLINT 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // GTEST_OS_WINDOWS_MOBILE 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace testing { 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace internal { 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if GTEST_OS_WINDOWS_MOBILE 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TODO(wan@google.com): Move these to the POSIX adapter section in 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// gtest-port.h. 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Windows CE doesn't have the remove C function. 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint remove(const char* path) { 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LPCWSTR wpath = String::AnsiToUtf16(path); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ret = DeleteFile(wpath) ? 0 : -1; 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delete [] wpath; 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ret; 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Windows CE doesn't have the _rmdir C function. 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint _rmdir(const char* path) { 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath filepath(path); 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LPCWSTR wpath = String::AnsiToUtf16( 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch filepath.RemoveTrailingPathSeparator().c_str()); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ret = RemoveDirectory(wpath) ? 0 : -1; 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delete [] wpath; 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ret; 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(GetCurrentDirTest, ReturnsCurrentDir) { 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath original_dir = FilePath::GetCurrentDir(); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(original_dir.IsEmpty()); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch posix::ChDir(GTEST_PATH_SEP_); 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath cwd = FilePath::GetCurrentDir(); 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch posix::ChDir(original_dir.c_str()); 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen# if GTEST_OS_WINDOWS 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Skips the ":". 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const char* const cwd_without_drive = strchr(cwd.c_str(), ':'); 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(cwd_without_drive != NULL); 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ(GTEST_PATH_SEP_, cwd_without_drive + 1); 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen# else 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ(GTEST_PATH_SEP_, cwd.c_str()); 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen# endif 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // GTEST_OS_WINDOWS_MOBILE 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(IsEmptyTest, ReturnsTrueForEmptyPath) { 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath("").IsEmpty()); 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath(NULL).IsEmpty()); 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(IsEmptyTest, ReturnsFalseForNonEmptyPath) { 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath("a").IsEmpty()); 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath(".").IsEmpty()); 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath("a/b").IsEmpty()); 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath("a\\b\\").IsEmpty()); 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveDirectoryName "" -> "" 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveDirectoryNameTest, WhenEmptyName) { 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("", FilePath("").RemoveDirectoryName().c_str()); 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveDirectoryName "afile" -> "afile" 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveDirectoryNameTest, ButNoDirectory) { 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("afile", 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("afile").RemoveDirectoryName().c_str()); 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveDirectoryName "/afile" -> "afile" 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveDirectoryNameTest, RootFileShouldGiveFileName) { 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("afile", 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath(GTEST_PATH_SEP_ "afile").RemoveDirectoryName().c_str()); 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveDirectoryName "adir/" -> "" 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveDirectoryNameTest, WhereThereIsNoFileName) { 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("", 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("adir" GTEST_PATH_SEP_).RemoveDirectoryName().c_str()); 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveDirectoryName "adir/afile" -> "afile" 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveDirectoryNameTest, ShouldGiveFileName) { 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("afile", 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("adir" GTEST_PATH_SEP_ "afile").RemoveDirectoryName().c_str()); 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveDirectoryName "adir/subdir/afile" -> "afile" 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileName) { 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("afile", 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_ "afile") 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .RemoveDirectoryName().c_str()); 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if GTEST_HAS_ALT_PATH_SEP_ 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests that RemoveDirectoryName() works with the alternate separator 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// on Windows. 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveDirectoryName("/afile") -> "afile" 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveDirectoryNameTest, RootFileShouldGiveFileNameForAlternateSeparator) { 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("afile", 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("/afile").RemoveDirectoryName().c_str()); 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveDirectoryName("adir/") -> "" 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveDirectoryNameTest, WhereThereIsNoFileNameForAlternateSeparator) { 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("", 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("adir/").RemoveDirectoryName().c_str()); 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveDirectoryName("adir/afile") -> "afile" 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveDirectoryNameTest, ShouldGiveFileNameForAlternateSeparator) { 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("afile", 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("adir/afile").RemoveDirectoryName().c_str()); 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveDirectoryName("adir/subdir/afile") -> "afile" 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileNameForAlternateSeparator) { 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("afile", 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("adir/subdir/afile").RemoveDirectoryName().c_str()); 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveFileName "" -> "./" 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveFileNameTest, EmptyName) { 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if GTEST_OS_WINDOWS_MOBILE 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // On Windows CE, we use the root as the current directory. 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ(GTEST_PATH_SEP_, 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("").RemoveFileName().c_str()); 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("." GTEST_PATH_SEP_, 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("").RemoveFileName().c_str()); 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveFileName "adir/" -> "adir/" 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveFileNameTest, ButNoFile) { 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("adir" GTEST_PATH_SEP_, 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("adir" GTEST_PATH_SEP_).RemoveFileName().c_str()); 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveFileName "adir/afile" -> "adir/" 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveFileNameTest, GivesDirName) { 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("adir" GTEST_PATH_SEP_, 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("adir" GTEST_PATH_SEP_ "afile") 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .RemoveFileName().c_str()); 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveFileName "adir/subdir/afile" -> "adir/subdir/" 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveFileNameTest, GivesDirAndSubDirName) { 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_, 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_ "afile") 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .RemoveFileName().c_str()); 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveFileName "/afile" -> "/" 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveFileNameTest, GivesRootDir) { 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ(GTEST_PATH_SEP_, 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath(GTEST_PATH_SEP_ "afile").RemoveFileName().c_str()); 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if GTEST_HAS_ALT_PATH_SEP_ 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests that RemoveFileName() works with the alternate separator on 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Windows. 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveFileName("adir/") -> "adir/" 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveFileNameTest, ButNoFileForAlternateSeparator) { 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("adir" GTEST_PATH_SEP_, 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("adir/").RemoveFileName().c_str()); 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveFileName("adir/afile") -> "adir/" 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveFileNameTest, GivesDirNameForAlternateSeparator) { 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("adir" GTEST_PATH_SEP_, 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("adir/afile").RemoveFileName().c_str()); 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveFileName("adir/subdir/afile") -> "adir/subdir/" 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveFileNameTest, GivesDirAndSubDirNameForAlternateSeparator) { 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_, 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("adir/subdir/afile").RemoveFileName().c_str()); 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveFileName("/afile") -> "\" 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveFileNameTest, GivesRootDirForAlternateSeparator) { 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ(GTEST_PATH_SEP_, 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("/afile").RemoveFileName().c_str()); 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(MakeFileNameTest, GenerateWhenNumberIsZero) { 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath actual = FilePath::MakeFileName(FilePath("foo"), FilePath("bar"), 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 0, "xml"); 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.c_str()); 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(MakeFileNameTest, GenerateFileNameNumberGtZero) { 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath actual = FilePath::MakeFileName(FilePath("foo"), FilePath("bar"), 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12, "xml"); 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar_12.xml", actual.c_str()); 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(MakeFileNameTest, GenerateFileNameWithSlashNumberIsZero) { 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath actual = FilePath::MakeFileName(FilePath("foo" GTEST_PATH_SEP_), 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("bar"), 0, "xml"); 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.c_str()); 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(MakeFileNameTest, GenerateFileNameWithSlashNumberGtZero) { 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath actual = FilePath::MakeFileName(FilePath("foo" GTEST_PATH_SEP_), 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("bar"), 12, "xml"); 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar_12.xml", actual.c_str()); 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(MakeFileNameTest, GenerateWhenNumberIsZeroAndDirIsEmpty) { 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath actual = FilePath::MakeFileName(FilePath(""), FilePath("bar"), 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 0, "xml"); 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("bar.xml", actual.c_str()); 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(MakeFileNameTest, GenerateWhenNumberIsNotZeroAndDirIsEmpty) { 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath actual = FilePath::MakeFileName(FilePath(""), FilePath("bar"), 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14, "xml"); 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("bar_14.xml", actual.c_str()); 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(ConcatPathsTest, WorksWhenDirDoesNotEndWithPathSep) { 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath actual = FilePath::ConcatPaths(FilePath("foo"), 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("bar.xml")); 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.c_str()); 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 300c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(ConcatPathsTest, WorksWhenPath1EndsWithPathSep) { 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath actual = FilePath::ConcatPaths(FilePath("foo" GTEST_PATH_SEP_), 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("bar.xml")); 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.c_str()); 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(ConcatPathsTest, Path1BeingEmpty) { 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath actual = FilePath::ConcatPaths(FilePath(""), 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("bar.xml")); 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("bar.xml", actual.c_str()); 310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(ConcatPathsTest, Path2BeingEmpty) { 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath actual = FilePath::ConcatPaths(FilePath("foo"), 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("")); 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_, actual.c_str()); 316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(ConcatPathsTest, BothPathBeingEmpty) { 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath actual = FilePath::ConcatPaths(FilePath(""), 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("")); 321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("", actual.c_str()); 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 324c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(ConcatPathsTest, Path1ContainsPathSep) { 325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath actual = FilePath::ConcatPaths(FilePath("foo" GTEST_PATH_SEP_ "bar"), 326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("foobar.xml")); 327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_ "foobar.xml", 328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch actual.c_str()); 329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 331c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(ConcatPathsTest, Path2ContainsPathSep) { 332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath actual = FilePath::ConcatPaths( 333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("foo" GTEST_PATH_SEP_), 334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("bar" GTEST_PATH_SEP_ "bar.xml")); 335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_ "bar.xml", 336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch actual.c_str()); 337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 339c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(ConcatPathsTest, Path2EndsWithPathSep) { 340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath actual = FilePath::ConcatPaths(FilePath("foo"), 341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("bar" GTEST_PATH_SEP_)); 342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_, actual.c_str()); 343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveTrailingPathSeparator "" -> "" 346c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveTrailingPathSeparatorTest, EmptyString) { 347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("", 348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("").RemoveTrailingPathSeparator().c_str()); 349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveTrailingPathSeparator "foo" -> "foo" 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveTrailingPathSeparatorTest, FileNoSlashString) { 353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo", 354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("foo").RemoveTrailingPathSeparator().c_str()); 355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveTrailingPathSeparator "foo/" -> "foo" 358c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveTrailingPathSeparatorTest, ShouldRemoveTrailingSeparator) { 359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ( 360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "foo", 361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("foo" GTEST_PATH_SEP_).RemoveTrailingPathSeparator().c_str()); 362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if GTEST_HAS_ALT_PATH_SEP_ 363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo", 364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("foo/").RemoveTrailingPathSeparator().c_str()); 365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveTrailingPathSeparator "foo/bar/" -> "foo/bar/" 369c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveTrailingPathSeparatorTest, ShouldRemoveLastSeparator) { 370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar", 371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_) 372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .RemoveTrailingPathSeparator().c_str()); 373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemoveTrailingPathSeparator "foo/bar" -> "foo/bar" 376c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RemoveTrailingPathSeparatorTest, ShouldReturnUnmodified) { 377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar", 378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("foo" GTEST_PATH_SEP_ "bar") 379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .RemoveTrailingPathSeparator().c_str()); 380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 382c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(DirectoryTest, RootDirectoryExists) { 383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if GTEST_OS_WINDOWS // We are on Windows. 384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch char current_drive[_MAX_PATH]; // NOLINT 385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch current_drive[0] = static_cast<char>(_getdrive() + 'A' - 1); 386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch current_drive[1] = ':'; 387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch current_drive[2] = '\\'; 388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch current_drive[3] = '\0'; 389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath(current_drive).DirectoryExists()); 390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath("/").DirectoryExists()); 392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // GTEST_OS_WINDOWS 393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if GTEST_OS_WINDOWS 396c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(DirectoryTest, RootOfWrongDriveDoesNotExists) { 397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const int saved_drive_ = _getdrive(); 398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Find a drive that doesn't exist. Start with 'Z' to avoid common ones. 399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (char drive = 'Z'; drive >= 'A'; drive--) 400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (_chdrive(drive - 'A' + 1) == -1) { 401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch char non_drive[_MAX_PATH]; // NOLINT 402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch non_drive[0] = drive; 403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch non_drive[1] = ':'; 404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch non_drive[2] = '\\'; 405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch non_drive[3] = '\0'; 406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath(non_drive).DirectoryExists()); 407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch _chdrive(saved_drive_); 410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // GTEST_OS_WINDOWS 412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if !GTEST_OS_WINDOWS_MOBILE 414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Windows CE _does_ consider an empty directory to exist. 415c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(DirectoryTest, EmptyPathDirectoryDoesNotExist) { 416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath("").DirectoryExists()); 417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // !GTEST_OS_WINDOWS_MOBILE 419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 420c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(DirectoryTest, CurrentDirectoryExists) { 421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if GTEST_OS_WINDOWS // We are on Windows. 422ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen# ifndef _WIN32_CE // Windows CE doesn't have a current directory. 423ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath(".").DirectoryExists()); 425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath(".\\").DirectoryExists()); 426ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 427ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen# endif // _WIN32_CE 428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath(".").DirectoryExists()); 430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath("./").DirectoryExists()); 431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // GTEST_OS_WINDOWS 432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 434c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(NormalizeTest, NullStringsEqualEmptyDirectory) { 435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("", FilePath(NULL).c_str()); 436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("", FilePath(String(NULL)).c_str()); 437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// "foo/bar" == foo//bar" == "foo///bar" 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(NormalizeTest, MultipleConsecutiveSepaparatorsInMidstring) { 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar", 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("foo" GTEST_PATH_SEP_ "bar").c_str()); 443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar", 444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").c_str()); 445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_ "bar", 446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ 447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_PATH_SEP_ "bar").c_str()); 448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// "/bar" == //bar" == "///bar" 451c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringStart) { 452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ(GTEST_PATH_SEP_ "bar", 453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath(GTEST_PATH_SEP_ "bar").c_str()); 454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ(GTEST_PATH_SEP_ "bar", 455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").c_str()); 456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ(GTEST_PATH_SEP_ "bar", 457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").c_str()); 458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// "foo/" == foo//" == "foo///" 461c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringEnd) { 462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_, 463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("foo" GTEST_PATH_SEP_).c_str()); 464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_, 465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_).c_str()); 466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_, 467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_).c_str()); 468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if GTEST_HAS_ALT_PATH_SEP_ 471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests that separators at the end of the string are normalized 473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// regardless of their combination (e.g. "foo\" =="foo/\" == 474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// "foo\\/"). 475c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(NormalizeTest, MixAlternateSeparatorAtStringEnd) { 476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_, 477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("foo/").c_str()); 478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_, 479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("foo" GTEST_PATH_SEP_ "/").c_str()); 480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("foo" GTEST_PATH_SEP_, 481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("foo//" GTEST_PATH_SEP_).c_str()); 482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 486c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(AssignmentOperatorTest, DefaultAssignedToNonDefault) { 487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath default_path; 488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath non_default_path("path"); 489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch non_default_path = default_path; 490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("", non_default_path.c_str()); 491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("", default_path.c_str()); // RHS var is unchanged. 492c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 494c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(AssignmentOperatorTest, NonDefaultAssignedToDefault) { 495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath non_default_path("path"); 496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath default_path; 497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default_path = non_default_path; 498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("path", default_path.c_str()); 499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("path", non_default_path.c_str()); // RHS var is unchanged. 500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 502c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(AssignmentOperatorTest, ConstAssignedToNonConst) { 503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath const_default_path("const_path"); 504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath non_default_path("path"); 505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch non_default_path = const_default_path; 506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("const_path", non_default_path.c_str()); 507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass DirectoryCreationTest : public Test { 510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetUp() { 512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch testdata_path_.Set(FilePath(String::Format("%s%s%s", 513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TempDir().c_str(), GetCurrentExecutableName().c_str(), 514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "_directory_creation" GTEST_PATH_SEP_ "test" GTEST_PATH_SEP_))); 515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch testdata_file_.Set(testdata_path_.RemoveTrailingPathSeparator()); 516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch unique_file0_.Set(FilePath::MakeFileName(testdata_path_, FilePath("unique"), 518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 0, "txt")); 519c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch unique_file1_.Set(FilePath::MakeFileName(testdata_path_, FilePath("unique"), 520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1, "txt")); 521c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch remove(testdata_file_.c_str()); 523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch remove(unique_file0_.c_str()); 524c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch remove(unique_file1_.c_str()); 525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch posix::RmDir(testdata_path_.c_str()); 526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void TearDown() { 529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch remove(testdata_file_.c_str()); 530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch remove(unique_file0_.c_str()); 531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch remove(unique_file1_.c_str()); 532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch posix::RmDir(testdata_path_.c_str()); 533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch String TempDir() const { 536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if GTEST_OS_WINDOWS_MOBILE 537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return String("\\temp\\"); 538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#elif GTEST_OS_WINDOWS 539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const char* temp_dir = posix::GetEnv("TEMP"); 540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (temp_dir == NULL || temp_dir[0] == '\0') 541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return String("\\temp\\"); 542c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch else if (String(temp_dir).EndsWith("\\")) 543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return String(temp_dir); 544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch else 545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return String::Format("%s\\", temp_dir); 546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return String("/tmp/"); 548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // GTEST_OS_WINDOWS_MOBILE 549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void CreateTextFile(const char* filename) { 552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FILE* f = posix::FOpen(filename, "w"); 553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch fprintf(f, "text\n"); 554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch fclose(f); 555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Strings representing a directory and a file, with identical paths 558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // except for the trailing separator character that distinquishes 559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // a directory named 'test' from a file named 'test'. Example names: 560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath testdata_path_; // "/tmp/directory_creation/test/" 561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath testdata_file_; // "/tmp/directory_creation/test" 562c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath unique_file0_; // "/tmp/directory_creation/test/unique.txt" 563c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath unique_file1_; // "/tmp/directory_creation/test/unique_1.txt" 564c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 566c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(DirectoryCreationTest, CreateDirectoriesRecursively) { 567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.c_str(); 568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively()); 569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(testdata_path_.DirectoryExists()); 570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 572c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(DirectoryCreationTest, CreateDirectoriesForAlreadyExistingPath) { 573c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.c_str(); 574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively()); 575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Call 'create' again... should still succeed. 576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively()); 577c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 578c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 579c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(DirectoryCreationTest, CreateDirectoriesAndUniqueFilename) { 580c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath file_path(FilePath::GenerateUniqueFileName(testdata_path_, 581c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("unique"), "txt")); 582c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ(unique_file0_.c_str(), file_path.c_str()); 583c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(file_path.FileOrDirectoryExists()); // file not there 584c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 585c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch testdata_path_.CreateDirectoriesRecursively(); 586c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(file_path.FileOrDirectoryExists()); // file still not there 587c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CreateTextFile(file_path.c_str()); 588c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(file_path.FileOrDirectoryExists()); 589c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 590c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath file_path2(FilePath::GenerateUniqueFileName(testdata_path_, 591c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath("unique"), "txt")); 592c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ(unique_file1_.c_str(), file_path2.c_str()); 593c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(file_path2.FileOrDirectoryExists()); // file not there 594c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CreateTextFile(file_path2.c_str()); 595c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(file_path2.FileOrDirectoryExists()); 596c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 597c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 598c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(DirectoryCreationTest, CreateDirectoriesFail) { 599c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // force a failure by putting a file where we will try to create a directory. 600c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CreateTextFile(testdata_file_.c_str()); 601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(testdata_file_.FileOrDirectoryExists()); 602c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(testdata_file_.DirectoryExists()); 603c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(testdata_file_.CreateDirectoriesRecursively()); 604c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 605c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 606c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(NoDirectoryCreationTest, CreateNoDirectoriesForDefaultXmlFile) { 607c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath test_detail_xml("test_detail.xml"); 608c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(test_detail_xml.CreateDirectoriesRecursively()); 609c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 610c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 611c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(FilePathTest, DefaultConstructor) { 612c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath fp; 613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("", fp.c_str()); 614c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 615c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 616c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(FilePathTest, CharAndCopyConstructors) { 617c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath fp("spicy"); 618c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("spicy", fp.c_str()); 619c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 620c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath fp_copy(fp); 621c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("spicy", fp_copy.c_str()); 622c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 623c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 624c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(FilePathTest, StringConstructor) { 625c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath fp(String("cider")); 626c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("cider", fp.c_str()); 627c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 628c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 629c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(FilePathTest, Set) { 630c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath apple("apple"); 631c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath mac("mac"); 632c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mac.Set(apple); // Implement Set() since overloading operator= is forbidden. 633c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("apple", mac.c_str()); 634c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("apple", apple.c_str()); 635c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 636c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 637c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(FilePathTest, ToString) { 638c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath file("drink"); 639c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch String str(file.ToString()); 640c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("drink", str.c_str()); 641c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 642c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 643c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(FilePathTest, RemoveExtension) { 644c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("app", FilePath("app.exe").RemoveExtension("exe").c_str()); 645c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("APP", FilePath("APP.EXE").RemoveExtension("exe").c_str()); 646c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 647c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 648c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(FilePathTest, RemoveExtensionWhenThereIsNoExtension) { 649c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_STREQ("app", FilePath("app").RemoveExtension("exe").c_str()); 650c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 651c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 652c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(FilePathTest, IsDirectory) { 653c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath("cola").IsDirectory()); 654c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath("koala" GTEST_PATH_SEP_).IsDirectory()); 655c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if GTEST_HAS_ALT_PATH_SEP_ 656c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath("koala/").IsDirectory()); 657c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 658c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 659c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 660c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(FilePathTest, IsAbsolutePath) { 661c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath("is" GTEST_PATH_SEP_ "relative").IsAbsolutePath()); 662c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath("").IsAbsolutePath()); 663c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if GTEST_OS_WINDOWS 664c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath("c:\\" GTEST_PATH_SEP_ "is_not" 665c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_PATH_SEP_ "relative").IsAbsolutePath()); 666c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath("c:foo" GTEST_PATH_SEP_ "bar").IsAbsolutePath()); 667c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath("c:/" GTEST_PATH_SEP_ "is_not" 668c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_PATH_SEP_ "relative").IsAbsolutePath()); 669c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 670c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath(GTEST_PATH_SEP_ "is_not" GTEST_PATH_SEP_ "relative") 671c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .IsAbsolutePath()); 672c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // GTEST_OS_WINDOWS 673c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 674c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 675c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(FilePathTest, IsRootDirectory) { 676c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if GTEST_OS_WINDOWS 677c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath("a:\\").IsRootDirectory()); 678c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath("Z:/").IsRootDirectory()); 679c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath("e://").IsRootDirectory()); 680c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath("").IsRootDirectory()); 681c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath("b:").IsRootDirectory()); 682c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath("b:a").IsRootDirectory()); 683c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath("8:/").IsRootDirectory()); 684c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath("c|/").IsRootDirectory()); 685c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 686c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath("/").IsRootDirectory()); 687c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(FilePath("//").IsRootDirectory()); 688c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath("").IsRootDirectory()); 689c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath("\\").IsRootDirectory()); 690c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(FilePath("/x").IsRootDirectory()); 691c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 692c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 693c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 694c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 695c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace internal 696c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace testing 697