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

Subversion Repositories s80186

[/] [s80186/] [trunk/] [vendor/] [googletest/] [googlemock/] [test/] [gmock-generated-function-mockers_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 function mocker classes.
35
 
36
#include "gmock/gmock-generated-function-mockers.h"
37
 
38
#if GTEST_OS_WINDOWS
39
// MSDN says the header file to be included for STDMETHOD is BaseTyps.h but
40
// we are getting compiler errors if we use basetyps.h, hence including
41
// objbase.h for definition of STDMETHOD.
42
# include <objbase.h>
43
#endif  // GTEST_OS_WINDOWS
44
 
45
#include <map>
46
#include <string>
47
#include "gmock/gmock.h"
48
#include "gtest/gtest.h"
49
 
50
// There is a bug in MSVC (fixed in VS 2008) that prevents creating a
51
// mock for a function with const arguments, so we don't test such
52
// cases for MSVC versions older than 2008.
53
#if !GTEST_OS_WINDOWS || (_MSC_VER >= 1500)
54
# define GMOCK_ALLOWS_CONST_PARAM_FUNCTIONS
55
#endif  // !GTEST_OS_WINDOWS || (_MSC_VER >= 1500)
56
 
57
namespace testing {
58
namespace gmock_generated_function_mockers_test {
59
 
60
using testing::internal::string;
61
using testing::_;
62
using testing::A;
63
using testing::An;
64
using testing::AnyNumber;
65
using testing::Const;
66
using testing::DoDefault;
67
using testing::Eq;
68
using testing::Lt;
69
using testing::MockFunction;
70
using testing::Ref;
71
using testing::Return;
72
using testing::ReturnRef;
73
using testing::TypedEq;
74
 
75
class FooInterface {
76
 public:
77
  virtual ~FooInterface() {}
78
 
79
  virtual void VoidReturning(int x) = 0;
80
 
81
  virtual int Nullary() = 0;
82
  virtual bool Unary(int x) = 0;
83
  virtual long Binary(short x, int y) = 0;  // NOLINT
84
  virtual int Decimal(bool b, char c, short d, int e, long f,  // NOLINT
85
                      float g, double h, unsigned i, char* j, const string& k)
86
      = 0;
87
 
88
  virtual bool TakesNonConstReference(int& n) = 0;  // NOLINT
89
  virtual string TakesConstReference(const int& n) = 0;
90
#ifdef GMOCK_ALLOWS_CONST_PARAM_FUNCTIONS
91
  virtual bool TakesConst(const int x) = 0;
92
#endif  // GMOCK_ALLOWS_CONST_PARAM_FUNCTIONS
93
 
94
  virtual int OverloadedOnArgumentNumber() = 0;
95
  virtual int OverloadedOnArgumentNumber(int n) = 0;
96
 
97
  virtual int OverloadedOnArgumentType(int n) = 0;
98
  virtual char OverloadedOnArgumentType(char c) = 0;
99
 
100
  virtual int OverloadedOnConstness() = 0;
101
  virtual char OverloadedOnConstness() const = 0;
102
 
103
  virtual int TypeWithHole(int (*func)()) = 0;
104
  virtual int TypeWithComma(const std::map<int, string>& a_map) = 0;
105
 
106
#if GTEST_OS_WINDOWS
107
  STDMETHOD_(int, CTNullary)() = 0;
108
  STDMETHOD_(bool, CTUnary)(int x) = 0;
109
  STDMETHOD_(int, CTDecimal)(bool b, char c, short d, int e, long f,  // NOLINT
110
      float g, double h, unsigned i, char* j, const string& k) = 0;
111
  STDMETHOD_(char, CTConst)(int x) const = 0;
112
#endif  // GTEST_OS_WINDOWS
113
};
114
 
115
// Const qualifiers on arguments were once (incorrectly) considered
116
// significant in determining whether two virtual functions had the same
117
// signature. This was fixed in Visual Studio 2008. However, the compiler
118
// still emits a warning that alerts about this change in behavior.
119
#ifdef _MSC_VER
120
# pragma warning(push)
121
# pragma warning(disable : 4373)
122
#endif
123
class MockFoo : public FooInterface {
124
 public:
125
  MockFoo() {}
126
 
127
  // Makes sure that a mock function parameter can be named.
128
  MOCK_METHOD1(VoidReturning, void(int n));  // NOLINT
129
 
130
  MOCK_METHOD0(Nullary, int());  // NOLINT
131
 
132
  // Makes sure that a mock function parameter can be unnamed.
133
  MOCK_METHOD1(Unary, bool(int));  // NOLINT
134
  MOCK_METHOD2(Binary, long(short, int));  // NOLINT
135
  MOCK_METHOD10(Decimal, int(bool, char, short, int, long, float,  // NOLINT
136
                             double, unsigned, char*, const string& str));
137
 
138
  MOCK_METHOD1(TakesNonConstReference, bool(int&));  // NOLINT
139
  MOCK_METHOD1(TakesConstReference, string(const int&));
140
 
141
#ifdef GMOCK_ALLOWS_CONST_PARAM_FUNCTIONS
142
  MOCK_METHOD1(TakesConst, bool(const int));  // NOLINT
143
#endif
144
 
145
  // Tests that the function return type can contain unprotected comma.
146
  MOCK_METHOD0(ReturnTypeWithComma, std::map<int, string>());
147
  MOCK_CONST_METHOD1(ReturnTypeWithComma,
148
                     std::map<int, string>(int));  // NOLINT
149
 
150
  MOCK_METHOD0(OverloadedOnArgumentNumber, int());  // NOLINT
151
  MOCK_METHOD1(OverloadedOnArgumentNumber, int(int));  // NOLINT
152
 
153
  MOCK_METHOD1(OverloadedOnArgumentType, int(int));  // NOLINT
154
  MOCK_METHOD1(OverloadedOnArgumentType, char(char));  // NOLINT
155
 
156
  MOCK_METHOD0(OverloadedOnConstness, int());  // NOLINT
157
  MOCK_CONST_METHOD0(OverloadedOnConstness, char());  // NOLINT
158
 
159
  MOCK_METHOD1(TypeWithHole, int(int (*)()));  // NOLINT
160
  MOCK_METHOD1(TypeWithComma, int(const std::map<int, string>&));  // NOLINT
161
 
162
#if GTEST_OS_WINDOWS
163
  MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, CTNullary, int());
164
  MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, CTUnary, bool(int));
165
  MOCK_METHOD10_WITH_CALLTYPE(STDMETHODCALLTYPE, CTDecimal, int(bool b, char c,
166
      short d, int e, long f, float g, double h, unsigned i, char* j,
167
      const string& k));
168
  MOCK_CONST_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, CTConst, char(int));
169
 
170
  // Tests that the function return type can contain unprotected comma.
171
  MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, CTReturnTypeWithComma,
172
                             std::map<int, string>());
