OpenCores
URL https://opencores.org/ocsvn/s80186/s80186/trunk

Subversion Repositories s80186

[/] [s80186/] [trunk/] [vendor/] [googletest/] [googlemock/] [test/] [gmock-spec-builders_test.cc] - Blame information for rev 2

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.