blob: 50af1fefe63cd0dde8716ea7afb6347df420d749 [file] [log] [blame]
shiqiane35fdd92008-12-10 05:08:54 +00001// Copyright 2007, Google Inc.
2// All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are
6// met:
7//
8// * Redistributions of source code must retain the above copyright
9// notice, this list of conditions and the following disclaimer.
10// * Redistributions in binary form must reproduce the above
11// copyright notice, this list of conditions and the following disclaimer
12// in the documentation and/or other materials provided with the
13// distribution.
14// * Neither the name of Google Inc. nor the names of its
15// contributors may be used to endorse or promote products derived from
16// this software without specific prior written permission.
17//
18// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29//
30// Author: wan@google.com (Zhanyong Wan)
31
32// Google Mock - a framework for writing C++ mock classes.
33//
34// This file tests the spec builder syntax.
35
36#include <gmock/gmock-spec-builders.h>
37
38#include <ostream> // NOLINT
39#include <sstream>
40#include <string>
41
42#include <gmock/gmock.h>
43#include <gmock/internal/gmock-port.h>
44#include <gtest/gtest.h>
45#include <gtest/gtest-spi.h>
46
47namespace testing {
48namespace internal {
49
50// Helper class for testing the Expectation class template.
51class ExpectationTester {
52 public:
53 // Sets the call count of the given expectation to the given number.
54 void SetCallCount(int n, ExpectationBase* exp) {
55 exp->call_count_ = n;
56 }
57};
58
59} // namespace internal
60} // namespace testing
61
62namespace {
63
64using testing::_;
65using testing::AnyNumber;
66using testing::AtLeast;
67using testing::AtMost;
68using testing::Between;
69using testing::Cardinality;
70using testing::CardinalityInterface;
zhanyong.wand14aaed2010-01-14 05:36:32 +000071using testing::ContainsRegex;
shiqiane35fdd92008-12-10 05:08:54 +000072using testing::Const;
73using testing::DoAll;
74using testing::DoDefault;
zhanyong.wan41b9b0b2009-07-01 19:04:51 +000075using testing::Eq;
76using testing::Expectation;
77using testing::ExpectationSet;
shiqiane35fdd92008-12-10 05:08:54 +000078using testing::GMOCK_FLAG(verbose);
zhanyong.wanbf550852009-06-09 06:09:53 +000079using testing::Gt;
shiqiane35fdd92008-12-10 05:08:54 +000080using testing::InSequence;
81using testing::Invoke;
82using testing::InvokeWithoutArgs;
83using testing::IsSubstring;
84using testing::Lt;
85using testing::Message;
86using testing::Mock;
zhanyong.wan41b9b0b2009-07-01 19:04:51 +000087using testing::Ne;
shiqiane35fdd92008-12-10 05:08:54 +000088using testing::Return;
89using testing::Sequence;
zhanyong.wan470df422010-02-02 22:34:58 +000090using testing::internal::ExpectationTester;
shiqiane35fdd92008-12-10 05:08:54 +000091using testing::internal::g_gmock_mutex;
92using testing::internal::kErrorVerbosity;
93using testing::internal::kInfoVerbosity;
94using testing::internal::kWarningVerbosity;
zhanyong.wan470df422010-02-02 22:34:58 +000095using testing::internal::String;
shiqiane35fdd92008-12-10 05:08:54 +000096using testing::internal::string;
97
zhanyong.wan2516f602010-08-31 18:28:02 +000098#if GTEST_HAS_STREAM_REDIRECTION
zhanyong.wan470df422010-02-02 22:34:58 +000099using testing::HasSubstr;
100using testing::internal::CaptureStdout;
101using testing::internal::GetCapturedStdout;
zhanyong.wan2516f602010-08-31 18:28:02 +0000102#endif
zhanyong.wan470df422010-02-02 22:34:58 +0000103
shiqiane35fdd92008-12-10 05:08:54 +0000104class Result {};
105
106class MockA {
107 public:
zhanyong.wan32de5f52009-12-23 00:13:23 +0000108 MockA() {}
109
shiqiane35fdd92008-12-10 05:08:54 +0000110 MOCK_METHOD1(DoA, void(int n)); // NOLINT
111 MOCK_METHOD1(ReturnResult, Result(int n)); // NOLINT
112 MOCK_METHOD2(Binary, bool(int x, int y)); // NOLINT
zhanyong.wanbf550852009-06-09 06:09:53 +0000113 MOCK_METHOD2(ReturnInt, int(int x, int y)); // NOLINT
zhanyong.wan32de5f52009-12-23 00:13:23 +0000114
115 private:
116 GTEST_DISALLOW_COPY_AND_ASSIGN_(MockA);
shiqiane35fdd92008-12-10 05:08:54 +0000117};
118
119class MockB {
120 public:
zhanyong.wan32de5f52009-12-23 00:13:23 +0000121 MockB() {}
122
shiqiane35fdd92008-12-10 05:08:54 +0000123 MOCK_CONST_METHOD0(DoB, int()); // NOLINT
124 MOCK_METHOD1(DoB, int(int n)); // NOLINT
zhanyong.wan32de5f52009-12-23 00:13:23 +0000125
126 private:
127 GTEST_DISALLOW_COPY_AND_ASSIGN_(MockB);
shiqiane35fdd92008-12-10 05:08:54 +0000128};
129
130// Tests that EXPECT_CALL and ON_CALL compile in a presence of macro
131// redefining a mock method name. This could happen, for example, when
132// the tested code #includes Win32 API headers which define many APIs
133// as macros, e.g. #define TextOut TextOutW.
134
135#define Method MethodW
136
137class CC {
138 public:
139 virtual ~CC() {}
140 virtual int Method() = 0;
141};
142class MockCC : public CC {
143 public:
zhanyong.wan32de5f52009-12-23 00:13:23 +0000144 MockCC() {}
145
shiqiane35fdd92008-12-10 05:08:54 +0000146 MOCK_METHOD0(Method, int());
zhanyong.wan32de5f52009-12-23 00:13:23 +0000147
148 private:
149 GTEST_DISALLOW_COPY_AND_ASSIGN_(MockCC);
shiqiane35fdd92008-12-10 05:08:54 +0000150};
151
152// Tests that a method with expanded name compiles.
153TEST(OnCallSyntaxTest, CompilesWithMethodNameExpandedFromMacro) {
154 MockCC cc;
155 ON_CALL(cc, Method());
156}
157
158// Tests that the method with expanded name not only compiles but runs
159// and returns a correct value, too.
160TEST(OnCallSyntaxTest, WorksWithMethodNameExpandedFromMacro) {
161 MockCC cc;
162 ON_CALL(cc, Method()).WillByDefault(Return(42));
163 EXPECT_EQ(42, cc.Method());
164}
165
166// Tests that a method with expanded name compiles.
167TEST(ExpectCallSyntaxTest, CompilesWithMethodNameExpandedFromMacro) {
168 MockCC cc;
169 EXPECT_CALL(cc, Method());
170 cc.Method();
171}
172
173// Tests that it works, too.
174TEST(ExpectCallSyntaxTest, WorksWithMethodNameExpandedFromMacro) {
175 MockCC cc;
176 EXPECT_CALL(cc, Method()).WillOnce(Return(42));
177 EXPECT_EQ(42, cc.Method());
178}
179
180#undef Method // Done with macro redefinition tests.
181
182// Tests that ON_CALL evaluates its arguments exactly once as promised
183// by Google Mock.
184TEST(OnCallSyntaxTest, EvaluatesFirstArgumentOnce) {
185 MockA a;
186 MockA* pa = &a;
187
188 ON_CALL(*pa++, DoA(_));
189 EXPECT_EQ(&a + 1, pa);
190}
191
192TEST(OnCallSyntaxTest, EvaluatesSecondArgumentOnce) {
193 MockA a;
194 int n = 0;
195
196 ON_CALL(a, DoA(n++));
197 EXPECT_EQ(1, n);
198}
199
200// Tests that the syntax of ON_CALL() is enforced at run time.
201
zhanyong.wanbf550852009-06-09 06:09:53 +0000202TEST(OnCallSyntaxTest, WithIsOptional) {
shiqiane35fdd92008-12-10 05:08:54 +0000203 MockA a;
204
205 ON_CALL(a, DoA(5))
206 .WillByDefault(Return());
207 ON_CALL(a, DoA(_))
zhanyong.wanbf550852009-06-09 06:09:53 +0000208 .With(_)
shiqiane35fdd92008-12-10 05:08:54 +0000209 .WillByDefault(Return());
210}
211
zhanyong.wanbf550852009-06-09 06:09:53 +0000212TEST(OnCallSyntaxTest, WithCanAppearAtMostOnce) {
shiqiane35fdd92008-12-10 05:08:54 +0000213 MockA a;
214
215 EXPECT_NONFATAL_FAILURE({ // NOLINT
216 ON_CALL(a, ReturnResult(_))
zhanyong.wanbf550852009-06-09 06:09:53 +0000217 .With(_)
218 .With(_)
shiqiane35fdd92008-12-10 05:08:54 +0000219 .WillByDefault(Return(Result()));
zhanyong.wanbf550852009-06-09 06:09:53 +0000220 }, ".With() cannot appear more than once in an ON_CALL()");
221}
222
shiqiane35fdd92008-12-10 05:08:54 +0000223TEST(OnCallSyntaxTest, WillByDefaultIsMandatory) {
224 MockA a;
225
zhanyong.wan04d6ed82009-09-11 07:01:08 +0000226 EXPECT_DEATH_IF_SUPPORTED({
shiqiane35fdd92008-12-10 05:08:54 +0000227 ON_CALL(a, DoA(5));
228 a.DoA(5);
229 }, "");
230}
231
shiqiane35fdd92008-12-10 05:08:54 +0000232TEST(OnCallSyntaxTest, WillByDefaultCanAppearAtMostOnce) {
233 MockA a;
234
235 EXPECT_NONFATAL_FAILURE({ // NOLINT
236 ON_CALL(a, DoA(5))
237 .WillByDefault(Return())
238 .WillByDefault(Return());
239 }, ".WillByDefault() must appear exactly once in an ON_CALL()");
240}
241
242// Tests that EXPECT_CALL evaluates its arguments exactly once as
243// promised by Google Mock.
244TEST(ExpectCallSyntaxTest, EvaluatesFirstArgumentOnce) {
245 MockA a;
246 MockA* pa = &a;
247
248 EXPECT_CALL(*pa++, DoA(_));
249 a.DoA(0);
250 EXPECT_EQ(&a + 1, pa);
251}
252
253TEST(ExpectCallSyntaxTest, EvaluatesSecondArgumentOnce) {
254 MockA a;
255 int n = 0;
256
257 EXPECT_CALL(a, DoA(n++));
258 a.DoA(0);
259 EXPECT_EQ(1, n);
260}
261
262// Tests that the syntax of EXPECT_CALL() is enforced at run time.
263
zhanyong.wanbf550852009-06-09 06:09:53 +0000264TEST(ExpectCallSyntaxTest, WithIsOptional) {
shiqiane35fdd92008-12-10 05:08:54 +0000265 MockA a;
266
267 EXPECT_CALL(a, DoA(5))
268 .Times(0);
269 EXPECT_CALL(a, DoA(6))
zhanyong.wanbf550852009-06-09 06:09:53 +0000270 .With(_)
shiqiane35fdd92008-12-10 05:08:54 +0000271 .Times(0);
272}
273
zhanyong.wanbf550852009-06-09 06:09:53 +0000274TEST(ExpectCallSyntaxTest, WithCanAppearAtMostOnce) {
shiqiane35fdd92008-12-10 05:08:54 +0000275 MockA a;
276
277 EXPECT_NONFATAL_FAILURE({ // NOLINT
278 EXPECT_CALL(a, DoA(6))
zhanyong.wanbf550852009-06-09 06:09:53 +0000279 .With(_)
280 .With(_);
281 }, ".With() cannot appear more than once in an EXPECT_CALL()");
shiqiane35fdd92008-12-10 05:08:54 +0000282
283 a.DoA(6);
284}
285
zhanyong.wanbf550852009-06-09 06:09:53 +0000286TEST(ExpectCallSyntaxTest, WithMustBeFirstClause) {
shiqiane35fdd92008-12-10 05:08:54 +0000287 MockA a;
288
289 EXPECT_NONFATAL_FAILURE({ // NOLINT
290 EXPECT_CALL(a, DoA(1))
291 .Times(1)
zhanyong.wanbf550852009-06-09 06:09:53 +0000292 .With(_);
293 }, ".With() must be the first clause in an EXPECT_CALL()");
shiqiane35fdd92008-12-10 05:08:54 +0000294
295 a.DoA(1);
296
297 EXPECT_NONFATAL_FAILURE({ // NOLINT
298 EXPECT_CALL(a, DoA(2))
299 .WillOnce(Return())
zhanyong.wanbf550852009-06-09 06:09:53 +0000300 .With(_);
301 }, ".With() must be the first clause in an EXPECT_CALL()");
shiqiane35fdd92008-12-10 05:08:54 +0000302
303 a.DoA(2);
304}
305
306TEST(ExpectCallSyntaxTest, TimesCanBeInferred) {
307 MockA a;
308
309 EXPECT_CALL(a, DoA(1))
310 .WillOnce(Return());
311
312 EXPECT_CALL(a, DoA(2))
313 .WillOnce(Return())
314 .WillRepeatedly(Return());
315
316 a.DoA(1);
317 a.DoA(2);
318 a.DoA(2);
319}
320
321TEST(ExpectCallSyntaxTest, TimesCanAppearAtMostOnce) {
322 MockA a;
323
324 EXPECT_NONFATAL_FAILURE({ // NOLINT
325 EXPECT_CALL(a, DoA(1))
326 .Times(1)
327 .Times(2);
328 }, ".Times() cannot appear more than once in an EXPECT_CALL()");
329
330 a.DoA(1);
331 a.DoA(1);
332}
333
334TEST(ExpectCallSyntaxTest, TimesMustBeBeforeInSequence) {
335 MockA a;
336 Sequence s;
337
338 EXPECT_NONFATAL_FAILURE({ // NOLINT
339 EXPECT_CALL(a, DoA(1))
340 .InSequence(s)
341 .Times(1);
342 }, ".Times() cannot appear after ");
343
344 a.DoA(1);
345}
346
347TEST(ExpectCallSyntaxTest, InSequenceIsOptional) {
348 MockA a;
349 Sequence s;
350
351 EXPECT_CALL(a, DoA(1));
352 EXPECT_CALL(a, DoA(2))
353 .InSequence(s);
354
355 a.DoA(1);
356 a.DoA(2);
357}
358
359TEST(ExpectCallSyntaxTest, InSequenceCanAppearMultipleTimes) {
360 MockA a;
361 Sequence s1, s2;
362
363 EXPECT_CALL(a, DoA(1))
364 .InSequence(s1, s2)
365 .InSequence(s1);
366
367 a.DoA(1);
368}
369
zhanyong.wan41b9b0b2009-07-01 19:04:51 +0000370TEST(ExpectCallSyntaxTest, InSequenceMustBeBeforeAfter) {
371 MockA a;
372 Sequence s;
373
374 Expectation e = EXPECT_CALL(a, DoA(1))
375 .Times(AnyNumber());
376 EXPECT_NONFATAL_FAILURE({ // NOLINT
377 EXPECT_CALL(a, DoA(2))
378 .After(e)
379 .InSequence(s);
380 }, ".InSequence() cannot appear after ");
381
382 a.DoA(2);
383}
384
385TEST(ExpectCallSyntaxTest, InSequenceMustBeBeforeWillOnce) {
shiqiane35fdd92008-12-10 05:08:54 +0000386 MockA a;
387 Sequence s;
388
389 EXPECT_NONFATAL_FAILURE({ // NOLINT
390 EXPECT_CALL(a, DoA(1))
391 .WillOnce(Return())
392 .InSequence(s);
393 }, ".InSequence() cannot appear after ");
394
395 a.DoA(1);
396}
397
zhanyong.wan41b9b0b2009-07-01 19:04:51 +0000398TEST(ExpectCallSyntaxTest, AfterMustBeBeforeWillOnce) {
399 MockA a;
400
401 Expectation e = EXPECT_CALL(a, DoA(1));
402 EXPECT_NONFATAL_FAILURE({
403 EXPECT_CALL(a, DoA(2))
404 .WillOnce(Return())
405 .After(e);
406 }, ".After() cannot appear after ");
407
408 a.DoA(1);
409 a.DoA(2);
410}
411
shiqiane35fdd92008-12-10 05:08:54 +0000412TEST(ExpectCallSyntaxTest, WillIsOptional) {
413 MockA a;
414
415 EXPECT_CALL(a, DoA(1));
416 EXPECT_CALL(a, DoA(2))
417 .WillOnce(Return());
418
419 a.DoA(1);
420 a.DoA(2);
421}
422
423TEST(ExpectCallSyntaxTest, WillCanAppearMultipleTimes) {
424 MockA a;
425
426 EXPECT_CALL(a, DoA(1))
427 .Times(AnyNumber())
428 .WillOnce(Return())
429 .WillOnce(Return())
430 .WillOnce(Return());
431}
432
433TEST(ExpectCallSyntaxTest, WillMustBeBeforeWillRepeatedly) {
434 MockA a;
435
436 EXPECT_NONFATAL_FAILURE({ // NOLINT
437 EXPECT_CALL(a, DoA(1))
438 .WillRepeatedly(Return())
439 .WillOnce(Return());
440 }, ".WillOnce() cannot appear after ");
441
442 a.DoA(1);
443}
444
445TEST(ExpectCallSyntaxTest, WillRepeatedlyIsOptional) {
446 MockA a;
447
448 EXPECT_CALL(a, DoA(1))
449 .WillOnce(Return());
450 EXPECT_CALL(a, DoA(2))
451 .WillOnce(Return())
452 .WillRepeatedly(Return());
453
454 a.DoA(1);
455 a.DoA(2);
456 a.DoA(2);
457}
458
459TEST(ExpectCallSyntaxTest, WillRepeatedlyCannotAppearMultipleTimes) {
460 MockA a;
461
462 EXPECT_NONFATAL_FAILURE({ // NOLINT
463 EXPECT_CALL(a, DoA(1))
464 .WillRepeatedly(Return())
465 .WillRepeatedly(Return());
466 }, ".WillRepeatedly() cannot appear more than once in an "
467 "EXPECT_CALL()");
468}
469
470TEST(ExpectCallSyntaxTest, WillRepeatedlyMustBeBeforeRetiresOnSaturation) {
471 MockA a;
472
473 EXPECT_NONFATAL_FAILURE({ // NOLINT
474 EXPECT_CALL(a, DoA(1))
475 .RetiresOnSaturation()
476 .WillRepeatedly(Return());
477 }, ".WillRepeatedly() cannot appear after ");
478}
479
480TEST(ExpectCallSyntaxTest, RetiresOnSaturationIsOptional) {
481 MockA a;
482
483 EXPECT_CALL(a, DoA(1));
484 EXPECT_CALL(a, DoA(1))
485 .RetiresOnSaturation();
486
487 a.DoA(1);
488 a.DoA(1);
489}
490
491TEST(ExpectCallSyntaxTest, RetiresOnSaturationCannotAppearMultipleTimes) {
492 MockA a;
493
494 EXPECT_NONFATAL_FAILURE({ // NOLINT
495 EXPECT_CALL(a, DoA(1))
496 .RetiresOnSaturation()
497 .RetiresOnSaturation();
498 }, ".RetiresOnSaturation() cannot appear more than once");
499
500 a.DoA(1);
501}
502
503TEST(ExpectCallSyntaxTest, DefaultCardinalityIsOnce) {
504 {
505 MockA a;
506 EXPECT_CALL(a, DoA(1));
507 a.DoA(1);
508 }
509 EXPECT_NONFATAL_FAILURE({ // NOLINT
510 MockA a;
511 EXPECT_CALL(a, DoA(1));
512 }, "to be called once");
513 EXPECT_NONFATAL_FAILURE({ // NOLINT
514 MockA a;
515 EXPECT_CALL(a, DoA(1));
516 a.DoA(1);
517 a.DoA(1);
518 }, "to be called once");
519}
520
zhanyong.wan2516f602010-08-31 18:28:02 +0000521#if GTEST_HAS_STREAM_REDIRECTION
shiqiane35fdd92008-12-10 05:08:54 +0000522
523// Tests that Google Mock doesn't print a warning when the number of
524// WillOnce() is adequate.
525TEST(ExpectCallSyntaxTest, DoesNotWarnOnAdequateActionCount) {
zhanyong.wan470df422010-02-02 22:34:58 +0000526 CaptureStdout();
shiqiane35fdd92008-12-10 05:08:54 +0000527 {
528 MockB b;
529
530 // It's always fine to omit WillOnce() entirely.
531 EXPECT_CALL(b, DoB())
532 .Times(0);
533 EXPECT_CALL(b, DoB(1))
534 .Times(AtMost(1));
535 EXPECT_CALL(b, DoB(2))
536 .Times(1)
537 .WillRepeatedly(Return(1));
538
539 // It's fine for the number of WillOnce()s to equal the upper bound.
540 EXPECT_CALL(b, DoB(3))
541 .Times(Between(1, 2))
542 .WillOnce(Return(1))
543 .WillOnce(Return(2));
544
545 // It's fine for the number of WillOnce()s to be smaller than the
546 // upper bound when there is a WillRepeatedly().
547 EXPECT_CALL(b, DoB(4))
548 .Times(AtMost(3))
549 .WillOnce(Return(1))
550 .WillRepeatedly(Return(2));
551
552 // Satisfies the above expectations.
553 b.DoB(2);
554 b.DoB(3);
555 }
zhanyong.wan470df422010-02-02 22:34:58 +0000556 EXPECT_STREQ("", GetCapturedStdout().c_str());
shiqiane35fdd92008-12-10 05:08:54 +0000557}
558
559// Tests that Google Mock warns on having too many actions in an
560// expectation compared to its cardinality.
561TEST(ExpectCallSyntaxTest, WarnsOnTooManyActions) {
zhanyong.wan470df422010-02-02 22:34:58 +0000562 CaptureStdout();
shiqiane35fdd92008-12-10 05:08:54 +0000563 {
564 MockB b;
565
566 // Warns when the number of WillOnce()s is larger than the upper bound.
567 EXPECT_CALL(b, DoB())
568 .Times(0)
569 .WillOnce(Return(1)); // #1
570 EXPECT_CALL(b, DoB())
571 .Times(AtMost(1))
572 .WillOnce(Return(1))
573 .WillOnce(Return(2)); // #2
574 EXPECT_CALL(b, DoB(1))
575 .Times(1)
576 .WillOnce(Return(1))
577 .WillOnce(Return(2))
578 .RetiresOnSaturation(); // #3
579
580 // Warns when the number of WillOnce()s equals the upper bound and
581 // there is a WillRepeatedly().
582 EXPECT_CALL(b, DoB())
583 .Times(0)
584 .WillRepeatedly(Return(1)); // #4
585 EXPECT_CALL(b, DoB(2))
586 .Times(1)
587 .WillOnce(Return(1))
588 .WillRepeatedly(Return(2)); // #5
589
590 // Satisfies the above expectations.
591 b.DoB(1);
592 b.DoB(2);
593 }
zhanyong.wan470df422010-02-02 22:34:58 +0000594 const String output = GetCapturedStdout();
vladlosev6c54a5e2009-10-21 06:15:34 +0000595 EXPECT_PRED_FORMAT2(
596 IsSubstring,
597 "Too many actions specified in EXPECT_CALL(b, DoB())...\n"
598 "Expected to be never called, but has 1 WillOnce().",
599 output); // #1
600 EXPECT_PRED_FORMAT2(
601 IsSubstring,
602 "Too many actions specified in EXPECT_CALL(b, DoB())...\n"
603 "Expected to be called at most once, "
604 "but has 2 WillOnce()s.",
605 output); // #2
606 EXPECT_PRED_FORMAT2(
607 IsSubstring,
608 "Too many actions specified in EXPECT_CALL(b, DoB(1))...\n"
609 "Expected to be called once, but has 2 WillOnce()s.",
610 output); // #3
611 EXPECT_PRED_FORMAT2(
612 IsSubstring,
613 "Too many actions specified in EXPECT_CALL(b, DoB())...\n"
614 "Expected to be never called, but has 0 WillOnce()s "
615 "and a WillRepeatedly().",
616 output); // #4
617 EXPECT_PRED_FORMAT2(
618 IsSubstring,
619 "Too many actions specified in EXPECT_CALL(b, DoB(2))...\n"
620 "Expected to be called once, but has 1 WillOnce() "
621 "and a WillRepeatedly().",
622 output); // #5
shiqiane35fdd92008-12-10 05:08:54 +0000623}
624
625// Tests that Google Mock warns on having too few actions in an
626// expectation compared to its cardinality.
627TEST(ExpectCallSyntaxTest, WarnsOnTooFewActions) {
628 MockB b;
629
630 EXPECT_CALL(b, DoB())
631 .Times(Between(2, 3))
632 .WillOnce(Return(1));
633
zhanyong.wan470df422010-02-02 22:34:58 +0000634 CaptureStdout();
shiqiane35fdd92008-12-10 05:08:54 +0000635 b.DoB();
zhanyong.wan470df422010-02-02 22:34:58 +0000636 const String output = GetCapturedStdout();
vladlosev6c54a5e2009-10-21 06:15:34 +0000637 EXPECT_PRED_FORMAT2(
638 IsSubstring,
639 "Too few actions specified in EXPECT_CALL(b, DoB())...\n"
640 "Expected to be called between 2 and 3 times, "
641 "but has only 1 WillOnce().",
642 output);
shiqiane35fdd92008-12-10 05:08:54 +0000643 b.DoB();
644}
645
zhanyong.wan2516f602010-08-31 18:28:02 +0000646#endif // GTEST_HAS_STREAM_REDIRECTION
shiqiane35fdd92008-12-10 05:08:54 +0000647
648// Tests the semantics of ON_CALL().
649
650// Tests that the built-in default action is taken when no ON_CALL()
651// is specified.
652TEST(OnCallTest, TakesBuiltInDefaultActionWhenNoOnCall) {
653 MockB b;
654 EXPECT_CALL(b, DoB());
655
656 EXPECT_EQ(0, b.DoB());
657}
658
659// Tests that the built-in default action is taken when no ON_CALL()
660// matches the invocation.
661TEST(OnCallTest, TakesBuiltInDefaultActionWhenNoOnCallMatches) {
662 MockB b;
663 ON_CALL(b, DoB(1))
664 .WillByDefault(Return(1));
665 EXPECT_CALL(b, DoB(_));
666
667 EXPECT_EQ(0, b.DoB(2));
668}
669
670// Tests that the last matching ON_CALL() action is taken.
671TEST(OnCallTest, PicksLastMatchingOnCall) {
672 MockB b;
673 ON_CALL(b, DoB(_))
674 .WillByDefault(Return(3));
675 ON_CALL(b, DoB(2))
676 .WillByDefault(Return(2));
677 ON_CALL(b, DoB(1))
678 .WillByDefault(Return(1));
679 EXPECT_CALL(b, DoB(_));
680
681 EXPECT_EQ(2, b.DoB(2));
682}
683
684// Tests the semantics of EXPECT_CALL().
685
686// Tests that any call is allowed when no EXPECT_CALL() is specified.
687TEST(ExpectCallTest, AllowsAnyCallWhenNoSpec) {
688 MockB b;
689 EXPECT_CALL(b, DoB());
690 // There is no expectation on DoB(int).
691
692 b.DoB();
693
694 // DoB(int) can be called any number of times.
695 b.DoB(1);
696 b.DoB(2);
697}
698
699// Tests that the last matching EXPECT_CALL() fires.
700TEST(ExpectCallTest, PicksLastMatchingExpectCall) {
701 MockB b;
702 EXPECT_CALL(b, DoB(_))
703 .WillRepeatedly(Return(2));
704 EXPECT_CALL(b, DoB(1))
705 .WillRepeatedly(Return(1));
706
707 EXPECT_EQ(1, b.DoB(1));
708}
709
710// Tests lower-bound violation.
711TEST(ExpectCallTest, CatchesTooFewCalls) {
712 EXPECT_NONFATAL_FAILURE({ // NOLINT
713 MockB b;
714 EXPECT_CALL(b, DoB(5))
715 .Times(AtLeast(2));
716
717 b.DoB(5);
vladlosev6c54a5e2009-10-21 06:15:34 +0000718 }, "Actual function call count doesn't match EXPECT_CALL(b, DoB(5))...\n"
shiqiane35fdd92008-12-10 05:08:54 +0000719 " Expected: to be called at least twice\n"
720 " Actual: called once - unsatisfied and active");
721}
722
723// Tests that the cardinality can be inferred when no Times(...) is
724// specified.
725TEST(ExpectCallTest, InfersCardinalityWhenThereIsNoWillRepeatedly) {
726 {
727 MockB b;
728 EXPECT_CALL(b, DoB())
729 .WillOnce(Return(1))
730 .WillOnce(Return(2));
731
732 EXPECT_EQ(1, b.DoB());
733 EXPECT_EQ(2, b.DoB());
734 }
735
736 EXPECT_NONFATAL_FAILURE({ // NOLINT
737 MockB b;
738 EXPECT_CALL(b, DoB())
739 .WillOnce(Return(1))
740 .WillOnce(Return(2));
741
742 EXPECT_EQ(1, b.DoB());
743 }, "to be called twice");
744
745 { // NOLINT
746 MockB b;
747 EXPECT_CALL(b, DoB())
748 .WillOnce(Return(1))
749 .WillOnce(Return(2));
750
751 EXPECT_EQ(1, b.DoB());
752 EXPECT_EQ(2, b.DoB());
753 EXPECT_NONFATAL_FAILURE(b.DoB(), "to be called twice");
754 }
755}
756
757TEST(ExpectCallTest, InfersCardinality1WhenThereIsWillRepeatedly) {
758 {
759 MockB b;
760 EXPECT_CALL(b, DoB())
761 .WillOnce(Return(1))
762 .WillRepeatedly(Return(2));
763
764 EXPECT_EQ(1, b.DoB());
765 }
766
767 { // NOLINT
768 MockB b;
769 EXPECT_CALL(b, DoB())
770 .WillOnce(Return(1))
771 .WillRepeatedly(Return(2));
772
773 EXPECT_EQ(1, b.DoB());
774 EXPECT_EQ(2, b.DoB());
775 EXPECT_EQ(2, b.DoB());
776 }
777
778 EXPECT_NONFATAL_FAILURE({ // NOLINT
779 MockB b;
780 EXPECT_CALL(b, DoB())
781 .WillOnce(Return(1))
782 .WillRepeatedly(Return(2));
783 }, "to be called at least once");
784}
785
786// Tests that the n-th action is taken for the n-th matching
787// invocation.
788TEST(ExpectCallTest, NthMatchTakesNthAction) {
789 MockB b;
790 EXPECT_CALL(b, DoB())
791 .WillOnce(Return(1))
792 .WillOnce(Return(2))
793 .WillOnce(Return(3));
794
795 EXPECT_EQ(1, b.DoB());
796 EXPECT_EQ(2, b.DoB());
797 EXPECT_EQ(3, b.DoB());
798}
799
zhanyong.wan2516f602010-08-31 18:28:02 +0000800#if GTEST_HAS_STREAM_REDIRECTION
shiqiane35fdd92008-12-10 05:08:54 +0000801
802// Tests that the default action is taken when the WillOnce(...) list is
803// exhausted and there is no WillRepeatedly().
804TEST(ExpectCallTest, TakesDefaultActionWhenWillListIsExhausted) {
805 MockB b;
806 EXPECT_CALL(b, DoB(_))
807 .Times(1);
808 EXPECT_CALL(b, DoB())
809 .Times(AnyNumber())
810 .WillOnce(Return(1))
811 .WillOnce(Return(2));
812
zhanyong.wan470df422010-02-02 22:34:58 +0000813 CaptureStdout();
shiqiane35fdd92008-12-10 05:08:54 +0000814 EXPECT_EQ(0, b.DoB(1)); // Shouldn't generate a warning as the
815 // expectation has no action clause at all.
816 EXPECT_EQ(1, b.DoB());
817 EXPECT_EQ(2, b.DoB());
zhanyong.wan470df422010-02-02 22:34:58 +0000818 const String output1 = GetCapturedStdout();
819 EXPECT_STREQ("", output1.c_str());
shiqiane35fdd92008-12-10 05:08:54 +0000820
zhanyong.wan470df422010-02-02 22:34:58 +0000821 CaptureStdout();
shiqiane35fdd92008-12-10 05:08:54 +0000822 EXPECT_EQ(0, b.DoB());
823 EXPECT_EQ(0, b.DoB());
zhanyong.wan470df422010-02-02 22:34:58 +0000824 const String output2 = GetCapturedStdout();
825 EXPECT_THAT(output2.c_str(),
826 HasSubstr("Actions ran out in EXPECT_CALL(b, DoB())...\n"
827 "Called 3 times, but only 2 WillOnce()s are specified"
828 " - returning default value."));
829 EXPECT_THAT(output2.c_str(),
830 HasSubstr("Actions ran out in EXPECT_CALL(b, DoB())...\n"
831 "Called 4 times, but only 2 WillOnce()s are specified"
832 " - returning default value."));
shiqiane35fdd92008-12-10 05:08:54 +0000833}
834
zhanyong.wan2516f602010-08-31 18:28:02 +0000835#endif // GTEST_HAS_STREAM_REDIRECTION
shiqiane35fdd92008-12-10 05:08:54 +0000836
837// Tests that the WillRepeatedly() action is taken when the WillOnce(...)
838// list is exhausted.
839TEST(ExpectCallTest, TakesRepeatedActionWhenWillListIsExhausted) {
840 MockB b;
841 EXPECT_CALL(b, DoB())
842 .WillOnce(Return(1))
843 .WillRepeatedly(Return(2));
844
845 EXPECT_EQ(1, b.DoB());
846 EXPECT_EQ(2, b.DoB());
847 EXPECT_EQ(2, b.DoB());
848}
849
850// Tests that an uninteresting call performs the default action.
851TEST(UninterestingCallTest, DoesDefaultAction) {
852 // When there is an ON_CALL() statement, the action specified by it
853 // should be taken.
854 MockA a;
855 ON_CALL(a, Binary(_, _))
856 .WillByDefault(Return(true));
857 EXPECT_TRUE(a.Binary(1, 2));
858
859 // When there is no ON_CALL(), the default value for the return type
860 // should be returned.
861 MockB b;
862 EXPECT_EQ(0, b.DoB());
863}
864
865// Tests that an unexpected call performs the default action.
866TEST(UnexpectedCallTest, DoesDefaultAction) {
867 // When there is an ON_CALL() statement, the action specified by it
868 // should be taken.
869 MockA a;
870 ON_CALL(a, Binary(_, _))
871 .WillByDefault(Return(true));
872 EXPECT_CALL(a, Binary(0, 0));
873 a.Binary(0, 0);
874 bool result = false;
875 EXPECT_NONFATAL_FAILURE(result = a.Binary(1, 2),
876 "Unexpected mock function call");
877 EXPECT_TRUE(result);
878
879 // When there is no ON_CALL(), the default value for the return type
880 // should be returned.
881 MockB b;
882 EXPECT_CALL(b, DoB(0))
883 .Times(0);
884 int n = -1;
885 EXPECT_NONFATAL_FAILURE(n = b.DoB(1),
886 "Unexpected mock function call");
887 EXPECT_EQ(0, n);
888}
889
890// Tests that when an unexpected void function generates the right
891// failure message.
892TEST(UnexpectedCallTest, GeneratesFailureForVoidFunction) {
893 // First, tests the message when there is only one EXPECT_CALL().
894 MockA a1;
895 EXPECT_CALL(a1, DoA(1));
896 a1.DoA(1);
897 // Ideally we should match the failure message against a regex, but
898 // EXPECT_NONFATAL_FAILURE doesn't support that, so we test for
899 // multiple sub-strings instead.
900 EXPECT_NONFATAL_FAILURE(
901 a1.DoA(9),
902 "Unexpected mock function call - returning directly.\n"
903 " Function call: DoA(9)\n"
904 "Google Mock tried the following 1 expectation, but it didn't match:");
905 EXPECT_NONFATAL_FAILURE(
906 a1.DoA(9),
907 " Expected arg #0: is equal to 1\n"
908 " Actual: 9\n"
909 " Expected: to be called once\n"
910 " Actual: called once - saturated and active");
911
912 // Next, tests the message when there are more than one EXPECT_CALL().
913 MockA a2;
914 EXPECT_CALL(a2, DoA(1));
915 EXPECT_CALL(a2, DoA(3));
916 a2.DoA(1);
917 EXPECT_NONFATAL_FAILURE(
918 a2.DoA(2),
919 "Unexpected mock function call - returning directly.\n"
920 " Function call: DoA(2)\n"
921 "Google Mock tried the following 2 expectations, but none matched:");
922 EXPECT_NONFATAL_FAILURE(
923 a2.DoA(2),
vladlosev6c54a5e2009-10-21 06:15:34 +0000924 "tried expectation #0: EXPECT_CALL(a2, DoA(1))...\n"
shiqiane35fdd92008-12-10 05:08:54 +0000925 " Expected arg #0: is equal to 1\n"
926 " Actual: 2\n"
927 " Expected: to be called once\n"
928 " Actual: called once - saturated and active");
929 EXPECT_NONFATAL_FAILURE(
930 a2.DoA(2),
vladlosev6c54a5e2009-10-21 06:15:34 +0000931 "tried expectation #1: EXPECT_CALL(a2, DoA(3))...\n"
shiqiane35fdd92008-12-10 05:08:54 +0000932 " Expected arg #0: is equal to 3\n"
933 " Actual: 2\n"
934 " Expected: to be called once\n"
935 " Actual: never called - unsatisfied and active");
936 a2.DoA(3);
937}
938
939// Tests that an unexpected non-void function generates the right
940// failure message.
941TEST(UnexpectedCallTest, GeneartesFailureForNonVoidFunction) {
942 MockB b1;
943 EXPECT_CALL(b1, DoB(1));
944 b1.DoB(1);
945 EXPECT_NONFATAL_FAILURE(
946 b1.DoB(2),
947 "Unexpected mock function call - returning default value.\n"
948 " Function call: DoB(2)\n"
949 " Returns: 0\n"
950 "Google Mock tried the following 1 expectation, but it didn't match:");
951 EXPECT_NONFATAL_FAILURE(
952 b1.DoB(2),
953 " Expected arg #0: is equal to 1\n"
954 " Actual: 2\n"
955 " Expected: to be called once\n"
956 " Actual: called once - saturated and active");
957}
958
959// Tests that Google Mock explains that an retired expectation doesn't
960// match the call.
961TEST(UnexpectedCallTest, RetiredExpectation) {
962 MockB b;
963 EXPECT_CALL(b, DoB(1))
964 .RetiresOnSaturation();
965
966 b.DoB(1);
967 EXPECT_NONFATAL_FAILURE(
968 b.DoB(1),
969 " Expected: the expectation is active\n"
970 " Actual: it is retired");
971}
972
973// Tests that Google Mock explains that an expectation that doesn't
974// match the arguments doesn't match the call.
975TEST(UnexpectedCallTest, UnmatchedArguments) {
976 MockB b;
977 EXPECT_CALL(b, DoB(1));
978
979 EXPECT_NONFATAL_FAILURE(
980 b.DoB(2),
981 " Expected arg #0: is equal to 1\n"
982 " Actual: 2\n");
983 b.DoB(1);
984}
985
shiqiane35fdd92008-12-10 05:08:54 +0000986// Tests that Google Mock explains that an expectation with
987// unsatisfied pre-requisites doesn't match the call.
988TEST(UnexpectedCallTest, UnsatisifiedPrerequisites) {
989 Sequence s1, s2;
990 MockB b;
991 EXPECT_CALL(b, DoB(1))
992 .InSequence(s1);
993 EXPECT_CALL(b, DoB(2))
994 .Times(AnyNumber())
995 .InSequence(s1);
996 EXPECT_CALL(b, DoB(3))
997 .InSequence(s2);
998 EXPECT_CALL(b, DoB(4))
999 .InSequence(s1, s2);
1000
1001 ::testing::TestPartResultArray failures;
1002 {
1003 ::testing::ScopedFakeTestPartResultReporter reporter(&failures);
1004 b.DoB(4);
1005 // Now 'failures' contains the Google Test failures generated by
1006 // the above statement.
1007 }
1008
1009 // There should be one non-fatal failure.
1010 ASSERT_EQ(1, failures.size());
1011 const ::testing::TestPartResult& r = failures.GetTestPartResult(0);
zhanyong.wanbbd6e102009-09-18 18:17:19 +00001012 EXPECT_EQ(::testing::TestPartResult::kNonFatalFailure, r.type());
shiqiane35fdd92008-12-10 05:08:54 +00001013
1014 // Verifies that the failure message contains the two unsatisfied
1015 // pre-requisites but not the satisfied one.
zhanyong.wand14aaed2010-01-14 05:36:32 +00001016#if GTEST_USES_PCRE
1017 EXPECT_THAT(r.message(), ContainsRegex(
shiqiane35fdd92008-12-10 05:08:54 +00001018 // PCRE has trouble using (.|\n) to match any character, but
1019 // supports the (?s) prefix for using . to match any character.
1020 "(?s)the following immediate pre-requisites are not satisfied:\n"
1021 ".*: pre-requisite #0\n"
zhanyong.wand14aaed2010-01-14 05:36:32 +00001022 ".*: pre-requisite #1"));
1023#elif GTEST_USES_POSIX_RE
1024 EXPECT_THAT(r.message(), ContainsRegex(
shiqiane35fdd92008-12-10 05:08:54 +00001025 // POSIX RE doesn't understand the (?s) prefix, but has no trouble
1026 // with (.|\n).
1027 "the following immediate pre-requisites are not satisfied:\n"
1028 "(.|\n)*: pre-requisite #0\n"
zhanyong.wand14aaed2010-01-14 05:36:32 +00001029 "(.|\n)*: pre-requisite #1"));
1030#else
1031 // We can only use Google Test's own simple regex.
1032 EXPECT_THAT(r.message(), ContainsRegex(
1033 "the following immediate pre-requisites are not satisfied:"));
1034 EXPECT_THAT(r.message(), ContainsRegex(": pre-requisite #0"));
1035 EXPECT_THAT(r.message(), ContainsRegex(": pre-requisite #1"));
1036#endif // GTEST_USES_PCRE
shiqiane35fdd92008-12-10 05:08:54 +00001037
shiqiane35fdd92008-12-10 05:08:54 +00001038 b.DoB(1);
1039 b.DoB(3);
1040 b.DoB(4);
1041}
1042
zhanyong.wan5b95fa72009-01-27 22:28:45 +00001043TEST(UndefinedReturnValueTest, ReturnValueIsMandatory) {
1044 MockA a;
1045 // TODO(wan@google.com): We should really verify the output message,
1046 // but we cannot yet due to that EXPECT_DEATH only captures stderr
1047 // while Google Mock logs to stdout.
zhanyong.wan04d6ed82009-09-11 07:01:08 +00001048 EXPECT_DEATH_IF_SUPPORTED(a.ReturnResult(1), "");
zhanyong.wan5b95fa72009-01-27 22:28:45 +00001049}
1050
shiqiane35fdd92008-12-10 05:08:54 +00001051// Tests that an excessive call (one whose arguments match the
1052// matchers but is called too many times) performs the default action.
1053TEST(ExcessiveCallTest, DoesDefaultAction) {
1054 // When there is an ON_CALL() statement, the action specified by it
1055 // should be taken.
1056 MockA a;
1057 ON_CALL(a, Binary(_, _))
1058 .WillByDefault(Return(true));
1059 EXPECT_CALL(a, Binary(0, 0));
1060 a.Binary(0, 0);
1061 bool result = false;
1062 EXPECT_NONFATAL_FAILURE(result = a.Binary(0, 0),
1063 "Mock function called more times than expected");
1064 EXPECT_TRUE(result);
1065
1066 // When there is no ON_CALL(), the default value for the return type
1067 // should be returned.
1068 MockB b;
1069 EXPECT_CALL(b, DoB(0))
1070 .Times(0);
1071 int n = -1;
1072 EXPECT_NONFATAL_FAILURE(n = b.DoB(0),
1073 "Mock function called more times than expected");
1074 EXPECT_EQ(0, n);
1075}
1076
1077// Tests that when a void function is called too many times,
1078// the failure message contains the argument values.
1079TEST(ExcessiveCallTest, GeneratesFailureForVoidFunction) {
1080 MockA a;
1081 EXPECT_CALL(a, DoA(_))
1082 .Times(0);
1083 EXPECT_NONFATAL_FAILURE(
1084 a.DoA(9),
1085 "Mock function called more times than expected - returning directly.\n"
1086 " Function call: DoA(9)\n"
1087 " Expected: to be never called\n"
1088 " Actual: called once - over-saturated and active");
1089}
1090
1091// Tests that when a non-void function is called too many times, the
1092// failure message contains the argument values and the return value.
1093TEST(ExcessiveCallTest, GeneratesFailureForNonVoidFunction) {
1094 MockB b;
1095 EXPECT_CALL(b, DoB(_));
1096 b.DoB(1);
1097 EXPECT_NONFATAL_FAILURE(
1098 b.DoB(2),
1099 "Mock function called more times than expected - "
1100 "returning default value.\n"
1101 " Function call: DoB(2)\n"
1102 " Returns: 0\n"
1103 " Expected: to be called once\n"
1104 " Actual: called twice - over-saturated and active");
1105}
1106
1107// Tests using sequences.
1108
1109TEST(InSequenceTest, AllExpectationInScopeAreInSequence) {
1110 MockA a;
1111 {
1112 InSequence dummy;
1113
1114 EXPECT_CALL(a, DoA(1));
1115 EXPECT_CALL(a, DoA(2));
1116 }
1117
1118 EXPECT_NONFATAL_FAILURE({ // NOLINT
1119 a.DoA(2);
1120 }, "Unexpected mock function call");
1121
1122 a.DoA(1);
1123 a.DoA(2);
1124}
1125
1126TEST(InSequenceTest, NestedInSequence) {
1127 MockA a;
1128 {
1129 InSequence dummy;
1130
1131 EXPECT_CALL(a, DoA(1));
1132 {
1133 InSequence dummy2;
1134
1135 EXPECT_CALL(a, DoA(2));
1136 EXPECT_CALL(a, DoA(3));
1137 }
1138 }
1139
1140 EXPECT_NONFATAL_FAILURE({ // NOLINT
1141 a.DoA(1);
1142 a.DoA(3);
1143 }, "Unexpected mock function call");
1144
1145 a.DoA(2);
1146 a.DoA(3);
1147}
1148
1149TEST(InSequenceTest, ExpectationsOutOfScopeAreNotAffected) {
1150 MockA a;
1151 {
1152 InSequence dummy;
1153
1154 EXPECT_CALL(a, DoA(1));
1155 EXPECT_CALL(a, DoA(2));
1156 }
1157 EXPECT_CALL(a, DoA(3));
1158
1159 EXPECT_NONFATAL_FAILURE({ // NOLINT
1160 a.DoA(2);
1161 }, "Unexpected mock function call");
1162
1163 a.DoA(3);
1164 a.DoA(1);
1165 a.DoA(2);
1166}
1167
1168// Tests that any order is allowed when no sequence is used.
1169TEST(SequenceTest, AnyOrderIsOkByDefault) {
1170 {
1171 MockA a;
1172 MockB b;
1173
1174 EXPECT_CALL(a, DoA(1));
1175 EXPECT_CALL(b, DoB())
1176 .Times(AnyNumber());
1177
1178 a.DoA(1);
1179 b.DoB();
1180 }
1181
1182 { // NOLINT
1183 MockA a;
1184 MockB b;
1185
1186 EXPECT_CALL(a, DoA(1));
1187 EXPECT_CALL(b, DoB())
1188 .Times(AnyNumber());
1189
1190 b.DoB();
1191 a.DoA(1);
1192 }
1193}
1194
shiqiane35fdd92008-12-10 05:08:54 +00001195// Tests that the calls must be in strict order when a complete order
1196// is specified.
1197TEST(SequenceTest, CallsMustBeInStrictOrderWhenSaidSo) {
1198 MockA a;
1199 Sequence s;
1200
1201 EXPECT_CALL(a, ReturnResult(1))
1202 .InSequence(s)
1203 .WillOnce(Return(Result()));
1204
1205 EXPECT_CALL(a, ReturnResult(2))
1206 .InSequence(s)
1207 .WillOnce(Return(Result()));
1208
1209 EXPECT_CALL(a, ReturnResult(3))
1210 .InSequence(s)
1211 .WillOnce(Return(Result()));
1212
zhanyong.wan04d6ed82009-09-11 07:01:08 +00001213 EXPECT_DEATH_IF_SUPPORTED({
shiqiane35fdd92008-12-10 05:08:54 +00001214 a.ReturnResult(1);
1215 a.ReturnResult(3);
1216 a.ReturnResult(2);
1217 }, "");
1218
zhanyong.wan04d6ed82009-09-11 07:01:08 +00001219 EXPECT_DEATH_IF_SUPPORTED({
shiqiane35fdd92008-12-10 05:08:54 +00001220 a.ReturnResult(2);
1221 a.ReturnResult(1);
1222 a.ReturnResult(3);
1223 }, "");
1224
1225 a.ReturnResult(1);
1226 a.ReturnResult(2);
1227 a.ReturnResult(3);
1228}
1229
1230// Tests specifying a DAG using multiple sequences.
1231TEST(SequenceTest, CallsMustConformToSpecifiedDag) {
1232 MockA a;
1233 MockB b;
1234 Sequence x, y;
1235
1236 EXPECT_CALL(a, ReturnResult(1))
1237 .InSequence(x)
1238 .WillOnce(Return(Result()));
1239
1240 EXPECT_CALL(b, DoB())
1241 .Times(2)
1242 .InSequence(y);
1243
1244 EXPECT_CALL(a, ReturnResult(2))
1245 .InSequence(x, y)
1246 .WillRepeatedly(Return(Result()));
1247
1248 EXPECT_CALL(a, ReturnResult(3))
1249 .InSequence(x)
1250 .WillOnce(Return(Result()));
1251
zhanyong.wan04d6ed82009-09-11 07:01:08 +00001252 EXPECT_DEATH_IF_SUPPORTED({
shiqiane35fdd92008-12-10 05:08:54 +00001253 a.ReturnResult(1);
1254 b.DoB();
1255 a.ReturnResult(2);
1256 }, "");
1257
zhanyong.wan04d6ed82009-09-11 07:01:08 +00001258 EXPECT_DEATH_IF_SUPPORTED({
shiqiane35fdd92008-12-10 05:08:54 +00001259 a.ReturnResult(2);
1260 }, "");
1261
zhanyong.wan04d6ed82009-09-11 07:01:08 +00001262 EXPECT_DEATH_IF_SUPPORTED({
shiqiane35fdd92008-12-10 05:08:54 +00001263 a.ReturnResult(3);
1264 }, "");
1265
zhanyong.wan04d6ed82009-09-11 07:01:08 +00001266 EXPECT_DEATH_IF_SUPPORTED({
shiqiane35fdd92008-12-10 05:08:54 +00001267 a.ReturnResult(1);
1268 b.DoB();
1269 b.DoB();
1270 a.ReturnResult(3);
1271 a.ReturnResult(2);
1272 }, "");
1273
1274 b.DoB();
1275 a.ReturnResult(1);
1276 b.DoB();
1277 a.ReturnResult(3);
1278}
1279
shiqiane35fdd92008-12-10 05:08:54 +00001280TEST(SequenceTest, Retirement) {
1281 MockA a;
1282 Sequence s;
1283
1284 EXPECT_CALL(a, DoA(1))
1285 .InSequence(s);
1286 EXPECT_CALL(a, DoA(_))
1287 .InSequence(s)
1288 .RetiresOnSaturation();
1289 EXPECT_CALL(a, DoA(1))
1290 .InSequence(s);
1291
1292 a.DoA(1);
1293 a.DoA(2);
1294 a.DoA(1);
1295}
1296
zhanyong.wan41b9b0b2009-07-01 19:04:51 +00001297// Tests Expectation.
1298
1299TEST(ExpectationTest, ConstrutorsWork) {
1300 MockA a;
1301 Expectation e1; // Default ctor.
1302 Expectation e2 = EXPECT_CALL(a, DoA(1)); // Ctor from EXPECT_CALL.
1303 Expectation e3 = e2; // Copy ctor.
1304
1305 EXPECT_THAT(e1, Ne(e2));
1306 EXPECT_THAT(e2, Eq(e3));
1307 a.DoA(1);
1308}
1309
1310TEST(ExpectationTest, AssignmentWorks) {
1311 MockA a;
1312 Expectation e1;
1313 Expectation e2 = EXPECT_CALL(a, DoA(1));
1314
1315 EXPECT_THAT(e1, Ne(e2));
1316
1317 e1 = e2;
1318 EXPECT_THAT(e1, Eq(e2));
1319
1320 a.DoA(1);
1321}
1322
1323// Tests ExpectationSet.
1324
1325TEST(ExpectationSetTest, MemberTypesAreCorrect) {
1326 ::testing::StaticAssertTypeEq<Expectation, ExpectationSet::value_type>();
1327}
1328
1329TEST(ExpectationSetTest, ConstructorsWork) {
1330 MockA a;
1331
1332 Expectation e1;
1333 const Expectation e2;
1334 ExpectationSet es1; // Default ctor.
1335 ExpectationSet es2 = EXPECT_CALL(a, DoA(1)); // Ctor from EXPECT_CALL.
1336 ExpectationSet es3 = e1; // Ctor from Expectation.
1337 ExpectationSet es4(e1); // Ctor from Expectation; alternative syntax.
1338 ExpectationSet es5 = e2; // Ctor from const Expectation.
1339 ExpectationSet es6(e2); // Ctor from const Expectation; alternative syntax.
1340 ExpectationSet es7 = es2; // Copy ctor.
1341
1342 EXPECT_EQ(0, es1.size());
1343 EXPECT_EQ(1, es2.size());
1344 EXPECT_EQ(1, es3.size());
1345 EXPECT_EQ(1, es4.size());
1346 EXPECT_EQ(1, es5.size());
1347 EXPECT_EQ(1, es6.size());
1348 EXPECT_EQ(1, es7.size());
1349
1350 EXPECT_THAT(es3, Ne(es2));
1351 EXPECT_THAT(es4, Eq(es3));
1352 EXPECT_THAT(es5, Eq(es4));
1353 EXPECT_THAT(es6, Eq(es5));
1354 EXPECT_THAT(es7, Eq(es2));
1355 a.DoA(1);
1356}
1357
1358TEST(ExpectationSetTest, AssignmentWorks) {
1359 ExpectationSet es1;
1360 ExpectationSet es2 = Expectation();
1361
1362 es1 = es2;
1363 EXPECT_EQ(1, es1.size());
1364 EXPECT_THAT(*(es1.begin()), Eq(Expectation()));
1365 EXPECT_THAT(es1, Eq(es2));
1366}
1367
1368TEST(ExpectationSetTest, InsertionWorks) {
1369 ExpectationSet es1;
1370 Expectation e1;
1371 es1 += e1;
1372 EXPECT_EQ(1, es1.size());
1373 EXPECT_THAT(*(es1.begin()), Eq(e1));
1374
1375 MockA a;
1376 Expectation e2 = EXPECT_CALL(a, DoA(1));
1377 es1 += e2;
1378 EXPECT_EQ(2, es1.size());
1379
1380 ExpectationSet::const_iterator it1 = es1.begin();
1381 ExpectationSet::const_iterator it2 = it1;
1382 ++it2;
1383 EXPECT_TRUE(*it1 == e1 || *it2 == e1); // e1 must be in the set.
1384 EXPECT_TRUE(*it1 == e2 || *it2 == e2); // e2 must be in the set too.
1385 a.DoA(1);
1386}
1387
1388TEST(ExpectationSetTest, SizeWorks) {
1389 ExpectationSet es;
1390 EXPECT_EQ(0, es.size());
1391
1392 es += Expectation();
1393 EXPECT_EQ(1, es.size());
1394
1395 MockA a;
1396 es += EXPECT_CALL(a, DoA(1));
1397 EXPECT_EQ(2, es.size());
1398
1399 a.DoA(1);
1400}
1401
1402TEST(ExpectationSetTest, IsEnumerable) {
1403 ExpectationSet es;
1404 EXPECT_THAT(es.begin(), Eq(es.end()));
1405
1406 es += Expectation();
1407 ExpectationSet::const_iterator it = es.begin();
1408 EXPECT_THAT(it, Ne(es.end()));
1409 EXPECT_THAT(*it, Eq(Expectation()));
1410 ++it;
1411 EXPECT_THAT(it, Eq(es.end()));
1412}
1413
1414// Tests the .After() clause.
1415
1416TEST(AfterTest, SucceedsWhenPartialOrderIsSatisfied) {
1417 MockA a;
1418 ExpectationSet es;
1419 es += EXPECT_CALL(a, DoA(1));
1420 es += EXPECT_CALL(a, DoA(2));
1421 EXPECT_CALL(a, DoA(3))
1422 .After(es);
1423
1424 a.DoA(1);
1425 a.DoA(2);
1426 a.DoA(3);
1427}
1428
1429TEST(AfterTest, SucceedsWhenTotalOrderIsSatisfied) {
1430 MockA a;
1431 MockB b;
1432 // The following also verifies that const Expectation objects work
1433 // too. Do not remove the const modifiers.
1434 const Expectation e1 = EXPECT_CALL(a, DoA(1));
1435 const Expectation e2 = EXPECT_CALL(b, DoB())
1436 .Times(2)
1437 .After(e1);
1438 EXPECT_CALL(a, DoA(2)).After(e2);
1439
1440 a.DoA(1);
1441 b.DoB();
1442 b.DoB();
1443 a.DoA(2);
1444}
1445
1446// Calls must be in strict order when specified so.
zhanyong.wan2b43a9e2009-08-31 23:51:23 +00001447TEST(AfterDeathTest, CallsMustBeInStrictOrderWhenSpecifiedSo) {
zhanyong.wan41b9b0b2009-07-01 19:04:51 +00001448 MockA a;
1449 MockB b;
1450 Expectation e1 = EXPECT_CALL(a, DoA(1));
1451 Expectation e2 = EXPECT_CALL(b, DoB())
1452 .Times(2)
1453 .After(e1);
1454 EXPECT_CALL(a, ReturnResult(2))
1455 .After(e2)
1456 .WillOnce(Return(Result()));
1457
1458 a.DoA(1);
1459 // If a call to ReturnResult() violates the specified order, no
1460 // matching expectation will be found, and thus the default action
1461 // will be done. Since the return type of ReturnResult() is not a
1462 // built-in type, gmock won't know what to return and will thus
1463 // abort the program. Therefore a death test can tell us whether
1464 // gmock catches the order violation correctly.
1465 //
1466 // gtest and gmock print messages to stdout, which isn't captured by
1467 // death tests. Therefore we have to match with an empty regular
1468 // expression in all the EXPECT_DEATH()s.
zhanyong.wan2b43a9e2009-08-31 23:51:23 +00001469 EXPECT_DEATH_IF_SUPPORTED(a.ReturnResult(2), "");
zhanyong.wan41b9b0b2009-07-01 19:04:51 +00001470
1471 b.DoB();
zhanyong.wan2b43a9e2009-08-31 23:51:23 +00001472 EXPECT_DEATH_IF_SUPPORTED(a.ReturnResult(2), "");
zhanyong.wan41b9b0b2009-07-01 19:04:51 +00001473
1474 b.DoB();
1475 a.ReturnResult(2);
1476}
1477
1478// Calls must satisfy the partial order when specified so.
zhanyong.wan2b43a9e2009-08-31 23:51:23 +00001479TEST(AfterDeathTest, CallsMustSatisfyPartialOrderWhenSpecifiedSo) {
zhanyong.wan41b9b0b2009-07-01 19:04:51 +00001480 MockA a;
1481 Expectation e = EXPECT_CALL(a, DoA(1));
1482 const ExpectationSet es = EXPECT_CALL(a, DoA(2));
1483 EXPECT_CALL(a, ReturnResult(3))
1484 .After(e, es)
1485 .WillOnce(Return(Result()));
1486
zhanyong.wan2b43a9e2009-08-31 23:51:23 +00001487 EXPECT_DEATH_IF_SUPPORTED(a.ReturnResult(3), "");
zhanyong.wan41b9b0b2009-07-01 19:04:51 +00001488
1489 a.DoA(2);
zhanyong.wan2b43a9e2009-08-31 23:51:23 +00001490 EXPECT_DEATH_IF_SUPPORTED(a.ReturnResult(3), "");
zhanyong.wan41b9b0b2009-07-01 19:04:51 +00001491
1492 a.DoA(1);
1493 a.ReturnResult(3);
1494}
1495
1496// .After() can be combined with .InSequence().
zhanyong.wan2b43a9e2009-08-31 23:51:23 +00001497TEST(AfterDeathTest, CanBeUsedWithInSequence) {
zhanyong.wan41b9b0b2009-07-01 19:04:51 +00001498 MockA a;
1499 Sequence s;
1500 Expectation e = EXPECT_CALL(a, DoA(1));
1501 EXPECT_CALL(a, DoA(2)).InSequence(s);
1502 EXPECT_CALL(a, ReturnResult(3))
1503 .InSequence(s).After(e)
1504 .WillOnce(Return(Result()));
1505
1506 a.DoA(1);
zhanyong.wan2b43a9e2009-08-31 23:51:23 +00001507 EXPECT_DEATH_IF_SUPPORTED(a.ReturnResult(3), "");
zhanyong.wan41b9b0b2009-07-01 19:04:51 +00001508
1509 a.DoA(2);
1510 a.ReturnResult(3);
1511}
1512
1513// .After() can be called multiple times.
1514TEST(AfterTest, CanBeCalledManyTimes) {
1515 MockA a;
1516 Expectation e1 = EXPECT_CALL(a, DoA(1));
1517 Expectation e2 = EXPECT_CALL(a, DoA(2));
1518 Expectation e3 = EXPECT_CALL(a, DoA(3));
1519 EXPECT_CALL(a, DoA(4))
1520 .After(e1)
1521 .After(e2)
1522 .After(e3);
1523
1524 a.DoA(3);
1525 a.DoA(1);
1526 a.DoA(2);
1527 a.DoA(4);
1528}
1529
1530// .After() accepts up to 5 arguments.
1531TEST(AfterTest, AcceptsUpToFiveArguments) {
1532 MockA a;
1533 Expectation e1 = EXPECT_CALL(a, DoA(1));
1534 Expectation e2 = EXPECT_CALL(a, DoA(2));
1535 Expectation e3 = EXPECT_CALL(a, DoA(3));
1536 ExpectationSet es1 = EXPECT_CALL(a, DoA(4));
1537 ExpectationSet es2 = EXPECT_CALL(a, DoA(5));
1538 EXPECT_CALL(a, DoA(6))
1539 .After(e1, e2, e3, es1, es2);
1540
1541 a.DoA(5);
1542 a.DoA(2);
1543 a.DoA(4);
1544 a.DoA(1);
1545 a.DoA(3);
1546 a.DoA(6);
1547}
1548
1549// .After() allows input to contain duplicated Expectations.
1550TEST(AfterTest, AcceptsDuplicatedInput) {
1551 MockA a;
1552 Expectation e1 = EXPECT_CALL(a, DoA(1));
1553 Expectation e2 = EXPECT_CALL(a, DoA(2));
1554 ExpectationSet es;
1555 es += e1;
1556 es += e2;
1557 EXPECT_CALL(a, ReturnResult(3))
1558 .After(e1, e2, es, e1)
1559 .WillOnce(Return(Result()));
1560
1561 a.DoA(1);
zhanyong.wan2b43a9e2009-08-31 23:51:23 +00001562 EXPECT_DEATH_IF_SUPPORTED(a.ReturnResult(3), "");
zhanyong.wan41b9b0b2009-07-01 19:04:51 +00001563
1564 a.DoA(2);
1565 a.ReturnResult(3);
1566}
1567
1568// An Expectation added to an ExpectationSet after it has been used in
1569// an .After() has no effect.
1570TEST(AfterTest, ChangesToExpectationSetHaveNoEffectAfterwards) {
1571 MockA a;
1572 ExpectationSet es1 = EXPECT_CALL(a, DoA(1));
1573 Expectation e2 = EXPECT_CALL(a, DoA(2));
1574 EXPECT_CALL(a, DoA(3))
1575 .After(es1);
1576 es1 += e2;
1577
1578 a.DoA(1);
1579 a.DoA(3);
1580 a.DoA(2);
1581}
1582
shiqiane35fdd92008-12-10 05:08:54 +00001583// Tests that Google Mock correctly handles calls to mock functions
1584// after a mock object owning one of their pre-requisites has died.
1585
1586// Tests that calls that satisfy the original spec are successful.
1587TEST(DeletingMockEarlyTest, Success1) {
1588 MockB* const b1 = new MockB;
1589 MockA* const a = new MockA;
1590 MockB* const b2 = new MockB;
1591
1592 {
1593 InSequence dummy;
1594 EXPECT_CALL(*b1, DoB(_))
1595 .WillOnce(Return(1));
1596 EXPECT_CALL(*a, Binary(_, _))
1597 .Times(AnyNumber())
1598 .WillRepeatedly(Return(true));
1599 EXPECT_CALL(*b2, DoB(_))
1600 .Times(AnyNumber())
1601 .WillRepeatedly(Return(2));
1602 }
1603
1604 EXPECT_EQ(1, b1->DoB(1));
1605 delete b1;
1606 // a's pre-requisite has died.
1607 EXPECT_TRUE(a->Binary(0, 1));
1608 delete b2;
1609 // a's successor has died.
1610 EXPECT_TRUE(a->Binary(1, 2));
1611 delete a;
1612}
1613
1614// Tests that calls that satisfy the original spec are successful.
1615TEST(DeletingMockEarlyTest, Success2) {
1616 MockB* const b1 = new MockB;
1617 MockA* const a = new MockA;
1618 MockB* const b2 = new MockB;
1619
1620 {
1621 InSequence dummy;
1622 EXPECT_CALL(*b1, DoB(_))
1623 .WillOnce(Return(1));
1624 EXPECT_CALL(*a, Binary(_, _))
1625 .Times(AnyNumber());
1626 EXPECT_CALL(*b2, DoB(_))
1627 .Times(AnyNumber())
1628 .WillRepeatedly(Return(2));
1629 }
1630
1631 delete a; // a is trivially satisfied.
1632 EXPECT_EQ(1, b1->DoB(1));
1633 EXPECT_EQ(2, b2->DoB(2));
1634 delete b1;
1635 delete b2;
1636}
1637
zhanyong.wan6f147692009-03-03 06:44:08 +00001638// Tests that it's OK to delete a mock object itself in its action.
1639
zhanyong.wan32de5f52009-12-23 00:13:23 +00001640// Suppresses warning on unreferenced formal parameter in MSVC with
1641// -W4.
1642#ifdef _MSC_VER
1643#pragma warning(push)
1644#pragma warning(disable:4100)
1645#endif
1646
zhanyong.wan6f147692009-03-03 06:44:08 +00001647ACTION_P(Delete, ptr) { delete ptr; }
1648
zhanyong.wan32de5f52009-12-23 00:13:23 +00001649#ifdef _MSC_VER
1650#pragma warning(pop)
1651#endif
1652
zhanyong.wan6f147692009-03-03 06:44:08 +00001653TEST(DeletingMockEarlyTest, CanDeleteSelfInActionReturningVoid) {
1654 MockA* const a = new MockA;
1655 EXPECT_CALL(*a, DoA(_)).WillOnce(Delete(a));
1656 a->DoA(42); // This will cause a to be deleted.
1657}
1658
1659TEST(DeletingMockEarlyTest, CanDeleteSelfInActionReturningValue) {
1660 MockA* const a = new MockA;
1661 EXPECT_CALL(*a, ReturnResult(_))
1662 .WillOnce(DoAll(Delete(a), Return(Result())));
1663 a->ReturnResult(42); // This will cause a to be deleted.
1664}
1665
1666// Tests that calls that violate the original spec yield failures.
shiqiane35fdd92008-12-10 05:08:54 +00001667TEST(DeletingMockEarlyTest, Failure1) {
1668 MockB* const b1 = new MockB;
1669 MockA* const a = new MockA;
1670 MockB* const b2 = new MockB;
1671
1672 {
1673 InSequence dummy;
1674 EXPECT_CALL(*b1, DoB(_))
1675 .WillOnce(Return(1));
1676 EXPECT_CALL(*a, Binary(_, _))
1677 .Times(AnyNumber());
1678 EXPECT_CALL(*b2, DoB(_))
1679 .Times(AnyNumber())
1680 .WillRepeatedly(Return(2));
1681 }
1682
1683 delete a; // a is trivially satisfied.
1684 EXPECT_NONFATAL_FAILURE({
1685 b2->DoB(2);
1686 }, "Unexpected mock function call");
1687 EXPECT_EQ(1, b1->DoB(1));
1688 delete b1;
1689 delete b2;
1690}
1691
zhanyong.wan6f147692009-03-03 06:44:08 +00001692// Tests that calls that violate the original spec yield failures.
shiqiane35fdd92008-12-10 05:08:54 +00001693TEST(DeletingMockEarlyTest, Failure2) {
1694 MockB* const b1 = new MockB;
1695 MockA* const a = new MockA;
1696 MockB* const b2 = new MockB;
1697
1698 {
1699 InSequence dummy;
1700 EXPECT_CALL(*b1, DoB(_));
1701 EXPECT_CALL(*a, Binary(_, _))
1702 .Times(AnyNumber());
1703 EXPECT_CALL(*b2, DoB(_))
1704 .Times(AnyNumber());
1705 }
1706
1707 EXPECT_NONFATAL_FAILURE(delete b1,
1708 "Actual: never called");
1709 EXPECT_NONFATAL_FAILURE(a->Binary(0, 1),
1710 "Unexpected mock function call");
1711 EXPECT_NONFATAL_FAILURE(b2->DoB(1),
1712 "Unexpected mock function call");
1713 delete a;
1714 delete b2;
1715}
1716
1717class EvenNumberCardinality : public CardinalityInterface {
1718 public:
1719 // Returns true iff call_count calls will satisfy this cardinality.
1720 virtual bool IsSatisfiedByCallCount(int call_count) const {
1721 return call_count % 2 == 0;
1722 }
1723
1724 // Returns true iff call_count calls will saturate this cardinality.
zhanyong.wan32de5f52009-12-23 00:13:23 +00001725 virtual bool IsSaturatedByCallCount(int /* call_count */) const {
1726 return false;
1727 }
shiqiane35fdd92008-12-10 05:08:54 +00001728
1729 // Describes self to an ostream.
1730 virtual void DescribeTo(::std::ostream* os) const {
1731 *os << "called even number of times";
1732 }
1733};
1734
1735Cardinality EvenNumber() {
1736 return Cardinality(new EvenNumberCardinality);
1737}
1738
1739TEST(ExpectationBaseTest,
1740 AllPrerequisitesAreSatisfiedWorksForNonMonotonicCardinality) {
1741 MockA* a = new MockA;
1742 Sequence s;
1743
1744 EXPECT_CALL(*a, DoA(1))
1745 .Times(EvenNumber())
1746 .InSequence(s);
1747 EXPECT_CALL(*a, DoA(2))
1748 .Times(AnyNumber())
1749 .InSequence(s);
1750 EXPECT_CALL(*a, DoA(3))
1751 .Times(AnyNumber());
1752
1753 a->DoA(3);
1754 a->DoA(1);
1755 EXPECT_NONFATAL_FAILURE(a->DoA(2), "Unexpected mock function call");
1756 EXPECT_NONFATAL_FAILURE(delete a, "to be called even number of times");
1757}
1758
1759// The following tests verify the message generated when a mock
1760// function is called.
1761
1762struct Printable {
1763};
1764
1765inline void operator<<(::std::ostream& os, const Printable&) {
1766 os << "Printable";
1767}
1768
1769struct Unprintable {
1770 Unprintable() : value(0) {}
1771 int value;
1772};
1773
1774class MockC {
1775 public:
zhanyong.wan32de5f52009-12-23 00:13:23 +00001776 MockC() {}
1777
shiqiane35fdd92008-12-10 05:08:54 +00001778 MOCK_METHOD6(VoidMethod, void(bool cond, int n, string s, void* p,
1779 const Printable& x, Unprintable y));
1780 MOCK_METHOD0(NonVoidMethod, int()); // NOLINT
zhanyong.wan32de5f52009-12-23 00:13:23 +00001781
1782 private:
1783 GTEST_DISALLOW_COPY_AND_ASSIGN_(MockC);
shiqiane35fdd92008-12-10 05:08:54 +00001784};
1785
vladlosev76c1c612010-05-05 19:47:46 +00001786class VerboseFlagPreservingFixture : public testing::Test {
1787 protected:
1788 // The code needs to work when both ::string and ::std::string are defined
1789 // and the flag is implemented as a testing::internal::String. In this
1790 // case, without the call to c_str(), the compiler will complain that it
1791 // cannot figure out what overload of string constructor to use.
1792 // TODO(vladl@google.com): Use internal::string instead of String for
1793 // string flags in Google Test.
1794 VerboseFlagPreservingFixture()
1795 : saved_verbose_flag_(GMOCK_FLAG(verbose).c_str()) {}
1796
1797 ~VerboseFlagPreservingFixture() { GMOCK_FLAG(verbose) = saved_verbose_flag_; }
1798
1799 private:
1800 const string saved_verbose_flag_;
1801
1802 GTEST_DISALLOW_COPY_AND_ASSIGN_(VerboseFlagPreservingFixture);
1803};
1804
zhanyong.wan2516f602010-08-31 18:28:02 +00001805#if GTEST_HAS_STREAM_REDIRECTION
shiqiane35fdd92008-12-10 05:08:54 +00001806
1807// Tests that an uninteresting mock function call generates a warning
1808// containing the stack trace.
1809TEST(FunctionCallMessageTest, UninterestingCallGeneratesFyiWithStackTrace) {
1810 MockC c;
zhanyong.wan470df422010-02-02 22:34:58 +00001811 CaptureStdout();
shiqiane35fdd92008-12-10 05:08:54 +00001812 c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable());
zhanyong.wan470df422010-02-02 22:34:58 +00001813 const String output = GetCapturedStdout();
shiqiane35fdd92008-12-10 05:08:54 +00001814 EXPECT_PRED_FORMAT2(IsSubstring, "GMOCK WARNING", output);
1815 EXPECT_PRED_FORMAT2(IsSubstring, "Stack trace:", output);
1816#ifndef NDEBUG
1817 // We check the stack trace content in dbg-mode only, as opt-mode
1818 // may inline the call we are interested in seeing.
1819
1820 // Verifies that a void mock function's name appears in the stack
1821 // trace.
zhanyong.wan470df422010-02-02 22:34:58 +00001822 EXPECT_PRED_FORMAT2(IsSubstring, "VoidMethod(", output);
shiqiane35fdd92008-12-10 05:08:54 +00001823
1824 // Verifies that a non-void mock function's name appears in the
1825 // stack trace.
zhanyong.wan470df422010-02-02 22:34:58 +00001826 CaptureStdout();
shiqiane35fdd92008-12-10 05:08:54 +00001827 c.NonVoidMethod();
zhanyong.wan470df422010-02-02 22:34:58 +00001828 const String output2 = GetCapturedStdout();
1829 EXPECT_PRED_FORMAT2(IsSubstring, "NonVoidMethod(", output2);
shiqiane35fdd92008-12-10 05:08:54 +00001830#endif // NDEBUG
1831}
1832
1833// Tests that an uninteresting mock function call causes the function
1834// arguments and return value to be printed.
1835TEST(FunctionCallMessageTest, UninterestingCallPrintsArgumentsAndReturnValue) {
1836 // A non-void mock function.
1837 MockB b;
zhanyong.wan470df422010-02-02 22:34:58 +00001838 CaptureStdout();
shiqiane35fdd92008-12-10 05:08:54 +00001839 b.DoB();
zhanyong.wan470df422010-02-02 22:34:58 +00001840 const String output1 = GetCapturedStdout();
shiqiane35fdd92008-12-10 05:08:54 +00001841 EXPECT_PRED_FORMAT2(
1842 IsSubstring,
1843 "Uninteresting mock function call - returning default value.\n"
1844 " Function call: DoB()\n"
zhanyong.wan470df422010-02-02 22:34:58 +00001845 " Returns: 0\n", output1.c_str());
shiqiane35fdd92008-12-10 05:08:54 +00001846 // Makes sure the return value is printed.
1847
1848 // A void mock function.
1849 MockC c;
zhanyong.wan470df422010-02-02 22:34:58 +00001850 CaptureStdout();
shiqiane35fdd92008-12-10 05:08:54 +00001851 c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable());
zhanyong.wan470df422010-02-02 22:34:58 +00001852 const String output2 = GetCapturedStdout();
1853 EXPECT_THAT(output2.c_str(),
1854 ContainsRegex(
1855 "Uninteresting mock function call - returning directly\\.\n"
1856 " Function call: VoidMethod"
1857 "\\(false, 5, \"Hi\", NULL, @.+ "
zhanyong.wanc6333dc2010-08-09 18:20:45 +00001858 "Printable, 4-byte object <00-00 00-00>\\)"));
shiqiane35fdd92008-12-10 05:08:54 +00001859 // A void function has no return value to print.
1860}
1861
1862// Tests how the --gmock_verbose flag affects Google Mock's output.
1863
vladlosev76c1c612010-05-05 19:47:46 +00001864class GMockVerboseFlagTest : public VerboseFlagPreservingFixture {
shiqiane35fdd92008-12-10 05:08:54 +00001865 public:
1866 // Verifies that the given Google Mock output is correct. (When
1867 // should_print is true, the output should match the given regex and
1868 // contain the given function name in the stack trace. When it's
1869 // false, the output should be empty.)
zhanyong.wan470df422010-02-02 22:34:58 +00001870 void VerifyOutput(const String& output, bool should_print,
1871 const string& expected_substring,
shiqiane35fdd92008-12-10 05:08:54 +00001872 const string& function_name) {
1873 if (should_print) {
zhanyong.wan470df422010-02-02 22:34:58 +00001874 EXPECT_THAT(output.c_str(), HasSubstr(expected_substring));
shiqiane35fdd92008-12-10 05:08:54 +00001875#ifndef NDEBUG
1876 // We check the stack trace content in dbg-mode only, as opt-mode
1877 // may inline the call we are interested in seeing.
zhanyong.wan470df422010-02-02 22:34:58 +00001878 EXPECT_THAT(output.c_str(), HasSubstr(function_name));
1879#else
1880 // Suppresses 'unused function parameter' warnings.
1881 static_cast<void>(function_name);
shiqiane35fdd92008-12-10 05:08:54 +00001882#endif // NDEBUG
1883 } else {
zhanyong.wan470df422010-02-02 22:34:58 +00001884 EXPECT_STREQ("", output.c_str());
shiqiane35fdd92008-12-10 05:08:54 +00001885 }
1886 }
1887
1888 // Tests how the flag affects expected calls.
1889 void TestExpectedCall(bool should_print) {
1890 MockA a;
1891 EXPECT_CALL(a, DoA(5));
1892 EXPECT_CALL(a, Binary(_, 1))
1893 .WillOnce(Return(true));
1894
1895 // A void-returning function.
zhanyong.wan470df422010-02-02 22:34:58 +00001896 CaptureStdout();
shiqiane35fdd92008-12-10 05:08:54 +00001897 a.DoA(5);
1898 VerifyOutput(
zhanyong.wan470df422010-02-02 22:34:58 +00001899 GetCapturedStdout(),
shiqiane35fdd92008-12-10 05:08:54 +00001900 should_print,
zhanyong.wan470df422010-02-02 22:34:58 +00001901 "Mock function call matches EXPECT_CALL(a, DoA(5))...\n"
1902 " Function call: DoA(5)\n"
1903 "Stack trace:\n",
1904 "DoA");
shiqiane35fdd92008-12-10 05:08:54 +00001905
1906 // A non-void-returning function.
zhanyong.wan470df422010-02-02 22:34:58 +00001907 CaptureStdout();
shiqiane35fdd92008-12-10 05:08:54 +00001908 a.Binary(2, 1);
1909 VerifyOutput(
zhanyong.wan470df422010-02-02 22:34:58 +00001910 GetCapturedStdout(),
shiqiane35fdd92008-12-10 05:08:54 +00001911 should_print,
zhanyong.wan470df422010-02-02 22:34:58 +00001912 "Mock function call matches EXPECT_CALL(a, Binary(_, 1))...\n"
1913 " Function call: Binary(2, 1)\n"
shiqiane35fdd92008-12-10 05:08:54 +00001914 " Returns: true\n"
zhanyong.wan470df422010-02-02 22:34:58 +00001915 "Stack trace:\n",
1916 "Binary");
shiqiane35fdd92008-12-10 05:08:54 +00001917 }
1918
1919 // Tests how the flag affects uninteresting calls.
1920 void TestUninterestingCall(bool should_print) {
1921 MockA a;
1922
1923 // A void-returning function.
zhanyong.wan470df422010-02-02 22:34:58 +00001924 CaptureStdout();
shiqiane35fdd92008-12-10 05:08:54 +00001925 a.DoA(5);
1926 VerifyOutput(
zhanyong.wan470df422010-02-02 22:34:58 +00001927 GetCapturedStdout(),
shiqiane35fdd92008-12-10 05:08:54 +00001928 should_print,
1929 "\nGMOCK WARNING:\n"
zhanyong.wan470df422010-02-02 22:34:58 +00001930 "Uninteresting mock function call - returning directly.\n"
1931 " Function call: DoA(5)\n"
1932 "Stack trace:\n",
1933 "DoA");
shiqiane35fdd92008-12-10 05:08:54 +00001934
1935 // A non-void-returning function.
zhanyong.wan470df422010-02-02 22:34:58 +00001936 CaptureStdout();
shiqiane35fdd92008-12-10 05:08:54 +00001937 a.Binary(2, 1);
1938 VerifyOutput(
zhanyong.wan470df422010-02-02 22:34:58 +00001939 GetCapturedStdout(),
shiqiane35fdd92008-12-10 05:08:54 +00001940 should_print,
1941 "\nGMOCK WARNING:\n"
zhanyong.wan470df422010-02-02 22:34:58 +00001942 "Uninteresting mock function call - returning default value.\n"
1943 " Function call: Binary(2, 1)\n"
shiqiane35fdd92008-12-10 05:08:54 +00001944 " Returns: false\n"
zhanyong.wan470df422010-02-02 22:34:58 +00001945 "Stack trace:\n",
1946 "Binary");
shiqiane35fdd92008-12-10 05:08:54 +00001947 }
1948};
1949
1950// Tests that --gmock_verbose=info causes both expected and
1951// uninteresting calls to be reported.
1952TEST_F(GMockVerboseFlagTest, Info) {
1953 GMOCK_FLAG(verbose) = kInfoVerbosity;
1954 TestExpectedCall(true);
1955 TestUninterestingCall(true);
1956}
1957
1958// Tests that --gmock_verbose=warning causes uninteresting calls to be
1959// reported.
1960TEST_F(GMockVerboseFlagTest, Warning) {
1961 GMOCK_FLAG(verbose) = kWarningVerbosity;
1962 TestExpectedCall(false);
1963 TestUninterestingCall(true);
1964}
1965
1966// Tests that --gmock_verbose=warning causes neither expected nor
1967// uninteresting calls to be reported.
1968TEST_F(GMockVerboseFlagTest, Error) {
1969 GMOCK_FLAG(verbose) = kErrorVerbosity;
1970 TestExpectedCall(false);
1971 TestUninterestingCall(false);
1972}
1973
1974// Tests that --gmock_verbose=SOME_INVALID_VALUE has the same effect
1975// as --gmock_verbose=warning.
1976TEST_F(GMockVerboseFlagTest, InvalidFlagIsTreatedAsWarning) {
1977 GMOCK_FLAG(verbose) = "invalid"; // Treated as "warning".
1978 TestExpectedCall(false);
1979 TestUninterestingCall(true);
1980}
1981
zhanyong.wan2516f602010-08-31 18:28:02 +00001982#endif // GTEST_HAS_STREAM_REDIRECTION
shiqiane35fdd92008-12-10 05:08:54 +00001983
zhanyong.wan9413f2f2009-05-29 19:50:06 +00001984// A helper class that generates a failure when printed. We use it to
1985// ensure that Google Mock doesn't print a value (even to an internal
1986// buffer) when it is not supposed to do so.
1987class PrintMeNot {};
1988
1989void PrintTo(PrintMeNot /* dummy */, ::std::ostream* /* os */) {
1990 ADD_FAILURE() << "Google Mock is printing a value that shouldn't be "
1991 << "printed even to an internal buffer.";
1992}
1993
1994class LogTestHelper {
1995 public:
zhanyong.wan32de5f52009-12-23 00:13:23 +00001996 LogTestHelper() {}
1997
zhanyong.wan9413f2f2009-05-29 19:50:06 +00001998 MOCK_METHOD1(Foo, PrintMeNot(PrintMeNot));
zhanyong.wan32de5f52009-12-23 00:13:23 +00001999
2000 private:
2001 GTEST_DISALLOW_COPY_AND_ASSIGN_(LogTestHelper);
zhanyong.wan9413f2f2009-05-29 19:50:06 +00002002};
2003
vladlosev76c1c612010-05-05 19:47:46 +00002004class GMockLogTest : public VerboseFlagPreservingFixture {
zhanyong.wan9413f2f2009-05-29 19:50:06 +00002005 protected:
zhanyong.wan9413f2f2009-05-29 19:50:06 +00002006 LogTestHelper helper_;
zhanyong.wan9413f2f2009-05-29 19:50:06 +00002007};
2008
2009TEST_F(GMockLogTest, DoesNotPrintGoodCallInternallyIfVerbosityIsWarning) {
2010 GMOCK_FLAG(verbose) = kWarningVerbosity;
2011 EXPECT_CALL(helper_, Foo(_))
2012 .WillOnce(Return(PrintMeNot()));
2013 helper_.Foo(PrintMeNot()); // This is an expected call.
2014}
2015
2016TEST_F(GMockLogTest, DoesNotPrintGoodCallInternallyIfVerbosityIsError) {
2017 GMOCK_FLAG(verbose) = kErrorVerbosity;
2018 EXPECT_CALL(helper_, Foo(_))
2019 .WillOnce(Return(PrintMeNot()));
2020 helper_.Foo(PrintMeNot()); // This is an expected call.
2021}
2022
2023TEST_F(GMockLogTest, DoesNotPrintWarningInternallyIfVerbosityIsError) {
2024 GMOCK_FLAG(verbose) = kErrorVerbosity;
2025 ON_CALL(helper_, Foo(_))
2026 .WillByDefault(Return(PrintMeNot()));
2027 helper_.Foo(PrintMeNot()); // This should generate a warning.
2028}
2029
2030// Tests Mock::AllowLeak().
2031
zhanyong.wandf35a762009-04-22 22:25:31 +00002032TEST(AllowLeakTest, AllowsLeakingUnusedMockObject) {
2033 MockA* a = new MockA;
2034 Mock::AllowLeak(a);
2035}
2036
2037TEST(AllowLeakTest, CanBeCalledBeforeOnCall) {
2038 MockA* a = new MockA;
2039 Mock::AllowLeak(a);
2040 ON_CALL(*a, DoA(_)).WillByDefault(Return());
2041 a->DoA(0);
2042}
2043
2044TEST(AllowLeakTest, CanBeCalledAfterOnCall) {
2045 MockA* a = new MockA;
2046 ON_CALL(*a, DoA(_)).WillByDefault(Return());
2047 Mock::AllowLeak(a);
2048}
2049
2050TEST(AllowLeakTest, CanBeCalledBeforeExpectCall) {
2051 MockA* a = new MockA;
2052 Mock::AllowLeak(a);
2053 EXPECT_CALL(*a, DoA(_));
2054 a->DoA(0);
2055}
2056
2057TEST(AllowLeakTest, CanBeCalledAfterExpectCall) {
2058 MockA* a = new MockA;
2059 EXPECT_CALL(*a, DoA(_)).Times(AnyNumber());
2060 Mock::AllowLeak(a);
2061}
2062
2063TEST(AllowLeakTest, WorksWhenBothOnCallAndExpectCallArePresent) {
2064 MockA* a = new MockA;
2065 ON_CALL(*a, DoA(_)).WillByDefault(Return());
2066 EXPECT_CALL(*a, DoA(_)).Times(AnyNumber());
2067 Mock::AllowLeak(a);
2068}
shiqiane35fdd92008-12-10 05:08:54 +00002069
2070// Tests that we can verify and clear a mock object's expectations
2071// when none of its methods has expectations.
2072TEST(VerifyAndClearExpectationsTest, NoMethodHasExpectations) {
2073 MockB b;
2074 ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b));
2075
2076 // There should be no expectations on the methods now, so we can
2077 // freely call them.
2078 EXPECT_EQ(0, b.DoB());
2079 EXPECT_EQ(0, b.DoB(1));
2080}
2081
2082// Tests that we can verify and clear a mock object's expectations
2083// when some, but not all, of its methods have expectations *and* the
2084// verification succeeds.
2085TEST(VerifyAndClearExpectationsTest, SomeMethodsHaveExpectationsAndSucceed) {
2086 MockB b;
2087 EXPECT_CALL(b, DoB())
2088 .WillOnce(Return(1));
2089 b.DoB();
2090 ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b));
2091
2092 // There should be no expectations on the methods now, so we can
2093 // freely call them.
2094 EXPECT_EQ(0, b.DoB());
2095 EXPECT_EQ(0, b.DoB(1));
2096}
2097
2098// Tests that we can verify and clear a mock object's expectations
2099// when some, but not all, of its methods have expectations *and* the
2100// verification fails.
2101TEST(VerifyAndClearExpectationsTest, SomeMethodsHaveExpectationsAndFail) {
2102 MockB b;
2103 EXPECT_CALL(b, DoB())
2104 .WillOnce(Return(1));
vladlosev6c54a5e2009-10-21 06:15:34 +00002105 bool result = true;
shiqiane35fdd92008-12-10 05:08:54 +00002106 EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClearExpectations(&b),
2107 "Actual: never called");
2108 ASSERT_FALSE(result);
2109
2110 // There should be no expectations on the methods now, so we can
2111 // freely call them.
2112 EXPECT_EQ(0, b.DoB());
2113 EXPECT_EQ(0, b.DoB(1));
2114}
2115
2116// Tests that we can verify and clear a mock object's expectations
2117// when all of its methods have expectations.
2118TEST(VerifyAndClearExpectationsTest, AllMethodsHaveExpectations) {
2119 MockB b;
2120 EXPECT_CALL(b, DoB())
2121 .WillOnce(Return(1));
2122 EXPECT_CALL(b, DoB(_))
2123 .WillOnce(Return(2));
2124 b.DoB();
2125 b.DoB(1);
2126 ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b));
2127
2128 // There should be no expectations on the methods now, so we can
2129 // freely call them.
2130 EXPECT_EQ(0, b.DoB());
2131 EXPECT_EQ(0, b.DoB(1));
2132}
2133
2134// Tests that we can verify and clear a mock object's expectations
2135// when a method has more than one expectation.
2136TEST(VerifyAndClearExpectationsTest, AMethodHasManyExpectations) {
2137 MockB b;
2138 EXPECT_CALL(b, DoB(0))
2139 .WillOnce(Return(1));
2140 EXPECT_CALL(b, DoB(_))
2141 .WillOnce(Return(2));
2142 b.DoB(1);
vladlosev6c54a5e2009-10-21 06:15:34 +00002143 bool result = true;
shiqiane35fdd92008-12-10 05:08:54 +00002144 EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClearExpectations(&b),
2145 "Actual: never called");
2146 ASSERT_FALSE(result);
2147
2148 // There should be no expectations on the methods now, so we can
2149 // freely call them.
2150 EXPECT_EQ(0, b.DoB());
2151 EXPECT_EQ(0, b.DoB(1));
2152}
2153
2154// Tests that we can call VerifyAndClearExpectations() on the same
2155// mock object multiple times.
2156TEST(VerifyAndClearExpectationsTest, CanCallManyTimes) {
2157 MockB b;
2158 EXPECT_CALL(b, DoB());
2159 b.DoB();
2160 Mock::VerifyAndClearExpectations(&b);
2161
2162 EXPECT_CALL(b, DoB(_))
2163 .WillOnce(Return(1));
2164 b.DoB(1);
2165 Mock::VerifyAndClearExpectations(&b);
2166 Mock::VerifyAndClearExpectations(&b);
2167
2168 // There should be no expectations on the methods now, so we can
2169 // freely call them.
2170 EXPECT_EQ(0, b.DoB());
2171 EXPECT_EQ(0, b.DoB(1));
2172}
2173
2174// Tests that we can clear a mock object's default actions when none
2175// of its methods has default actions.
2176TEST(VerifyAndClearTest, NoMethodHasDefaultActions) {
2177 MockB b;
2178 // If this crashes or generates a failure, the test will catch it.
2179 Mock::VerifyAndClear(&b);
2180 EXPECT_EQ(0, b.DoB());
2181}
2182
2183// Tests that we can clear a mock object's default actions when some,
2184// but not all of its methods have default actions.
2185TEST(VerifyAndClearTest, SomeMethodsHaveDefaultActions) {
2186 MockB b;
2187 ON_CALL(b, DoB())
2188 .WillByDefault(Return(1));
2189
2190 Mock::VerifyAndClear(&b);
2191
2192 // Verifies that the default action of int DoB() was removed.
2193 EXPECT_EQ(0, b.DoB());
2194}
2195
2196// Tests that we can clear a mock object's default actions when all of
2197// its methods have default actions.
2198TEST(VerifyAndClearTest, AllMethodsHaveDefaultActions) {
2199 MockB b;
2200 ON_CALL(b, DoB())
2201 .WillByDefault(Return(1));
2202 ON_CALL(b, DoB(_))
2203 .WillByDefault(Return(2));
2204
2205 Mock::VerifyAndClear(&b);
2206
2207 // Verifies that the default action of int DoB() was removed.
2208 EXPECT_EQ(0, b.DoB());
2209
2210 // Verifies that the default action of int DoB(int) was removed.
2211 EXPECT_EQ(0, b.DoB(0));
2212}
2213
2214// Tests that we can clear a mock object's default actions when a
2215// method has more than one ON_CALL() set on it.
2216TEST(VerifyAndClearTest, AMethodHasManyDefaultActions) {
2217 MockB b;
2218 ON_CALL(b, DoB(0))
2219 .WillByDefault(Return(1));
2220 ON_CALL(b, DoB(_))
2221 .WillByDefault(Return(2));
2222
2223 Mock::VerifyAndClear(&b);
2224
2225 // Verifies that the default actions (there are two) of int DoB(int)
2226 // were removed.
2227 EXPECT_EQ(0, b.DoB(0));
2228 EXPECT_EQ(0, b.DoB(1));
2229}
2230
2231// Tests that we can call VerifyAndClear() on a mock object multiple
2232// times.
2233TEST(VerifyAndClearTest, CanCallManyTimes) {
2234 MockB b;
2235 ON_CALL(b, DoB())
2236 .WillByDefault(Return(1));
2237 Mock::VerifyAndClear(&b);
2238 Mock::VerifyAndClear(&b);
2239
2240 ON_CALL(b, DoB(_))
2241 .WillByDefault(Return(1));
2242 Mock::VerifyAndClear(&b);
2243
2244 EXPECT_EQ(0, b.DoB());
2245 EXPECT_EQ(0, b.DoB(1));
2246}
2247
2248// Tests that VerifyAndClear() works when the verification succeeds.
2249TEST(VerifyAndClearTest, Success) {
2250 MockB b;
2251 ON_CALL(b, DoB())
2252 .WillByDefault(Return(1));
2253 EXPECT_CALL(b, DoB(1))
2254 .WillOnce(Return(2));
2255
2256 b.DoB();
2257 b.DoB(1);
2258 ASSERT_TRUE(Mock::VerifyAndClear(&b));
2259
2260 // There should be no expectations on the methods now, so we can
2261 // freely call them.
2262 EXPECT_EQ(0, b.DoB());
2263 EXPECT_EQ(0, b.DoB(1));
2264}
2265
2266// Tests that VerifyAndClear() works when the verification fails.
2267TEST(VerifyAndClearTest, Failure) {
2268 MockB b;
2269 ON_CALL(b, DoB(_))
2270 .WillByDefault(Return(1));
2271 EXPECT_CALL(b, DoB())
2272 .WillOnce(Return(2));
2273
2274 b.DoB(1);
vladlosev6c54a5e2009-10-21 06:15:34 +00002275 bool result = true;
shiqiane35fdd92008-12-10 05:08:54 +00002276 EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClear(&b),
2277 "Actual: never called");
2278 ASSERT_FALSE(result);
2279
2280 // There should be no expectations on the methods now, so we can
2281 // freely call them.
2282 EXPECT_EQ(0, b.DoB());
2283 EXPECT_EQ(0, b.DoB(1));
2284}
2285
2286// Tests that VerifyAndClear() works when the default actions and
2287// expectations are set on a const mock object.
2288TEST(VerifyAndClearTest, Const) {
2289 MockB b;
2290 ON_CALL(Const(b), DoB())
2291 .WillByDefault(Return(1));
2292
2293 EXPECT_CALL(Const(b), DoB())
2294 .WillOnce(DoDefault())
2295 .WillOnce(Return(2));
2296
2297 b.DoB();
2298 b.DoB();
2299 ASSERT_TRUE(Mock::VerifyAndClear(&b));
2300
2301 // There should be no expectations on the methods now, so we can
2302 // freely call them.
2303 EXPECT_EQ(0, b.DoB());
2304 EXPECT_EQ(0, b.DoB(1));
2305}
2306
2307// Tests that we can set default actions and expectations on a mock
2308// object after VerifyAndClear() has been called on it.
2309TEST(VerifyAndClearTest, CanSetDefaultActionsAndExpectationsAfterwards) {
2310 MockB b;
2311 ON_CALL(b, DoB())
2312 .WillByDefault(Return(1));
2313 EXPECT_CALL(b, DoB(_))
2314 .WillOnce(Return(2));
2315 b.DoB(1);
2316
2317 Mock::VerifyAndClear(&b);
2318
2319 EXPECT_CALL(b, DoB())
2320 .WillOnce(Return(3));
2321 ON_CALL(b, DoB(_))
2322 .WillByDefault(Return(4));
2323
2324 EXPECT_EQ(3, b.DoB());
2325 EXPECT_EQ(4, b.DoB(1));
2326}
2327
2328// Tests that calling VerifyAndClear() on one mock object does not
2329// affect other mock objects (either of the same type or not).
2330TEST(VerifyAndClearTest, DoesNotAffectOtherMockObjects) {
2331 MockA a;
2332 MockB b1;
2333 MockB b2;
2334
2335 ON_CALL(a, Binary(_, _))
2336 .WillByDefault(Return(true));
2337 EXPECT_CALL(a, Binary(_, _))
2338 .WillOnce(DoDefault())
2339 .WillOnce(Return(false));
2340
2341 ON_CALL(b1, DoB())
2342 .WillByDefault(Return(1));
2343 EXPECT_CALL(b1, DoB(_))
2344 .WillOnce(Return(2));
2345
2346 ON_CALL(b2, DoB())
2347 .WillByDefault(Return(3));
2348 EXPECT_CALL(b2, DoB(_));
2349
2350 b2.DoB(0);
2351 Mock::VerifyAndClear(&b2);
2352
2353 // Verifies that the default actions and expectations of a and b1
2354 // are still in effect.
2355 EXPECT_TRUE(a.Binary(0, 0));
2356 EXPECT_FALSE(a.Binary(0, 0));
2357
2358 EXPECT_EQ(1, b1.DoB());
2359 EXPECT_EQ(2, b1.DoB(0));
2360}
2361
2362// Tests that a mock function's action can call a mock function
2363// (either the same function or a different one) either as an explicit
2364// action or as a default action without causing a dead lock. It
2365// verifies that the action is not performed inside the critical
2366// section.
vladlosev54af9ba2010-05-04 16:05:11 +00002367TEST(SynchronizationTest, CanCallMockMethodInAction) {
2368 MockA a;
2369 MockC c;
2370 ON_CALL(a, DoA(_))
2371 .WillByDefault(IgnoreResult(InvokeWithoutArgs(&c,
2372 &MockC::NonVoidMethod)));
2373 EXPECT_CALL(a, DoA(1));
2374 EXPECT_CALL(a, DoA(1))
2375 .WillOnce(Invoke(&a, &MockA::DoA))
2376 .RetiresOnSaturation();
2377 EXPECT_CALL(c, NonVoidMethod());
shiqiane35fdd92008-12-10 05:08:54 +00002378
vladlosev54af9ba2010-05-04 16:05:11 +00002379 a.DoA(1);
2380 // This will match the second EXPECT_CALL() and trigger another a.DoA(1),
2381 // which will in turn match the first EXPECT_CALL() and trigger a call to
2382 // c.NonVoidMethod() that was specified by the ON_CALL() since the first
2383 // EXPECT_CALL() did not specify an action.
shiqiane35fdd92008-12-10 05:08:54 +00002384}
2385
2386} // namespace
zhanyong.wandf35a762009-04-22 22:25:31 +00002387
zhanyong.wan9571b282009-08-07 07:15:56 +00002388// Allows the user to define his own main and then invoke gmock_main
2389// from it. This might be necessary on some platforms which require
2390// specific setup and teardown.
2391#if GMOCK_RENAME_MAIN
2392int gmock_main(int argc, char **argv) {
2393#else
zhanyong.wandf35a762009-04-22 22:25:31 +00002394int main(int argc, char **argv) {
zhanyong.wan9571b282009-08-07 07:15:56 +00002395#endif // GMOCK_RENAME_MAIN
zhanyong.wandf35a762009-04-22 22:25:31 +00002396 testing::InitGoogleMock(&argc, argv);
2397
2398 // Ensures that the tests pass no matter what value of
2399 // --gmock_catch_leaked_mocks and --gmock_verbose the user specifies.
2400 testing::GMOCK_FLAG(catch_leaked_mocks) = true;
2401 testing::GMOCK_FLAG(verbose) = testing::internal::kWarningVerbosity;
2402
2403 return RUN_ALL_TESTS();
2404}