38 #include "gtest/internal/gtest-filepath.h"
39 #include "gtest/gtest.h"
40 #include "src/gtest-internal-inl.h"
42 #if GTEST_OS_WINDOWS_MOBILE
44 #elif GTEST_OS_WINDOWS
46 #endif // GTEST_OS_WINDOWS_MOBILE
52 #if GTEST_OS_WINDOWS_MOBILE
55 int remove(
const char*
path) {
56 LPCWSTR wpath = String::AnsiToUtf16(
path);
57 int ret = DeleteFile(wpath) ? 0 : -1;
62 int _rmdir(
const char*
path) {
64 LPCWSTR wpath = String::AnsiToUtf16(
65 filepath.RemoveTrailingPathSeparator().c_str());
66 int ret = RemoveDirectory(wpath) ? 0 : -1;
73 TEST(GetCurrentDirTest, ReturnsCurrentDir) {
81 # if GTEST_OS_WINDOWS || GTEST_OS_OS2
84 const char*
const cwd_without_drive = strchr(
cwd.c_str(),
':');
95 #endif // GTEST_OS_WINDOWS_MOBILE
97 TEST(IsEmptyTest, ReturnsTrueForEmptyPath) {
101 TEST(IsEmptyTest, ReturnsFalseForNonEmptyPath) {
109 TEST(RemoveDirectoryNameTest, WhenEmptyName) {
114 TEST(RemoveDirectoryNameTest, ButNoDirectory) {
116 FilePath(
"afile").RemoveDirectoryName().
string());
120 TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileName) {
126 TEST(RemoveDirectoryNameTest, WhereThereIsNoFileName) {
132 TEST(RemoveDirectoryNameTest, ShouldGiveFileName) {
138 TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileName) {
141 .RemoveDirectoryName().
string());
144 #if GTEST_HAS_ALT_PATH_SEP_
150 TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileNameForAlternateSeparator) {
155 TEST(RemoveDirectoryNameTest, WhereThereIsNoFileNameForAlternateSeparator) {
160 TEST(RemoveDirectoryNameTest, ShouldGiveFileNameForAlternateSeparator) {
165 TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileNameForAlternateSeparator) {
167 FilePath(
"adir/subdir/afile").RemoveDirectoryName().
string());
173 TEST(RemoveFileNameTest, EmptyName) {
174 #if GTEST_OS_WINDOWS_MOBILE
183 TEST(RemoveFileNameTest, ButNoFile) {
189 TEST(RemoveFileNameTest, GivesDirName) {
195 TEST(RemoveFileNameTest, GivesDirAndSubDirName) {
198 .RemoveFileName().
string());
202 TEST(RemoveFileNameTest, GivesRootDir) {
207 #if GTEST_HAS_ALT_PATH_SEP_
213 TEST(RemoveFileNameTest, ButNoFileForAlternateSeparator) {
215 FilePath(
"adir/").RemoveFileName().
string());
219 TEST(RemoveFileNameTest, GivesDirNameForAlternateSeparator) {
221 FilePath(
"adir/afile").RemoveFileName().
string());
225 TEST(RemoveFileNameTest, GivesDirAndSubDirNameForAlternateSeparator) {
227 FilePath(
"adir/subdir/afile").RemoveFileName().
string());
231 TEST(RemoveFileNameTest, GivesRootDirForAlternateSeparator) {
237 TEST(MakeFileNameTest, GenerateWhenNumberIsZero) {
243 TEST(MakeFileNameTest, GenerateFileNameNumberGtZero) {
249 TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberIsZero) {
255 TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberGtZero) {
261 TEST(MakeFileNameTest, GenerateWhenNumberIsZeroAndDirIsEmpty) {
267 TEST(MakeFileNameTest, GenerateWhenNumberIsNotZeroAndDirIsEmpty) {
270 EXPECT_EQ(
"bar_14.xml", actual.string());
273 TEST(ConcatPathsTest, WorksWhenDirDoesNotEndWithPathSep) {
279 TEST(ConcatPathsTest, WorksWhenPath1EndsWithPathSep) {
285 TEST(ConcatPathsTest, Path1BeingEmpty) {
291 TEST(ConcatPathsTest, Path2BeingEmpty) {
296 TEST(ConcatPathsTest, BothPathBeingEmpty) {
302 TEST(ConcatPathsTest, Path1ContainsPathSep) {
309 TEST(ConcatPathsTest, Path2ContainsPathSep) {
317 TEST(ConcatPathsTest, Path2EndsWithPathSep) {
324 TEST(RemoveTrailingPathSeparatorTest, EmptyString) {
329 TEST(RemoveTrailingPathSeparatorTest, FileNoSlashString) {
334 TEST(RemoveTrailingPathSeparatorTest, ShouldRemoveTrailingSeparator) {
337 #if GTEST_HAS_ALT_PATH_SEP_
343 TEST(RemoveTrailingPathSeparatorTest, ShouldRemoveLastSeparator) {
346 .RemoveTrailingPathSeparator().
string());
350 TEST(RemoveTrailingPathSeparatorTest, ShouldReturnUnmodified) {
353 .RemoveTrailingPathSeparator().
string());
356 TEST(DirectoryTest, RootDirectoryExists) {
357 #if GTEST_OS_WINDOWS // We are on Windows.
358 char current_drive[_MAX_PATH];
359 current_drive[0] =
static_cast<char>(_getdrive() +
'A' - 1);
360 current_drive[1] =
':';
361 current_drive[2] =
'\\';
362 current_drive[3] =
'\0';
366 #endif // GTEST_OS_WINDOWS
370 TEST(DirectoryTest, RootOfWrongDriveDoesNotExists) {
371 const int saved_drive_ = _getdrive();
373 for (
char drive =
'Z'; drive >=
'A'; drive--)
374 if (_chdrive(drive -
'A' + 1) == -1) {
375 char non_drive[_MAX_PATH];
376 non_drive[0] = drive;
383 _chdrive(saved_drive_);
385 #endif // GTEST_OS_WINDOWS
387 #if !GTEST_OS_WINDOWS_MOBILE
389 TEST(DirectoryTest, EmptyPathDirectoryDoesNotExist) {
392 #endif // !GTEST_OS_WINDOWS_MOBILE
394 TEST(DirectoryTest, CurrentDirectoryExists) {
395 #if GTEST_OS_WINDOWS // We are on Windows.
396 # ifndef _WIN32_CE // Windows CE doesn't have a current directory.
405 #endif // GTEST_OS_WINDOWS
409 TEST(NormalizeTest, MultipleConsecutiveSepaparatorsInMidstring) {
420 TEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringStart) {
430 TEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringEnd) {
439 #if GTEST_HAS_ALT_PATH_SEP_
444 TEST(NormalizeTest, MixAlternateSeparatorAtStringEnd) {
455 TEST(AssignmentOperatorTest, DefaultAssignedToNonDefault) {
458 non_default_path = default_path;
459 EXPECT_EQ(
"", non_default_path.string());
463 TEST(AssignmentOperatorTest, NonDefaultAssignedToDefault) {
466 default_path = non_default_path;
467 EXPECT_EQ(
"path", default_path.string());
468 EXPECT_EQ(
"path", non_default_path.string());
471 TEST(AssignmentOperatorTest, ConstAssignedToNonConst) {
472 const FilePath const_default_path(
"const_path");
474 non_default_path = const_default_path;
475 EXPECT_EQ(
"const_path", non_default_path.string());
478 class DirectoryCreationTest :
public Test {
480 void SetUp()
override {
497 void TearDown()
override {
504 void CreateTextFile(
const char*
filename) {
506 fprintf(f,
"text\n");
519 TEST_F(DirectoryCreationTest, CreateDirectoriesRecursively) {
525 TEST_F(DirectoryCreationTest, CreateDirectoriesForAlreadyExistingPath) {
532 TEST_F(DirectoryCreationTest, CreateDirectoriesAndUniqueFilename) {
540 CreateTextFile(file_path.c_str());
547 CreateTextFile(file_path2.c_str());
551 TEST_F(DirectoryCreationTest, CreateDirectoriesFail) {
559 TEST(NoDirectoryCreationTest, CreateNoDirectoriesForDefaultXmlFile) {
560 const FilePath test_detail_xml(
"test_detail.xml");
561 EXPECT_FALSE(test_detail_xml.CreateDirectoriesRecursively());
564 TEST(FilePathTest, DefaultConstructor) {
569 TEST(FilePathTest, CharAndCopyConstructors) {
577 TEST(FilePathTest, StringConstructor) {
582 TEST(FilePathTest, Set) {
595 TEST(FilePathTest, RemoveExtension) {
601 TEST(FilePathTest, RemoveExtensionWhenThereIsNoExtension) {
605 TEST(FilePathTest, IsDirectory) {
608 #if GTEST_HAS_ALT_PATH_SEP_
613 TEST(FilePathTest, IsAbsolutePath) {
625 #endif // GTEST_OS_WINDOWS
628 TEST(FilePathTest, IsRootDirectory) {