42#if GTEST_OS_WINDOWS_MOBILE
52#if GTEST_OS_WINDOWS_MOBILE
55int remove(
const char* path) {
56 LPCWSTR wpath = String::AnsiToUtf16(path);
57 int ret = DeleteFile(wpath) ? 0 : -1;
62int _rmdir(
const char* path) {
63 FilePath filepath(path);
64 LPCWSTR wpath = String::AnsiToUtf16(
65 filepath.RemoveTrailingPathSeparator().c_str());
66 int ret = RemoveDirectory(wpath) ? 0 : -1;
73TEST(GetCurrentDirTest, ReturnsCurrentDir) {
74 const FilePath original_dir = FilePath::GetCurrentDir();
78 const FilePath cwd = FilePath::GetCurrentDir();
81# if GTEST_OS_WINDOWS || GTEST_OS_OS2
84 const char*
const cwd_without_drive = strchr(cwd.c_str(),
':');
97TEST(IsEmptyTest, ReturnsTrueForEmptyPath) {
101TEST(IsEmptyTest, ReturnsFalseForNonEmptyPath) {
109TEST(RemoveDirectoryNameTest, WhenEmptyName) {
110 EXPECT_EQ(
"", FilePath(
"").RemoveDirectoryName().
string());
114TEST(RemoveDirectoryNameTest, ButNoDirectory) {
116 FilePath(
"afile").RemoveDirectoryName().
string());
120TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileName) {
126TEST(RemoveDirectoryNameTest, WhereThereIsNoFileName) {
132TEST(RemoveDirectoryNameTest, ShouldGiveFileName) {
134 FilePath(
"adir" GTEST_PATH_SEP_ "afile").RemoveDirectoryName().
string());
138TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileName) {
141 .RemoveDirectoryName().
string());
144#if GTEST_HAS_ALT_PATH_SEP_
150TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileNameForAlternateSeparator) {
151 EXPECT_EQ(
"afile", FilePath(
"/afile").RemoveDirectoryName().
string());
155TEST(RemoveDirectoryNameTest, WhereThereIsNoFileNameForAlternateSeparator) {
156 EXPECT_EQ(
"", FilePath(
"adir/").RemoveDirectoryName().
string());
160TEST(RemoveDirectoryNameTest, ShouldGiveFileNameForAlternateSeparator) {
161 EXPECT_EQ(
"afile", FilePath(
"adir/afile").RemoveDirectoryName().
string());
165TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileNameForAlternateSeparator) {
167 FilePath(
"adir/subdir/afile").RemoveDirectoryName().
string());
173TEST(RemoveFileNameTest, EmptyName) {
174#if GTEST_OS_WINDOWS_MOBILE
183TEST(RemoveFileNameTest, ButNoFile) {
189TEST(RemoveFileNameTest, GivesDirName) {
195TEST(RemoveFileNameTest, GivesDirAndSubDirName) {
198 .RemoveFileName().
string());
202TEST(RemoveFileNameTest, GivesRootDir) {
207#if GTEST_HAS_ALT_PATH_SEP_
213TEST(RemoveFileNameTest, ButNoFileForAlternateSeparator) {
215 FilePath(
"adir/").RemoveFileName().
string());
219TEST(RemoveFileNameTest, GivesDirNameForAlternateSeparator) {
221 FilePath(
"adir/afile").RemoveFileName().
string());
225TEST(RemoveFileNameTest, GivesDirAndSubDirNameForAlternateSeparator) {
227 FilePath(
"adir/subdir/afile").RemoveFileName().
string());
231TEST(RemoveFileNameTest, GivesRootDirForAlternateSeparator) {
237TEST(MakeFileNameTest, GenerateWhenNumberIsZero) {
238 FilePath actual = FilePath::MakeFileName(FilePath(
"foo"), FilePath(
"bar"),
243TEST(MakeFileNameTest, GenerateFileNameNumberGtZero) {
244 FilePath actual = FilePath::MakeFileName(FilePath(
"foo"), FilePath(
"bar"),
249TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberIsZero) {
250 FilePath actual = FilePath::MakeFileName(FilePath(
"foo" GTEST_PATH_SEP_),
251 FilePath(
"bar"), 0,
"xml");
255TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberGtZero) {
256 FilePath actual = FilePath::MakeFileName(FilePath(
"foo" GTEST_PATH_SEP_),
257 FilePath(
"bar"), 12,
"xml");
261TEST(MakeFileNameTest, GenerateWhenNumberIsZeroAndDirIsEmpty) {
262 FilePath actual = FilePath::MakeFileName(FilePath(
""), FilePath(
"bar"),
267TEST(MakeFileNameTest, GenerateWhenNumberIsNotZeroAndDirIsEmpty) {
268 FilePath actual = FilePath::MakeFileName(FilePath(
""), FilePath(
"bar"),
270 EXPECT_EQ(
"bar_14.xml", actual.string());
273TEST(ConcatPathsTest, WorksWhenDirDoesNotEndWithPathSep) {
274 FilePath actual = FilePath::ConcatPaths(FilePath(
"foo"),
275 FilePath(
"bar.xml"));
279TEST(ConcatPathsTest, WorksWhenPath1EndsWithPathSep) {
280 FilePath actual = FilePath::ConcatPaths(FilePath(
"foo" GTEST_PATH_SEP_),
281 FilePath(
"bar.xml"));
285TEST(ConcatPathsTest, Path1BeingEmpty) {
286 FilePath actual = FilePath::ConcatPaths(FilePath(
""),
287 FilePath(
"bar.xml"));
291TEST(ConcatPathsTest, Path2BeingEmpty) {
292 FilePath actual = FilePath::ConcatPaths(FilePath(
"foo"), FilePath(
""));
296TEST(ConcatPathsTest, BothPathBeingEmpty) {
297 FilePath actual = FilePath::ConcatPaths(FilePath(
""),
302TEST(ConcatPathsTest, Path1ContainsPathSep) {
303 FilePath actual = FilePath::ConcatPaths(FilePath(
"foo" GTEST_PATH_SEP_ "bar"),
304 FilePath(
"foobar.xml"));
309TEST(ConcatPathsTest, Path2ContainsPathSep) {
310 FilePath actual = FilePath::ConcatPaths(
317TEST(ConcatPathsTest, Path2EndsWithPathSep) {
318 FilePath actual = FilePath::ConcatPaths(FilePath(
"foo"),
324TEST(RemoveTrailingPathSeparatorTest, EmptyString) {
325 EXPECT_EQ(
"", FilePath(
"").RemoveTrailingPathSeparator().
string());
329TEST(RemoveTrailingPathSeparatorTest, FileNoSlashString) {
330 EXPECT_EQ(
"foo", FilePath(
"foo").RemoveTrailingPathSeparator().
string());
334TEST(RemoveTrailingPathSeparatorTest, ShouldRemoveTrailingSeparator) {
336 FilePath(
"foo" GTEST_PATH_SEP_).RemoveTrailingPathSeparator().
string());
337#if GTEST_HAS_ALT_PATH_SEP_
338 EXPECT_EQ(
"foo", FilePath(
"foo/").RemoveTrailingPathSeparator().
string());
343TEST(RemoveTrailingPathSeparatorTest, ShouldRemoveLastSeparator) {
346 .RemoveTrailingPathSeparator().
string());
350TEST(RemoveTrailingPathSeparatorTest, ShouldReturnUnmodified) {
353 .RemoveTrailingPathSeparator().
string());
356TEST(DirectoryTest, RootDirectoryExists) {
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';
363 EXPECT_TRUE(FilePath(current_drive).DirectoryExists());
370TEST(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_);
387#if !GTEST_OS_WINDOWS_MOBILE
389TEST(DirectoryTest, EmptyPathDirectoryDoesNotExist) {
394TEST(DirectoryTest, CurrentDirectoryExists) {
409TEST(NormalizeTest, MultipleConsecutiveSepaparatorsInMidstring) {
420TEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringStart) {
430TEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringEnd) {
439#if GTEST_HAS_ALT_PATH_SEP_
444TEST(NormalizeTest, MixAlternateSeparatorAtStringEnd) {
446 FilePath(
"foo/").
string());
455TEST(AssignmentOperatorTest, DefaultAssignedToNonDefault) {
456 FilePath default_path;
457 FilePath non_default_path(
"path");
458 non_default_path = default_path;
459 EXPECT_EQ(
"", non_default_path.string());
463TEST(AssignmentOperatorTest, NonDefaultAssignedToDefault) {
464 FilePath non_default_path(
"path");
465 FilePath default_path;
466 default_path = non_default_path;
467 EXPECT_EQ(
"path", default_path.string());
468 EXPECT_EQ(
"path", non_default_path.string());
471TEST(AssignmentOperatorTest, ConstAssignedToNonConst) {
472 const FilePath const_default_path(
"const_path");
473 FilePath non_default_path(
"path");
474 non_default_path = const_default_path;
475 EXPECT_EQ(
"const_path", non_default_path.string());
478class DirectoryCreationTest :
public Test {
480 void SetUp()
override {
497 void TearDown()
override {
504 void CreateTextFile(
const char* filename) {
506 fprintf(f,
"text\n");
519TEST_F(DirectoryCreationTest, CreateDirectoriesRecursively) {
525TEST_F(DirectoryCreationTest, CreateDirectoriesForAlreadyExistingPath) {
532TEST_F(DirectoryCreationTest, CreateDirectoriesAndUniqueFilename) {
533 FilePath file_path(FilePath::GenerateUniqueFileName(
testdata_path_,
534 FilePath(
"unique"),
"txt"));
540 CreateTextFile(file_path.c_str());
543 FilePath file_path2(FilePath::GenerateUniqueFileName(
testdata_path_,
544 FilePath(
"unique"),
"txt"));
547 CreateTextFile(file_path2.c_str());
551TEST_F(DirectoryCreationTest, CreateDirectoriesFail) {
559TEST(NoDirectoryCreationTest, CreateNoDirectoriesForDefaultXmlFile) {
560 const FilePath test_detail_xml(
"test_detail.xml");
561 EXPECT_FALSE(test_detail_xml.CreateDirectoriesRecursively());
564TEST(FilePathTest, DefaultConstructor) {
569TEST(FilePathTest, CharAndCopyConstructors) {
570 const FilePath fp(
"spicy");
573 const FilePath fp_copy(fp);
577TEST(FilePathTest, StringConstructor) {
578 const FilePath fp(std::string(
"cider"));
582TEST(FilePathTest, Set) {
583 const FilePath apple(
"apple");
590TEST(FilePathTest, ToString) {
591 const FilePath
file(
"drink");
595TEST(FilePathTest, RemoveExtension) {
596 EXPECT_EQ(
"app", FilePath(
"app.cc").RemoveExtension(
"cc").
string());
597 EXPECT_EQ(
"app", FilePath(
"app.exe").RemoveExtension(
"exe").
string());
598 EXPECT_EQ(
"APP", FilePath(
"APP.EXE").RemoveExtension(
"exe").
string());
601TEST(FilePathTest, RemoveExtensionWhenThereIsNoExtension) {
602 EXPECT_EQ(
"app", FilePath(
"app").RemoveExtension(
"exe").
string());
605TEST(FilePathTest, IsDirectory) {
608#if GTEST_HAS_ALT_PATH_SEP_
613TEST(FilePathTest, IsAbsolutePath) {
628TEST(FilePathTest, IsRootDirectory) {
#define EXPECT_EQ(val1, val2)
#define EXPECT_TRUE(condition)
#define EXPECT_STREQ(s1, s2)
#define ASSERT_TRUE(condition)
#define EXPECT_FALSE(condition)
GTEST_API_ std::string TempDir()
TEST(IsXDigitTest, WorksForNarrowAscii)
FilePath GetCurrentExecutableName()
TEST_F(ListenerTest, DoesFoo)
int ChDir(const char *dir)
int RmDir(const char *dir)
FILE * FOpen(const char *path, const char *mode)