173
#endif  // GTEST_OS_WINDOWS
174
 
175
 private:
176
  GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFoo);
177
};
178
#ifdef _MSC_VER
179
# pragma warning(pop)
180
#endif
181
 
182
class FunctionMockerTest : public testing::Test {
183
 protected:
184
  FunctionMockerTest() : foo_(&mock_foo_) {}
185
 
186
  FooInterface* const foo_;
187
  MockFoo mock_foo_;
188
};
189
 
190
// Tests mocking a void-returning function.
191
TEST_F(FunctionMockerTest, MocksVoidFunction) {
192
  EXPECT_CALL(mock_foo_, VoidReturning(Lt(100)));
193
  foo_->VoidReturning(0);
194
}
195
 
196
// Tests mocking a nullary function.
197
TEST_F(FunctionMockerTest, MocksNullaryFunction) {
198
  EXPECT_CALL(mock_foo_, Nullary())
199
      .WillOnce(DoDefault())
200
      .WillOnce(Return(1));
201
 
202
  EXPECT_EQ(0, foo_->Nullary());
203
  EXPECT_EQ(1, foo_->Nullary());
204
}
205
 
206
// Tests mocking a unary function.
207
TEST_F(FunctionMockerTest, MocksUnaryFunction) {
208
  EXPECT_CALL(mock_foo_, Unary(Eq(2)))
209
      .Times(2)
210
      .WillOnce(Return(true));
211
 
212
  EXPECT_TRUE(foo_->Unary(2));
213
  EXPECT_FALSE(foo_->Unary(2));
214
}
215
 
