Googletest export

GMock: Make Truly explain when it fails

I just wrote a test that had a matcher of the form
  Optional(AllOf(
    SomeMatcher,
    SomeOtherMatcher,
    Truly(SomePredicate)))

The predicate failed, the other two matchers succeeded, and I got a hard-to-interpret message saying that the value in the optional "didn't match". Didn't match what?

This change improves situations like that slightly by having Truly explain to its result listener when it fails. When there are multiple Trulys in an AllOf, there will be some ambiguity, but it will at least provide more information than right now.

PiperOrigin-RevId: 341105141
This commit is contained in:
Abseil Team 2020-11-06 16:11:06 -05:00 committed by Mark Barolak
parent d89b363021
commit 0c400f67fc
2 changed files with 9 additions and 1 deletions

View File

@ -1453,7 +1453,7 @@ class TrulyMatcher {
// interested in the address of the argument.
template <typename T>
bool MatchAndExplain(T& x, // NOLINT
MatchResultListener* /* listener */) const {
MatchResultListener* listener) const {
// Without the if-statement, MSVC sometimes warns about converting
// a value to bool (warning 4800).
//
@ -1462,6 +1462,7 @@ class TrulyMatcher {
// having no operator!().
if (predicate_(x))
return true;
*listener << "didn't satisfy the given predicate";
return false;
}

View File

@ -2984,6 +2984,13 @@ TEST(TrulyTest, WorksForByRefArguments) {
EXPECT_FALSE(m.Matches(n));
}
// Tests that Truly(predicate) provides a helpful reason when it fails.
TEST(TrulyTest, ExplainsFailures) {
StringMatchResultListener listener;
EXPECT_FALSE(ExplainMatchResult(Truly(IsPositive), -1, &listener));
EXPECT_EQ(listener.str(), "didn't satisfy the given predicate");
}
// Tests that Matches(m) is a predicate satisfied by whatever that
// matches matcher m.
TEST(MatchesTest, IsSatisfiedByWhatMatchesTheMatcher) {