amaiorano created this revision.
amaiorano added reviewers: klimek, djasper, hans, cfe-commits.

This is more a workaround than a real fix. The real problem is that FS.addFile 
uses clang::vfs::FileSystem::makeAbsolute to convert the input path to an 
absolute path, while getStyle uses llvm::sys::fs::make_absolute, which while 
named similarly,  behave differently. Both will join the input path to the 
current working directory (CWD), except that in the former case, you need to 
have set the CWD explicitly via 
clang::vfs::FileSystem::setCurrentWorkingDirectory, while the latter retrieves 
the CWD from the platform abstraction (llvm::sys::fs::current_path).

A better fix might be to make clang::vfs::FileSystem match the behaviour of 
llvm::sys::fs, having it retrieve the CWD from the platform, rather than having 
the client set it explicitly. Or perhaps clang::vfs::FileSystem should be 
rewritten in terms of llvm::sys::fs, and deprecate the former so that code 
moves towards using the latter.


https://reviews.llvm.org/D27971

Files:
  unittests/Format/FormatTest.cpp


Index: unittests/Format/FormatTest.cpp
===================================================================
--- unittests/Format/FormatTest.cpp
+++ unittests/Format/FormatTest.cpp
@@ -10907,12 +10907,16 @@
             format("auto a = unique_ptr < Foo < Bar>[10]> ;", Spaces));
 }
 
-// Since this test case uses UNIX-style file path. We disable it for MS
-// compiler.
-#if !defined(_MSC_VER) && !defined(__MINGW32__)
-
 TEST(FormatStyle, GetStyleOfFile) {
   vfs::InMemoryFileSystem FS;
+
+  // Set CWD so that clang::vfs::FileSystem::makeAbsolute and
+  // llvm::sys::fs::make_absolute return the same thing.
+  llvm::SmallString<128> InitialDirectory;
+  std::error_code EC = llvm::sys::fs::current_path(InitialDirectory);
+  EXPECT_EQ(EC.value(), 0);
+  FS.setCurrentWorkingDirectory(InitialDirectory);
+
   // Test 1: format file in the same directory.
   ASSERT_TRUE(
       FS.addFile("/a/.clang-format", 0,
@@ -10938,8 +10942,6 @@
   ASSERT_EQ(Style3, getGoogleStyle());
 }
 
-#endif // _MSC_VER
-
 TEST_F(ReplacementTest, FormatCodeAfterReplacements) {
   // Column limit is 20.
   std::string Code = "Type *a =\n"


Index: unittests/Format/FormatTest.cpp
===================================================================
--- unittests/Format/FormatTest.cpp
+++ unittests/Format/FormatTest.cpp
@@ -10907,12 +10907,16 @@
             format("auto a = unique_ptr < Foo < Bar>[10]> ;", Spaces));
 }
 
-// Since this test case uses UNIX-style file path. We disable it for MS
-// compiler.
-#if !defined(_MSC_VER) && !defined(__MINGW32__)
-
 TEST(FormatStyle, GetStyleOfFile) {
   vfs::InMemoryFileSystem FS;
+
+  // Set CWD so that clang::vfs::FileSystem::makeAbsolute and
+  // llvm::sys::fs::make_absolute return the same thing.
+  llvm::SmallString<128> InitialDirectory;
+  std::error_code EC = llvm::sys::fs::current_path(InitialDirectory);
+  EXPECT_EQ(EC.value(), 0);
+  FS.setCurrentWorkingDirectory(InitialDirectory);
+
   // Test 1: format file in the same directory.
   ASSERT_TRUE(
       FS.addFile("/a/.clang-format", 0,
@@ -10938,8 +10942,6 @@
   ASSERT_EQ(Style3, getGoogleStyle());
 }
 
-#endif // _MSC_VER
-
 TEST_F(ReplacementTest, FormatCodeAfterReplacements) {
   // Column limit is 20.
   std::string Code = "Type *a =\n"
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to