216
// Tests mocking a binary function.
217
TEST_F(FunctionMockerTest, MocksBinaryFunction) {
218
  EXPECT_CALL(mock_foo_, Binary(2, _))
219
      .WillOnce(Return(3));
220
 
221
  EXPECT_EQ(3, foo_->Binary(2, 1));
222
}
223
 
224
// Tests mocking a decimal function.
225
TEST_F(FunctionMockerTest, MocksDecimalFunction) {
226
  EXPECT_CALL(mock_foo_, Decimal(true, 'a', 0, 0, 1L, A<float>(),
227
                                 Lt(100), 5U, NULL, "hi"))
228
      .WillOnce(Return(5));
229
 
230
  EXPECT_EQ(5, foo_->Decimal(true, 'a', 0, 0, 1, 0, 0, 5, NULL, "hi"));
231
}
232
 
233
// Tests mocking a function that takes a non-const reference.
234
TEST_F(FunctionMockerTest, MocksFunctionWithNonConstReferenceArgument) {
235
  int a = 0;
236
  EXPECT_CALL(mock_foo_, TakesNonConstReference(Ref(a)))
237
      .WillOnce(Return(true));
238
 
239
  EXPECT_TRUE(foo_->TakesNonConstReference(a));
240
}
241
 
242
// Tests mocking a function that takes a const reference.
243
TEST_F(FunctionMockerTest, MocksFunctionWithConstReferenceArgument) {
244
  int a = 0;
245
  EXPECT_CALL(mock_foo_, TakesConstReference(Ref(a)))
246
      .WillOnce(Return("Hello"));
247
 
248
  EXPECT_EQ("Hello", foo_->TakesConstReference(a));
249
}
250
 
251
#ifdef GMOCK_ALLOWS_CONST_PARAM_FUNCTIONS
252
// Tests mocking a function that takes a const variable.
253
TEST_F(FunctionMockerTest, MocksFunctionWithConstArgument) {
254
  EXPECT_CALL(mock_foo_, TakesConst(Lt(10)))
255
      .WillOnce(DoDefault());
256
 
257
  EXPECT_FALSE(foo_->TakesConst(5));
258
}
259
#endif  // GMOCK_ALLOWS_CONST_PARAM_FUNCTIONS
260
 
261
// Tests mocking functions overloaded on the number of arguments.
262
TEST_F(FunctionMockerTest, MocksFunctionsOverloadedOnArgumentNumber) {
263
  EXPECT_CALL(mock_foo_, OverloadedOnArgumentNumber())
264
      .WillOnce(Return(1));
265
  EXPECT_CALL(mock_foo_, OverloadedOnArgumentNumber(_))
266
      .WillOnce(Return(2));
267
 
268
  EXPECT_EQ(2, foo_->OverloadedOnArgumentNumber(1));
269
  EXPECT_EQ(1, foo_->OverloadedOnArgumentNumber());
270
}
271
 
272
// Tests mocking functions overloaded on the types of argument.
273
TEST_F(FunctionMockerTest, MocksFunctionsOverloadedOnArgumentType) {
274
  EXPECT_CALL(mock_foo_, OverloadedOnArgumentType(An<int>()))
275
      .WillOnce(Return(1));
276
  EXPECT_CALL(mock_foo_, OverloadedOnArgumentType(TypedEq<char>('a')))
277
      .WillOnce(Return('b'));
278
 
279
  EXPECT_EQ(1, foo_->OverloadedOnArgumentType(0));
280
  EXPECT_EQ('b', foo_->OverloadedOnArgumentType('a'));
281
}
282
 
