summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzhanyong.wan <zhanyong.wan@8415998a-534a-0410-bf83-d39667b30386>2009-09-24 21:41:36 +0000
committerzhanyong.wan <zhanyong.wan@8415998a-534a-0410-bf83-d39667b30386>2009-09-24 21:41:36 +0000
commit0aee9c63be9e76e12aae897af63a025e401ca9b9 (patch)
tree76d3726db6abb5f652671bfa2b31348c1506f9b5
parent6fd17da20f174b0322e37c70279bba2e9b2986c7 (diff)
downloadgooglemock-0aee9c63be9e76e12aae897af63a025e401ca9b9.tar.gz
Adds the IsNull() matcher.
git-svn-id: http://googlemock.googlecode.com/svn/trunk@210 8415998a-534a-0410-bf83-d39667b30386
-rw-r--r--include/gmock/gmock-matchers.h18
-rw-r--r--test/gmock-matchers_test.cc27
-rw-r--r--test/gmock_link_test.h8
3 files changed, 53 insertions, 0 deletions
diff --git a/include/gmock/gmock-matchers.h b/include/gmock/gmock-matchers.h
index 688ce64..e2beff4 100644
--- a/include/gmock/gmock-matchers.h
+++ b/include/gmock/gmock-matchers.h
@@ -621,6 +621,19 @@ GMOCK_IMPLEMENT_COMPARISON_MATCHER_(Ne, !=, "not equal to");
#undef GMOCK_IMPLEMENT_COMPARISON_MATCHER_
+// Implements the polymorphic IsNull() matcher, which matches any
+// pointer that is NULL.
+class IsNullMatcher {
+ public:
+ template <typename T>
+ bool Matches(T* p) const { return p == NULL; }
+
+ void DescribeTo(::std::ostream* os) const { *os << "is NULL"; }
+ void DescribeNegationTo(::std::ostream* os) const {
+ *os << "is not NULL";
+ }
+};
+
// Implements the polymorphic NotNull() matcher, which matches any
// pointer that is not NULL.
class NotNullMatcher {
@@ -2319,6 +2332,11 @@ inline internal::NeMatcher<Rhs> Ne(Rhs x) {
return internal::NeMatcher<Rhs>(x);
}
+// Creates a polymorphic matcher that matches any NULL pointer.
+inline PolymorphicMatcher<internal::IsNullMatcher > IsNull() {
+ return MakePolymorphicMatcher(internal::IsNullMatcher());
+}
+
// Creates a polymorphic matcher that matches any non-NULL pointer.
// This is convenient as Not(NULL) doesn't compile (the compiler
// thinks that that expression is comparing a pointer with an integer).
diff --git a/test/gmock-matchers_test.cc b/test/gmock-matchers_test.cc
index ef87889..fe88c64 100644
--- a/test/gmock-matchers_test.cc
+++ b/test/gmock-matchers_test.cc
@@ -78,6 +78,7 @@ using testing::FloatEq;
using testing::Ge;
using testing::Gt;
using testing::HasSubstr;
+using testing::IsNull;
using testing::Key;
using testing::Le;
using testing::Lt;
@@ -685,6 +686,32 @@ TEST(NeTest, CanDescribeSelf) {
EXPECT_EQ("is not equal to 5", Describe(m));
}
+// Tests that IsNull() matches any NULL pointer of any type.
+TEST(IsNullTest, MatchesNullPointer) {
+ Matcher<int*> m1 = IsNull();
+ int* p1 = NULL;
+ int n = 0;
+ EXPECT_TRUE(m1.Matches(p1));
+ EXPECT_FALSE(m1.Matches(&n));
+
+ Matcher<const char*> m2 = IsNull();
+ const char* p2 = NULL;
+ EXPECT_TRUE(m2.Matches(p2));
+ EXPECT_FALSE(m2.Matches("hi"));
+
+ Matcher<void*> m3 = IsNull();
+ void* p3 = NULL;
+ EXPECT_TRUE(m3.Matches(p3));
+ EXPECT_FALSE(m3.Matches(reinterpret_cast<void*>(0xbeef)));
+}
+
+// Tests that IsNull() describes itself properly.
+TEST(IsNullTest, CanDescribeSelf) {
+ Matcher<int*> m = IsNull();
+ EXPECT_EQ("is NULL", Describe(m));
+ EXPECT_EQ("is not NULL", DescribeNegation(m));
+}
+
// Tests that NotNull() matches any non-NULL pointer of any type.
TEST(NotNullTest, MatchesNonNullPointer) {
Matcher<int*> m1 = NotNull();
diff --git a/test/gmock_link_test.h b/test/gmock_link_test.h
index bbac8ae..40554bf 100644
--- a/test/gmock_link_test.h
+++ b/test/gmock_link_test.h
@@ -147,6 +147,7 @@ using testing::IgnoreResult;
using testing::Invoke;
using testing::InvokeArgument;
using testing::InvokeWithoutArgs;
+using testing::IsNull;
using testing::Le;
using testing::Lt;
using testing::Matcher;
@@ -491,6 +492,13 @@ TEST(LinkTest, TestMatcherNotNull) {
ON_CALL(mock, VoidFromString(NotNull())).WillByDefault(Return());
}
+// Tests the linkage of the IsNull matcher.
+TEST(LinkTest, TestMatcherIsNull) {
+ Mock mock;
+
+ ON_CALL(mock, VoidFromString(IsNull())).WillByDefault(Return());
+}
+
// Tests the linkage of the Ref matcher.
TEST(LinkTest, TestMatcherRef) {
Mock mock;