]> granicus.if.org Git - clang/commitdiff
[DirectoryWatcher][test][NFC] Add information to test failure reports
authorJan Korous <jkorous@apple.com>
Sat, 13 Jul 2019 00:09:04 +0000 (00:09 +0000)
committerJan Korous <jkorous@apple.com>
Sat, 13 Jul 2019 00:09:04 +0000 (00:09 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@365976 91177308-0d34-0410-b5e6-96231b3b80d8

unittests/DirectoryWatcher/DirectoryWatcherTest.cpp

index 0808ff47dee89671b05f6d360897307df674965b..72bc86d4493cf4cbbaf53da6bdcdabc23ae1ff55 100644 (file)
@@ -97,7 +97,9 @@ std::string eventKindToString(const DirectoryWatcher::Event::EventKind K) {
 
 struct VerifyingConsumer {
   std::vector<DirectoryWatcher::Event> ExpectedInitial;
+  const std::vector<DirectoryWatcher::Event> ExpectedInitialCopy;
   std::vector<DirectoryWatcher::Event> ExpectedNonInitial;
+  const std::vector<DirectoryWatcher::Event> ExpectedNonInitialCopy;
   std::vector<DirectoryWatcher::Event> OptionalNonInitial;
   std::vector<DirectoryWatcher::Event> UnexpectedInitial;
   std::vector<DirectoryWatcher::Event> UnexpectedNonInitial;
@@ -108,8 +110,8 @@ struct VerifyingConsumer {
       const std::vector<DirectoryWatcher::Event> &ExpectedInitial,
       const std::vector<DirectoryWatcher::Event> &ExpectedNonInitial,
       const std::vector<DirectoryWatcher::Event> &OptionalNonInitial = {})
-      : ExpectedInitial(ExpectedInitial),
-        ExpectedNonInitial(ExpectedNonInitial),
+      : ExpectedInitial(ExpectedInitial), ExpectedInitialCopy(ExpectedInitial),
+        ExpectedNonInitial(ExpectedNonInitial), ExpectedNonInitialCopy(ExpectedNonInitial),
         OptionalNonInitial(OptionalNonInitial) {}
 
   // This method is used by DirectoryWatcher.
@@ -181,6 +183,26 @@ struct VerifyingConsumer {
   }
 
   void printUnmetExpectations(llvm::raw_ostream &OS) {
+    // If there was any issue, print the expected state
+    if (
+      !ExpectedInitial.empty()
+      ||
+      !ExpectedNonInitial.empty()
+      ||
+      !UnexpectedInitial.empty()
+      ||
+      !UnexpectedNonInitial.empty()
+    ) {
+      OS << "Expected initial events: \n";
+      for (const auto &E : ExpectedInitialCopy) {
+        OS << eventKindToString(E.Kind) << " " << E.Filename << "\n";
+      }
+      OS << "Expected non-initial events: \n";
+      for (const auto &E : ExpectedNonInitialCopy) {
+        OS << eventKindToString(E.Kind) << " " << E.Filename << "\n";
+      }
+    }
+
     if (!ExpectedInitial.empty()) {
       OS << "Expected but not seen initial events: \n";
       for (const auto &E : ExpectedInitial) {
@@ -218,6 +240,7 @@ void checkEventualResultWithTimeout(VerifyingConsumer &TestConsumer) {
   EXPECT_TRUE(WaitForExpectedStateResult.wait_for(std::chrono::seconds(3)) ==
               std::future_status::ready)
       << "The expected result state wasn't reached before the time-out.";
+  std::unique_lock<std::mutex> L(TestConsumer.Mtx);
   EXPECT_TRUE(TestConsumer.result().hasValue());
   if (TestConsumer.result().hasValue()) {
     EXPECT_TRUE(*TestConsumer.result());