283
// Tests mocking functions overloaded on the const-ness of this object.
284
TEST_F(FunctionMockerTest, MocksFunctionsOverloadedOnConstnessOfThis) {
285
  EXPECT_CALL(mock_foo_, OverloadedOnConstness());
286
  EXPECT_CALL(Const(mock_foo_), OverloadedOnConstness())
287
      .WillOnce(Return('a'));
288
 
289
  EXPECT_EQ(0, foo_->OverloadedOnConstness());
290
  EXPECT_EQ('a', Const(*foo_).OverloadedOnConstness());
291
}
292
 
293
TEST_F(FunctionMockerTest, MocksReturnTypeWithComma) {
294
  const std::map<int, string> a_map;
295
  EXPECT_CALL(mock_foo_, ReturnTypeWithComma())
296
      .WillOnce(Return(a_map));
297
  EXPECT_CALL(mock_foo_, ReturnTypeWithComma(42))
298
      .WillOnce(Return(a_map));
299
 
300
  EXPECT_EQ(a_map, mock_foo_.ReturnTypeWithComma());
301
  EXPECT_EQ(a_map, mock_foo_.ReturnTypeWithComma(42));
302
}
303
 
304
#if GTEST_OS_WINDOWS
305
// Tests mocking a nullary function with calltype.
306
TEST_F(FunctionMockerTest, MocksNullaryFunctionWithCallType) {
307
  EXPECT_CALL(mock_foo_, CTNullary())
308
      .WillOnce(Return(-1))
309
      .WillOnce(Return(0));
310
 
311
  EXPECT_EQ(-1, foo_->CTNullary());
312
  EXPECT_EQ(0, foo_->CTNullary());
313
}
314
 
315
// Tests mocking a unary function with calltype.
316
TEST_F(FunctionMockerTest, MocksUnaryFunctionWithCallType) {
317
  EXPECT_CALL(mock_foo_, CTUnary(Eq(2)))
318
      .Times(2)
319
      .WillOnce(Return(true))
320
      .WillOnce(Return(false));
321
 
322
  EXPECT_TRUE(foo_->CTUnary(2));
323
  EXPECT_FALSE(foo_->CTUnary(2));
324
}
325
 
326
// Tests mocking a decimal function with calltype.
327
TEST_F(FunctionMockerTest, MocksDecimalFunctionWithCallType) {
328
  EXPECT_CALL(mock_foo_, CTDecimal(true, 'a', 0, 0, 1L, A<float>(),
329
                                   Lt(100), 5U, NULL, "hi"))
330
      .WillOnce(Return(10));
331
 
332
  EXPECT_EQ(10, foo_->CTDecimal(true, 'a', 0, 0, 1, 0, 0, 5, NULL, "hi"));
333
}
334
 
335
// Tests mocking functions overloaded on the const-ness of this object.
336
TEST_F(FunctionMockerTest, MocksFunctionsConstFunctionWithCallType) {
337
  EXPECT_CALL(Const(mock_foo_), CTConst(_))
338
      .WillOnce(Return('a'));
339
 
340
  EXPECT_EQ('a', Const(*foo_).CTConst(0));
341
}
342
 
343
TEST_F(FunctionMockerTest, MocksReturnTypeWithCommaAndCallType) {
344
  const std::map<int, string> a_map;
345
  EXPECT_CALL(mock_foo_, CTReturnTypeWithComma())
346
      .WillOnce(Return(a_map));
347
 
348
  EXPECT_EQ(a_map, mock_foo_.CTReturnTypeWithComma());
349
}
350
 
351
#endif  // GTEST_OS_WINDOWS
352
 
