OLD | NEW |
1 // Copyright 2007, Google Inc. | 1 // Copyright 2007, Google Inc. |
2 // All rights reserved. | 2 // All rights reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
6 // met: | 6 // met: |
7 // | 7 // |
8 // * Redistributions of source code must retain the above copyright | 8 // * Redistributions of source code must retain the above copyright |
9 // notice, this list of conditions and the following disclaimer. | 9 // notice, this list of conditions and the following disclaimer. |
10 // * Redistributions in binary form must reproduce the above | 10 // * Redistributions in binary form must reproduce the above |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 using testing::internal::Interpolation; | 114 using testing::internal::Interpolation; |
115 using testing::internal::Interpolations; | 115 using testing::internal::Interpolations; |
116 using testing::internal::JoinAsTuple; | 116 using testing::internal::JoinAsTuple; |
117 using testing::internal::SkipPrefix; | 117 using testing::internal::SkipPrefix; |
118 using testing::internal::String; | 118 using testing::internal::String; |
119 using testing::internal::Strings; | 119 using testing::internal::Strings; |
120 using testing::internal::ValidateMatcherDescription; | 120 using testing::internal::ValidateMatcherDescription; |
121 using testing::internal::kInvalidInterpolation; | 121 using testing::internal::kInvalidInterpolation; |
122 using testing::internal::kPercentInterpolation; | 122 using testing::internal::kPercentInterpolation; |
123 using testing::internal::kTupleInterpolation; | 123 using testing::internal::kTupleInterpolation; |
| 124 using testing::internal::linked_ptr; |
| 125 using testing::internal::scoped_ptr; |
124 using testing::internal::string; | 126 using testing::internal::string; |
125 | 127 |
126 #ifdef GMOCK_HAS_REGEX | 128 #ifdef GMOCK_HAS_REGEX |
127 using testing::ContainsRegex; | 129 using testing::ContainsRegex; |
128 using testing::MatchesRegex; | 130 using testing::MatchesRegex; |
129 using testing::internal::RE; | 131 using testing::internal::RE; |
130 #endif // GMOCK_HAS_REGEX | 132 #endif // GMOCK_HAS_REGEX |
131 | 133 |
132 // For testing ExplainMatchResultTo(). | 134 // For testing ExplainMatchResultTo(). |
133 class GreaterThanMatcher : public MatcherInterface<int> { | 135 class GreaterThanMatcher : public MatcherInterface<int> { |
134 public: | 136 public: |
135 explicit GreaterThanMatcher(int rhs) : rhs_(rhs) {} | 137 explicit GreaterThanMatcher(int rhs) : rhs_(rhs) {} |
136 | 138 |
137 virtual bool Matches(int lhs) const { return lhs > rhs_; } | 139 virtual bool Matches(int lhs) const { return lhs > rhs_; } |
138 | 140 |
139 virtual void DescribeTo(::std::ostream* os) const { | 141 virtual void DescribeTo(::std::ostream* os) const { |
140 *os << "is greater than " << rhs_; | 142 *os << "is greater than " << rhs_; |
141 } | 143 } |
142 | 144 |
143 virtual void ExplainMatchResultTo(int lhs, ::std::ostream* os) const { | 145 virtual void ExplainMatchResultTo(int lhs, ::std::ostream* os) const { |
144 const int diff = lhs - rhs_; | 146 const int diff = lhs - rhs_; |
145 if (diff > 0) { | 147 if (diff > 0) { |
146 *os << "is " << diff << " more than " << rhs_; | 148 *os << "is " << diff << " more than " << rhs_; |
147 } else if (diff == 0) { | 149 } else if (diff == 0) { |
148 *os << "is the same as " << rhs_; | 150 *os << "is the same as " << rhs_; |
149 } else { | 151 } else { |
150 *os << "is " << -diff << " less than " << rhs_; | 152 *os << "is " << -diff << " less than " << rhs_; |
151 } | 153 } |
152 } | 154 } |
| 155 |
153 private: | 156 private: |
154 const int rhs_; | 157 int rhs_; |
155 }; | 158 }; |
156 | 159 |
157 Matcher<int> GreaterThan(int n) { | 160 Matcher<int> GreaterThan(int n) { |
158 return MakeMatcher(new GreaterThanMatcher(n)); | 161 return MakeMatcher(new GreaterThanMatcher(n)); |
159 } | 162 } |
160 | 163 |
161 // Returns the description of the given matcher. | 164 // Returns the description of the given matcher. |
162 template <typename T> | 165 template <typename T> |
163 string Describe(const Matcher<T>& m) { | 166 string Describe(const Matcher<T>& m) { |
164 stringstream ss; | 167 stringstream ss; |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 Matcher<int> m = MatcherCast<int>(Eq(5)); | 329 Matcher<int> m = MatcherCast<int>(Eq(5)); |
327 EXPECT_TRUE(m.Matches(5)); | 330 EXPECT_TRUE(m.Matches(5)); |
328 EXPECT_FALSE(m.Matches(6)); | 331 EXPECT_FALSE(m.Matches(6)); |
329 } | 332 } |
330 | 333 |
331 // For testing casting matchers between compatible types. | 334 // For testing casting matchers between compatible types. |
332 class IntValue { | 335 class IntValue { |
333 public: | 336 public: |
334 // An int can be statically (although not implicitly) cast to a | 337 // An int can be statically (although not implicitly) cast to a |
335 // IntValue. | 338 // IntValue. |
336 explicit IntValue(int value) : value_(value) {} | 339 explicit IntValue(int a_value) : value_(a_value) {} |
337 | 340 |
338 int value() const { return value_; } | 341 int value() const { return value_; } |
339 private: | 342 private: |
340 int value_; | 343 int value_; |
341 }; | 344 }; |
342 | 345 |
343 // For testing casting matchers between compatible types. | 346 // For testing casting matchers between compatible types. |
344 bool IsPositiveIntValue(const IntValue& foo) { | 347 bool IsPositiveIntValue(const IntValue& foo) { |
345 return foo.value() > 0; | 348 return foo.value() > 0; |
346 } | 349 } |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
551 EXPECT_TRUE(m1.Matches(a1)); | 554 EXPECT_TRUE(m1.Matches(a1)); |
552 EXPECT_FALSE(m1.Matches(a2)); | 555 EXPECT_FALSE(m1.Matches(a2)); |
553 } | 556 } |
554 | 557 |
555 // Tests that Eq(v) describes itself properly. | 558 // Tests that Eq(v) describes itself properly. |
556 | 559 |
557 class Unprintable { | 560 class Unprintable { |
558 public: | 561 public: |
559 Unprintable() : c_('a') {} | 562 Unprintable() : c_('a') {} |
560 | 563 |
561 bool operator==(const Unprintable& rhs) { return true; } | 564 bool operator==(const Unprintable& /* rhs */) { return true; } |
562 private: | 565 private: |
563 char c_; | 566 char c_; |
564 }; | 567 }; |
565 | 568 |
566 TEST(EqTest, CanDescribeSelf) { | 569 TEST(EqTest, CanDescribeSelf) { |
567 Matcher<Unprintable> m = Eq(Unprintable()); | 570 Matcher<Unprintable> m = Eq(Unprintable()); |
568 EXPECT_EQ("is equal to 1-byte object <61>", Describe(m)); | 571 EXPECT_EQ("is equal to 1-byte object <61>", Describe(m)); |
569 } | 572 } |
570 | 573 |
571 // Tests that Eq(v) can be used to match any type that supports | 574 // Tests that Eq(v) can be used to match any type that supports |
(...skipping 25 matching lines...) Expand all Loading... |
597 } | 600 } |
598 | 601 |
599 // Tests that TypedEq<T>(v) has type Matcher<T>. | 602 // Tests that TypedEq<T>(v) has type Matcher<T>. |
600 | 603 |
601 // Type<T>::IsTypeOf(v) compiles iff the type of value v is T, where T | 604 // Type<T>::IsTypeOf(v) compiles iff the type of value v is T, where T |
602 // is a "bare" type (i.e. not in the form of const U or U&). If v's | 605 // is a "bare" type (i.e. not in the form of const U or U&). If v's |
603 // type is not T, the compiler will generate a message about | 606 // type is not T, the compiler will generate a message about |
604 // "undefined referece". | 607 // "undefined referece". |
605 template <typename T> | 608 template <typename T> |
606 struct Type { | 609 struct Type { |
607 static bool IsTypeOf(const T& v) { return true; } | 610 static bool IsTypeOf(const T& /* v */) { return true; } |
608 | 611 |
609 template <typename T2> | 612 template <typename T2> |
610 static void IsTypeOf(T2 v); | 613 static void IsTypeOf(T2 v); |
611 }; | 614 }; |
612 | 615 |
613 TEST(TypedEqTest, HasSpecifiedType) { | 616 TEST(TypedEqTest, HasSpecifiedType) { |
614 // Verfies that the type of TypedEq<T>(v) is Matcher<T>. | 617 // Verfies that the type of TypedEq<T>(v) is Matcher<T>. |
615 Type<Matcher<int> >::IsTypeOf(TypedEq<int>(5)); | 618 Type<Matcher<int> >::IsTypeOf(TypedEq<int>(5)); |
616 Type<Matcher<double> >::IsTypeOf(TypedEq<double>(5)); | 619 Type<Matcher<double> >::IsTypeOf(TypedEq<double>(5)); |
617 } | 620 } |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
708 // gmock-matchers.h: (point of instantiation: 'testing:: | 711 // gmock-matchers.h: (point of instantiation: 'testing:: |
709 // gmock_matchers_test::IsNullTest_MatchesNullPointer_Test::TestBody()') | 712 // gmock_matchers_test::IsNullTest_MatchesNullPointer_Test::TestBody()') |
710 // gmock-matchers.h: (instantiating: 'testing::PolymorphicMatc | 713 // gmock-matchers.h: (instantiating: 'testing::PolymorphicMatc |
711 Matcher<void*> m3 = IsNull(); | 714 Matcher<void*> m3 = IsNull(); |
712 void* p3 = NULL; | 715 void* p3 = NULL; |
713 EXPECT_TRUE(m3.Matches(p3)); | 716 EXPECT_TRUE(m3.Matches(p3)); |
714 EXPECT_FALSE(m3.Matches(reinterpret_cast<void*>(0xbeef))); | 717 EXPECT_FALSE(m3.Matches(reinterpret_cast<void*>(0xbeef))); |
715 #endif | 718 #endif |
716 } | 719 } |
717 | 720 |
| 721 TEST(IsNullTest, LinkedPtr) { |
| 722 const Matcher<linked_ptr<int> > m = IsNull(); |
| 723 const linked_ptr<int> null_p; |
| 724 const linked_ptr<int> non_null_p(new int); |
| 725 |
| 726 EXPECT_TRUE(m.Matches(null_p)); |
| 727 EXPECT_FALSE(m.Matches(non_null_p)); |
| 728 } |
| 729 |
| 730 TEST(IsNullTest, ReferenceToConstLinkedPtr) { |
| 731 const Matcher<const linked_ptr<double>&> m = IsNull(); |
| 732 const linked_ptr<double> null_p; |
| 733 const linked_ptr<double> non_null_p(new double); |
| 734 |
| 735 EXPECT_TRUE(m.Matches(null_p)); |
| 736 EXPECT_FALSE(m.Matches(non_null_p)); |
| 737 } |
| 738 |
| 739 TEST(IsNullTest, ReferenceToConstScopedPtr) { |
| 740 const Matcher<const scoped_ptr<double>&> m = IsNull(); |
| 741 const scoped_ptr<double> null_p; |
| 742 const scoped_ptr<double> non_null_p(new double); |
| 743 |
| 744 EXPECT_TRUE(m.Matches(null_p)); |
| 745 EXPECT_FALSE(m.Matches(non_null_p)); |
| 746 } |
| 747 |
718 // Tests that IsNull() describes itself properly. | 748 // Tests that IsNull() describes itself properly. |
719 TEST(IsNullTest, CanDescribeSelf) { | 749 TEST(IsNullTest, CanDescribeSelf) { |
720 Matcher<int*> m = IsNull(); | 750 Matcher<int*> m = IsNull(); |
721 EXPECT_EQ("is NULL", Describe(m)); | 751 EXPECT_EQ("is NULL", Describe(m)); |
722 EXPECT_EQ("is not NULL", DescribeNegation(m)); | 752 EXPECT_EQ("is not NULL", DescribeNegation(m)); |
723 } | 753 } |
724 | 754 |
725 // Tests that NotNull() matches any non-NULL pointer of any type. | 755 // Tests that NotNull() matches any non-NULL pointer of any type. |
726 TEST(NotNullTest, MatchesNonNullPointer) { | 756 TEST(NotNullTest, MatchesNonNullPointer) { |
727 Matcher<int*> m1 = NotNull(); | 757 Matcher<int*> m1 = NotNull(); |
728 int* p1 = NULL; | 758 int* p1 = NULL; |
729 int n = 0; | 759 int n = 0; |
730 EXPECT_FALSE(m1.Matches(p1)); | 760 EXPECT_FALSE(m1.Matches(p1)); |
731 EXPECT_TRUE(m1.Matches(&n)); | 761 EXPECT_TRUE(m1.Matches(&n)); |
732 | 762 |
733 Matcher<const char*> m2 = NotNull(); | 763 Matcher<const char*> m2 = NotNull(); |
734 const char* p2 = NULL; | 764 const char* p2 = NULL; |
735 EXPECT_FALSE(m2.Matches(p2)); | 765 EXPECT_FALSE(m2.Matches(p2)); |
736 EXPECT_TRUE(m2.Matches("hi")); | 766 EXPECT_TRUE(m2.Matches("hi")); |
737 } | 767 } |
738 | 768 |
| 769 TEST(NotNullTest, LinkedPtr) { |
| 770 const Matcher<linked_ptr<int> > m = NotNull(); |
| 771 const linked_ptr<int> null_p; |
| 772 const linked_ptr<int> non_null_p(new int); |
| 773 |
| 774 EXPECT_FALSE(m.Matches(null_p)); |
| 775 EXPECT_TRUE(m.Matches(non_null_p)); |
| 776 } |
| 777 |
| 778 TEST(NotNullTest, ReferenceToConstLinkedPtr) { |
| 779 const Matcher<const linked_ptr<double>&> m = NotNull(); |
| 780 const linked_ptr<double> null_p; |
| 781 const linked_ptr<double> non_null_p(new double); |
| 782 |
| 783 EXPECT_FALSE(m.Matches(null_p)); |
| 784 EXPECT_TRUE(m.Matches(non_null_p)); |
| 785 } |
| 786 |
| 787 TEST(NotNullTest, ReferenceToConstScopedPtr) { |
| 788 const Matcher<const scoped_ptr<double>&> m = NotNull(); |
| 789 const scoped_ptr<double> null_p; |
| 790 const scoped_ptr<double> non_null_p(new double); |
| 791 |
| 792 EXPECT_FALSE(m.Matches(null_p)); |
| 793 EXPECT_TRUE(m.Matches(non_null_p)); |
| 794 } |
| 795 |
739 // Tests that NotNull() describes itself properly. | 796 // Tests that NotNull() describes itself properly. |
740 TEST(NotNullTest, CanDescribeSelf) { | 797 TEST(NotNullTest, CanDescribeSelf) { |
741 Matcher<int*> m = NotNull(); | 798 Matcher<int*> m = NotNull(); |
742 EXPECT_EQ("is not NULL", Describe(m)); | 799 EXPECT_EQ("is not NULL", Describe(m)); |
743 } | 800 } |
744 | 801 |
745 // Tests that Ref(variable) matches an argument that references | 802 // Tests that Ref(variable) matches an argument that references |
746 // 'variable'. | 803 // 'variable'. |
747 TEST(RefTest, MatchesSameVariable) { | 804 TEST(RefTest, MatchesSameVariable) { |
748 int a = 0; | 805 int a = 0; |
(...skipping 1049 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1798 return x > 0 ? 1 : 0; | 1855 return x > 0 ? 1 : 0; |
1799 } | 1856 } |
1800 | 1857 |
1801 // This functor returns true if the input is greater than the given | 1858 // This functor returns true if the input is greater than the given |
1802 // number. | 1859 // number. |
1803 class IsGreaterThan { | 1860 class IsGreaterThan { |
1804 public: | 1861 public: |
1805 explicit IsGreaterThan(int threshold) : threshold_(threshold) {} | 1862 explicit IsGreaterThan(int threshold) : threshold_(threshold) {} |
1806 | 1863 |
1807 bool operator()(int n) const { return n > threshold_; } | 1864 bool operator()(int n) const { return n > threshold_; } |
| 1865 |
1808 private: | 1866 private: |
1809 const int threshold_; | 1867 int threshold_; |
1810 }; | 1868 }; |
1811 | 1869 |
1812 // For testing Truly(). | 1870 // For testing Truly(). |
1813 const int foo = 0; | 1871 const int foo = 0; |
1814 | 1872 |
1815 // This predicate returns true iff the argument references foo and has | 1873 // This predicate returns true iff the argument references foo and has |
1816 // a zero value. | 1874 // a zero value. |
1817 bool ReferencesFooAndIsZero(const int& n) { | 1875 bool ReferencesFooAndIsZero(const int& n) { |
1818 return (&n == &foo) && (n == 0); | 1876 return (&n == &foo) && (n == 0); |
1819 } | 1877 } |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1896 EXPECT_THAT(make_tuple(2L, 1), Not(AllArgs(Lt()))); | 1954 EXPECT_THAT(make_tuple(2L, 1), Not(AllArgs(Lt()))); |
1897 } | 1955 } |
1898 | 1956 |
1899 TEST(AllArgsTest, WorksForNonTuple) { | 1957 TEST(AllArgsTest, WorksForNonTuple) { |
1900 EXPECT_THAT(42, AllArgs(Gt(0))); | 1958 EXPECT_THAT(42, AllArgs(Gt(0))); |
1901 EXPECT_THAT('a', Not(AllArgs(Eq('b')))); | 1959 EXPECT_THAT('a', Not(AllArgs(Eq('b')))); |
1902 } | 1960 } |
1903 | 1961 |
1904 class AllArgsHelper { | 1962 class AllArgsHelper { |
1905 public: | 1963 public: |
| 1964 AllArgsHelper() {} |
| 1965 |
1906 MOCK_METHOD2(Helper, int(char x, int y)); | 1966 MOCK_METHOD2(Helper, int(char x, int y)); |
| 1967 |
| 1968 private: |
| 1969 GTEST_DISALLOW_COPY_AND_ASSIGN_(AllArgsHelper); |
1907 }; | 1970 }; |
1908 | 1971 |
1909 TEST(AllArgsTest, WorksInWithClause) { | 1972 TEST(AllArgsTest, WorksInWithClause) { |
1910 AllArgsHelper helper; | 1973 AllArgsHelper helper; |
1911 ON_CALL(helper, Helper(_, _)) | 1974 ON_CALL(helper, Helper(_, _)) |
1912 .With(AllArgs(Lt())) | 1975 .With(AllArgs(Lt())) |
1913 .WillByDefault(Return(1)); | 1976 .WillByDefault(Return(1)); |
1914 EXPECT_CALL(helper, Helper(_, _)); | 1977 EXPECT_CALL(helper, Helper(_, _)); |
1915 EXPECT_CALL(helper, Helper(_, _)) | 1978 EXPECT_CALL(helper, Helper(_, _)) |
1916 .With(AllArgs(Gt())) | 1979 .With(AllArgs(Gt())) |
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2321 EXPECT_EQ("", Explain(m, static_cast<const string*>(NULL))); | 2384 EXPECT_EQ("", Explain(m, static_cast<const string*>(NULL))); |
2322 | 2385 |
2323 const Matcher<int*> m2 = Pointee(GreaterThan(1)); | 2386 const Matcher<int*> m2 = Pointee(GreaterThan(1)); |
2324 int n = 3; | 2387 int n = 3; |
2325 EXPECT_EQ("points to a value that is 2 more than 1", Explain(m2, &n)); | 2388 EXPECT_EQ("points to a value that is 2 more than 1", Explain(m2, &n)); |
2326 } | 2389 } |
2327 | 2390 |
2328 // An uncopyable class. | 2391 // An uncopyable class. |
2329 class Uncopyable { | 2392 class Uncopyable { |
2330 public: | 2393 public: |
2331 explicit Uncopyable(int value) : value_(value) {} | 2394 explicit Uncopyable(int a_value) : value_(a_value) {} |
2332 | 2395 |
2333 int value() const { return value_; } | 2396 int value() const { return value_; } |
2334 private: | 2397 private: |
2335 const int value_; | 2398 const int value_; |
2336 GTEST_DISALLOW_COPY_AND_ASSIGN_(Uncopyable); | 2399 GTEST_DISALLOW_COPY_AND_ASSIGN_(Uncopyable); |
2337 }; | 2400 }; |
2338 | 2401 |
2339 // Returns true iff x.value() is positive. | 2402 // Returns true iff x.value() is positive. |
2340 bool ValueIsPositive(const Uncopyable& x) { return x.value() > 0; } | 2403 bool ValueIsPositive(const Uncopyable& x) { return x.value() > 0; } |
2341 | 2404 |
2342 // A user-defined struct for testing Field(). | 2405 // A user-defined struct for testing Field(). |
2343 struct AStruct { | 2406 struct AStruct { |
2344 AStruct() : x(0), y(1.0), z(5), p(NULL) {} | 2407 AStruct() : x(0), y(1.0), z(5), p(NULL) {} |
2345 AStruct(const AStruct& rhs) | 2408 AStruct(const AStruct& rhs) |
2346 : x(rhs.x), y(rhs.y), z(rhs.z.value()), p(rhs.p) {} | 2409 : x(rhs.x), y(rhs.y), z(rhs.z.value()), p(rhs.p) {} |
2347 | 2410 |
2348 int x; // A non-const field. | 2411 int x; // A non-const field. |
2349 const double y; // A const field. | 2412 const double y; // A const field. |
2350 Uncopyable z; // An uncopyable field. | 2413 Uncopyable z; // An uncopyable field. |
2351 const char* p; // A pointer field. | 2414 const char* p; // A pointer field. |
| 2415 |
| 2416 private: |
| 2417 GTEST_DISALLOW_ASSIGN_(AStruct); |
2352 }; | 2418 }; |
2353 | 2419 |
2354 // A derived struct for testing Field(). | 2420 // A derived struct for testing Field(). |
2355 struct DerivedStruct : public AStruct { | 2421 struct DerivedStruct : public AStruct { |
2356 char ch; | 2422 char ch; |
| 2423 |
| 2424 private: |
| 2425 GTEST_DISALLOW_ASSIGN_(DerivedStruct); |
2357 }; | 2426 }; |
2358 | 2427 |
2359 // Tests that Field(&Foo::field, ...) works when field is non-const. | 2428 // Tests that Field(&Foo::field, ...) works when field is non-const. |
2360 TEST(FieldTest, WorksForNonConstField) { | 2429 TEST(FieldTest, WorksForNonConstField) { |
2361 Matcher<AStruct> m = Field(&AStruct::x, Ge(0)); | 2430 Matcher<AStruct> m = Field(&AStruct::x, Ge(0)); |
2362 | 2431 |
2363 AStruct a; | 2432 AStruct a; |
2364 EXPECT_TRUE(m.Matches(a)); | 2433 EXPECT_TRUE(m.Matches(a)); |
2365 a.x = -1; | 2434 a.x = -1; |
2366 EXPECT_FALSE(m.Matches(a)); | 2435 EXPECT_FALSE(m.Matches(a)); |
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2880 EXPECT_TRUE(matcher2.Matches(n)); | 2949 EXPECT_TRUE(matcher2.Matches(n)); |
2881 EXPECT_FALSE(matcher2.Matches(n2)); | 2950 EXPECT_FALSE(matcher2.Matches(n2)); |
2882 | 2951 |
2883 Matcher<const int&> matcher3 = ResultOf(ReferencingFunctor(), Eq(&n)); | 2952 Matcher<const int&> matcher3 = ResultOf(ReferencingFunctor(), Eq(&n)); |
2884 EXPECT_TRUE(matcher3.Matches(n)); | 2953 EXPECT_TRUE(matcher3.Matches(n)); |
2885 EXPECT_FALSE(matcher3.Matches(n2)); | 2954 EXPECT_FALSE(matcher3.Matches(n2)); |
2886 } | 2955 } |
2887 | 2956 |
2888 class DivisibleByImpl { | 2957 class DivisibleByImpl { |
2889 public: | 2958 public: |
2890 explicit DivisibleByImpl(int divider) : divider_(divider) {} | 2959 explicit DivisibleByImpl(int a_divider) : divider_(a_divider) {} |
2891 | 2960 |
2892 template <typename T> | 2961 template <typename T> |
2893 bool Matches(const T& n) const { | 2962 bool Matches(const T& n) const { |
2894 return (n % divider_) == 0; | 2963 return (n % divider_) == 0; |
2895 } | 2964 } |
2896 | 2965 |
2897 void DescribeTo(::std::ostream* os) const { | 2966 void DescribeTo(::std::ostream* os) const { |
2898 *os << "is divisible by " << divider_; | 2967 *os << "is divisible by " << divider_; |
2899 } | 2968 } |
2900 | 2969 |
2901 void DescribeNegationTo(::std::ostream* os) const { | 2970 void DescribeNegationTo(::std::ostream* os) const { |
2902 *os << "is not divisible by " << divider_; | 2971 *os << "is not divisible by " << divider_; |
2903 } | 2972 } |
2904 | 2973 |
2905 void set_divider(int divider) { divider_ = divider; } | 2974 void set_divider(int a_divider) { divider_ = a_divider; } |
2906 int divider() const { return divider_; } | 2975 int divider() const { return divider_; } |
2907 | 2976 |
2908 private: | 2977 private: |
2909 int divider_; | 2978 int divider_; |
2910 }; | 2979 }; |
2911 | 2980 |
2912 // For testing using ExplainMatchResultTo() with polymorphic matchers. | 2981 // For testing using ExplainMatchResultTo() with polymorphic matchers. |
2913 template <typename T> | 2982 template <typename T> |
2914 void ExplainMatchResultTo(const DivisibleByImpl& impl, const T& n, | 2983 void ExplainMatchResultTo(const DivisibleByImpl& impl, const T& n, |
2915 ::std::ostream* os) { | 2984 ::std::ostream* os) { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2958 const Matcher<int> m = GreaterThan(5); | 3027 const Matcher<int> m = GreaterThan(5); |
2959 EXPECT_EQ("is 1 more than 5", Explain(m, 6)); | 3028 EXPECT_EQ("is 1 more than 5", Explain(m, 6)); |
2960 } | 3029 } |
2961 | 3030 |
2962 // The following two tests verify that values without a public copy | 3031 // The following two tests verify that values without a public copy |
2963 // ctor can be used as arguments to matchers like Eq(), Ge(), and etc | 3032 // ctor can be used as arguments to matchers like Eq(), Ge(), and etc |
2964 // with the help of ByRef(). | 3033 // with the help of ByRef(). |
2965 | 3034 |
2966 class NotCopyable { | 3035 class NotCopyable { |
2967 public: | 3036 public: |
2968 explicit NotCopyable(int value) : value_(value) {} | 3037 explicit NotCopyable(int a_value) : value_(a_value) {} |
2969 | 3038 |
2970 int value() const { return value_; } | 3039 int value() const { return value_; } |
2971 | 3040 |
2972 bool operator==(const NotCopyable& rhs) const { | 3041 bool operator==(const NotCopyable& rhs) const { |
2973 return value() == rhs.value(); | 3042 return value() == rhs.value(); |
2974 } | 3043 } |
2975 | 3044 |
2976 bool operator>=(const NotCopyable& rhs) const { | 3045 bool operator>=(const NotCopyable& rhs) const { |
2977 return value() >= rhs.value(); | 3046 return value() >= rhs.value(); |
2978 } | 3047 } |
(...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3500 | 3569 |
3501 // Tests PolymorphicMatcher::impl(). | 3570 // Tests PolymorphicMatcher::impl(). |
3502 TEST(PolymorphicMatcherTest, CanAccessImpl) { | 3571 TEST(PolymorphicMatcherTest, CanAccessImpl) { |
3503 const PolymorphicMatcher<DivisibleByImpl> m(DivisibleByImpl(42)); | 3572 const PolymorphicMatcher<DivisibleByImpl> m(DivisibleByImpl(42)); |
3504 const DivisibleByImpl& impl = m.impl(); | 3573 const DivisibleByImpl& impl = m.impl(); |
3505 EXPECT_EQ(42, impl.divider()); | 3574 EXPECT_EQ(42, impl.divider()); |
3506 } | 3575 } |
3507 | 3576 |
3508 } // namespace gmock_matchers_test | 3577 } // namespace gmock_matchers_test |
3509 } // namespace testing | 3578 } // namespace testing |
OLD | NEW |