diff options
author | Serge Pavlov <sepavloff@gmail.com> | 2017-03-01 09:38:15 +0000 |
---|---|---|
committer | Serge Pavlov <sepavloff@gmail.com> | 2017-03-01 09:38:15 +0000 |
commit | 82d2de36f56323d9e6c40e0ab365333af64f592e (patch) | |
tree | 7fc4a922d214c201599702ed2e082aad862681bd /unittests | |
parent | aac0739778225b43c7767e6b0e986dfcd5f51191 (diff) |
Process tilde in llvm::sys::path::native
Windows does not treat `~` as a reference to home directory, so the call
to `llvm::sys::path::native` on, say, `~/somedir` produces `~\somedir`,
which has different meaning than the original path. With this change
tilde is expanded on Windows to user profile directory. Such behavior
keeps original meaning of the path and is consistent with the algorithm
of `llvm::sys::path::home_directory`.
Differential Revision: https://reviews.llvm.org/D27527
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296590 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests')
-rw-r--r-- | unittests/Support/Path.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/unittests/Support/Path.cpp b/unittests/Support/Path.cpp index 24f16fd1696..a93f929af78 100644 --- a/unittests/Support/Path.cpp +++ b/unittests/Support/Path.cpp @@ -968,6 +968,33 @@ TEST(Support, NormalizePath) { EXPECT_PATH_IS(Path6, "a\\", "a/"); #undef EXPECT_PATH_IS + +#if defined(LLVM_ON_WIN32) + SmallString<64> PathHome; + path::home_directory(PathHome); + + const char *Path7a = "~/aaa"; + SmallString<64> Path7(Path7a); + path::native(Path7); + EXPECT_TRUE(Path7.endswith("\\aaa")); + EXPECT_TRUE(Path7.startswith(PathHome)); + EXPECT_EQ(Path7.size(), PathHome.size() + strlen(Path7a + 1)); + + const char *Path8a = "~"; + SmallString<64> Path8(Path8a); + path::native(Path8); + EXPECT_EQ(Path8, PathHome); + + const char *Path9a = "~aaa"; + SmallString<64> Path9(Path9a); + path::native(Path9); + EXPECT_EQ(Path9, "~aaa"); + + const char *Path10a = "aaa/~/b"; + SmallString<64> Path10(Path10a); + path::native(Path10); + EXPECT_EQ(Path10, "aaa\\~\\b"); +#endif } TEST(Support, RemoveLeadingDotSlash) { |