353
class MockB {
354
 public:
355
  MockB() {}
356
 
357
  MOCK_METHOD0(DoB, void());
358
 
359
 private:
360
  GTEST_DISALLOW_COPY_AND_ASSIGN_(MockB);
361
};
362
 
363
// Tests that functions with no EXPECT_CALL() ruls can be called any
364
// number of times.
365
TEST(ExpectCallTest, UnmentionedFunctionCanBeCalledAnyNumberOfTimes) {
366
  {
367
    MockB b;
368
  }
369
 
370
  {
371
    MockB b;
372
    b.DoB();
373
  }
374
 
375
  {
376
    MockB b;
377
    b.DoB();
378
    b.DoB();
379
  }
380
}
381
 
382
// Tests mocking template interfaces.
383
 
384
template <typename T>
385
class StackInterface {
386
 public:
387
  virtual ~StackInterface() {}
388
 
389
  // Template parameter appears in function parameter.
390
  virtual void Push(const T& value) = 0;
391
  virtual void Pop() = 0;
392
  virtual int GetSize() const = 0;
393
  // Template parameter appears in function return type.
394
  virtual const T& GetTop() const = 0;
395
};
396
 
397
template <typename T>
398
class MockStack : public StackInterface<T> {
399
 public:
400
  MockStack() {}
401
 
402
  MOCK_METHOD1_T(Push, void(const T& elem));
403
  MOCK_METHOD0_T(Pop, void());
404
  MOCK_CONST_METHOD0_T(GetSize, int());  // NOLINT
405
  MOCK_CONST_METHOD0_T(GetTop, const T&());
406
 
407
  // Tests that the function return type can contain unprotected comma.
408
  MOCK_METHOD0_T(ReturnTypeWithComma, std::map<int, int>());
409
  MOCK_CONST_METHOD1_T(ReturnTypeWithComma, std::map<int, int>(int));  // NOLINT
410
 
411
 private:
412
  GTEST_DISALLOW_COPY_AND_ASSIGN_(MockStack);
413
};
414
 
415
// Tests that template mock works.
416
TEST(TemplateMockTest, Works) {
417
  MockStack<int> mock;
418
 
419
  EXPECT_CALL(mock, GetSize())
420
      .WillOnce(Return(0))
421
      .WillOnce(Return(1))
422
      .WillOnce(Return(0));
423
  EXPECT_CALL(mock, Push(_));
424
  int n = 5;
425
  EXPECT_CALL(mock, GetTop())
426
      .WillOnce(ReturnRef(n));
427
  EXPECT_CALL(mock, Pop())
428
      .Times(AnyNumber());
429
 
430
  EXPECT_EQ(0, mock.GetSize());
431
  mock.Push(5);
432
  EXPECT_EQ(1, mock.GetSize());
433
  EXPECT_EQ(5, mock.GetTop());
434
  mock.Pop();
435
  EXPECT_EQ(0, mock.GetSize());
436
}
437
 
438
TEST(TemplateMockTest, MethodWithCommaInReturnTypeWorks) {
439
  MockStack<int> mock;
440
 
441
  const std::map<int, int> a_map;
442
  EXPECT_CALL(mock, ReturnTypeWithComma())
443
      .WillOnce(Return(a_map));
444
  EXPECT_CALL(mock, ReturnTypeWithComma(1))
445
      .WillOnce(Return(a_map));
446
 
447
  EXPECT_EQ(a_map, mock.ReturnTypeWithComma());
448
  EXPECT_EQ(a_map, mock.ReturnTypeWithComma(1));
449
}
450
 
451
#if GTEST_OS_WINDOWS
452
// Tests mocking template interfaces with calltype.
453
 
