diff --git a/llvm/unittests/Support/Path.cpp b/llvm/unittests/Support/Path.cpp index 8e842a95b2b2..a0ddeb6c8c23 100644 --- a/llvm/unittests/Support/Path.cpp +++ b/llvm/unittests/Support/Path.cpp @@ -204,6 +204,71 @@ TEST(Support, Path) { } } +TEST(Support, PathRoot) { + ASSERT_EQ(path::root_name("//net/hello", path::Style::posix).str(), "//net"); + ASSERT_EQ(path::root_name("c:/hello", path::Style::posix).str(), ""); + ASSERT_EQ(path::root_name("c:/hello", path::Style::windows).str(), "c:"); + ASSERT_EQ(path::root_name("/hello", path::Style::posix).str(), ""); + + ASSERT_EQ(path::root_directory("/goo/hello", path::Style::posix).str(), "/"); + ASSERT_EQ(path::root_directory("c:/hello", path::Style::windows).str(), "/"); + ASSERT_EQ(path::root_directory("d/file.txt", path::Style::posix).str(), ""); + ASSERT_EQ(path::root_directory("d/file.txt", path::Style::windows).str(), ""); + + SmallVector paths; + paths.push_back(""); + paths.push_back("."); + paths.push_back(".."); + paths.push_back("foo"); + paths.push_back("/"); + paths.push_back("/foo"); + paths.push_back("foo/"); + paths.push_back("/foo/"); + paths.push_back("foo/bar"); + paths.push_back("/foo/bar"); + paths.push_back("//net"); + paths.push_back("//net/"); + paths.push_back("//net/foo"); + paths.push_back("///foo///"); + paths.push_back("///foo///bar"); + paths.push_back("/."); + paths.push_back("./"); + paths.push_back("/.."); + paths.push_back("../"); + paths.push_back("foo/."); + paths.push_back("foo/.."); + paths.push_back("foo/./"); + paths.push_back("foo/./bar"); + paths.push_back("foo/.."); + paths.push_back("foo/../"); + paths.push_back("foo/../bar"); + paths.push_back("c:"); + paths.push_back("c:/"); + paths.push_back("c:foo"); + paths.push_back("c:/foo"); + paths.push_back("c:foo/"); + paths.push_back("c:/foo/"); + paths.push_back("c:/foo/bar"); + paths.push_back("prn:"); + paths.push_back("c:\\"); + paths.push_back("c:foo"); + paths.push_back("c:\\foo"); + paths.push_back("c:foo\\"); + paths.push_back("c:\\foo\\"); + paths.push_back("c:\\foo/"); + paths.push_back("c:/foo\\bar"); + + for (StringRef p : paths) { + ASSERT_EQ( + path::root_name(p, path::Style::posix).str() + path::root_directory(p, path::Style::posix).str(), + path::root_path(p, path::Style::posix).str()); + + ASSERT_EQ( + path::root_name(p, path::Style::windows).str() + path::root_directory(p, path::Style::windows).str(), + path::root_path(p, path::Style::windows).str()); + } +} + TEST(Support, FilenameParent) { EXPECT_EQ("/", path::filename("/")); EXPECT_EQ("", path::parent_path("/"));