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 
47 namespace testing {
48 namespace internal {
49 
50 // Helper class for testing the Expectation class template.
51 class ExpectationTester {
52  public:
53   // Sets the call count of the given expectation to the given number.
SetCallCount(int n,ExpectationBase * exp)54   void SetCallCount(int n, ExpectationBase* exp) {
55     exp->call_count_ = n;
56   }
57 };
58 
59 }  // namespace internal
60 }  // namespace testing
61 
62 namespace {
63 
64 using testing::_;
65 using testing::AnyNumber;
66 using testing::AtLeast;
67 using testing::AtMost;
68 using testing::Between;
69 using testing::Cardinality;
70 using testing::CardinalityInterface;
71 using testing::Const;
72 using testing::DoAll;
73 using testing::DoDefault;
74 using testing::GMOCK_FLAG(verbose);
75 using testing::Gt;
76 using testing::InSequence;
77 using testing::Invoke;
78 using testing::InvokeWithoutArgs;
79 using testing::IsSubstring;
80 using testing::Lt;
81 using testing::Message;
82 using testing::Mock;
83 using testing::Return;
84 using testing::Sequence;
85 using testing::internal::g_gmock_mutex;
86 using testing::internal::kErrorVerbosity;
87 using testing::internal::kInfoVerbosity;
88 using testing::internal::kWarningVerbosity;
89 using testing::internal::Expectation;
90 using testing::internal::ExpectationTester;
91 using testing::internal::string;
92 
93 class Result {};
94 
95 class MockA {
96  public:
97   MOCK_METHOD1(DoA, void(int n));  // NOLINT
98   MOCK_METHOD1(ReturnResult, Result(int n));  // NOLINT
99   MOCK_METHOD2(Binary, bool(int x, int y));  // NOLINT
100   MOCK_METHOD2(ReturnInt, int(int x, int y));  // NOLINT
101 };
102 
103 class MockB {
104  public:
105   MOCK_CONST_METHOD0(DoB, int());  // NOLINT
106   MOCK_METHOD1(DoB, int(int n));  // NOLINT
107 };
108 
109 // Tests that EXPECT_CALL and ON_CALL compile in a presence of macro
110 // redefining a mock method name. This could happen, for example, when
111 // the tested code #includes Win32 API headers which define many APIs
112 // as macros, e.g. #define TextOut TextOutW.
113 
114 #define Method MethodW
115 
116 class CC {
117  public:
~CC()118   virtual ~CC() {}
119   virtual int Method() = 0;
120 };
121 class MockCC : public CC {
122  public:
123   MOCK_METHOD0(Method, int());
124 };
125 
126 // Tests that a method with expanded name compiles.
TEST(OnCallSyntaxTest,CompilesWithMethodNameExpandedFromMacro)127 TEST(OnCallSyntaxTest, CompilesWithMethodNameExpandedFromMacro) {
128   MockCC cc;
129   ON_CALL(cc, Method());
130 }
131 
132 // Tests that the method with expanded name not only compiles but runs
133 // and returns a correct value, too.
TEST(OnCallSyntaxTest,WorksWithMethodNameExpandedFromMacro)134 TEST(OnCallSyntaxTest, WorksWithMethodNameExpandedFromMacro) {
135   MockCC cc;
136   ON_CALL(cc, Method()).WillByDefault(Return(42));
137   EXPECT_EQ(42, cc.Method());
138 }
139 
140 // Tests that a method with expanded name compiles.
TEST(ExpectCallSyntaxTest,CompilesWithMethodNameExpandedFromMacro)141 TEST(ExpectCallSyntaxTest, CompilesWithMethodNameExpandedFromMacro) {
142   MockCC cc;
143   EXPECT_CALL(cc, Method());
144   cc.Method();
145 }
146 
147 // Tests that it works, too.
TEST(ExpectCallSyntaxTest,WorksWithMethodNameExpandedFromMacro)148 TEST(ExpectCallSyntaxTest, WorksWithMethodNameExpandedFromMacro) {
149   MockCC cc;
150   EXPECT_CALL(cc, Method()).WillOnce(Return(42));
151   EXPECT_EQ(42, cc.Method());
152 }
153 
154 #undef Method  // Done with macro redefinition tests.
155 
156 // Tests that ON_CALL evaluates its arguments exactly once as promised
157 // by Google Mock.
TEST(OnCallSyntaxTest,EvaluatesFirstArgumentOnce)158 TEST(OnCallSyntaxTest, EvaluatesFirstArgumentOnce) {
159   MockA a;
160   MockA* pa = &a;
161 
162   ON_CALL(*pa++, DoA(_));
163   EXPECT_EQ(&a + 1, pa);
164 }
165 
TEST(OnCallSyntaxTest,EvaluatesSecondArgumentOnce)166 TEST(OnCallSyntaxTest, EvaluatesSecondArgumentOnce) {
167   MockA a;
168   int n = 0;
169 
170   ON_CALL(a, DoA(n++));
171   EXPECT_EQ(1, n);
172 }
173 
174 // Tests that the syntax of ON_CALL() is enforced at run time.
175 
TEST(OnCallSyntaxTest,WithIsOptional)176 TEST(OnCallSyntaxTest, WithIsOptional) {
177   MockA a;
178 
179   ON_CALL(a, DoA(5))
180       .WillByDefault(Return());
181   ON_CALL(a, DoA(_))
182       .With(_)
183       .WillByDefault(Return());
184 }
185 
TEST(OnCallSyntaxTest,WithCanAppearAtMostOnce)186 TEST(OnCallSyntaxTest, WithCanAppearAtMostOnce) {
187   MockA a;
188 
189   EXPECT_NONFATAL_FAILURE({  // NOLINT
190     ON_CALL(a, ReturnResult(_))
191         .With(_)
192         .With(_)
193         .WillByDefault(Return(Result()));
194   }, ".With() cannot appear more than once in an ON_CALL()");
195 }
196 
197 #if GTEST_HAS_DEATH_TEST
198 
TEST(OnCallSyntaxTest,WillByDefaultIsMandatory)199 TEST(OnCallSyntaxTest, WillByDefaultIsMandatory) {
200   MockA a;
201 
202   EXPECT_DEATH({  // NOLINT
203     ON_CALL(a, DoA(5));
204     a.DoA(5);
205   }, "");
206 }
207 
208 #endif  // GTEST_HAS_DEATH_TEST
209 
TEST(OnCallSyntaxTest,WillByDefaultCanAppearAtMostOnce)210 TEST(OnCallSyntaxTest, WillByDefaultCanAppearAtMostOnce) {
211   MockA a;
212 
213   EXPECT_NONFATAL_FAILURE({  // NOLINT
214     ON_CALL(a, DoA(5))
215         .WillByDefault(Return())
216         .WillByDefault(Return());
217   }, ".WillByDefault() must appear exactly once in an ON_CALL()");
218 }
219 
220 // Tests that EXPECT_CALL evaluates its arguments exactly once as
221 // promised by Google Mock.
TEST(ExpectCallSyntaxTest,EvaluatesFirstArgumentOnce)222 TEST(ExpectCallSyntaxTest, EvaluatesFirstArgumentOnce) {
223   MockA a;
224   MockA* pa = &a;
225 
226   EXPECT_CALL(*pa++, DoA(_));
227   a.DoA(0);
228   EXPECT_EQ(&a + 1, pa);
229 }
230 
TEST(ExpectCallSyntaxTest,EvaluatesSecondArgumentOnce)231 TEST(ExpectCallSyntaxTest, EvaluatesSecondArgumentOnce) {
232   MockA a;
233   int n = 0;
234 
235   EXPECT_CALL(a, DoA(n++));
236   a.DoA(0);
237   EXPECT_EQ(1, n);
238 }
239 
240 // Tests that the syntax of EXPECT_CALL() is enforced at run time.
241 
TEST(ExpectCallSyntaxTest,WithIsOptional)242 TEST(ExpectCallSyntaxTest, WithIsOptional) {
243   MockA a;
244 
245   EXPECT_CALL(a, DoA(5))
246       .Times(0);
247   EXPECT_CALL(a, DoA(6))
248       .With(_)
249       .Times(0);
250 }
251 
TEST(ExpectCallSyntaxTest,WithCanAppearAtMostOnce)252 TEST(ExpectCallSyntaxTest, WithCanAppearAtMostOnce) {
253   MockA a;
254 
255   EXPECT_NONFATAL_FAILURE({  // NOLINT
256     EXPECT_CALL(a, DoA(6))
257         .With(_)
258         .With(_);
259   }, ".With() cannot appear more than once in an EXPECT_CALL()");
260 
261   a.DoA(6);
262 }
263 
TEST(ExpectCallSyntaxTest,WithMustBeFirstClause)264 TEST(ExpectCallSyntaxTest, WithMustBeFirstClause) {
265   MockA a;
266 
267   EXPECT_NONFATAL_FAILURE({  // NOLINT
268     EXPECT_CALL(a, DoA(1))
269         .Times(1)
270         .With(_);
271   }, ".With() must be the first clause in an EXPECT_CALL()");
272 
273   a.DoA(1);
274 
275   EXPECT_NONFATAL_FAILURE({  // NOLINT
276     EXPECT_CALL(a, DoA(2))
277         .WillOnce(Return())
278         .With(_);
279   }, ".With() must be the first clause in an EXPECT_CALL()");
280 
281   a.DoA(2);
282 }
283 
TEST(ExpectCallSyntaxTest,TimesCanBeInferred)284 TEST(ExpectCallSyntaxTest, TimesCanBeInferred) {
285   MockA a;
286 
287   EXPECT_CALL(a, DoA(1))
288       .WillOnce(Return());
289 
290   EXPECT_CALL(a, DoA(2))
291       .WillOnce(Return())
292       .WillRepeatedly(Return());
293 
294   a.DoA(1);
295   a.DoA(2);
296   a.DoA(2);
297 }
298 
TEST(ExpectCallSyntaxTest,TimesCanAppearAtMostOnce)299 TEST(ExpectCallSyntaxTest, TimesCanAppearAtMostOnce) {
300   MockA a;
301 
302   EXPECT_NONFATAL_FAILURE({  // NOLINT
303     EXPECT_CALL(a, DoA(1))
304         .Times(1)
305         .Times(2);
306   }, ".Times() cannot appear more than once in an EXPECT_CALL()");
307 
308   a.DoA(1);
309   a.DoA(1);
310 }
311 
TEST(ExpectCallSyntaxTest,TimesMustBeBeforeInSequence)312 TEST(ExpectCallSyntaxTest, TimesMustBeBeforeInSequence) {
313   MockA a;
314   Sequence s;
315 
316   EXPECT_NONFATAL_FAILURE({  // NOLINT
317     EXPECT_CALL(a, DoA(1))
318         .InSequence(s)
319         .Times(1);
320   }, ".Times() cannot appear after ");
321 
322   a.DoA(1);
323 }
324 
TEST(ExpectCallSyntaxTest,InSequenceIsOptional)325 TEST(ExpectCallSyntaxTest, InSequenceIsOptional) {
326   MockA a;
327   Sequence s;
328 
329   EXPECT_CALL(a, DoA(1));
330   EXPECT_CALL(a, DoA(2))
331       .InSequence(s);
332 
333   a.DoA(1);
334   a.DoA(2);
335 }
336 
TEST(ExpectCallSyntaxTest,InSequenceCanAppearMultipleTimes)337 TEST(ExpectCallSyntaxTest, InSequenceCanAppearMultipleTimes) {
338   MockA a;
339   Sequence s1, s2;
340 
341   EXPECT_CALL(a, DoA(1))
342       .InSequence(s1, s2)
343       .InSequence(s1);
344 
345   a.DoA(1);
346 }
347 
TEST(ExpectCallSyntaxTest,InSequenceMustBeBeforeWill)348 TEST(ExpectCallSyntaxTest, InSequenceMustBeBeforeWill) {
349   MockA a;
350   Sequence s;
351 
352   EXPECT_NONFATAL_FAILURE({  // NOLINT
353     EXPECT_CALL(a, DoA(1))
354         .WillOnce(Return())
355         .InSequence(s);
356   }, ".InSequence() cannot appear after ");
357 
358   a.DoA(1);
359 }
360 
TEST(ExpectCallSyntaxTest,WillIsOptional)361 TEST(ExpectCallSyntaxTest, WillIsOptional) {
362   MockA a;
363 
364   EXPECT_CALL(a, DoA(1));
365   EXPECT_CALL(a, DoA(2))
366       .WillOnce(Return());
367 
368   a.DoA(1);
369   a.DoA(2);
370 }
371 
TEST(ExpectCallSyntaxTest,WillCanAppearMultipleTimes)372 TEST(ExpectCallSyntaxTest, WillCanAppearMultipleTimes) {
373   MockA a;
374 
375   EXPECT_CALL(a, DoA(1))
376       .Times(AnyNumber())
377       .WillOnce(Return())
378       .WillOnce(Return())
379       .WillOnce(Return());
380 }
381 
TEST(ExpectCallSyntaxTest,WillMustBeBeforeWillRepeatedly)382 TEST(ExpectCallSyntaxTest, WillMustBeBeforeWillRepeatedly) {
383   MockA a;
384 
385   EXPECT_NONFATAL_FAILURE({  // NOLINT
386     EXPECT_CALL(a, DoA(1))
387         .WillRepeatedly(Return())
388         .WillOnce(Return());
389   }, ".WillOnce() cannot appear after ");
390 
391   a.DoA(1);
392 }
393 
TEST(ExpectCallSyntaxTest,WillRepeatedlyIsOptional)394 TEST(ExpectCallSyntaxTest, WillRepeatedlyIsOptional) {
395   MockA a;
396 
397   EXPECT_CALL(a, DoA(1))
398       .WillOnce(Return());
399   EXPECT_CALL(a, DoA(2))
400       .WillOnce(Return())
401       .WillRepeatedly(Return());
402 
403   a.DoA(1);
404   a.DoA(2);
405   a.DoA(2);
406 }
407 
TEST(ExpectCallSyntaxTest,WillRepeatedlyCannotAppearMultipleTimes)408 TEST(ExpectCallSyntaxTest, WillRepeatedlyCannotAppearMultipleTimes) {
409   MockA a;
410 
411   EXPECT_NONFATAL_FAILURE({  // NOLINT
412     EXPECT_CALL(a, DoA(1))
413         .WillRepeatedly(Return())
414         .WillRepeatedly(Return());
415   }, ".WillRepeatedly() cannot appear more than once in an "
416      "EXPECT_CALL()");
417 }
418 
TEST(ExpectCallSyntaxTest,WillRepeatedlyMustBeBeforeRetiresOnSaturation)419 TEST(ExpectCallSyntaxTest, WillRepeatedlyMustBeBeforeRetiresOnSaturation) {
420   MockA a;
421 
422   EXPECT_NONFATAL_FAILURE({  // NOLINT
423     EXPECT_CALL(a, DoA(1))
424         .RetiresOnSaturation()
425         .WillRepeatedly(Return());
426   }, ".WillRepeatedly() cannot appear after ");
427 }
428 
TEST(ExpectCallSyntaxTest,RetiresOnSaturationIsOptional)429 TEST(ExpectCallSyntaxTest, RetiresOnSaturationIsOptional) {
430   MockA a;
431 
432   EXPECT_CALL(a, DoA(1));
433   EXPECT_CALL(a, DoA(1))
434       .RetiresOnSaturation();
435 
436   a.DoA(1);
437   a.DoA(1);
438 }
439 
TEST(ExpectCallSyntaxTest,RetiresOnSaturationCannotAppearMultipleTimes)440 TEST(ExpectCallSyntaxTest, RetiresOnSaturationCannotAppearMultipleTimes) {
441   MockA a;
442 
443   EXPECT_NONFATAL_FAILURE({  // NOLINT
444     EXPECT_CALL(a, DoA(1))
445         .RetiresOnSaturation()
446         .RetiresOnSaturation();
447   }, ".RetiresOnSaturation() cannot appear more than once");
448 
449   a.DoA(1);
450 }
451 
TEST(ExpectCallSyntaxTest,DefaultCardinalityIsOnce)452 TEST(ExpectCallSyntaxTest, DefaultCardinalityIsOnce) {
453   {
454     MockA a;
455     EXPECT_CALL(a, DoA(1));
456     a.DoA(1);
457   }
458   EXPECT_NONFATAL_FAILURE({  // NOLINT
459     MockA a;
460     EXPECT_CALL(a, DoA(1));
461   }, "to be called once");
462   EXPECT_NONFATAL_FAILURE({  // NOLINT
463     MockA a;
464     EXPECT_CALL(a, DoA(1));
465     a.DoA(1);
466     a.DoA(1);
467   }, "to be called once");
468 }
469 
470 // TODO(wan@google.com): find a way to re-enable these tests.
471 #if 0
472 
473 // Tests that Google Mock doesn't print a warning when the number of
474 // WillOnce() is adequate.
475 TEST(ExpectCallSyntaxTest, DoesNotWarnOnAdequateActionCount) {
476   CaptureTestStdout();
477   {
478     MockB b;
479 
480     // It's always fine to omit WillOnce() entirely.
481     EXPECT_CALL(b, DoB())
482         .Times(0);
483     EXPECT_CALL(b, DoB(1))
484         .Times(AtMost(1));
485     EXPECT_CALL(b, DoB(2))
486         .Times(1)
487         .WillRepeatedly(Return(1));
488 
489     // It's fine for the number of WillOnce()s to equal the upper bound.
490     EXPECT_CALL(b, DoB(3))
491         .Times(Between(1, 2))
492         .WillOnce(Return(1))
493         .WillOnce(Return(2));
494 
495     // It's fine for the number of WillOnce()s to be smaller than the
496     // upper bound when there is a WillRepeatedly().
497     EXPECT_CALL(b, DoB(4))
498         .Times(AtMost(3))
499         .WillOnce(Return(1))
500         .WillRepeatedly(Return(2));
501 
502     // Satisfies the above expectations.
503     b.DoB(2);
504     b.DoB(3);
505   }
506   const string& output = GetCapturedTestStdout();
507   EXPECT_EQ("", output);
508 }
509 
510 // Tests that Google Mock warns on having too many actions in an
511 // expectation compared to its cardinality.
512 TEST(ExpectCallSyntaxTest, WarnsOnTooManyActions) {
513   CaptureTestStdout();
514   {
515     MockB b;
516 
517     // Warns when the number of WillOnce()s is larger than the upper bound.
518     EXPECT_CALL(b, DoB())
519         .Times(0)
520         .WillOnce(Return(1));  // #1
521     EXPECT_CALL(b, DoB())
522         .Times(AtMost(1))
523         .WillOnce(Return(1))
524         .WillOnce(Return(2));  // #2
525     EXPECT_CALL(b, DoB(1))
526         .Times(1)
527         .WillOnce(Return(1))
528         .WillOnce(Return(2))
529         .RetiresOnSaturation();  // #3
530 
531     // Warns when the number of WillOnce()s equals the upper bound and
532     // there is a WillRepeatedly().
533     EXPECT_CALL(b, DoB())
534         .Times(0)
535         .WillRepeatedly(Return(1));  // #4
536     EXPECT_CALL(b, DoB(2))
537         .Times(1)
538         .WillOnce(Return(1))
539         .WillRepeatedly(Return(2));  // #5
540 
541     // Satisfies the above expectations.
542     b.DoB(1);
543     b.DoB(2);
544   }
545   const string& output = GetCapturedTestStdout();
546   EXPECT_PRED_FORMAT2(IsSubstring,
547                       "Too many actions specified.\n"
548                       "Expected to be never called, but has 1 WillOnce().",
549                       output);  // #1
550   EXPECT_PRED_FORMAT2(IsSubstring,
551                       "Too many actions specified.\n"
552                       "Expected to be called at most once, "
553                       "but has 2 WillOnce()s.",
554                       output);  // #2
555   EXPECT_PRED_FORMAT2(IsSubstring,
556                       "Too many actions specified.\n"
557                       "Expected to be called once, but has 2 WillOnce()s.",
558                       output);  // #3
559   EXPECT_PRED_FORMAT2(IsSubstring,
560                       "Too many actions specified.\n"
561                       "Expected to be never called, but has 0 WillOnce()s "
562                       "and a WillRepeatedly().",
563                       output);  // #4
564   EXPECT_PRED_FORMAT2(IsSubstring,
565                       "Too many actions specified.\n"
566                       "Expected to be called once, but has 1 WillOnce() "
567                       "and a WillRepeatedly().",
568                       output);  // #5
569 }
570 
571 // Tests that Google Mock warns on having too few actions in an
572 // expectation compared to its cardinality.
573 TEST(ExpectCallSyntaxTest, WarnsOnTooFewActions) {
574   MockB b;
575 
576   EXPECT_CALL(b, DoB())
577       .Times(Between(2, 3))
578       .WillOnce(Return(1));
579 
580   CaptureTestStdout();
581   b.DoB();
582   const string& output = GetCapturedTestStdout();
583   EXPECT_PRED_FORMAT2(IsSubstring,
584                       "Too few actions specified.\n"
585                       "Expected to be called between 2 and 3 times, "
586                       "but has only 1 WillOnce().",
587                       output);
588   b.DoB();
589 }
590 
591 #endif  // 0
592 
593 // Tests the semantics of ON_CALL().
594 
595 // Tests that the built-in default action is taken when no ON_CALL()
596 // is specified.
TEST(OnCallTest,TakesBuiltInDefaultActionWhenNoOnCall)597 TEST(OnCallTest, TakesBuiltInDefaultActionWhenNoOnCall) {
598   MockB b;
599   EXPECT_CALL(b, DoB());
600 
601   EXPECT_EQ(0, b.DoB());
602 }
603 
604 // Tests that the built-in default action is taken when no ON_CALL()
605 // matches the invocation.
TEST(OnCallTest,TakesBuiltInDefaultActionWhenNoOnCallMatches)606 TEST(OnCallTest, TakesBuiltInDefaultActionWhenNoOnCallMatches) {
607   MockB b;
608   ON_CALL(b, DoB(1))
609       .WillByDefault(Return(1));
610   EXPECT_CALL(b, DoB(_));
611 
612   EXPECT_EQ(0, b.DoB(2));
613 }
614 
615 // Tests that the last matching ON_CALL() action is taken.
TEST(OnCallTest,PicksLastMatchingOnCall)616 TEST(OnCallTest, PicksLastMatchingOnCall) {
617   MockB b;
618   ON_CALL(b, DoB(_))
619       .WillByDefault(Return(3));
620   ON_CALL(b, DoB(2))
621       .WillByDefault(Return(2));
622   ON_CALL(b, DoB(1))
623       .WillByDefault(Return(1));
624   EXPECT_CALL(b, DoB(_));
625 
626   EXPECT_EQ(2, b.DoB(2));
627 }
628 
629 // Tests the semantics of EXPECT_CALL().
630 
631 // Tests that any call is allowed when no EXPECT_CALL() is specified.
TEST(ExpectCallTest,AllowsAnyCallWhenNoSpec)632 TEST(ExpectCallTest, AllowsAnyCallWhenNoSpec) {
633   MockB b;
634   EXPECT_CALL(b, DoB());
635   // There is no expectation on DoB(int).
636 
637   b.DoB();
638 
639   // DoB(int) can be called any number of times.
640   b.DoB(1);
641   b.DoB(2);
642 }
643 
644 // Tests that the last matching EXPECT_CALL() fires.
TEST(ExpectCallTest,PicksLastMatchingExpectCall)645 TEST(ExpectCallTest, PicksLastMatchingExpectCall) {
646   MockB b;
647   EXPECT_CALL(b, DoB(_))
648       .WillRepeatedly(Return(2));
649   EXPECT_CALL(b, DoB(1))
650       .WillRepeatedly(Return(1));
651 
652   EXPECT_EQ(1, b.DoB(1));
653 }
654 
655 // Tests lower-bound violation.
TEST(ExpectCallTest,CatchesTooFewCalls)656 TEST(ExpectCallTest, CatchesTooFewCalls) {
657   EXPECT_NONFATAL_FAILURE({  // NOLINT
658     MockB b;
659     EXPECT_CALL(b, DoB(5))
660         .Times(AtLeast(2));
661 
662     b.DoB(5);
663   }, "Actual function call count doesn't match this expectation.\n"
664      "         Expected: to be called at least twice\n"
665      "           Actual: called once - unsatisfied and active");
666 }
667 
668 // Tests that the cardinality can be inferred when no Times(...) is
669 // specified.
TEST(ExpectCallTest,InfersCardinalityWhenThereIsNoWillRepeatedly)670 TEST(ExpectCallTest, InfersCardinalityWhenThereIsNoWillRepeatedly) {
671   {
672     MockB b;
673     EXPECT_CALL(b, DoB())
674         .WillOnce(Return(1))
675         .WillOnce(Return(2));
676 
677     EXPECT_EQ(1, b.DoB());
678     EXPECT_EQ(2, b.DoB());
679   }
680 
681   EXPECT_NONFATAL_FAILURE({  // NOLINT
682     MockB b;
683     EXPECT_CALL(b, DoB())
684         .WillOnce(Return(1))
685         .WillOnce(Return(2));
686 
687     EXPECT_EQ(1, b.DoB());
688   }, "to be called twice");
689 
690   {  // NOLINT
691     MockB b;
692     EXPECT_CALL(b, DoB())
693         .WillOnce(Return(1))
694         .WillOnce(Return(2));
695 
696     EXPECT_EQ(1, b.DoB());
697     EXPECT_EQ(2, b.DoB());
698     EXPECT_NONFATAL_FAILURE(b.DoB(), "to be called twice");
699   }
700 }
701 
TEST(ExpectCallTest,InfersCardinality1WhenThereIsWillRepeatedly)702 TEST(ExpectCallTest, InfersCardinality1WhenThereIsWillRepeatedly) {
703   {
704     MockB b;
705     EXPECT_CALL(b, DoB())
706         .WillOnce(Return(1))
707         .WillRepeatedly(Return(2));
708 
709     EXPECT_EQ(1, b.DoB());
710   }
711 
712   {  // NOLINT
713     MockB b;
714     EXPECT_CALL(b, DoB())
715         .WillOnce(Return(1))
716         .WillRepeatedly(Return(2));
717 
718     EXPECT_EQ(1, b.DoB());
719     EXPECT_EQ(2, b.DoB());
720     EXPECT_EQ(2, b.DoB());
721   }
722 
723   EXPECT_NONFATAL_FAILURE({  // NOLINT
724     MockB b;
725     EXPECT_CALL(b, DoB())
726         .WillOnce(Return(1))
727         .WillRepeatedly(Return(2));
728   }, "to be called at least once");
729 }
730 
731 // Tests that the n-th action is taken for the n-th matching
732 // invocation.
TEST(ExpectCallTest,NthMatchTakesNthAction)733 TEST(ExpectCallTest, NthMatchTakesNthAction) {
734   MockB b;
735   EXPECT_CALL(b, DoB())
736       .WillOnce(Return(1))
737       .WillOnce(Return(2))
738       .WillOnce(Return(3));
739 
740   EXPECT_EQ(1, b.DoB());
741   EXPECT_EQ(2, b.DoB());
742   EXPECT_EQ(3, b.DoB());
743 }
744 
745 // TODO(wan@google.com): find a way to re-enable these tests.
746 #if 0
747 
748 // Tests that the default action is taken when the WillOnce(...) list is
749 // exhausted and there is no WillRepeatedly().
750 TEST(ExpectCallTest, TakesDefaultActionWhenWillListIsExhausted) {
751   MockB b;
752   EXPECT_CALL(b, DoB(_))
753       .Times(1);
754   EXPECT_CALL(b, DoB())
755       .Times(AnyNumber())
756       .WillOnce(Return(1))
757       .WillOnce(Return(2));
758 
759   CaptureTestStdout();
760   EXPECT_EQ(0, b.DoB(1));  // Shouldn't generate a warning as the
761                            // expectation has no action clause at all.
762   EXPECT_EQ(1, b.DoB());
763   EXPECT_EQ(2, b.DoB());
764   const string& output1 = GetCapturedTestStdout();
765   EXPECT_EQ("", output1);
766 
767   CaptureTestStdout();
768   EXPECT_EQ(0, b.DoB());
769   EXPECT_EQ(0, b.DoB());
770   const string& output2 = GetCapturedTestStdout();
771   EXPECT_PRED2(RE::PartialMatch, output2,
772                "Actions ran out\\.\n"
773                "Called 3 times, but only 2 WillOnce\\(\\)s are specified - "
774                "returning default value\\.");
775   EXPECT_PRED2(RE::PartialMatch, output2,
776                "Actions ran out\\.\n"
777                "Called 4 times, but only 2 WillOnce\\(\\)s are specified - "
778                "returning default value\\.");
779 }
780 
781 #endif  // 0
782 
783 // Tests that the WillRepeatedly() action is taken when the WillOnce(...)
784 // list is exhausted.
TEST(ExpectCallTest,TakesRepeatedActionWhenWillListIsExhausted)785 TEST(ExpectCallTest, TakesRepeatedActionWhenWillListIsExhausted) {
786   MockB b;
787   EXPECT_CALL(b, DoB())
788       .WillOnce(Return(1))
789       .WillRepeatedly(Return(2));
790 
791   EXPECT_EQ(1, b.DoB());
792   EXPECT_EQ(2, b.DoB());
793   EXPECT_EQ(2, b.DoB());
794 }
795 
796 // Tests that an uninteresting call performs the default action.
TEST(UninterestingCallTest,DoesDefaultAction)797 TEST(UninterestingCallTest, DoesDefaultAction) {
798   // When there is an ON_CALL() statement, the action specified by it
799   // should be taken.
800   MockA a;
801   ON_CALL(a, Binary(_, _))
802       .WillByDefault(Return(true));
803   EXPECT_TRUE(a.Binary(1, 2));
804 
805   // When there is no ON_CALL(), the default value for the return type
806   // should be returned.
807   MockB b;
808   EXPECT_EQ(0, b.DoB());
809 }
810 
811 // Tests that an unexpected call performs the default action.
TEST(UnexpectedCallTest,DoesDefaultAction)812 TEST(UnexpectedCallTest, DoesDefaultAction) {
813   // When there is an ON_CALL() statement, the action specified by it
814   // should be taken.
815   MockA a;
816   ON_CALL(a, Binary(_, _))
817       .WillByDefault(Return(true));
818   EXPECT_CALL(a, Binary(0, 0));
819   a.Binary(0, 0);
820   bool result = false;
821   EXPECT_NONFATAL_FAILURE(result = a.Binary(1, 2),
822                           "Unexpected mock function call");
823   EXPECT_TRUE(result);
824 
825   // When there is no ON_CALL(), the default value for the return type
826   // should be returned.
827   MockB b;
828   EXPECT_CALL(b, DoB(0))
829       .Times(0);
830   int n = -1;
831   EXPECT_NONFATAL_FAILURE(n = b.DoB(1),
832                           "Unexpected mock function call");
833   EXPECT_EQ(0, n);
834 }
835 
836 // Tests that when an unexpected void function generates the right
837 // failure message.
TEST(UnexpectedCallTest,GeneratesFailureForVoidFunction)838 TEST(UnexpectedCallTest, GeneratesFailureForVoidFunction) {
839   // First, tests the message when there is only one EXPECT_CALL().
840   MockA a1;
841   EXPECT_CALL(a1, DoA(1));
842   a1.DoA(1);
843   // Ideally we should match the failure message against a regex, but
844   // EXPECT_NONFATAL_FAILURE doesn't support that, so we test for
845   // multiple sub-strings instead.
846   EXPECT_NONFATAL_FAILURE(
847       a1.DoA(9),
848       "Unexpected mock function call - returning directly.\n"
849       "    Function call: DoA(9)\n"
850       "Google Mock tried the following 1 expectation, but it didn't match:");
851   EXPECT_NONFATAL_FAILURE(
852       a1.DoA(9),
853       "  Expected arg #0: is equal to 1\n"
854       "           Actual: 9\n"
855       "         Expected: to be called once\n"
856       "           Actual: called once - saturated and active");
857 
858   // Next, tests the message when there are more than one EXPECT_CALL().
859   MockA a2;
860   EXPECT_CALL(a2, DoA(1));
861   EXPECT_CALL(a2, DoA(3));
862   a2.DoA(1);
863   EXPECT_NONFATAL_FAILURE(
864       a2.DoA(2),
865       "Unexpected mock function call - returning directly.\n"
866       "    Function call: DoA(2)\n"
867       "Google Mock tried the following 2 expectations, but none matched:");
868   EXPECT_NONFATAL_FAILURE(
869       a2.DoA(2),
870       "tried expectation #0\n"
871       "  Expected arg #0: is equal to 1\n"
872       "           Actual: 2\n"
873       "         Expected: to be called once\n"
874       "           Actual: called once - saturated and active");
875   EXPECT_NONFATAL_FAILURE(
876       a2.DoA(2),
877       "tried expectation #1\n"
878       "  Expected arg #0: is equal to 3\n"
879       "           Actual: 2\n"
880       "         Expected: to be called once\n"
881       "           Actual: never called - unsatisfied and active");
882   a2.DoA(3);
883 }
884 
885 // Tests that an unexpected non-void function generates the right
886 // failure message.
TEST(UnexpectedCallTest,GeneartesFailureForNonVoidFunction)887 TEST(UnexpectedCallTest, GeneartesFailureForNonVoidFunction) {
888   MockB b1;
889   EXPECT_CALL(b1, DoB(1));
890   b1.DoB(1);
891   EXPECT_NONFATAL_FAILURE(
892       b1.DoB(2),
893       "Unexpected mock function call - returning default value.\n"
894       "    Function call: DoB(2)\n"
895       "          Returns: 0\n"
896       "Google Mock tried the following 1 expectation, but it didn't match:");
897   EXPECT_NONFATAL_FAILURE(
898       b1.DoB(2),
899       "  Expected arg #0: is equal to 1\n"
900       "           Actual: 2\n"
901       "         Expected: to be called once\n"
902       "           Actual: called once - saturated and active");
903 }
904 
905 // Tests that Google Mock explains that an retired expectation doesn't
906 // match the call.
TEST(UnexpectedCallTest,RetiredExpectation)907 TEST(UnexpectedCallTest, RetiredExpectation) {
908   MockB b;
909   EXPECT_CALL(b, DoB(1))
910       .RetiresOnSaturation();
911 
912   b.DoB(1);
913   EXPECT_NONFATAL_FAILURE(
914       b.DoB(1),
915       "         Expected: the expectation is active\n"
916       "           Actual: it is retired");
917 }
918 
919 // Tests that Google Mock explains that an expectation that doesn't
920 // match the arguments doesn't match the call.
TEST(UnexpectedCallTest,UnmatchedArguments)921 TEST(UnexpectedCallTest, UnmatchedArguments) {
922   MockB b;
923   EXPECT_CALL(b, DoB(1));
924 
925   EXPECT_NONFATAL_FAILURE(
926       b.DoB(2),
927       "  Expected arg #0: is equal to 1\n"
928       "           Actual: 2\n");
929   b.DoB(1);
930 }
931 
932 #ifdef GMOCK_HAS_REGEX
933 
934 // Tests that Google Mock explains that an expectation with
935 // unsatisfied pre-requisites doesn't match the call.
TEST(UnexpectedCallTest,UnsatisifiedPrerequisites)936 TEST(UnexpectedCallTest, UnsatisifiedPrerequisites) {
937   Sequence s1, s2;
938   MockB b;
939   EXPECT_CALL(b, DoB(1))
940       .InSequence(s1);
941   EXPECT_CALL(b, DoB(2))
942       .Times(AnyNumber())
943       .InSequence(s1);
944   EXPECT_CALL(b, DoB(3))
945       .InSequence(s2);
946   EXPECT_CALL(b, DoB(4))
947       .InSequence(s1, s2);
948 
949   ::testing::TestPartResultArray failures;
950   {
951     ::testing::ScopedFakeTestPartResultReporter reporter(&failures);
952     b.DoB(4);
953     // Now 'failures' contains the Google Test failures generated by
954     // the above statement.
955   }
956 
957   // There should be one non-fatal failure.
958   ASSERT_EQ(1, failures.size());
959   const ::testing::TestPartResult& r = failures.GetTestPartResult(0);
960   EXPECT_EQ(::testing::TPRT_NONFATAL_FAILURE, r.type());
961 
962   // Verifies that the failure message contains the two unsatisfied
963   // pre-requisites but not the satisfied one.
964   const char* const pattern =
965 #if GMOCK_USES_PCRE
966       // PCRE has trouble using (.|\n) to match any character, but
967       // supports the (?s) prefix for using . to match any character.
968       "(?s)the following immediate pre-requisites are not satisfied:\n"
969       ".*: pre-requisite #0\n"
970       ".*: pre-requisite #1";
971 #else
972       // POSIX RE doesn't understand the (?s) prefix, but has no trouble
973       // with (.|\n).
974       "the following immediate pre-requisites are not satisfied:\n"
975       "(.|\n)*: pre-requisite #0\n"
976       "(.|\n)*: pre-requisite #1";
977 #endif  // GMOCK_USES_PCRE
978 
979   EXPECT_TRUE(
980       ::testing::internal::RE::PartialMatch(r.message(), pattern))
981               << " where the message is " << r.message();
982   b.DoB(1);
983   b.DoB(3);
984   b.DoB(4);
985 }
986 
987 #endif  // GMOCK_HAS_REGEX
988 
989 #if GTEST_HAS_DEATH_TEST
990 
TEST(UndefinedReturnValueTest,ReturnValueIsMandatory)991 TEST(UndefinedReturnValueTest, ReturnValueIsMandatory) {
992   MockA a;
993   // TODO(wan@google.com): We should really verify the output message,
994   // but we cannot yet due to that EXPECT_DEATH only captures stderr
995   // while Google Mock logs to stdout.
996   EXPECT_DEATH(a.ReturnResult(1), "");
997 }
998 
999 #endif  // GTEST_HAS_DEATH_TEST
1000 
1001 // Tests that an excessive call (one whose arguments match the
1002 // matchers but is called too many times) performs the default action.
TEST(ExcessiveCallTest,DoesDefaultAction)1003 TEST(ExcessiveCallTest, DoesDefaultAction) {
1004   // When there is an ON_CALL() statement, the action specified by it
1005   // should be taken.
1006   MockA a;
1007   ON_CALL(a, Binary(_, _))
1008       .WillByDefault(Return(true));
1009   EXPECT_CALL(a, Binary(0, 0));
1010   a.Binary(0, 0);
1011   bool result = false;
1012   EXPECT_NONFATAL_FAILURE(result = a.Binary(0, 0),
1013                           "Mock function called more times than expected");
1014   EXPECT_TRUE(result);
1015 
1016   // When there is no ON_CALL(), the default value for the return type
1017   // should be returned.
1018   MockB b;
1019   EXPECT_CALL(b, DoB(0))
1020       .Times(0);
1021   int n = -1;
1022   EXPECT_NONFATAL_FAILURE(n = b.DoB(0),
1023                           "Mock function called more times than expected");
1024   EXPECT_EQ(0, n);
1025 }
1026 
1027 // Tests that when a void function is called too many times,
1028 // the failure message contains the argument values.
TEST(ExcessiveCallTest,GeneratesFailureForVoidFunction)1029 TEST(ExcessiveCallTest, GeneratesFailureForVoidFunction) {
1030   MockA a;
1031   EXPECT_CALL(a, DoA(_))
1032       .Times(0);
1033   EXPECT_NONFATAL_FAILURE(
1034       a.DoA(9),
1035       "Mock function called more times than expected - returning directly.\n"
1036       "    Function call: DoA(9)\n"
1037       "         Expected: to be never called\n"
1038       "           Actual: called once - over-saturated and active");
1039 }
1040 
1041 // Tests that when a non-void function is called too many times, the
1042 // failure message contains the argument values and the return value.
TEST(ExcessiveCallTest,GeneratesFailureForNonVoidFunction)1043 TEST(ExcessiveCallTest, GeneratesFailureForNonVoidFunction) {
1044   MockB b;
1045   EXPECT_CALL(b, DoB(_));
1046   b.DoB(1);
1047   EXPECT_NONFATAL_FAILURE(
1048       b.DoB(2),
1049       "Mock function called more times than expected - "
1050       "returning default value.\n"
1051       "    Function call: DoB(2)\n"
1052       "          Returns: 0\n"
1053       "         Expected: to be called once\n"
1054       "           Actual: called twice - over-saturated and active");
1055 }
1056 
1057 // Tests using sequences.
1058 
TEST(InSequenceTest,AllExpectationInScopeAreInSequence)1059 TEST(InSequenceTest, AllExpectationInScopeAreInSequence) {
1060   MockA a;
1061   {
1062     InSequence dummy;
1063 
1064     EXPECT_CALL(a, DoA(1));
1065     EXPECT_CALL(a, DoA(2));
1066   }
1067 
1068   EXPECT_NONFATAL_FAILURE({  // NOLINT
1069     a.DoA(2);
1070   }, "Unexpected mock function call");
1071 
1072   a.DoA(1);
1073   a.DoA(2);
1074 }
1075 
TEST(InSequenceTest,NestedInSequence)1076 TEST(InSequenceTest, NestedInSequence) {
1077   MockA a;
1078   {
1079     InSequence dummy;
1080 
1081     EXPECT_CALL(a, DoA(1));
1082     {
1083       InSequence dummy2;
1084 
1085       EXPECT_CALL(a, DoA(2));
1086       EXPECT_CALL(a, DoA(3));
1087     }
1088   }
1089 
1090   EXPECT_NONFATAL_FAILURE({  // NOLINT
1091     a.DoA(1);
1092     a.DoA(3);
1093   }, "Unexpected mock function call");
1094 
1095   a.DoA(2);
1096   a.DoA(3);
1097 }
1098 
TEST(InSequenceTest,ExpectationsOutOfScopeAreNotAffected)1099 TEST(InSequenceTest, ExpectationsOutOfScopeAreNotAffected) {
1100   MockA a;
1101   {
1102     InSequence dummy;
1103 
1104     EXPECT_CALL(a, DoA(1));
1105     EXPECT_CALL(a, DoA(2));
1106   }
1107   EXPECT_CALL(a, DoA(3));
1108 
1109   EXPECT_NONFATAL_FAILURE({  // NOLINT
1110     a.DoA(2);
1111   }, "Unexpected mock function call");
1112 
1113   a.DoA(3);
1114   a.DoA(1);
1115   a.DoA(2);
1116 }
1117 
1118 // Tests that any order is allowed when no sequence is used.
TEST(SequenceTest,AnyOrderIsOkByDefault)1119 TEST(SequenceTest, AnyOrderIsOkByDefault) {
1120   {
1121     MockA a;
1122     MockB b;
1123 
1124     EXPECT_CALL(a, DoA(1));
1125     EXPECT_CALL(b, DoB())
1126         .Times(AnyNumber());
1127 
1128     a.DoA(1);
1129     b.DoB();
1130   }
1131 
1132   {  // NOLINT
1133     MockA a;
1134     MockB b;
1135 
1136     EXPECT_CALL(a, DoA(1));
1137     EXPECT_CALL(b, DoB())
1138         .Times(AnyNumber());
1139 
1140     b.DoB();
1141     a.DoA(1);
1142   }
1143 }
1144 
1145 #if GTEST_HAS_DEATH_TEST
1146 
1147 // Tests that the calls must be in strict order when a complete order
1148 // is specified.
TEST(SequenceTest,CallsMustBeInStrictOrderWhenSaidSo)1149 TEST(SequenceTest, CallsMustBeInStrictOrderWhenSaidSo) {
1150   MockA a;
1151   Sequence s;
1152 
1153   EXPECT_CALL(a, ReturnResult(1))
1154       .InSequence(s)
1155       .WillOnce(Return(Result()));
1156 
1157   EXPECT_CALL(a, ReturnResult(2))
1158       .InSequence(s)
1159       .WillOnce(Return(Result()));
1160 
1161   EXPECT_CALL(a, ReturnResult(3))
1162       .InSequence(s)
1163       .WillOnce(Return(Result()));
1164 
1165   EXPECT_DEATH({  // NOLINT
1166     a.ReturnResult(1);
1167     a.ReturnResult(3);
1168     a.ReturnResult(2);
1169   }, "");
1170 
1171   EXPECT_DEATH({  // NOLINT
1172     a.ReturnResult(2);
1173     a.ReturnResult(1);
1174     a.ReturnResult(3);
1175   }, "");
1176 
1177   a.ReturnResult(1);
1178   a.ReturnResult(2);
1179   a.ReturnResult(3);
1180 }
1181 
1182 // Tests specifying a DAG using multiple sequences.
TEST(SequenceTest,CallsMustConformToSpecifiedDag)1183 TEST(SequenceTest, CallsMustConformToSpecifiedDag) {
1184   MockA a;
1185   MockB b;
1186   Sequence x, y;
1187 
1188   EXPECT_CALL(a, ReturnResult(1))
1189       .InSequence(x)
1190       .WillOnce(Return(Result()));
1191 
1192   EXPECT_CALL(b, DoB())
1193       .Times(2)
1194       .InSequence(y);
1195 
1196   EXPECT_CALL(a, ReturnResult(2))
1197       .InSequence(x, y)
1198       .WillRepeatedly(Return(Result()));
1199 
1200   EXPECT_CALL(a, ReturnResult(3))
1201       .InSequence(x)
1202       .WillOnce(Return(Result()));
1203 
1204   EXPECT_DEATH({  // NOLINT
1205     a.ReturnResult(1);
1206     b.DoB();
1207     a.ReturnResult(2);
1208   }, "");
1209 
1210   EXPECT_DEATH({  // NOLINT
1211     a.ReturnResult(2);
1212   }, "");
1213 
1214   EXPECT_DEATH({  // NOLINT
1215     a.ReturnResult(3);
1216   }, "");
1217 
1218   EXPECT_DEATH({  // NOLINT
1219     a.ReturnResult(1);
1220     b.DoB();
1221     b.DoB();
1222     a.ReturnResult(3);
1223     a.ReturnResult(2);
1224   }, "");
1225 
1226   b.DoB();
1227   a.ReturnResult(1);
1228   b.DoB();
1229   a.ReturnResult(3);
1230 }
1231 
1232 #endif  // GTEST_HAS_DEATH_TEST
1233 
TEST(SequenceTest,Retirement)1234 TEST(SequenceTest, Retirement) {
1235   MockA a;
1236   Sequence s;
1237 
1238   EXPECT_CALL(a, DoA(1))
1239       .InSequence(s);
1240   EXPECT_CALL(a, DoA(_))
1241       .InSequence(s)
1242       .RetiresOnSaturation();
1243   EXPECT_CALL(a, DoA(1))
1244       .InSequence(s);
1245 
1246   a.DoA(1);
1247   a.DoA(2);
1248   a.DoA(1);
1249 }
1250 
1251 // Tests that Google Mock correctly handles calls to mock functions
1252 // after a mock object owning one of their pre-requisites has died.
1253 
1254 // Tests that calls that satisfy the original spec are successful.
TEST(DeletingMockEarlyTest,Success1)1255 TEST(DeletingMockEarlyTest, Success1) {
1256   MockB* const b1 = new MockB;
1257   MockA* const a = new MockA;
1258   MockB* const b2 = new MockB;
1259 
1260   {
1261     InSequence dummy;
1262     EXPECT_CALL(*b1, DoB(_))
1263         .WillOnce(Return(1));
1264     EXPECT_CALL(*a, Binary(_, _))
1265         .Times(AnyNumber())
1266         .WillRepeatedly(Return(true));
1267     EXPECT_CALL(*b2, DoB(_))
1268         .Times(AnyNumber())
1269         .WillRepeatedly(Return(2));
1270   }
1271 
1272   EXPECT_EQ(1, b1->DoB(1));
1273   delete b1;
1274   // a's pre-requisite has died.
1275   EXPECT_TRUE(a->Binary(0, 1));
1276   delete b2;
1277   // a's successor has died.
1278   EXPECT_TRUE(a->Binary(1, 2));
1279   delete a;
1280 }
1281 
1282 // Tests that calls that satisfy the original spec are successful.
TEST(DeletingMockEarlyTest,Success2)1283 TEST(DeletingMockEarlyTest, Success2) {
1284   MockB* const b1 = new MockB;
1285   MockA* const a = new MockA;
1286   MockB* const b2 = new MockB;
1287 
1288   {
1289     InSequence dummy;
1290     EXPECT_CALL(*b1, DoB(_))
1291         .WillOnce(Return(1));
1292     EXPECT_CALL(*a, Binary(_, _))
1293         .Times(AnyNumber());
1294     EXPECT_CALL(*b2, DoB(_))
1295         .Times(AnyNumber())
1296         .WillRepeatedly(Return(2));
1297   }
1298 
1299   delete a;  // a is trivially satisfied.
1300   EXPECT_EQ(1, b1->DoB(1));
1301   EXPECT_EQ(2, b2->DoB(2));
1302   delete b1;
1303   delete b2;
1304 }
1305 
1306 // Tests that it's OK to delete a mock object itself in its action.
1307 
ACTION_P(Delete,ptr)1308 ACTION_P(Delete, ptr) { delete ptr; }
1309 
TEST(DeletingMockEarlyTest,CanDeleteSelfInActionReturningVoid)1310 TEST(DeletingMockEarlyTest, CanDeleteSelfInActionReturningVoid) {
1311   MockA* const a = new MockA;
1312   EXPECT_CALL(*a, DoA(_)).WillOnce(Delete(a));
1313   a->DoA(42);  // This will cause a to be deleted.
1314 }
1315 
TEST(DeletingMockEarlyTest,CanDeleteSelfInActionReturningValue)1316 TEST(DeletingMockEarlyTest, CanDeleteSelfInActionReturningValue) {
1317   MockA* const a = new MockA;
1318   EXPECT_CALL(*a, ReturnResult(_))
1319       .WillOnce(DoAll(Delete(a), Return(Result())));
1320   a->ReturnResult(42);  // This will cause a to be deleted.
1321 }
1322 
1323 // Tests that calls that violate the original spec yield failures.
TEST(DeletingMockEarlyTest,Failure1)1324 TEST(DeletingMockEarlyTest, Failure1) {
1325   MockB* const b1 = new MockB;
1326   MockA* const a = new MockA;
1327   MockB* const b2 = new MockB;
1328 
1329   {
1330     InSequence dummy;
1331     EXPECT_CALL(*b1, DoB(_))
1332         .WillOnce(Return(1));
1333     EXPECT_CALL(*a, Binary(_, _))
1334         .Times(AnyNumber());
1335     EXPECT_CALL(*b2, DoB(_))
1336         .Times(AnyNumber())
1337         .WillRepeatedly(Return(2));
1338   }
1339 
1340   delete a;  // a is trivially satisfied.
1341   EXPECT_NONFATAL_FAILURE({
1342     b2->DoB(2);
1343   }, "Unexpected mock function call");
1344   EXPECT_EQ(1, b1->DoB(1));
1345   delete b1;
1346   delete b2;
1347 }
1348 
1349 // Tests that calls that violate the original spec yield failures.
TEST(DeletingMockEarlyTest,Failure2)1350 TEST(DeletingMockEarlyTest, Failure2) {
1351   MockB* const b1 = new MockB;
1352   MockA* const a = new MockA;
1353   MockB* const b2 = new MockB;
1354 
1355   {
1356     InSequence dummy;
1357     EXPECT_CALL(*b1, DoB(_));
1358     EXPECT_CALL(*a, Binary(_, _))
1359         .Times(AnyNumber());
1360     EXPECT_CALL(*b2, DoB(_))
1361         .Times(AnyNumber());
1362   }
1363 
1364   EXPECT_NONFATAL_FAILURE(delete b1,
1365                           "Actual: never called");
1366   EXPECT_NONFATAL_FAILURE(a->Binary(0, 1),
1367                           "Unexpected mock function call");
1368   EXPECT_NONFATAL_FAILURE(b2->DoB(1),
1369                           "Unexpected mock function call");
1370   delete a;
1371   delete b2;
1372 }
1373 
1374 class EvenNumberCardinality : public CardinalityInterface {
1375  public:
1376   // Returns true iff call_count calls will satisfy this cardinality.
IsSatisfiedByCallCount(int call_count) const1377   virtual bool IsSatisfiedByCallCount(int call_count) const {
1378     return call_count % 2 == 0;
1379   }
1380 
1381   // Returns true iff call_count calls will saturate this cardinality.
IsSaturatedByCallCount(int call_count) const1382   virtual bool IsSaturatedByCallCount(int call_count) const { return false; }
1383 
1384   // Describes self to an ostream.
DescribeTo(::std::ostream * os) const1385   virtual void DescribeTo(::std::ostream* os) const {
1386     *os << "called even number of times";
1387   }
1388 };
1389 
EvenNumber()1390 Cardinality EvenNumber() {
1391   return Cardinality(new EvenNumberCardinality);
1392 }
1393 
TEST(ExpectationBaseTest,AllPrerequisitesAreSatisfiedWorksForNonMonotonicCardinality)1394 TEST(ExpectationBaseTest,
1395      AllPrerequisitesAreSatisfiedWorksForNonMonotonicCardinality) {
1396   MockA* a = new MockA;
1397   Sequence s;
1398 
1399   EXPECT_CALL(*a, DoA(1))
1400       .Times(EvenNumber())
1401       .InSequence(s);
1402   EXPECT_CALL(*a, DoA(2))
1403       .Times(AnyNumber())
1404       .InSequence(s);
1405   EXPECT_CALL(*a, DoA(3))
1406       .Times(AnyNumber());
1407 
1408   a->DoA(3);
1409   a->DoA(1);
1410   EXPECT_NONFATAL_FAILURE(a->DoA(2), "Unexpected mock function call");
1411   EXPECT_NONFATAL_FAILURE(delete a, "to be called even number of times");
1412 }
1413 
1414 // The following tests verify the message generated when a mock
1415 // function is called.
1416 
1417 struct Printable {
1418 };
1419 
operator <<(::std::ostream & os,const Printable &)1420 inline void operator<<(::std::ostream& os, const Printable&) {
1421   os << "Printable";
1422 }
1423 
1424 struct Unprintable {
Unprintable__anon9c5330760111::Unprintable1425   Unprintable() : value(0) {}
1426   int value;
1427 };
1428 
1429 class MockC {
1430  public:
1431   MOCK_METHOD6(VoidMethod, void(bool cond, int n, string s, void* p,
1432                                 const Printable& x, Unprintable y));
1433   MOCK_METHOD0(NonVoidMethod, int());  // NOLINT
1434 };
1435 
1436 // TODO(wan@google.com): find a way to re-enable these tests.
1437 #if 0
1438 
1439 // Tests that an uninteresting mock function call generates a warning
1440 // containing the stack trace.
1441 TEST(FunctionCallMessageTest, UninterestingCallGeneratesFyiWithStackTrace) {
1442   MockC c;
1443   CaptureTestStdout();
1444   c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable());
1445   const string& output = GetCapturedTestStdout();
1446   EXPECT_PRED_FORMAT2(IsSubstring, "GMOCK WARNING", output);
1447   EXPECT_PRED_FORMAT2(IsSubstring, "Stack trace:", output);
1448 #ifndef NDEBUG
1449   // We check the stack trace content in dbg-mode only, as opt-mode
1450   // may inline the call we are interested in seeing.
1451 
1452   // Verifies that a void mock function's name appears in the stack
1453   // trace.
1454   EXPECT_PRED_FORMAT2(IsSubstring, "::MockC::VoidMethod(", output);
1455 
1456   // Verifies that a non-void mock function's name appears in the
1457   // stack trace.
1458   CaptureTestStdout();
1459   c.NonVoidMethod();
1460   const string& output2 = GetCapturedTestStdout();
1461   EXPECT_PRED_FORMAT2(IsSubstring, "::MockC::NonVoidMethod(", output2);
1462 #endif  // NDEBUG
1463 }
1464 
1465 // Tests that an uninteresting mock function call causes the function
1466 // arguments and return value to be printed.
1467 TEST(FunctionCallMessageTest, UninterestingCallPrintsArgumentsAndReturnValue) {
1468   // A non-void mock function.
1469   MockB b;
1470   CaptureTestStdout();
1471   b.DoB();
1472   const string& output1 = GetCapturedTestStdout();
1473   EXPECT_PRED_FORMAT2(
1474       IsSubstring,
1475       "Uninteresting mock function call - returning default value.\n"
1476       "    Function call: DoB()\n"
1477       "          Returns: 0\n", output1);
1478   // Makes sure the return value is printed.
1479 
1480   // A void mock function.
1481   MockC c;
1482   CaptureTestStdout();
1483   c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable());
1484   const string& output2 = GetCapturedTestStdout();
1485   EXPECT_PRED2(RE::PartialMatch, output2,
1486                "Uninteresting mock function call - returning directly\\.\n"
1487                "    Function call: VoidMethod"
1488                "\\(false, 5, \"Hi\", NULL, @0x\\w+ "
1489                "Printable, 4-byte object <0000 0000>\\)");
1490   // A void function has no return value to print.
1491 }
1492 
1493 // Tests how the --gmock_verbose flag affects Google Mock's output.
1494 
1495 class GMockVerboseFlagTest : public testing::Test {
1496  public:
1497   // Verifies that the given Google Mock output is correct.  (When
1498   // should_print is true, the output should match the given regex and
1499   // contain the given function name in the stack trace.  When it's
1500   // false, the output should be empty.)
1501   void VerifyOutput(const string& output, bool should_print,
1502                     const string& regex,
1503                     const string& function_name) {
1504     if (should_print) {
1505       EXPECT_PRED2(RE::PartialMatch, output, regex);
1506 #ifndef NDEBUG
1507       // We check the stack trace content in dbg-mode only, as opt-mode
1508       // may inline the call we are interested in seeing.
1509       EXPECT_PRED_FORMAT2(IsSubstring, function_name, output);
1510 #endif  // NDEBUG
1511     } else {
1512       EXPECT_EQ("", output);
1513     }
1514   }
1515 
1516   // Tests how the flag affects expected calls.
1517   void TestExpectedCall(bool should_print) {
1518     MockA a;
1519     EXPECT_CALL(a, DoA(5));
1520     EXPECT_CALL(a, Binary(_, 1))
1521         .WillOnce(Return(true));
1522 
1523     // A void-returning function.
1524     CaptureTestStdout();
1525     a.DoA(5);
1526     VerifyOutput(
1527         GetCapturedTestStdout(),
1528         should_print,
1529         "Expected mock function call\\.\n"
1530         "    Function call: DoA\\(5\\)\n"
1531         "Stack trace:",
1532         "MockA::DoA");
1533 
1534     // A non-void-returning function.
1535     CaptureTestStdout();
1536     a.Binary(2, 1);
1537     VerifyOutput(
1538         GetCapturedTestStdout(),
1539         should_print,
1540         "Expected mock function call\\.\n"
1541         "    Function call: Binary\\(2, 1\\)\n"
1542         "          Returns: true\n"
1543         "Stack trace:",
1544         "MockA::Binary");
1545   }
1546 
1547   // Tests how the flag affects uninteresting calls.
1548   void TestUninterestingCall(bool should_print) {
1549     MockA a;
1550 
1551     // A void-returning function.
1552     CaptureTestStdout();
1553     a.DoA(5);
1554     VerifyOutput(
1555         GetCapturedTestStdout(),
1556         should_print,
1557         "\nGMOCK WARNING:\n"
1558         "Uninteresting mock function call - returning directly\\.\n"
1559         "    Function call: DoA\\(5\\)\n"
1560         "Stack trace:\n"
1561         "[\\s\\S]*",
1562         "MockA::DoA");
1563 
1564     // A non-void-returning function.
1565     CaptureTestStdout();
1566     a.Binary(2, 1);
1567     VerifyOutput(
1568         GetCapturedTestStdout(),
1569         should_print,
1570         "\nGMOCK WARNING:\n"
1571         "Uninteresting mock function call - returning default value\\.\n"
1572         "    Function call: Binary\\(2, 1\\)\n"
1573         "          Returns: false\n"
1574         "Stack trace:\n"
1575         "[\\s\\S]*",
1576         "MockA::Binary");
1577   }
1578 };
1579 
1580 // Tests that --gmock_verbose=info causes both expected and
1581 // uninteresting calls to be reported.
1582 TEST_F(GMockVerboseFlagTest, Info) {
1583   GMOCK_FLAG(verbose) = kInfoVerbosity;
1584   TestExpectedCall(true);
1585   TestUninterestingCall(true);
1586 }
1587 
1588 // Tests that --gmock_verbose=warning causes uninteresting calls to be
1589 // reported.
1590 TEST_F(GMockVerboseFlagTest, Warning) {
1591   GMOCK_FLAG(verbose) = kWarningVerbosity;
1592   TestExpectedCall(false);
1593   TestUninterestingCall(true);
1594 }
1595 
1596 // Tests that --gmock_verbose=warning causes neither expected nor
1597 // uninteresting calls to be reported.
1598 TEST_F(GMockVerboseFlagTest, Error) {
1599   GMOCK_FLAG(verbose) = kErrorVerbosity;
1600   TestExpectedCall(false);
1601   TestUninterestingCall(false);
1602 }
1603 
1604 // Tests that --gmock_verbose=SOME_INVALID_VALUE has the same effect
1605 // as --gmock_verbose=warning.
1606 TEST_F(GMockVerboseFlagTest, InvalidFlagIsTreatedAsWarning) {
1607   GMOCK_FLAG(verbose) = "invalid";  // Treated as "warning".
1608   TestExpectedCall(false);
1609   TestUninterestingCall(true);
1610 }
1611 
1612 #endif  // 0
1613 
1614 // A helper class that generates a failure when printed.  We use it to
1615 // ensure that Google Mock doesn't print a value (even to an internal
1616 // buffer) when it is not supposed to do so.
1617 class PrintMeNot {};
1618 
PrintTo(PrintMeNot,::std::ostream *)1619 void PrintTo(PrintMeNot /* dummy */, ::std::ostream* /* os */) {
1620   ADD_FAILURE() << "Google Mock is printing a value that shouldn't be "
1621                 << "printed even to an internal buffer.";
1622 }
1623 
1624 class LogTestHelper {
1625  public:
1626   MOCK_METHOD1(Foo, PrintMeNot(PrintMeNot));
1627 };
1628 
1629 class GMockLogTest : public ::testing::Test {
1630  protected:
SetUp()1631   virtual void SetUp() {
1632     // The code needs to work when both ::string and ::std::string are
1633     // defined and the flag is implemented as a
1634     // testing::internal::String.  In this case, without the call to
1635     // c_str(), the compiler will complain that it cannot figure out
1636     // whether the String flag should be converted to a ::string or an
1637     // ::std::string before being assigned to original_verbose_.
1638     original_verbose_ = GMOCK_FLAG(verbose).c_str();
1639   }
1640 
TearDown()1641   virtual void TearDown() { GMOCK_FLAG(verbose) = original_verbose_; }
1642 
1643   LogTestHelper helper_;
1644   string original_verbose_;
1645 };
1646 
TEST_F(GMockLogTest,DoesNotPrintGoodCallInternallyIfVerbosityIsWarning)1647 TEST_F(GMockLogTest, DoesNotPrintGoodCallInternallyIfVerbosityIsWarning) {
1648   GMOCK_FLAG(verbose) = kWarningVerbosity;
1649   EXPECT_CALL(helper_, Foo(_))
1650       .WillOnce(Return(PrintMeNot()));
1651   helper_.Foo(PrintMeNot());  // This is an expected call.
1652 }
1653 
TEST_F(GMockLogTest,DoesNotPrintGoodCallInternallyIfVerbosityIsError)1654 TEST_F(GMockLogTest, DoesNotPrintGoodCallInternallyIfVerbosityIsError) {
1655   GMOCK_FLAG(verbose) = kErrorVerbosity;
1656   EXPECT_CALL(helper_, Foo(_))
1657       .WillOnce(Return(PrintMeNot()));
1658   helper_.Foo(PrintMeNot());  // This is an expected call.
1659 }
1660 
TEST_F(GMockLogTest,DoesNotPrintWarningInternallyIfVerbosityIsError)1661 TEST_F(GMockLogTest, DoesNotPrintWarningInternallyIfVerbosityIsError) {
1662   GMOCK_FLAG(verbose) = kErrorVerbosity;
1663   ON_CALL(helper_, Foo(_))
1664       .WillByDefault(Return(PrintMeNot()));
1665   helper_.Foo(PrintMeNot());  // This should generate a warning.
1666 }
1667 
1668 // Tests Mock::AllowLeak().
1669 
TEST(AllowLeakTest,AllowsLeakingUnusedMockObject)1670 TEST(AllowLeakTest, AllowsLeakingUnusedMockObject) {
1671   MockA* a = new MockA;
1672   Mock::AllowLeak(a);
1673 }
1674 
TEST(AllowLeakTest,CanBeCalledBeforeOnCall)1675 TEST(AllowLeakTest, CanBeCalledBeforeOnCall) {
1676   MockA* a = new MockA;
1677   Mock::AllowLeak(a);
1678   ON_CALL(*a, DoA(_)).WillByDefault(Return());
1679   a->DoA(0);
1680 }
1681 
TEST(AllowLeakTest,CanBeCalledAfterOnCall)1682 TEST(AllowLeakTest, CanBeCalledAfterOnCall) {
1683   MockA* a = new MockA;
1684   ON_CALL(*a, DoA(_)).WillByDefault(Return());
1685   Mock::AllowLeak(a);
1686 }
1687 
TEST(AllowLeakTest,CanBeCalledBeforeExpectCall)1688 TEST(AllowLeakTest, CanBeCalledBeforeExpectCall) {
1689   MockA* a = new MockA;
1690   Mock::AllowLeak(a);
1691   EXPECT_CALL(*a, DoA(_));
1692   a->DoA(0);
1693 }
1694 
TEST(AllowLeakTest,CanBeCalledAfterExpectCall)1695 TEST(AllowLeakTest, CanBeCalledAfterExpectCall) {
1696   MockA* a = new MockA;
1697   EXPECT_CALL(*a, DoA(_)).Times(AnyNumber());
1698   Mock::AllowLeak(a);
1699 }
1700 
TEST(AllowLeakTest,WorksWhenBothOnCallAndExpectCallArePresent)1701 TEST(AllowLeakTest, WorksWhenBothOnCallAndExpectCallArePresent) {
1702   MockA* a = new MockA;
1703   ON_CALL(*a, DoA(_)).WillByDefault(Return());
1704   EXPECT_CALL(*a, DoA(_)).Times(AnyNumber());
1705   Mock::AllowLeak(a);
1706 }
1707 
1708 // Tests that we can verify and clear a mock object's expectations
1709 // when none of its methods has expectations.
TEST(VerifyAndClearExpectationsTest,NoMethodHasExpectations)1710 TEST(VerifyAndClearExpectationsTest, NoMethodHasExpectations) {
1711   MockB b;
1712   ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b));
1713 
1714   // There should be no expectations on the methods now, so we can
1715   // freely call them.
1716   EXPECT_EQ(0, b.DoB());
1717   EXPECT_EQ(0, b.DoB(1));
1718 }
1719 
1720 // Tests that we can verify and clear a mock object's expectations
1721 // when some, but not all, of its methods have expectations *and* the
1722 // verification succeeds.
TEST(VerifyAndClearExpectationsTest,SomeMethodsHaveExpectationsAndSucceed)1723 TEST(VerifyAndClearExpectationsTest, SomeMethodsHaveExpectationsAndSucceed) {
1724   MockB b;
1725   EXPECT_CALL(b, DoB())
1726       .WillOnce(Return(1));
1727   b.DoB();
1728   ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b));
1729 
1730   // There should be no expectations on the methods now, so we can
1731   // freely call them.
1732   EXPECT_EQ(0, b.DoB());
1733   EXPECT_EQ(0, b.DoB(1));
1734 }
1735 
1736 // Tests that we can verify and clear a mock object's expectations
1737 // when some, but not all, of its methods have expectations *and* the
1738 // verification fails.
TEST(VerifyAndClearExpectationsTest,SomeMethodsHaveExpectationsAndFail)1739 TEST(VerifyAndClearExpectationsTest, SomeMethodsHaveExpectationsAndFail) {
1740   MockB b;
1741   EXPECT_CALL(b, DoB())
1742       .WillOnce(Return(1));
1743   bool result;
1744   EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClearExpectations(&b),
1745                           "Actual: never called");
1746   ASSERT_FALSE(result);
1747 
1748   // There should be no expectations on the methods now, so we can
1749   // freely call them.
1750   EXPECT_EQ(0, b.DoB());
1751   EXPECT_EQ(0, b.DoB(1));
1752 }
1753 
1754 // Tests that we can verify and clear a mock object's expectations
1755 // when all of its methods have expectations.
TEST(VerifyAndClearExpectationsTest,AllMethodsHaveExpectations)1756 TEST(VerifyAndClearExpectationsTest, AllMethodsHaveExpectations) {
1757   MockB b;
1758   EXPECT_CALL(b, DoB())
1759       .WillOnce(Return(1));
1760   EXPECT_CALL(b, DoB(_))
1761       .WillOnce(Return(2));
1762   b.DoB();
1763   b.DoB(1);
1764   ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b));
1765 
1766   // There should be no expectations on the methods now, so we can
1767   // freely call them.
1768   EXPECT_EQ(0, b.DoB());
1769   EXPECT_EQ(0, b.DoB(1));
1770 }
1771 
1772 // Tests that we can verify and clear a mock object's expectations
1773 // when a method has more than one expectation.
TEST(VerifyAndClearExpectationsTest,AMethodHasManyExpectations)1774 TEST(VerifyAndClearExpectationsTest, AMethodHasManyExpectations) {
1775   MockB b;
1776   EXPECT_CALL(b, DoB(0))
1777       .WillOnce(Return(1));
1778   EXPECT_CALL(b, DoB(_))
1779       .WillOnce(Return(2));
1780   b.DoB(1);
1781   bool result;
1782   EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClearExpectations(&b),
1783                           "Actual: never called");
1784   ASSERT_FALSE(result);
1785 
1786   // There should be no expectations on the methods now, so we can
1787   // freely call them.
1788   EXPECT_EQ(0, b.DoB());
1789   EXPECT_EQ(0, b.DoB(1));
1790 }
1791 
1792 // Tests that we can call VerifyAndClearExpectations() on the same
1793 // mock object multiple times.
TEST(VerifyAndClearExpectationsTest,CanCallManyTimes)1794 TEST(VerifyAndClearExpectationsTest, CanCallManyTimes) {
1795   MockB b;
1796   EXPECT_CALL(b, DoB());
1797   b.DoB();
1798   Mock::VerifyAndClearExpectations(&b);
1799 
1800   EXPECT_CALL(b, DoB(_))
1801       .WillOnce(Return(1));
1802   b.DoB(1);
1803   Mock::VerifyAndClearExpectations(&b);
1804   Mock::VerifyAndClearExpectations(&b);
1805 
1806   // There should be no expectations on the methods now, so we can
1807   // freely call them.
1808   EXPECT_EQ(0, b.DoB());
1809   EXPECT_EQ(0, b.DoB(1));
1810 }
1811 
1812 // Tests that we can clear a mock object's default actions when none
1813 // of its methods has default actions.
TEST(VerifyAndClearTest,NoMethodHasDefaultActions)1814 TEST(VerifyAndClearTest, NoMethodHasDefaultActions) {
1815   MockB b;
1816   // If this crashes or generates a failure, the test will catch it.
1817   Mock::VerifyAndClear(&b);
1818   EXPECT_EQ(0, b.DoB());
1819 }
1820 
1821 // Tests that we can clear a mock object's default actions when some,
1822 // but not all of its methods have default actions.
TEST(VerifyAndClearTest,SomeMethodsHaveDefaultActions)1823 TEST(VerifyAndClearTest, SomeMethodsHaveDefaultActions) {
1824   MockB b;
1825   ON_CALL(b, DoB())
1826       .WillByDefault(Return(1));
1827 
1828   Mock::VerifyAndClear(&b);
1829 
1830   // Verifies that the default action of int DoB() was removed.
1831   EXPECT_EQ(0, b.DoB());
1832 }
1833 
1834 // Tests that we can clear a mock object's default actions when all of
1835 // its methods have default actions.
TEST(VerifyAndClearTest,AllMethodsHaveDefaultActions)1836 TEST(VerifyAndClearTest, AllMethodsHaveDefaultActions) {
1837   MockB b;
1838   ON_CALL(b, DoB())
1839       .WillByDefault(Return(1));
1840   ON_CALL(b, DoB(_))
1841       .WillByDefault(Return(2));
1842 
1843   Mock::VerifyAndClear(&b);
1844 
1845   // Verifies that the default action of int DoB() was removed.
1846   EXPECT_EQ(0, b.DoB());
1847 
1848   // Verifies that the default action of int DoB(int) was removed.
1849   EXPECT_EQ(0, b.DoB(0));
1850 }
1851 
1852 // Tests that we can clear a mock object's default actions when a
1853 // method has more than one ON_CALL() set on it.
TEST(VerifyAndClearTest,AMethodHasManyDefaultActions)1854 TEST(VerifyAndClearTest, AMethodHasManyDefaultActions) {
1855   MockB b;
1856   ON_CALL(b, DoB(0))
1857       .WillByDefault(Return(1));
1858   ON_CALL(b, DoB(_))
1859       .WillByDefault(Return(2));
1860 
1861   Mock::VerifyAndClear(&b);
1862 
1863   // Verifies that the default actions (there are two) of int DoB(int)
1864   // were removed.
1865   EXPECT_EQ(0, b.DoB(0));
1866   EXPECT_EQ(0, b.DoB(1));
1867 }
1868 
1869 // Tests that we can call VerifyAndClear() on a mock object multiple
1870 // times.
TEST(VerifyAndClearTest,CanCallManyTimes)1871 TEST(VerifyAndClearTest, CanCallManyTimes) {
1872   MockB b;
1873   ON_CALL(b, DoB())
1874       .WillByDefault(Return(1));
1875   Mock::VerifyAndClear(&b);
1876   Mock::VerifyAndClear(&b);
1877 
1878   ON_CALL(b, DoB(_))
1879       .WillByDefault(Return(1));
1880   Mock::VerifyAndClear(&b);
1881 
1882   EXPECT_EQ(0, b.DoB());
1883   EXPECT_EQ(0, b.DoB(1));
1884 }
1885 
1886 // Tests that VerifyAndClear() works when the verification succeeds.
TEST(VerifyAndClearTest,Success)1887 TEST(VerifyAndClearTest, Success) {
1888   MockB b;
1889   ON_CALL(b, DoB())
1890       .WillByDefault(Return(1));
1891   EXPECT_CALL(b, DoB(1))
1892       .WillOnce(Return(2));
1893 
1894   b.DoB();
1895   b.DoB(1);
1896   ASSERT_TRUE(Mock::VerifyAndClear(&b));
1897 
1898   // There should be no expectations on the methods now, so we can
1899   // freely call them.
1900   EXPECT_EQ(0, b.DoB());
1901   EXPECT_EQ(0, b.DoB(1));
1902 }
1903 
1904 // Tests that VerifyAndClear() works when the verification fails.
TEST(VerifyAndClearTest,Failure)1905 TEST(VerifyAndClearTest, Failure) {
1906   MockB b;
1907   ON_CALL(b, DoB(_))
1908       .WillByDefault(Return(1));
1909   EXPECT_CALL(b, DoB())
1910       .WillOnce(Return(2));
1911 
1912   b.DoB(1);
1913   bool result;
1914   EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClear(&b),
1915                           "Actual: never called");
1916   ASSERT_FALSE(result);
1917 
1918   // There should be no expectations on the methods now, so we can
1919   // freely call them.
1920   EXPECT_EQ(0, b.DoB());
1921   EXPECT_EQ(0, b.DoB(1));
1922 }
1923 
1924 // Tests that VerifyAndClear() works when the default actions and
1925 // expectations are set on a const mock object.
TEST(VerifyAndClearTest,Const)1926 TEST(VerifyAndClearTest, Const) {
1927   MockB b;
1928   ON_CALL(Const(b), DoB())
1929       .WillByDefault(Return(1));
1930 
1931   EXPECT_CALL(Const(b), DoB())
1932       .WillOnce(DoDefault())
1933       .WillOnce(Return(2));
1934 
1935   b.DoB();
1936   b.DoB();
1937   ASSERT_TRUE(Mock::VerifyAndClear(&b));
1938 
1939   // There should be no expectations on the methods now, so we can
1940   // freely call them.
1941   EXPECT_EQ(0, b.DoB());
1942   EXPECT_EQ(0, b.DoB(1));
1943 }
1944 
1945 // Tests that we can set default actions and expectations on a mock
1946 // object after VerifyAndClear() has been called on it.
TEST(VerifyAndClearTest,CanSetDefaultActionsAndExpectationsAfterwards)1947 TEST(VerifyAndClearTest, CanSetDefaultActionsAndExpectationsAfterwards) {
1948   MockB b;
1949   ON_CALL(b, DoB())
1950       .WillByDefault(Return(1));
1951   EXPECT_CALL(b, DoB(_))
1952       .WillOnce(Return(2));
1953   b.DoB(1);
1954 
1955   Mock::VerifyAndClear(&b);
1956 
1957   EXPECT_CALL(b, DoB())
1958       .WillOnce(Return(3));
1959   ON_CALL(b, DoB(_))
1960       .WillByDefault(Return(4));
1961 
1962   EXPECT_EQ(3, b.DoB());
1963   EXPECT_EQ(4, b.DoB(1));
1964 }
1965 
1966 // Tests that calling VerifyAndClear() on one mock object does not
1967 // affect other mock objects (either of the same type or not).
TEST(VerifyAndClearTest,DoesNotAffectOtherMockObjects)1968 TEST(VerifyAndClearTest, DoesNotAffectOtherMockObjects) {
1969   MockA a;
1970   MockB b1;
1971   MockB b2;
1972 
1973   ON_CALL(a, Binary(_, _))
1974       .WillByDefault(Return(true));
1975   EXPECT_CALL(a, Binary(_, _))
1976       .WillOnce(DoDefault())
1977       .WillOnce(Return(false));
1978 
1979   ON_CALL(b1, DoB())
1980       .WillByDefault(Return(1));
1981   EXPECT_CALL(b1, DoB(_))
1982       .WillOnce(Return(2));
1983 
1984   ON_CALL(b2, DoB())
1985       .WillByDefault(Return(3));
1986   EXPECT_CALL(b2, DoB(_));
1987 
1988   b2.DoB(0);
1989   Mock::VerifyAndClear(&b2);
1990 
1991   // Verifies that the default actions and expectations of a and b1
1992   // are still in effect.
1993   EXPECT_TRUE(a.Binary(0, 0));
1994   EXPECT_FALSE(a.Binary(0, 0));
1995 
1996   EXPECT_EQ(1, b1.DoB());
1997   EXPECT_EQ(2, b1.DoB(0));
1998 }
1999 
2000 // Tests that a mock function's action can call a mock function
2001 // (either the same function or a different one) either as an explicit
2002 // action or as a default action without causing a dead lock.  It
2003 // verifies that the action is not performed inside the critical
2004 // section.
2005 
Helper(MockC * c)2006 void Helper(MockC* c) {
2007   c->NonVoidMethod();
2008 }
2009 
2010 }  // namespace
2011 
main(int argc,char ** argv)2012 int main(int argc, char **argv) {
2013   testing::InitGoogleMock(&argc, argv);
2014 
2015   // Ensures that the tests pass no matter what value of
2016   // --gmock_catch_leaked_mocks and --gmock_verbose the user specifies.
2017   testing::GMOCK_FLAG(catch_leaked_mocks) = true;
2018   testing::GMOCK_FLAG(verbose) = testing::internal::kWarningVerbosity;
2019 
2020   return RUN_ALL_TESTS();
2021 }
2022