Adds Each(m) (by Wojtek Moczydlowski); removes scripts/test/Makefile (by Zhanyong Wan); pulls in gtest r424.

This commit is contained in:
zhanyong.wan
2010-04-22 23:37:47 +00:00
parent 090c4830dd
commit 33605ba454
4 changed files with 222 additions and 91 deletions

View File

@@ -65,8 +65,10 @@ using std::make_pair;
using std::map;
using std::multimap;
using std::pair;
using std::set;
using std::stringstream;
using std::tr1::make_tuple;
using std::vector;
using testing::A;
using testing::AllArgs;
using testing::AllOf;
@@ -363,20 +365,20 @@ TEST(MakeMatcherTest, ConstructsMatcherFromMatcherInterface) {
// Tests that MakePolymorphicMatcher() can construct a polymorphic
// matcher from its implementation using the old API.
const int bar = 1;
const int g_bar = 1;
class ReferencesBarOrIsZeroImpl {
public:
template <typename T>
bool MatchAndExplain(const T& x,
MatchResultListener* /* listener */) const {
const void* p = &x;
return p == &bar || x == 0;
return p == &g_bar || x == 0;
}
void DescribeTo(::std::ostream* os) const { *os << "bar or zero"; }
void DescribeTo(::std::ostream* os) const { *os << "g_bar or zero"; }
void DescribeNegationTo(::std::ostream* os) const {
*os << "doesn't reference bar and is not zero";
*os << "doesn't reference g_bar and is not zero";
}
};
@@ -391,15 +393,15 @@ TEST(MakePolymorphicMatcherTest, ConstructsMatcherUsingOldAPI) {
Matcher<const int&> m1 = ReferencesBarOrIsZero();
EXPECT_TRUE(m1.Matches(0));
// Verifies that the identity of a by-reference argument is preserved.
EXPECT_TRUE(m1.Matches(bar));
EXPECT_TRUE(m1.Matches(g_bar));
EXPECT_FALSE(m1.Matches(1));
EXPECT_EQ("bar or zero", Describe(m1));
EXPECT_EQ("g_bar or zero", Describe(m1));
// Using a polymorphic matcher to match a value type.
Matcher<double> m2 = ReferencesBarOrIsZero();
EXPECT_TRUE(m2.Matches(0.0));
EXPECT_FALSE(m2.Matches(0.1));
EXPECT_EQ("bar or zero", Describe(m2));
EXPECT_EQ("g_bar or zero", Describe(m2));
}
// Tests implementing a polymorphic matcher using MatchAndExplain().
@@ -3984,5 +3986,91 @@ TEST(MatcherTupleTest, ExplainsMatchFailure) {
// explanation.
}
// Tests Each().
TEST(EachTest, ExplainsMatchResultCorrectly) {
set<int> a; // empty
Matcher<set<int> > m = Each(2);
EXPECT_EQ("", Explain(m, a));
Matcher<const int(&)[1]> n = Each(1);
const int b[1] = { 1 };
EXPECT_EQ("", Explain(n, b));
n = Each(3);
EXPECT_EQ("whose element #0 doesn't match", Explain(n, b));
a.insert(1);
a.insert(2);
a.insert(3);
m = Each(GreaterThan(0));
EXPECT_EQ("", Explain(m, a));
m = Each(GreaterThan(10));
EXPECT_EQ("whose element #0 doesn't match, which is 9 less than 10",
Explain(m, a));
}
TEST(EachTest, DescribesItselfCorrectly) {
Matcher<vector<int> > m = Each(1);
EXPECT_EQ("only contains elements that is equal to 1", Describe(m));
Matcher<vector<int> > m2 = Not(m);
EXPECT_EQ("contains some element that isn't equal to 1", Describe(m2));
}
TEST(EachTest, MatchesVectorWhenAllElementsMatch) {
vector<int> some_vector;
EXPECT_THAT(some_vector, Each(1));
some_vector.push_back(3);
EXPECT_THAT(some_vector, Not(Each(1)));
EXPECT_THAT(some_vector, Each(3));
some_vector.push_back(1);
some_vector.push_back(2);
EXPECT_THAT(some_vector, Not(Each(3)));
EXPECT_THAT(some_vector, Each(Lt(3.5)));
vector<string> another_vector;
another_vector.push_back("fee");
EXPECT_THAT(another_vector, Each(string("fee")));
another_vector.push_back("fie");
another_vector.push_back("foe");
another_vector.push_back("fum");
EXPECT_THAT(another_vector, Not(Each(string("fee"))));
}
TEST(EachTest, MatchesMapWhenAllElementsMatch) {
map<const char*, int> my_map;
const char* bar = "a string";
my_map[bar] = 2;
EXPECT_THAT(my_map, Each(make_pair(bar, 2)));
map<string, int> another_map;
EXPECT_THAT(another_map, Each(make_pair(string("fee"), 1)));
another_map["fee"] = 1;
EXPECT_THAT(another_map, Each(make_pair(string("fee"), 1)));
another_map["fie"] = 2;
another_map["foe"] = 3;
another_map["fum"] = 4;
EXPECT_THAT(another_map, Not(Each(make_pair(string("fee"), 1))));
EXPECT_THAT(another_map, Not(Each(make_pair(string("fum"), 1))));
EXPECT_THAT(another_map, Each(Pair(_, Gt(0))));
}
TEST(EachTest, AcceptsMatcher) {
const int a[] = { 1, 2, 3 };
EXPECT_THAT(a, Each(Gt(0)));
EXPECT_THAT(a, Not(Each(Gt(1))));
}
TEST(EachTest, WorksForNativeArrayAsTuple) {
const int a[] = { 1, 2 };
const int* const pointer = a;
EXPECT_THAT(make_tuple(pointer, 2), Each(Gt(0)));
EXPECT_THAT(make_tuple(pointer, 2), Not(Each(Gt(1))));
}
} // namespace gmock_matchers_test
} // namespace testing