support: add a utility function to normalise path separators

Add a utility function to convert the Windows path separator to Unix style path
separators.  This is used by a subsequent change in clang to enable the use of
Windows SDK headers on Linux.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203611 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Saleem Abdulrasool
2014-03-11 22:05:42 +00:00
parent ff73a2bf86
commit 404a72729b
4 changed files with 63 additions and 0 deletions

View File

@@ -620,4 +620,41 @@ TEST_F(FileSystemTest, FileMapping) {
fs::mapped_file_region mfrrv(std::move(m));
EXPECT_EQ(mfrrv.const_data(), Data);
}
TEST(Support, NormalizePath) {
#if defined(LLVM_ON_WIN32)
#define EXPECT_PATH_IS(path__, windows__, not_windows__) \
EXPECT_EQ(path__, windows__);
#else
#define EXPECT_PATH_IS(path__, windows__, not_windows__) \
EXPECT_EQ(path__, not_windows__);
#endif
SmallString<64> Path1("a");
SmallString<64> Path2("a/b");
SmallString<64> Path3("a\\b");
SmallString<64> Path4("a\\\\b");
SmallString<64> Path5("\\a");
SmallString<64> Path6("a\\");
ASSERT_NO_ERROR(fs::normalize_separators(Path1));
EXPECT_PATH_IS(Path1, "a", "a");
ASSERT_NO_ERROR(fs::normalize_separators(Path2));
EXPECT_PATH_IS(Path2, "a/b", "a/b");
ASSERT_NO_ERROR(fs::normalize_separators(Path3));
EXPECT_PATH_IS(Path3, "a\\b", "a/b");
ASSERT_NO_ERROR(fs::normalize_separators(Path4));
EXPECT_PATH_IS(Path4, "a\\\\b", "a\\\\b");
ASSERT_NO_ERROR(fs::normalize_separators(Path5));
EXPECT_PATH_IS(Path5, "\\a", "/a");
ASSERT_NO_ERROR(fs::normalize_separators(Path6));
EXPECT_PATH_IS(Path6, "a\\", "a/");
#undef EXPECT_PATH_IS
}
} // anonymous namespace