41#include "gtest/internal/gtest-filepath.h"
42#include "gtest/gtest.h"
49#define GTEST_IMPLEMENTATION_ 1
50#include "src/gtest-internal-inl.h"
51#undef GTEST_IMPLEMENTATION_
53#if GTEST_OS_WINDOWS_MOBILE
63#if GTEST_OS_WINDOWS_MOBILE
68int remove(
const char* path) {
69 LPCWSTR wpath = String::AnsiToUtf16(path);
70 int ret = DeleteFile(wpath) ? 0 : -1;
75int _rmdir(
const char* path) {
76 FilePath filepath(path);
77 LPCWSTR wpath = String::AnsiToUtf16(
78 filepath.RemoveTrailingPathSeparator().c_str());
79 int ret = RemoveDirectory(wpath) ? 0 : -1;
86TEST(GetCurrentDirTest, ReturnsCurrentDir) {
97 const char*
const cwd_without_drive = strchr(cwd.c_str(),
':');
110TEST(IsEmptyTest, ReturnsTrueForEmptyPath) {
114TEST(IsEmptyTest, ReturnsFalseForNonEmptyPath) {
122TEST(RemoveDirectoryNameTest, WhenEmptyName) {
123 EXPECT_EQ(
"", FilePath(
"").RemoveDirectoryName().
string());
127TEST(RemoveDirectoryNameTest, ButNoDirectory) {
129 FilePath(
"afile").RemoveDirectoryName().
string());
133TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileName) {
139TEST(RemoveDirectoryNameTest, WhereThereIsNoFileName) {
145TEST(RemoveDirectoryNameTest, ShouldGiveFileName) {
147 FilePath(
"adir" GTEST_PATH_SEP_ "afile").RemoveDirectoryName().
string());
151TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileName) {
154 .RemoveDirectoryName().
string());
157#if GTEST_HAS_ALT_PATH_SEP_
163TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileNameForAlternateSeparator) {
164 EXPECT_EQ(
"afile", FilePath(
"/afile").RemoveDirectoryName().
string());
168TEST(RemoveDirectoryNameTest, WhereThereIsNoFileNameForAlternateSeparator) {
169 EXPECT_EQ(
"", FilePath(
"adir/").RemoveDirectoryName().
string());
173TEST(RemoveDirectoryNameTest, ShouldGiveFileNameForAlternateSeparator) {
174 EXPECT_EQ(
"afile", FilePath(
"adir/afile").RemoveDirectoryName().
string());
178TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileNameForAlternateSeparator) {
180 FilePath(
"adir/subdir/afile").RemoveDirectoryName().
string());
186TEST(RemoveFileNameTest, EmptyName) {
187#if GTEST_OS_WINDOWS_MOBILE
196TEST(RemoveFileNameTest, ButNoFile) {
202TEST(RemoveFileNameTest, GivesDirName) {
208TEST(RemoveFileNameTest, GivesDirAndSubDirName) {
211 .RemoveFileName().
string());
215TEST(RemoveFileNameTest, GivesRootDir) {
220#if GTEST_HAS_ALT_PATH_SEP_
226TEST(RemoveFileNameTest, ButNoFileForAlternateSeparator) {
228 FilePath(
"adir/").RemoveFileName().
string());
232TEST(RemoveFileNameTest, GivesDirNameForAlternateSeparator) {
234 FilePath(
"adir/afile").RemoveFileName().
string());
238TEST(RemoveFileNameTest, GivesDirAndSubDirNameForAlternateSeparator) {
240 FilePath(
"adir/subdir/afile").RemoveFileName().
string());
244TEST(RemoveFileNameTest, GivesRootDirForAlternateSeparator) {
250TEST(MakeFileNameTest, GenerateWhenNumberIsZero) {
256TEST(MakeFileNameTest, GenerateFileNameNumberGtZero) {
262TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberIsZero) {
264 FilePath(
"bar"), 0,
"xml");
268TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberGtZero) {
270 FilePath(
"bar"), 12,
"xml");
274TEST(MakeFileNameTest, GenerateWhenNumberIsZeroAndDirIsEmpty) {
280TEST(MakeFileNameTest, GenerateWhenNumberIsNotZeroAndDirIsEmpty) {
283 EXPECT_EQ(
"bar_14.xml", actual.string());
286TEST(ConcatPathsTest, WorksWhenDirDoesNotEndWithPathSep) {
288 FilePath(
"bar.xml"));
292TEST(ConcatPathsTest, WorksWhenPath1EndsWithPathSep) {
294 FilePath(
"bar.xml"));
298TEST(ConcatPathsTest, Path1BeingEmpty) {
300 FilePath(
"bar.xml"));
304TEST(ConcatPathsTest, Path2BeingEmpty) {
309TEST(ConcatPathsTest, BothPathBeingEmpty) {
315TEST(ConcatPathsTest, Path1ContainsPathSep) {
317 FilePath(
"foobar.xml"));
322TEST(ConcatPathsTest, Path2ContainsPathSep) {
330TEST(ConcatPathsTest, Path2EndsWithPathSep) {
337TEST(RemoveTrailingPathSeparatorTest, EmptyString) {
338 EXPECT_EQ(
"", FilePath(
"").RemoveTrailingPathSeparator().
string());
342TEST(RemoveTrailingPathSeparatorTest, FileNoSlashString) {
343 EXPECT_EQ(
"foo", FilePath(
"foo").RemoveTrailingPathSeparator().
string());
347TEST(RemoveTrailingPathSeparatorTest, ShouldRemoveTrailingSeparator) {
349 FilePath(
"foo" GTEST_PATH_SEP_).RemoveTrailingPathSeparator().
string());
350#if GTEST_HAS_ALT_PATH_SEP_
351 EXPECT_EQ(
"foo", FilePath(
"foo/").RemoveTrailingPathSeparator().
string());
356TEST(RemoveTrailingPathSeparatorTest, ShouldRemoveLastSeparator) {
359 .RemoveTrailingPathSeparator().
string());
363TEST(RemoveTrailingPathSeparatorTest, ShouldReturnUnmodified) {
366 .RemoveTrailingPathSeparator().
string());
369TEST(DirectoryTest, RootDirectoryExists) {
371 char current_drive[_MAX_PATH];
372 current_drive[0] =
static_cast<char>(_getdrive() +
'A' - 1);
373 current_drive[1] =
':';
374 current_drive[2] =
'\\';
375 current_drive[3] =
'\0';
376 EXPECT_TRUE(FilePath(current_drive).DirectoryExists());
383TEST(DirectoryTest, RootOfWrongDriveDoesNotExists) {
384 const int saved_drive_ = _getdrive();
386 for (
char drive =
'Z'; drive >=
'A'; drive--)
387 if (_chdrive(drive -
'A' + 1) == -1) {
388 char non_drive[_MAX_PATH];
389 non_drive[0] = drive;
396 _chdrive(saved_drive_);
400#if !GTEST_OS_WINDOWS_MOBILE
402TEST(DirectoryTest, EmptyPathDirectoryDoesNotExist) {
407TEST(DirectoryTest, CurrentDirectoryExists) {
422TEST(NormalizeTest, MultipleConsecutiveSepaparatorsInMidstring) {
433TEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringStart) {
443TEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringEnd) {
452#if GTEST_HAS_ALT_PATH_SEP_
457TEST(NormalizeTest, MixAlternateSeparatorAtStringEnd) {
459 FilePath(
"foo/").
string());
468TEST(AssignmentOperatorTest, DefaultAssignedToNonDefault) {
469 FilePath default_path;
470 FilePath non_default_path(
"path");
471 non_default_path = default_path;
472 EXPECT_EQ(
"", non_default_path.string());
476TEST(AssignmentOperatorTest, NonDefaultAssignedToDefault) {
477 FilePath non_default_path(
"path");
478 FilePath default_path;
479 default_path = non_default_path;
480 EXPECT_EQ(
"path", default_path.string());
481 EXPECT_EQ(
"path", non_default_path.string());
484TEST(AssignmentOperatorTest, ConstAssignedToNonConst) {
485 const FilePath const_default_path(
"const_path");
486 FilePath non_default_path(
"path");
487 non_default_path = const_default_path;
488 EXPECT_EQ(
"const_path", non_default_path.string());
491class DirectoryCreationTest :
public Test {
493 virtual void SetUp() {
494 testdata_path_.Set(FilePath(
497 testdata_file_.Set(testdata_path_.RemoveTrailingPathSeparator());
504 remove(testdata_file_.c_str());
505 remove(unique_file0_.c_str());
506 remove(unique_file1_.c_str());
510 virtual void TearDown() {
511 remove(testdata_file_.c_str());
512 remove(unique_file0_.c_str());
513 remove(unique_file1_.c_str());
517 void CreateTextFile(
const char* filename) {
519 fprintf(f,
"text\n");
526 FilePath testdata_path_;
527 FilePath testdata_file_;
528 FilePath unique_file0_;
529 FilePath unique_file1_;
532TEST_F(DirectoryCreationTest, CreateDirectoriesRecursively) {
533 EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.string();
534 EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively());
538TEST_F(DirectoryCreationTest, CreateDirectoriesForAlreadyExistingPath) {
539 EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.string();
540 EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively());
542 EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively());
545TEST_F(DirectoryCreationTest, CreateDirectoriesAndUniqueFilename) {
547 FilePath(
"unique"),
"txt"));
548 EXPECT_EQ(unique_file0_.string(), file_path.string());
551 testdata_path_.CreateDirectoriesRecursively();
553 CreateTextFile(file_path.c_str());
557 FilePath(
"unique"),
"txt"));
558 EXPECT_EQ(unique_file1_.string(), file_path2.string());
560 CreateTextFile(file_path2.c_str());
564TEST_F(DirectoryCreationTest, CreateDirectoriesFail) {
566 CreateTextFile(testdata_file_.c_str());
567 EXPECT_TRUE(testdata_file_.FileOrDirectoryExists());
569 EXPECT_FALSE(testdata_file_.CreateDirectoriesRecursively());
572TEST(NoDirectoryCreationTest, CreateNoDirectoriesForDefaultXmlFile) {
573 const FilePath test_detail_xml(
"test_detail.xml");
574 EXPECT_FALSE(test_detail_xml.CreateDirectoriesRecursively());
577TEST(FilePathTest, DefaultConstructor) {
582TEST(FilePathTest, CharAndCopyConstructors) {
583 const FilePath fp(
"spicy");
586 const FilePath fp_copy(fp);
590TEST(FilePathTest, StringConstructor) {
591 const FilePath fp(std::string(
"cider"));
595TEST(FilePathTest, Set) {
596 const FilePath apple(
"apple");
603TEST(FilePathTest, ToString) {
604 const FilePath file(
"drink");
608TEST(FilePathTest, RemoveExtension) {
609 EXPECT_EQ(
"app", FilePath(
"app.cc").RemoveExtension(
"cc").
string());
610 EXPECT_EQ(
"app", FilePath(
"app.exe").RemoveExtension(
"exe").
string());
611 EXPECT_EQ(
"APP", FilePath(
"APP.EXE").RemoveExtension(
"exe").
string());
614TEST(FilePathTest, RemoveExtensionWhenThereIsNoExtension) {
615 EXPECT_EQ(
"app", FilePath(
"app").RemoveExtension(
"exe").
string());
618TEST(FilePathTest, IsDirectory) {
621#if GTEST_HAS_ALT_PATH_SEP_
626TEST(FilePathTest, IsAbsolutePath) {
641TEST(FilePathTest, IsRootDirectory) {
static FilePath GenerateUniqueFileName(const FilePath &directory, const FilePath &base_name, const char *extension)
Definition gtest-filepath.cc:286
static FilePath MakeFileName(const FilePath &directory, const FilePath &base_name, int number, const char *extension)
Definition gtest-filepath.cc:183
static FilePath GetCurrentDir()
Definition gtest-filepath.cc:99
static FilePath ConcatPaths(const FilePath &directory, const FilePath &relative_path)
Definition gtest-filepath.cc:199
#define TEST_F(test_fixture, test_name)
Definition gtest.h:2216
#define EXPECT_EQ(val1, val2)
Definition gtest.h:1922
#define EXPECT_TRUE(condition)
Definition gtest.h:1859
#define EXPECT_STREQ(s1, s2)
Definition gtest.h:1995
#define TEST(test_case_name, test_name)
Definition gtest.h:2187
#define ASSERT_TRUE(condition)
Definition gtest.h:1865
#define EXPECT_FALSE(condition)
Definition gtest.h:1862
#define GTEST_PATH_SEP_
Definition gtest-port.h:2239
Definition document.h:406
int ChDir(const char *dir)
Definition gtest-port.h:2365
int RmDir(const char *dir)
Definition gtest-port.h:2347
FILE * FOpen(const char *path, const char *mode)
Definition gtest-port.h:2367
GTEST_API_ std::string TempDir()
Definition gtest-port.cc:1058
GTEST_API_ FilePath GetCurrentExecutableName()
Definition gtest.cc:399
Definition gmock-actions.h:53