Fixes the explanation generated by many composite matchers (by Manuel Klimek); publishes the gmock value printer as testing::PrintToString() (by Zhanyong Wan).
This commit is contained in:
@@ -148,11 +148,11 @@ class GreaterThanMatcher : public MatcherInterface<int> {
|
||||
MatchResultListener* listener) const {
|
||||
const int diff = lhs - rhs_;
|
||||
if (diff > 0) {
|
||||
*listener << "is " << diff << " more than " << rhs_;
|
||||
*listener << "which is " << diff << " more than " << rhs_;
|
||||
} else if (diff == 0) {
|
||||
*listener << "is the same as " << rhs_;
|
||||
*listener << "which is the same as " << rhs_;
|
||||
} else {
|
||||
*listener << "is " << -diff << " less than " << rhs_;
|
||||
*listener << "which is " << -diff << " less than " << rhs_;
|
||||
}
|
||||
|
||||
return lhs > rhs_;
|
||||
@@ -320,11 +320,11 @@ TEST(MatcherTest, MatchAndExplain) {
|
||||
Matcher<int> m = GreaterThan(0);
|
||||
StringMatchResultListener listener1;
|
||||
EXPECT_TRUE(m.MatchAndExplain(42, &listener1));
|
||||
EXPECT_EQ("is 42 more than 0", listener1.str());
|
||||
EXPECT_EQ("which is 42 more than 0", listener1.str());
|
||||
|
||||
StringMatchResultListener listener2;
|
||||
EXPECT_FALSE(m.MatchAndExplain(-9, &listener2));
|
||||
EXPECT_EQ("is 9 less than 0", listener2.str());
|
||||
EXPECT_EQ("which is 9 less than 0", listener2.str());
|
||||
}
|
||||
|
||||
// Tests that a C-string literal can be implicitly converted to a
|
||||
@@ -1180,23 +1180,38 @@ TEST(PairTest, CanExplainMatchResultTo) {
|
||||
// If neither field matches, Pair() should explain about the first
|
||||
// field.
|
||||
const Matcher<std::pair<int, int> > m = Pair(GreaterThan(0), GreaterThan(0));
|
||||
EXPECT_EQ("the first field is 1 less than 0",
|
||||
EXPECT_EQ("whose first field does not match, which is 1 less than 0",
|
||||
Explain(m, std::make_pair(-1, -2)));
|
||||
|
||||
// If the first field matches but the second doesn't, Pair() should
|
||||
// explain about the second field.
|
||||
EXPECT_EQ("the second field is 2 less than 0",
|
||||
EXPECT_EQ("whose second field does not match, which is 2 less than 0",
|
||||
Explain(m, std::make_pair(1, -2)));
|
||||
|
||||
// If the first field doesn't match but the second does, Pair()
|
||||
// should explain about the first field.
|
||||
EXPECT_EQ("the first field is 1 less than 0",
|
||||
EXPECT_EQ("whose first field does not match, which is 1 less than 0",
|
||||
Explain(m, std::make_pair(-1, 2)));
|
||||
|
||||
// If both fields match, Pair() should explain about them both.
|
||||
EXPECT_EQ("the first field is 1 more than 0"
|
||||
", and the second field is 2 more than 0",
|
||||
EXPECT_EQ("whose both fields match, where the first field is a value "
|
||||
"which is 1 more than 0, and the second field is a value "
|
||||
"which is 2 more than 0",
|
||||
Explain(m, std::make_pair(1, 2)));
|
||||
|
||||
// If only the first match has an explanation, only this explanation should
|
||||
// be printed.
|
||||
const Matcher<std::pair<int, int> > explain_first = Pair(GreaterThan(0), 0);
|
||||
EXPECT_EQ("whose both fields match, where the first field is a value "
|
||||
"which is 1 more than 0",
|
||||
Explain(explain_first, std::make_pair(1, 0)));
|
||||
|
||||
// If only the second match has an explanation, only this explanation should
|
||||
// be printed.
|
||||
const Matcher<std::pair<int, int> > explain_second = Pair(0, GreaterThan(0));
|
||||
EXPECT_EQ("whose both fields match, where the second field is a value "
|
||||
"which is 1 more than 0",
|
||||
Explain(explain_second, std::make_pair(0, 1)));
|
||||
}
|
||||
|
||||
TEST(PairTest, MatchesCorrectly) {
|
||||
@@ -2544,7 +2559,14 @@ TEST(PointeeTest, CanExplainMatchResult) {
|
||||
|
||||
const Matcher<int*> m2 = Pointee(GreaterThan(1));
|
||||
int n = 3;
|
||||
EXPECT_EQ("points to a value that is 2 more than 1", Explain(m2, &n));
|
||||
EXPECT_EQ("which points to 3, which is 2 more than 1",
|
||||
Explain(m2, &n));
|
||||
}
|
||||
|
||||
TEST(PointeeTest, AlwaysExplainsPointee) {
|
||||
const Matcher<int*> m = Pointee(0);
|
||||
int n = 42;
|
||||
EXPECT_EQ("which points to 42", Explain(m, &n));
|
||||
}
|
||||
|
||||
// An uncopyable class.
|
||||
@@ -2671,8 +2693,9 @@ TEST(FieldTest, WorksForCompatibleMatcherType) {
|
||||
TEST(FieldTest, CanDescribeSelf) {
|
||||
Matcher<const AStruct&> m = Field(&AStruct::x, Ge(0));
|
||||
|
||||
EXPECT_EQ("the given field is greater than or equal to 0", Describe(m));
|
||||
EXPECT_EQ("the given field is not greater than or equal to 0",
|
||||
EXPECT_EQ("is an object whose given field is greater than or equal to 0",
|
||||
Describe(m));
|
||||
EXPECT_EQ("is an object whose given field is not greater than or equal to 0",
|
||||
DescribeNegation(m));
|
||||
}
|
||||
|
||||
@@ -2682,10 +2705,10 @@ TEST(FieldTest, CanExplainMatchResult) {
|
||||
|
||||
AStruct a;
|
||||
a.x = 1;
|
||||
EXPECT_EQ("", Explain(m, a));
|
||||
EXPECT_EQ("whose given field is 1", Explain(m, a));
|
||||
|
||||
m = Field(&AStruct::x, GreaterThan(0));
|
||||
EXPECT_EQ("the given field is 1 more than 0", Explain(m, a));
|
||||
EXPECT_EQ("whose given field is 1, which is 1 more than 0", Explain(m, a));
|
||||
}
|
||||
|
||||
// Tests that Field() works when the argument is a pointer to const.
|
||||
@@ -2741,8 +2764,9 @@ TEST(FieldForPointerTest, WorksForArgumentOfSubType) {
|
||||
TEST(FieldForPointerTest, CanDescribeSelf) {
|
||||
Matcher<const AStruct*> m = Field(&AStruct::x, Ge(0));
|
||||
|
||||
EXPECT_EQ("the given field is greater than or equal to 0", Describe(m));
|
||||
EXPECT_EQ("the given field is not greater than or equal to 0",
|
||||
EXPECT_EQ("is an object whose given field is greater than or equal to 0",
|
||||
Describe(m));
|
||||
EXPECT_EQ("is an object whose given field is not greater than or equal to 0",
|
||||
DescribeNegation(m));
|
||||
}
|
||||
|
||||
@@ -2753,10 +2777,11 @@ TEST(FieldForPointerTest, CanExplainMatchResult) {
|
||||
AStruct a;
|
||||
a.x = 1;
|
||||
EXPECT_EQ("", Explain(m, static_cast<const AStruct*>(NULL)));
|
||||
EXPECT_EQ("", Explain(m, &a));
|
||||
EXPECT_EQ("which points to an object whose given field is 1", Explain(m, &a));
|
||||
|
||||
m = Field(&AStruct::x, GreaterThan(0));
|
||||
EXPECT_EQ("the given field is 1 more than 0", Explain(m, &a));
|
||||
EXPECT_EQ("which points to an object whose given field is 1, "
|
||||
"which is 1 more than 0", Explain(m, &a));
|
||||
}
|
||||
|
||||
// A user-defined class for testing Property().
|
||||
@@ -2875,9 +2900,10 @@ TEST(PropertyTest, WorksForCompatibleMatcherType) {
|
||||
TEST(PropertyTest, CanDescribeSelf) {
|
||||
Matcher<const AClass&> m = Property(&AClass::n, Ge(0));
|
||||
|
||||
EXPECT_EQ("the given property is greater than or equal to 0", Describe(m));
|
||||
EXPECT_EQ("the given property is not greater than or equal to 0",
|
||||
DescribeNegation(m));
|
||||
EXPECT_EQ("is an object whose given property is greater than or equal to 0",
|
||||
Describe(m));
|
||||
EXPECT_EQ("is an object whose given property "
|
||||
"is not greater than or equal to 0", DescribeNegation(m));
|
||||
}
|
||||
|
||||
// Tests that Property() can explain the match result.
|
||||
@@ -2886,10 +2912,10 @@ TEST(PropertyTest, CanExplainMatchResult) {
|
||||
|
||||
AClass a;
|
||||
a.set_n(1);
|
||||
EXPECT_EQ("", Explain(m, a));
|
||||
EXPECT_EQ("whose given property is 1", Explain(m, a));
|
||||
|
||||
m = Property(&AClass::n, GreaterThan(0));
|
||||
EXPECT_EQ("the given property is 1 more than 0", Explain(m, a));
|
||||
EXPECT_EQ("whose given property is 1, which is 1 more than 0", Explain(m, a));
|
||||
}
|
||||
|
||||
// Tests that Property() works when the argument is a pointer to const.
|
||||
@@ -2954,9 +2980,10 @@ TEST(PropertyForPointerTest, WorksForArgumentOfSubType) {
|
||||
TEST(PropertyForPointerTest, CanDescribeSelf) {
|
||||
Matcher<const AClass*> m = Property(&AClass::n, Ge(0));
|
||||
|
||||
EXPECT_EQ("the given property is greater than or equal to 0", Describe(m));
|
||||
EXPECT_EQ("the given property is not greater than or equal to 0",
|
||||
DescribeNegation(m));
|
||||
EXPECT_EQ("is an object whose given property is greater than or equal to 0",
|
||||
Describe(m));
|
||||
EXPECT_EQ("is an object whose given property "
|
||||
"is not greater than or equal to 0", DescribeNegation(m));
|
||||
}
|
||||
|
||||
// Tests that Property() can explain the result of matching a pointer.
|
||||
@@ -2966,10 +2993,12 @@ TEST(PropertyForPointerTest, CanExplainMatchResult) {
|
||||
AClass a;
|
||||
a.set_n(1);
|
||||
EXPECT_EQ("", Explain(m, static_cast<const AClass*>(NULL)));
|
||||
EXPECT_EQ("", Explain(m, &a));
|
||||
EXPECT_EQ("which points to an object whose given property is 1",
|
||||
Explain(m, &a));
|
||||
|
||||
m = Property(&AClass::n, GreaterThan(0));
|
||||
EXPECT_EQ("the given property is 1 more than 0", Explain(m, &a));
|
||||
EXPECT_EQ("which points to an object whose given property is 1, "
|
||||
"which is 1 more than 0", Explain(m, &a));
|
||||
}
|
||||
|
||||
// Tests ResultOf.
|
||||
@@ -2989,10 +3018,10 @@ TEST(ResultOfTest, WorksForFunctionPointers) {
|
||||
TEST(ResultOfTest, CanDescribeItself) {
|
||||
Matcher<int> matcher = ResultOf(&IntToStringFunction, StrEq("foo"));
|
||||
|
||||
EXPECT_EQ("result of the given callable is equal to \"foo\"",
|
||||
Describe(matcher));
|
||||
EXPECT_EQ("result of the given callable is not equal to \"foo\"",
|
||||
DescribeNegation(matcher));
|
||||
EXPECT_EQ("is mapped by the given callable to a value that "
|
||||
"is equal to \"foo\"", Describe(matcher));
|
||||
EXPECT_EQ("is mapped by the given callable to a value that "
|
||||
"is not equal to \"foo\"", DescribeNegation(matcher));
|
||||
}
|
||||
|
||||
// Tests that ResultOf() can explain the match result.
|
||||
@@ -3000,11 +3029,12 @@ int IntFunction(int input) { return input == 42 ? 80 : 90; }
|
||||
|
||||
TEST(ResultOfTest, CanExplainMatchResult) {
|
||||
Matcher<int> matcher = ResultOf(&IntFunction, Ge(85));
|
||||
EXPECT_EQ("", Explain(matcher, 36));
|
||||
EXPECT_EQ("which is mapped by the given callable to 90",
|
||||
Explain(matcher, 36));
|
||||
|
||||
matcher = ResultOf(&IntFunction, GreaterThan(85));
|
||||
EXPECT_EQ("result of the given callable is 5 more than 85",
|
||||
Explain(matcher, 36));
|
||||
EXPECT_EQ("which is mapped by the given callable to 90, "
|
||||
"which is 5 more than 85", Explain(matcher, 36));
|
||||
}
|
||||
|
||||
// Tests that ResultOf(f, ...) compiles and works as expected when f(x)
|
||||
@@ -3202,7 +3232,7 @@ TEST(ExplainMatchResultTest, AllOf_True_True_2) {
|
||||
|
||||
TEST(ExplainmatcherResultTest, MonomorphicMatcher) {
|
||||
const Matcher<int> m = GreaterThan(5);
|
||||
EXPECT_EQ("is 1 more than 5", Explain(m, 6));
|
||||
EXPECT_EQ("which is 1 more than 5", Explain(m, 6));
|
||||
}
|
||||
|
||||
// The following two tests verify that values without a public copy
|
||||
|
||||
Reference in New Issue
Block a user