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


ros_opcua_impl_freeopcua
Author(s): Denis Štogl
autogenerated on Tue Jan 19 2021 03:06:08