114#ifndef GMOCK_TEST_GMOCK_LINK_TEST_H_
115#define GMOCK_TEST_GMOCK_LINK_TEST_H_
119#if !GTEST_OS_WINDOWS_MOBILE
124#include "gtest/gtest.h"
148using testing::InvokeArgument;
168using testing::SetArrayArgument;
180#if !GTEST_OS_WINDOWS_MOBILE
184#if GTEST_HAS_EXCEPTIONS
242TEST(LinkTest, TestReturnVoid) {
259TEST(LinkTest, TestReturnNull) {
285TEST(LinkTest, TestSetArgPointee) {
294TEST(LinkTest, TestSetArrayArgument) {
299 EXPECT_CALL(mock, VoidFromString(
_)).WillOnce(SetArrayArgument<0>(&ch2,
304#if !GTEST_OS_WINDOWS_MOBILE
307TEST(LinkTest, TestSetErrnoAndReturn) {
310 int saved_errno = errno;
331TEST(LinkTest, TestInvokeWithoutArgs) {
344TEST(LinkTest, TestInvokeArgument) {
348 EXPECT_CALL(mock, VoidFromFunc(
_)).WillOnce(InvokeArgument<0>(&ch));
371TEST(LinkTest, TestWithoutArgs) {
399TEST(LinkTest, TestIgnoreResult) {
406#if GTEST_HAS_EXCEPTIONS
408TEST(LinkTest, TestThrow) {
411 EXPECT_CALL(mock, VoidFromString(
_)).WillOnce(Throw(42));
422# pragma warning(push)
423# pragma warning(disable:4100)
428ACTION(Return1) {
return 1; }
431TEST(LinkTest, TestActionMacro) {
434 EXPECT_CALL(mock, IntFromString(
_)).WillOnce(Return1());
440ACTION_P(ReturnArgument, ret_value) {
return ret_value; }
443TEST(LinkTest, TestActionPMacro) {
446 EXPECT_CALL(mock, IntFromString(
_)).WillOnce(ReturnArgument(42));
452ACTION_P2(ReturnEqualsEitherOf, first, second) {
453 return arg0 == first || arg0 == second;
461TEST(LinkTest, TestActionP2Macro) {
466 .WillOnce(ReturnEqualsEitherOf(
"one",
"two"));
471TEST(LinkTest, TestMatcherAnything) {
485TEST(LinkTest, TestMatchersEq) {
490 ON_CALL(mock, VoidFromString(
const_cast<char*
>(
"y")))
495TEST(LinkTest, TestMatchersRelations) {
506TEST(LinkTest, TestMatcherNotNull) {
513TEST(LinkTest, TestMatcherIsNull) {
520TEST(LinkTest, TestMatcherRef) {
528TEST(LinkTest, TestMatcherTypedEq) {
537TEST(LinkTest, TestMatchersFloatingPoint) {
549TEST(LinkTest, TestMatcherContainsRegex) {
556TEST(LinkTest, TestMatcherMatchesRegex) {
563TEST(LinkTest, TestMatchersSubstrings) {
572TEST(LinkTest, TestMatchersStringEquality) {
581TEST(LinkTest, TestMatcherElementsAre) {
588TEST(LinkTest, TestMatcherElementsAreArray) {
590 char arr[] = {
'a',
'b' };
596TEST(LinkTest, TestMatcherContainerEq) {
604TEST(LinkTest, TestMatcherField) {
615TEST(LinkTest, TestMatcherProperty) {
626TEST(LinkTest, TestMatcherResultOf) {
632TEST(LinkTest, TestMatcherPointee) {
640TEST(LinkTest, TestMatcherTruly) {
646TEST(LinkTest, TestMatcherAllOf) {
652TEST(LinkTest, TestMatcherAnyOf) {
658TEST(LinkTest, TestMatcherNot) {
664TEST(LinkTest, TestMatcherCast) {
virtual void VoidFromString(char *str)=0
virtual void VoidFromFunc(void(*func)(char *str))=0
virtual int & IntRefFromString(char *str)=0
virtual void VoidFromIntRef(int &n)=0
virtual void VoidFromDouble(double n)=0
virtual char * StringFromString(char *str)=0
virtual int IntFromString(char *str)=0
virtual void VoidFromFloat(float n)=0
virtual void VoidFromVector(const std::vector< int > &v)=0
static int StaticIntFromString(char *)
static void StaticVoidFromString(char *)
void VoidFromString(char *)
static void StaticVoidFromVoid()
static bool StaticBoolFromString(const char *)
MOCK_METHOD1(IntRefFromString, int &(char *str))
MOCK_METHOD1(StringFromString, char *(char *str))
MOCK_METHOD1(VoidFromFloat, void(float n))
MOCK_METHOD1(VoidFromVector, void(const std::vector< int > &v))
MOCK_METHOD1(VoidFromDouble, void(double n))
MOCK_METHOD1(VoidFromFunc, void(void(*func)(char *str)))
MOCK_METHOD1(VoidFromString, void(char *str))
MOCK_METHOD1(VoidFromIntRef, void(int &n))
MOCK_METHOD1(IntFromString, int(char *str))
#define EXPECT_THROW(statement, expected_exception)
#define EXPECT_TRUE(condition)
#define TEST(test_case_name, test_name)
#define EXPECT_FALSE(condition)
#define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)
#define ACTION_P2(name, p0, p1)
#define ACTION_P(name, p0)
#define EXPECT_CALL(obj, call)
#define ON_CALL(obj, call)
PolymorphicMatcher< internal::StartsWithMatcher< internal::string > > StartsWith(const internal::string &prefix)
internal::NotMatcher< InnerMatcher > Not(InnerMatcher m)
internal::WithArgsAction< InnerAction, k1 > WithArgs(const InnerAction &action)
internal::GtMatcher< Rhs > Gt(Rhs x)
Matcher< Lhs > TypedEq(const Rhs &rhs)
internal::WithArgsAction< InnerAction, k > WithArg(const InnerAction &action)
internal::LeMatcher< Rhs > Le(Rhs x)
internal::EqMatcher< T > Eq(T x)
internal::FloatingEqMatcher< float > FloatEq(float rhs)
PolymorphicMatcher< internal::NotNullMatcher > NotNull()
internal::IgnoreResultAction< A > IgnoreResult(const A &an_action)
PolymorphicAction< internal::InvokeWithoutArgsAction< FunctionImpl > > InvokeWithoutArgs(FunctionImpl function_impl)
PolymorphicMatcher< internal::HasSubstrMatcher< internal::string > > HasSubstr(const internal::string &substring)
PolymorphicMatcher< internal::IsNullMatcher > IsNull()
PolymorphicMatcher< internal::StrEqualityMatcher< internal::string > > StrCaseNe(const internal::string &str)
internal::FloatingEqMatcher< float > NanSensitiveFloatEq(float rhs)
internal::LtMatcher< Rhs > Lt(Rhs x)
PolymorphicMatcher< internal::MatchesRegexMatcher > MatchesRegex(const internal::RE *regex)
PolymorphicMatcher< internal::TrulyMatcher< Predicate > > Truly(Predicate pred)
const internal::AnythingMatcher _
PolymorphicMatcher< internal::ContainerEqMatcher< GTEST_REMOVE_CONST_(Container)> > ContainerEq(const Container &rhs)
internal::FloatingEqMatcher< double > DoubleEq(double rhs)
internal::AllOfResult2< M1, M2 >::type AllOf(M1 m1, M2 m2)
PolymorphicAction< internal::AssignAction< T1, T2 > > Assign(T1 *ptr, T2 val)
internal::ResultOfMatcher< Callable > ResultOf(Callable callable, const ResultOfMatcher &matcher)
PolymorphicMatcher< internal::StrEqualityMatcher< internal::string > > StrNe(const internal::string &str)
PolymorphicAction< internal::SetErrnoAndReturnAction< T > > SetErrnoAndReturn(int errval, T result)
internal::ElementsAreArrayMatcher< typename ::std::iterator_traits< Iter >::value_type > ElementsAreArray(Iter first, Iter last)
internal::FloatingEqMatcher< double > NanSensitiveDoubleEq(double rhs)
internal::ElementsAreMatcher< ::testing::tuple<> > ElementsAre()
PolymorphicMatcher< internal::MatchesRegexMatcher > ContainsRegex(const internal::RE *regex)
PolymorphicMatcher< internal::StrEqualityMatcher< internal::string > > StrCaseEq(const internal::string &str)
PolymorphicMatcher< internal::EndsWithMatcher< internal::string > > EndsWith(const internal::string &suffix)
internal::WithArgsAction< InnerAction > WithoutArgs(const InnerAction &action)
PolymorphicMatcher< internal::FieldMatcher< Class, FieldType > > Field(FieldType Class::*field, const FieldMatcher &matcher)
PolymorphicAction< internal::InvokeAction< FunctionImpl > > Invoke(FunctionImpl function_impl)
internal::ReturnRefAction< R > ReturnRef(R &x)
internal::DoBothAction< Action1, Action2 > DoAll(Action1 a1, Action2 a2)
internal::NeMatcher< Rhs > Ne(Rhs x)
internal::GeMatcher< Rhs > Ge(Rhs x)
internal::AnyOfResult2< M1, M2 >::type AnyOf(M1 m1, M2 m2)
Matcher< T > MatcherCast(const M &matcher)
internal::ReturnAction< R > Return(R value)
PolymorphicAction< internal::SetArgumentPointeeAction< N, T, internal::IsAProtocolMessage< T >::value > > SetArgPointee(const T &x)
internal::DoDefaultAction DoDefault()
internal::RefMatcher< T & > Ref(T &x)
PolymorphicMatcher< internal::StrEqualityMatcher< internal::string > > StrEq(const internal::string &str)
PolymorphicMatcher< internal::StartsWithMatcher< internal::string > > StartsWith(const internal::string &prefix)
internal::NotMatcher< InnerMatcher > Not(InnerMatcher m)
internal::WithArgsAction< InnerAction, k1 > WithArgs(const InnerAction &action)
internal::GtMatcher< Rhs > Gt(Rhs x)
Matcher< Lhs > TypedEq(const Rhs &rhs)
internal::WithArgsAction< InnerAction, k > WithArg(const InnerAction &action)
internal::LeMatcher< Rhs > Le(Rhs x)
internal::EqMatcher< T > Eq(T x)
internal::FloatingEqMatcher< float > FloatEq(float rhs)
PolymorphicMatcher< internal::NotNullMatcher > NotNull()
internal::IgnoreResultAction< A > IgnoreResult(const A &an_action)
PolymorphicAction< internal::InvokeWithoutArgsAction< FunctionImpl > > InvokeWithoutArgs(FunctionImpl function_impl)
PolymorphicMatcher< internal::HasSubstrMatcher< internal::string > > HasSubstr(const internal::string &substring)
PolymorphicMatcher< internal::IsNullMatcher > IsNull()
PolymorphicMatcher< internal::StrEqualityMatcher< internal::string > > StrCaseNe(const internal::string &str)
internal::FloatingEqMatcher< float > NanSensitiveFloatEq(float rhs)
internal::LtMatcher< Rhs > Lt(Rhs x)
PolymorphicMatcher< internal::MatchesRegexMatcher > MatchesRegex(const internal::RE *regex)
PolymorphicMatcher< internal::TrulyMatcher< Predicate > > Truly(Predicate pred)
const internal::AnythingMatcher _
PolymorphicMatcher< internal::ContainerEqMatcher< GTEST_REMOVE_CONST_(Container)> > ContainerEq(const Container &rhs)
internal::FloatingEqMatcher< double > DoubleEq(double rhs)
internal::AllOfResult2< M1, M2 >::type AllOf(M1 m1, M2 m2)
PolymorphicAction< internal::AssignAction< T1, T2 > > Assign(T1 *ptr, T2 val)
internal::ResultOfMatcher< Callable > ResultOf(Callable callable, const ResultOfMatcher &matcher)
PolymorphicMatcher< internal::StrEqualityMatcher< internal::string > > StrNe(const internal::string &str)
PolymorphicAction< internal::SetErrnoAndReturnAction< T > > SetErrnoAndReturn(int errval, T result)
internal::ElementsAreArrayMatcher< typename ::std::iterator_traits< Iter >::value_type > ElementsAreArray(Iter first, Iter last)
internal::FloatingEqMatcher< double > NanSensitiveDoubleEq(double rhs)
internal::ElementsAreMatcher< ::testing::tuple<> > ElementsAre()
PolymorphicMatcher< internal::MatchesRegexMatcher > ContainsRegex(const internal::RE *regex)
PolymorphicMatcher< internal::StrEqualityMatcher< internal::string > > StrCaseEq(const internal::string &str)
PolymorphicMatcher< internal::PropertyMatcher< Class, PropertyType > > Property(PropertyType(Class::*property)() const, const PropertyMatcher &matcher)
PolymorphicMatcher< internal::EndsWithMatcher< internal::string > > EndsWith(const internal::string &suffix)
internal::WithArgsAction< InnerAction > WithoutArgs(const InnerAction &action)
PolymorphicMatcher< internal::FieldMatcher< Class, FieldType > > Field(FieldType Class::*field, const FieldMatcher &matcher)
PolymorphicAction< internal::InvokeAction< FunctionImpl > > Invoke(FunctionImpl function_impl)
internal::ReturnRefAction< R > ReturnRef(R &x)
internal::DoBothAction< Action1, Action2 > DoAll(Action1 a1, Action2 a2)
internal::NeMatcher< Rhs > Ne(Rhs x)
internal::GeMatcher< Rhs > Ge(Rhs x)
internal::AnyOfResult2< M1, M2 >::type AnyOf(M1 m1, M2 m2)
Matcher< T > MatcherCast(const M &matcher)
internal::ReturnAction< R > Return(R value)
PolymorphicAction< internal::SetArgumentPointeeAction< N, T, internal::IsAProtocolMessage< T >::value > > SetArgPointee(const T &x)
internal::DoDefaultAction DoDefault()
internal::RefMatcher< T & > Ref(T &x)
PolymorphicAction< internal::ReturnNullAction > ReturnNull()
internal::PointeeMatcher< InnerMatcher > Pointee(const InnerMatcher &inner_matcher)
PolymorphicMatcher< internal::StrEqualityMatcher< internal::string > > StrEq(const internal::string &str)
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a