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