115#ifndef GOOGLEMOCK_TEST_GMOCK_LINK_TEST_H_
116#define GOOGLEMOCK_TEST_GMOCK_LINK_TEST_H_
118#include "gmock/gmock.h"
120#if !GTEST_OS_WINDOWS_MOBILE
127#include "gtest/gtest.h"
128#include "gtest/internal/gtest-port.h"
135using testing::Assign;
136using testing::ContainerEq;
138using testing::DoDefault;
139using testing::DoubleEq;
140using testing::ElementsAre;
141using testing::ElementsAreArray;
142using testing::EndsWith;
145using testing::FloatEq;
148using testing::HasSubstr;
149using testing::IgnoreResult;
150using testing::Invoke;
151using testing::InvokeArgument;
152using testing::InvokeWithoutArgs;
153using testing::IsNull;
154using testing::IsSubsetOf;
155using testing::IsSupersetOf;
159using testing::MatcherCast;
160using testing::NanSensitiveDoubleEq;
161using testing::NanSensitiveFloatEq;
164using testing::NotNull;
165using testing::Pointee;
166using testing::Property;
168using testing::ResultOf;
169using testing::Return;
170using testing::ReturnNull;
171using testing::ReturnRef;
172using testing::SetArgPointee;
173using testing::SetArrayArgument;
174using testing::StartsWith;
175using testing::StrCaseEq;
176using testing::StrCaseNe;
180using testing::TypedEq;
181using testing::WithArg;
182using testing::WithArgs;
183using testing::WithoutArgs;
185#if !GTEST_OS_WINDOWS_MOBILE
186using testing::SetErrnoAndReturn;
189#if GTEST_HAS_EXCEPTIONS
193using testing::ContainsRegex;
194using testing::MatchesRegex;
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;
205 virtual void VoidFromFloat(
float n) = 0;
206 virtual void VoidFromDouble(
double n) = 0;
207 virtual void VoidFromVector(
const std::vector<int>& v) = 0;
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));
220 MOCK_METHOD1(VoidFromFloat,
void(
float n));
221 MOCK_METHOD1(VoidFromDouble,
void(
double n));
222 MOCK_METHOD1(VoidFromVector,
void(
const std::vector<int>& v));
225 GTEST_DISALLOW_COPY_AND_ASSIGN_(
Mock);
230 static void StaticVoidFromVoid() {}
231 void VoidFromVoid() {}
232 static void StaticVoidFromString(
char* ) {}
233 void VoidFromString(
char* ) {}
234 static int StaticIntFromString(
char* ) {
return 1; }
235 static bool StaticBoolFromString(
const char* ) {
return true; }
240 explicit FieldHelper(
int a_field) : field_(a_field) {}
241 int field()
const {
return field_; }
247TEST(LinkTest, TestReturnVoid) {
250 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Return());
251 mock.VoidFromString(
nullptr);
255TEST(LinkTest, TestReturn) {
259 EXPECT_CALL(mock, StringFromString(_)).WillOnce(Return(&ch));
260 mock.StringFromString(
nullptr);
264TEST(LinkTest, TestReturnNull) {
267 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Return());
268 mock.VoidFromString(
nullptr);
272TEST(LinkTest, TestReturnRef) {
276 EXPECT_CALL(mock, IntRefFromString(_)).WillOnce(ReturnRef(n));
277 mock.IntRefFromString(
nullptr);
281TEST(LinkTest, TestAssign) {
285 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Assign(&ch,
'y'));
286 mock.VoidFromString(
nullptr);
290TEST(LinkTest, TestSetArgPointee) {
294 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(SetArgPointee<0>(
'y'));
295 mock.VoidFromString(&ch);
299TEST(LinkTest, TestSetArrayArgument) {
304 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(SetArrayArgument<0>(&ch2,
306 mock.VoidFromString(&ch);
309#if !GTEST_OS_WINDOWS_MOBILE
312TEST(LinkTest, TestSetErrnoAndReturn) {
315 int saved_errno = errno;
316 EXPECT_CALL(mock, IntFromString(_)).WillOnce(SetErrnoAndReturn(1, -1));
317 mock.IntFromString(
nullptr);
324TEST(LinkTest, TestInvoke) {
328 EXPECT_CALL(mock, VoidFromString(_))
329 .WillOnce(Invoke(&InvokeHelper::StaticVoidFromString))
330 .WillOnce(Invoke(&test_invoke_helper, &InvokeHelper::VoidFromString));
331 mock.VoidFromString(
nullptr);
332 mock.VoidFromString(
nullptr);
336TEST(LinkTest, TestInvokeWithoutArgs) {
340 EXPECT_CALL(mock, VoidFromString(_))
341 .WillOnce(InvokeWithoutArgs(&InvokeHelper::StaticVoidFromVoid))
342 .WillOnce(InvokeWithoutArgs(&test_invoke_helper,
343 &InvokeHelper::VoidFromVoid));
344 mock.VoidFromString(
nullptr);
345 mock.VoidFromString(
nullptr);
349TEST(LinkTest, TestInvokeArgument) {
353 EXPECT_CALL(mock, VoidFromFunc(_)).WillOnce(InvokeArgument<0>(&ch));
354 mock.VoidFromFunc(InvokeHelper::StaticVoidFromString);
358TEST(LinkTest, TestWithArg) {
361 EXPECT_CALL(mock, VoidFromString(_))
362 .WillOnce(WithArg<0>(Invoke(&InvokeHelper::StaticVoidFromString)));
363 mock.VoidFromString(
nullptr);
367TEST(LinkTest, TestWithArgs) {
370 EXPECT_CALL(mock, VoidFromString(_))
371 .WillOnce(WithArgs<0>(Invoke(&InvokeHelper::StaticVoidFromString)));
372 mock.VoidFromString(
nullptr);
376TEST(LinkTest, TestWithoutArgs) {
379 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(WithoutArgs(Return()));
380 mock.VoidFromString(
nullptr);
384TEST(LinkTest, TestDoAll) {
388 EXPECT_CALL(mock, VoidFromString(_))
389 .WillOnce(DoAll(SetArgPointee<0>(
'y'), Return()));
390 mock.VoidFromString(&ch);
394TEST(LinkTest, TestDoDefault) {
398 ON_CALL(mock, VoidFromString(_)).WillByDefault(Return());
399 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(DoDefault());
400 mock.VoidFromString(&ch);
404TEST(LinkTest, TestIgnoreResult) {
407 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(IgnoreResult(Return(42)));
408 mock.VoidFromString(
nullptr);
411#if GTEST_HAS_EXCEPTIONS
413TEST(LinkTest, TestThrow) {
416 EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Throw(42));
417 EXPECT_THROW(mock.VoidFromString(
nullptr),
int);
427# pragma warning(push)
428# pragma warning(disable:4100)
433ACTION(Return1) {
return 1; }
436TEST(LinkTest, TestActionMacro) {
439 EXPECT_CALL(mock, IntFromString(_)).WillOnce(Return1());
440 mock.IntFromString(
nullptr);
445ACTION_P(ReturnArgument, ret_value) {
return ret_value; }
448TEST(LinkTest, TestActionPMacro) {
451 EXPECT_CALL(mock, IntFromString(_)).WillOnce(ReturnArgument(42));
452 mock.IntFromString(
nullptr);
457ACTION_P2(ReturnEqualsEitherOf, first, second) {
458 return arg0 == first || arg0 == second;
466TEST(LinkTest, TestActionP2Macro) {
470 EXPECT_CALL(mock, IntFromString(_))
471 .WillOnce(ReturnEqualsEitherOf(
"one",
"two"));
472 mock.IntFromString(&ch);
476TEST(LinkTest, TestMatcherAnything) {
479 ON_CALL(mock, VoidFromString(_)).WillByDefault(Return());
483TEST(LinkTest, TestMatcherA) {
486 ON_CALL(mock, VoidFromString(A<char*>())).WillByDefault(Return());
490TEST(LinkTest, TestMatchersEq) {
494 ON_CALL(mock, VoidFromString(Eq(p))).WillByDefault(Return());
495 ON_CALL(mock, VoidFromString(
const_cast<char*
>(
"y")))
496 .WillByDefault(Return());
500TEST(LinkTest, TestMatchersRelations) {
503 ON_CALL(mock, VoidFromFloat(Lt(1.0f))).WillByDefault(Return());
504 ON_CALL(mock, VoidFromFloat(Gt(1.0f))).WillByDefault(Return());
505 ON_CALL(mock, VoidFromFloat(Le(1.0f))).WillByDefault(Return());
506 ON_CALL(mock, VoidFromFloat(Ge(1.0f))).WillByDefault(Return());
507 ON_CALL(mock, VoidFromFloat(Ne(1.0f))).WillByDefault(Return());
511TEST(LinkTest, TestMatcherNotNull) {
514 ON_CALL(mock, VoidFromString(NotNull())).WillByDefault(Return());
518TEST(LinkTest, TestMatcherIsNull) {
521 ON_CALL(mock, VoidFromString(IsNull())).WillByDefault(Return());
525TEST(LinkTest, TestMatcherRef) {
529 ON_CALL(mock, VoidFromIntRef(Ref(a))).WillByDefault(Return());
533TEST(LinkTest, TestMatcherTypedEq) {
537 ON_CALL(mock, VoidFromIntRef(TypedEq<int&>(a))).WillByDefault(Return());
542TEST(LinkTest, TestMatchersFloatingPoint) {
546 ON_CALL(mock, VoidFromFloat(FloatEq(a))).WillByDefault(Return());
547 ON_CALL(mock, VoidFromDouble(DoubleEq(a))).WillByDefault(Return());
548 ON_CALL(mock, VoidFromFloat(NanSensitiveFloatEq(a))).WillByDefault(Return());
549 ON_CALL(mock, VoidFromDouble(NanSensitiveDoubleEq(a)))
550 .WillByDefault(Return());
554TEST(LinkTest, TestMatcherContainsRegex) {
557 ON_CALL(mock, VoidFromString(ContainsRegex(
".*"))).WillByDefault(Return());
561TEST(LinkTest, TestMatcherMatchesRegex) {
564 ON_CALL(mock, VoidFromString(MatchesRegex(
".*"))).WillByDefault(Return());
568TEST(LinkTest, TestMatchersSubstrings) {
571 ON_CALL(mock, VoidFromString(StartsWith(
"a"))).WillByDefault(Return());
572 ON_CALL(mock, VoidFromString(EndsWith(
"c"))).WillByDefault(Return());
573 ON_CALL(mock, VoidFromString(HasSubstr(
"b"))).WillByDefault(Return());
577TEST(LinkTest, TestMatchersStringEquality) {
579 ON_CALL(mock, VoidFromString(StrEq(
"a"))).WillByDefault(Return());
580 ON_CALL(mock, VoidFromString(StrNe(
"a"))).WillByDefault(Return());
581 ON_CALL(mock, VoidFromString(StrCaseEq(
"a"))).WillByDefault(Return());
582 ON_CALL(mock, VoidFromString(StrCaseNe(
"a"))).WillByDefault(Return());
586TEST(LinkTest, TestMatcherElementsAre) {
589 ON_CALL(mock, VoidFromVector(ElementsAre(
'a', _))).WillByDefault(Return());
593TEST(LinkTest, TestMatcherElementsAreArray) {
595 char arr[] = {
'a',
'b' };
597 ON_CALL(mock, VoidFromVector(ElementsAreArray(arr))).WillByDefault(Return());
601TEST(LinkTest, TestMatcherIsSubsetOf) {
603 char arr[] = {
'a',
'b'};
605 ON_CALL(mock, VoidFromVector(IsSubsetOf(arr))).WillByDefault(Return());
609TEST(LinkTest, TestMatcherIsSupersetOf) {
611 char arr[] = {
'a',
'b'};
613 ON_CALL(mock, VoidFromVector(IsSupersetOf(arr))).WillByDefault(Return());
617TEST(LinkTest, TestMatcherContainerEq) {
621 ON_CALL(mock, VoidFromVector(ContainerEq(v))).WillByDefault(Return());
625TEST(LinkTest, TestMatcherField) {
629 EXPECT_TRUE(m.Matches(helper));
632 EXPECT_TRUE(m2.Matches(&helper));
636TEST(LinkTest, TestMatcherProperty) {
640 EXPECT_TRUE(m.Matches(helper));
643 EXPECT_TRUE(m2.Matches(&helper));
647TEST(LinkTest, TestMatcherResultOf) {
648 Matcher<char*> m = ResultOf(&InvokeHelper::StaticIntFromString, Eq(1));
649 EXPECT_TRUE(m.Matches(
nullptr));
653TEST(LinkTest, TestMatcherPointee) {
657 EXPECT_TRUE(m.Matches(&n));
661TEST(LinkTest, TestMatcherTruly) {
663 EXPECT_TRUE(m.Matches(
nullptr));
667TEST(LinkTest, TestMatcherAllOf) {
669 EXPECT_TRUE(m.Matches(1));
673TEST(LinkTest, TestMatcherAnyOf) {
675 EXPECT_TRUE(m.Matches(1));
679TEST(LinkTest, TestMatcherNot) {
681 EXPECT_FALSE(m.Matches(1));
685TEST(LinkTest, TestMatcherCast) {
687 EXPECT_TRUE(m.Matches(
nullptr));
Definition gmock_link_test.h:238
Definition gmock_link_test.h:196
Definition gmock_link_test.h:228
Definition gmock-nice-strict_test.cc:40
Definition gmock-actions.h:438
Definition gmock-internal-utils.h:52