44 #ifdef GTEST_OS_WINDOWS_MOBILE
46 #elif defined(GTEST_OS_WINDOWS)
48 #endif // GTEST_OS_WINDOWS_MOBILE
54 #ifdef GTEST_OS_WINDOWS_MOBILE
57 int remove(
const char* path) {
58 LPCWSTR wpath = String::AnsiToUtf16(path);
59 int ret = DeleteFile(wpath) ? 0 : -1;
64 int _rmdir(
const char* path) {
65 FilePath filepath(path);
67 String::AnsiToUtf16(filepath.RemoveTrailingPathSeparator().c_str());
68 int ret = RemoveDirectory(wpath) ? 0 : -1;
75 TEST(GetCurrentDirTest, ReturnsCurrentDir) {
76 const FilePath original_dir = FilePath::GetCurrentDir();
80 const FilePath cwd = FilePath::GetCurrentDir();
83 #if defined(GTEST_OS_WINDOWS) || defined(GTEST_OS_OS2)
86 const char*
const cwd_without_drive = strchr(cwd.c_str(),
':');
97 #endif // GTEST_OS_WINDOWS_MOBILE
99 TEST(IsEmptyTest, ReturnsTrueForEmptyPath) {
103 TEST(IsEmptyTest, ReturnsFalseForNonEmptyPath) {
111 TEST(RemoveDirectoryNameTest, WhenEmptyName) {
112 EXPECT_EQ(
"", FilePath(
"").RemoveDirectoryName().
string());
116 TEST(RemoveDirectoryNameTest, ButNoDirectory) {
117 EXPECT_EQ(
"afile", FilePath(
"afile").RemoveDirectoryName().
string());
121 TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileName) {
127 TEST(RemoveDirectoryNameTest, WhereThereIsNoFileName) {
133 TEST(RemoveDirectoryNameTest, ShouldGiveFileName) {
136 FilePath(
"adir" GTEST_PATH_SEP_ "afile").RemoveDirectoryName().
string());
140 TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileName) {
143 .RemoveDirectoryName()
147 #if GTEST_HAS_ALT_PATH_SEP_
153 TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileNameForAlternateSeparator) {
154 EXPECT_EQ(
"afile", FilePath(
"/afile").RemoveDirectoryName().
string());
158 TEST(RemoveDirectoryNameTest, WhereThereIsNoFileNameForAlternateSeparator) {
159 EXPECT_EQ(
"", FilePath(
"adir/").RemoveDirectoryName().
string());
163 TEST(RemoveDirectoryNameTest, ShouldGiveFileNameForAlternateSeparator) {
164 EXPECT_EQ(
"afile", FilePath(
"adir/afile").RemoveDirectoryName().
string());
168 TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileNameForAlternateSeparator) {
170 FilePath(
"adir/subdir/afile").RemoveDirectoryName().
string());
176 TEST(RemoveFileNameTest, EmptyName) {
177 #ifdef GTEST_OS_WINDOWS_MOBILE
179 EXPECT_EQ(GTEST_PATH_SEP_, FilePath(
"").RemoveFileName().
string());
181 EXPECT_EQ(
"." GTEST_PATH_SEP_, FilePath(
"").RemoveFileName().
string());
186 TEST(RemoveFileNameTest, ButNoFile) {
188 FilePath(
"adir" GTEST_PATH_SEP_).RemoveFileName().
string());
192 TEST(RemoveFileNameTest, GivesDirName) {
194 FilePath(
"adir" GTEST_PATH_SEP_
"afile").RemoveFileName().
string());
198 TEST(RemoveFileNameTest, GivesDirAndSubDirName) {
199 EXPECT_EQ(
"adir" GTEST_PATH_SEP_
"subdir" GTEST_PATH_SEP_,
200 FilePath(
"adir" GTEST_PATH_SEP_
"subdir" GTEST_PATH_SEP_
"afile")
206 TEST(RemoveFileNameTest, GivesRootDir) {
208 FilePath(GTEST_PATH_SEP_
"afile").RemoveFileName().
string());
211 #if GTEST_HAS_ALT_PATH_SEP_
217 TEST(RemoveFileNameTest, ButNoFileForAlternateSeparator) {
219 FilePath(
"adir/").RemoveFileName().
string());
223 TEST(RemoveFileNameTest, GivesDirNameForAlternateSeparator) {
225 FilePath(
"adir/afile").RemoveFileName().
string());
229 TEST(RemoveFileNameTest, GivesDirAndSubDirNameForAlternateSeparator) {
230 EXPECT_EQ(
"adir" GTEST_PATH_SEP_
"subdir" GTEST_PATH_SEP_,
231 FilePath(
"adir/subdir/afile").RemoveFileName().
string());
235 TEST(RemoveFileNameTest, GivesRootDirForAlternateSeparator) {
236 EXPECT_EQ(GTEST_PATH_SEP_, FilePath(
"/afile").RemoveFileName().
string());
241 TEST(MakeFileNameTest, GenerateWhenNumberIsZero) {
243 FilePath::MakeFileName(FilePath(
"foo"), FilePath(
"bar"), 0,
"xml");
244 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar.xml", actual.string());
247 TEST(MakeFileNameTest, GenerateFileNameNumberGtZero) {
249 FilePath::MakeFileName(FilePath(
"foo"), FilePath(
"bar"), 12,
"xml");
250 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar_12.xml", actual.string());
253 TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberIsZero) {
254 FilePath actual = FilePath::MakeFileName(FilePath(
"foo" GTEST_PATH_SEP_),
255 FilePath(
"bar"), 0,
"xml");
256 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar.xml", actual.string());
259 TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberGtZero) {
260 FilePath actual = FilePath::MakeFileName(FilePath(
"foo" GTEST_PATH_SEP_),
261 FilePath(
"bar"), 12,
"xml");
262 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar_12.xml", actual.string());
265 TEST(MakeFileNameTest, GenerateWhenNumberIsZeroAndDirIsEmpty) {
267 FilePath::MakeFileName(FilePath(
""), FilePath(
"bar"), 0,
"xml");
271 TEST(MakeFileNameTest, GenerateWhenNumberIsNotZeroAndDirIsEmpty) {
273 FilePath::MakeFileName(FilePath(
""), FilePath(
"bar"), 14,
"xml");
274 EXPECT_EQ(
"bar_14.xml", actual.string());
277 TEST(ConcatPathsTest, WorksWhenDirDoesNotEndWithPathSep) {
278 FilePath actual = FilePath::ConcatPaths(FilePath(
"foo"), FilePath(
"bar.xml"));
279 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar.xml", actual.string());
282 TEST(ConcatPathsTest, WorksWhenPath1EndsWithPathSep) {
283 FilePath actual = FilePath::ConcatPaths(FilePath(
"foo" GTEST_PATH_SEP_),
284 FilePath(
"bar.xml"));
285 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar.xml", actual.string());
288 TEST(ConcatPathsTest, Path1BeingEmpty) {
289 FilePath actual = FilePath::ConcatPaths(FilePath(
""), FilePath(
"bar.xml"));
293 TEST(ConcatPathsTest, Path2BeingEmpty) {
294 FilePath actual = FilePath::ConcatPaths(FilePath(
"foo"), FilePath(
""));
295 EXPECT_EQ(
"foo" GTEST_PATH_SEP_, actual.string());
298 TEST(ConcatPathsTest, BothPathBeingEmpty) {
299 FilePath actual = FilePath::ConcatPaths(FilePath(
""), FilePath(
""));
303 TEST(ConcatPathsTest, Path1ContainsPathSep) {
304 FilePath actual = FilePath::ConcatPaths(FilePath(
"foo" GTEST_PATH_SEP_
"bar"),
305 FilePath(
"foobar.xml"));
306 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar" GTEST_PATH_SEP_
"foobar.xml",
310 TEST(ConcatPathsTest, Path2ContainsPathSep) {
312 FilePath::ConcatPaths(FilePath(
"foo" GTEST_PATH_SEP_),
313 FilePath(
"bar" GTEST_PATH_SEP_
"bar.xml"));
314 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar" GTEST_PATH_SEP_
"bar.xml",
318 TEST(ConcatPathsTest, Path2EndsWithPathSep) {
320 FilePath::ConcatPaths(FilePath(
"foo"), FilePath(
"bar" GTEST_PATH_SEP_));
321 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar" GTEST_PATH_SEP_, actual.string());
325 TEST(RemoveTrailingPathSeparatorTest, EmptyString) {
326 EXPECT_EQ(
"", FilePath(
"").RemoveTrailingPathSeparator().
string());
330 TEST(RemoveTrailingPathSeparatorTest, FileNoSlashString) {
331 EXPECT_EQ(
"foo", FilePath(
"foo").RemoveTrailingPathSeparator().
string());
335 TEST(RemoveTrailingPathSeparatorTest, ShouldRemoveTrailingSeparator) {
338 FilePath(
"foo" GTEST_PATH_SEP_).RemoveTrailingPathSeparator().
string());
339 #if GTEST_HAS_ALT_PATH_SEP_
340 EXPECT_EQ(
"foo", FilePath(
"foo/").RemoveTrailingPathSeparator().
string());
345 TEST(RemoveTrailingPathSeparatorTest, ShouldRemoveLastSeparator) {
347 FilePath(
"foo" GTEST_PATH_SEP_
"bar" GTEST_PATH_SEP_)
348 .RemoveTrailingPathSeparator()
353 TEST(RemoveTrailingPathSeparatorTest, ShouldReturnUnmodified) {
354 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar", FilePath(
"foo" GTEST_PATH_SEP_
"bar")
355 .RemoveTrailingPathSeparator()
359 TEST(DirectoryTest, RootDirectoryExists) {
360 #ifdef GTEST_OS_WINDOWS // We are on Windows.
361 char current_drive[_MAX_PATH];
362 current_drive[0] =
static_cast<char>(_getdrive() +
'A' - 1);
363 current_drive[1] =
':';
364 current_drive[2] =
'\\';
365 current_drive[3] =
'\0';
366 EXPECT_TRUE(FilePath(current_drive).DirectoryExists());
369 #endif // GTEST_OS_WINDOWS
372 #ifdef GTEST_OS_WINDOWS
373 TEST(DirectoryTest, RootOfWrongDriveDoesNotExists) {
374 const int saved_drive_ = _getdrive();
376 for (
char drive =
'Z'; drive >=
'A'; drive--)
377 if (_chdrive(drive -
'A' + 1) == -1) {
378 char non_drive[_MAX_PATH];
379 non_drive[0] = drive;
386 _chdrive(saved_drive_);
388 #endif // GTEST_OS_WINDOWS
390 #ifndef GTEST_OS_WINDOWS_MOBILE
392 TEST(DirectoryTest, EmptyPathDirectoryDoesNotExist) {
395 #endif // !GTEST_OS_WINDOWS_MOBILE
397 TEST(DirectoryTest, CurrentDirectoryExists) {
398 #ifdef GTEST_OS_WINDOWS // We are on Windows.
399 #ifndef _WIN32_CE // Windows CE doesn't have a current directory.
408 #endif // GTEST_OS_WINDOWS
412 TEST(NormalizeTest, MultipleConsecutiveSeparatorsInMidstring) {
414 FilePath(
"foo" GTEST_PATH_SEP_
"bar").
string());
416 FilePath(
"foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_
"bar").
string());
418 "foo" GTEST_PATH_SEP_
"bar",
419 FilePath(
"foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_
"bar")
424 TEST(NormalizeTest, MultipleConsecutiveSeparatorsAtStringStart) {
425 EXPECT_EQ(GTEST_PATH_SEP_
"bar", FilePath(GTEST_PATH_SEP_
"bar").
string());
426 #ifdef GTEST_OS_WINDOWS
427 EXPECT_EQ(GTEST_PATH_SEP_ GTEST_PATH_SEP_
"bar",
428 FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_
"bar").
string());
431 FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_
"bar").
string());
434 GTEST_PATH_SEP_
"bar",
435 FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_
"bar").
string());
439 TEST(NormalizeTest, MultipleConsecutiveSeparatorsAtStringEnd) {
440 EXPECT_EQ(
"foo" GTEST_PATH_SEP_, FilePath(
"foo" GTEST_PATH_SEP_).
string());
442 FilePath(
"foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_).
string());
444 "foo" GTEST_PATH_SEP_,
445 FilePath(
"foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_).
string());
448 #if GTEST_HAS_ALT_PATH_SEP_
453 TEST(NormalizeTest, MixAlternateSeparatorAtStringEnd) {
454 EXPECT_EQ(
"foo" GTEST_PATH_SEP_, FilePath(
"foo/").
string());
456 FilePath(
"foo" GTEST_PATH_SEP_
"/").
string());
457 EXPECT_EQ(
"foo" GTEST_PATH_SEP_, FilePath(
"foo//" GTEST_PATH_SEP_).
string());
462 TEST(AssignmentOperatorTest, DefaultAssignedToNonDefault) {
463 FilePath default_path;
464 FilePath non_default_path(
"path");
465 non_default_path = default_path;
466 EXPECT_EQ(
"", non_default_path.string());
470 TEST(AssignmentOperatorTest, NonDefaultAssignedToDefault) {
471 FilePath non_default_path(
"path");
472 FilePath default_path;
473 default_path = non_default_path;
474 EXPECT_EQ(
"path", default_path.string());
475 EXPECT_EQ(
"path", non_default_path.string());
478 TEST(AssignmentOperatorTest, ConstAssignedToNonConst) {
479 const FilePath const_default_path(
"const_path");
480 FilePath non_default_path(
"path");
481 non_default_path = const_default_path;
482 EXPECT_EQ(
"const_path", non_default_path.string());
485 class DirectoryCreationTest :
public Test {
487 void SetUp()
override {
489 FilePath(
TempDir() + GetCurrentExecutableName().
string() +
490 "_directory_creation" GTEST_PATH_SEP_
"test" GTEST_PATH_SEP_));
494 FilePath::MakeFileName(
testdata_path_, FilePath(
"unique"), 0,
"txt"));
496 FilePath::MakeFileName(
testdata_path_, FilePath(
"unique"), 1,
"txt"));
504 void TearDown()
override {
511 void CreateTextFile(
const char* filename) {
513 fprintf(f,
"text\n");
526 TEST_F(DirectoryCreationTest, CreateDirectoriesRecursively) {
532 TEST_F(DirectoryCreationTest, CreateDirectoriesForAlreadyExistingPath) {
539 TEST_F(DirectoryCreationTest, CreateDirectoriesAndUniqueFilename) {
540 FilePath file_path(FilePath::GenerateUniqueFileName(
547 CreateTextFile(file_path.c_str());
550 FilePath file_path2(FilePath::GenerateUniqueFileName(
554 CreateTextFile(file_path2.c_str());
558 TEST_F(DirectoryCreationTest, CreateDirectoriesFail) {
566 TEST(NoDirectoryCreationTest, CreateNoDirectoriesForDefaultXmlFile) {
567 const FilePath test_detail_xml(
"test_detail.xml");
568 EXPECT_FALSE(test_detail_xml.CreateDirectoriesRecursively());
571 TEST(FilePathTest, DefaultConstructor) {
576 TEST(FilePathTest, CharAndCopyConstructors) {
577 const FilePath fp(
"spicy");
580 const FilePath fp_copy(fp);
584 TEST(FilePathTest, StringConstructor) {
585 const FilePath fp(std::string(
"cider"));
589 TEST(FilePathTest, Set) {
590 const FilePath apple(
"apple");
597 TEST(FilePathTest, ToString) {
598 const FilePath file(
"drink");
602 TEST(FilePathTest, RemoveExtension) {
603 EXPECT_EQ(
"app", FilePath(
"app.cc").RemoveExtension(
"cc").
string());
604 EXPECT_EQ(
"app", FilePath(
"app.exe").RemoveExtension(
"exe").
string());
605 EXPECT_EQ(
"APP", FilePath(
"APP.EXE").RemoveExtension(
"exe").
string());
608 TEST(FilePathTest, RemoveExtensionWhenThereIsNoExtension) {
609 EXPECT_EQ(
"app", FilePath(
"app").RemoveExtension(
"exe").
string());
612 TEST(FilePathTest, IsDirectory) {
614 EXPECT_TRUE(FilePath(
"koala" GTEST_PATH_SEP_).IsDirectory());
615 #if GTEST_HAS_ALT_PATH_SEP_
620 TEST(FilePathTest, IsAbsolutePath) {
621 EXPECT_FALSE(FilePath(
"is" GTEST_PATH_SEP_
"relative").IsAbsolutePath());
623 #ifdef GTEST_OS_WINDOWS
625 FilePath(
"c:\\" GTEST_PATH_SEP_
"is_not" GTEST_PATH_SEP_
"relative")
627 EXPECT_FALSE(FilePath(
"c:foo" GTEST_PATH_SEP_
"bar").IsAbsolutePath());
629 FilePath(
"c:/" GTEST_PATH_SEP_
"is_not" GTEST_PATH_SEP_
"relative")
631 EXPECT_TRUE(FilePath(
"d:/Windows").IsAbsolutePath());
632 EXPECT_TRUE(FilePath(
"\\\\Host\\Share").IsAbsolutePath());
633 EXPECT_TRUE(FilePath(
"\\\\Host\\Share\\Folder").IsAbsolutePath());
635 EXPECT_TRUE(FilePath(GTEST_PATH_SEP_
"is_not" GTEST_PATH_SEP_
"relative")
637 #endif // GTEST_OS_WINDOWS
640 TEST(FilePathTest, IsRootDirectory) {
641 #ifdef GTEST_OS_WINDOWS
655 EXPECT_FALSE(FilePath(
"\\\\Host\\Share").IsRootDirectory());
657 EXPECT_TRUE(FilePath(
"\\\\Host\\Share\\").IsRootDirectory());
658 EXPECT_FALSE(FilePath(
"\\\\Host\\Share\\.").IsRootDirectory());
659 EXPECT_FALSE(FilePath(
"\\\\Host\\Share\\C$\\").IsRootDirectory());
int ChDir(const char *dir)
TEST_F(ListenerTest, DoesFoo)
#define ASSERT_TRUE(condition)
int RmDir(const char *dir)
PolymorphicMatcher< internal::IsEmptyMatcher > IsEmpty()
#define EXPECT_STREQ(s1, s2)
FILE * FOpen(const char *path, const char *mode)
#define EXPECT_EQ(val1, val2)
#define EXPECT_TRUE(condition)
#define EXPECT_FALSE(condition)
TEST(IsXDigitTest, WorksForNarrowAscii)
GTEST_API_ std::string TempDir()