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