aboutsummaryrefslogtreecommitdiffstats
path: root/test/gmock-generated-matchers_test.cc
diff options
context:
space:
mode:
authorzhanyong.wan <zhanyong.wan@8415998a-534a-0410-bf83-d39667b30386>2010-03-24 17:35:11 +0000
committerzhanyong.wan <zhanyong.wan@8415998a-534a-0410-bf83-d39667b30386>2010-03-24 17:35:11 +0000
commitb1c7f93c52d7fbf484f34d01a65cfaec03786564 (patch)
tree1e506bb6f4bf1e426abac589824a93e06b0146eb /test/gmock-generated-matchers_test.cc
parent676e8cc6092853c9dbf1eeab2402be0069d8fb7e (diff)
downloadgoogletest-b1c7f93c52d7fbf484f34d01a65cfaec03786564.tar.gz
googletest-b1c7f93c52d7fbf484f34d01a65cfaec03786564.tar.bz2
googletest-b1c7f93c52d7fbf484f34d01a65cfaec03786564.zip
Improves matcher messages across the board.
Diffstat (limited to 'test/gmock-generated-matchers_test.cc')
-rw-r--r--test/gmock-generated-matchers_test.cc85
1 files changed, 65 insertions, 20 deletions
diff --git a/test/gmock-generated-matchers_test.cc b/test/gmock-generated-matchers_test.cc
index db2ffb2f..12479af4 100644
--- a/test/gmock-generated-matchers_test.cc
+++ b/test/gmock-generated-matchers_test.cc
@@ -211,6 +211,43 @@ TEST(ArgsTest, DescribesNegationCorrectly) {
DescribeNegation(m));
}
+TEST(ArgsTest, ExplainsMatchResultWithoutInnerExplanation) {
+ const Matcher<tuple<bool, int, int> > m = Args<1, 2>(Eq());
+ EXPECT_EQ("whose fields (#1, #2) are (42, 42)",
+ Explain(m, make_tuple(false, 42, 42)));
+ EXPECT_EQ("whose fields (#1, #2) are (42, 43)",
+ Explain(m, make_tuple(false, 42, 43)));
+}
+
+// For testing Args<>'s explanation.
+class LessThanMatcher : public MatcherInterface<tuple<char, int> > {
+ public:
+ virtual void DescribeTo(::std::ostream* os) const {}
+
+ virtual bool MatchAndExplain(tuple<char, int> value,
+ MatchResultListener* listener) const {
+ const int diff = get<0>(value) - get<1>(value);
+ if (diff > 0) {
+ *listener << "where the first value is " << diff
+ << " more than the second";
+ }
+ return diff < 0;
+ }
+};
+
+Matcher<tuple<char, int> > LessThan() {
+ return MakeMatcher(new LessThanMatcher);
+}
+
+TEST(ArgsTest, ExplainsMatchResultWithInnerExplanation) {
+ const Matcher<tuple<char, int, int> > m = Args<0, 2>(LessThan());
+ EXPECT_EQ("whose fields (#0, #2) are ('a' (97), 42), "
+ "where the first value is 55 more than the second",
+ Explain(m, make_tuple('a', 42, 42)));
+ EXPECT_EQ("whose fields (#0, #2) are ('\\0', 43)",
+ Explain(m, make_tuple('\0', 42, 43)));
+}
+
// For testing ExplainMatchResultTo().
class GreaterThanMatcher : public MatcherInterface<int> {
public:
@@ -224,11 +261,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_;
@@ -254,32 +291,32 @@ TEST(ElementsAreTest, CanDescribeExpectingNoElement) {
TEST(ElementsAreTest, CanDescribeExpectingOneElement) {
Matcher<vector<int> > m = ElementsAre(Gt(5));
- EXPECT_EQ("has 1 element that is greater than 5", Describe(m));
+ EXPECT_EQ("has 1 element that is > 5", Describe(m));
}
TEST(ElementsAreTest, CanDescribeExpectingManyElements) {
Matcher<list<string> > m = ElementsAre(StrEq("one"), "two");
EXPECT_EQ("has 2 elements where\n"
- "element 0 is equal to \"one\",\n"
- "element 1 is equal to \"two\"", Describe(m));
+ "element #0 is equal to \"one\",\n"
+ "element #1 is equal to \"two\"", Describe(m));
}
TEST(ElementsAreTest, CanDescribeNegationOfExpectingNoElement) {
Matcher<vector<int> > m = ElementsAre();
- EXPECT_EQ("is not empty", DescribeNegation(m));
+ EXPECT_EQ("isn't empty", DescribeNegation(m));
}
TEST(ElementsAreTest, CanDescribeNegationOfExpectingOneElment) {
Matcher<const list<int>& > m = ElementsAre(Gt(5));
- EXPECT_EQ("does not have 1 element, or\n"
- "element 0 is not greater than 5", DescribeNegation(m));
+ EXPECT_EQ("doesn't have 1 element, or\n"
+ "element #0 isn't > 5", DescribeNegation(m));
}
TEST(ElementsAreTest, CanDescribeNegationOfExpectingManyElements) {
Matcher<const list<string>& > m = ElementsAre("one", "two");
- EXPECT_EQ("does not have 2 elements, or\n"
- "element 0 is not equal to \"one\", or\n"
- "element 1 is not equal to \"two\"", DescribeNegation(m));
+ EXPECT_EQ("doesn't have 2 elements, or\n"
+ "element #0 isn't equal to \"one\", or\n"
+ "element #1 isn't equal to \"two\"", DescribeNegation(m));
}
TEST(ElementsAreTest, DoesNotExplainTrivialMatch) {
@@ -297,8 +334,9 @@ TEST(ElementsAreTest, ExplainsNonTrivialMatch) {
const int a[] = { 10, 0, 100 };
vector<int> test_vector(a, a + GMOCK_ARRAY_SIZE_(a));
- EXPECT_EQ("element 0 is 9 more than 1,\n"
- "element 2 is 98 more than 2", Explain(m, test_vector));
+ EXPECT_EQ("whose element #0 matches, which is 9 more than 1,\n"
+ "and whose element #2 matches, which is 98 more than 2",
+ Explain(m, test_vector));
}
TEST(ElementsAreTest, CanExplainMismatchWrongSize) {
@@ -309,7 +347,7 @@ TEST(ElementsAreTest, CanExplainMismatchWrongSize) {
EXPECT_EQ("", Explain(m, test_list));
test_list.push_back(1);
- EXPECT_EQ("has 1 element", Explain(m, test_list));
+ EXPECT_EQ("which has 1 element", Explain(m, test_list));
}
TEST(ElementsAreTest, CanExplainMismatchRightSize) {
@@ -318,10 +356,11 @@ TEST(ElementsAreTest, CanExplainMismatchRightSize) {
vector<int> v;
v.push_back(2);
v.push_back(1);
- EXPECT_EQ("element 0 doesn't match", Explain(m, v));
+ EXPECT_EQ("whose element #0 doesn't match", Explain(m, v));
v[0] = 1;
- EXPECT_EQ("element 1 doesn't match (is 4 less than 5)", Explain(m, v));
+ EXPECT_EQ("whose element #1 doesn't match, which is 4 less than 5",
+ Explain(m, v));
}
TEST(ElementsAreTest, MatchesOneElementVector) {
@@ -1030,16 +1069,22 @@ TEST(ContainsTest, SetDoesNotMatchWhenElementIsNotInContainer) {
EXPECT_THAT(c_string_set, Not(Contains(string("hello").c_str())));
}
-TEST(ContainsTest, DescribesItselfCorrectly) {
+TEST(ContainsTest, ExplainsMatchResultCorrectly) {
const int a[2] = { 1, 2 };
Matcher<const int(&)[2]> m = Contains(2);
- EXPECT_EQ("element 1 matches", Explain(m, a));
+ EXPECT_EQ("whose element #1 matches", Explain(m, a));
m = Contains(3);
EXPECT_EQ("", Explain(m, a));
+
+ m = Contains(GreaterThan(0));
+ EXPECT_EQ("whose element #0 matches, which is 1 more than 0", Explain(m, a));
+
+ m = Contains(GreaterThan(10));
+ EXPECT_EQ("", Explain(m, a));
}
-TEST(ContainsTest, ExplainsMatchResultCorrectly) {
+TEST(ContainsTest, DescribesItselfCorrectly) {
Matcher<vector<int> > m = Contains(1);
EXPECT_EQ("contains at least one element that is equal to 1", Describe(m));