]> granicus.if.org Git - clang/commitdiff
Fix test issues from r211623 and remove test-only API
authorBen Langmuir <blangmuir@apple.com>
Tue, 24 Jun 2014 21:08:13 +0000 (21:08 +0000)
committerBen Langmuir <blangmuir@apple.com>
Tue, 24 Jun 2014 21:08:13 +0000 (21:08 +0000)
1) missing iterator bits needed by libstdc++4.7
Using find_if was convenient, but since operator++ wasn't a good
interface anyway, I just replaced with a range-based for loop and
removed operator++ from the directory_iterator class.

2) stop relying on order of iterating real files

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211633 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/VirtualFileSystem.h
unittests/Basic/VirtualFileSystemTest.cpp

index 8c83012ebdbb0295e51757000e6dddb052de3b40..3b43d1e75f5fbd4038ac6f9274d11b1861d362da 100644 (file)
@@ -147,15 +147,6 @@ public:
   bool operator!=(const directory_iterator &RHS) const {
     return !(*this == RHS);
   }
-
-  /// For testing only. Directory iteration does not always succeed!
-  directory_iterator &operator++() {
-    std::error_code EC;
-    increment(EC);
-    if (EC)
-      llvm::report_fatal_error("directory iteration failed!");
-    return *this;
-  }
 };
 
 /// \brief The virtual file system interface.
index 63e9c42047f0b2aa7cba15dd01641f7cdfd4e693..b0b3f87660efbeb5484c7038e391d14ea79f16a0 100644 (file)
@@ -296,11 +296,12 @@ TEST(VirtualFileSystemTest, BasicRealFSIteration) {
   I = FS->dir_begin(Twine(TestDirectory), EC);
   ASSERT_FALSE(EC);
   ASSERT_NE(vfs::directory_iterator(), I);
-  EXPECT_TRUE(I->getName().endswith("a"));
+  // Check either a or c, since we can't rely on the iteration order.
+  EXPECT_TRUE(I->getName().endswith("a") || I->getName().endswith("c"));
   I.increment(EC);
   ASSERT_FALSE(EC);
   ASSERT_NE(vfs::directory_iterator(), I);
-  EXPECT_TRUE(I->getName().endswith("c"));
+  EXPECT_TRUE(I->getName().endswith("a") || I->getName().endswith("c"));
   I.increment(EC);
   EXPECT_EQ(vfs::directory_iterator(), I);
 }
@@ -395,23 +396,25 @@ TEST(VirtualFileSystemTest, HiddenInIteration) {
     checkContents(O->dir_begin("/", EC), Contents);
   }
 
-  // FIXME: broke gcc build
   // Make sure we get the top-most entry
-  // vfs::directory_iterator E;
-  // {
-  //   auto I = std::find_if(O->dir_begin("/", EC), E, [](vfs::Status S){
-  //     return S.getName() == "/hiddenByUp";
-  //   });
-  //   ASSERT_NE(E, I);
-  //   EXPECT_EQ(sys::fs::owner_all, I->getPermissions());
-  // }
-  // {
-  //   auto I = std::find_if(O->dir_begin("/", EC), E, [](vfs::Status S){
-  //     return S.getName() == "/hiddenByMid";
-  //   });
-  //   ASSERT_NE(E, I);
-  //   EXPECT_EQ(sys::fs::owner_write, I->getPermissions());
-  // }
+  {
+    std::error_code EC;
+    vfs::directory_iterator I = O->dir_begin("/", EC), E;
+    for ( ; !EC && I != E; I.increment(EC))
+      if (I->getName() == "/hiddenByUp")
+        break;
+    ASSERT_NE(E, I);
+    EXPECT_EQ(sys::fs::owner_all, I->getPermissions());
+  }
+  {
+    std::error_code EC;
+    vfs::directory_iterator I = O->dir_begin("/", EC), E;
+    for ( ; !EC && I != E; I.increment(EC))
+      if (I->getName() == "/hiddenByMid")
+        break;
+    ASSERT_NE(E, I);
+    EXPECT_EQ(sys::fs::owner_write, I->getPermissions());
+  }
 }
 
 // NOTE: in the tests below, we use '//root/' as our root directory, since it is