Sacado Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
gmock_link_test.h
Go to the documentation of this file.
1 // Copyright 2009, Google Inc.
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are
6 // met:
7 //
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above
11 // copyright notice, this list of conditions and the following disclaimer
12 // in the documentation and/or other materials provided with the
13 // distribution.
14 // * Neither the name of Google Inc. nor the names of its
15 // contributors may be used to endorse or promote products derived from
16 // this software without specific prior written permission.
17 //
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 
30 // Google Mock - a framework for writing C++ mock classes.
31 //
32 // This file tests that:
33 // a. A header file defining a mock class can be included in multiple
34 // translation units without causing a link error.
35 // b. Actions and matchers can be instantiated with identical template
36 // arguments in different translation units without causing link
37 // errors.
38 // The following constructs are currently tested:
39 // Actions:
40 // Return()
41 // Return(value)
42 // ReturnNull
43 // ReturnRef
44 // Assign
45 // SetArgPointee
46 // SetArrayArgument
47 // SetErrnoAndReturn
48 // Invoke(function)
49 // Invoke(object, method)
50 // InvokeWithoutArgs(function)
51 // InvokeWithoutArgs(object, method)
52 // InvokeArgument
53 // WithArg
54 // WithArgs
55 // WithoutArgs
56 // DoAll
57 // DoDefault
58 // IgnoreResult
59 // Throw
60 // ACTION()-generated
61 // ACTION_P()-generated
62 // ACTION_P2()-generated
63 // Matchers:
64 // _
65 // A
66 // An
67 // Eq
68 // Gt, Lt, Ge, Le, Ne
69 // NotNull
70 // Ref
71 // TypedEq
72 // DoubleEq
73 // FloatEq
74 // NanSensitiveDoubleEq
75 // NanSensitiveFloatEq
76 // ContainsRegex
77 // MatchesRegex
78 // EndsWith
79 // HasSubstr
80 // StartsWith
81 // StrCaseEq
82 // StrCaseNe
83 // StrEq
84 // StrNe
85 // ElementsAre
86 // ElementsAreArray
87 // ContainerEq
88 // Field
89 // Property
90 // ResultOf(function)
91 // ResultOf(callback)
92 // Pointee
93 // Truly(predicate)
94 // AddressSatisfies
95 // AllOf
96 // AnyOf
97 // Not
98 // MatcherCast<T>
99 //
100 // Please note: this test does not verify the functioning of these
101 // constructs, only that the programs using them will link successfully.
102 //
103 // Implementation note:
104 // This test requires identical definitions of Interface and Mock to be
105 // included in different translation units. We achieve this by writing
106 // them in this header and #including it in gmock_link_test.cc and
107 // gmock_link2_test.cc. Because the symbols generated by the compiler for
108 // those constructs must be identical in both translation units,
109 // definitions of Interface and Mock tests MUST be kept in the SAME
110 // NON-ANONYMOUS namespace in this file. The test fixture class LinkTest
111 // is defined as LinkTest1 in gmock_link_test.cc and as LinkTest2 in
112 // gmock_link2_test.cc to avoid producing linker errors.
113 
114 #ifndef GOOGLEMOCK_TEST_GMOCK_LINK_TEST_H_
115 #define GOOGLEMOCK_TEST_GMOCK_LINK_TEST_H_
116 
117 #include "gmock/gmock.h"
118 
119 #ifndef GTEST_OS_WINDOWS_MOBILE
120 #include <errno.h>
121 #endif
122 
123 #include <iostream>
124 #include <vector>
125 
126 #include "gtest/gtest.h"
128 
129 using testing::_;
130 using testing::A;
131 using testing::Action;
132 using testing::AllOf;
133 using testing::AnyOf;
134 using testing::Assign;
135 using testing::ContainerEq;
136 using testing::DoAll;
137 using testing::DoDefault;
138 using testing::DoubleEq;
139 using testing::ElementsAre;
140 using testing::ElementsAreArray;
141 using testing::EndsWith;
142 using testing::Eq;
143 using testing::Field;
144 using testing::FloatEq;
145 using testing::Ge;
146 using testing::Gt;
147 using testing::HasSubstr;
149 using testing::Invoke;
152 using testing::IsNull;
153 using testing::IsSubsetOf;
154 using testing::IsSupersetOf;
155 using testing::Le;
156 using testing::Lt;
157 using testing::Matcher;
158 using testing::MatcherCast;
159 using testing::NanSensitiveDoubleEq;
160 using testing::NanSensitiveFloatEq;
161 using testing::Ne;
162 using testing::Not;
163 using testing::NotNull;
164 using testing::Pointee;
165 using testing::Property;
166 using testing::Ref;
167 using testing::ResultOf;
168 using testing::Return;
169 using testing::ReturnNull;
170 using testing::ReturnRef;
173 using testing::StartsWith;
174 using testing::StrCaseEq;
175 using testing::StrCaseNe;
176 using testing::StrEq;
177 using testing::StrNe;
178 using testing::Truly;
179 using testing::TypedEq;
180 using testing::WithArg;
181 using testing::WithArgs;
183 
184 #ifndef GTEST_OS_WINDOWS_MOBILE
186 #endif
187 
188 #if GTEST_HAS_EXCEPTIONS
189 using testing::Rethrow;
190 using testing::Throw;
191 #endif
192 
193 using testing::ContainsRegex;
194 using testing::MatchesRegex;
195 
196 class Interface {
197  public:
198  virtual ~Interface() = default;
199  virtual void VoidFromString(char* str) = 0;
200  virtual char* StringFromString(char* str) = 0;
201  virtual int IntFromString(char* str) = 0;
202  virtual int& IntRefFromString(char* str) = 0;
203  virtual void VoidFromFunc(void (*func)(char* str)) = 0;
204  virtual void VoidFromIntRef(int& n) = 0; // NOLINT
205  virtual void VoidFromFloat(float n) = 0;
206  virtual void VoidFromDouble(double n) = 0;
207  virtual void VoidFromVector(const std::vector<int>& v) = 0;
208 };
209 
210 class Mock : public Interface {
211  public:
212  Mock() = default;
213 
214  MOCK_METHOD1(VoidFromString, void(char* str));
215  MOCK_METHOD1(StringFromString, char*(char* str));
216  MOCK_METHOD1(IntFromString, int(char* str));
217  MOCK_METHOD1(IntRefFromString, int&(char* str));
218  MOCK_METHOD1(VoidFromFunc, void(void (*func)(char* str)));
219  MOCK_METHOD1(VoidFromIntRef, void(int& n)); // NOLINT
220  MOCK_METHOD1(VoidFromFloat, void(float n));
221  MOCK_METHOD1(VoidFromDouble, void(double n));
222  MOCK_METHOD1(VoidFromVector, void(const std::vector<int>& v));
223 
224  private:
225  Mock(const Mock&) = delete;
226  Mock& operator=(const Mock&) = delete;
227 };
228 
230  public:
231  static void StaticVoidFromVoid() {}
232  void VoidFromVoid() {}
233  static void StaticVoidFromString(char* /* str */) {}
234  void VoidFromString(char* /* str */) {}
235  static int StaticIntFromString(char* /* str */) { return 1; }
236  static bool StaticBoolFromString(const char* /* str */) { return true; }
237 };
238 
239 class FieldHelper {
240  public:
241  explicit FieldHelper(int a_field) : field_(a_field) {}
242  int field() const { return field_; }
243  int field_; // NOLINT -- need external access to field_ to test
244  // the Field matcher.
245 };
246 
247 // Tests the linkage of the ReturnVoid action.
248 TEST(LinkTest, TestReturnVoid) {
249  Mock mock;
250 
251  EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Return());
252  mock.VoidFromString(nullptr);
253 }
254 
255 // Tests the linkage of the Return action.
256 TEST(LinkTest, TestReturn) {
257  Mock mock;
258  char ch = 'x';
259 
260  EXPECT_CALL(mock, StringFromString(_)).WillOnce(Return(&ch));
261  mock.StringFromString(nullptr);
262 }
263 
264 // Tests the linkage of the ReturnNull action.
265 TEST(LinkTest, TestReturnNull) {
266  Mock mock;
267 
268  EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Return());
269  mock.VoidFromString(nullptr);
270 }
271 
272 // Tests the linkage of the ReturnRef action.
273 TEST(LinkTest, TestReturnRef) {
274  Mock mock;
275  int n = 42;
276 
277  EXPECT_CALL(mock, IntRefFromString(_)).WillOnce(ReturnRef(n));
278  mock.IntRefFromString(nullptr);
279 }
280 
281 // Tests the linkage of the Assign action.
282 TEST(LinkTest, TestAssign) {
283  Mock mock;
284  char ch = 'x';
285 
286  EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Assign(&ch, 'y'));
287  mock.VoidFromString(nullptr);
288 }
289 
290 // Tests the linkage of the SetArgPointee action.
291 TEST(LinkTest, TestSetArgPointee) {
292  Mock mock;
293  char ch = 'x';
294 
295  EXPECT_CALL(mock, VoidFromString(_)).WillOnce(SetArgPointee<0>('y'));
296  mock.VoidFromString(&ch);
297 }
298 
299 // Tests the linkage of the SetArrayArgument action.
300 TEST(LinkTest, TestSetArrayArgument) {
301  Mock mock;
302  char ch = 'x';
303  char ch2 = 'y';
304 
305  EXPECT_CALL(mock, VoidFromString(_))
306  .WillOnce(SetArrayArgument<0>(&ch2, &ch2 + 1));
307  mock.VoidFromString(&ch);
308 }
309 
310 #ifndef GTEST_OS_WINDOWS_MOBILE
311 
312 // Tests the linkage of the SetErrnoAndReturn action.
313 TEST(LinkTest, TestSetErrnoAndReturn) {
314  Mock mock;
315 
316  int saved_errno = errno;
317  EXPECT_CALL(mock, IntFromString(_)).WillOnce(SetErrnoAndReturn(1, -1));
318  mock.IntFromString(nullptr);
319  errno = saved_errno;
320 }
321 
322 #endif // !GTEST_OS_WINDOWS_MOBILE
323 
324 // Tests the linkage of the Invoke(function) and Invoke(object, method) actions.
325 TEST(LinkTest, TestInvoke) {
326  Mock mock;
327  InvokeHelper test_invoke_helper;
328 
329  EXPECT_CALL(mock, VoidFromString(_))
331  .WillOnce(Invoke(&test_invoke_helper, &InvokeHelper::VoidFromString));
332  mock.VoidFromString(nullptr);
333  mock.VoidFromString(nullptr);
334 }
335 
336 // Tests the linkage of the InvokeWithoutArgs action.
337 TEST(LinkTest, TestInvokeWithoutArgs) {
338  Mock mock;
339  InvokeHelper test_invoke_helper;
340 
341  EXPECT_CALL(mock, VoidFromString(_))
343  .WillOnce(
344  InvokeWithoutArgs(&test_invoke_helper, &InvokeHelper::VoidFromVoid));
345  mock.VoidFromString(nullptr);
346  mock.VoidFromString(nullptr);
347 }
348 
349 // Tests the linkage of the InvokeArgument action.
350 TEST(LinkTest, TestInvokeArgument) {
351  Mock mock;
352  char ch = 'x';
353 
354  EXPECT_CALL(mock, VoidFromFunc(_)).WillOnce(InvokeArgument<0>(&ch));
356 }
357 
358 // Tests the linkage of the WithArg action.
359 TEST(LinkTest, TestWithArg) {
360  Mock mock;
361 
362  EXPECT_CALL(mock, VoidFromString(_))
363  .WillOnce(WithArg<0>(Invoke(&InvokeHelper::StaticVoidFromString)));
364  mock.VoidFromString(nullptr);
365 }
366 
367 // Tests the linkage of the WithArgs action.
368 TEST(LinkTest, TestWithArgs) {
369  Mock mock;
370 
371  EXPECT_CALL(mock, VoidFromString(_))
372  .WillOnce(WithArgs<0>(Invoke(&InvokeHelper::StaticVoidFromString)));
373  mock.VoidFromString(nullptr);
374 }
375 
376 // Tests the linkage of the WithoutArgs action.
377 TEST(LinkTest, TestWithoutArgs) {
378  Mock mock;
379 
380  EXPECT_CALL(mock, VoidFromString(_)).WillOnce(WithoutArgs(Return()));
381  mock.VoidFromString(nullptr);
382 }
383 
384 // Tests the linkage of the DoAll action.
385 TEST(LinkTest, TestDoAll) {
386  Mock mock;
387  char ch = 'x';
388 
389  EXPECT_CALL(mock, VoidFromString(_))
390  .WillOnce(DoAll(SetArgPointee<0>('y'), Return()));
391  mock.VoidFromString(&ch);
392 }
393 
394 // Tests the linkage of the DoDefault action.
395 TEST(LinkTest, TestDoDefault) {
396  Mock mock;
397  char ch = 'x';
398 
399  ON_CALL(mock, VoidFromString(_)).WillByDefault(Return());
400  EXPECT_CALL(mock, VoidFromString(_)).WillOnce(DoDefault());
401  mock.VoidFromString(&ch);
402 }
403 
404 // Tests the linkage of the IgnoreResult action.
405 TEST(LinkTest, TestIgnoreResult) {
406  Mock mock;
407 
408  EXPECT_CALL(mock, VoidFromString(_)).WillOnce(IgnoreResult(Return(42)));
409  mock.VoidFromString(nullptr);
410 }
411 
412 #if GTEST_HAS_EXCEPTIONS
413 // Tests the linkage of the Throw action.
414 TEST(LinkTest, TestThrow) {
415  Mock mock;
416 
417  EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Throw(42));
418  EXPECT_THROW(mock.VoidFromString(nullptr), int);
419 }
420 // Tests the linkage of the Rethrow action.
421 TEST(LinkTest, TestRethrow) {
422  Mock mock;
423 
424  EXPECT_CALL(mock, VoidFromString(_))
425  .WillOnce(Rethrow(std::make_exception_ptr(42)));
426  EXPECT_THROW(mock.VoidFromString(nullptr), int);
427 }
428 #endif // GTEST_HAS_EXCEPTIONS
429 
430 // The ACTION*() macros trigger warning C4100 (unreferenced formal
431 // parameter) in MSVC with -W4. Unfortunately they cannot be fixed in
432 // the macro definition, as the warnings are generated when the macro
433 // is expanded and macro expansion cannot contain #pragma. Therefore
434 // we suppress them here.
436 
437 // Tests the linkage of actions created using ACTION macro.
438 namespace {
439 ACTION(Return1) { return 1; }
440 } // namespace
441 
442 TEST(LinkTest, TestActionMacro) {
443  Mock mock;
444 
445  EXPECT_CALL(mock, IntFromString(_)).WillOnce(Return1());
446  mock.IntFromString(nullptr);
447 }
448 
449 // Tests the linkage of actions created using ACTION_P macro.
450 namespace {
451 ACTION_P(ReturnArgument, ret_value) { return ret_value; }
452 } // namespace
453 
454 TEST(LinkTest, TestActionPMacro) {
455  Mock mock;
456 
457  EXPECT_CALL(mock, IntFromString(_)).WillOnce(ReturnArgument(42));
458  mock.IntFromString(nullptr);
459 }
460 
461 // Tests the linkage of actions created using ACTION_P2 macro.
462 namespace {
463 ACTION_P2(ReturnEqualsEitherOf, first, second) {
464  return arg0 == first || arg0 == second;
465 }
466 } // namespace
467 
469 
471  Mock mock;
472  char ch = 'x';
473 
474  EXPECT_CALL(mock, IntFromString(_))
475  .WillOnce(ReturnEqualsEitherOf("one", "two"));
476  mock.IntFromString(&ch);
477 }
478 
479 // Tests the linkage of the "_" matcher.
480 TEST(LinkTest, TestMatcherAnything) {
481  Mock mock;
482 
483  ON_CALL(mock, VoidFromString(_)).WillByDefault(Return());
484 }
485 
486 // Tests the linkage of the A matcher.
487 TEST(LinkTest, TestMatcherA) {
488  Mock mock;
489 
490  ON_CALL(mock, VoidFromString(A<char*>())).WillByDefault(Return());
491 }
492 
493 // Tests the linkage of the Eq and the "bare value" matcher.
494 TEST(LinkTest, TestMatchersEq) {
495  Mock mock;
496  const char* p = "x";
497 
498  ON_CALL(mock, VoidFromString(Eq(p))).WillByDefault(Return());
499  ON_CALL(mock, VoidFromString(const_cast<char*>("y"))).WillByDefault(Return());
500 }
501 
502 // Tests the linkage of the Lt, Gt, Le, Ge, and Ne matchers.
503 TEST(LinkTest, TestMatchersRelations) {
504  Mock mock;
505 
506  ON_CALL(mock, VoidFromFloat(Lt(1.0f))).WillByDefault(Return());
507  ON_CALL(mock, VoidFromFloat(Gt(1.0f))).WillByDefault(Return());
508  ON_CALL(mock, VoidFromFloat(Le(1.0f))).WillByDefault(Return());
509  ON_CALL(mock, VoidFromFloat(Ge(1.0f))).WillByDefault(Return());
510  ON_CALL(mock, VoidFromFloat(Ne(1.0f))).WillByDefault(Return());
511 }
512 
513 // Tests the linkage of the NotNull matcher.
514 TEST(LinkTest, TestMatcherNotNull) {
515  Mock mock;
516 
517  ON_CALL(mock, VoidFromString(NotNull())).WillByDefault(Return());
518 }
519 
520 // Tests the linkage of the IsNull matcher.
521 TEST(LinkTest, TestMatcherIsNull) {
522  Mock mock;
523 
524  ON_CALL(mock, VoidFromString(IsNull())).WillByDefault(Return());
525 }
526 
527 // Tests the linkage of the Ref matcher.
528 TEST(LinkTest, TestMatcherRef) {
529  Mock mock;
530  int a = 0;
531 
532  ON_CALL(mock, VoidFromIntRef(Ref(a))).WillByDefault(Return());
533 }
534 
535 // Tests the linkage of the TypedEq matcher.
536 TEST(LinkTest, TestMatcherTypedEq) {
537  Mock mock;
538  long a = 0;
539 
540  ON_CALL(mock, VoidFromIntRef(TypedEq<int&>(a))).WillByDefault(Return());
541 }
542 
543 // Tests the linkage of the FloatEq, DoubleEq, NanSensitiveFloatEq and
544 // NanSensitiveDoubleEq matchers.
545 TEST(LinkTest, TestMatchersFloatingPoint) {
546  Mock mock;
547  float a = 0;
548 
549  ON_CALL(mock, VoidFromFloat(FloatEq(a))).WillByDefault(Return());
550  ON_CALL(mock, VoidFromDouble(DoubleEq(a))).WillByDefault(Return());
551  ON_CALL(mock, VoidFromFloat(NanSensitiveFloatEq(a))).WillByDefault(Return());
552  ON_CALL(mock, VoidFromDouble(NanSensitiveDoubleEq(a)))
553  .WillByDefault(Return());
554 }
555 
556 // Tests the linkage of the ContainsRegex matcher.
557 TEST(LinkTest, TestMatcherContainsRegex) {
558  Mock mock;
559 
560  ON_CALL(mock, VoidFromString(ContainsRegex(".*"))).WillByDefault(Return());
561 }
562 
563 // Tests the linkage of the MatchesRegex matcher.
564 TEST(LinkTest, TestMatcherMatchesRegex) {
565  Mock mock;
566 
567  ON_CALL(mock, VoidFromString(MatchesRegex(".*"))).WillByDefault(Return());
568 }
569 
570 // Tests the linkage of the StartsWith, EndsWith, and HasSubstr matchers.
571 TEST(LinkTest, TestMatchersSubstrings) {
572  Mock mock;
573 
574  ON_CALL(mock, VoidFromString(StartsWith("a"))).WillByDefault(Return());
575  ON_CALL(mock, VoidFromString(EndsWith("c"))).WillByDefault(Return());
576  ON_CALL(mock, VoidFromString(HasSubstr("b"))).WillByDefault(Return());
577 }
578 
579 // Tests the linkage of the StrEq, StrNe, StrCaseEq, and StrCaseNe matchers.
580 TEST(LinkTest, TestMatchersStringEquality) {
581  Mock mock;
582  ON_CALL(mock, VoidFromString(StrEq("a"))).WillByDefault(Return());
583  ON_CALL(mock, VoidFromString(StrNe("a"))).WillByDefault(Return());
584  ON_CALL(mock, VoidFromString(StrCaseEq("a"))).WillByDefault(Return());
585  ON_CALL(mock, VoidFromString(StrCaseNe("a"))).WillByDefault(Return());
586 }
587 
588 // Tests the linkage of the ElementsAre matcher.
589 TEST(LinkTest, TestMatcherElementsAre) {
590  Mock mock;
591 
592  ON_CALL(mock, VoidFromVector(ElementsAre('a', _))).WillByDefault(Return());
593 }
594 
595 // Tests the linkage of the ElementsAreArray matcher.
596 TEST(LinkTest, TestMatcherElementsAreArray) {
597  Mock mock;
598  char arr[] = {'a', 'b'};
599 
600  ON_CALL(mock, VoidFromVector(ElementsAreArray(arr))).WillByDefault(Return());
601 }
602 
603 // Tests the linkage of the IsSubsetOf matcher.
604 TEST(LinkTest, TestMatcherIsSubsetOf) {
605  Mock mock;
606  char arr[] = {'a', 'b'};
607 
608  ON_CALL(mock, VoidFromVector(IsSubsetOf(arr))).WillByDefault(Return());
609 }
610 
611 // Tests the linkage of the IsSupersetOf matcher.
612 TEST(LinkTest, TestMatcherIsSupersetOf) {
613  Mock mock;
614  char arr[] = {'a', 'b'};
615 
616  ON_CALL(mock, VoidFromVector(IsSupersetOf(arr))).WillByDefault(Return());
617 }
618 
619 // Tests the linkage of the ContainerEq matcher.
620 TEST(LinkTest, TestMatcherContainerEq) {
621  Mock mock;
622  std::vector<int> v;
623 
624  ON_CALL(mock, VoidFromVector(ContainerEq(v))).WillByDefault(Return());
625 }
626 
627 // Tests the linkage of the Field matcher.
628 TEST(LinkTest, TestMatcherField) {
629  FieldHelper helper(0);
630 
632  EXPECT_TRUE(m.Matches(helper));
633 
635  EXPECT_TRUE(m2.Matches(&helper));
636 }
637 
638 // Tests the linkage of the Property matcher.
639 TEST(LinkTest, TestMatcherProperty) {
640  FieldHelper helper(0);
641 
642  Matcher<const FieldHelper&> m = Property(&FieldHelper::field, Eq(0));
643  EXPECT_TRUE(m.Matches(helper));
644 
645  Matcher<const FieldHelper*> m2 = Property(&FieldHelper::field, Eq(0));
646  EXPECT_TRUE(m2.Matches(&helper));
647 }
648 
649 // Tests the linkage of the ResultOf matcher.
650 TEST(LinkTest, TestMatcherResultOf) {
652  EXPECT_TRUE(m.Matches(nullptr));
653 }
654 
655 // Tests the linkage of the ResultOf matcher.
656 TEST(LinkTest, TestMatcherPointee) {
657  int n = 1;
658 
659  Matcher<int*> m = Pointee(Eq(1));
660  EXPECT_TRUE(m.Matches(&n));
661 }
662 
663 // Tests the linkage of the Truly matcher.
664 TEST(LinkTest, TestMatcherTruly) {
666  EXPECT_TRUE(m.Matches(nullptr));
667 }
668 
669 // Tests the linkage of the AllOf matcher.
670 TEST(LinkTest, TestMatcherAllOf) {
671  Matcher<int> m = AllOf(_, Eq(1));
672  EXPECT_TRUE(m.Matches(1));
673 }
674 
675 // Tests the linkage of the AnyOf matcher.
676 TEST(LinkTest, TestMatcherAnyOf) {
677  Matcher<int> m = AnyOf(_, Eq(1));
678  EXPECT_TRUE(m.Matches(1));
679 }
680 
681 // Tests the linkage of the Not matcher.
682 TEST(LinkTest, TestMatcherNot) {
683  Matcher<int> m = Not(_);
684  EXPECT_FALSE(m.Matches(1));
685 }
686 
687 // Tests the linkage of the MatcherCast<T>() function.
688 TEST(LinkTest, TestMatcherCast) {
689  Matcher<const char*> m = MatcherCast<const char*>(_);
690  EXPECT_TRUE(m.Matches(nullptr));
691 }
692 
693 #endif // GOOGLEMOCK_TEST_GMOCK_LINK_TEST_H_
void VoidFromString(char *)
constexpr bool StartsWith(const char(&prefix)[N], const char(&str)[M])
PolymorphicAction< internal::ReturnNullAction > ReturnNull()
void f()
virtual void VoidFromVector(const std::vector< int > &v)=0
#define EXPECT_THROW(statement, expected_exception)
Definition: gtest.h:1791
FieldHelper(int a_field)
virtual int IntFromString(char *str)=0
#define ACTION_P(name,...)
constexpr bool EndsWith(const char(&suffix)[N], const char(&str)[M])
virtual void VoidFromFloat(float n)=0
static void StaticVoidFromVoid()
PolymorphicAction< internal::AssignAction< T1, T2 > > Assign(T1 *ptr, T2 val)
static bool StaticBoolFromString(const char *)
int field() const
virtual int & IntRefFromString(char *str)=0
internal::DoAllAction< typename std::decay< Action >::type...> DoAll(Action &&...action)
#define TEST(test_suite_name, test_name)
Definition: gtest.h:2192
#define ON_CALL(obj, call)
internal::InvokeWithoutArgsAction< typename std::decay< FunctionImpl >::type > InvokeWithoutArgs(FunctionImpl function_impl)
static void StaticVoidFromString(char *)
MOCK_METHOD1(VoidFromString, void(char *str))
internal::WithArgsAction< typename std::decay< InnerAction >::type, k, ks...> WithArgs(InnerAction &&action)
PolymorphicAction< internal::SetErrnoAndReturnAction< T > > SetErrnoAndReturn(int errval, T result)
internal::ReturnRefAction< R > ReturnRef(R &x)
std::decay< FunctionImpl >::type Invoke(FunctionImpl &&function_impl)
virtual void VoidFromDouble(double n)=0
#define A
Definition: Sacado_rad.hpp:552
#define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings)
Definition: gtest-port.h:377
const char * p
internal::WithArgsAction< typename std::decay< InnerAction >::type > WithoutArgs(InnerAction &&action)
#define ACTION_P2(name,...)
#define ACTION(name)
internal::SetArgumentPointeeAction< N, T > SetArgPointee(T value)
virtual void VoidFromString(char *str)=0
static int StaticIntFromString(char *)
internal::DoDefaultAction DoDefault()
internal::ReturnAction< R > Return(R value)
#define EXPECT_CALL(obj, call)
Mock()=default
virtual char * StringFromString(char *str)=0
internal::SetArrayArgumentAction< k, I1, I2 > SetArrayArgument(I1 first, I2 last)
internal::WithArgsAction< typename std::decay< InnerAction >::type, k > WithArg(InnerAction &&action)
Mock & operator=(const Mock &)=delete
const T func(int n, T *x)
Definition: ad_example.cpp:29
virtual ~Interface()=default
#define EXPECT_TRUE(condition)
Definition: gtest.h:1823
virtual void VoidFromIntRef(int &n)=0
internal::IgnoreResultAction< A > IgnoreResult(const A &an_action)
virtual void VoidFromFunc(void(*func)(char *str))=0
#define EXPECT_FALSE(condition)
Definition: gtest.h:1827
AssertionResult IsNull(const char *str)
int n
internal::InvokeArgumentAction< index, typename std::decay< Params >::type...> InvokeArgument(Params &&...params)
#define LinkTest