Index: base/file_path_unittest.cc |
diff --git a/base/file_path_unittest.cc b/base/file_path_unittest.cc |
index 3439c6caefec04d6d2173028454f1957a1ca1bc8..0df68389ada5543a36500193298c6b8308dea854 100644 |
--- a/base/file_path_unittest.cc |
+++ b/base/file_path_unittest.cc |
@@ -27,6 +27,11 @@ struct BinaryTestData { |
const FilePath::CharType* expected; |
}; |
+struct BinaryBooleanTestData { |
+ const FilePath::CharType* inputs[2]; |
+ bool expected; |
+}; |
+ |
// file_util winds up using autoreleased objects on the Mac, so this needs |
// to be a PlatformTest |
class FilePathTest : public PlatformTest { |
@@ -375,6 +380,103 @@ TEST_F(FilePathTest, IsAbsolute) { |
} |
} |
+TEST_F(FilePathTest, PathComponentsTest) { |
+ const struct UnaryTestData cases[] = { |
+ { FPL("//foo/bar/baz/"), FPL("|//|foo|bar|baz")}, |
+ { FPL("///"), FPL("|/")}, |
+ { FPL("/foo//bar//baz/"), FPL("|/|foo|bar|baz")}, |
+ { FPL("/foo/bar/baz/"), FPL("|/|foo|bar|baz")}, |
+ { FPL("/foo/bar/baz//"), FPL("|/|foo|bar|baz")}, |
+ { FPL("/foo/bar/baz///"), FPL("|/|foo|bar|baz")}, |
+ { FPL("/foo/bar/baz"), FPL("|/|foo|bar|baz")}, |
+ { FPL("/foo/bar.bot/baz.txt"), FPL("|/|foo|bar.bot|baz.txt")}, |
+ { FPL("//foo//bar/baz"), FPL("|//|foo|bar|baz")}, |
+ { FPL("/"), FPL("|/")}, |
+ { FPL("foo"), FPL("|foo")}, |
+ { FPL(""), FPL("")}, |
+#if defined(FILE_PATH_USES_DRIVE_LETTERS) |
+ { FPL("e:/foo"), FPL("|e:|/|foo")}, |
+ { FPL("e:/"), FPL("|e:|/")}, |
+ { FPL("e:"), FPL("|e:")}, |
+#endif // FILE_PATH_USES_DRIVE_LETTERS |
+#if defined(FILE_PATH_USES_WIN_SEPARATORS) |
+ { FPL("../foo"), FPL("|..|foo")}, |
+ { FPL("./foo"), FPL("|foo")}, |
+ { FPL("../foo/bar/"), FPL("|..|foo|bar") }, |
+ { FPL("\\\\foo\\bar\\baz\\"), FPL("|\\\\|foo|bar|baz")}, |
+ { FPL("\\\\\\"), FPL("|\\")}, |
+ { FPL("\\foo\\\\bar\\\\baz\\"), FPL("|\\|foo|bar|baz")}, |
+ { FPL("\\foo\\bar\\baz\\"), FPL("|\\|foo|bar|baz")}, |
+ { FPL("\\foo\\bar\\baz\\\\"), FPL("|\\|foo|bar|baz")}, |
+ { FPL("\\foo\\bar\\baz\\\\\\"), FPL("|\\|foo|bar|baz")}, |
+ { FPL("\\foo\\bar\\baz"), FPL("|\\|foo|bar|baz")}, |
+ { FPL("\\foo\\bar/baz\\\\\\"), FPL("|\\|foo|bar|baz")}, |
+ { FPL("/foo\\bar\\baz"), FPL("|/|foo|bar|baz")}, |
+ { FPL("\\foo\\bar.bot\\baz.txt"), FPL("|\\|foo|bar.bot|baz.txt")}, |
+ { FPL("\\\\foo\\\\bar\\baz"), FPL("|\\\\|foo|bar|baz")}, |
+ { FPL("\\"), FPL("|\\")}, |
+#endif // FILE_PATH_USES_WIN_SEPARATORS |
+ }; |
+ |
+ for (size_t i = 0; i < arraysize(cases); ++i) { |
+ FilePath input(cases[i].input); |
+ std::vector<FilePath::StringType> comps; |
+ input.GetComponents(&comps); |
+ |
+ FilePath::StringType observed; |
+ for (size_t j = 0; j < comps.size(); ++j) { |
+ observed.append(FILE_PATH_LITERAL("|"), 1); |
+ observed.append(comps[j]); |
+ } |
+ EXPECT_EQ(FilePath::StringType(cases[i].expected), observed) << |
+ "i: " << i << ", input: " << input.value(); |
+ } |
+} |
+ |
+TEST_F(FilePathTest, IsParentTest) { |
+ const struct BinaryBooleanTestData cases[] = { |
+ { { FPL("/"), FPL("/foo/bar/baz") }, true}, |
+ { { FPL("/foo/bar"), FPL("/foo/bar/baz") }, true}, |
+ { { FPL("/foo/bar/"), FPL("/foo/bar/baz") }, true}, |
+ { { FPL("//foo/bar/"), FPL("//foo/bar/baz") }, true}, |
+ { { FPL("/foo/bar"), FPL("/foo2/bar/baz") }, false}, |
+ { { FPL("/foo/bar.txt"), FPL("/foo/bar/baz") }, false}, |
+ { { FPL("/foo/bar"), FPL("/foo/bar2/baz") }, false}, |
+ { { FPL("/foo/bar"), FPL("/foo/bar") }, false}, |
+ { { FPL("/foo/bar/baz"), FPL("/foo/bar") }, false}, |
+ { { FPL("foo/bar"), FPL("foo/bar/baz") }, true}, |
+ { { FPL("foo/bar"), FPL("foo2/bar/baz") }, false}, |
+ { { FPL("foo/bar"), FPL("foo/bar2/baz") }, false}, |
+ { { FPL(""), FPL("foo") }, false}, |
+#if defined(FILE_PATH_USES_DRIVE_LETTERS) |
+ { { FPL("c:/foo/bar"), FPL("c:/foo/bar/baz") }, true}, |
+ { { FPL("c:/"), FPL("c:/foo/bar/baz") }, true}, |
+ { { FPL("c:"), FPL("c:/foo/bar/baz") }, true}, |
+ { { FPL("c:/foo/bar"), FPL("d:/foo/bar/baz") }, false}, |
+ { { FPL("c:/foo/bar"), FPL("c:/foo2/bar/baz") }, false}, |
+ { { FPL("c:/foo/bar"), FPL("c:/foo/bar2/baz") }, false}, |
+#endif // FILE_PATH_USES_DRIVE_LETTERS |
+#if defined(FILE_PATH_USES_WIN_SEPARATORS) |
+ { { FPL("\\foo\\bar"), FPL("\\foo\\bar\\baz") }, true}, |
+ { { FPL("\\foo/bar"), FPL("\\foo\\bar\\baz") }, true}, |
+ { { FPL("\\foo/bar"), FPL("\\foo/bar/baz") }, true}, |
+ { { FPL("\\"), FPL("\\foo\\bar\\baz") }, true}, |
+ { { FPL(""), FPL("\\foo\\bar\\baz") }, false}, |
+ { { FPL("\\foo\\bar"), FPL("\\foo2\\bar\\baz") }, false}, |
+ { { FPL("\\foo\\bar"), FPL("\\foo\\bar2\\baz") }, false}, |
+#endif // FILE_PATH_USES_DRIVE_LETTERS |
+ }; |
+ |
+ for (size_t i = 0; i < arraysize(cases); ++i) { |
+ FilePath parent(cases[i].inputs[0]); |
+ FilePath child(cases[i].inputs[1]); |
+ |
+ EXPECT_EQ(parent.IsParent(child), cases[i].expected) << |
+ "i: " << i << ", parent: " << parent.value() << ", child: " << |
+ child.value(); |
+ } |
+} |
+ |
TEST_F(FilePathTest, Extension) { |
FilePath base_dir(FILE_PATH_LITERAL("base_dir")); |