summaryrefslogtreecommitdiffstats
path: root/googlemock/test/gmock-matchers_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'googlemock/test/gmock-matchers_test.cc')
-rw-r--r--googlemock/test/gmock-matchers_test.cc101
1 files changed, 100 insertions, 1 deletions
diff --git a/googlemock/test/gmock-matchers_test.cc b/googlemock/test/gmock-matchers_test.cc
index e6923195..1f48a76c 100644
--- a/googlemock/test/gmock-matchers_test.cc
+++ b/googlemock/test/gmock-matchers_test.cc
@@ -410,7 +410,7 @@ TEST(StringMatcherTest,
// MatcherInterface* without requiring the user to explicitly
// write the type.
TEST(MakeMatcherTest, ConstructsMatcherFromMatcherInterface) {
- const MatcherInterface<int>* dummy_impl = nullptr;
+ const MatcherInterface<int>* dummy_impl = new EvenMatcherImpl;
Matcher<int> m = MakeMatcher(dummy_impl);
}
@@ -3728,6 +3728,105 @@ TEST(PointeeTest, ReferenceToNonConstRawPointer) {
EXPECT_FALSE(m.Matches(p));
}
+TEST(PointeeTest, SmartPointer) {
+ const Matcher<std::unique_ptr<int>> m = Pointee(Ge(0));
+
+ std::unique_ptr<int> n(new int(1));
+ EXPECT_TRUE(m.Matches(n));
+}
+
+TEST(PointeeTest, SmartPointerToConst) {
+ const Matcher<std::unique_ptr<const int>> m = Pointee(Ge(0));
+
+ // There's no implicit conversion from unique_ptr<int> to const
+ // unique_ptr<const int>, so we must pass a unique_ptr<const int> into the
+ // matcher.
+ std::unique_ptr<const int> n(new int(1));
+ EXPECT_TRUE(m.Matches(n));
+}
+
+TEST(PointerTest, RawPointer) {
+ int n = 1;
+ const Matcher<int*> m = Pointer(Eq(&n));
+
+ EXPECT_TRUE(m.Matches(&n));
+
+ int* p = nullptr;
+ EXPECT_FALSE(m.Matches(p));
+ EXPECT_FALSE(m.Matches(nullptr));
+}
+
+TEST(PointerTest, RawPointerToConst) {
+ int n = 1;
+ const Matcher<const int*> m = Pointer(Eq(&n));
+
+ EXPECT_TRUE(m.Matches(&n));
+
+ int* p = nullptr;
+ EXPECT_FALSE(m.Matches(p));
+ EXPECT_FALSE(m.Matches(nullptr));
+}
+
+TEST(PointerTest, SmartPointer) {
+ std::unique_ptr<int> n(new int(10));
+ int* raw_n = n.get();
+ const Matcher<std::unique_ptr<int>> m = Pointer(Eq(raw_n));
+
+ EXPECT_TRUE(m.Matches(n));
+}
+
+TEST(PointerTest, SmartPointerToConst) {
+ std::unique_ptr<const int> n(new int(10));
+ const int* raw_n = n.get();
+ const Matcher<std::unique_ptr<const int>> m = Pointer(Eq(raw_n));
+
+ // There's no implicit conversion from unique_ptr<int> to const
+ // unique_ptr<const int>, so we must pass a unique_ptr<const int> into the
+ // matcher.
+ std::unique_ptr<const int> p(new int(10));
+ EXPECT_FALSE(m.Matches(p));
+}
+
+TEST(AddressTest, NonConst) {
+ int n = 1;
+ const Matcher<int> m = Address(Eq(&n));
+
+ EXPECT_TRUE(m.Matches(n));
+
+ int other = 5;
+
+ EXPECT_FALSE(m.Matches(other));
+
+ int& n_ref = n;
+
+ EXPECT_TRUE(m.Matches(n_ref));
+}
+
+TEST(AddressTest, Const) {
+ const int n = 1;
+ const Matcher<int> m = Address(Eq(&n));
+
+ EXPECT_TRUE(m.Matches(n));
+
+ int other = 5;
+
+ EXPECT_FALSE(m.Matches(other));
+}
+
+TEST(AddressTest, MatcherDoesntCopy) {
+ std::unique_ptr<int> n(new int(1));
+ const Matcher<std::unique_ptr<int>> m = Address(Eq(&n));
+
+ EXPECT_TRUE(m.Matches(n));
+}
+
+TEST(AddressTest, Describe) {
+ Matcher<int> matcher = Address(_);
+ EXPECT_EQ("has address that is anything", Describe(matcher));
+ EXPECT_EQ("does not have address that is anything",
+ DescribeNegation(matcher));
+}
+
MATCHER_P(FieldIIs, inner_matcher, "") {
return ExplainMatchResult(inner_matcher, arg.i, result_listener);
}
OpenPOWER on IntegriCloud