44#ifdef GTEST_OS_WINDOWS_MOBILE
46#elif defined(GTEST_OS_WINDOWS)
54#ifdef GTEST_OS_WINDOWS_MOBILE
57int remove(
const char* path) {
58 LPCWSTR wpath = String::AnsiToUtf16(path);
59 int ret = DeleteFile(wpath) ? 0 : -1;
64int _rmdir(
const char* path) {
65 FilePath filepath(path);
67 String::AnsiToUtf16(filepath.RemoveTrailingPathSeparator().c_str());
68 int ret = RemoveDirectory(wpath) ? 0 : -1;
75TEST(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(),
':');
99TEST(IsEmptyTest, ReturnsTrueForEmptyPath) {
103TEST(IsEmptyTest, ReturnsFalseForNonEmptyPath) {
111TEST(RemoveDirectoryNameTest, WhenEmptyName) {
112 EXPECT_EQ(
"", FilePath(
"").RemoveDirectoryName().
string());
116TEST(RemoveDirectoryNameTest, ButNoDirectory) {
117 EXPECT_EQ(
"afile", FilePath(
"afile").RemoveDirectoryName().
string());
121TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileName) {
127TEST(RemoveDirectoryNameTest, WhereThereIsNoFileName) {
133TEST(RemoveDirectoryNameTest, ShouldGiveFileName) {
136 FilePath(
"adir" GTEST_PATH_SEP_ "afile").RemoveDirectoryName().
string());
140TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileName) {
143 .RemoveDirectoryName()
147#if GTEST_HAS_ALT_PATH_SEP_
153TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileNameForAlternateSeparator) {
154 EXPECT_EQ(
"afile", FilePath(
"/afile").RemoveDirectoryName().
string());
158TEST(RemoveDirectoryNameTest, WhereThereIsNoFileNameForAlternateSeparator) {
159 EXPECT_EQ(
"", FilePath(
"adir/").RemoveDirectoryName().
string());
163TEST(RemoveDirectoryNameTest, ShouldGiveFileNameForAlternateSeparator) {
164 EXPECT_EQ(
"afile", FilePath(
"adir/afile").RemoveDirectoryName().
string());
168TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileNameForAlternateSeparator) {
170 FilePath(
"adir/subdir/afile").RemoveDirectoryName().
string());
176TEST(RemoveFileNameTest, EmptyName) {
177#ifdef GTEST_OS_WINDOWS_MOBILE
186TEST(RemoveFileNameTest, ButNoFile) {
192TEST(RemoveFileNameTest, GivesDirName) {
198TEST(RemoveFileNameTest, GivesDirAndSubDirName) {
206TEST(RemoveFileNameTest, GivesRootDir) {
211#if GTEST_HAS_ALT_PATH_SEP_
217TEST(RemoveFileNameTest, ButNoFileForAlternateSeparator) {
219 FilePath(
"adir/").RemoveFileName().
string());
223TEST(RemoveFileNameTest, GivesDirNameForAlternateSeparator) {
225 FilePath(
"adir/afile").RemoveFileName().
string());
229TEST(RemoveFileNameTest, GivesDirAndSubDirNameForAlternateSeparator) {
231 FilePath(
"adir/subdir/afile").RemoveFileName().
string());
235TEST(RemoveFileNameTest, GivesRootDirForAlternateSeparator) {
241TEST(MakeFileNameTest, GenerateWhenNumberIsZero) {
243 FilePath::MakeFileName(FilePath(
"foo"), FilePath(
"bar"), 0,
"xml");
247TEST(MakeFileNameTest, GenerateFileNameNumberGtZero) {
249 FilePath::MakeFileName(FilePath(
"foo"), FilePath(
"bar"), 12,
"xml");
253TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberIsZero) {
254 FilePath actual = FilePath::MakeFileName(FilePath(
"foo" GTEST_PATH_SEP_),
255 FilePath(
"bar"), 0,
"xml");
259TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberGtZero) {
260 FilePath actual = FilePath::MakeFileName(FilePath(
"foo" GTEST_PATH_SEP_),
261 FilePath(
"bar"), 12,
"xml");
265TEST(MakeFileNameTest, GenerateWhenNumberIsZeroAndDirIsEmpty) {
267 FilePath::MakeFileName(FilePath(
""), FilePath(
"bar"), 0,
"xml");
271TEST(MakeFileNameTest, GenerateWhenNumberIsNotZeroAndDirIsEmpty) {
273 FilePath::MakeFileName(FilePath(
""), FilePath(
"bar"), 14,
"xml");
274 EXPECT_EQ(
"bar_14.xml", actual.string());
277TEST(ConcatPathsTest, WorksWhenDirDoesNotEndWithPathSep) {
278 FilePath actual = FilePath::ConcatPaths(FilePath(
"foo"), FilePath(
"bar.xml"));
282TEST(ConcatPathsTest, WorksWhenPath1EndsWithPathSep) {
283 FilePath actual = FilePath::ConcatPaths(FilePath(
"foo" GTEST_PATH_SEP_),
284 FilePath(
"bar.xml"));
288TEST(ConcatPathsTest, Path1BeingEmpty) {
289 FilePath actual = FilePath::ConcatPaths(FilePath(
""), FilePath(
"bar.xml"));
293TEST(ConcatPathsTest, Path2BeingEmpty) {
294 FilePath actual = FilePath::ConcatPaths(FilePath(
"foo"), FilePath(
""));
298TEST(ConcatPathsTest, BothPathBeingEmpty) {
299 FilePath actual = FilePath::ConcatPaths(FilePath(
""), FilePath(
""));
303TEST(ConcatPathsTest, Path1ContainsPathSep) {
304 FilePath actual = FilePath::ConcatPaths(FilePath(
"foo" GTEST_PATH_SEP_ "bar"),
305 FilePath(
"foobar.xml"));
310TEST(ConcatPathsTest, Path2ContainsPathSep) {
318TEST(ConcatPathsTest, Path2EndsWithPathSep) {
320 FilePath::ConcatPaths(FilePath(
"foo"), FilePath(
"bar" GTEST_PATH_SEP_));
325TEST(RemoveTrailingPathSeparatorTest, EmptyString) {
326 EXPECT_EQ(
"", FilePath(
"").RemoveTrailingPathSeparator().
string());
330TEST(RemoveTrailingPathSeparatorTest, FileNoSlashString) {
331 EXPECT_EQ(
"foo", FilePath(
"foo").RemoveTrailingPathSeparator().
string());
335TEST(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());
345TEST(RemoveTrailingPathSeparatorTest, ShouldRemoveLastSeparator) {
348 .RemoveTrailingPathSeparator()
353TEST(RemoveTrailingPathSeparatorTest, ShouldReturnUnmodified) {
355 .RemoveTrailingPathSeparator()
359TEST(DirectoryTest, RootDirectoryExists) {
360#ifdef GTEST_OS_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());
372#ifdef GTEST_OS_WINDOWS
373TEST(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_);
390#ifndef GTEST_OS_WINDOWS_MOBILE
392TEST(DirectoryTest, EmptyPathDirectoryDoesNotExist) {
397TEST(DirectoryTest, CurrentDirectoryExists) {
398#ifdef GTEST_OS_WINDOWS
412TEST(NormalizeTest, MultipleConsecutiveSeparatorsInMidstring) {
424TEST(NormalizeTest, MultipleConsecutiveSeparatorsAtStringStart) {
426#ifdef GTEST_OS_WINDOWS
439TEST(NormalizeTest, MultipleConsecutiveSeparatorsAtStringEnd) {
448#if GTEST_HAS_ALT_PATH_SEP_
453TEST(NormalizeTest, MixAlternateSeparatorAtStringEnd) {
462TEST(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());
470TEST(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());
478TEST(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());
485class DirectoryCreationTest :
public Test {
487 void SetUp()
override {
489 FilePath(
TempDir() + GetCurrentExecutableName().
string() +
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");
526TEST_F(DirectoryCreationTest, CreateDirectoriesRecursively) {
532TEST_F(DirectoryCreationTest, CreateDirectoriesForAlreadyExistingPath) {
539TEST_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());
558TEST_F(DirectoryCreationTest, CreateDirectoriesFail) {
566TEST(NoDirectoryCreationTest, CreateNoDirectoriesForDefaultXmlFile) {
567 const FilePath test_detail_xml(
"test_detail.xml");
568 EXPECT_FALSE(test_detail_xml.CreateDirectoriesRecursively());
571TEST(FilePathTest, DefaultConstructor) {
576TEST(FilePathTest, CharAndCopyConstructors) {
577 const FilePath fp(
"spicy");
580 const FilePath fp_copy(fp);
584TEST(FilePathTest, StringConstructor) {
585 const FilePath fp(std::string(
"cider"));
589TEST(FilePathTest, Set) {
590 const FilePath apple(
"apple");
597TEST(FilePathTest, ToString) {
598 const FilePath file(
"drink");
602TEST(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());
608TEST(FilePathTest, RemoveExtensionWhenThereIsNoExtension) {
609 EXPECT_EQ(
"app", FilePath(
"app").RemoveExtension(
"exe").
string());
612TEST(FilePathTest, IsDirectory) {
615#if GTEST_HAS_ALT_PATH_SEP_
620TEST(FilePathTest, IsAbsolutePath) {
623#ifdef GTEST_OS_WINDOWS
631 EXPECT_TRUE(FilePath(
"d:/Windows").IsAbsolutePath());
632 EXPECT_TRUE(FilePath(
"\\\\Host\\Share").IsAbsolutePath());
633 EXPECT_TRUE(FilePath(
"\\\\Host\\Share\\Folder").IsAbsolutePath());
640TEST(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());
FilePath unique_file1_
Definition googletest-filepath-test.cc:523
FilePath testdata_file_
Definition googletest-filepath-test.cc:521
FilePath unique_file0_
Definition googletest-filepath-test.cc:522
FilePath testdata_path_
Definition googletest-filepath-test.cc:520
#define GTEST_PATH_SEP_
Definition gtest-port.h:1918
#define TEST_F(test_fixture, test_name)
Definition gtest.h:2208
#define EXPECT_EQ(val1, val2)
Definition gtest.h:1868
#define TEST(test_suite_name, test_name)
Definition gtest.h:2176
#define EXPECT_TRUE(condition)
Definition gtest.h:1807
#define EXPECT_STREQ(s1, s2)
Definition gtest.h:1937
#define ASSERT_TRUE(condition)
Definition gtest.h:1815
#define EXPECT_FALSE(condition)
Definition gtest.h:1811
int ChDir(const char *dir)
Definition gtest-port.h:2087
int RmDir(const char *dir)
Definition gtest-port.h:2027
FILE * FOpen(const char *path, const char *mode)
Definition gtest-port.h:2089
Definition gmock-actions.h:151
PolymorphicMatcher< internal::IsEmptyMatcher > IsEmpty()
Definition gmock-more-matchers.h:93
GTEST_API_ std::string TempDir()
Definition gtest.cc:6850