454
template <typename T>
455
class StackInterfaceWithCallType {
456
 public:
457
  virtual ~StackInterfaceWithCallType() {}
458
 
459
  // Template parameter appears in function parameter.
460
  STDMETHOD_(void, Push)(const T& value) = 0;
461
  STDMETHOD_(void, Pop)() = 0;
462
  STDMETHOD_(int, GetSize)() const = 0;
463
  // Template parameter appears in function return type.
464
  STDMETHOD_(const T&, GetTop)() const = 0;
465
};
466
 
467
template <typename T>
468
class MockStackWithCallType : public StackInterfaceWithCallType<T> {
469
 public:
470
  MockStackWithCallType() {}
471
 
472
  MOCK_METHOD1_T_WITH_CALLTYPE(STDMETHODCALLTYPE, Push, void(const T& elem));
473
  MOCK_METHOD0_T_WITH_CALLTYPE(STDMETHODCALLTYPE, Pop, void());
474
  MOCK_CONST_METHOD0_T_WITH_CALLTYPE(STDMETHODCALLTYPE, GetSize, int());
475
  MOCK_CONST_METHOD0_T_WITH_CALLTYPE(STDMETHODCALLTYPE, GetTop, const T&());
476
 
477
 private:
478
  GTEST_DISALLOW_COPY_AND_ASSIGN_(MockStackWithCallType);
479
};
480
 
481
// Tests that template mock with calltype works.
482
TEST(TemplateMockTestWithCallType, Works) {
483
  MockStackWithCallType<int> mock;
484
 
485
  EXPECT_CALL(mock, GetSize())
486
      .WillOnce(Return(0))
487
      .WillOnce(Return(1))
488
      .WillOnce(Return(0));
489
  EXPECT_CALL(mock, Push(_));
490
  int n = 5;
491
  EXPECT_CALL(mock, GetTop())
492
      .WillOnce(ReturnRef(n));
493
  EXPECT_CALL(mock, Pop())
494
      .Times(AnyNumber());
495
 
496
  EXPECT_EQ(0, mock.GetSize());
497
  mock.Push(5);
498
  EXPECT_EQ(1, mock.GetSize());
499
  EXPECT_EQ(5, mock.GetTop());
500
  mock.Pop();
501
  EXPECT_EQ(0, mock.GetSize());
502
}
503
#endif  // GTEST_OS_WINDOWS
504
 
505
#define MY_MOCK_METHODS1_ \
506
    MOCK_METHOD0(Overloaded, void()); \
507
    MOCK_CONST_METHOD1(Overloaded, int(int n)); \
508
    MOCK_METHOD2(Overloaded, bool(bool f, int n))
509
 
510
class MockOverloadedOnArgNumber {
511
 public:
512
  MockOverloadedOnArgNumber() {}
513
 
514
  MY_MOCK_METHODS1_;
515
 
516
 private:
517
  GTEST_DISALLOW_COPY_AND_ASSIGN_(MockOverloadedOnArgNumber);
518
};
519
 
520
TEST(OverloadedMockMethodTest, CanOverloadOnArgNumberInMacroBody) {
521
  MockOverloadedOnArgNumber mock;
522
  EXPECT_CALL(mock, Overloaded());
523
  EXPECT_CALL(mock, Overloaded(1)).WillOnce(Return(2));
524
  EXPECT_CALL(mock, Overloaded(true, 1)).WillOnce(Return(true));
525
 
526
  mock.Overloaded();
527
  EXPECT_EQ(2, mock.Overloaded(1));
528
  EXPECT_TRUE(mock.Overloaded(true, 1));
529
}
530
 
531
#define MY_MOCK_METHODS2_ \
532
    MOCK_CONST_METHOD1(Overloaded, int(int n)); \
533
    MOCK_METHOD1(Overloaded, int(int n));
534
 
535
class MockOverloadedOnConstness {
536
 public:
537
  MockOverloadedOnConstness() {}
538
 
539
  MY_MOCK_METHODS2_;
540
 
541
 private:
542
  GTEST_DISALLOW_COPY_AND_ASSIGN_(MockOverloadedOnConstness);
543
};
544
 
