114#ifndef GOOGLEMOCK_TEST_GMOCK_LINK_TEST_H_
115#define GOOGLEMOCK_TEST_GMOCK_LINK_TEST_H_
117#include "gmock/gmock.h"
119#if !GTEST_OS_WINDOWS_MOBILE
126#include "gtest/gtest.h"
127#include "gtest/internal/gtest-port.h"
134using testing::Assign;
135using testing::ContainerEq;
137using testing::DoDefault;
138using testing::DoubleEq;
139using testing::ElementsAre;
140using testing::ElementsAreArray;
141using testing::EndsWith;
144using testing::FloatEq;
147using testing::HasSubstr;
148using testing::IgnoreResult;
149using testing::Invoke;
150using testing::InvokeArgument;
151using testing::InvokeWithoutArgs;
152using testing::IsNull;
153using testing::IsSubsetOf;
154using testing::IsSupersetOf;
158using testing::MatcherCast;
159using testing::NanSensitiveDoubleEq;
160using testing::NanSensitiveFloatEq;
163using testing::NotNull;
164using testing::Pointee;
165using testing::Property;
167using testing::ResultOf;
168using testing::Return;
169using testing::ReturnNull;
170using testing::ReturnRef;
171using testing::SetArgPointee;
172using testing::SetArrayArgument;
173using testing::StartsWith;
174using testing::StrCaseEq;
175using testing::StrCaseNe;
179using testing::TypedEq;
180using testing::WithArg;
181using testing::WithArgs;
182using testing::WithoutArgs;
184#if !GTEST_OS_WINDOWS_MOBILE
185using testing::SetErrnoAndReturn;
188#if GTEST_HAS_EXCEPTIONS
192using testing::ContainsRegex;
193using testing::MatchesRegex;
198 virtual void VoidFromString(
char* str) = 0;
199 virtual char* StringFromString(
char* str) = 0;
200 virtual int IntFromString(
char* str) = 0;
201 virtual int& IntRefFromString(
char* str) = 0;
202 virtual void VoidFromFunc(
void (*func)(
char* str)) = 0;
203 virtual void VoidFromIntRef(
int& n) = 0;
204 virtual void VoidFromFloat(
float n) = 0;
205 virtual void VoidFromDouble(
double n) = 0;
206 virtual void VoidFromVector(
const std::vector<int>& v) = 0;
213 MOCK_METHOD1(VoidFromString,
void(
char* str));
214 MOCK_METHOD1(StringFromString,
char*(
char* str));
215 MOCK_METHOD1(IntFromString,
int(
char* str));
216 MOCK_METHOD1(IntRefFromString,
int&(
char* str));
217 MOCK_METHOD1(VoidFromFunc,
void(
void (*func)(
char* str)));
218 MOCK_METHOD1(VoidFromIntRef,
void(
int& n));
219 MOCK_METHOD1(VoidFromFloat,
void(
float n));
220 MOCK_METHOD1(VoidFromDouble,
void(
double n));
221 MOCK_METHOD1(VoidFromVector,
void(
const std::vector<int>& v));
225 Mock& operator=(
const Mock&) =
delete;
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(_))
305 .WillOnce(SetArrayArgument<0>(&ch2, &ch2 + 1));
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))
343 InvokeWithoutArgs(&test_invoke_helper, &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);
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"))).WillByDefault(Return());
499TEST(LinkTest, TestMatchersRelations) {
502 ON_CALL(mock, VoidFromFloat(Lt(1.0f))).WillByDefault(Return());
503 ON_CALL(mock, VoidFromFloat(Gt(1.0f))).WillByDefault(Return());
504 ON_CALL(mock, VoidFromFloat(Le(1.0f))).WillByDefault(Return());
505 ON_CALL(mock, VoidFromFloat(Ge(1.0f))).WillByDefault(Return());
506 ON_CALL(mock, VoidFromFloat(Ne(1.0f))).WillByDefault(Return());
510TEST(LinkTest, TestMatcherNotNull) {
513 ON_CALL(mock, VoidFromString(NotNull())).WillByDefault(Return());
517TEST(LinkTest, TestMatcherIsNull) {
520 ON_CALL(mock, VoidFromString(IsNull())).WillByDefault(Return());
524TEST(LinkTest, TestMatcherRef) {
528 ON_CALL(mock, VoidFromIntRef(Ref(a))).WillByDefault(Return());
532TEST(LinkTest, TestMatcherTypedEq) {
536 ON_CALL(mock, VoidFromIntRef(TypedEq<int&>(a))).WillByDefault(Return());
541TEST(LinkTest, TestMatchersFloatingPoint) {
545 ON_CALL(mock, VoidFromFloat(FloatEq(a))).WillByDefault(Return());
546 ON_CALL(mock, VoidFromDouble(DoubleEq(a))).WillByDefault(Return());
547 ON_CALL(mock, VoidFromFloat(NanSensitiveFloatEq(a))).WillByDefault(Return());
548 ON_CALL(mock, VoidFromDouble(NanSensitiveDoubleEq(a)))
549 .WillByDefault(Return());
553TEST(LinkTest, TestMatcherContainsRegex) {
556 ON_CALL(mock, VoidFromString(ContainsRegex(
".*"))).WillByDefault(Return());
560TEST(LinkTest, TestMatcherMatchesRegex) {
563 ON_CALL(mock, VoidFromString(MatchesRegex(
".*"))).WillByDefault(Return());
567TEST(LinkTest, TestMatchersSubstrings) {
570 ON_CALL(mock, VoidFromString(StartsWith(
"a"))).WillByDefault(Return());
571 ON_CALL(mock, VoidFromString(EndsWith(
"c"))).WillByDefault(Return());
572 ON_CALL(mock, VoidFromString(HasSubstr(
"b"))).WillByDefault(Return());
576TEST(LinkTest, TestMatchersStringEquality) {
578 ON_CALL(mock, VoidFromString(StrEq(
"a"))).WillByDefault(Return());
579 ON_CALL(mock, VoidFromString(StrNe(
"a"))).WillByDefault(Return());
580 ON_CALL(mock, VoidFromString(StrCaseEq(
"a"))).WillByDefault(Return());
581 ON_CALL(mock, VoidFromString(StrCaseNe(
"a"))).WillByDefault(Return());
585TEST(LinkTest, TestMatcherElementsAre) {
588 ON_CALL(mock, VoidFromVector(ElementsAre(
'a', _))).WillByDefault(Return());
592TEST(LinkTest, TestMatcherElementsAreArray) {
594 char arr[] = {
'a',
'b'};
596 ON_CALL(mock, VoidFromVector(ElementsAreArray(arr))).WillByDefault(Return());
600TEST(LinkTest, TestMatcherIsSubsetOf) {
602 char arr[] = {
'a',
'b'};
604 ON_CALL(mock, VoidFromVector(IsSubsetOf(arr))).WillByDefault(Return());
608TEST(LinkTest, TestMatcherIsSupersetOf) {
610 char arr[] = {
'a',
'b'};
612 ON_CALL(mock, VoidFromVector(IsSupersetOf(arr))).WillByDefault(Return());
616TEST(LinkTest, TestMatcherContainerEq) {
620 ON_CALL(mock, VoidFromVector(ContainerEq(v))).WillByDefault(Return());
624TEST(LinkTest, TestMatcherField) {
628 EXPECT_TRUE(m.Matches(helper));
631 EXPECT_TRUE(m2.Matches(&helper));
635TEST(LinkTest, TestMatcherProperty) {
639 EXPECT_TRUE(m.Matches(helper));
642 EXPECT_TRUE(m2.Matches(&helper));
646TEST(LinkTest, TestMatcherResultOf) {
647 Matcher<char*> m = ResultOf(&InvokeHelper::StaticIntFromString, Eq(1));
648 EXPECT_TRUE(m.Matches(
nullptr));
652TEST(LinkTest, TestMatcherPointee) {
656 EXPECT_TRUE(m.Matches(&n));
660TEST(LinkTest, TestMatcherTruly) {
662 EXPECT_TRUE(m.Matches(
nullptr));
666TEST(LinkTest, TestMatcherAllOf) {
668 EXPECT_TRUE(m.Matches(1));
672TEST(LinkTest, TestMatcherAnyOf) {
674 EXPECT_TRUE(m.Matches(1));
678TEST(LinkTest, TestMatcherNot) {
680 EXPECT_FALSE(m.Matches(1));
684TEST(LinkTest, TestMatcherCast) {
686 EXPECT_TRUE(m.Matches(
nullptr));
Definition gmock_link_test.h:238
Definition gmock_link_test.h:195
Definition gmock_link_test.h:228
Definition gmock-nice-strict_test.cc:41
Definition gmock-actions.h:720
Definition gmock-internal-utils.h:55