| OLD | NEW | 
|---|
| 1 // Copyright 2008, Google Inc. | 1 // Copyright 2008, 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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 61 using testing::Contains; | 61 using testing::Contains; | 
| 62 using testing::ElementsAre; | 62 using testing::ElementsAre; | 
| 63 using testing::ElementsAreArray; | 63 using testing::ElementsAreArray; | 
| 64 using testing::Eq; | 64 using testing::Eq; | 
| 65 using testing::Ge; | 65 using testing::Ge; | 
| 66 using testing::Gt; | 66 using testing::Gt; | 
| 67 using testing::Lt; | 67 using testing::Lt; | 
| 68 using testing::MakeMatcher; | 68 using testing::MakeMatcher; | 
| 69 using testing::Matcher; | 69 using testing::Matcher; | 
| 70 using testing::MatcherInterface; | 70 using testing::MatcherInterface; | 
|  | 71 using testing::MatchResultListener; | 
| 71 using testing::Ne; | 72 using testing::Ne; | 
| 72 using testing::Not; | 73 using testing::Not; | 
| 73 using testing::Pointee; | 74 using testing::Pointee; | 
| 74 using testing::Ref; | 75 using testing::Ref; | 
| 75 using testing::StaticAssertTypeEq; | 76 using testing::StaticAssertTypeEq; | 
| 76 using testing::StrEq; | 77 using testing::StrEq; | 
| 77 using testing::Value; | 78 using testing::Value; | 
| 78 using testing::internal::string; | 79 using testing::internal::string; | 
| 79 | 80 | 
| 80 // Returns the description of the given matcher. | 81 // Returns the description of the given matcher. | 
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 129   EXPECT_THAT(t, (Args<0, 0>(Eq()))); | 130   EXPECT_THAT(t, (Args<0, 0>(Eq()))); | 
| 130   EXPECT_THAT(t, Not(Args<1, 1>(Ne()))); | 131   EXPECT_THAT(t, Not(Args<1, 1>(Ne()))); | 
| 131 } | 132 } | 
| 132 | 133 | 
| 133 TEST(ArgsTest, AcceptsDecreasingTemplateArgs) { | 134 TEST(ArgsTest, AcceptsDecreasingTemplateArgs) { | 
| 134   const tuple<short, int, long> t(4, 5, 6L);  // NOLINT | 135   const tuple<short, int, long> t(4, 5, 6L);  // NOLINT | 
| 135   EXPECT_THAT(t, (Args<2, 0>(Gt()))); | 136   EXPECT_THAT(t, (Args<2, 0>(Gt()))); | 
| 136   EXPECT_THAT(t, Not(Args<2, 1>(Lt()))); | 137   EXPECT_THAT(t, Not(Args<2, 1>(Lt()))); | 
| 137 } | 138 } | 
| 138 | 139 | 
|  | 140 // The MATCHER*() macros trigger warning C4100 (unreferenced formal | 
|  | 141 // parameter) in MSVC with -W4.  Unfortunately they cannot be fixed in | 
|  | 142 // the macro definition, as the warnings are generated when the macro | 
|  | 143 // is expanded and macro expansion cannot contain #pragma.  Therefore | 
|  | 144 // we suppress them here. | 
|  | 145 #ifdef _MSC_VER | 
|  | 146 #pragma warning(push) | 
|  | 147 #pragma warning(disable:4100) | 
|  | 148 #endif | 
|  | 149 | 
| 139 MATCHER(SumIsZero, "") { | 150 MATCHER(SumIsZero, "") { | 
| 140   return get<0>(arg) + get<1>(arg) + get<2>(arg) == 0; | 151   return get<0>(arg) + get<1>(arg) + get<2>(arg) == 0; | 
| 141 } | 152 } | 
| 142 | 153 | 
| 143 TEST(ArgsTest, AcceptsMoreTemplateArgsThanArityOfOriginalTuple) { | 154 TEST(ArgsTest, AcceptsMoreTemplateArgsThanArityOfOriginalTuple) { | 
| 144   EXPECT_THAT(make_tuple(-1, 2), (Args<0, 0, 1>(SumIsZero()))); | 155   EXPECT_THAT(make_tuple(-1, 2), (Args<0, 0, 1>(SumIsZero()))); | 
| 145   EXPECT_THAT(make_tuple(1, 2), Not(Args<0, 0, 1>(SumIsZero()))); | 156   EXPECT_THAT(make_tuple(1, 2), Not(Args<0, 0, 1>(SumIsZero()))); | 
| 146 } | 157 } | 
| 147 | 158 | 
| 148 TEST(ArgsTest, CanBeNested) { | 159 TEST(ArgsTest, CanBeNested) { | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 160 | 171 | 
| 161 TEST(ArgsTest, CanMatchTupleByReference) { | 172 TEST(ArgsTest, CanMatchTupleByReference) { | 
| 162   typedef tuple<char, char, int> Tuple3; | 173   typedef tuple<char, char, int> Tuple3; | 
| 163   const Matcher<const Tuple3&> m = Args<0, 1>(Lt()); | 174   const Matcher<const Tuple3&> m = Args<0, 1>(Lt()); | 
| 164   EXPECT_TRUE(m.Matches(Tuple3('a', 'b', 2))); | 175   EXPECT_TRUE(m.Matches(Tuple3('a', 'b', 2))); | 
| 165   EXPECT_FALSE(m.Matches(Tuple3('b', 'b', 2))); | 176   EXPECT_FALSE(m.Matches(Tuple3('b', 'b', 2))); | 
| 166 } | 177 } | 
| 167 | 178 | 
| 168 // Validates that arg is printed as str. | 179 // Validates that arg is printed as str. | 
| 169 MATCHER_P(PrintsAs, str, "") { | 180 MATCHER_P(PrintsAs, str, "") { | 
| 170   typedef GMOCK_REMOVE_CONST_(GMOCK_REMOVE_REFERENCE_(arg_type)) RawTuple; | 181   return testing::PrintToString(arg) == str; | 
| 171   return |  | 
| 172       testing::internal::UniversalPrinter<RawTuple>::PrintToString(arg) == str; |  | 
| 173 } | 182 } | 
| 174 | 183 | 
| 175 TEST(ArgsTest, AcceptsTenTemplateArgs) { | 184 TEST(ArgsTest, AcceptsTenTemplateArgs) { | 
| 176   EXPECT_THAT(make_tuple(0, 1L, 2, 3L, 4, 5, 6, 7, 8, 9), | 185   EXPECT_THAT(make_tuple(0, 1L, 2, 3L, 4, 5, 6, 7, 8, 9), | 
| 177               (Args<9, 8, 7, 6, 5, 4, 3, 2, 1, 0>( | 186               (Args<9, 8, 7, 6, 5, 4, 3, 2, 1, 0>( | 
| 178                   PrintsAs("(9, 8, 7, 6, 5, 4, 3, 2, 1, 0)")))); | 187                   PrintsAs("(9, 8, 7, 6, 5, 4, 3, 2, 1, 0)")))); | 
| 179   EXPECT_THAT(make_tuple(0, 1L, 2, 3L, 4, 5, 6, 7, 8, 9), | 188   EXPECT_THAT(make_tuple(0, 1L, 2, 3L, 4, 5, 6, 7, 8, 9), | 
| 180               Not(Args<9, 8, 7, 6, 5, 4, 3, 2, 1, 0>( | 189               Not(Args<9, 8, 7, 6, 5, 4, 3, 2, 1, 0>( | 
| 181                       PrintsAs("(0, 8, 7, 6, 5, 4, 3, 2, 1, 0)")))); | 190                       PrintsAs("(0, 8, 7, 6, 5, 4, 3, 2, 1, 0)")))); | 
| 182 } | 191 } | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
| 200   EXPECT_EQ("are a tuple whose fields (#1, #0) are a pair (x, y) " | 209   EXPECT_EQ("are a tuple whose fields (#1, #0) are a pair (x, y) " | 
| 201             "where x > y is false", | 210             "where x > y is false", | 
| 202             DescribeNegation(m)); | 211             DescribeNegation(m)); | 
| 203 } | 212 } | 
| 204 | 213 | 
| 205 // For testing ExplainMatchResultTo(). | 214 // For testing ExplainMatchResultTo(). | 
| 206 class GreaterThanMatcher : public MatcherInterface<int> { | 215 class GreaterThanMatcher : public MatcherInterface<int> { | 
| 207  public: | 216  public: | 
| 208   explicit GreaterThanMatcher(int rhs) : rhs_(rhs) {} | 217   explicit GreaterThanMatcher(int rhs) : rhs_(rhs) {} | 
| 209 | 218 | 
| 210   virtual bool Matches(int lhs) const { return lhs > rhs_; } |  | 
| 211 |  | 
| 212   virtual void DescribeTo(::std::ostream* os) const { | 219   virtual void DescribeTo(::std::ostream* os) const { | 
| 213     *os << "is greater than " << rhs_; | 220     *os << "is greater than " << rhs_; | 
| 214   } | 221   } | 
| 215 | 222 | 
| 216   virtual void ExplainMatchResultTo(int lhs, ::std::ostream* os) const { | 223   virtual bool MatchAndExplain(int lhs, | 
|  | 224                                MatchResultListener* listener) const { | 
| 217     const int diff = lhs - rhs_; | 225     const int diff = lhs - rhs_; | 
| 218     if (diff > 0) { | 226     if (diff > 0) { | 
| 219       *os << "is " << diff << " more than " << rhs_; | 227       *listener << "is " << diff << " more than " << rhs_; | 
| 220     } else if (diff == 0) { | 228     } else if (diff == 0) { | 
| 221       *os << "is the same as " << rhs_; | 229       *listener << "is the same as " << rhs_; | 
| 222     } else { | 230     } else { | 
| 223       *os << "is " << -diff << " less than " << rhs_; | 231       *listener << "is " << -diff << " less than " << rhs_; | 
| 224     } | 232     } | 
|  | 233 | 
|  | 234     return lhs > rhs_; | 
| 225   } | 235   } | 
| 226 | 236 | 
| 227  private: | 237  private: | 
| 228   int rhs_; | 238   int rhs_; | 
| 229 }; | 239 }; | 
| 230 | 240 | 
| 231 Matcher<int> GreaterThan(int n) { | 241 Matcher<int> GreaterThan(int n) { | 
| 232   return MakeMatcher(new GreaterThanMatcher(n)); | 242   return MakeMatcher(new GreaterThanMatcher(n)); | 
| 233 } | 243 } | 
| 234 | 244 | 
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 546   const Matcher<int> m = IsEven(); | 556   const Matcher<int> m = IsEven(); | 
| 547   EXPECT_TRUE(m.Matches(6)); | 557   EXPECT_TRUE(m.Matches(6)); | 
| 548   EXPECT_FALSE(m.Matches(7)); | 558   EXPECT_FALSE(m.Matches(7)); | 
| 549 | 559 | 
| 550   EXPECT_EQ("is even", Describe(m)); | 560   EXPECT_EQ("is even", Describe(m)); | 
| 551   EXPECT_EQ("not (is even)", DescribeNegation(m)); | 561   EXPECT_EQ("not (is even)", DescribeNegation(m)); | 
| 552   EXPECT_EQ("", Explain(m, 6)); | 562   EXPECT_EQ("", Explain(m, 6)); | 
| 553   EXPECT_EQ("", Explain(m, 7)); | 563   EXPECT_EQ("", Explain(m, 7)); | 
| 554 } | 564 } | 
| 555 | 565 | 
|  | 566 // Tests explaining match result in a MATCHER* macro. | 
|  | 567 | 
|  | 568 MATCHER(IsEven2, "is even") { | 
|  | 569   if ((arg % 2) == 0) { | 
|  | 570     // Verifies that we can stream to result_listener, a listener | 
|  | 571     // supplied by the MATCHER macro implicitly. | 
|  | 572     *result_listener << "OK"; | 
|  | 573     return true; | 
|  | 574   } else { | 
|  | 575     *result_listener << "% 2 == " << (arg % 2); | 
|  | 576     return false; | 
|  | 577   } | 
|  | 578 } | 
|  | 579 | 
|  | 580 MATCHER_P2(EqSumOf, x, y, "") { | 
|  | 581   if (arg == (x + y)) { | 
|  | 582     *result_listener << "OK"; | 
|  | 583     return true; | 
|  | 584   } else { | 
|  | 585     // Verifies that we can stream to the underlying stream of | 
|  | 586     // result_listener. | 
|  | 587     if (result_listener->stream() != NULL) { | 
|  | 588       *result_listener->stream() << "diff == " << (x + y - arg); | 
|  | 589     } | 
|  | 590     return false; | 
|  | 591   } | 
|  | 592 } | 
|  | 593 | 
|  | 594 TEST(MatcherMacroTest, CanExplainMatchResult) { | 
|  | 595   const Matcher<int> m1 = IsEven2(); | 
|  | 596   EXPECT_EQ("OK", Explain(m1, 4)); | 
|  | 597   EXPECT_EQ("% 2 == 1", Explain(m1, 5)); | 
|  | 598 | 
|  | 599   const Matcher<int> m2 = EqSumOf(1, 2); | 
|  | 600   EXPECT_EQ("OK", Explain(m2, 3)); | 
|  | 601   EXPECT_EQ("diff == -1", Explain(m2, 4)); | 
|  | 602 } | 
|  | 603 | 
| 556 // Tests that the description string supplied to MATCHER() must be | 604 // Tests that the description string supplied to MATCHER() must be | 
| 557 // valid. | 605 // valid. | 
| 558 | 606 | 
| 559 MATCHER(HasBadDescription, "Invalid%") { | 607 MATCHER(HasBadDescription, "Invalid%") { | 
| 560   // Uses arg to suppress "unused parameter" warning. | 608   // Uses arg to suppress "unused parameter" warning. | 
| 561   return arg==arg; | 609   return arg==arg; | 
| 562 } | 610 } | 
| 563 | 611 | 
| 564 TEST(MatcherMacroTest, | 612 TEST(MatcherMacroTest, | 
| 565      CreatingMatcherWithBadDescriptionGeneratesNonfatalFailure) { | 613      CreatingMatcherWithBadDescriptionGeneratesNonfatalFailure) { | 
| (...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1045 } | 1093 } | 
| 1046 | 1094 | 
| 1047 TEST(ContainsTest, WorksForTwoDimensionalNativeArray) { | 1095 TEST(ContainsTest, WorksForTwoDimensionalNativeArray) { | 
| 1048   int a[][3] = { { 1, 2, 3 }, { 4, 5, 6 } }; | 1096   int a[][3] = { { 1, 2, 3 }, { 4, 5, 6 } }; | 
| 1049   EXPECT_THAT(a, Contains(ElementsAre(4, 5, 6))); | 1097   EXPECT_THAT(a, Contains(ElementsAre(4, 5, 6))); | 
| 1050   EXPECT_THAT(a, Contains(Contains(5))); | 1098   EXPECT_THAT(a, Contains(Contains(5))); | 
| 1051   EXPECT_THAT(a, Not(Contains(ElementsAre(3, 4, 5)))); | 1099   EXPECT_THAT(a, Not(Contains(ElementsAre(3, 4, 5)))); | 
| 1052   EXPECT_THAT(a, Contains(Not(Contains(5)))); | 1100   EXPECT_THAT(a, Contains(Not(Contains(5)))); | 
| 1053 } | 1101 } | 
| 1054 | 1102 | 
|  | 1103 #ifdef _MSC_VER | 
|  | 1104 #pragma warning(pop) | 
|  | 1105 #endif | 
|  | 1106 | 
| 1055 }  // namespace | 1107 }  // namespace | 
| OLD | NEW | 
|---|