Home | History | Annotate | Download | only in test
      1 // Copyright 2007, Google Inc.
      2 // All rights reserved.
      3 //
      4 // Redistribution and use in source and binary forms, with or without
      5 // modification, are permitted provided that the following conditions are
      6 // met:
      7 //
      8 //     * Redistributions of source code must retain the above copyright
      9 // notice, this list of conditions and the following disclaimer.
     10 //     * Redistributions in binary form must reproduce the above
     11 // copyright notice, this list of conditions and the following disclaimer
     12 // in the documentation and/or other materials provided with the
     13 // distribution.
     14 //     * Neither the name of Google Inc. nor the names of its
     15 // contributors may be used to endorse or promote products derived from
     16 // this software without specific prior written permission.
     17 //
     18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29 //
     30 // Author: wan (at) google.com (Zhanyong Wan)
     31 
     32 // Google Mock - a framework for writing C++ mock classes.
     33 //
     34 // This file tests the spec builder syntax.
     35 
     36 #include "gmock/gmock-spec-builders.h"
     37 
     38 #include <ostream>  // NOLINT
     39 #include <sstream>
     40 #include <string>
     41 
     42 #include "gmock/gmock.h"
     43 #include "gmock/internal/gmock-port.h"
     44 #include "gtest/gtest.h"
     45 #include "gtest/gtest-spi.h"
     46 #include "gtest/internal/gtest-port.h"
     47 
     48 namespace testing {
     49 namespace internal {
     50 
     51 // Helper class for testing the Expectation class template.
     52 class ExpectationTester {
     53  public:
     54   // Sets the call count of the given expectation to the given number.
     55   void SetCallCount(int n, ExpectationBase* exp) {
     56     exp->call_count_ = n;
     57   }
     58 };
     59 
     60 }  // namespace internal
     61 }  // namespace testing
     62 
     63 namespace {
     64 
     65 using testing::_;
     66 using testing::AnyNumber;
     67 using testing::AtLeast;
     68 using testing::AtMost;
     69 using testing::Between;
     70 using testing::Cardinality;
     71 using testing::CardinalityInterface;
     72 using testing::ContainsRegex;
     73 using testing::Const;
     74 using testing::DoAll;
     75 using testing::DoDefault;
     76 using testing::Eq;
     77 using testing::Expectation;
     78 using testing::ExpectationSet;
     79 using testing::GMOCK_FLAG(verbose);
     80 using testing::Gt;
     81 using testing::InSequence;
     82 using testing::Invoke;
     83 using testing::InvokeWithoutArgs;
     84 using testing::IsNotSubstring;
     85 using testing::IsSubstring;
     86 using testing::Lt;
     87 using testing::Message;
     88 using testing::Mock;
     89 using testing::NaggyMock;
     90 using testing::Ne;
     91 using testing::Return;
     92 using testing::Sequence;
     93 using testing::SetArgPointee;
     94 using testing::internal::ExpectationTester;
     95 using testing::internal::FormatFileLocation;
     96 using testing::internal::kErrorVerbosity;
     97 using testing::internal::kInfoVerbosity;
     98 using testing::internal::kWarningVerbosity;
     99 using testing::internal::linked_ptr;
    100 using testing::internal::string;
    101 
    102 #if GTEST_HAS_STREAM_REDIRECTION
    103 using testing::HasSubstr;
    104 using testing::internal::CaptureStdout;
    105 using testing::internal::GetCapturedStdout;
    106 #endif
    107 
    108 class Incomplete;
    109 
    110 class MockIncomplete {
    111  public:
    112   // This line verifies that a mock method can take a by-reference
    113   // argument of an incomplete type.
    114   MOCK_METHOD1(ByRefFunc, void(const Incomplete& x));
    115 };
    116 
    117 // Tells Google Mock how to print a value of type Incomplete.
    118 void PrintTo(const Incomplete& x, ::std::ostream* os);
    119 
    120 TEST(MockMethodTest, CanInstantiateWithIncompleteArgType) {
    121   // Even though this mock class contains a mock method that takes
    122   // by-reference an argument whose type is incomplete, we can still
    123   // use the mock, as long as Google Mock knows how to print the
    124   // argument.
    125   MockIncomplete incomplete;
    126   EXPECT_CALL(incomplete, ByRefFunc(_))
    127       .Times(AnyNumber());
    128 }
    129 
    130 // The definition of the printer for the argument type doesn't have to
    131 // be visible where the mock is used.
    132 void PrintTo(const Incomplete& /* x */, ::std::ostream* os) {
    133   *os << "incomplete";
    134 }
    135 
    136 class Result {};
    137 
    138 // A type that's not default constructible.
    139 class NonDefaultConstructible {
    140  public:
    141   explicit NonDefaultConstructible(int /* dummy */) {}
    142 };
    143 
    144 class MockA {
    145  public:
    146   MockA() {}
    147 
    148   MOCK_METHOD1(DoA, void(int n));
    149   MOCK_METHOD1(ReturnResult, Result(int n));
    150   MOCK_METHOD0(ReturnNonDefaultConstructible, NonDefaultConstructible());
    151   MOCK_METHOD2(Binary, bool(int x, int y));
    152   MOCK_METHOD2(ReturnInt, int(int x, int y));
    153 
    154  private:
    155   GTEST_DISALLOW_COPY_AND_ASSIGN_(MockA);
    156 };
    157 
    158 class MockB {
    159  public:
    160   MockB() {}
    161 
    162   MOCK_CONST_METHOD0(DoB, int());  // NOLINT
    163   MOCK_METHOD1(DoB, int(int n));  // NOLINT
    164 
    165  private:
    166   GTEST_DISALLOW_COPY_AND_ASSIGN_(MockB);
    167 };
    168 
    169 class ReferenceHoldingMock {
    170  public:
    171   ReferenceHoldingMock() {}
    172 
    173   MOCK_METHOD1(AcceptReference, void(linked_ptr<MockA>*));
    174 
    175  private:
    176   GTEST_DISALLOW_COPY_AND_ASSIGN_(ReferenceHoldingMock);
    177 };
    178 
    179 // Tests that EXPECT_CALL and ON_CALL compile in a presence of macro
    180 // redefining a mock method name. This could happen, for example, when
    181 // the tested code #includes Win32 API headers which define many APIs
    182 // as macros, e.g. #define TextOut TextOutW.
    183 
    184 #define Method MethodW
    185 
    186 class CC {
    187  public:
    188   virtual ~CC() {}
    189   virtual int Method() = 0;
    190 };
    191 class MockCC : public CC {
    192  public:
    193   MockCC() {}
    194 
    195   MOCK_METHOD0(Method, int());
    196 
    197  private:
    198   GTEST_DISALLOW_COPY_AND_ASSIGN_(MockCC);
    199 };
    200 
    201 // Tests that a method with expanded name compiles.
    202 TEST(OnCallSyntaxTest, CompilesWithMethodNameExpandedFromMacro) {
    203   MockCC cc;
    204   ON_CALL(cc, Method());
    205 }
    206 
    207 // Tests that the method with expanded name not only compiles but runs
    208 // and returns a correct value, too.
    209 TEST(OnCallSyntaxTest, WorksWithMethodNameExpandedFromMacro) {
    210   MockCC cc;
    211   ON_CALL(cc, Method()).WillByDefault(Return(42));
    212   EXPECT_EQ(42, cc.Method());
    213 }
    214 
    215 // Tests that a method with expanded name compiles.
    216 TEST(ExpectCallSyntaxTest, CompilesWithMethodNameExpandedFromMacro) {
    217   MockCC cc;
    218   EXPECT_CALL(cc, Method());
    219   cc.Method();
    220 }
    221 
    222 // Tests that it works, too.
    223 TEST(ExpectCallSyntaxTest, WorksWithMethodNameExpandedFromMacro) {
    224   MockCC cc;
    225   EXPECT_CALL(cc, Method()).WillOnce(Return(42));
    226   EXPECT_EQ(42, cc.Method());
    227 }
    228 
    229 #undef Method  // Done with macro redefinition tests.
    230 
    231 // Tests that ON_CALL evaluates its arguments exactly once as promised
    232 // by Google Mock.
    233 TEST(OnCallSyntaxTest, EvaluatesFirstArgumentOnce) {
    234   MockA a;
    235   MockA* pa = &a;
    236 
    237   ON_CALL(*pa++, DoA(_));
    238   EXPECT_EQ(&a + 1, pa);
    239 }
    240 
    241 TEST(OnCallSyntaxTest, EvaluatesSecondArgumentOnce) {
    242   MockA a;
    243   int n = 0;
    244 
    245   ON_CALL(a, DoA(n++));
    246   EXPECT_EQ(1, n);
    247 }
    248 
    249 // Tests that the syntax of ON_CALL() is enforced at run time.
    250 
    251 TEST(OnCallSyntaxTest, WithIsOptional) {
    252   MockA a;
    253 
    254   ON_CALL(a, DoA(5))
    255       .WillByDefault(Return());
    256   ON_CALL(a, DoA(_))
    257       .With(_)
    258       .WillByDefault(Return());
    259 }
    260 
    261 TEST(OnCallSyntaxTest, WithCanAppearAtMostOnce) {
    262   MockA a;
    263 
    264   EXPECT_NONFATAL_FAILURE({  // NOLINT
    265     ON_CALL(a, ReturnResult(_))
    266         .With(_)
    267         .With(_)
    268         .WillByDefault(Return(Result()));
    269   }, ".With() cannot appear more than once in an ON_CALL()");
    270 }
    271 
    272 TEST(OnCallSyntaxTest, WillByDefaultIsMandatory) {
    273   MockA a;
    274 
    275   EXPECT_DEATH_IF_SUPPORTED({
    276     ON_CALL(a, DoA(5));
    277     a.DoA(5);
    278   }, "");
    279 }
    280 
    281 TEST(OnCallSyntaxTest, WillByDefaultCanAppearAtMostOnce) {
    282   MockA a;
    283 
    284   EXPECT_NONFATAL_FAILURE({  // NOLINT
    285     ON_CALL(a, DoA(5))
    286         .WillByDefault(Return())
    287         .WillByDefault(Return());
    288   }, ".WillByDefault() must appear exactly once in an ON_CALL()");
    289 }
    290 
    291 // Tests that EXPECT_CALL evaluates its arguments exactly once as
    292 // promised by Google Mock.
    293 TEST(ExpectCallSyntaxTest, EvaluatesFirstArgumentOnce) {
    294   MockA a;
    295   MockA* pa = &a;
    296 
    297   EXPECT_CALL(*pa++, DoA(_));
    298   a.DoA(0);
    299   EXPECT_EQ(&a + 1, pa);
    300 }
    301 
    302 TEST(ExpectCallSyntaxTest, EvaluatesSecondArgumentOnce) {
    303   MockA a;
    304   int n = 0;
    305 
    306   EXPECT_CALL(a, DoA(n++));
    307   a.DoA(0);
    308   EXPECT_EQ(1, n);
    309 }
    310 
    311 // Tests that the syntax of EXPECT_CALL() is enforced at run time.
    312 
    313 TEST(ExpectCallSyntaxTest, WithIsOptional) {
    314   MockA a;
    315 
    316   EXPECT_CALL(a, DoA(5))
    317       .Times(0);
    318   EXPECT_CALL(a, DoA(6))
    319       .With(_)
    320       .Times(0);
    321 }
    322 
    323 TEST(ExpectCallSyntaxTest, WithCanAppearAtMostOnce) {
    324   MockA a;
    325 
    326   EXPECT_NONFATAL_FAILURE({  // NOLINT
    327     EXPECT_CALL(a, DoA(6))
    328         .With(_)
    329         .With(_);
    330   }, ".With() cannot appear more than once in an EXPECT_CALL()");
    331 
    332   a.DoA(6);
    333 }
    334 
    335 TEST(ExpectCallSyntaxTest, WithMustBeFirstClause) {
    336   MockA a;
    337 
    338   EXPECT_NONFATAL_FAILURE({  // NOLINT
    339     EXPECT_CALL(a, DoA(1))
    340         .Times(1)
    341         .With(_);
    342   }, ".With() must be the first clause in an EXPECT_CALL()");
    343 
    344   a.DoA(1);
    345 
    346   EXPECT_NONFATAL_FAILURE({  // NOLINT
    347     EXPECT_CALL(a, DoA(2))
    348         .WillOnce(Return())
    349         .With(_);
    350   }, ".With() must be the first clause in an EXPECT_CALL()");
    351 
    352   a.DoA(2);
    353 }
    354 
    355 TEST(ExpectCallSyntaxTest, TimesCanBeInferred) {
    356   MockA a;
    357 
    358   EXPECT_CALL(a, DoA(1))
    359       .WillOnce(Return());
    360 
    361   EXPECT_CALL(a, DoA(2))
    362       .WillOnce(Return())
    363       .WillRepeatedly(Return());
    364 
    365   a.DoA(1);
    366   a.DoA(2);
    367   a.DoA(2);
    368 }
    369 
    370 TEST(ExpectCallSyntaxTest, TimesCanAppearAtMostOnce) {
    371   MockA a;
    372 
    373   EXPECT_NONFATAL_FAILURE({  // NOLINT
    374     EXPECT_CALL(a, DoA(1))
    375         .Times(1)
    376         .Times(2);
    377   }, ".Times() cannot appear more than once in an EXPECT_CALL()");
    378 
    379   a.DoA(1);
    380   a.DoA(1);
    381 }
    382 
    383 TEST(ExpectCallSyntaxTest, TimesMustBeBeforeInSequence) {
    384   MockA a;
    385   Sequence s;
    386 
    387   EXPECT_NONFATAL_FAILURE({  // NOLINT
    388     EXPECT_CALL(a, DoA(1))
    389         .InSequence(s)
    390         .Times(1);
    391   }, ".Times() cannot appear after ");
    392 
    393   a.DoA(1);
    394 }
    395 
    396 TEST(ExpectCallSyntaxTest, InSequenceIsOptional) {
    397   MockA a;
    398   Sequence s;
    399 
    400   EXPECT_CALL(a, DoA(1));
    401   EXPECT_CALL(a, DoA(2))
    402       .InSequence(s);
    403 
    404   a.DoA(1);
    405   a.DoA(2);
    406 }
    407 
    408 TEST(ExpectCallSyntaxTest, InSequenceCanAppearMultipleTimes) {
    409   MockA a;
    410   Sequence s1, s2;
    411 
    412   EXPECT_CALL(a, DoA(1))
    413       .InSequence(s1, s2)
    414       .InSequence(s1);
    415 
    416   a.DoA(1);
    417 }
    418 
    419 TEST(ExpectCallSyntaxTest, InSequenceMustBeBeforeAfter) {
    420   MockA a;
    421   Sequence s;
    422 
    423   Expectation e = EXPECT_CALL(a, DoA(1))
    424       .Times(AnyNumber());
    425   EXPECT_NONFATAL_FAILURE({  // NOLINT
    426     EXPECT_CALL(a, DoA(2))
    427         .After(e)
    428         .InSequence(s);
    429   }, ".InSequence() cannot appear after ");
    430 
    431   a.DoA(2);
    432 }
    433 
    434 TEST(ExpectCallSyntaxTest, InSequenceMustBeBeforeWillOnce) {
    435   MockA a;
    436   Sequence s;
    437 
    438   EXPECT_NONFATAL_FAILURE({  // NOLINT
    439     EXPECT_CALL(a, DoA(1))
    440         .WillOnce(Return())
    441         .InSequence(s);
    442   }, ".InSequence() cannot appear after ");
    443 
    444   a.DoA(1);
    445 }
    446 
    447 TEST(ExpectCallSyntaxTest, AfterMustBeBeforeWillOnce) {
    448   MockA a;
    449 
    450   Expectation e = EXPECT_CALL(a, DoA(1));
    451   EXPECT_NONFATAL_FAILURE({
    452     EXPECT_CALL(a, DoA(2))
    453         .WillOnce(Return())
    454         .After(e);
    455   }, ".After() cannot appear after ");
    456 
    457   a.DoA(1);
    458   a.DoA(2);
    459 }
    460 
    461 TEST(ExpectCallSyntaxTest, WillIsOptional) {
    462   MockA a;
    463 
    464   EXPECT_CALL(a, DoA(1));
    465   EXPECT_CALL(a, DoA(2))
    466       .WillOnce(Return());
    467 
    468   a.DoA(1);
    469   a.DoA(2);
    470 }
    471 
    472 TEST(ExpectCallSyntaxTest, WillCanAppearMultipleTimes) {
    473   MockA a;
    474 
    475   EXPECT_CALL(a, DoA(1))
    476       .Times(AnyNumber())
    477       .WillOnce(Return())
    478       .WillOnce(Return())
    479       .WillOnce(Return());
    480 }
    481 
    482 TEST(ExpectCallSyntaxTest, WillMustBeBeforeWillRepeatedly) {
    483   MockA a;
    484 
    485   EXPECT_NONFATAL_FAILURE({  // NOLINT
    486     EXPECT_CALL(a, DoA(1))
    487         .WillRepeatedly(Return())
    488         .WillOnce(Return());
    489   }, ".WillOnce() cannot appear after ");
    490 
    491   a.DoA(1);
    492 }
    493 
    494 TEST(ExpectCallSyntaxTest, WillRepeatedlyIsOptional) {
    495   MockA a;
    496 
    497   EXPECT_CALL(a, DoA(1))
    498       .WillOnce(Return());
    499   EXPECT_CALL(a, DoA(2))
    500       .WillOnce(Return())
    501       .WillRepeatedly(Return());
    502 
    503   a.DoA(1);
    504   a.DoA(2);
    505   a.DoA(2);
    506 }
    507 
    508 TEST(ExpectCallSyntaxTest, WillRepeatedlyCannotAppearMultipleTimes) {
    509   MockA a;
    510 
    511   EXPECT_NONFATAL_FAILURE({  // NOLINT
    512     EXPECT_CALL(a, DoA(1))
    513         .WillRepeatedly(Return())
    514         .WillRepeatedly(Return());
    515   }, ".WillRepeatedly() cannot appear more than once in an "
    516      "EXPECT_CALL()");
    517 }
    518 
    519 TEST(ExpectCallSyntaxTest, WillRepeatedlyMustBeBeforeRetiresOnSaturation) {
    520   MockA a;
    521 
    522   EXPECT_NONFATAL_FAILURE({  // NOLINT
    523     EXPECT_CALL(a, DoA(1))
    524         .RetiresOnSaturation()
    525         .WillRepeatedly(Return());
    526   }, ".WillRepeatedly() cannot appear after ");
    527 }
    528 
    529 TEST(ExpectCallSyntaxTest, RetiresOnSaturationIsOptional) {
    530   MockA a;
    531 
    532   EXPECT_CALL(a, DoA(1));
    533   EXPECT_CALL(a, DoA(1))
    534       .RetiresOnSaturation();
    535 
    536   a.DoA(1);
    537   a.DoA(1);
    538 }
    539 
    540 TEST(ExpectCallSyntaxTest, RetiresOnSaturationCannotAppearMultipleTimes) {
    541   MockA a;
    542 
    543   EXPECT_NONFATAL_FAILURE({  // NOLINT
    544     EXPECT_CALL(a, DoA(1))
    545         .RetiresOnSaturation()
    546         .RetiresOnSaturation();
    547   }, ".RetiresOnSaturation() cannot appear more than once");
    548 
    549   a.DoA(1);
    550 }
    551 
    552 TEST(ExpectCallSyntaxTest, DefaultCardinalityIsOnce) {
    553   {
    554     MockA a;
    555     EXPECT_CALL(a, DoA(1));
    556     a.DoA(1);
    557   }
    558   EXPECT_NONFATAL_FAILURE({  // NOLINT
    559     MockA a;
    560     EXPECT_CALL(a, DoA(1));
    561   }, "to be called once");
    562   EXPECT_NONFATAL_FAILURE({  // NOLINT
    563     MockA a;
    564     EXPECT_CALL(a, DoA(1));
    565     a.DoA(1);
    566     a.DoA(1);
    567   }, "to be called once");
    568 }
    569 
    570 #if GTEST_HAS_STREAM_REDIRECTION
    571 
    572 // Tests that Google Mock doesn't print a warning when the number of
    573 // WillOnce() is adequate.
    574 TEST(ExpectCallSyntaxTest, DoesNotWarnOnAdequateActionCount) {
    575   CaptureStdout();
    576   {
    577     MockB b;
    578 
    579     // It's always fine to omit WillOnce() entirely.
    580     EXPECT_CALL(b, DoB())
    581         .Times(0);
    582     EXPECT_CALL(b, DoB(1))
    583         .Times(AtMost(1));
    584     EXPECT_CALL(b, DoB(2))
    585         .Times(1)
    586         .WillRepeatedly(Return(1));
    587 
    588     // It's fine for the number of WillOnce()s to equal the upper bound.
    589     EXPECT_CALL(b, DoB(3))
    590         .Times(Between(1, 2))
    591         .WillOnce(Return(1))
    592         .WillOnce(Return(2));
    593 
    594     // It's fine for the number of WillOnce()s to be smaller than the
    595     // upper bound when there is a WillRepeatedly().
    596     EXPECT_CALL(b, DoB(4))
    597         .Times(AtMost(3))
    598         .WillOnce(Return(1))
    599         .WillRepeatedly(Return(2));
    600 
    601     // Satisfies the above expectations.
    602     b.DoB(2);
    603     b.DoB(3);
    604   }
    605   EXPECT_STREQ("", GetCapturedStdout().c_str());
    606 }
    607 
    608 // Tests that Google Mock warns on having too many actions in an
    609 // expectation compared to its cardinality.
    610 TEST(ExpectCallSyntaxTest, WarnsOnTooManyActions) {
    611   CaptureStdout();
    612   {
    613     MockB b;
    614 
    615     // Warns when the number of WillOnce()s is larger than the upper bound.
    616     EXPECT_CALL(b, DoB())
    617         .Times(0)
    618         .WillOnce(Return(1));  // #1
    619     EXPECT_CALL(b, DoB())
    620         .Times(AtMost(1))
    621         .WillOnce(Return(1))
    622         .WillOnce(Return(2));  // #2
    623     EXPECT_CALL(b, DoB(1))
    624         .Times(1)
    625         .WillOnce(Return(1))
    626         .WillOnce(Return(2))
    627         .RetiresOnSaturation();  // #3
    628 
    629     // Warns when the number of WillOnce()s equals the upper bound and
    630     // there is a WillRepeatedly().
    631     EXPECT_CALL(b, DoB())
    632         .Times(0)
    633         .WillRepeatedly(Return(1));  // #4
    634     EXPECT_CALL(b, DoB(2))
    635         .Times(1)
    636         .WillOnce(Return(1))
    637         .WillRepeatedly(Return(2));  // #5
    638 
    639     // Satisfies the above expectations.
    640     b.DoB(1);
    641     b.DoB(2);
    642   }
    643   const std::string output = GetCapturedStdout();
    644   EXPECT_PRED_FORMAT2(
    645       IsSubstring,
    646       "Too many actions specified in EXPECT_CALL(b, DoB())...\n"
    647       "Expected to be never called, but has 1 WillOnce().",
    648       output);  // #1
    649   EXPECT_PRED_FORMAT2(
    650       IsSubstring,
    651       "Too many actions specified in EXPECT_CALL(b, DoB())...\n"
    652       "Expected to be called at most once, "
    653       "but has 2 WillOnce()s.",
    654       output);  // #2
    655   EXPECT_PRED_FORMAT2(
    656       IsSubstring,
    657       "Too many actions specified in EXPECT_CALL(b, DoB(1))...\n"
    658       "Expected to be called once, but has 2 WillOnce()s.",
    659       output);  // #3
    660   EXPECT_PRED_FORMAT2(
    661       IsSubstring,
    662       "Too many actions specified in EXPECT_CALL(b, DoB())...\n"
    663       "Expected to be never called, but has 0 WillOnce()s "
    664       "and a WillRepeatedly().",
    665       output);  // #4
    666   EXPECT_PRED_FORMAT2(
    667       IsSubstring,
    668       "Too many actions specified in EXPECT_CALL(b, DoB(2))...\n"
    669       "Expected to be called once, but has 1 WillOnce() "
    670       "and a WillRepeatedly().",
    671       output);  // #5
    672 }
    673 
    674 // Tests that Google Mock warns on having too few actions in an
    675 // expectation compared to its cardinality.
    676 TEST(ExpectCallSyntaxTest, WarnsOnTooFewActions) {
    677   MockB b;
    678 
    679   EXPECT_CALL(b, DoB())
    680       .Times(Between(2, 3))
    681       .WillOnce(Return(1));
    682 
    683   CaptureStdout();
    684   b.DoB();
    685   const std::string output = GetCapturedStdout();
    686   EXPECT_PRED_FORMAT2(
    687       IsSubstring,
    688       "Too few actions specified in EXPECT_CALL(b, DoB())...\n"
    689       "Expected to be called between 2 and 3 times, "
    690       "but has only 1 WillOnce().",
    691       output);
    692   b.DoB();
    693 }
    694 
    695 #endif  // GTEST_HAS_STREAM_REDIRECTION
    696 
    697 // Tests the semantics of ON_CALL().
    698 
    699 // Tests that the built-in default action is taken when no ON_CALL()
    700 // is specified.
    701 TEST(OnCallTest, TakesBuiltInDefaultActionWhenNoOnCall) {
    702   MockB b;
    703   EXPECT_CALL(b, DoB());
    704 
    705   EXPECT_EQ(0, b.DoB());
    706 }
    707 
    708 // Tests that the built-in default action is taken when no ON_CALL()
    709 // matches the invocation.
    710 TEST(OnCallTest, TakesBuiltInDefaultActionWhenNoOnCallMatches) {
    711   MockB b;
    712   ON_CALL(b, DoB(1))
    713       .WillByDefault(Return(1));
    714   EXPECT_CALL(b, DoB(_));
    715 
    716   EXPECT_EQ(0, b.DoB(2));
    717 }
    718 
    719 // Tests that the last matching ON_CALL() action is taken.
    720 TEST(OnCallTest, PicksLastMatchingOnCall) {
    721   MockB b;
    722   ON_CALL(b, DoB(_))
    723       .WillByDefault(Return(3));
    724   ON_CALL(b, DoB(2))
    725       .WillByDefault(Return(2));
    726   ON_CALL(b, DoB(1))
    727       .WillByDefault(Return(1));
    728   EXPECT_CALL(b, DoB(_));
    729 
    730   EXPECT_EQ(2, b.DoB(2));
    731 }
    732 
    733 // Tests the semantics of EXPECT_CALL().
    734 
    735 // Tests that any call is allowed when no EXPECT_CALL() is specified.
    736 TEST(ExpectCallTest, AllowsAnyCallWhenNoSpec) {
    737   MockB b;
    738   EXPECT_CALL(b, DoB());
    739   // There is no expectation on DoB(int).
    740 
    741   b.DoB();
    742 
    743   // DoB(int) can be called any number of times.
    744   b.DoB(1);
    745   b.DoB(2);
    746 }
    747 
    748 // Tests that the last matching EXPECT_CALL() fires.
    749 TEST(ExpectCallTest, PicksLastMatchingExpectCall) {
    750   MockB b;
    751   EXPECT_CALL(b, DoB(_))
    752       .WillRepeatedly(Return(2));
    753   EXPECT_CALL(b, DoB(1))
    754       .WillRepeatedly(Return(1));
    755 
    756   EXPECT_EQ(1, b.DoB(1));
    757 }
    758 
    759 // Tests lower-bound violation.
    760 TEST(ExpectCallTest, CatchesTooFewCalls) {
    761   EXPECT_NONFATAL_FAILURE({  // NOLINT
    762     MockB b;
    763     EXPECT_CALL(b, DoB(5))
    764         .Times(AtLeast(2));
    765 
    766     b.DoB(5);
    767   }, "Actual function call count doesn't match EXPECT_CALL(b, DoB(5))...\n"
    768      "         Expected: to be called at least twice\n"
    769      "           Actual: called once - unsatisfied and active");
    770 }
    771 
    772 // Tests that the cardinality can be inferred when no Times(...) is
    773 // specified.
    774 TEST(ExpectCallTest, InfersCardinalityWhenThereIsNoWillRepeatedly) {
    775   {
    776     MockB b;
    777     EXPECT_CALL(b, DoB())
    778         .WillOnce(Return(1))
    779         .WillOnce(Return(2));
    780 
    781     EXPECT_EQ(1, b.DoB());
    782     EXPECT_EQ(2, b.DoB());
    783   }
    784 
    785   EXPECT_NONFATAL_FAILURE({  // NOLINT
    786     MockB b;
    787     EXPECT_CALL(b, DoB())
    788         .WillOnce(Return(1))
    789         .WillOnce(Return(2));
    790 
    791     EXPECT_EQ(1, b.DoB());
    792   }, "to be called twice");
    793 
    794   {  // NOLINT
    795     MockB b;
    796     EXPECT_CALL(b, DoB())
    797         .WillOnce(Return(1))
    798         .WillOnce(Return(2));
    799 
    800     EXPECT_EQ(1, b.DoB());
    801     EXPECT_EQ(2, b.DoB());
    802     EXPECT_NONFATAL_FAILURE(b.DoB(), "to be called twice");
    803   }
    804 }
    805 
    806 TEST(ExpectCallTest, InfersCardinality1WhenThereIsWillRepeatedly) {
    807   {
    808     MockB b;
    809     EXPECT_CALL(b, DoB())
    810         .WillOnce(Return(1))
    811         .WillRepeatedly(Return(2));
    812 
    813     EXPECT_EQ(1, b.DoB());
    814   }
    815 
    816   {  // NOLINT
    817     MockB b;
    818     EXPECT_CALL(b, DoB())
    819         .WillOnce(Return(1))
    820         .WillRepeatedly(Return(2));
    821 
    822     EXPECT_EQ(1, b.DoB());
    823     EXPECT_EQ(2, b.DoB());
    824     EXPECT_EQ(2, b.DoB());
    825   }
    826 
    827   EXPECT_NONFATAL_FAILURE({  // NOLINT
    828     MockB b;
    829     EXPECT_CALL(b, DoB())
    830         .WillOnce(Return(1))
    831         .WillRepeatedly(Return(2));
    832   }, "to be called at least once");
    833 }
    834 
    835 // Tests that the n-th action is taken for the n-th matching
    836 // invocation.
    837 TEST(ExpectCallTest, NthMatchTakesNthAction) {
    838   MockB b;
    839   EXPECT_CALL(b, DoB())
    840       .WillOnce(Return(1))
    841       .WillOnce(Return(2))
    842       .WillOnce(Return(3));
    843 
    844   EXPECT_EQ(1, b.DoB());
    845   EXPECT_EQ(2, b.DoB());
    846   EXPECT_EQ(3, b.DoB());
    847 }
    848 
    849 // Tests that the WillRepeatedly() action is taken when the WillOnce(...)
    850 // list is exhausted.
    851 TEST(ExpectCallTest, TakesRepeatedActionWhenWillListIsExhausted) {
    852   MockB b;
    853   EXPECT_CALL(b, DoB())
    854       .WillOnce(Return(1))
    855       .WillRepeatedly(Return(2));
    856 
    857   EXPECT_EQ(1, b.DoB());
    858   EXPECT_EQ(2, b.DoB());
    859   EXPECT_EQ(2, b.DoB());
    860 }
    861 
    862 #if GTEST_HAS_STREAM_REDIRECTION
    863 
    864 // Tests that the default action is taken when the WillOnce(...) list is
    865 // exhausted and there is no WillRepeatedly().
    866 TEST(ExpectCallTest, TakesDefaultActionWhenWillListIsExhausted) {
    867   MockB b;
    868   EXPECT_CALL(b, DoB(_))
    869       .Times(1);
    870   EXPECT_CALL(b, DoB())
    871       .Times(AnyNumber())
    872       .WillOnce(Return(1))
    873       .WillOnce(Return(2));
    874 
    875   CaptureStdout();
    876   EXPECT_EQ(0, b.DoB(1));  // Shouldn't generate a warning as the
    877                            // expectation has no action clause at all.
    878   EXPECT_EQ(1, b.DoB());
    879   EXPECT_EQ(2, b.DoB());
    880   const std::string output1 = GetCapturedStdout();
    881   EXPECT_STREQ("", output1.c_str());
    882 
    883   CaptureStdout();
    884   EXPECT_EQ(0, b.DoB());
    885   EXPECT_EQ(0, b.DoB());
    886   const std::string output2 = GetCapturedStdout();
    887   EXPECT_THAT(output2.c_str(),
    888               HasSubstr("Actions ran out in EXPECT_CALL(b, DoB())...\n"
    889                         "Called 3 times, but only 2 WillOnce()s are specified"
    890                         " - returning default value."));
    891   EXPECT_THAT(output2.c_str(),
    892               HasSubstr("Actions ran out in EXPECT_CALL(b, DoB())...\n"
    893                         "Called 4 times, but only 2 WillOnce()s are specified"
    894                         " - returning default value."));
    895 }
    896 
    897 TEST(FunctionMockerMessageTest, ReportsExpectCallLocationForExhausedActions) {
    898   MockB b;
    899   std::string expect_call_location = FormatFileLocation(__FILE__, __LINE__ + 1);
    900   EXPECT_CALL(b, DoB()).Times(AnyNumber()).WillOnce(Return(1));
    901 
    902   EXPECT_EQ(1, b.DoB());
    903 
    904   CaptureStdout();
    905   EXPECT_EQ(0, b.DoB());
    906   const std::string output = GetCapturedStdout();
    907   // The warning message should contain the call location.
    908   EXPECT_PRED_FORMAT2(IsSubstring, expect_call_location, output);
    909 }
    910 
    911 TEST(FunctionMockerMessageTest,
    912      ReportsDefaultActionLocationOfUninterestingCallsForNaggyMock) {
    913   std::string on_call_location;
    914   CaptureStdout();
    915   {
    916     NaggyMock<MockB> b;
    917     on_call_location = FormatFileLocation(__FILE__, __LINE__ + 1);
    918     ON_CALL(b, DoB(_)).WillByDefault(Return(0));
    919     b.DoB(0);
    920   }
    921   EXPECT_PRED_FORMAT2(IsSubstring, on_call_location, GetCapturedStdout());
    922 }
    923 
    924 #endif  // GTEST_HAS_STREAM_REDIRECTION
    925 
    926 // Tests that an uninteresting call performs the default action.
    927 TEST(UninterestingCallTest, DoesDefaultAction) {
    928   // When there is an ON_CALL() statement, the action specified by it
    929   // should be taken.
    930   MockA a;
    931   ON_CALL(a, Binary(_, _))
    932       .WillByDefault(Return(true));
    933   EXPECT_TRUE(a.Binary(1, 2));
    934 
    935   // When there is no ON_CALL(), the default value for the return type
    936   // should be returned.
    937   MockB b;
    938   EXPECT_EQ(0, b.DoB());
    939 }
    940 
    941 // Tests that an unexpected call performs the default action.
    942 TEST(UnexpectedCallTest, DoesDefaultAction) {
    943   // When there is an ON_CALL() statement, the action specified by it
    944   // should be taken.
    945   MockA a;
    946   ON_CALL(a, Binary(_, _))
    947       .WillByDefault(Return(true));
    948   EXPECT_CALL(a, Binary(0, 0));
    949   a.Binary(0, 0);
    950   bool result = false;
    951   EXPECT_NONFATAL_FAILURE(result = a.Binary(1, 2),
    952                           "Unexpected mock function call");
    953   EXPECT_TRUE(result);
    954 
    955   // When there is no ON_CALL(), the default value for the return type
    956   // should be returned.
    957   MockB b;
    958   EXPECT_CALL(b, DoB(0))
    959       .Times(0);
    960   int n = -1;
    961   EXPECT_NONFATAL_FAILURE(n = b.DoB(1),
    962                           "Unexpected mock function call");
    963   EXPECT_EQ(0, n);
    964 }
    965 
    966 // Tests that when an unexpected void function generates the right
    967 // failure message.
    968 TEST(UnexpectedCallTest, GeneratesFailureForVoidFunction) {
    969   // First, tests the message when there is only one EXPECT_CALL().
    970   MockA a1;
    971   EXPECT_CALL(a1, DoA(1));
    972   a1.DoA(1);
    973   // Ideally we should match the failure message against a regex, but
    974   // EXPECT_NONFATAL_FAILURE doesn't support that, so we test for
    975   // multiple sub-strings instead.
    976   EXPECT_NONFATAL_FAILURE(
    977       a1.DoA(9),
    978       "Unexpected mock function call - returning directly.\n"
    979       "    Function call: DoA(9)\n"
    980       "Google Mock tried the following 1 expectation, but it didn't match:");
    981   EXPECT_NONFATAL_FAILURE(
    982       a1.DoA(9),
    983       "  Expected arg #0: is equal to 1\n"
    984       "           Actual: 9\n"
    985       "         Expected: to be called once\n"
    986       "           Actual: called once - saturated and active");
    987 
    988   // Next, tests the message when there are more than one EXPECT_CALL().
    989   MockA a2;
    990   EXPECT_CALL(a2, DoA(1));
    991   EXPECT_CALL(a2, DoA(3));
    992   a2.DoA(1);
    993   EXPECT_NONFATAL_FAILURE(
    994       a2.DoA(2),
    995       "Unexpected mock function call - returning directly.\n"
    996       "    Function call: DoA(2)\n"
    997       "Google Mock tried the following 2 expectations, but none matched:");
    998   EXPECT_NONFATAL_FAILURE(
    999       a2.DoA(2),
   1000       "tried expectation #0: EXPECT_CALL(a2, DoA(1))...\n"
   1001       "  Expected arg #0: is equal to 1\n"
   1002       "           Actual: 2\n"
   1003       "         Expected: to be called once\n"
   1004       "           Actual: called once - saturated and active");
   1005   EXPECT_NONFATAL_FAILURE(
   1006       a2.DoA(2),
   1007       "tried expectation #1: EXPECT_CALL(a2, DoA(3))...\n"
   1008       "  Expected arg #0: is equal to 3\n"
   1009       "           Actual: 2\n"
   1010       "         Expected: to be called once\n"
   1011       "           Actual: never called - unsatisfied and active");
   1012   a2.DoA(3);
   1013 }
   1014 
   1015 // Tests that an unexpected non-void function generates the right
   1016 // failure message.
   1017 TEST(UnexpectedCallTest, GeneartesFailureForNonVoidFunction) {
   1018   MockB b1;
   1019   EXPECT_CALL(b1, DoB(1));
   1020   b1.DoB(1);
   1021   EXPECT_NONFATAL_FAILURE(
   1022       b1.DoB(2),
   1023       "Unexpected mock function call - returning default value.\n"
   1024       "    Function call: DoB(2)\n"
   1025       "          Returns: 0\n"
   1026       "Google Mock tried the following 1 expectation, but it didn't match:");
   1027   EXPECT_NONFATAL_FAILURE(
   1028       b1.DoB(2),
   1029       "  Expected arg #0: is equal to 1\n"
   1030       "           Actual: 2\n"
   1031       "         Expected: to be called once\n"
   1032       "           Actual: called once - saturated and active");
   1033 }
   1034 
   1035 // Tests that Google Mock explains that an retired expectation doesn't
   1036 // match the call.
   1037 TEST(UnexpectedCallTest, RetiredExpectation) {
   1038   MockB b;
   1039   EXPECT_CALL(b, DoB(1))
   1040       .RetiresOnSaturation();
   1041 
   1042   b.DoB(1);
   1043   EXPECT_NONFATAL_FAILURE(
   1044       b.DoB(1),
   1045       "         Expected: the expectation is active\n"
   1046       "           Actual: it is retired");
   1047 }
   1048 
   1049 // Tests that Google Mock explains that an expectation that doesn't
   1050 // match the arguments doesn't match the call.
   1051 TEST(UnexpectedCallTest, UnmatchedArguments) {
   1052   MockB b;
   1053   EXPECT_CALL(b, DoB(1));
   1054 
   1055   EXPECT_NONFATAL_FAILURE(
   1056       b.DoB(2),
   1057       "  Expected arg #0: is equal to 1\n"
   1058       "           Actual: 2\n");
   1059   b.DoB(1);
   1060 }
   1061 
   1062 // Tests that Google Mock explains that an expectation with
   1063 // unsatisfied pre-requisites doesn't match the call.
   1064 TEST(UnexpectedCallTest, UnsatisifiedPrerequisites) {
   1065   Sequence s1, s2;
   1066   MockB b;
   1067   EXPECT_CALL(b, DoB(1))
   1068       .InSequence(s1);
   1069   EXPECT_CALL(b, DoB(2))
   1070       .Times(AnyNumber())
   1071       .InSequence(s1);
   1072   EXPECT_CALL(b, DoB(3))
   1073       .InSequence(s2);
   1074   EXPECT_CALL(b, DoB(4))
   1075       .InSequence(s1, s2);
   1076 
   1077   ::testing::TestPartResultArray failures;
   1078   {
   1079     ::testing::ScopedFakeTestPartResultReporter reporter(&failures);
   1080     b.DoB(4);
   1081     // Now 'failures' contains the Google Test failures generated by
   1082     // the above statement.
   1083   }
   1084 
   1085   // There should be one non-fatal failure.
   1086   ASSERT_EQ(1, failures.size());
   1087   const ::testing::TestPartResult& r = failures.GetTestPartResult(0);
   1088   EXPECT_EQ(::testing::TestPartResult::kNonFatalFailure, r.type());
   1089 
   1090   // Verifies that the failure message contains the two unsatisfied
   1091   // pre-requisites but not the satisfied one.
   1092 #if GTEST_USES_PCRE
   1093   EXPECT_THAT(r.message(), ContainsRegex(
   1094       // PCRE has trouble using (.|\n) to match any character, but
   1095       // supports the (?s) prefix for using . to match any character.
   1096       "(?s)the following immediate pre-requisites are not satisfied:\n"
   1097       ".*: pre-requisite #0\n"
   1098       ".*: pre-requisite #1"));
   1099 #elif GTEST_USES_POSIX_RE
   1100   EXPECT_THAT(r.message(), ContainsRegex(
   1101       // POSIX RE doesn't understand the (?s) prefix, but has no trouble
   1102       // with (.|\n).
   1103       "the following immediate pre-requisites are not satisfied:\n"
   1104       "(.|\n)*: pre-requisite #0\n"
   1105       "(.|\n)*: pre-requisite #1"));
   1106 #else
   1107   // We can only use Google Test's own simple regex.
   1108   EXPECT_THAT(r.message(), ContainsRegex(
   1109       "the following immediate pre-requisites are not satisfied:"));
   1110   EXPECT_THAT(r.message(), ContainsRegex(": pre-requisite #0"));
   1111   EXPECT_THAT(r.message(), ContainsRegex(": pre-requisite #1"));
   1112 #endif  // GTEST_USES_PCRE
   1113 
   1114   b.DoB(1);
   1115   b.DoB(3);
   1116   b.DoB(4);
   1117 }
   1118 
   1119 TEST(UndefinedReturnValueTest,
   1120      ReturnValueIsMandatoryWhenNotDefaultConstructible) {
   1121   MockA a;
   1122   // TODO(wan (at) google.com): We should really verify the output message,
   1123   // but we cannot yet due to that EXPECT_DEATH only captures stderr
   1124   // while Google Mock logs to stdout.
   1125 #if GTEST_HAS_EXCEPTIONS
   1126   EXPECT_ANY_THROW(a.ReturnNonDefaultConstructible());
   1127 #else
   1128   EXPECT_DEATH_IF_SUPPORTED(a.ReturnNonDefaultConstructible(), "");
   1129 #endif
   1130 }
   1131 
   1132 // Tests that an excessive call (one whose arguments match the
   1133 // matchers but is called too many times) performs the default action.
   1134 TEST(ExcessiveCallTest, DoesDefaultAction) {
   1135   // When there is an ON_CALL() statement, the action specified by it
   1136   // should be taken.
   1137   MockA a;
   1138   ON_CALL(a, Binary(_, _))
   1139       .WillByDefault(Return(true));
   1140   EXPECT_CALL(a, Binary(0, 0));
   1141   a.Binary(0, 0);
   1142   bool result = false;
   1143   EXPECT_NONFATAL_FAILURE(result = a.Binary(0, 0),
   1144                           "Mock function called more times than expected");
   1145   EXPECT_TRUE(result);
   1146 
   1147   // When there is no ON_CALL(), the default value for the return type
   1148   // should be returned.
   1149   MockB b;
   1150   EXPECT_CALL(b, DoB(0))
   1151       .Times(0);
   1152   int n = -1;
   1153   EXPECT_NONFATAL_FAILURE(n = b.DoB(0),
   1154                           "Mock function called more times than expected");
   1155   EXPECT_EQ(0, n);
   1156 }
   1157 
   1158 // Tests that when a void function is called too many times,
   1159 // the failure message contains the argument values.
   1160 TEST(ExcessiveCallTest, GeneratesFailureForVoidFunction) {
   1161   MockA a;
   1162   EXPECT_CALL(a, DoA(_))
   1163       .Times(0);
   1164   EXPECT_NONFATAL_FAILURE(
   1165       a.DoA(9),
   1166       "Mock function called more times than expected - returning directly.\n"
   1167       "    Function call: DoA(9)\n"
   1168       "         Expected: to be never called\n"
   1169       "           Actual: called once - over-saturated and active");
   1170 }
   1171 
   1172 // Tests that when a non-void function is called too many times, the
   1173 // failure message contains the argument values and the return value.
   1174 TEST(ExcessiveCallTest, GeneratesFailureForNonVoidFunction) {
   1175   MockB b;
   1176   EXPECT_CALL(b, DoB(_));
   1177   b.DoB(1);
   1178   EXPECT_NONFATAL_FAILURE(
   1179       b.DoB(2),
   1180       "Mock function called more times than expected - "
   1181       "returning default value.\n"
   1182       "    Function call: DoB(2)\n"
   1183       "          Returns: 0\n"
   1184       "         Expected: to be called once\n"
   1185       "           Actual: called twice - over-saturated and active");
   1186 }
   1187 
   1188 // Tests using sequences.
   1189 
   1190 TEST(InSequenceTest, AllExpectationInScopeAreInSequence) {
   1191   MockA a;
   1192   {
   1193     InSequence dummy;
   1194 
   1195     EXPECT_CALL(a, DoA(1));
   1196     EXPECT_CALL(a, DoA(2));
   1197   }
   1198 
   1199   EXPECT_NONFATAL_FAILURE({  // NOLINT
   1200     a.DoA(2);
   1201   }, "Unexpected mock function call");
   1202 
   1203   a.DoA(1);
   1204   a.DoA(2);
   1205 }
   1206 
   1207 TEST(InSequenceTest, NestedInSequence) {
   1208   MockA a;
   1209   {
   1210     InSequence dummy;
   1211 
   1212     EXPECT_CALL(a, DoA(1));
   1213     {
   1214       InSequence dummy2;
   1215 
   1216       EXPECT_CALL(a, DoA(2));
   1217       EXPECT_CALL(a, DoA(3));
   1218     }
   1219   }
   1220 
   1221   EXPECT_NONFATAL_FAILURE({  // NOLINT
   1222     a.DoA(1);
   1223     a.DoA(3);
   1224   }, "Unexpected mock function call");
   1225 
   1226   a.DoA(2);
   1227   a.DoA(3);
   1228 }
   1229 
   1230 TEST(InSequenceTest, ExpectationsOutOfScopeAreNotAffected) {
   1231   MockA a;
   1232   {
   1233     InSequence dummy;
   1234 
   1235     EXPECT_CALL(a, DoA(1));
   1236     EXPECT_CALL(a, DoA(2));
   1237   }
   1238   EXPECT_CALL(a, DoA(3));
   1239 
   1240   EXPECT_NONFATAL_FAILURE({  // NOLINT
   1241     a.DoA(2);
   1242   }, "Unexpected mock function call");
   1243 
   1244   a.DoA(3);
   1245   a.DoA(1);
   1246   a.DoA(2);
   1247 }
   1248 
   1249 // Tests that any order is allowed when no sequence is used.
   1250 TEST(SequenceTest, AnyOrderIsOkByDefault) {
   1251   {
   1252     MockA a;
   1253     MockB b;
   1254 
   1255     EXPECT_CALL(a, DoA(1));
   1256     EXPECT_CALL(b, DoB())
   1257         .Times(AnyNumber());
   1258 
   1259     a.DoA(1);
   1260     b.DoB();
   1261   }
   1262 
   1263   {  // NOLINT
   1264     MockA a;
   1265     MockB b;
   1266 
   1267     EXPECT_CALL(a, DoA(1));
   1268     EXPECT_CALL(b, DoB())
   1269         .Times(AnyNumber());
   1270 
   1271     b.DoB();
   1272     a.DoA(1);
   1273   }
   1274 }
   1275 
   1276 // Tests that the calls must be in strict order when a complete order
   1277 // is specified.
   1278 TEST(SequenceTest, CallsMustBeInStrictOrderWhenSaidSo1) {
   1279   MockA a;
   1280   ON_CALL(a, ReturnResult(_))
   1281       .WillByDefault(Return(Result()));
   1282 
   1283   Sequence s;
   1284   EXPECT_CALL(a, ReturnResult(1))
   1285       .InSequence(s);
   1286   EXPECT_CALL(a, ReturnResult(2))
   1287       .InSequence(s);
   1288   EXPECT_CALL(a, ReturnResult(3))
   1289       .InSequence(s);
   1290 
   1291   a.ReturnResult(1);
   1292 
   1293   // May only be called after a.ReturnResult(2).
   1294   EXPECT_NONFATAL_FAILURE(a.ReturnResult(3), "Unexpected mock function call");
   1295 
   1296   a.ReturnResult(2);
   1297   a.ReturnResult(3);
   1298 }
   1299 
   1300 // Tests that the calls must be in strict order when a complete order
   1301 // is specified.
   1302 TEST(SequenceTest, CallsMustBeInStrictOrderWhenSaidSo2) {
   1303   MockA a;
   1304   ON_CALL(a, ReturnResult(_))
   1305       .WillByDefault(Return(Result()));
   1306 
   1307   Sequence s;
   1308   EXPECT_CALL(a, ReturnResult(1))
   1309       .InSequence(s);
   1310   EXPECT_CALL(a, ReturnResult(2))
   1311       .InSequence(s);
   1312 
   1313   // May only be called after a.ReturnResult(1).
   1314   EXPECT_NONFATAL_FAILURE(a.ReturnResult(2), "Unexpected mock function call");
   1315 
   1316   a.ReturnResult(1);
   1317   a.ReturnResult(2);
   1318 }
   1319 
   1320 // Tests specifying a DAG using multiple sequences.
   1321 class PartialOrderTest : public testing::Test {
   1322  protected:
   1323   PartialOrderTest() {
   1324     ON_CALL(a_, ReturnResult(_))
   1325         .WillByDefault(Return(Result()));
   1326 
   1327     // Specifies this partial ordering:
   1328     //
   1329     // a.ReturnResult(1) ==>
   1330     //                       a.ReturnResult(2) * n  ==>  a.ReturnResult(3)
   1331     // b.DoB() * 2       ==>
   1332     Sequence x, y;
   1333     EXPECT_CALL(a_, ReturnResult(1))
   1334         .InSequence(x);
   1335     EXPECT_CALL(b_, DoB())
   1336         .Times(2)
   1337         .InSequence(y);
   1338     EXPECT_CALL(a_, ReturnResult(2))
   1339         .Times(AnyNumber())
   1340         .InSequence(x, y);
   1341     EXPECT_CALL(a_, ReturnResult(3))
   1342         .InSequence(x);
   1343   }
   1344 
   1345   MockA a_;
   1346   MockB b_;
   1347 };
   1348 
   1349 TEST_F(PartialOrderTest, CallsMustConformToSpecifiedDag1) {
   1350   a_.ReturnResult(1);
   1351   b_.DoB();
   1352 
   1353   // May only be called after the second DoB().
   1354   EXPECT_NONFATAL_FAILURE(a_.ReturnResult(2), "Unexpected mock function call");
   1355 
   1356   b_.DoB();
   1357   a_.ReturnResult(3);
   1358 }
   1359 
   1360 TEST_F(PartialOrderTest, CallsMustConformToSpecifiedDag2) {
   1361   // May only be called after ReturnResult(1).
   1362   EXPECT_NONFATAL_FAILURE(a_.ReturnResult(2), "Unexpected mock function call");
   1363 
   1364   a_.ReturnResult(1);
   1365   b_.DoB();
   1366   b_.DoB();
   1367   a_.ReturnResult(3);
   1368 }
   1369 
   1370 TEST_F(PartialOrderTest, CallsMustConformToSpecifiedDag3) {
   1371   // May only be called last.
   1372   EXPECT_NONFATAL_FAILURE(a_.ReturnResult(3), "Unexpected mock function call");
   1373 
   1374   a_.ReturnResult(1);
   1375   b_.DoB();
   1376   b_.DoB();
   1377   a_.ReturnResult(3);
   1378 }
   1379 
   1380 TEST_F(PartialOrderTest, CallsMustConformToSpecifiedDag4) {
   1381   a_.ReturnResult(1);
   1382   b_.DoB();
   1383   b_.DoB();
   1384   a_.ReturnResult(3);
   1385 
   1386   // May only be called before ReturnResult(3).
   1387   EXPECT_NONFATAL_FAILURE(a_.ReturnResult(2), "Unexpected mock function call");
   1388 }
   1389 
   1390 TEST(SequenceTest, Retirement) {
   1391   MockA a;
   1392   Sequence s;
   1393 
   1394   EXPECT_CALL(a, DoA(1))
   1395       .InSequence(s);
   1396   EXPECT_CALL(a, DoA(_))
   1397       .InSequence(s)
   1398       .RetiresOnSaturation();
   1399   EXPECT_CALL(a, DoA(1))
   1400       .InSequence(s);
   1401 
   1402   a.DoA(1);
   1403   a.DoA(2);
   1404   a.DoA(1);
   1405 }
   1406 
   1407 // Tests Expectation.
   1408 
   1409 TEST(ExpectationTest, ConstrutorsWork) {
   1410   MockA a;
   1411   Expectation e1;  // Default ctor.
   1412 
   1413   // Ctor from various forms of EXPECT_CALL.
   1414   Expectation e2 = EXPECT_CALL(a, DoA(2));
   1415   Expectation e3 = EXPECT_CALL(a, DoA(3)).With(_);
   1416   {
   1417     Sequence s;
   1418     Expectation e4 = EXPECT_CALL(a, DoA(4)).Times(1);
   1419     Expectation e5 = EXPECT_CALL(a, DoA(5)).InSequence(s);
   1420   }
   1421   Expectation e6 = EXPECT_CALL(a, DoA(6)).After(e2);
   1422   Expectation e7 = EXPECT_CALL(a, DoA(7)).WillOnce(Return());
   1423   Expectation e8 = EXPECT_CALL(a, DoA(8)).WillRepeatedly(Return());
   1424   Expectation e9 = EXPECT_CALL(a, DoA(9)).RetiresOnSaturation();
   1425 
   1426   Expectation e10 = e2;  // Copy ctor.
   1427 
   1428   EXPECT_THAT(e1, Ne(e2));
   1429   EXPECT_THAT(e2, Eq(e10));
   1430 
   1431   a.DoA(2);
   1432   a.DoA(3);
   1433   a.DoA(4);
   1434   a.DoA(5);
   1435   a.DoA(6);
   1436   a.DoA(7);
   1437   a.DoA(8);
   1438   a.DoA(9);
   1439 }
   1440 
   1441 TEST(ExpectationTest, AssignmentWorks) {
   1442   MockA a;
   1443   Expectation e1;
   1444   Expectation e2 = EXPECT_CALL(a, DoA(1));
   1445 
   1446   EXPECT_THAT(e1, Ne(e2));
   1447 
   1448   e1 = e2;
   1449   EXPECT_THAT(e1, Eq(e2));
   1450 
   1451   a.DoA(1);
   1452 }
   1453 
   1454 // Tests ExpectationSet.
   1455 
   1456 TEST(ExpectationSetTest, MemberTypesAreCorrect) {
   1457   ::testing::StaticAssertTypeEq<Expectation, ExpectationSet::value_type>();
   1458 }
   1459 
   1460 TEST(ExpectationSetTest, ConstructorsWork) {
   1461   MockA a;
   1462 
   1463   Expectation e1;
   1464   const Expectation e2;
   1465   ExpectationSet es1;  // Default ctor.
   1466   ExpectationSet es2 = EXPECT_CALL(a, DoA(1));  // Ctor from EXPECT_CALL.
   1467   ExpectationSet es3 = e1;  // Ctor from Expectation.
   1468   ExpectationSet es4(e1);   // Ctor from Expectation; alternative syntax.
   1469   ExpectationSet es5 = e2;  // Ctor from const Expectation.
   1470   ExpectationSet es6(e2);   // Ctor from const Expectation; alternative syntax.
   1471   ExpectationSet es7 = es2;  // Copy ctor.
   1472 
   1473   EXPECT_EQ(0, es1.size());
   1474   EXPECT_EQ(1, es2.size());
   1475   EXPECT_EQ(1, es3.size());
   1476   EXPECT_EQ(1, es4.size());
   1477   EXPECT_EQ(1, es5.size());
   1478   EXPECT_EQ(1, es6.size());
   1479   EXPECT_EQ(1, es7.size());
   1480 
   1481   EXPECT_THAT(es3, Ne(es2));
   1482   EXPECT_THAT(es4, Eq(es3));
   1483   EXPECT_THAT(es5, Eq(es4));
   1484   EXPECT_THAT(es6, Eq(es5));
   1485   EXPECT_THAT(es7, Eq(es2));
   1486   a.DoA(1);
   1487 }
   1488 
   1489 TEST(ExpectationSetTest, AssignmentWorks) {
   1490   ExpectationSet es1;
   1491   ExpectationSet es2 = Expectation();
   1492 
   1493   es1 = es2;
   1494   EXPECT_EQ(1, es1.size());
   1495   EXPECT_THAT(*(es1.begin()), Eq(Expectation()));
   1496   EXPECT_THAT(es1, Eq(es2));
   1497 }
   1498 
   1499 TEST(ExpectationSetTest, InsertionWorks) {
   1500   ExpectationSet es1;
   1501   Expectation e1;
   1502   es1 += e1;
   1503   EXPECT_EQ(1, es1.size());
   1504   EXPECT_THAT(*(es1.begin()), Eq(e1));
   1505 
   1506   MockA a;
   1507   Expectation e2 = EXPECT_CALL(a, DoA(1));
   1508   es1 += e2;
   1509   EXPECT_EQ(2, es1.size());
   1510 
   1511   ExpectationSet::const_iterator it1 = es1.begin();
   1512   ExpectationSet::const_iterator it2 = it1;
   1513   ++it2;
   1514   EXPECT_TRUE(*it1 == e1 || *it2 == e1);  // e1 must be in the set.
   1515   EXPECT_TRUE(*it1 == e2 || *it2 == e2);  // e2 must be in the set too.
   1516   a.DoA(1);
   1517 }
   1518 
   1519 TEST(ExpectationSetTest, SizeWorks) {
   1520   ExpectationSet es;
   1521   EXPECT_EQ(0, es.size());
   1522 
   1523   es += Expectation();
   1524   EXPECT_EQ(1, es.size());
   1525 
   1526   MockA a;
   1527   es += EXPECT_CALL(a, DoA(1));
   1528   EXPECT_EQ(2, es.size());
   1529 
   1530   a.DoA(1);
   1531 }
   1532 
   1533 TEST(ExpectationSetTest, IsEnumerable) {
   1534   ExpectationSet es;
   1535   EXPECT_TRUE(es.begin() == es.end());
   1536 
   1537   es += Expectation();
   1538   ExpectationSet::const_iterator it = es.begin();
   1539   EXPECT_TRUE(it != es.end());
   1540   EXPECT_THAT(*it, Eq(Expectation()));
   1541   ++it;
   1542   EXPECT_TRUE(it== es.end());
   1543 }
   1544 
   1545 // Tests the .After() clause.
   1546 
   1547 TEST(AfterTest, SucceedsWhenPartialOrderIsSatisfied) {
   1548   MockA a;
   1549   ExpectationSet es;
   1550   es += EXPECT_CALL(a, DoA(1));
   1551   es += EXPECT_CALL(a, DoA(2));
   1552   EXPECT_CALL(a, DoA(3))
   1553       .After(es);
   1554 
   1555   a.DoA(1);
   1556   a.DoA(2);
   1557   a.DoA(3);
   1558 }
   1559 
   1560 TEST(AfterTest, SucceedsWhenTotalOrderIsSatisfied) {
   1561   MockA a;
   1562   MockB b;
   1563   // The following also verifies that const Expectation objects work
   1564   // too.  Do not remove the const modifiers.
   1565   const Expectation e1 = EXPECT_CALL(a, DoA(1));
   1566   const Expectation e2 = EXPECT_CALL(b, DoB())
   1567       .Times(2)
   1568       .After(e1);
   1569   EXPECT_CALL(a, DoA(2)).After(e2);
   1570 
   1571   a.DoA(1);
   1572   b.DoB();
   1573   b.DoB();
   1574   a.DoA(2);
   1575 }
   1576 
   1577 // Calls must be in strict order when specified so using .After().
   1578 TEST(AfterTest, CallsMustBeInStrictOrderWhenSpecifiedSo1) {
   1579   MockA a;
   1580   MockB b;
   1581 
   1582   // Define ordering:
   1583   //   a.DoA(1) ==> b.DoB() ==> a.DoA(2)
   1584   Expectation e1 = EXPECT_CALL(a, DoA(1));
   1585   Expectation e2 = EXPECT_CALL(b, DoB())
   1586       .After(e1);
   1587   EXPECT_CALL(a, DoA(2))
   1588       .After(e2);
   1589 
   1590   a.DoA(1);
   1591 
   1592   // May only be called after DoB().
   1593   EXPECT_NONFATAL_FAILURE(a.DoA(2), "Unexpected mock function call");
   1594 
   1595   b.DoB();
   1596   a.DoA(2);
   1597 }
   1598 
   1599 // Calls must be in strict order when specified so using .After().
   1600 TEST(AfterTest, CallsMustBeInStrictOrderWhenSpecifiedSo2) {
   1601   MockA a;
   1602   MockB b;
   1603 
   1604   // Define ordering:
   1605   //   a.DoA(1) ==> b.DoB() * 2 ==> a.DoA(2)
   1606   Expectation e1 = EXPECT_CALL(a, DoA(1));
   1607   Expectation e2 = EXPECT_CALL(b, DoB())
   1608       .Times(2)
   1609       .After(e1);
   1610   EXPECT_CALL(a, DoA(2))
   1611       .After(e2);
   1612 
   1613   a.DoA(1);
   1614   b.DoB();
   1615 
   1616   // May only be called after the second DoB().
   1617   EXPECT_NONFATAL_FAILURE(a.DoA(2), "Unexpected mock function call");
   1618 
   1619   b.DoB();
   1620   a.DoA(2);
   1621 }
   1622 
   1623 // Calls must satisfy the partial order when specified so.
   1624 TEST(AfterTest, CallsMustSatisfyPartialOrderWhenSpecifiedSo) {
   1625   MockA a;
   1626   ON_CALL(a, ReturnResult(_))
   1627       .WillByDefault(Return(Result()));
   1628 
   1629   // Define ordering:
   1630   //   a.DoA(1) ==>
   1631   //   a.DoA(2) ==> a.ReturnResult(3)
   1632   Expectation e = EXPECT_CALL(a, DoA(1));
   1633   const ExpectationSet es = EXPECT_CALL(a, DoA(2));
   1634   EXPECT_CALL(a, ReturnResult(3))
   1635       .After(e, es);
   1636 
   1637   // May only be called last.
   1638   EXPECT_NONFATAL_FAILURE(a.ReturnResult(3), "Unexpected mock function call");
   1639 
   1640   a.DoA(2);
   1641   a.DoA(1);
   1642   a.ReturnResult(3);
   1643 }
   1644 
   1645 // Calls must satisfy the partial order when specified so.
   1646 TEST(AfterTest, CallsMustSatisfyPartialOrderWhenSpecifiedSo2) {
   1647   MockA a;
   1648 
   1649   // Define ordering:
   1650   //   a.DoA(1) ==>
   1651   //   a.DoA(2) ==> a.DoA(3)
   1652   Expectation e = EXPECT_CALL(a, DoA(1));
   1653   const ExpectationSet es = EXPECT_CALL(a, DoA(2));
   1654   EXPECT_CALL(a, DoA(3))
   1655       .After(e, es);
   1656 
   1657   a.DoA(2);
   1658 
   1659   // May only be called last.
   1660   EXPECT_NONFATAL_FAILURE(a.DoA(3), "Unexpected mock function call");
   1661 
   1662   a.DoA(1);
   1663   a.DoA(3);
   1664 }
   1665 
   1666 // .After() can be combined with .InSequence().
   1667 TEST(AfterTest, CanBeUsedWithInSequence) {
   1668   MockA a;
   1669   Sequence s;
   1670   Expectation e = EXPECT_CALL(a, DoA(1));
   1671   EXPECT_CALL(a, DoA(2)).InSequence(s);
   1672   EXPECT_CALL(a, DoA(3))
   1673       .InSequence(s)
   1674       .After(e);
   1675 
   1676   a.DoA(1);
   1677 
   1678   // May only be after DoA(2).
   1679   EXPECT_NONFATAL_FAILURE(a.DoA(3), "Unexpected mock function call");
   1680 
   1681   a.DoA(2);
   1682   a.DoA(3);
   1683 }
   1684 
   1685 // .After() can be called multiple times.
   1686 TEST(AfterTest, CanBeCalledManyTimes) {
   1687   MockA a;
   1688   Expectation e1 = EXPECT_CALL(a, DoA(1));
   1689   Expectation e2 = EXPECT_CALL(a, DoA(2));
   1690   Expectation e3 = EXPECT_CALL(a, DoA(3));
   1691   EXPECT_CALL(a, DoA(4))
   1692       .After(e1)
   1693       .After(e2)
   1694       .After(e3);
   1695 
   1696   a.DoA(3);
   1697   a.DoA(1);
   1698   a.DoA(2);
   1699   a.DoA(4);
   1700 }
   1701 
   1702 // .After() accepts up to 5 arguments.
   1703 TEST(AfterTest, AcceptsUpToFiveArguments) {
   1704   MockA a;
   1705   Expectation e1 = EXPECT_CALL(a, DoA(1));
   1706   Expectation e2 = EXPECT_CALL(a, DoA(2));
   1707   Expectation e3 = EXPECT_CALL(a, DoA(3));
   1708   ExpectationSet es1 = EXPECT_CALL(a, DoA(4));
   1709   ExpectationSet es2 = EXPECT_CALL(a, DoA(5));
   1710   EXPECT_CALL(a, DoA(6))
   1711       .After(e1, e2, e3, es1, es2);
   1712 
   1713   a.DoA(5);
   1714   a.DoA(2);
   1715   a.DoA(4);
   1716   a.DoA(1);
   1717   a.DoA(3);
   1718   a.DoA(6);
   1719 }
   1720 
   1721 // .After() allows input to contain duplicated Expectations.
   1722 TEST(AfterTest, AcceptsDuplicatedInput) {
   1723   MockA a;
   1724   ON_CALL(a, ReturnResult(_))
   1725       .WillByDefault(Return(Result()));
   1726 
   1727   // Define ordering:
   1728   //   DoA(1) ==>
   1729   //   DoA(2) ==> ReturnResult(3)
   1730   Expectation e1 = EXPECT_CALL(a, DoA(1));
   1731   Expectation e2 = EXPECT_CALL(a, DoA(2));
   1732   ExpectationSet es;
   1733   es += e1;
   1734   es += e2;
   1735   EXPECT_CALL(a, ReturnResult(3))
   1736       .After(e1, e2, es, e1);
   1737 
   1738   a.DoA(1);
   1739 
   1740   // May only be after DoA(2).
   1741   EXPECT_NONFATAL_FAILURE(a.ReturnResult(3), "Unexpected mock function call");
   1742 
   1743   a.DoA(2);
   1744   a.ReturnResult(3);
   1745 }
   1746 
   1747 // An Expectation added to an ExpectationSet after it has been used in
   1748 // an .After() has no effect.
   1749 TEST(AfterTest, ChangesToExpectationSetHaveNoEffectAfterwards) {
   1750   MockA a;
   1751   ExpectationSet es1 = EXPECT_CALL(a, DoA(1));
   1752   Expectation e2 = EXPECT_CALL(a, DoA(2));
   1753   EXPECT_CALL(a, DoA(3))
   1754       .After(es1);
   1755   es1 += e2;
   1756 
   1757   a.DoA(1);
   1758   a.DoA(3);
   1759   a.DoA(2);
   1760 }
   1761 
   1762 // Tests that Google Mock correctly handles calls to mock functions
   1763 // after a mock object owning one of their pre-requisites has died.
   1764 
   1765 // Tests that calls that satisfy the original spec are successful.
   1766 TEST(DeletingMockEarlyTest, Success1) {
   1767   MockB* const b1 = new MockB;
   1768   MockA* const a = new MockA;
   1769   MockB* const b2 = new MockB;
   1770 
   1771   {
   1772     InSequence dummy;
   1773     EXPECT_CALL(*b1, DoB(_))
   1774         .WillOnce(Return(1));
   1775     EXPECT_CALL(*a, Binary(_, _))
   1776         .Times(AnyNumber())
   1777         .WillRepeatedly(Return(true));
   1778     EXPECT_CALL(*b2, DoB(_))
   1779         .Times(AnyNumber())
   1780         .WillRepeatedly(Return(2));
   1781   }
   1782 
   1783   EXPECT_EQ(1, b1->DoB(1));
   1784   delete b1;
   1785   // a's pre-requisite has died.
   1786   EXPECT_TRUE(a->Binary(0, 1));
   1787   delete b2;
   1788   // a's successor has died.
   1789   EXPECT_TRUE(a->Binary(1, 2));
   1790   delete a;
   1791 }
   1792 
   1793 // Tests that calls that satisfy the original spec are successful.
   1794 TEST(DeletingMockEarlyTest, Success2) {
   1795   MockB* const b1 = new MockB;
   1796   MockA* const a = new MockA;
   1797   MockB* const b2 = new MockB;
   1798 
   1799   {
   1800     InSequence dummy;
   1801     EXPECT_CALL(*b1, DoB(_))
   1802         .WillOnce(Return(1));
   1803     EXPECT_CALL(*a, Binary(_, _))
   1804         .Times(AnyNumber());
   1805     EXPECT_CALL(*b2, DoB(_))
   1806         .Times(AnyNumber())
   1807         .WillRepeatedly(Return(2));
   1808   }
   1809 
   1810   delete a;  // a is trivially satisfied.
   1811   EXPECT_EQ(1, b1->DoB(1));
   1812   EXPECT_EQ(2, b2->DoB(2));
   1813   delete b1;
   1814   delete b2;
   1815 }
   1816 
   1817 // Tests that it's OK to delete a mock object itself in its action.
   1818 
   1819 // Suppresses warning on unreferenced formal parameter in MSVC with
   1820 // -W4.
   1821 #ifdef _MSC_VER
   1822 # pragma warning(push)
   1823 # pragma warning(disable:4100)
   1824 #endif
   1825 
   1826 ACTION_P(Delete, ptr) { delete ptr; }
   1827 
   1828 #ifdef _MSC_VER
   1829 # pragma warning(pop)
   1830 #endif
   1831 
   1832 TEST(DeletingMockEarlyTest, CanDeleteSelfInActionReturningVoid) {
   1833   MockA* const a = new MockA;
   1834   EXPECT_CALL(*a, DoA(_)).WillOnce(Delete(a));
   1835   a->DoA(42);  // This will cause a to be deleted.
   1836 }
   1837 
   1838 TEST(DeletingMockEarlyTest, CanDeleteSelfInActionReturningValue) {
   1839   MockA* const a = new MockA;
   1840   EXPECT_CALL(*a, ReturnResult(_))
   1841       .WillOnce(DoAll(Delete(a), Return(Result())));
   1842   a->ReturnResult(42);  // This will cause a to be deleted.
   1843 }
   1844 
   1845 // Tests that calls that violate the original spec yield failures.
   1846 TEST(DeletingMockEarlyTest, Failure1) {
   1847   MockB* const b1 = new MockB;
   1848   MockA* const a = new MockA;
   1849   MockB* const b2 = new MockB;
   1850 
   1851   {
   1852     InSequence dummy;
   1853     EXPECT_CALL(*b1, DoB(_))
   1854         .WillOnce(Return(1));
   1855     EXPECT_CALL(*a, Binary(_, _))
   1856         .Times(AnyNumber());
   1857     EXPECT_CALL(*b2, DoB(_))
   1858         .Times(AnyNumber())
   1859         .WillRepeatedly(Return(2));
   1860   }
   1861 
   1862   delete a;  // a is trivially satisfied.
   1863   EXPECT_NONFATAL_FAILURE({
   1864     b2->DoB(2);
   1865   }, "Unexpected mock function call");
   1866   EXPECT_EQ(1, b1->DoB(1));
   1867   delete b1;
   1868   delete b2;
   1869 }
   1870 
   1871 // Tests that calls that violate the original spec yield failures.
   1872 TEST(DeletingMockEarlyTest, Failure2) {
   1873   MockB* const b1 = new MockB;
   1874   MockA* const a = new MockA;
   1875   MockB* const b2 = new MockB;
   1876 
   1877   {
   1878     InSequence dummy;
   1879     EXPECT_CALL(*b1, DoB(_));
   1880     EXPECT_CALL(*a, Binary(_, _))
   1881         .Times(AnyNumber());
   1882     EXPECT_CALL(*b2, DoB(_))
   1883         .Times(AnyNumber());
   1884   }
   1885 
   1886   EXPECT_NONFATAL_FAILURE(delete b1,
   1887                           "Actual: never called");
   1888   EXPECT_NONFATAL_FAILURE(a->Binary(0, 1),
   1889                           "Unexpected mock function call");
   1890   EXPECT_NONFATAL_FAILURE(b2->DoB(1),
   1891                           "Unexpected mock function call");
   1892   delete a;
   1893   delete b2;
   1894 }
   1895 
   1896 class EvenNumberCardinality : public CardinalityInterface {
   1897  public:
   1898   // Returns true iff call_count calls will satisfy this cardinality.
   1899   virtual bool IsSatisfiedByCallCount(int call_count) const {
   1900     return call_count % 2 == 0;
   1901   }
   1902 
   1903   // Returns true iff call_count calls will saturate this cardinality.
   1904   virtual bool IsSaturatedByCallCount(int /* call_count */) const {
   1905     return false;
   1906   }
   1907 
   1908   // Describes self to an ostream.
   1909   virtual void DescribeTo(::std::ostream* os) const {
   1910     *os << "called even number of times";
   1911   }
   1912 };
   1913 
   1914 Cardinality EvenNumber() {
   1915   return Cardinality(new EvenNumberCardinality);
   1916 }
   1917 
   1918 TEST(ExpectationBaseTest,
   1919      AllPrerequisitesAreSatisfiedWorksForNonMonotonicCardinality) {
   1920   MockA* a = new MockA;
   1921   Sequence s;
   1922 
   1923   EXPECT_CALL(*a, DoA(1))
   1924       .Times(EvenNumber())
   1925       .InSequence(s);
   1926   EXPECT_CALL(*a, DoA(2))
   1927       .Times(AnyNumber())
   1928       .InSequence(s);
   1929   EXPECT_CALL(*a, DoA(3))
   1930       .Times(AnyNumber());
   1931 
   1932   a->DoA(3);
   1933   a->DoA(1);
   1934   EXPECT_NONFATAL_FAILURE(a->DoA(2), "Unexpected mock function call");
   1935   EXPECT_NONFATAL_FAILURE(delete a, "to be called even number of times");
   1936 }
   1937 
   1938 // The following tests verify the message generated when a mock
   1939 // function is called.
   1940 
   1941 struct Printable {
   1942 };
   1943 
   1944 inline void operator<<(::std::ostream& os, const Printable&) {
   1945   os << "Printable";
   1946 }
   1947 
   1948 struct Unprintable {
   1949   Unprintable() : value(0) {}
   1950   int value;
   1951 };
   1952 
   1953 class MockC {
   1954  public:
   1955   MockC() {}
   1956 
   1957   MOCK_METHOD6(VoidMethod, void(bool cond, int n, string s, void* p,
   1958                                 const Printable& x, Unprintable y));
   1959   MOCK_METHOD0(NonVoidMethod, int());  // NOLINT
   1960 
   1961  private:
   1962   GTEST_DISALLOW_COPY_AND_ASSIGN_(MockC);
   1963 };
   1964 
   1965 class VerboseFlagPreservingFixture : public testing::Test {
   1966  protected:
   1967   VerboseFlagPreservingFixture()
   1968       : saved_verbose_flag_(GMOCK_FLAG(verbose)) {}
   1969 
   1970   ~VerboseFlagPreservingFixture() { GMOCK_FLAG(verbose) = saved_verbose_flag_; }
   1971 
   1972  private:
   1973   const string saved_verbose_flag_;
   1974 
   1975   GTEST_DISALLOW_COPY_AND_ASSIGN_(VerboseFlagPreservingFixture);
   1976 };
   1977 
   1978 #if GTEST_HAS_STREAM_REDIRECTION
   1979 
   1980 // Tests that an uninteresting mock function call on a naggy mock
   1981 // generates a warning without the stack trace when
   1982 // --gmock_verbose=warning is specified.
   1983 TEST(FunctionCallMessageTest,
   1984      UninterestingCallOnNaggyMockGeneratesNoStackTraceWhenVerboseWarning) {
   1985   GMOCK_FLAG(verbose) = kWarningVerbosity;
   1986   NaggyMock<MockC> c;
   1987   CaptureStdout();
   1988   c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable());
   1989   const std::string output = GetCapturedStdout();
   1990   EXPECT_PRED_FORMAT2(IsSubstring, "GMOCK WARNING", output);
   1991   EXPECT_PRED_FORMAT2(IsNotSubstring, "Stack trace:", output);
   1992 }
   1993 
   1994 // Tests that an uninteresting mock function call on a naggy mock
   1995 // generates a warning containing the stack trace when
   1996 // --gmock_verbose=info is specified.
   1997 TEST(FunctionCallMessageTest,
   1998      UninterestingCallOnNaggyMockGeneratesFyiWithStackTraceWhenVerboseInfo) {
   1999   GMOCK_FLAG(verbose) = kInfoVerbosity;
   2000   NaggyMock<MockC> c;
   2001   CaptureStdout();
   2002   c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable());
   2003   const std::string output = GetCapturedStdout();
   2004   EXPECT_PRED_FORMAT2(IsSubstring, "GMOCK WARNING", output);
   2005   EXPECT_PRED_FORMAT2(IsSubstring, "Stack trace:", output);
   2006 
   2007 # ifndef NDEBUG
   2008 
   2009   // We check the stack trace content in dbg-mode only, as opt-mode
   2010   // may inline the call we are interested in seeing.
   2011 
   2012   // Verifies that a void mock function's name appears in the stack
   2013   // trace.
   2014   EXPECT_PRED_FORMAT2(IsSubstring, "VoidMethod(", output);
   2015 
   2016   // Verifies that a non-void mock function's name appears in the
   2017   // stack trace.
   2018   CaptureStdout();
   2019   c.NonVoidMethod();
   2020   const std::string output2 = GetCapturedStdout();
   2021   EXPECT_PRED_FORMAT2(IsSubstring, "NonVoidMethod(", output2);
   2022 
   2023 # endif  // NDEBUG
   2024 }
   2025 
   2026 // Tests that an uninteresting mock function call on a naggy mock
   2027 // causes the function arguments and return value to be printed.
   2028 TEST(FunctionCallMessageTest,
   2029      UninterestingCallOnNaggyMockPrintsArgumentsAndReturnValue) {
   2030   // A non-void mock function.
   2031   NaggyMock<MockB> b;
   2032   CaptureStdout();
   2033   b.DoB();
   2034   const std::string output1 = GetCapturedStdout();
   2035   EXPECT_PRED_FORMAT2(
   2036       IsSubstring,
   2037       "Uninteresting mock function call - returning default value.\n"
   2038       "    Function call: DoB()\n"
   2039       "          Returns: 0\n", output1.c_str());
   2040   // Makes sure the return value is printed.
   2041 
   2042   // A void mock function.
   2043   NaggyMock<MockC> c;
   2044   CaptureStdout();
   2045   c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable());
   2046   const std::string output2 = GetCapturedStdout();
   2047   EXPECT_THAT(output2.c_str(),
   2048               ContainsRegex(
   2049                   "Uninteresting mock function call - returning directly\\.\n"
   2050                   "    Function call: VoidMethod"
   2051                   "\\(false, 5, \"Hi\", NULL, @.+ "
   2052                   "Printable, 4-byte object <00-00 00-00>\\)"));
   2053   // A void function has no return value to print.
   2054 }
   2055 
   2056 // Tests how the --gmock_verbose flag affects Google Mock's output.
   2057 
   2058 class GMockVerboseFlagTest : public VerboseFlagPreservingFixture {
   2059  public:
   2060   // Verifies that the given Google Mock output is correct.  (When
   2061   // should_print is true, the output should match the given regex and
   2062   // contain the given function name in the stack trace.  When it's
   2063   // false, the output should be empty.)
   2064   void VerifyOutput(const std::string& output, bool should_print,
   2065                     const string& expected_substring,
   2066                     const string& function_name) {
   2067     if (should_print) {
   2068       EXPECT_THAT(output.c_str(), HasSubstr(expected_substring));
   2069 # ifndef NDEBUG
   2070       // We check the stack trace content in dbg-mode only, as opt-mode
   2071       // may inline the call we are interested in seeing.
   2072       EXPECT_THAT(output.c_str(), HasSubstr(function_name));
   2073 # else
   2074       // Suppresses 'unused function parameter' warnings.
   2075       static_cast<void>(function_name);
   2076 # endif  // NDEBUG
   2077     } else {
   2078       EXPECT_STREQ("", output.c_str());
   2079     }
   2080   }
   2081 
   2082   // Tests how the flag affects expected calls.
   2083   void TestExpectedCall(bool should_print) {
   2084     MockA a;
   2085     EXPECT_CALL(a, DoA(5));
   2086     EXPECT_CALL(a, Binary(_, 1))
   2087         .WillOnce(Return(true));
   2088 
   2089     // A void-returning function.
   2090     CaptureStdout();
   2091     a.DoA(5);
   2092     VerifyOutput(
   2093         GetCapturedStdout(),
   2094         should_print,
   2095         "Mock function call matches EXPECT_CALL(a, DoA(5))...\n"
   2096         "    Function call: DoA(5)\n"
   2097         "Stack trace:\n",
   2098         "DoA");
   2099 
   2100     // A non-void-returning function.
   2101     CaptureStdout();
   2102     a.Binary(2, 1);
   2103     VerifyOutput(
   2104         GetCapturedStdout(),
   2105         should_print,
   2106         "Mock function call matches EXPECT_CALL(a, Binary(_, 1))...\n"
   2107         "    Function call: Binary(2, 1)\n"
   2108         "          Returns: true\n"
   2109         "Stack trace:\n",
   2110         "Binary");
   2111   }
   2112 
   2113   // Tests how the flag affects uninteresting calls on a naggy mock.
   2114   void TestUninterestingCallOnNaggyMock(bool should_print) {
   2115     NaggyMock<MockA> a;
   2116     const string note =
   2117         "NOTE: You can safely ignore the above warning unless this "
   2118         "call should not happen.  Do not suppress it by blindly adding "
   2119         "an EXPECT_CALL() if you don't mean to enforce the call.  "
   2120         "See http://code.google.com/p/googlemock/wiki/CookBook#"
   2121         "Knowing_When_to_Expect for details.";
   2122 
   2123     // A void-returning function.
   2124     CaptureStdout();
   2125     a.DoA(5);
   2126     VerifyOutput(
   2127         GetCapturedStdout(),
   2128         should_print,
   2129         "\nGMOCK WARNING:\n"
   2130         "Uninteresting mock function call - returning directly.\n"
   2131         "    Function call: DoA(5)\n" +
   2132         note,
   2133         "DoA");
   2134 
   2135     // A non-void-returning function.
   2136     CaptureStdout();
   2137     a.Binary(2, 1);
   2138     VerifyOutput(
   2139         GetCapturedStdout(),
   2140         should_print,
   2141         "\nGMOCK WARNING:\n"
   2142         "Uninteresting mock function call - returning default value.\n"
   2143         "    Function call: Binary(2, 1)\n"
   2144         "          Returns: false\n" +
   2145         note,
   2146         "Binary");
   2147   }
   2148 };
   2149 
   2150 // Tests that --gmock_verbose=info causes both expected and
   2151 // uninteresting calls to be reported.
   2152 TEST_F(GMockVerboseFlagTest, Info) {
   2153   GMOCK_FLAG(verbose) = kInfoVerbosity;
   2154   TestExpectedCall(true);
   2155   TestUninterestingCallOnNaggyMock(true);
   2156 }
   2157 
   2158 // Tests that --gmock_verbose=warning causes uninteresting calls to be
   2159 // reported.
   2160 TEST_F(GMockVerboseFlagTest, Warning) {
   2161   GMOCK_FLAG(verbose) = kWarningVerbosity;
   2162   TestExpectedCall(false);
   2163   TestUninterestingCallOnNaggyMock(true);
   2164 }
   2165 
   2166 // Tests that --gmock_verbose=warning causes neither expected nor
   2167 // uninteresting calls to be reported.
   2168 TEST_F(GMockVerboseFlagTest, Error) {
   2169   GMOCK_FLAG(verbose) = kErrorVerbosity;
   2170   TestExpectedCall(false);
   2171   TestUninterestingCallOnNaggyMock(false);
   2172 }
   2173 
   2174 // Tests that --gmock_verbose=SOME_INVALID_VALUE has the same effect
   2175 // as --gmock_verbose=warning.
   2176 TEST_F(GMockVerboseFlagTest, InvalidFlagIsTreatedAsWarning) {
   2177   GMOCK_FLAG(verbose) = "invalid";  // Treated as "warning".
   2178   TestExpectedCall(false);
   2179   TestUninterestingCallOnNaggyMock(true);
   2180 }
   2181 
   2182 #endif  // GTEST_HAS_STREAM_REDIRECTION
   2183 
   2184 // A helper class that generates a failure when printed.  We use it to
   2185 // ensure that Google Mock doesn't print a value (even to an internal
   2186 // buffer) when it is not supposed to do so.
   2187 class PrintMeNot {};
   2188 
   2189 void PrintTo(PrintMeNot /* dummy */, ::std::ostream* /* os */) {
   2190   ADD_FAILURE() << "Google Mock is printing a value that shouldn't be "
   2191                 << "printed even to an internal buffer.";
   2192 }
   2193 
   2194 class LogTestHelper {
   2195  public:
   2196   LogTestHelper() {}
   2197 
   2198   MOCK_METHOD1(Foo, PrintMeNot(PrintMeNot));
   2199 
   2200  private:
   2201   GTEST_DISALLOW_COPY_AND_ASSIGN_(LogTestHelper);
   2202 };
   2203 
   2204 class GMockLogTest : public VerboseFlagPreservingFixture {
   2205  protected:
   2206   LogTestHelper helper_;
   2207 };
   2208 
   2209 TEST_F(GMockLogTest, DoesNotPrintGoodCallInternallyIfVerbosityIsWarning) {
   2210   GMOCK_FLAG(verbose) = kWarningVerbosity;
   2211   EXPECT_CALL(helper_, Foo(_))
   2212       .WillOnce(Return(PrintMeNot()));
   2213   helper_.Foo(PrintMeNot());  // This is an expected call.
   2214 }
   2215 
   2216 TEST_F(GMockLogTest, DoesNotPrintGoodCallInternallyIfVerbosityIsError) {
   2217   GMOCK_FLAG(verbose) = kErrorVerbosity;
   2218   EXPECT_CALL(helper_, Foo(_))
   2219       .WillOnce(Return(PrintMeNot()));
   2220   helper_.Foo(PrintMeNot());  // This is an expected call.
   2221 }
   2222 
   2223 TEST_F(GMockLogTest, DoesNotPrintWarningInternallyIfVerbosityIsError) {
   2224   GMOCK_FLAG(verbose) = kErrorVerbosity;
   2225   ON_CALL(helper_, Foo(_))
   2226       .WillByDefault(Return(PrintMeNot()));
   2227   helper_.Foo(PrintMeNot());  // This should generate a warning.
   2228 }
   2229 
   2230 // Tests Mock::AllowLeak().
   2231 
   2232 TEST(AllowLeakTest, AllowsLeakingUnusedMockObject) {
   2233   MockA* a = new MockA;
   2234   Mock::AllowLeak(a);
   2235 }
   2236 
   2237 TEST(AllowLeakTest, CanBeCalledBeforeOnCall) {
   2238   MockA* a = new MockA;
   2239   Mock::AllowLeak(a);
   2240   ON_CALL(*a, DoA(_)).WillByDefault(Return());
   2241   a->DoA(0);
   2242 }
   2243 
   2244 TEST(AllowLeakTest, CanBeCalledAfterOnCall) {
   2245   MockA* a = new MockA;
   2246   ON_CALL(*a, DoA(_)).WillByDefault(Return());
   2247   Mock::AllowLeak(a);
   2248 }
   2249 
   2250 TEST(AllowLeakTest, CanBeCalledBeforeExpectCall) {
   2251   MockA* a = new MockA;
   2252   Mock::AllowLeak(a);
   2253   EXPECT_CALL(*a, DoA(_));
   2254   a->DoA(0);
   2255 }
   2256 
   2257 TEST(AllowLeakTest, CanBeCalledAfterExpectCall) {
   2258   MockA* a = new MockA;
   2259   EXPECT_CALL(*a, DoA(_)).Times(AnyNumber());
   2260   Mock::AllowLeak(a);
   2261 }
   2262 
   2263 TEST(AllowLeakTest, WorksWhenBothOnCallAndExpectCallArePresent) {
   2264   MockA* a = new MockA;
   2265   ON_CALL(*a, DoA(_)).WillByDefault(Return());
   2266   EXPECT_CALL(*a, DoA(_)).Times(AnyNumber());
   2267   Mock::AllowLeak(a);
   2268 }
   2269 
   2270 // Tests that we can verify and clear a mock object's expectations
   2271 // when none of its methods has expectations.
   2272 TEST(VerifyAndClearExpectationsTest, NoMethodHasExpectations) {
   2273   MockB b;
   2274   ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b));
   2275 
   2276   // There should be no expectations on the methods now, so we can
   2277   // freely call them.
   2278   EXPECT_EQ(0, b.DoB());
   2279   EXPECT_EQ(0, b.DoB(1));
   2280 }
   2281 
   2282 // Tests that we can verify and clear a mock object's expectations
   2283 // when some, but not all, of its methods have expectations *and* the
   2284 // verification succeeds.
   2285 TEST(VerifyAndClearExpectationsTest, SomeMethodsHaveExpectationsAndSucceed) {
   2286   MockB b;
   2287   EXPECT_CALL(b, DoB())
   2288       .WillOnce(Return(1));
   2289   b.DoB();
   2290   ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b));
   2291 
   2292   // There should be no expectations on the methods now, so we can
   2293   // freely call them.
   2294   EXPECT_EQ(0, b.DoB());
   2295   EXPECT_EQ(0, b.DoB(1));
   2296 }
   2297 
   2298 // Tests that we can verify and clear a mock object's expectations
   2299 // when some, but not all, of its methods have expectations *and* the
   2300 // verification fails.
   2301 TEST(VerifyAndClearExpectationsTest, SomeMethodsHaveExpectationsAndFail) {
   2302   MockB b;
   2303   EXPECT_CALL(b, DoB())
   2304       .WillOnce(Return(1));
   2305   bool result = true;
   2306   EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClearExpectations(&b),
   2307                           "Actual: never called");
   2308   ASSERT_FALSE(result);
   2309 
   2310   // There should be no expectations on the methods now, so we can
   2311   // freely call them.
   2312   EXPECT_EQ(0, b.DoB());
   2313   EXPECT_EQ(0, b.DoB(1));
   2314 }
   2315 
   2316 // Tests that we can verify and clear a mock object's expectations
   2317 // when all of its methods have expectations.
   2318 TEST(VerifyAndClearExpectationsTest, AllMethodsHaveExpectations) {
   2319   MockB b;
   2320   EXPECT_CALL(b, DoB())
   2321       .WillOnce(Return(1));
   2322   EXPECT_CALL(b, DoB(_))
   2323       .WillOnce(Return(2));
   2324   b.DoB();
   2325   b.DoB(1);
   2326   ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b));
   2327 
   2328   // There should be no expectations on the methods now, so we can
   2329   // freely call them.
   2330   EXPECT_EQ(0, b.DoB());
   2331   EXPECT_EQ(0, b.DoB(1));
   2332 }
   2333 
   2334 // Tests that we can verify and clear a mock object's expectations
   2335 // when a method has more than one expectation.
   2336 TEST(VerifyAndClearExpectationsTest, AMethodHasManyExpectations) {
   2337   MockB b;
   2338   EXPECT_CALL(b, DoB(0))
   2339       .WillOnce(Return(1));
   2340   EXPECT_CALL(b, DoB(_))
   2341       .WillOnce(Return(2));
   2342   b.DoB(1);
   2343   bool result = true;
   2344   EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClearExpectations(&b),
   2345                           "Actual: never called");
   2346   ASSERT_FALSE(result);
   2347 
   2348   // There should be no expectations on the methods now, so we can
   2349   // freely call them.
   2350   EXPECT_EQ(0, b.DoB());
   2351   EXPECT_EQ(0, b.DoB(1));
   2352 }
   2353 
   2354 // Tests that we can call VerifyAndClearExpectations() on the same
   2355 // mock object multiple times.
   2356 TEST(VerifyAndClearExpectationsTest, CanCallManyTimes) {
   2357   MockB b;
   2358   EXPECT_CALL(b, DoB());
   2359   b.DoB();
   2360   Mock::VerifyAndClearExpectations(&b);
   2361 
   2362   EXPECT_CALL(b, DoB(_))
   2363       .WillOnce(Return(1));
   2364   b.DoB(1);
   2365   Mock::VerifyAndClearExpectations(&b);
   2366   Mock::VerifyAndClearExpectations(&b);
   2367 
   2368   // There should be no expectations on the methods now, so we can
   2369   // freely call them.
   2370   EXPECT_EQ(0, b.DoB());
   2371   EXPECT_EQ(0, b.DoB(1));
   2372 }
   2373 
   2374 // Tests that we can clear a mock object's default actions when none
   2375 // of its methods has default actions.
   2376 TEST(VerifyAndClearTest, NoMethodHasDefaultActions) {
   2377   MockB b;
   2378   // If this crashes or generates a failure, the test will catch it.
   2379   Mock::VerifyAndClear(&b);
   2380   EXPECT_EQ(0, b.DoB());
   2381 }
   2382 
   2383 // Tests that we can clear a mock object's default actions when some,
   2384 // but not all of its methods have default actions.
   2385 TEST(VerifyAndClearTest, SomeMethodsHaveDefaultActions) {
   2386   MockB b;
   2387   ON_CALL(b, DoB())
   2388       .WillByDefault(Return(1));
   2389 
   2390   Mock::VerifyAndClear(&b);
   2391 
   2392   // Verifies that the default action of int DoB() was removed.
   2393   EXPECT_EQ(0, b.DoB());
   2394 }
   2395 
   2396 // Tests that we can clear a mock object's default actions when all of
   2397 // its methods have default actions.
   2398 TEST(VerifyAndClearTest, AllMethodsHaveDefaultActions) {
   2399   MockB b;
   2400   ON_CALL(b, DoB())
   2401       .WillByDefault(Return(1));
   2402   ON_CALL(b, DoB(_))
   2403       .WillByDefault(Return(2));
   2404 
   2405   Mock::VerifyAndClear(&b);
   2406 
   2407   // Verifies that the default action of int DoB() was removed.
   2408   EXPECT_EQ(0, b.DoB());
   2409 
   2410   // Verifies that the default action of int DoB(int) was removed.
   2411   EXPECT_EQ(0, b.DoB(0));
   2412 }
   2413 
   2414 // Tests that we can clear a mock object's default actions when a
   2415 // method has more than one ON_CALL() set on it.
   2416 TEST(VerifyAndClearTest, AMethodHasManyDefaultActions) {
   2417   MockB b;
   2418   ON_CALL(b, DoB(0))
   2419       .WillByDefault(Return(1));
   2420   ON_CALL(b, DoB(_))
   2421       .WillByDefault(Return(2));
   2422 
   2423   Mock::VerifyAndClear(&b);
   2424 
   2425   // Verifies that the default actions (there are two) of int DoB(int)
   2426   // were removed.
   2427   EXPECT_EQ(0, b.DoB(0));
   2428   EXPECT_EQ(0, b.DoB(1));
   2429 }
   2430 
   2431 // Tests that we can call VerifyAndClear() on a mock object multiple
   2432 // times.
   2433 TEST(VerifyAndClearTest, CanCallManyTimes) {
   2434   MockB b;
   2435   ON_CALL(b, DoB())
   2436       .WillByDefault(Return(1));
   2437   Mock::VerifyAndClear(&b);
   2438   Mock::VerifyAndClear(&b);
   2439 
   2440   ON_CALL(b, DoB(_))
   2441       .WillByDefault(Return(1));
   2442   Mock::VerifyAndClear(&b);
   2443 
   2444   EXPECT_EQ(0, b.DoB());
   2445   EXPECT_EQ(0, b.DoB(1));
   2446 }
   2447 
   2448 // Tests that VerifyAndClear() works when the verification succeeds.
   2449 TEST(VerifyAndClearTest, Success) {
   2450   MockB b;
   2451   ON_CALL(b, DoB())
   2452       .WillByDefault(Return(1));
   2453   EXPECT_CALL(b, DoB(1))
   2454       .WillOnce(Return(2));
   2455 
   2456   b.DoB();
   2457   b.DoB(1);
   2458   ASSERT_TRUE(Mock::VerifyAndClear(&b));
   2459 
   2460   // There should be no expectations on the methods now, so we can
   2461   // freely call them.
   2462   EXPECT_EQ(0, b.DoB());
   2463   EXPECT_EQ(0, b.DoB(1));
   2464 }
   2465 
   2466 // Tests that VerifyAndClear() works when the verification fails.
   2467 TEST(VerifyAndClearTest, Failure) {
   2468   MockB b;
   2469   ON_CALL(b, DoB(_))
   2470       .WillByDefault(Return(1));
   2471   EXPECT_CALL(b, DoB())
   2472       .WillOnce(Return(2));
   2473 
   2474   b.DoB(1);
   2475   bool result = true;
   2476   EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClear(&b),
   2477                           "Actual: never called");
   2478   ASSERT_FALSE(result);
   2479 
   2480   // There should be no expectations on the methods now, so we can
   2481   // freely call them.
   2482   EXPECT_EQ(0, b.DoB());
   2483   EXPECT_EQ(0, b.DoB(1));
   2484 }
   2485 
   2486 // Tests that VerifyAndClear() works when the default actions and
   2487 // expectations are set on a const mock object.
   2488 TEST(VerifyAndClearTest, Const) {
   2489   MockB b;
   2490   ON_CALL(Const(b), DoB())
   2491       .WillByDefault(Return(1));
   2492 
   2493   EXPECT_CALL(Const(b), DoB())
   2494       .WillOnce(DoDefault())
   2495       .WillOnce(Return(2));
   2496 
   2497   b.DoB();
   2498   b.DoB();
   2499   ASSERT_TRUE(Mock::VerifyAndClear(&b));
   2500 
   2501   // There should be no expectations on the methods now, so we can
   2502   // freely call them.
   2503   EXPECT_EQ(0, b.DoB());
   2504   EXPECT_EQ(0, b.DoB(1));
   2505 }
   2506 
   2507 // Tests that we can set default actions and expectations on a mock
   2508 // object after VerifyAndClear() has been called on it.
   2509 TEST(VerifyAndClearTest, CanSetDefaultActionsAndExpectationsAfterwards) {
   2510   MockB b;
   2511   ON_CALL(b, DoB())
   2512       .WillByDefault(Return(1));
   2513   EXPECT_CALL(b, DoB(_))
   2514       .WillOnce(Return(2));
   2515   b.DoB(1);
   2516 
   2517   Mock::VerifyAndClear(&b);
   2518 
   2519   EXPECT_CALL(b, DoB())
   2520       .WillOnce(Return(3));
   2521   ON_CALL(b, DoB(_))
   2522       .WillByDefault(Return(4));
   2523 
   2524   EXPECT_EQ(3, b.DoB());
   2525   EXPECT_EQ(4, b.DoB(1));
   2526 }
   2527 
   2528 // Tests that calling VerifyAndClear() on one mock object does not
   2529 // affect other mock objects (either of the same type or not).
   2530 TEST(VerifyAndClearTest, DoesNotAffectOtherMockObjects) {
   2531   MockA a;
   2532   MockB b1;
   2533   MockB b2;
   2534 
   2535   ON_CALL(a, Binary(_, _))
   2536       .WillByDefault(Return(true));
   2537   EXPECT_CALL(a, Binary(_, _))
   2538       .WillOnce(DoDefault())
   2539       .WillOnce(Return(false));
   2540 
   2541   ON_CALL(b1, DoB())
   2542       .WillByDefault(Return(1));
   2543   EXPECT_CALL(b1, DoB(_))
   2544       .WillOnce(Return(2));
   2545 
   2546   ON_CALL(b2, DoB())
   2547       .WillByDefault(Return(3));
   2548   EXPECT_CALL(b2, DoB(_));
   2549 
   2550   b2.DoB(0);
   2551   Mock::VerifyAndClear(&b2);
   2552 
   2553   // Verifies that the default actions and expectations of a and b1
   2554   // are still in effect.
   2555   EXPECT_TRUE(a.Binary(0, 0));
   2556   EXPECT_FALSE(a.Binary(0, 0));
   2557 
   2558   EXPECT_EQ(1, b1.DoB());
   2559   EXPECT_EQ(2, b1.DoB(0));
   2560 }
   2561 
   2562 TEST(VerifyAndClearTest,
   2563      DestroyingChainedMocksDoesNotDeadlockThroughExpectations) {
   2564   linked_ptr<MockA> a(new MockA);
   2565   ReferenceHoldingMock test_mock;
   2566 
   2567   // EXPECT_CALL stores a reference to a inside test_mock.
   2568   EXPECT_CALL(test_mock, AcceptReference(_))
   2569       .WillRepeatedly(SetArgPointee<0>(a));
   2570 
   2571   // Throw away the reference to the mock that we have in a. After this, the
   2572   // only reference to it is stored by test_mock.
   2573   a.reset();
   2574 
   2575   // When test_mock goes out of scope, it destroys the last remaining reference
   2576   // to the mock object originally pointed to by a. This will cause the MockA
   2577   // destructor to be called from inside the ReferenceHoldingMock destructor.
   2578   // The state of all mocks is protected by a single global lock, but there
   2579   // should be no deadlock.
   2580 }
   2581 
   2582 TEST(VerifyAndClearTest,
   2583      DestroyingChainedMocksDoesNotDeadlockThroughDefaultAction) {
   2584   linked_ptr<MockA> a(new MockA);
   2585   ReferenceHoldingMock test_mock;
   2586 
   2587   // ON_CALL stores a reference to a inside test_mock.
   2588   ON_CALL(test_mock, AcceptReference(_))
   2589       .WillByDefault(SetArgPointee<0>(a));
   2590 
   2591   // Throw away the reference to the mock that we have in a. After this, the
   2592   // only reference to it is stored by test_mock.
   2593   a.reset();
   2594 
   2595   // When test_mock goes out of scope, it destroys the last remaining reference
   2596   // to the mock object originally pointed to by a. This will cause the MockA
   2597   // destructor to be called from inside the ReferenceHoldingMock destructor.
   2598   // The state of all mocks is protected by a single global lock, but there
   2599   // should be no deadlock.
   2600 }
   2601 
   2602 // Tests that a mock function's action can call a mock function
   2603 // (either the same function or a different one) either as an explicit
   2604 // action or as a default action without causing a dead lock.  It
   2605 // verifies that the action is not performed inside the critical
   2606 // section.
   2607 TEST(SynchronizationTest, CanCallMockMethodInAction) {
   2608   MockA a;
   2609   MockC c;
   2610   ON_CALL(a, DoA(_))
   2611       .WillByDefault(IgnoreResult(InvokeWithoutArgs(&c,
   2612                                                     &MockC::NonVoidMethod)));
   2613   EXPECT_CALL(a, DoA(1));
   2614   EXPECT_CALL(a, DoA(1))
   2615       .WillOnce(Invoke(&a, &MockA::DoA))
   2616       .RetiresOnSaturation();
   2617   EXPECT_CALL(c, NonVoidMethod());
   2618 
   2619   a.DoA(1);
   2620   // This will match the second EXPECT_CALL() and trigger another a.DoA(1),
   2621   // which will in turn match the first EXPECT_CALL() and trigger a call to
   2622   // c.NonVoidMethod() that was specified by the ON_CALL() since the first
   2623   // EXPECT_CALL() did not specify an action.
   2624 }
   2625 
   2626 }  // namespace
   2627 
   2628 // Allows the user to define his own main and then invoke gmock_main
   2629 // from it. This might be necessary on some platforms which require
   2630 // specific setup and teardown.
   2631 #if GMOCK_RENAME_MAIN
   2632 int gmock_main(int argc, char **argv) {
   2633 #else
   2634 int main(int argc, char **argv) {
   2635 #endif  // GMOCK_RENAME_MAIN
   2636   testing::InitGoogleMock(&argc, argv);
   2637 
   2638   // Ensures that the tests pass no matter what value of
   2639   // --gmock_catch_leaked_mocks and --gmock_verbose the user specifies.
   2640   testing::GMOCK_FLAG(catch_leaked_mocks) = true;
   2641   testing::GMOCK_FLAG(verbose) = testing::internal::kWarningVerbosity;
   2642 
   2643   return RUN_ALL_TESTS();
   2644 }
   2645