38#include "gtest/gtest.h"
39#include "gtest/internal/gtest-filepath.h"
40#include "src/gtest-internal-inl.h"
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);
65 String::AnsiToUtf16(filepath.RemoveTrailingPathSeparator().c_str());
66 int ret = RemoveDirectory(wpath) ? 0 : -1;
73TEST(GetCurrentDirTest, ReturnsCurrentDir) {
74 const FilePath original_dir = FilePath::GetCurrentDir();
75 EXPECT_FALSE(original_dir.IsEmpty());
77 posix::ChDir(GTEST_PATH_SEP_);
78 const FilePath cwd = FilePath::GetCurrentDir();
79 posix::ChDir(original_dir.c_str());
81#if GTEST_OS_WINDOWS || GTEST_OS_OS2
84 const char*
const cwd_without_drive = strchr(cwd.c_str(),
':');
85 ASSERT_TRUE(cwd_without_drive != NULL);
86 EXPECT_STREQ(GTEST_PATH_SEP_, cwd_without_drive + 1);
90 EXPECT_EQ(GTEST_PATH_SEP_, cwd.string());
97TEST(IsEmptyTest, ReturnsTrueForEmptyPath) {
98 EXPECT_TRUE(FilePath(
"").IsEmpty());
101TEST(IsEmptyTest, ReturnsFalseForNonEmptyPath) {
102 EXPECT_FALSE(FilePath(
"a").IsEmpty());
103 EXPECT_FALSE(FilePath(
".").IsEmpty());
104 EXPECT_FALSE(FilePath(
"a/b").IsEmpty());
105 EXPECT_FALSE(FilePath(
"a\\b\\").IsEmpty());
109TEST(RemoveDirectoryNameTest, WhenEmptyName) {
110 EXPECT_EQ(
"", FilePath(
"").RemoveDirectoryName().
string());
114TEST(RemoveDirectoryNameTest, ButNoDirectory) {
115 EXPECT_EQ(
"afile", FilePath(
"afile").RemoveDirectoryName().
string());
119TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileName) {
121 FilePath(GTEST_PATH_SEP_
"afile").RemoveDirectoryName().
string());
125TEST(RemoveDirectoryNameTest, WhereThereIsNoFileName) {
127 FilePath(
"adir" GTEST_PATH_SEP_).RemoveDirectoryName().
string());
131TEST(RemoveDirectoryNameTest, ShouldGiveFileName) {
134 FilePath(
"adir" GTEST_PATH_SEP_
"afile").RemoveDirectoryName().
string());
138TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileName) {
140 FilePath(
"adir" GTEST_PATH_SEP_
"subdir" GTEST_PATH_SEP_
"afile")
141 .RemoveDirectoryName()
145#if GTEST_HAS_ALT_PATH_SEP_
151TEST(RemoveDirectoryNameTest, RootFileShouldGiveFileNameForAlternateSeparator) {
152 EXPECT_EQ(
"afile", FilePath(
"/afile").RemoveDirectoryName().
string());
156TEST(RemoveDirectoryNameTest, WhereThereIsNoFileNameForAlternateSeparator) {
157 EXPECT_EQ(
"", FilePath(
"adir/").RemoveDirectoryName().
string());
161TEST(RemoveDirectoryNameTest, ShouldGiveFileNameForAlternateSeparator) {
162 EXPECT_EQ(
"afile", FilePath(
"adir/afile").RemoveDirectoryName().
string());
166TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileNameForAlternateSeparator) {
168 FilePath(
"adir/subdir/afile").RemoveDirectoryName().
string());
174TEST(RemoveFileNameTest, EmptyName) {
175#if GTEST_OS_WINDOWS_MOBILE
177 EXPECT_EQ(GTEST_PATH_SEP_, FilePath(
"").RemoveFileName().
string());
179 EXPECT_EQ(
"." GTEST_PATH_SEP_, FilePath(
"").RemoveFileName().
string());
184TEST(RemoveFileNameTest, ButNoFile) {
185 EXPECT_EQ(
"adir" GTEST_PATH_SEP_,
186 FilePath(
"adir" GTEST_PATH_SEP_).RemoveFileName().
string());
190TEST(RemoveFileNameTest, GivesDirName) {
191 EXPECT_EQ(
"adir" GTEST_PATH_SEP_,
192 FilePath(
"adir" GTEST_PATH_SEP_
"afile").RemoveFileName().
string());
196TEST(RemoveFileNameTest, GivesDirAndSubDirName) {
197 EXPECT_EQ(
"adir" GTEST_PATH_SEP_
"subdir" GTEST_PATH_SEP_,
198 FilePath(
"adir" GTEST_PATH_SEP_
"subdir" GTEST_PATH_SEP_
"afile")
204TEST(RemoveFileNameTest, GivesRootDir) {
205 EXPECT_EQ(GTEST_PATH_SEP_,
206 FilePath(GTEST_PATH_SEP_
"afile").RemoveFileName().
string());
209#if GTEST_HAS_ALT_PATH_SEP_
215TEST(RemoveFileNameTest, ButNoFileForAlternateSeparator) {
216 EXPECT_EQ(
"adir" GTEST_PATH_SEP_,
217 FilePath(
"adir/").RemoveFileName().
string());
221TEST(RemoveFileNameTest, GivesDirNameForAlternateSeparator) {
222 EXPECT_EQ(
"adir" GTEST_PATH_SEP_,
223 FilePath(
"adir/afile").RemoveFileName().
string());
227TEST(RemoveFileNameTest, GivesDirAndSubDirNameForAlternateSeparator) {
228 EXPECT_EQ(
"adir" GTEST_PATH_SEP_
"subdir" GTEST_PATH_SEP_,
229 FilePath(
"adir/subdir/afile").RemoveFileName().
string());
233TEST(RemoveFileNameTest, GivesRootDirForAlternateSeparator) {
234 EXPECT_EQ(GTEST_PATH_SEP_, FilePath(
"/afile").RemoveFileName().
string());
239TEST(MakeFileNameTest, GenerateWhenNumberIsZero) {
241 FilePath::MakeFileName(FilePath(
"foo"), FilePath(
"bar"), 0,
"xml");
242 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar.xml", actual.string());
245TEST(MakeFileNameTest, GenerateFileNameNumberGtZero) {
247 FilePath::MakeFileName(FilePath(
"foo"), FilePath(
"bar"), 12,
"xml");
248 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar_12.xml", actual.string());
251TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberIsZero) {
252 FilePath actual = FilePath::MakeFileName(FilePath(
"foo" GTEST_PATH_SEP_),
253 FilePath(
"bar"), 0,
"xml");
254 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar.xml", actual.string());
257TEST(MakeFileNameTest, GenerateFileNameWithSlashNumberGtZero) {
258 FilePath actual = FilePath::MakeFileName(FilePath(
"foo" GTEST_PATH_SEP_),
259 FilePath(
"bar"), 12,
"xml");
260 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar_12.xml", actual.string());
263TEST(MakeFileNameTest, GenerateWhenNumberIsZeroAndDirIsEmpty) {
265 FilePath::MakeFileName(FilePath(
""), FilePath(
"bar"), 0,
"xml");
266 EXPECT_EQ(
"bar.xml", actual.string());
269TEST(MakeFileNameTest, GenerateWhenNumberIsNotZeroAndDirIsEmpty) {
271 FilePath::MakeFileName(FilePath(
""), FilePath(
"bar"), 14,
"xml");
272 EXPECT_EQ(
"bar_14.xml", actual.string());
275TEST(ConcatPathsTest, WorksWhenDirDoesNotEndWithPathSep) {
276 FilePath actual = FilePath::ConcatPaths(FilePath(
"foo"), FilePath(
"bar.xml"));
277 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar.xml", actual.string());
280TEST(ConcatPathsTest, WorksWhenPath1EndsWithPathSep) {
281 FilePath actual = FilePath::ConcatPaths(FilePath(
"foo" GTEST_PATH_SEP_),
282 FilePath(
"bar.xml"));
283 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar.xml", actual.string());
286TEST(ConcatPathsTest, Path1BeingEmpty) {
287 FilePath actual = FilePath::ConcatPaths(FilePath(
""), FilePath(
"bar.xml"));
288 EXPECT_EQ(
"bar.xml", actual.string());
291TEST(ConcatPathsTest, Path2BeingEmpty) {
292 FilePath actual = FilePath::ConcatPaths(FilePath(
"foo"), FilePath(
""));
293 EXPECT_EQ(
"foo" GTEST_PATH_SEP_, actual.string());
296TEST(ConcatPathsTest, BothPathBeingEmpty) {
297 FilePath actual = FilePath::ConcatPaths(FilePath(
""), FilePath(
""));
298 EXPECT_EQ(
"", actual.string());
301TEST(ConcatPathsTest, Path1ContainsPathSep) {
302 FilePath actual = FilePath::ConcatPaths(FilePath(
"foo" GTEST_PATH_SEP_
"bar"),
303 FilePath(
"foobar.xml"));
304 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar" GTEST_PATH_SEP_
"foobar.xml",
308TEST(ConcatPathsTest, Path2ContainsPathSep) {
310 FilePath::ConcatPaths(FilePath(
"foo" GTEST_PATH_SEP_),
311 FilePath(
"bar" GTEST_PATH_SEP_
"bar.xml"));
312 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar" GTEST_PATH_SEP_
"bar.xml",
316TEST(ConcatPathsTest, Path2EndsWithPathSep) {
318 FilePath::ConcatPaths(FilePath(
"foo"), FilePath(
"bar" GTEST_PATH_SEP_));
319 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar" GTEST_PATH_SEP_, actual.string());
323TEST(RemoveTrailingPathSeparatorTest, EmptyString) {
324 EXPECT_EQ(
"", FilePath(
"").RemoveTrailingPathSeparator().
string());
328TEST(RemoveTrailingPathSeparatorTest, FileNoSlashString) {
329 EXPECT_EQ(
"foo", FilePath(
"foo").RemoveTrailingPathSeparator().
string());
333TEST(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) {
344 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar",
345 FilePath(
"foo" GTEST_PATH_SEP_
"bar" GTEST_PATH_SEP_)
346 .RemoveTrailingPathSeparator()
351TEST(RemoveTrailingPathSeparatorTest, ShouldReturnUnmodified) {
352 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar", FilePath(
"foo" GTEST_PATH_SEP_
"bar")
353 .RemoveTrailingPathSeparator()
357TEST(DirectoryTest, RootDirectoryExists) {
359 char current_drive[_MAX_PATH];
360 current_drive[0] =
static_cast<char>(_getdrive() +
'A' - 1);
361 current_drive[1] =
':';
362 current_drive[2] =
'\\';
363 current_drive[3] =
'\0';
364 EXPECT_TRUE(FilePath(current_drive).DirectoryExists());
366 EXPECT_TRUE(FilePath(
"/").DirectoryExists());
371TEST(DirectoryTest, RootOfWrongDriveDoesNotExists) {
372 const int saved_drive_ = _getdrive();
374 for (
char drive =
'Z'; drive >=
'A'; drive--)
375 if (_chdrive(drive -
'A' + 1) == -1) {
376 char non_drive[_MAX_PATH];
377 non_drive[0] = drive;
381 EXPECT_FALSE(FilePath(non_drive).DirectoryExists());
384 _chdrive(saved_drive_);
388#if !GTEST_OS_WINDOWS_MOBILE
390TEST(DirectoryTest, EmptyPathDirectoryDoesNotExist) {
391 EXPECT_FALSE(FilePath(
"").DirectoryExists());
395TEST(DirectoryTest, CurrentDirectoryExists) {
399 EXPECT_TRUE(FilePath(
".").DirectoryExists());
400 EXPECT_TRUE(FilePath(
".\\").DirectoryExists());
404 EXPECT_TRUE(FilePath(
".").DirectoryExists());
405 EXPECT_TRUE(FilePath(
"./").DirectoryExists());
410TEST(NormalizeTest, MultipleConsecutiveSeparatorsInMidstring) {
411 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar",
412 FilePath(
"foo" GTEST_PATH_SEP_
"bar").
string());
413 EXPECT_EQ(
"foo" GTEST_PATH_SEP_
"bar",
414 FilePath(
"foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_
"bar").
string());
416 "foo" GTEST_PATH_SEP_
"bar",
417 FilePath(
"foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_
"bar")
422TEST(NormalizeTest, MultipleConsecutiveSeparatorsAtStringStart) {
423 EXPECT_EQ(GTEST_PATH_SEP_
"bar", FilePath(GTEST_PATH_SEP_
"bar").
string());
425 EXPECT_EQ(GTEST_PATH_SEP_ GTEST_PATH_SEP_
"bar",
426 FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_
"bar").
string());
428 EXPECT_EQ(GTEST_PATH_SEP_
"bar",
429 FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_
"bar").
string());
432 GTEST_PATH_SEP_
"bar",
433 FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_
"bar").
string());
437TEST(NormalizeTest, MultipleConsecutiveSeparatorsAtStringEnd) {
438 EXPECT_EQ(
"foo" GTEST_PATH_SEP_, FilePath(
"foo" GTEST_PATH_SEP_).
string());
439 EXPECT_EQ(
"foo" GTEST_PATH_SEP_,
440 FilePath(
"foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_).
string());
442 "foo" GTEST_PATH_SEP_,
443 FilePath(
"foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_).
string());
446#if GTEST_HAS_ALT_PATH_SEP_
451TEST(NormalizeTest, MixAlternateSeparatorAtStringEnd) {
452 EXPECT_EQ(
"foo" GTEST_PATH_SEP_, FilePath(
"foo/").
string());
453 EXPECT_EQ(
"foo" GTEST_PATH_SEP_,
454 FilePath(
"foo" GTEST_PATH_SEP_
"/").
string());
455 EXPECT_EQ(
"foo" GTEST_PATH_SEP_, FilePath(
"foo//" GTEST_PATH_SEP_).
string());
460TEST(AssignmentOperatorTest, DefaultAssignedToNonDefault) {
461 FilePath default_path;
462 FilePath non_default_path(
"path");
463 non_default_path = default_path;
464 EXPECT_EQ(
"", non_default_path.string());
465 EXPECT_EQ(
"", default_path.string());
468TEST(AssignmentOperatorTest, NonDefaultAssignedToDefault) {
469 FilePath non_default_path(
"path");
470 FilePath default_path;
471 default_path = non_default_path;
472 EXPECT_EQ(
"path", default_path.string());
473 EXPECT_EQ(
"path", non_default_path.string());
476TEST(AssignmentOperatorTest, ConstAssignedToNonConst) {
477 const FilePath const_default_path(
"const_path");
478 FilePath non_default_path(
"path");
479 non_default_path = const_default_path;
480 EXPECT_EQ(
"const_path", non_default_path.string());
483class DirectoryCreationTest :
public Test {
485 void SetUp()
override {
487 FilePath(TempDir() + GetCurrentExecutableName().
string() +
488 "_directory_creation" GTEST_PATH_SEP_
"test" GTEST_PATH_SEP_));
489 testdata_file_.Set(testdata_path_.RemoveTrailingPathSeparator());
492 FilePath::MakeFileName(testdata_path_, FilePath(
"unique"), 0,
"txt"));
494 FilePath::MakeFileName(testdata_path_, FilePath(
"unique"), 1,
"txt"));
496 remove(testdata_file_.c_str());
497 remove(unique_file0_.c_str());
498 remove(unique_file1_.c_str());
499 posix::RmDir(testdata_path_.c_str());
502 void TearDown()
override {
503 remove(testdata_file_.c_str());
504 remove(unique_file0_.c_str());
505 remove(unique_file1_.c_str());
506 posix::RmDir(testdata_path_.c_str());
509 void CreateTextFile(
const char* filename) {
510 FILE* f = posix::FOpen(filename,
"w");
511 fprintf(f,
"text\n");
518 FilePath testdata_path_;
519 FilePath testdata_file_;
520 FilePath unique_file0_;
521 FilePath unique_file1_;
524TEST_F(DirectoryCreationTest, CreateDirectoriesRecursively) {
525 EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.string();
526 EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively());
527 EXPECT_TRUE(testdata_path_.DirectoryExists());
530TEST_F(DirectoryCreationTest, CreateDirectoriesForAlreadyExistingPath) {
531 EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.string();
532 EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively());
534 EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively());
537TEST_F(DirectoryCreationTest, CreateDirectoriesAndUniqueFilename) {
538 FilePath file_path(FilePath::GenerateUniqueFileName(
539 testdata_path_, FilePath(
"unique"),
"txt"));
540 EXPECT_EQ(unique_file0_.string(), file_path.string());
541 EXPECT_FALSE(file_path.FileOrDirectoryExists());
543 testdata_path_.CreateDirectoriesRecursively();
544 EXPECT_FALSE(file_path.FileOrDirectoryExists());
545 CreateTextFile(file_path.c_str());
546 EXPECT_TRUE(file_path.FileOrDirectoryExists());
548 FilePath file_path2(FilePath::GenerateUniqueFileName(
549 testdata_path_, FilePath(
"unique"),
"txt"));
550 EXPECT_EQ(unique_file1_.string(), file_path2.string());
551 EXPECT_FALSE(file_path2.FileOrDirectoryExists());
552 CreateTextFile(file_path2.c_str());
553 EXPECT_TRUE(file_path2.FileOrDirectoryExists());
556TEST_F(DirectoryCreationTest, CreateDirectoriesFail) {
558 CreateTextFile(testdata_file_.c_str());
559 EXPECT_TRUE(testdata_file_.FileOrDirectoryExists());
560 EXPECT_FALSE(testdata_file_.DirectoryExists());
561 EXPECT_FALSE(testdata_file_.CreateDirectoriesRecursively());
564TEST(NoDirectoryCreationTest, CreateNoDirectoriesForDefaultXmlFile) {
565 const FilePath test_detail_xml(
"test_detail.xml");
566 EXPECT_FALSE(test_detail_xml.CreateDirectoriesRecursively());
569TEST(FilePathTest, DefaultConstructor) {
571 EXPECT_EQ(
"", fp.string());
574TEST(FilePathTest, CharAndCopyConstructors) {
575 const FilePath fp(
"spicy");
576 EXPECT_EQ(
"spicy", fp.string());
578 const FilePath fp_copy(fp);
579 EXPECT_EQ(
"spicy", fp_copy.string());
582TEST(FilePathTest, StringConstructor) {
583 const FilePath fp(std::string(
"cider"));
584 EXPECT_EQ(
"cider", fp.string());
587TEST(FilePathTest, Set) {
588 const FilePath apple(
"apple");
591 EXPECT_EQ(
"apple", mac.string());
592 EXPECT_EQ(
"apple", apple.string());
595TEST(FilePathTest, ToString) {
596 const FilePath file(
"drink");
597 EXPECT_EQ(
"drink", file.string());
600TEST(FilePathTest, RemoveExtension) {
601 EXPECT_EQ(
"app", FilePath(
"app.cc").RemoveExtension(
"cc").
string());
602 EXPECT_EQ(
"app", FilePath(
"app.exe").RemoveExtension(
"exe").
string());
603 EXPECT_EQ(
"APP", FilePath(
"APP.EXE").RemoveExtension(
"exe").
string());
606TEST(FilePathTest, RemoveExtensionWhenThereIsNoExtension) {
607 EXPECT_EQ(
"app", FilePath(
"app").RemoveExtension(
"exe").
string());
610TEST(FilePathTest, IsDirectory) {
611 EXPECT_FALSE(FilePath(
"cola").IsDirectory());
612 EXPECT_TRUE(FilePath(
"koala" GTEST_PATH_SEP_).IsDirectory());
613#if GTEST_HAS_ALT_PATH_SEP_
614 EXPECT_TRUE(FilePath(
"koala/").IsDirectory());
618TEST(FilePathTest, IsAbsolutePath) {
619 EXPECT_FALSE(FilePath(
"is" GTEST_PATH_SEP_
"relative").IsAbsolutePath());
620 EXPECT_FALSE(FilePath(
"").IsAbsolutePath());
623 FilePath(
"c:\\" GTEST_PATH_SEP_
"is_not" GTEST_PATH_SEP_
"relative")
625 EXPECT_FALSE(FilePath(
"c:foo" GTEST_PATH_SEP_
"bar").IsAbsolutePath());
627 FilePath(
"c:/" GTEST_PATH_SEP_
"is_not" GTEST_PATH_SEP_
"relative")
629 EXPECT_TRUE(FilePath(
"d:/Windows").IsAbsolutePath());
630 EXPECT_TRUE(FilePath(
"\\\\Host\\Share").IsAbsolutePath());
631 EXPECT_TRUE(FilePath(
"\\\\Host\\Share\\Folder").IsAbsolutePath());
633 EXPECT_TRUE(FilePath(GTEST_PATH_SEP_
"is_not" GTEST_PATH_SEP_
"relative")
638TEST(FilePathTest, IsRootDirectory) {
640 EXPECT_TRUE(FilePath(
"a:\\").IsRootDirectory());
641 EXPECT_TRUE(FilePath(
"Z:/").IsRootDirectory());
642 EXPECT_TRUE(FilePath(
"e://").IsRootDirectory());
643 EXPECT_FALSE(FilePath(
"").IsRootDirectory());
644 EXPECT_FALSE(FilePath(
"b:").IsRootDirectory());
645 EXPECT_FALSE(FilePath(
"b:a").IsRootDirectory());
646 EXPECT_FALSE(FilePath(
"8:/").IsRootDirectory());
647 EXPECT_FALSE(FilePath(
"c|/").IsRootDirectory());
648 EXPECT_TRUE(FilePath(
"c:/").IsRootDirectory());
649 EXPECT_FALSE(FilePath(
"d:/Windows").IsRootDirectory());
653 EXPECT_FALSE(FilePath(
"\\\\Host\\Share").IsRootDirectory());
655 EXPECT_TRUE(FilePath(
"\\\\Host\\Share\\").IsRootDirectory());
656 EXPECT_FALSE(FilePath(
"\\\\Host\\Share\\.").IsRootDirectory());
657 EXPECT_FALSE(FilePath(
"\\\\Host\\Share\\C$\\").IsRootDirectory());
659 EXPECT_TRUE(FilePath(
"/").IsRootDirectory());
660 EXPECT_TRUE(FilePath(
"//").IsRootDirectory());
661 EXPECT_FALSE(FilePath(
"").IsRootDirectory());
662 EXPECT_FALSE(FilePath(
"\\").IsRootDirectory());
663 EXPECT_FALSE(FilePath(
"/x").IsRootDirectory());