• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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@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.
SetCallCount(int n,ExpectationBase * exp)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::NaggyMock;
89 using testing::Ne;
90 using testing::Return;
91 using testing::Sequence;
92 using testing::SetArgPointee;
93 using testing::internal::ExpectationTester;
94 using testing::internal::FormatFileLocation;
95 using testing::internal::kErrorVerbosity;
96 using testing::internal::kInfoVerbosity;
97 using testing::internal::kWarningVerbosity;
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 
TEST(MockMethodTest,CanInstantiateWithIncompleteArgType)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.
PrintTo(const Incomplete &,::std::ostream * os)131 void PrintTo(const Incomplete& /* x */, ::std::ostream* os) {
132   *os << "incomplete";
133 }
134 
135 class Result {};
136 
137 class MockA {
138  public:
MockA()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:
MockB()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:
ReferenceHoldingMock()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:
~CC()180   virtual ~CC() {}
181   virtual int Method() = 0;
182 };
183 class MockCC : public CC {
184  public:
MockCC()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.
TEST(OnCallSyntaxTest,CompilesWithMethodNameExpandedFromMacro)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.
TEST(OnCallSyntaxTest,WorksWithMethodNameExpandedFromMacro)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.
TEST(ExpectCallSyntaxTest,CompilesWithMethodNameExpandedFromMacro)208 TEST(ExpectCallSyntaxTest, CompilesWithMethodNameExpandedFromMacro) {
209   MockCC cc;
210   EXPECT_CALL(cc, Method());
211   cc.Method();
212 }
213 
214 // Tests that it works, too.
TEST(ExpectCallSyntaxTest,WorksWithMethodNameExpandedFromMacro)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.
TEST(OnCallSyntaxTest,EvaluatesFirstArgumentOnce)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 
TEST(OnCallSyntaxTest,EvaluatesSecondArgumentOnce)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 
TEST(OnCallSyntaxTest,WithIsOptional)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 
TEST(OnCallSyntaxTest,WithCanAppearAtMostOnce)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 
TEST(OnCallSyntaxTest,WillByDefaultIsMandatory)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 
TEST(OnCallSyntaxTest,WillByDefaultCanAppearAtMostOnce)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.
TEST(ExpectCallSyntaxTest,EvaluatesFirstArgumentOnce)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 
TEST(ExpectCallSyntaxTest,EvaluatesSecondArgumentOnce)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 
TEST(ExpectCallSyntaxTest,WithIsOptional)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 
TEST(ExpectCallSyntaxTest,WithCanAppearAtMostOnce)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 
TEST(ExpectCallSyntaxTest,WithMustBeFirstClause)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 
TEST(ExpectCallSyntaxTest,TimesCanBeInferred)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 
TEST(ExpectCallSyntaxTest,TimesCanAppearAtMostOnce)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 
TEST(ExpectCallSyntaxTest,TimesMustBeBeforeInSequence)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 
TEST(ExpectCallSyntaxTest,InSequenceIsOptional)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 
TEST(ExpectCallSyntaxTest,InSequenceCanAppearMultipleTimes)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 
TEST(ExpectCallSyntaxTest,InSequenceMustBeBeforeAfter)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 
TEST(ExpectCallSyntaxTest,InSequenceMustBeBeforeWillOnce)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 
TEST(ExpectCallSyntaxTest,AfterMustBeBeforeWillOnce)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 
TEST(ExpectCallSyntaxTest,WillIsOptional)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 
TEST(ExpectCallSyntaxTest,WillCanAppearMultipleTimes)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 
TEST(ExpectCallSyntaxTest,WillMustBeBeforeWillRepeatedly)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 
TEST(ExpectCallSyntaxTest,WillRepeatedlyIsOptional)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 
TEST(ExpectCallSyntaxTest,WillRepeatedlyCannotAppearMultipleTimes)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 
TEST(ExpectCallSyntaxTest,WillRepeatedlyMustBeBeforeRetiresOnSaturation)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 
TEST(ExpectCallSyntaxTest,RetiresOnSaturationIsOptional)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 
TEST(ExpectCallSyntaxTest,RetiresOnSaturationCannotAppearMultipleTimes)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 
TEST(ExpectCallSyntaxTest,DefaultCardinalityIsOnce)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.
TEST(ExpectCallSyntaxTest,DoesNotWarnOnAdequateActionCount)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.
TEST(ExpectCallSyntaxTest,WarnsOnTooManyActions)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 std::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.
TEST(ExpectCallSyntaxTest,WarnsOnTooFewActions)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 std::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.
TEST(OnCallTest,TakesBuiltInDefaultActionWhenNoOnCall)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.
TEST(OnCallTest,TakesBuiltInDefaultActionWhenNoOnCallMatches)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.
TEST(OnCallTest,PicksLastMatchingOnCall)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.
TEST(ExpectCallTest,AllowsAnyCallWhenNoSpec)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.
TEST(ExpectCallTest,PicksLastMatchingExpectCall)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.
TEST(ExpectCallTest,CatchesTooFewCalls)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.
TEST(ExpectCallTest,InfersCardinalityWhenThereIsNoWillRepeatedly)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 
TEST(ExpectCallTest,InfersCardinality1WhenThereIsWillRepeatedly)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.
TEST(ExpectCallTest,NthMatchTakesNthAction)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.
TEST(ExpectCallTest,TakesRepeatedActionWhenWillListIsExhausted)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().
TEST(ExpectCallTest,TakesDefaultActionWhenWillListIsExhausted)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 std::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 std::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 
TEST(FunctionMockerMessageTest,ReportsExpectCallLocationForExhausedActions)889 TEST(FunctionMockerMessageTest, 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 std::string output = GetCapturedStdout();
899   // The warning message should contain the call location.
900   EXPECT_PRED_FORMAT2(IsSubstring, expect_call_location, output);
901 }
902 
TEST(FunctionMockerMessageTest,ReportsDefaultActionLocationOfUninterestingCallsForNaggyMock)903 TEST(FunctionMockerMessageTest,
904      ReportsDefaultActionLocationOfUninterestingCallsForNaggyMock) {
905   std::string on_call_location;
906   CaptureStdout();
907   {
908     NaggyMock<MockB> b;
909     on_call_location = FormatFileLocation(__FILE__, __LINE__ + 1);
910     ON_CALL(b, DoB(_)).WillByDefault(Return(0));
911     b.DoB(0);
912   }
913   EXPECT_PRED_FORMAT2(IsSubstring, on_call_location, GetCapturedStdout());
914 }
915 
916 #endif  // GTEST_HAS_STREAM_REDIRECTION
917 
918 // Tests that an uninteresting call performs the default action.
TEST(UninterestingCallTest,DoesDefaultAction)919 TEST(UninterestingCallTest, DoesDefaultAction) {
920   // When there is an ON_CALL() statement, the action specified by it
921   // should be taken.
922   MockA a;
923   ON_CALL(a, Binary(_, _))
924       .WillByDefault(Return(true));
925   EXPECT_TRUE(a.Binary(1, 2));
926 
927   // When there is no ON_CALL(), the default value for the return type
928   // should be returned.
929   MockB b;
930   EXPECT_EQ(0, b.DoB());
931 }
932 
933 // Tests that an unexpected call performs the default action.
TEST(UnexpectedCallTest,DoesDefaultAction)934 TEST(UnexpectedCallTest, DoesDefaultAction) {
935   // When there is an ON_CALL() statement, the action specified by it
936   // should be taken.
937   MockA a;
938   ON_CALL(a, Binary(_, _))
939       .WillByDefault(Return(true));
940   EXPECT_CALL(a, Binary(0, 0));
941   a.Binary(0, 0);
942   bool result = false;
943   EXPECT_NONFATAL_FAILURE(result = a.Binary(1, 2),
944                           "Unexpected mock function call");
945   EXPECT_TRUE(result);
946 
947   // When there is no ON_CALL(), the default value for the return type
948   // should be returned.
949   MockB b;
950   EXPECT_CALL(b, DoB(0))
951       .Times(0);
952   int n = -1;
953   EXPECT_NONFATAL_FAILURE(n = b.DoB(1),
954                           "Unexpected mock function call");
955   EXPECT_EQ(0, n);
956 }
957 
958 // Tests that when an unexpected void function generates the right
959 // failure message.
TEST(UnexpectedCallTest,GeneratesFailureForVoidFunction)960 TEST(UnexpectedCallTest, GeneratesFailureForVoidFunction) {
961   // First, tests the message when there is only one EXPECT_CALL().
962   MockA a1;
963   EXPECT_CALL(a1, DoA(1));
964   a1.DoA(1);
965   // Ideally we should match the failure message against a regex, but
966   // EXPECT_NONFATAL_FAILURE doesn't support that, so we test for
967   // multiple sub-strings instead.
968   EXPECT_NONFATAL_FAILURE(
969       a1.DoA(9),
970       "Unexpected mock function call - returning directly.\n"
971       "    Function call: DoA(9)\n"
972       "Google Mock tried the following 1 expectation, but it didn't match:");
973   EXPECT_NONFATAL_FAILURE(
974       a1.DoA(9),
975       "  Expected arg #0: is equal to 1\n"
976       "           Actual: 9\n"
977       "         Expected: to be called once\n"
978       "           Actual: called once - saturated and active");
979 
980   // Next, tests the message when there are more than one EXPECT_CALL().
981   MockA a2;
982   EXPECT_CALL(a2, DoA(1));
983   EXPECT_CALL(a2, DoA(3));
984   a2.DoA(1);
985   EXPECT_NONFATAL_FAILURE(
986       a2.DoA(2),
987       "Unexpected mock function call - returning directly.\n"
988       "    Function call: DoA(2)\n"
989       "Google Mock tried the following 2 expectations, but none matched:");
990   EXPECT_NONFATAL_FAILURE(
991       a2.DoA(2),
992       "tried expectation #0: EXPECT_CALL(a2, DoA(1))...\n"
993       "  Expected arg #0: is equal to 1\n"
994       "           Actual: 2\n"
995       "         Expected: to be called once\n"
996       "           Actual: called once - saturated and active");
997   EXPECT_NONFATAL_FAILURE(
998       a2.DoA(2),
999       "tried expectation #1: EXPECT_CALL(a2, DoA(3))...\n"
1000       "  Expected arg #0: is equal to 3\n"
1001       "           Actual: 2\n"
1002       "         Expected: to be called once\n"
1003       "           Actual: never called - unsatisfied and active");
1004   a2.DoA(3);
1005 }
1006 
1007 // Tests that an unexpected non-void function generates the right
1008 // failure message.
TEST(UnexpectedCallTest,GeneartesFailureForNonVoidFunction)1009 TEST(UnexpectedCallTest, GeneartesFailureForNonVoidFunction) {
1010   MockB b1;
1011   EXPECT_CALL(b1, DoB(1));
1012   b1.DoB(1);
1013   EXPECT_NONFATAL_FAILURE(
1014       b1.DoB(2),
1015       "Unexpected mock function call - returning default value.\n"
1016       "    Function call: DoB(2)\n"
1017       "          Returns: 0\n"
1018       "Google Mock tried the following 1 expectation, but it didn't match:");
1019   EXPECT_NONFATAL_FAILURE(
1020       b1.DoB(2),
1021       "  Expected arg #0: is equal to 1\n"
1022       "           Actual: 2\n"
1023       "         Expected: to be called once\n"
1024       "           Actual: called once - saturated and active");
1025 }
1026 
1027 // Tests that Google Mock explains that an retired expectation doesn't
1028 // match the call.
TEST(UnexpectedCallTest,RetiredExpectation)1029 TEST(UnexpectedCallTest, RetiredExpectation) {
1030   MockB b;
1031   EXPECT_CALL(b, DoB(1))
1032       .RetiresOnSaturation();
1033 
1034   b.DoB(1);
1035   EXPECT_NONFATAL_FAILURE(
1036       b.DoB(1),
1037       "         Expected: the expectation is active\n"
1038       "           Actual: it is retired");
1039 }
1040 
1041 // Tests that Google Mock explains that an expectation that doesn't
1042 // match the arguments doesn't match the call.
TEST(UnexpectedCallTest,UnmatchedArguments)1043 TEST(UnexpectedCallTest, UnmatchedArguments) {
1044   MockB b;
1045   EXPECT_CALL(b, DoB(1));
1046 
1047   EXPECT_NONFATAL_FAILURE(
1048       b.DoB(2),
1049       "  Expected arg #0: is equal to 1\n"
1050       "           Actual: 2\n");
1051   b.DoB(1);
1052 }
1053 
1054 // Tests that Google Mock explains that an expectation with
1055 // unsatisfied pre-requisites doesn't match the call.
TEST(UnexpectedCallTest,UnsatisifiedPrerequisites)1056 TEST(UnexpectedCallTest, UnsatisifiedPrerequisites) {
1057   Sequence s1, s2;
1058   MockB b;
1059   EXPECT_CALL(b, DoB(1))
1060       .InSequence(s1);
1061   EXPECT_CALL(b, DoB(2))
1062       .Times(AnyNumber())
1063       .InSequence(s1);
1064   EXPECT_CALL(b, DoB(3))
1065       .InSequence(s2);
1066   EXPECT_CALL(b, DoB(4))
1067       .InSequence(s1, s2);
1068 
1069   ::testing::TestPartResultArray failures;
1070   {
1071     ::testing::ScopedFakeTestPartResultReporter reporter(&failures);
1072     b.DoB(4);
1073     // Now 'failures' contains the Google Test failures generated by
1074     // the above statement.
1075   }
1076 
1077   // There should be one non-fatal failure.
1078   ASSERT_EQ(1, failures.size());
1079   const ::testing::TestPartResult& r = failures.GetTestPartResult(0);
1080   EXPECT_EQ(::testing::TestPartResult::kNonFatalFailure, r.type());
1081 
1082   // Verifies that the failure message contains the two unsatisfied
1083   // pre-requisites but not the satisfied one.
1084 #if GTEST_USES_PCRE
1085   EXPECT_THAT(r.message(), ContainsRegex(
1086       // PCRE has trouble using (.|\n) to match any character, but
1087       // supports the (?s) prefix for using . to match any character.
1088       "(?s)the following immediate pre-requisites are not satisfied:\n"
1089       ".*: pre-requisite #0\n"
1090       ".*: pre-requisite #1"));
1091 #elif GTEST_USES_POSIX_RE
1092   EXPECT_THAT(r.message(), ContainsRegex(
1093       // POSIX RE doesn't understand the (?s) prefix, but has no trouble
1094       // with (.|\n).
1095       "the following immediate pre-requisites are not satisfied:\n"
1096       "(.|\n)*: pre-requisite #0\n"
1097       "(.|\n)*: pre-requisite #1"));
1098 #else
1099   // We can only use Google Test's own simple regex.
1100   EXPECT_THAT(r.message(), ContainsRegex(
1101       "the following immediate pre-requisites are not satisfied:"));
1102   EXPECT_THAT(r.message(), ContainsRegex(": pre-requisite #0"));
1103   EXPECT_THAT(r.message(), ContainsRegex(": pre-requisite #1"));
1104 #endif  // GTEST_USES_PCRE
1105 
1106   b.DoB(1);
1107   b.DoB(3);
1108   b.DoB(4);
1109 }
1110 
TEST(UndefinedReturnValueTest,ReturnValueIsMandatory)1111 TEST(UndefinedReturnValueTest, ReturnValueIsMandatory) {
1112   MockA a;
1113   // TODO(wan@google.com): We should really verify the output message,
1114   // but we cannot yet due to that EXPECT_DEATH only captures stderr
1115   // while Google Mock logs to stdout.
1116 #if GTEST_HAS_EXCEPTIONS
1117   EXPECT_ANY_THROW(a.ReturnResult(1));
1118 #else
1119   EXPECT_DEATH_IF_SUPPORTED(a.ReturnResult(1), "");
1120 #endif
1121 }
1122 
1123 // Tests that an excessive call (one whose arguments match the
1124 // matchers but is called too many times) performs the default action.
TEST(ExcessiveCallTest,DoesDefaultAction)1125 TEST(ExcessiveCallTest, DoesDefaultAction) {
1126   // When there is an ON_CALL() statement, the action specified by it
1127   // should be taken.
1128   MockA a;
1129   ON_CALL(a, Binary(_, _))
1130       .WillByDefault(Return(true));
1131   EXPECT_CALL(a, Binary(0, 0));
1132   a.Binary(0, 0);
1133   bool result = false;
1134   EXPECT_NONFATAL_FAILURE(result = a.Binary(0, 0),
1135                           "Mock function called more times than expected");
1136   EXPECT_TRUE(result);
1137 
1138   // When there is no ON_CALL(), the default value for the return type
1139   // should be returned.
1140   MockB b;
1141   EXPECT_CALL(b, DoB(0))
1142       .Times(0);
1143   int n = -1;
1144   EXPECT_NONFATAL_FAILURE(n = b.DoB(0),
1145                           "Mock function called more times than expected");
1146   EXPECT_EQ(0, n);
1147 }
1148 
1149 // Tests that when a void function is called too many times,
1150 // the failure message contains the argument values.
TEST(ExcessiveCallTest,GeneratesFailureForVoidFunction)1151 TEST(ExcessiveCallTest, GeneratesFailureForVoidFunction) {
1152   MockA a;
1153   EXPECT_CALL(a, DoA(_))
1154       .Times(0);
1155   EXPECT_NONFATAL_FAILURE(
1156       a.DoA(9),
1157       "Mock function called more times than expected - returning directly.\n"
1158       "    Function call: DoA(9)\n"
1159       "         Expected: to be never called\n"
1160       "           Actual: called once - over-saturated and active");
1161 }
1162 
1163 // Tests that when a non-void function is called too many times, the
1164 // failure message contains the argument values and the return value.
TEST(ExcessiveCallTest,GeneratesFailureForNonVoidFunction)1165 TEST(ExcessiveCallTest, GeneratesFailureForNonVoidFunction) {
1166   MockB b;
1167   EXPECT_CALL(b, DoB(_));
1168   b.DoB(1);
1169   EXPECT_NONFATAL_FAILURE(
1170       b.DoB(2),
1171       "Mock function called more times than expected - "
1172       "returning default value.\n"
1173       "    Function call: DoB(2)\n"
1174       "          Returns: 0\n"
1175       "         Expected: to be called once\n"
1176       "           Actual: called twice - over-saturated and active");
1177 }
1178 
1179 // Tests using sequences.
1180 
TEST(InSequenceTest,AllExpectationInScopeAreInSequence)1181 TEST(InSequenceTest, AllExpectationInScopeAreInSequence) {
1182   MockA a;
1183   {
1184     InSequence dummy;
1185 
1186     EXPECT_CALL(a, DoA(1));
1187     EXPECT_CALL(a, DoA(2));
1188   }
1189 
1190   EXPECT_NONFATAL_FAILURE({  // NOLINT
1191     a.DoA(2);
1192   }, "Unexpected mock function call");
1193 
1194   a.DoA(1);
1195   a.DoA(2);
1196 }
1197 
TEST(InSequenceTest,NestedInSequence)1198 TEST(InSequenceTest, NestedInSequence) {
1199   MockA a;
1200   {
1201     InSequence dummy;
1202 
1203     EXPECT_CALL(a, DoA(1));
1204     {
1205       InSequence dummy2;
1206 
1207       EXPECT_CALL(a, DoA(2));
1208       EXPECT_CALL(a, DoA(3));
1209     }
1210   }
1211 
1212   EXPECT_NONFATAL_FAILURE({  // NOLINT
1213     a.DoA(1);
1214     a.DoA(3);
1215   }, "Unexpected mock function call");
1216 
1217   a.DoA(2);
1218   a.DoA(3);
1219 }
1220 
TEST(InSequenceTest,ExpectationsOutOfScopeAreNotAffected)1221 TEST(InSequenceTest, ExpectationsOutOfScopeAreNotAffected) {
1222   MockA a;
1223   {
1224     InSequence dummy;
1225 
1226     EXPECT_CALL(a, DoA(1));
1227     EXPECT_CALL(a, DoA(2));
1228   }
1229   EXPECT_CALL(a, DoA(3));
1230 
1231   EXPECT_NONFATAL_FAILURE({  // NOLINT
1232     a.DoA(2);
1233   }, "Unexpected mock function call");
1234 
1235   a.DoA(3);
1236   a.DoA(1);
1237   a.DoA(2);
1238 }
1239 
1240 // Tests that any order is allowed when no sequence is used.
TEST(SequenceTest,AnyOrderIsOkByDefault)1241 TEST(SequenceTest, AnyOrderIsOkByDefault) {
1242   {
1243     MockA a;
1244     MockB b;
1245 
1246     EXPECT_CALL(a, DoA(1));
1247     EXPECT_CALL(b, DoB())
1248         .Times(AnyNumber());
1249 
1250     a.DoA(1);
1251     b.DoB();
1252   }
1253 
1254   {  // NOLINT
1255     MockA a;
1256     MockB b;
1257 
1258     EXPECT_CALL(a, DoA(1));
1259     EXPECT_CALL(b, DoB())
1260         .Times(AnyNumber());
1261 
1262     b.DoB();
1263     a.DoA(1);
1264   }
1265 }
1266 
1267 // Tests that the calls must be in strict order when a complete order
1268 // is specified.
TEST(SequenceTest,CallsMustBeInStrictOrderWhenSaidSo1)1269 TEST(SequenceTest, CallsMustBeInStrictOrderWhenSaidSo1) {
1270   MockA a;
1271   ON_CALL(a, ReturnResult(_))
1272       .WillByDefault(Return(Result()));
1273 
1274   Sequence s;
1275   EXPECT_CALL(a, ReturnResult(1))
1276       .InSequence(s);
1277   EXPECT_CALL(a, ReturnResult(2))
1278       .InSequence(s);
1279   EXPECT_CALL(a, ReturnResult(3))
1280       .InSequence(s);
1281 
1282   a.ReturnResult(1);
1283 
1284   // May only be called after a.ReturnResult(2).
1285   EXPECT_NONFATAL_FAILURE(a.ReturnResult(3), "Unexpected mock function call");
1286 
1287   a.ReturnResult(2);
1288   a.ReturnResult(3);
1289 }
1290 
1291 // Tests that the calls must be in strict order when a complete order
1292 // is specified.
TEST(SequenceTest,CallsMustBeInStrictOrderWhenSaidSo2)1293 TEST(SequenceTest, CallsMustBeInStrictOrderWhenSaidSo2) {
1294   MockA a;
1295   ON_CALL(a, ReturnResult(_))
1296       .WillByDefault(Return(Result()));
1297 
1298   Sequence s;
1299   EXPECT_CALL(a, ReturnResult(1))
1300       .InSequence(s);
1301   EXPECT_CALL(a, ReturnResult(2))
1302       .InSequence(s);
1303 
1304   // May only be called after a.ReturnResult(1).
1305   EXPECT_NONFATAL_FAILURE(a.ReturnResult(2), "Unexpected mock function call");
1306 
1307   a.ReturnResult(1);
1308   a.ReturnResult(2);
1309 }
1310 
1311 // Tests specifying a DAG using multiple sequences.
1312 class PartialOrderTest : public testing::Test {
1313  protected:
PartialOrderTest()1314   PartialOrderTest() {
1315     ON_CALL(a_, ReturnResult(_))
1316         .WillByDefault(Return(Result()));
1317 
1318     // Specifies this partial ordering:
1319     //
1320     // a.ReturnResult(1) ==>
1321     //                       a.ReturnResult(2) * n  ==>  a.ReturnResult(3)
1322     // b.DoB() * 2       ==>
1323     Sequence x, y;
1324     EXPECT_CALL(a_, ReturnResult(1))
1325         .InSequence(x);
1326     EXPECT_CALL(b_, DoB())
1327         .Times(2)
1328         .InSequence(y);
1329     EXPECT_CALL(a_, ReturnResult(2))
1330         .Times(AnyNumber())
1331         .InSequence(x, y);
1332     EXPECT_CALL(a_, ReturnResult(3))
1333         .InSequence(x);
1334   }
1335 
1336   MockA a_;
1337   MockB b_;
1338 };
1339 
TEST_F(PartialOrderTest,CallsMustConformToSpecifiedDag1)1340 TEST_F(PartialOrderTest, CallsMustConformToSpecifiedDag1) {
1341   a_.ReturnResult(1);
1342   b_.DoB();
1343 
1344   // May only be called after the second DoB().
1345   EXPECT_NONFATAL_FAILURE(a_.ReturnResult(2), "Unexpected mock function call");
1346 
1347   b_.DoB();
1348   a_.ReturnResult(3);
1349 }
1350 
TEST_F(PartialOrderTest,CallsMustConformToSpecifiedDag2)1351 TEST_F(PartialOrderTest, CallsMustConformToSpecifiedDag2) {
1352   // May only be called after ReturnResult(1).
1353   EXPECT_NONFATAL_FAILURE(a_.ReturnResult(2), "Unexpected mock function call");
1354 
1355   a_.ReturnResult(1);
1356   b_.DoB();
1357   b_.DoB();
1358   a_.ReturnResult(3);
1359 }
1360 
TEST_F(PartialOrderTest,CallsMustConformToSpecifiedDag3)1361 TEST_F(PartialOrderTest, CallsMustConformToSpecifiedDag3) {
1362   // May only be called last.
1363   EXPECT_NONFATAL_FAILURE(a_.ReturnResult(3), "Unexpected mock function call");
1364 
1365   a_.ReturnResult(1);
1366   b_.DoB();
1367   b_.DoB();
1368   a_.ReturnResult(3);
1369 }
1370 
TEST_F(PartialOrderTest,CallsMustConformToSpecifiedDag4)1371 TEST_F(PartialOrderTest, CallsMustConformToSpecifiedDag4) {
1372   a_.ReturnResult(1);
1373   b_.DoB();
1374   b_.DoB();
1375   a_.ReturnResult(3);
1376 
1377   // May only be called before ReturnResult(3).
1378   EXPECT_NONFATAL_FAILURE(a_.ReturnResult(2), "Unexpected mock function call");
1379 }
1380 
TEST(SequenceTest,Retirement)1381 TEST(SequenceTest, Retirement) {
1382   MockA a;
1383   Sequence s;
1384 
1385   EXPECT_CALL(a, DoA(1))
1386       .InSequence(s);
1387   EXPECT_CALL(a, DoA(_))
1388       .InSequence(s)
1389       .RetiresOnSaturation();
1390   EXPECT_CALL(a, DoA(1))
1391       .InSequence(s);
1392 
1393   a.DoA(1);
1394   a.DoA(2);
1395   a.DoA(1);
1396 }
1397 
1398 // Tests Expectation.
1399 
TEST(ExpectationTest,ConstrutorsWork)1400 TEST(ExpectationTest, ConstrutorsWork) {
1401   MockA a;
1402   Expectation e1;  // Default ctor.
1403 
1404   // Ctor from various forms of EXPECT_CALL.
1405   Expectation e2 = EXPECT_CALL(a, DoA(2));
1406   Expectation e3 = EXPECT_CALL(a, DoA(3)).With(_);
1407   {
1408     Sequence s;
1409     Expectation e4 = EXPECT_CALL(a, DoA(4)).Times(1);
1410     Expectation e5 = EXPECT_CALL(a, DoA(5)).InSequence(s);
1411   }
1412   Expectation e6 = EXPECT_CALL(a, DoA(6)).After(e2);
1413   Expectation e7 = EXPECT_CALL(a, DoA(7)).WillOnce(Return());
1414   Expectation e8 = EXPECT_CALL(a, DoA(8)).WillRepeatedly(Return());
1415   Expectation e9 = EXPECT_CALL(a, DoA(9)).RetiresOnSaturation();
1416 
1417   Expectation e10 = e2;  // Copy ctor.
1418 
1419   EXPECT_THAT(e1, Ne(e2));
1420   EXPECT_THAT(e2, Eq(e10));
1421 
1422   a.DoA(2);
1423   a.DoA(3);
1424   a.DoA(4);
1425   a.DoA(5);
1426   a.DoA(6);
1427   a.DoA(7);
1428   a.DoA(8);
1429   a.DoA(9);
1430 }
1431 
TEST(ExpectationTest,AssignmentWorks)1432 TEST(ExpectationTest, AssignmentWorks) {
1433   MockA a;
1434   Expectation e1;
1435   Expectation e2 = EXPECT_CALL(a, DoA(1));
1436 
1437   EXPECT_THAT(e1, Ne(e2));
1438 
1439   e1 = e2;
1440   EXPECT_THAT(e1, Eq(e2));
1441 
1442   a.DoA(1);
1443 }
1444 
1445 // Tests ExpectationSet.
1446 
TEST(ExpectationSetTest,MemberTypesAreCorrect)1447 TEST(ExpectationSetTest, MemberTypesAreCorrect) {
1448   ::testing::StaticAssertTypeEq<Expectation, ExpectationSet::value_type>();
1449 }
1450 
TEST(ExpectationSetTest,ConstructorsWork)1451 TEST(ExpectationSetTest, ConstructorsWork) {
1452   MockA a;
1453 
1454   Expectation e1;
1455   const Expectation e2;
1456   ExpectationSet es1;  // Default ctor.
1457   ExpectationSet es2 = EXPECT_CALL(a, DoA(1));  // Ctor from EXPECT_CALL.
1458   ExpectationSet es3 = e1;  // Ctor from Expectation.
1459   ExpectationSet es4(e1);   // Ctor from Expectation; alternative syntax.
1460   ExpectationSet es5 = e2;  // Ctor from const Expectation.
1461   ExpectationSet es6(e2);   // Ctor from const Expectation; alternative syntax.
1462   ExpectationSet es7 = es2;  // Copy ctor.
1463 
1464   EXPECT_EQ(0, es1.size());
1465   EXPECT_EQ(1, es2.size());
1466   EXPECT_EQ(1, es3.size());
1467   EXPECT_EQ(1, es4.size());
1468   EXPECT_EQ(1, es5.size());
1469   EXPECT_EQ(1, es6.size());
1470   EXPECT_EQ(1, es7.size());
1471 
1472   EXPECT_THAT(es3, Ne(es2));
1473   EXPECT_THAT(es4, Eq(es3));
1474   EXPECT_THAT(es5, Eq(es4));
1475   EXPECT_THAT(es6, Eq(es5));
1476   EXPECT_THAT(es7, Eq(es2));
1477   a.DoA(1);
1478 }
1479 
TEST(ExpectationSetTest,AssignmentWorks)1480 TEST(ExpectationSetTest, AssignmentWorks) {
1481   ExpectationSet es1;
1482   ExpectationSet es2 = Expectation();
1483 
1484   es1 = es2;
1485   EXPECT_EQ(1, es1.size());
1486   EXPECT_THAT(*(es1.begin()), Eq(Expectation()));
1487   EXPECT_THAT(es1, Eq(es2));
1488 }
1489 
TEST(ExpectationSetTest,InsertionWorks)1490 TEST(ExpectationSetTest, InsertionWorks) {
1491   ExpectationSet es1;
1492   Expectation e1;
1493   es1 += e1;
1494   EXPECT_EQ(1, es1.size());
1495   EXPECT_THAT(*(es1.begin()), Eq(e1));
1496 
1497   MockA a;
1498   Expectation e2 = EXPECT_CALL(a, DoA(1));
1499   es1 += e2;
1500   EXPECT_EQ(2, es1.size());
1501 
1502   ExpectationSet::const_iterator it1 = es1.begin();
1503   ExpectationSet::const_iterator it2 = it1;
1504   ++it2;
1505   EXPECT_TRUE(*it1 == e1 || *it2 == e1);  // e1 must be in the set.
1506   EXPECT_TRUE(*it1 == e2 || *it2 == e2);  // e2 must be in the set too.
1507   a.DoA(1);
1508 }
1509 
TEST(ExpectationSetTest,SizeWorks)1510 TEST(ExpectationSetTest, SizeWorks) {
1511   ExpectationSet es;
1512   EXPECT_EQ(0, es.size());
1513 
1514   es += Expectation();
1515   EXPECT_EQ(1, es.size());
1516 
1517   MockA a;
1518   es += EXPECT_CALL(a, DoA(1));
1519   EXPECT_EQ(2, es.size());
1520 
1521   a.DoA(1);
1522 }
1523 
TEST(ExpectationSetTest,IsEnumerable)1524 TEST(ExpectationSetTest, IsEnumerable) {
1525   ExpectationSet es;
1526   EXPECT_TRUE(es.begin() == es.end());
1527 
1528   es += Expectation();
1529   ExpectationSet::const_iterator it = es.begin();
1530   EXPECT_TRUE(it != es.end());
1531   EXPECT_THAT(*it, Eq(Expectation()));
1532   ++it;
1533   EXPECT_TRUE(it== es.end());
1534 }
1535 
1536 // Tests the .After() clause.
1537 
TEST(AfterTest,SucceedsWhenPartialOrderIsSatisfied)1538 TEST(AfterTest, SucceedsWhenPartialOrderIsSatisfied) {
1539   MockA a;
1540   ExpectationSet es;
1541   es += EXPECT_CALL(a, DoA(1));
1542   es += EXPECT_CALL(a, DoA(2));
1543   EXPECT_CALL(a, DoA(3))
1544       .After(es);
1545 
1546   a.DoA(1);
1547   a.DoA(2);
1548   a.DoA(3);
1549 }
1550 
TEST(AfterTest,SucceedsWhenTotalOrderIsSatisfied)1551 TEST(AfterTest, SucceedsWhenTotalOrderIsSatisfied) {
1552   MockA a;
1553   MockB b;
1554   // The following also verifies that const Expectation objects work
1555   // too.  Do not remove the const modifiers.
1556   const Expectation e1 = EXPECT_CALL(a, DoA(1));
1557   const Expectation e2 = EXPECT_CALL(b, DoB())
1558       .Times(2)
1559       .After(e1);
1560   EXPECT_CALL(a, DoA(2)).After(e2);
1561 
1562   a.DoA(1);
1563   b.DoB();
1564   b.DoB();
1565   a.DoA(2);
1566 }
1567 
1568 // Calls must be in strict order when specified so using .After().
TEST(AfterTest,CallsMustBeInStrictOrderWhenSpecifiedSo1)1569 TEST(AfterTest, CallsMustBeInStrictOrderWhenSpecifiedSo1) {
1570   MockA a;
1571   MockB b;
1572 
1573   // Define ordering:
1574   //   a.DoA(1) ==> b.DoB() ==> a.DoA(2)
1575   Expectation e1 = EXPECT_CALL(a, DoA(1));
1576   Expectation e2 = EXPECT_CALL(b, DoB())
1577       .After(e1);
1578   EXPECT_CALL(a, DoA(2))
1579       .After(e2);
1580 
1581   a.DoA(1);
1582 
1583   // May only be called after DoB().
1584   EXPECT_NONFATAL_FAILURE(a.DoA(2), "Unexpected mock function call");
1585 
1586   b.DoB();
1587   a.DoA(2);
1588 }
1589 
1590 // Calls must be in strict order when specified so using .After().
TEST(AfterTest,CallsMustBeInStrictOrderWhenSpecifiedSo2)1591 TEST(AfterTest, CallsMustBeInStrictOrderWhenSpecifiedSo2) {
1592   MockA a;
1593   MockB b;
1594 
1595   // Define ordering:
1596   //   a.DoA(1) ==> b.DoB() * 2 ==> a.DoA(2)
1597   Expectation e1 = EXPECT_CALL(a, DoA(1));
1598   Expectation e2 = EXPECT_CALL(b, DoB())
1599       .Times(2)
1600       .After(e1);
1601   EXPECT_CALL(a, DoA(2))
1602       .After(e2);
1603 
1604   a.DoA(1);
1605   b.DoB();
1606 
1607   // May only be called after the second DoB().
1608   EXPECT_NONFATAL_FAILURE(a.DoA(2), "Unexpected mock function call");
1609 
1610   b.DoB();
1611   a.DoA(2);
1612 }
1613 
1614 // Calls must satisfy the partial order when specified so.
TEST(AfterTest,CallsMustSatisfyPartialOrderWhenSpecifiedSo)1615 TEST(AfterTest, CallsMustSatisfyPartialOrderWhenSpecifiedSo) {
1616   MockA a;
1617   ON_CALL(a, ReturnResult(_))
1618       .WillByDefault(Return(Result()));
1619 
1620   // Define ordering:
1621   //   a.DoA(1) ==>
1622   //   a.DoA(2) ==> a.ReturnResult(3)
1623   Expectation e = EXPECT_CALL(a, DoA(1));
1624   const ExpectationSet es = EXPECT_CALL(a, DoA(2));
1625   EXPECT_CALL(a, ReturnResult(3))
1626       .After(e, es);
1627 
1628   // May only be called last.
1629   EXPECT_NONFATAL_FAILURE(a.ReturnResult(3), "Unexpected mock function call");
1630 
1631   a.DoA(2);
1632   a.DoA(1);
1633   a.ReturnResult(3);
1634 }
1635 
1636 // Calls must satisfy the partial order when specified so.
TEST(AfterTest,CallsMustSatisfyPartialOrderWhenSpecifiedSo2)1637 TEST(AfterTest, CallsMustSatisfyPartialOrderWhenSpecifiedSo2) {
1638   MockA a;
1639 
1640   // Define ordering:
1641   //   a.DoA(1) ==>
1642   //   a.DoA(2) ==> a.DoA(3)
1643   Expectation e = EXPECT_CALL(a, DoA(1));
1644   const ExpectationSet es = EXPECT_CALL(a, DoA(2));
1645   EXPECT_CALL(a, DoA(3))
1646       .After(e, es);
1647 
1648   a.DoA(2);
1649 
1650   // May only be called last.
1651   EXPECT_NONFATAL_FAILURE(a.DoA(3), "Unexpected mock function call");
1652 
1653   a.DoA(1);
1654   a.DoA(3);
1655 }
1656 
1657 // .After() can be combined with .InSequence().
TEST(AfterTest,CanBeUsedWithInSequence)1658 TEST(AfterTest, CanBeUsedWithInSequence) {
1659   MockA a;
1660   Sequence s;
1661   Expectation e = EXPECT_CALL(a, DoA(1));
1662   EXPECT_CALL(a, DoA(2)).InSequence(s);
1663   EXPECT_CALL(a, DoA(3))
1664       .InSequence(s)
1665       .After(e);
1666 
1667   a.DoA(1);
1668 
1669   // May only be after DoA(2).
1670   EXPECT_NONFATAL_FAILURE(a.DoA(3), "Unexpected mock function call");
1671 
1672   a.DoA(2);
1673   a.DoA(3);
1674 }
1675 
1676 // .After() can be called multiple times.
TEST(AfterTest,CanBeCalledManyTimes)1677 TEST(AfterTest, CanBeCalledManyTimes) {
1678   MockA a;
1679   Expectation e1 = EXPECT_CALL(a, DoA(1));
1680   Expectation e2 = EXPECT_CALL(a, DoA(2));
1681   Expectation e3 = EXPECT_CALL(a, DoA(3));
1682   EXPECT_CALL(a, DoA(4))
1683       .After(e1)
1684       .After(e2)
1685       .After(e3);
1686 
1687   a.DoA(3);
1688   a.DoA(1);
1689   a.DoA(2);
1690   a.DoA(4);
1691 }
1692 
1693 // .After() accepts up to 5 arguments.
TEST(AfterTest,AcceptsUpToFiveArguments)1694 TEST(AfterTest, AcceptsUpToFiveArguments) {
1695   MockA a;
1696   Expectation e1 = EXPECT_CALL(a, DoA(1));
1697   Expectation e2 = EXPECT_CALL(a, DoA(2));
1698   Expectation e3 = EXPECT_CALL(a, DoA(3));
1699   ExpectationSet es1 = EXPECT_CALL(a, DoA(4));
1700   ExpectationSet es2 = EXPECT_CALL(a, DoA(5));
1701   EXPECT_CALL(a, DoA(6))
1702       .After(e1, e2, e3, es1, es2);
1703 
1704   a.DoA(5);
1705   a.DoA(2);
1706   a.DoA(4);
1707   a.DoA(1);
1708   a.DoA(3);
1709   a.DoA(6);
1710 }
1711 
1712 // .After() allows input to contain duplicated Expectations.
TEST(AfterTest,AcceptsDuplicatedInput)1713 TEST(AfterTest, AcceptsDuplicatedInput) {
1714   MockA a;
1715   ON_CALL(a, ReturnResult(_))
1716       .WillByDefault(Return(Result()));
1717 
1718   // Define ordering:
1719   //   DoA(1) ==>
1720   //   DoA(2) ==> ReturnResult(3)
1721   Expectation e1 = EXPECT_CALL(a, DoA(1));
1722   Expectation e2 = EXPECT_CALL(a, DoA(2));
1723   ExpectationSet es;
1724   es += e1;
1725   es += e2;
1726   EXPECT_CALL(a, ReturnResult(3))
1727       .After(e1, e2, es, e1);
1728 
1729   a.DoA(1);
1730 
1731   // May only be after DoA(2).
1732   EXPECT_NONFATAL_FAILURE(a.ReturnResult(3), "Unexpected mock function call");
1733 
1734   a.DoA(2);
1735   a.ReturnResult(3);
1736 }
1737 
1738 // An Expectation added to an ExpectationSet after it has been used in
1739 // an .After() has no effect.
TEST(AfterTest,ChangesToExpectationSetHaveNoEffectAfterwards)1740 TEST(AfterTest, ChangesToExpectationSetHaveNoEffectAfterwards) {
1741   MockA a;
1742   ExpectationSet es1 = EXPECT_CALL(a, DoA(1));
1743   Expectation e2 = EXPECT_CALL(a, DoA(2));
1744   EXPECT_CALL(a, DoA(3))
1745       .After(es1);
1746   es1 += e2;
1747 
1748   a.DoA(1);
1749   a.DoA(3);
1750   a.DoA(2);
1751 }
1752 
1753 // Tests that Google Mock correctly handles calls to mock functions
1754 // after a mock object owning one of their pre-requisites has died.
1755 
1756 // Tests that calls that satisfy the original spec are successful.
TEST(DeletingMockEarlyTest,Success1)1757 TEST(DeletingMockEarlyTest, Success1) {
1758   MockB* const b1 = new MockB;
1759   MockA* const a = new MockA;
1760   MockB* const b2 = new MockB;
1761 
1762   {
1763     InSequence dummy;
1764     EXPECT_CALL(*b1, DoB(_))
1765         .WillOnce(Return(1));
1766     EXPECT_CALL(*a, Binary(_, _))
1767         .Times(AnyNumber())
1768         .WillRepeatedly(Return(true));
1769     EXPECT_CALL(*b2, DoB(_))
1770         .Times(AnyNumber())
1771         .WillRepeatedly(Return(2));
1772   }
1773 
1774   EXPECT_EQ(1, b1->DoB(1));
1775   delete b1;
1776   // a's pre-requisite has died.
1777   EXPECT_TRUE(a->Binary(0, 1));
1778   delete b2;
1779   // a's successor has died.
1780   EXPECT_TRUE(a->Binary(1, 2));
1781   delete a;
1782 }
1783 
1784 // Tests that calls that satisfy the original spec are successful.
TEST(DeletingMockEarlyTest,Success2)1785 TEST(DeletingMockEarlyTest, Success2) {
1786   MockB* const b1 = new MockB;
1787   MockA* const a = new MockA;
1788   MockB* const b2 = new MockB;
1789 
1790   {
1791     InSequence dummy;
1792     EXPECT_CALL(*b1, DoB(_))
1793         .WillOnce(Return(1));
1794     EXPECT_CALL(*a, Binary(_, _))
1795         .Times(AnyNumber());
1796     EXPECT_CALL(*b2, DoB(_))
1797         .Times(AnyNumber())
1798         .WillRepeatedly(Return(2));
1799   }
1800 
1801   delete a;  // a is trivially satisfied.
1802   EXPECT_EQ(1, b1->DoB(1));
1803   EXPECT_EQ(2, b2->DoB(2));
1804   delete b1;
1805   delete b2;
1806 }
1807 
1808 // Tests that it's OK to delete a mock object itself in its action.
1809 
1810 // Suppresses warning on unreferenced formal parameter in MSVC with
1811 // -W4.
1812 #ifdef _MSC_VER
1813 # pragma warning(push)
1814 # pragma warning(disable:4100)
1815 #endif
1816 
ACTION_P(Delete,ptr)1817 ACTION_P(Delete, ptr) { delete ptr; }
1818 
1819 #ifdef _MSC_VER
1820 # pragma warning(pop)
1821 #endif
1822 
TEST(DeletingMockEarlyTest,CanDeleteSelfInActionReturningVoid)1823 TEST(DeletingMockEarlyTest, CanDeleteSelfInActionReturningVoid) {
1824   MockA* const a = new MockA;
1825   EXPECT_CALL(*a, DoA(_)).WillOnce(Delete(a));
1826   a->DoA(42);  // This will cause a to be deleted.
1827 }
1828 
TEST(DeletingMockEarlyTest,CanDeleteSelfInActionReturningValue)1829 TEST(DeletingMockEarlyTest, CanDeleteSelfInActionReturningValue) {
1830   MockA* const a = new MockA;
1831   EXPECT_CALL(*a, ReturnResult(_))
1832       .WillOnce(DoAll(Delete(a), Return(Result())));
1833   a->ReturnResult(42);  // This will cause a to be deleted.
1834 }
1835 
1836 // Tests that calls that violate the original spec yield failures.
TEST(DeletingMockEarlyTest,Failure1)1837 TEST(DeletingMockEarlyTest, Failure1) {
1838   MockB* const b1 = new MockB;
1839   MockA* const a = new MockA;
1840   MockB* const b2 = new MockB;
1841 
1842   {
1843     InSequence dummy;
1844     EXPECT_CALL(*b1, DoB(_))
1845         .WillOnce(Return(1));
1846     EXPECT_CALL(*a, Binary(_, _))
1847         .Times(AnyNumber());
1848     EXPECT_CALL(*b2, DoB(_))
1849         .Times(AnyNumber())
1850         .WillRepeatedly(Return(2));
1851   }
1852 
1853   delete a;  // a is trivially satisfied.
1854   EXPECT_NONFATAL_FAILURE({
1855     b2->DoB(2);
1856   }, "Unexpected mock function call");
1857   EXPECT_EQ(1, b1->DoB(1));
1858   delete b1;
1859   delete b2;
1860 }
1861 
1862 // Tests that calls that violate the original spec yield failures.
TEST(DeletingMockEarlyTest,Failure2)1863 TEST(DeletingMockEarlyTest, Failure2) {
1864   MockB* const b1 = new MockB;
1865   MockA* const a = new MockA;
1866   MockB* const b2 = new MockB;
1867 
1868   {
1869     InSequence dummy;
1870     EXPECT_CALL(*b1, DoB(_));
1871     EXPECT_CALL(*a, Binary(_, _))
1872         .Times(AnyNumber());
1873     EXPECT_CALL(*b2, DoB(_))
1874         .Times(AnyNumber());
1875   }
1876 
1877   EXPECT_NONFATAL_FAILURE(delete b1,
1878                           "Actual: never called");
1879   EXPECT_NONFATAL_FAILURE(a->Binary(0, 1),
1880                           "Unexpected mock function call");
1881   EXPECT_NONFATAL_FAILURE(b2->DoB(1),
1882                           "Unexpected mock function call");
1883   delete a;
1884   delete b2;
1885 }
1886 
1887 class EvenNumberCardinality : public CardinalityInterface {
1888  public:
1889   // Returns true iff call_count calls will satisfy this cardinality.
IsSatisfiedByCallCount(int call_count) const1890   virtual bool IsSatisfiedByCallCount(int call_count) const {
1891     return call_count % 2 == 0;
1892   }
1893 
1894   // Returns true iff call_count calls will saturate this cardinality.
IsSaturatedByCallCount(int) const1895   virtual bool IsSaturatedByCallCount(int /* call_count */) const {
1896     return false;
1897   }
1898 
1899   // Describes self to an ostream.
DescribeTo(::std::ostream * os) const1900   virtual void DescribeTo(::std::ostream* os) const {
1901     *os << "called even number of times";
1902   }
1903 };
1904 
EvenNumber()1905 Cardinality EvenNumber() {
1906   return Cardinality(new EvenNumberCardinality);
1907 }
1908 
TEST(ExpectationBaseTest,AllPrerequisitesAreSatisfiedWorksForNonMonotonicCardinality)1909 TEST(ExpectationBaseTest,
1910      AllPrerequisitesAreSatisfiedWorksForNonMonotonicCardinality) {
1911   MockA* a = new MockA;
1912   Sequence s;
1913 
1914   EXPECT_CALL(*a, DoA(1))
1915       .Times(EvenNumber())
1916       .InSequence(s);
1917   EXPECT_CALL(*a, DoA(2))
1918       .Times(AnyNumber())
1919       .InSequence(s);
1920   EXPECT_CALL(*a, DoA(3))
1921       .Times(AnyNumber());
1922 
1923   a->DoA(3);
1924   a->DoA(1);
1925   EXPECT_NONFATAL_FAILURE(a->DoA(2), "Unexpected mock function call");
1926   EXPECT_NONFATAL_FAILURE(delete a, "to be called even number of times");
1927 }
1928 
1929 // The following tests verify the message generated when a mock
1930 // function is called.
1931 
1932 struct Printable {
1933 };
1934 
operator <<(::std::ostream & os,const Printable &)1935 inline void operator<<(::std::ostream& os, const Printable&) {
1936   os << "Printable";
1937 }
1938 
1939 struct Unprintable {
Unprintable__anonda9b82080111::Unprintable1940   Unprintable() : value(0) {}
1941   int value;
1942 };
1943 
1944 class MockC {
1945  public:
MockC()1946   MockC() {}
1947 
1948   MOCK_METHOD6(VoidMethod, void(bool cond, int n, string s, void* p,
1949                                 const Printable& x, Unprintable y));
1950   MOCK_METHOD0(NonVoidMethod, int());  // NOLINT
1951 
1952  private:
1953   GTEST_DISALLOW_COPY_AND_ASSIGN_(MockC);
1954 };
1955 
1956 class VerboseFlagPreservingFixture : public testing::Test {
1957  protected:
VerboseFlagPreservingFixture()1958   VerboseFlagPreservingFixture()
1959       : saved_verbose_flag_(GMOCK_FLAG(verbose)) {}
1960 
~VerboseFlagPreservingFixture()1961   ~VerboseFlagPreservingFixture() { GMOCK_FLAG(verbose) = saved_verbose_flag_; }
1962 
1963  private:
1964   const string saved_verbose_flag_;
1965 
1966   GTEST_DISALLOW_COPY_AND_ASSIGN_(VerboseFlagPreservingFixture);
1967 };
1968 
1969 #if GTEST_HAS_STREAM_REDIRECTION
1970 
1971 // Tests that an uninteresting mock function call on a naggy mock
1972 // generates a warning containing the stack trace.
TEST(FunctionCallMessageTest,UninterestingCallOnNaggyMockGeneratesFyiWithStackTrace)1973 TEST(FunctionCallMessageTest,
1974      UninterestingCallOnNaggyMockGeneratesFyiWithStackTrace) {
1975   NaggyMock<MockC> c;
1976   CaptureStdout();
1977   c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable());
1978   const std::string output = GetCapturedStdout();
1979   EXPECT_PRED_FORMAT2(IsSubstring, "GMOCK WARNING", output);
1980   EXPECT_PRED_FORMAT2(IsSubstring, "Stack trace:", output);
1981 
1982 # ifndef NDEBUG
1983 
1984   // We check the stack trace content in dbg-mode only, as opt-mode
1985   // may inline the call we are interested in seeing.
1986 
1987   // Verifies that a void mock function's name appears in the stack
1988   // trace.
1989   EXPECT_PRED_FORMAT2(IsSubstring, "VoidMethod(", output);
1990 
1991   // Verifies that a non-void mock function's name appears in the
1992   // stack trace.
1993   CaptureStdout();
1994   c.NonVoidMethod();
1995   const std::string output2 = GetCapturedStdout();
1996   EXPECT_PRED_FORMAT2(IsSubstring, "NonVoidMethod(", output2);
1997 
1998 # endif  // NDEBUG
1999 }
2000 
2001 // Tests that an uninteresting mock function call on a naggy mock
2002 // causes the function arguments and return value to be printed.
TEST(FunctionCallMessageTest,UninterestingCallOnNaggyMockPrintsArgumentsAndReturnValue)2003 TEST(FunctionCallMessageTest,
2004      UninterestingCallOnNaggyMockPrintsArgumentsAndReturnValue) {
2005   // A non-void mock function.
2006   NaggyMock<MockB> b;
2007   CaptureStdout();
2008   b.DoB();
2009   const std::string output1 = GetCapturedStdout();
2010   EXPECT_PRED_FORMAT2(
2011       IsSubstring,
2012       "Uninteresting mock function call - returning default value.\n"
2013       "    Function call: DoB()\n"
2014       "          Returns: 0\n", output1.c_str());
2015   // Makes sure the return value is printed.
2016 
2017   // A void mock function.
2018   NaggyMock<MockC> c;
2019   CaptureStdout();
2020   c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable());
2021   const std::string output2 = GetCapturedStdout();
2022   EXPECT_THAT(output2.c_str(),
2023               ContainsRegex(
2024                   "Uninteresting mock function call - returning directly\\.\n"
2025                   "    Function call: VoidMethod"
2026                   "\\(false, 5, \"Hi\", NULL, @.+ "
2027                   "Printable, 4-byte object <00-00 00-00>\\)"));
2028   // A void function has no return value to print.
2029 }
2030 
2031 // Tests how the --gmock_verbose flag affects Google Mock's output.
2032 
2033 class GMockVerboseFlagTest : public VerboseFlagPreservingFixture {
2034  public:
2035   // Verifies that the given Google Mock output is correct.  (When
2036   // should_print is true, the output should match the given regex and
2037   // contain the given function name in the stack trace.  When it's
2038   // false, the output should be empty.)
VerifyOutput(const std::string & output,bool should_print,const string & expected_substring,const string & function_name)2039   void VerifyOutput(const std::string& output, bool should_print,
2040                     const string& expected_substring,
2041                     const string& function_name) {
2042     if (should_print) {
2043       EXPECT_THAT(output.c_str(), HasSubstr(expected_substring));
2044 # ifndef NDEBUG
2045       // We check the stack trace content in dbg-mode only, as opt-mode
2046       // may inline the call we are interested in seeing.
2047       EXPECT_THAT(output.c_str(), HasSubstr(function_name));
2048 # else
2049       // Suppresses 'unused function parameter' warnings.
2050       static_cast<void>(function_name);
2051 # endif  // NDEBUG
2052     } else {
2053       EXPECT_STREQ("", output.c_str());
2054     }
2055   }
2056 
2057   // Tests how the flag affects expected calls.
TestExpectedCall(bool should_print)2058   void TestExpectedCall(bool should_print) {
2059     MockA a;
2060     EXPECT_CALL(a, DoA(5));
2061     EXPECT_CALL(a, Binary(_, 1))
2062         .WillOnce(Return(true));
2063 
2064     // A void-returning function.
2065     CaptureStdout();
2066     a.DoA(5);
2067     VerifyOutput(
2068         GetCapturedStdout(),
2069         should_print,
2070         "Mock function call matches EXPECT_CALL(a, DoA(5))...\n"
2071         "    Function call: DoA(5)\n"
2072         "Stack trace:\n",
2073         "DoA");
2074 
2075     // A non-void-returning function.
2076     CaptureStdout();
2077     a.Binary(2, 1);
2078     VerifyOutput(
2079         GetCapturedStdout(),
2080         should_print,
2081         "Mock function call matches EXPECT_CALL(a, Binary(_, 1))...\n"
2082         "    Function call: Binary(2, 1)\n"
2083         "          Returns: true\n"
2084         "Stack trace:\n",
2085         "Binary");
2086   }
2087 
2088   // Tests how the flag affects uninteresting calls on a naggy mock.
TestUninterestingCallOnNaggyMock(bool should_print)2089   void TestUninterestingCallOnNaggyMock(bool should_print) {
2090     NaggyMock<MockA> a;
2091 
2092     // A void-returning function.
2093     CaptureStdout();
2094     a.DoA(5);
2095     VerifyOutput(
2096         GetCapturedStdout(),
2097         should_print,
2098         "\nGMOCK WARNING:\n"
2099         "Uninteresting mock function call - returning directly.\n"
2100         "    Function call: DoA(5)\n"
2101         "Stack trace:\n",
2102         "DoA");
2103 
2104     // A non-void-returning function.
2105     CaptureStdout();
2106     a.Binary(2, 1);
2107     VerifyOutput(
2108         GetCapturedStdout(),
2109         should_print,
2110         "\nGMOCK WARNING:\n"
2111         "Uninteresting mock function call - returning default value.\n"
2112         "    Function call: Binary(2, 1)\n"
2113         "          Returns: false\n"
2114         "Stack trace:\n",
2115         "Binary");
2116   }
2117 };
2118 
2119 // Tests that --gmock_verbose=info causes both expected and
2120 // uninteresting calls to be reported.
TEST_F(GMockVerboseFlagTest,Info)2121 TEST_F(GMockVerboseFlagTest, Info) {
2122   GMOCK_FLAG(verbose) = kInfoVerbosity;
2123   TestExpectedCall(true);
2124   TestUninterestingCallOnNaggyMock(true);
2125 }
2126 
2127 // Tests that --gmock_verbose=warning causes uninteresting calls to be
2128 // reported.
TEST_F(GMockVerboseFlagTest,Warning)2129 TEST_F(GMockVerboseFlagTest, Warning) {
2130   GMOCK_FLAG(verbose) = kWarningVerbosity;
2131   TestExpectedCall(false);
2132   TestUninterestingCallOnNaggyMock(true);
2133 }
2134 
2135 // Tests that --gmock_verbose=warning causes neither expected nor
2136 // uninteresting calls to be reported.
TEST_F(GMockVerboseFlagTest,Error)2137 TEST_F(GMockVerboseFlagTest, Error) {
2138   GMOCK_FLAG(verbose) = kErrorVerbosity;
2139   TestExpectedCall(false);
2140   TestUninterestingCallOnNaggyMock(false);
2141 }
2142 
2143 // Tests that --gmock_verbose=SOME_INVALID_VALUE has the same effect
2144 // as --gmock_verbose=warning.
TEST_F(GMockVerboseFlagTest,InvalidFlagIsTreatedAsWarning)2145 TEST_F(GMockVerboseFlagTest, InvalidFlagIsTreatedAsWarning) {
2146   GMOCK_FLAG(verbose) = "invalid";  // Treated as "warning".
2147   TestExpectedCall(false);
2148   TestUninterestingCallOnNaggyMock(true);
2149 }
2150 
2151 #endif  // GTEST_HAS_STREAM_REDIRECTION
2152 
2153 // A helper class that generates a failure when printed.  We use it to
2154 // ensure that Google Mock doesn't print a value (even to an internal
2155 // buffer) when it is not supposed to do so.
2156 class PrintMeNot {};
2157 
PrintTo(PrintMeNot,::std::ostream *)2158 void PrintTo(PrintMeNot /* dummy */, ::std::ostream* /* os */) {
2159   ADD_FAILURE() << "Google Mock is printing a value that shouldn't be "
2160                 << "printed even to an internal buffer.";
2161 }
2162 
2163 class LogTestHelper {
2164  public:
LogTestHelper()2165   LogTestHelper() {}
2166 
2167   MOCK_METHOD1(Foo, PrintMeNot(PrintMeNot));
2168 
2169  private:
2170   GTEST_DISALLOW_COPY_AND_ASSIGN_(LogTestHelper);
2171 };
2172 
2173 class GMockLogTest : public VerboseFlagPreservingFixture {
2174  protected:
2175   LogTestHelper helper_;
2176 };
2177 
TEST_F(GMockLogTest,DoesNotPrintGoodCallInternallyIfVerbosityIsWarning)2178 TEST_F(GMockLogTest, DoesNotPrintGoodCallInternallyIfVerbosityIsWarning) {
2179   GMOCK_FLAG(verbose) = kWarningVerbosity;
2180   EXPECT_CALL(helper_, Foo(_))
2181       .WillOnce(Return(PrintMeNot()));
2182   helper_.Foo(PrintMeNot());  // This is an expected call.
2183 }
2184 
TEST_F(GMockLogTest,DoesNotPrintGoodCallInternallyIfVerbosityIsError)2185 TEST_F(GMockLogTest, DoesNotPrintGoodCallInternallyIfVerbosityIsError) {
2186   GMOCK_FLAG(verbose) = kErrorVerbosity;
2187   EXPECT_CALL(helper_, Foo(_))
2188       .WillOnce(Return(PrintMeNot()));
2189   helper_.Foo(PrintMeNot());  // This is an expected call.
2190 }
2191 
TEST_F(GMockLogTest,DoesNotPrintWarningInternallyIfVerbosityIsError)2192 TEST_F(GMockLogTest, DoesNotPrintWarningInternallyIfVerbosityIsError) {
2193   GMOCK_FLAG(verbose) = kErrorVerbosity;
2194   ON_CALL(helper_, Foo(_))
2195       .WillByDefault(Return(PrintMeNot()));
2196   helper_.Foo(PrintMeNot());  // This should generate a warning.
2197 }
2198 
2199 // Tests Mock::AllowLeak().
2200 
TEST(AllowLeakTest,AllowsLeakingUnusedMockObject)2201 TEST(AllowLeakTest, AllowsLeakingUnusedMockObject) {
2202   MockA* a = new MockA;
2203   Mock::AllowLeak(a);
2204 }
2205 
TEST(AllowLeakTest,CanBeCalledBeforeOnCall)2206 TEST(AllowLeakTest, CanBeCalledBeforeOnCall) {
2207   MockA* a = new MockA;
2208   Mock::AllowLeak(a);
2209   ON_CALL(*a, DoA(_)).WillByDefault(Return());
2210   a->DoA(0);
2211 }
2212 
TEST(AllowLeakTest,CanBeCalledAfterOnCall)2213 TEST(AllowLeakTest, CanBeCalledAfterOnCall) {
2214   MockA* a = new MockA;
2215   ON_CALL(*a, DoA(_)).WillByDefault(Return());
2216   Mock::AllowLeak(a);
2217 }
2218 
TEST(AllowLeakTest,CanBeCalledBeforeExpectCall)2219 TEST(AllowLeakTest, CanBeCalledBeforeExpectCall) {
2220   MockA* a = new MockA;
2221   Mock::AllowLeak(a);
2222   EXPECT_CALL(*a, DoA(_));
2223   a->DoA(0);
2224 }
2225 
TEST(AllowLeakTest,CanBeCalledAfterExpectCall)2226 TEST(AllowLeakTest, CanBeCalledAfterExpectCall) {
2227   MockA* a = new MockA;
2228   EXPECT_CALL(*a, DoA(_)).Times(AnyNumber());
2229   Mock::AllowLeak(a);
2230 }
2231 
TEST(AllowLeakTest,WorksWhenBothOnCallAndExpectCallArePresent)2232 TEST(AllowLeakTest, WorksWhenBothOnCallAndExpectCallArePresent) {
2233   MockA* a = new MockA;
2234   ON_CALL(*a, DoA(_)).WillByDefault(Return());
2235   EXPECT_CALL(*a, DoA(_)).Times(AnyNumber());
2236   Mock::AllowLeak(a);
2237 }
2238 
2239 // Tests that we can verify and clear a mock object's expectations
2240 // when none of its methods has expectations.
TEST(VerifyAndClearExpectationsTest,NoMethodHasExpectations)2241 TEST(VerifyAndClearExpectationsTest, NoMethodHasExpectations) {
2242   MockB b;
2243   ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b));
2244 
2245   // There should be no expectations on the methods now, so we can
2246   // freely call them.
2247   EXPECT_EQ(0, b.DoB());
2248   EXPECT_EQ(0, b.DoB(1));
2249 }
2250 
2251 // Tests that we can verify and clear a mock object's expectations
2252 // when some, but not all, of its methods have expectations *and* the
2253 // verification succeeds.
TEST(VerifyAndClearExpectationsTest,SomeMethodsHaveExpectationsAndSucceed)2254 TEST(VerifyAndClearExpectationsTest, SomeMethodsHaveExpectationsAndSucceed) {
2255   MockB b;
2256   EXPECT_CALL(b, DoB())
2257       .WillOnce(Return(1));
2258   b.DoB();
2259   ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b));
2260 
2261   // There should be no expectations on the methods now, so we can
2262   // freely call them.
2263   EXPECT_EQ(0, b.DoB());
2264   EXPECT_EQ(0, b.DoB(1));
2265 }
2266 
2267 // Tests that we can verify and clear a mock object's expectations
2268 // when some, but not all, of its methods have expectations *and* the
2269 // verification fails.
TEST(VerifyAndClearExpectationsTest,SomeMethodsHaveExpectationsAndFail)2270 TEST(VerifyAndClearExpectationsTest, SomeMethodsHaveExpectationsAndFail) {
2271   MockB b;
2272   EXPECT_CALL(b, DoB())
2273       .WillOnce(Return(1));
2274   bool result = true;
2275   EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClearExpectations(&b),
2276                           "Actual: never called");
2277   ASSERT_FALSE(result);
2278 
2279   // There should be no expectations on the methods now, so we can
2280   // freely call them.
2281   EXPECT_EQ(0, b.DoB());
2282   EXPECT_EQ(0, b.DoB(1));
2283 }
2284 
2285 // Tests that we can verify and clear a mock object's expectations
2286 // when all of its methods have expectations.
TEST(VerifyAndClearExpectationsTest,AllMethodsHaveExpectations)2287 TEST(VerifyAndClearExpectationsTest, AllMethodsHaveExpectations) {
2288   MockB b;
2289   EXPECT_CALL(b, DoB())
2290       .WillOnce(Return(1));
2291   EXPECT_CALL(b, DoB(_))
2292       .WillOnce(Return(2));
2293   b.DoB();
2294   b.DoB(1);
2295   ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b));
2296 
2297   // There should be no expectations on the methods now, so we can
2298   // freely call them.
2299   EXPECT_EQ(0, b.DoB());
2300   EXPECT_EQ(0, b.DoB(1));
2301 }
2302 
2303 // Tests that we can verify and clear a mock object's expectations
2304 // when a method has more than one expectation.
TEST(VerifyAndClearExpectationsTest,AMethodHasManyExpectations)2305 TEST(VerifyAndClearExpectationsTest, AMethodHasManyExpectations) {
2306   MockB b;
2307   EXPECT_CALL(b, DoB(0))
2308       .WillOnce(Return(1));
2309   EXPECT_CALL(b, DoB(_))
2310       .WillOnce(Return(2));
2311   b.DoB(1);
2312   bool result = true;
2313   EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClearExpectations(&b),
2314                           "Actual: never called");
2315   ASSERT_FALSE(result);
2316 
2317   // There should be no expectations on the methods now, so we can
2318   // freely call them.
2319   EXPECT_EQ(0, b.DoB());
2320   EXPECT_EQ(0, b.DoB(1));
2321 }
2322 
2323 // Tests that we can call VerifyAndClearExpectations() on the same
2324 // mock object multiple times.
TEST(VerifyAndClearExpectationsTest,CanCallManyTimes)2325 TEST(VerifyAndClearExpectationsTest, CanCallManyTimes) {
2326   MockB b;
2327   EXPECT_CALL(b, DoB());
2328   b.DoB();
2329   Mock::VerifyAndClearExpectations(&b);
2330 
2331   EXPECT_CALL(b, DoB(_))
2332       .WillOnce(Return(1));
2333   b.DoB(1);
2334   Mock::VerifyAndClearExpectations(&b);
2335   Mock::VerifyAndClearExpectations(&b);
2336 
2337   // There should be no expectations on the methods now, so we can
2338   // freely call them.
2339   EXPECT_EQ(0, b.DoB());
2340   EXPECT_EQ(0, b.DoB(1));
2341 }
2342 
2343 // Tests that we can clear a mock object's default actions when none
2344 // of its methods has default actions.
TEST(VerifyAndClearTest,NoMethodHasDefaultActions)2345 TEST(VerifyAndClearTest, NoMethodHasDefaultActions) {
2346   MockB b;
2347   // If this crashes or generates a failure, the test will catch it.
2348   Mock::VerifyAndClear(&b);
2349   EXPECT_EQ(0, b.DoB());
2350 }
2351 
2352 // Tests that we can clear a mock object's default actions when some,
2353 // but not all of its methods have default actions.
TEST(VerifyAndClearTest,SomeMethodsHaveDefaultActions)2354 TEST(VerifyAndClearTest, SomeMethodsHaveDefaultActions) {
2355   MockB b;
2356   ON_CALL(b, DoB())
2357       .WillByDefault(Return(1));
2358 
2359   Mock::VerifyAndClear(&b);
2360 
2361   // Verifies that the default action of int DoB() was removed.
2362   EXPECT_EQ(0, b.DoB());
2363 }
2364 
2365 // Tests that we can clear a mock object's default actions when all of
2366 // its methods have default actions.
TEST(VerifyAndClearTest,AllMethodsHaveDefaultActions)2367 TEST(VerifyAndClearTest, AllMethodsHaveDefaultActions) {
2368   MockB b;
2369   ON_CALL(b, DoB())
2370       .WillByDefault(Return(1));
2371   ON_CALL(b, DoB(_))
2372       .WillByDefault(Return(2));
2373 
2374   Mock::VerifyAndClear(&b);
2375 
2376   // Verifies that the default action of int DoB() was removed.
2377   EXPECT_EQ(0, b.DoB());
2378 
2379   // Verifies that the default action of int DoB(int) was removed.
2380   EXPECT_EQ(0, b.DoB(0));
2381 }
2382 
2383 // Tests that we can clear a mock object's default actions when a
2384 // method has more than one ON_CALL() set on it.
TEST(VerifyAndClearTest,AMethodHasManyDefaultActions)2385 TEST(VerifyAndClearTest, AMethodHasManyDefaultActions) {
2386   MockB b;
2387   ON_CALL(b, DoB(0))
2388       .WillByDefault(Return(1));
2389   ON_CALL(b, DoB(_))
2390       .WillByDefault(Return(2));
2391 
2392   Mock::VerifyAndClear(&b);
2393 
2394   // Verifies that the default actions (there are two) of int DoB(int)
2395   // were removed.
2396   EXPECT_EQ(0, b.DoB(0));
2397   EXPECT_EQ(0, b.DoB(1));
2398 }
2399 
2400 // Tests that we can call VerifyAndClear() on a mock object multiple
2401 // times.
TEST(VerifyAndClearTest,CanCallManyTimes)2402 TEST(VerifyAndClearTest, CanCallManyTimes) {
2403   MockB b;
2404   ON_CALL(b, DoB())
2405       .WillByDefault(Return(1));
2406   Mock::VerifyAndClear(&b);
2407   Mock::VerifyAndClear(&b);
2408 
2409   ON_CALL(b, DoB(_))
2410       .WillByDefault(Return(1));
2411   Mock::VerifyAndClear(&b);
2412 
2413   EXPECT_EQ(0, b.DoB());
2414   EXPECT_EQ(0, b.DoB(1));
2415 }
2416 
2417 // Tests that VerifyAndClear() works when the verification succeeds.
TEST(VerifyAndClearTest,Success)2418 TEST(VerifyAndClearTest, Success) {
2419   MockB b;
2420   ON_CALL(b, DoB())
2421       .WillByDefault(Return(1));
2422   EXPECT_CALL(b, DoB(1))
2423       .WillOnce(Return(2));
2424 
2425   b.DoB();
2426   b.DoB(1);
2427   ASSERT_TRUE(Mock::VerifyAndClear(&b));
2428 
2429   // There should be no expectations on the methods now, so we can
2430   // freely call them.
2431   EXPECT_EQ(0, b.DoB());
2432   EXPECT_EQ(0, b.DoB(1));
2433 }
2434 
2435 // Tests that VerifyAndClear() works when the verification fails.
TEST(VerifyAndClearTest,Failure)2436 TEST(VerifyAndClearTest, Failure) {
2437   MockB b;
2438   ON_CALL(b, DoB(_))
2439       .WillByDefault(Return(1));
2440   EXPECT_CALL(b, DoB())
2441       .WillOnce(Return(2));
2442 
2443   b.DoB(1);
2444   bool result = true;
2445   EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClear(&b),
2446                           "Actual: never called");
2447   ASSERT_FALSE(result);
2448 
2449   // There should be no expectations on the methods now, so we can
2450   // freely call them.
2451   EXPECT_EQ(0, b.DoB());
2452   EXPECT_EQ(0, b.DoB(1));
2453 }
2454 
2455 // Tests that VerifyAndClear() works when the default actions and
2456 // expectations are set on a const mock object.
TEST(VerifyAndClearTest,Const)2457 TEST(VerifyAndClearTest, Const) {
2458   MockB b;
2459   ON_CALL(Const(b), DoB())
2460       .WillByDefault(Return(1));
2461 
2462   EXPECT_CALL(Const(b), DoB())
2463       .WillOnce(DoDefault())
2464       .WillOnce(Return(2));
2465 
2466   b.DoB();
2467   b.DoB();
2468   ASSERT_TRUE(Mock::VerifyAndClear(&b));
2469 
2470   // There should be no expectations on the methods now, so we can
2471   // freely call them.
2472   EXPECT_EQ(0, b.DoB());
2473   EXPECT_EQ(0, b.DoB(1));
2474 }
2475 
2476 // Tests that we can set default actions and expectations on a mock
2477 // object after VerifyAndClear() has been called on it.
TEST(VerifyAndClearTest,CanSetDefaultActionsAndExpectationsAfterwards)2478 TEST(VerifyAndClearTest, CanSetDefaultActionsAndExpectationsAfterwards) {
2479   MockB b;
2480   ON_CALL(b, DoB())
2481       .WillByDefault(Return(1));
2482   EXPECT_CALL(b, DoB(_))
2483       .WillOnce(Return(2));
2484   b.DoB(1);
2485 
2486   Mock::VerifyAndClear(&b);
2487 
2488   EXPECT_CALL(b, DoB())
2489       .WillOnce(Return(3));
2490   ON_CALL(b, DoB(_))
2491       .WillByDefault(Return(4));
2492 
2493   EXPECT_EQ(3, b.DoB());
2494   EXPECT_EQ(4, b.DoB(1));
2495 }
2496 
2497 // Tests that calling VerifyAndClear() on one mock object does not
2498 // affect other mock objects (either of the same type or not).
TEST(VerifyAndClearTest,DoesNotAffectOtherMockObjects)2499 TEST(VerifyAndClearTest, DoesNotAffectOtherMockObjects) {
2500   MockA a;
2501   MockB b1;
2502   MockB b2;
2503 
2504   ON_CALL(a, Binary(_, _))
2505       .WillByDefault(Return(true));
2506   EXPECT_CALL(a, Binary(_, _))
2507       .WillOnce(DoDefault())
2508       .WillOnce(Return(false));
2509 
2510   ON_CALL(b1, DoB())
2511       .WillByDefault(Return(1));
2512   EXPECT_CALL(b1, DoB(_))
2513       .WillOnce(Return(2));
2514 
2515   ON_CALL(b2, DoB())
2516       .WillByDefault(Return(3));
2517   EXPECT_CALL(b2, DoB(_));
2518 
2519   b2.DoB(0);
2520   Mock::VerifyAndClear(&b2);
2521 
2522   // Verifies that the default actions and expectations of a and b1
2523   // are still in effect.
2524   EXPECT_TRUE(a.Binary(0, 0));
2525   EXPECT_FALSE(a.Binary(0, 0));
2526 
2527   EXPECT_EQ(1, b1.DoB());
2528   EXPECT_EQ(2, b1.DoB(0));
2529 }
2530 
TEST(VerifyAndClearTest,DestroyingChainedMocksDoesNotDeadlockThroughExpectations)2531 TEST(VerifyAndClearTest,
2532      DestroyingChainedMocksDoesNotDeadlockThroughExpectations) {
2533   linked_ptr<MockA> a(new MockA);
2534   ReferenceHoldingMock test_mock;
2535 
2536   // EXPECT_CALL stores a reference to a inside test_mock.
2537   EXPECT_CALL(test_mock, AcceptReference(_))
2538       .WillRepeatedly(SetArgPointee<0>(a));
2539 
2540   // Throw away the reference to the mock that we have in a. After this, the
2541   // only reference to it is stored by test_mock.
2542   a.reset();
2543 
2544   // When test_mock goes out of scope, it destroys the last remaining reference
2545   // to the mock object originally pointed to by a. This will cause the MockA
2546   // destructor to be called from inside the ReferenceHoldingMock destructor.
2547   // The state of all mocks is protected by a single global lock, but there
2548   // should be no deadlock.
2549 }
2550 
TEST(VerifyAndClearTest,DestroyingChainedMocksDoesNotDeadlockThroughDefaultAction)2551 TEST(VerifyAndClearTest,
2552      DestroyingChainedMocksDoesNotDeadlockThroughDefaultAction) {
2553   linked_ptr<MockA> a(new MockA);
2554   ReferenceHoldingMock test_mock;
2555 
2556   // ON_CALL stores a reference to a inside test_mock.
2557   ON_CALL(test_mock, AcceptReference(_))
2558       .WillByDefault(SetArgPointee<0>(a));
2559 
2560   // Throw away the reference to the mock that we have in a. After this, the
2561   // only reference to it is stored by test_mock.
2562   a.reset();
2563 
2564   // When test_mock goes out of scope, it destroys the last remaining reference
2565   // to the mock object originally pointed to by a. This will cause the MockA
2566   // destructor to be called from inside the ReferenceHoldingMock destructor.
2567   // The state of all mocks is protected by a single global lock, but there
2568   // should be no deadlock.
2569 }
2570 
2571 // Tests that a mock function's action can call a mock function
2572 // (either the same function or a different one) either as an explicit
2573 // action or as a default action without causing a dead lock.  It
2574 // verifies that the action is not performed inside the critical
2575 // section.
TEST(SynchronizationTest,CanCallMockMethodInAction)2576 TEST(SynchronizationTest, CanCallMockMethodInAction) {
2577   MockA a;
2578   MockC c;
2579   ON_CALL(a, DoA(_))
2580       .WillByDefault(IgnoreResult(InvokeWithoutArgs(&c,
2581                                                     &MockC::NonVoidMethod)));
2582   EXPECT_CALL(a, DoA(1));
2583   EXPECT_CALL(a, DoA(1))
2584       .WillOnce(Invoke(&a, &MockA::DoA))
2585       .RetiresOnSaturation();
2586   EXPECT_CALL(c, NonVoidMethod());
2587 
2588   a.DoA(1);
2589   // This will match the second EXPECT_CALL() and trigger another a.DoA(1),
2590   // which will in turn match the first EXPECT_CALL() and trigger a call to
2591   // c.NonVoidMethod() that was specified by the ON_CALL() since the first
2592   // EXPECT_CALL() did not specify an action.
2593 }
2594 
2595 }  // namespace
2596 
2597 // Allows the user to define his own main and then invoke gmock_main
2598 // from it. This might be necessary on some platforms which require
2599 // specific setup and teardown.
2600 #if GMOCK_RENAME_MAIN
gmock_main(int argc,char ** argv)2601 int gmock_main(int argc, char **argv) {
2602 #else
2603 int main(int argc, char **argv) {
2604 #endif  // GMOCK_RENAME_MAIN
2605   testing::InitGoogleMock(&argc, argv);
2606 
2607   // Ensures that the tests pass no matter what value of
2608   // --gmock_catch_leaked_mocks and --gmock_verbose the user specifies.
2609   testing::GMOCK_FLAG(catch_leaked_mocks) = true;
2610   testing::GMOCK_FLAG(verbose) = testing::internal::kWarningVerbosity;
2611 
2612   return RUN_ALL_TESTS();
2613 }
2614