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;
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.
}
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) {
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());