Index: tools/gn/filesystem_utils_unittest.cc |
diff --git a/tools/gn/filesystem_utils_unittest.cc b/tools/gn/filesystem_utils_unittest.cc |
index f62f4820c671d29d30ca6da96d9691ba6b89bb23..69ae67c2878f9c202a1fa27d49d9efb5293901e2 100644 |
--- a/tools/gn/filesystem_utils_unittest.cc |
+++ b/tools/gn/filesystem_utils_unittest.cc |
@@ -254,6 +254,55 @@ TEST(FilesystemUtils, DirectoryWithNoLastSlash) { |
EXPECT_EQ("/bar", DirectoryWithNoLastSlash(SourceDir("/bar/"))); |
} |
+TEST(FilesystemUtils, SourceDirForPath) { |
+#if defined(OS_WIN) |
+ base::FilePath root(L"C:\\source\\foo\\"); |
+ EXPECT_EQ("/C:/foo/bar/", SourceDirForPath(root, |
+ base::FilePath(L"C:\\foo\\bar")).value()); |
+ EXPECT_EQ("/", SourceDirForPath(root, |
+ base::FilePath(L"/")).value()); |
+ EXPECT_EQ("//", SourceDirForPath(root, |
+ base::FilePath(L"C:\\source\\foo")).value()); |
+ EXPECT_EQ("//bar/", SourceDirForPath(root, |
+ base::FilePath(L"C:\\source\\foo\\bar\\")). value()); |
+ EXPECT_EQ("//bar/baz/", SourceDirForPath(root, |
+ base::FilePath(L"C:\\source\\foo\\bar\\baz")).value()); |
+ |
+ // Should be case-and-slash-insensitive. |
+ EXPECT_EQ("//baR/", SourceDirForPath(root, |
+ base::FilePath(L"c:/SOURCE\\Foo/baR/")).value()); |
+ |
+ // Some "weird" Windows paths. |
+ EXPECT_EQ("/foo/bar/", SourceDirForPath(root, |
+ base::FilePath(L"/foo/bar/")).value()); |
+ EXPECT_EQ("/C:/foo/bar/", SourceDirForPath(root, |
+ base::FilePath(L"C:foo/bar/")).value()); |
+ |
+ // Also allow absolute GN-style Windows paths. |
+ EXPECT_EQ("/C:/foo/bar/", SourceDirForPath(root, |
+ base::FilePath(L"/C:/foo/bar")).value()); |
+ EXPECT_EQ("//bar/", SourceDirForPath(root, |
+ base::FilePath(L"/C:/source/foo/bar")).value()); |
+ |
+#else |
+ base::FilePath root("/source/foo/"); |
+ EXPECT_EQ("/foo/bar/", SourceDirForPath(root, |
+ base::FilePath("/foo/bar/")).value()); |
+ EXPECT_EQ("/", SourceDirForPath(root, |
+ base::FilePath("/")).value()); |
+ EXPECT_EQ("//", SourceDirForPath(root, |
+ base::FilePath("/source/foo")).value()); |
+ EXPECT_EQ("//bar/", SourceDirForPath(root, |
+ base::FilePath("/source/foo/bar/")).value()); |
+ EXPECT_EQ("//bar/baz/", SourceDirForPath(root, |
+ base::FilePath("/source/foo/bar/baz/")).value()); |
+ |
+ // Should be case-sensitive. |
+ EXPECT_EQ("/SOURCE/foo/bar/", SourceDirForPath(root, |
+ base::FilePath("/SOURCE/foo/bar/")).value()); |
+#endif |
+} |
+ |
TEST(FilesystemUtils, GetToolchainDirs) { |
BuildSettings build_settings; |
build_settings.SetBuildDir(SourceDir("//out/Debug/")); |