545
TEST(OverloadedMockMethodTest, CanOverloadOnConstnessInMacroBody) {
546
  MockOverloadedOnConstness mock;
547
  const MockOverloadedOnConstness* const_mock = &mock;
548
  EXPECT_CALL(mock, Overloaded(1)).WillOnce(Return(2));
549
  EXPECT_CALL(*const_mock, Overloaded(1)).WillOnce(Return(3));
550
 
551
  EXPECT_EQ(2, mock.Overloaded(1));
552
  EXPECT_EQ(3, const_mock->Overloaded(1));
553
}
554
 
555
TEST(MockFunctionTest, WorksForVoidNullary) {
556
  MockFunction<void()> foo;
557
  EXPECT_CALL(foo, Call());
558
  foo.Call();
559
}
560
 
561
TEST(MockFunctionTest, WorksForNonVoidNullary) {
562
  MockFunction<int()> foo;
563
  EXPECT_CALL(foo, Call())
564
      .WillOnce(Return(1))
565
      .WillOnce(Return(2));
566
  EXPECT_EQ(1, foo.Call());
567
  EXPECT_EQ(2, foo.Call());
568
}
569
 
570
TEST(MockFunctionTest, WorksForVoidUnary) {
571
  MockFunction<void(int)> foo;
572
  EXPECT_CALL(foo, Call(1));
573
  foo.Call(1);
574
}
575
 
576
TEST(MockFunctionTest, WorksForNonVoidBinary) {
577
  MockFunction<int(bool, int)> foo;
578
  EXPECT_CALL(foo, Call(false, 42))
579
      .WillOnce(Return(1))
580
      .WillOnce(Return(2));
581
  EXPECT_CALL(foo, Call(true, Ge(100)))
582
      .WillOnce(Return(3));
583
  EXPECT_EQ(1, foo.Call(false, 42));
584
  EXPECT_EQ(2, foo.Call(false, 42));
585
  EXPECT_EQ(3, foo.Call(true, 120));
586
}
587
 
588
TEST(MockFunctionTest, WorksFor10Arguments) {
589
  MockFunction<int(bool a0, char a1, int a2, int a3, int a4,
590
                   int a5, int a6, char a7, int a8, bool a9)> foo;
591
  EXPECT_CALL(foo, Call(_, 'a', _, _, _, _, _, _, _, _))
592
      .WillOnce(Return(1))
593
      .WillOnce(Return(2));
594
  EXPECT_EQ(1, foo.Call(false, 'a', 0, 0, 0, 0, 0, 'b', 0, true));
595
  EXPECT_EQ(2, foo.Call(true, 'a', 0, 0, 0, 0, 0, 'b', 1, false));
596
}
597
 
598
#if GTEST_HAS_STD_FUNCTION_
599
TEST(MockFunctionTest, AsStdFunction) {
600
  MockFunction<int(int)> foo;
601
  auto call = [](const std::function<int(int)> &f, int i) {
602
    return f(i);
603
  };
604
  EXPECT_CALL(foo, Call(1)).WillOnce(Return(-1));
605
  EXPECT_CALL(foo, Call(2)).WillOnce(Return(-2));
606
  EXPECT_EQ(-1, call(foo.AsStdFunction(), 1));
607
  EXPECT_EQ(-2, call(foo.AsStdFunction(), 2));
608
}
609
 
610
TEST(MockFunctionTest, AsStdFunctionReturnsReference) {
611
  MockFunction<int&()> foo;
612
  int value = 1;
613
  EXPECT_CALL(foo, Call()).WillOnce(ReturnRef(value));
614
  int& ref = foo.AsStdFunction()();
615
  EXPECT_EQ(1, ref);
616
  value = 2;
617
  EXPECT_EQ(2, ref);
618
}
619
#endif  // GTEST_HAS_STD_FUNCTION_
620
 
621
}  // namespace gmock_generated_function_mockers_test
622
}  // namespace testing

powered by: WebSVN 2.1.0

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