113481Sgiacomo.travaglini@arm.com// Copyright 2009, Google Inc. 213481Sgiacomo.travaglini@arm.com// All rights reserved. 313481Sgiacomo.travaglini@arm.com// 413481Sgiacomo.travaglini@arm.com// Redistribution and use in source and binary forms, with or without 513481Sgiacomo.travaglini@arm.com// modification, are permitted provided that the following conditions are 613481Sgiacomo.travaglini@arm.com// met: 713481Sgiacomo.travaglini@arm.com// 813481Sgiacomo.travaglini@arm.com// * Redistributions of source code must retain the above copyright 913481Sgiacomo.travaglini@arm.com// notice, this list of conditions and the following disclaimer. 1013481Sgiacomo.travaglini@arm.com// * Redistributions in binary form must reproduce the above 1113481Sgiacomo.travaglini@arm.com// copyright notice, this list of conditions and the following disclaimer 1213481Sgiacomo.travaglini@arm.com// in the documentation and/or other materials provided with the 1313481Sgiacomo.travaglini@arm.com// distribution. 1413481Sgiacomo.travaglini@arm.com// * Neither the name of Google Inc. nor the names of its 1513481Sgiacomo.travaglini@arm.com// contributors may be used to endorse or promote products derived from 1613481Sgiacomo.travaglini@arm.com// this software without specific prior written permission. 1713481Sgiacomo.travaglini@arm.com// 1813481Sgiacomo.travaglini@arm.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1913481Sgiacomo.travaglini@arm.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2013481Sgiacomo.travaglini@arm.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2113481Sgiacomo.travaglini@arm.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2213481Sgiacomo.travaglini@arm.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2313481Sgiacomo.travaglini@arm.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2413481Sgiacomo.travaglini@arm.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2513481Sgiacomo.travaglini@arm.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2613481Sgiacomo.travaglini@arm.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2713481Sgiacomo.travaglini@arm.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2813481Sgiacomo.travaglini@arm.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2913481Sgiacomo.travaglini@arm.com// 3013481Sgiacomo.travaglini@arm.com// Author: vladl@google.com (Vlad Losev) 3113481Sgiacomo.travaglini@arm.com 3213481Sgiacomo.travaglini@arm.com// Google Mock - a framework for writing C++ mock classes. 3313481Sgiacomo.travaglini@arm.com// 3413481Sgiacomo.travaglini@arm.com// This file tests that: 3513481Sgiacomo.travaglini@arm.com// a. A header file defining a mock class can be included in multiple 3613481Sgiacomo.travaglini@arm.com// translation units without causing a link error. 3713481Sgiacomo.travaglini@arm.com// b. Actions and matchers can be instantiated with identical template 3813481Sgiacomo.travaglini@arm.com// arguments in different translation units without causing link 3913481Sgiacomo.travaglini@arm.com// errors. 4013481Sgiacomo.travaglini@arm.com// The following constructs are currently tested: 4113481Sgiacomo.travaglini@arm.com// Actions: 4213481Sgiacomo.travaglini@arm.com// Return() 4313481Sgiacomo.travaglini@arm.com// Return(value) 4413481Sgiacomo.travaglini@arm.com// ReturnNull 4513481Sgiacomo.travaglini@arm.com// ReturnRef 4613481Sgiacomo.travaglini@arm.com// Assign 4713481Sgiacomo.travaglini@arm.com// SetArgPointee 4813481Sgiacomo.travaglini@arm.com// SetArrayArgument 4913481Sgiacomo.travaglini@arm.com// SetErrnoAndReturn 5013481Sgiacomo.travaglini@arm.com// Invoke(function) 5113481Sgiacomo.travaglini@arm.com// Invoke(object, method) 5213481Sgiacomo.travaglini@arm.com// InvokeWithoutArgs(function) 5313481Sgiacomo.travaglini@arm.com// InvokeWithoutArgs(object, method) 5413481Sgiacomo.travaglini@arm.com// InvokeArgument 5513481Sgiacomo.travaglini@arm.com// WithArg 5613481Sgiacomo.travaglini@arm.com// WithArgs 5713481Sgiacomo.travaglini@arm.com// WithoutArgs 5813481Sgiacomo.travaglini@arm.com// DoAll 5913481Sgiacomo.travaglini@arm.com// DoDefault 6013481Sgiacomo.travaglini@arm.com// IgnoreResult 6113481Sgiacomo.travaglini@arm.com// Throw 6213481Sgiacomo.travaglini@arm.com// ACTION()-generated 6313481Sgiacomo.travaglini@arm.com// ACTION_P()-generated 6413481Sgiacomo.travaglini@arm.com// ACTION_P2()-generated 6513481Sgiacomo.travaglini@arm.com// Matchers: 6613481Sgiacomo.travaglini@arm.com// _ 6713481Sgiacomo.travaglini@arm.com// A 6813481Sgiacomo.travaglini@arm.com// An 6913481Sgiacomo.travaglini@arm.com// Eq 7013481Sgiacomo.travaglini@arm.com// Gt, Lt, Ge, Le, Ne 7113481Sgiacomo.travaglini@arm.com// NotNull 7213481Sgiacomo.travaglini@arm.com// Ref 7313481Sgiacomo.travaglini@arm.com// TypedEq 7413481Sgiacomo.travaglini@arm.com// DoubleEq 7513481Sgiacomo.travaglini@arm.com// FloatEq 7613481Sgiacomo.travaglini@arm.com// NanSensitiveDoubleEq 7713481Sgiacomo.travaglini@arm.com// NanSensitiveFloatEq 7813481Sgiacomo.travaglini@arm.com// ContainsRegex 7913481Sgiacomo.travaglini@arm.com// MatchesRegex 8013481Sgiacomo.travaglini@arm.com// EndsWith 8113481Sgiacomo.travaglini@arm.com// HasSubstr 8213481Sgiacomo.travaglini@arm.com// StartsWith 8313481Sgiacomo.travaglini@arm.com// StrCaseEq 8413481Sgiacomo.travaglini@arm.com// StrCaseNe 8513481Sgiacomo.travaglini@arm.com// StrEq 8613481Sgiacomo.travaglini@arm.com// StrNe 8713481Sgiacomo.travaglini@arm.com// ElementsAre 8813481Sgiacomo.travaglini@arm.com// ElementsAreArray 8913481Sgiacomo.travaglini@arm.com// ContainerEq 9013481Sgiacomo.travaglini@arm.com// Field 9113481Sgiacomo.travaglini@arm.com// Property 9213481Sgiacomo.travaglini@arm.com// ResultOf(function) 9313481Sgiacomo.travaglini@arm.com// Pointee 9413481Sgiacomo.travaglini@arm.com// Truly(predicate) 9513481Sgiacomo.travaglini@arm.com// AllOf 9613481Sgiacomo.travaglini@arm.com// AnyOf 9713481Sgiacomo.travaglini@arm.com// Not 9813481Sgiacomo.travaglini@arm.com// MatcherCast<T> 9913481Sgiacomo.travaglini@arm.com// 10013481Sgiacomo.travaglini@arm.com// Please note: this test does not verify the functioning of these 10113481Sgiacomo.travaglini@arm.com// constructs, only that the programs using them will link successfully. 10213481Sgiacomo.travaglini@arm.com// 10313481Sgiacomo.travaglini@arm.com// Implementation note: 10413481Sgiacomo.travaglini@arm.com// This test requires identical definitions of Interface and Mock to be 10513481Sgiacomo.travaglini@arm.com// included in different translation units. We achieve this by writing 10613481Sgiacomo.travaglini@arm.com// them in this header and #including it in gmock_link_test.cc and 10713481Sgiacomo.travaglini@arm.com// gmock_link2_test.cc. Because the symbols generated by the compiler for 10813481Sgiacomo.travaglini@arm.com// those constructs must be identical in both translation units, 10913481Sgiacomo.travaglini@arm.com// definitions of Interface and Mock tests MUST be kept in the SAME 11013481Sgiacomo.travaglini@arm.com// NON-ANONYMOUS namespace in this file. The test fixture class LinkTest 11113481Sgiacomo.travaglini@arm.com// is defined as LinkTest1 in gmock_link_test.cc and as LinkTest2 in 11213481Sgiacomo.travaglini@arm.com// gmock_link2_test.cc to avoid producing linker errors. 11313481Sgiacomo.travaglini@arm.com 11413481Sgiacomo.travaglini@arm.com#ifndef GMOCK_TEST_GMOCK_LINK_TEST_H_ 11513481Sgiacomo.travaglini@arm.com#define GMOCK_TEST_GMOCK_LINK_TEST_H_ 11613481Sgiacomo.travaglini@arm.com 11713481Sgiacomo.travaglini@arm.com#include "gmock/gmock.h" 11813481Sgiacomo.travaglini@arm.com 11913481Sgiacomo.travaglini@arm.com#if !GTEST_OS_WINDOWS_MOBILE 12013481Sgiacomo.travaglini@arm.com# include <errno.h> 12113481Sgiacomo.travaglini@arm.com#endif 12213481Sgiacomo.travaglini@arm.com 12313481Sgiacomo.travaglini@arm.com#include "gmock/internal/gmock-port.h" 12413481Sgiacomo.travaglini@arm.com#include "gtest/gtest.h" 12513481Sgiacomo.travaglini@arm.com#include <iostream> 12613481Sgiacomo.travaglini@arm.com#include <vector> 12713481Sgiacomo.travaglini@arm.com 12813481Sgiacomo.travaglini@arm.comusing testing::_; 12913481Sgiacomo.travaglini@arm.comusing testing::A; 13013481Sgiacomo.travaglini@arm.comusing testing::AllOf; 13113481Sgiacomo.travaglini@arm.comusing testing::AnyOf; 13213481Sgiacomo.travaglini@arm.comusing testing::Assign; 13313481Sgiacomo.travaglini@arm.comusing testing::ContainerEq; 13413481Sgiacomo.travaglini@arm.comusing testing::DoAll; 13513481Sgiacomo.travaglini@arm.comusing testing::DoDefault; 13613481Sgiacomo.travaglini@arm.comusing testing::DoubleEq; 13713481Sgiacomo.travaglini@arm.comusing testing::ElementsAre; 13813481Sgiacomo.travaglini@arm.comusing testing::ElementsAreArray; 13913481Sgiacomo.travaglini@arm.comusing testing::EndsWith; 14013481Sgiacomo.travaglini@arm.comusing testing::Eq; 14113481Sgiacomo.travaglini@arm.comusing testing::Field; 14213481Sgiacomo.travaglini@arm.comusing testing::FloatEq; 14313481Sgiacomo.travaglini@arm.comusing testing::Ge; 14413481Sgiacomo.travaglini@arm.comusing testing::Gt; 14513481Sgiacomo.travaglini@arm.comusing testing::HasSubstr; 14613481Sgiacomo.travaglini@arm.comusing testing::IgnoreResult; 14713481Sgiacomo.travaglini@arm.comusing testing::Invoke; 14813481Sgiacomo.travaglini@arm.comusing testing::InvokeArgument; 14913481Sgiacomo.travaglini@arm.comusing testing::InvokeWithoutArgs; 15013481Sgiacomo.travaglini@arm.comusing testing::IsNull; 15113481Sgiacomo.travaglini@arm.comusing testing::Le; 15213481Sgiacomo.travaglini@arm.comusing testing::Lt; 15313481Sgiacomo.travaglini@arm.comusing testing::Matcher; 15413481Sgiacomo.travaglini@arm.comusing testing::MatcherCast; 15513481Sgiacomo.travaglini@arm.comusing testing::NanSensitiveDoubleEq; 15613481Sgiacomo.travaglini@arm.comusing testing::NanSensitiveFloatEq; 15713481Sgiacomo.travaglini@arm.comusing testing::Ne; 15813481Sgiacomo.travaglini@arm.comusing testing::Not; 15913481Sgiacomo.travaglini@arm.comusing testing::NotNull; 16013481Sgiacomo.travaglini@arm.comusing testing::Pointee; 16113481Sgiacomo.travaglini@arm.comusing testing::Property; 16213481Sgiacomo.travaglini@arm.comusing testing::Ref; 16313481Sgiacomo.travaglini@arm.comusing testing::ResultOf; 16413481Sgiacomo.travaglini@arm.comusing testing::Return; 16513481Sgiacomo.travaglini@arm.comusing testing::ReturnNull; 16613481Sgiacomo.travaglini@arm.comusing testing::ReturnRef; 16713481Sgiacomo.travaglini@arm.comusing testing::SetArgPointee; 16813481Sgiacomo.travaglini@arm.comusing testing::SetArrayArgument; 16913481Sgiacomo.travaglini@arm.comusing testing::StartsWith; 17013481Sgiacomo.travaglini@arm.comusing testing::StrCaseEq; 17113481Sgiacomo.travaglini@arm.comusing testing::StrCaseNe; 17213481Sgiacomo.travaglini@arm.comusing testing::StrEq; 17313481Sgiacomo.travaglini@arm.comusing testing::StrNe; 17413481Sgiacomo.travaglini@arm.comusing testing::Truly; 17513481Sgiacomo.travaglini@arm.comusing testing::TypedEq; 17613481Sgiacomo.travaglini@arm.comusing testing::WithArg; 17713481Sgiacomo.travaglini@arm.comusing testing::WithArgs; 17813481Sgiacomo.travaglini@arm.comusing testing::WithoutArgs; 17913481Sgiacomo.travaglini@arm.com 18013481Sgiacomo.travaglini@arm.com#if !GTEST_OS_WINDOWS_MOBILE 18113481Sgiacomo.travaglini@arm.comusing testing::SetErrnoAndReturn; 18213481Sgiacomo.travaglini@arm.com#endif 18313481Sgiacomo.travaglini@arm.com 18413481Sgiacomo.travaglini@arm.com#if GTEST_HAS_EXCEPTIONS 18513481Sgiacomo.travaglini@arm.comusing testing::Throw; 18613481Sgiacomo.travaglini@arm.com#endif 18713481Sgiacomo.travaglini@arm.com 18813481Sgiacomo.travaglini@arm.comusing testing::ContainsRegex; 18913481Sgiacomo.travaglini@arm.comusing testing::MatchesRegex; 19013481Sgiacomo.travaglini@arm.com 19113481Sgiacomo.travaglini@arm.comclass Interface { 19213481Sgiacomo.travaglini@arm.com public: 19313481Sgiacomo.travaglini@arm.com virtual ~Interface() {} 19413481Sgiacomo.travaglini@arm.com virtual void VoidFromString(char* str) = 0; 19513481Sgiacomo.travaglini@arm.com virtual char* StringFromString(char* str) = 0; 19613481Sgiacomo.travaglini@arm.com virtual int IntFromString(char* str) = 0; 19713481Sgiacomo.travaglini@arm.com virtual int& IntRefFromString(char* str) = 0; 19813481Sgiacomo.travaglini@arm.com virtual void VoidFromFunc(void(*func)(char* str)) = 0; 19913481Sgiacomo.travaglini@arm.com virtual void VoidFromIntRef(int& n) = 0; // NOLINT 20013481Sgiacomo.travaglini@arm.com virtual void VoidFromFloat(float n) = 0; 20113481Sgiacomo.travaglini@arm.com virtual void VoidFromDouble(double n) = 0; 20213481Sgiacomo.travaglini@arm.com virtual void VoidFromVector(const std::vector<int>& v) = 0; 20313481Sgiacomo.travaglini@arm.com}; 20413481Sgiacomo.travaglini@arm.com 20513481Sgiacomo.travaglini@arm.comclass Mock: public Interface { 20613481Sgiacomo.travaglini@arm.com public: 20713481Sgiacomo.travaglini@arm.com Mock() {} 20813481Sgiacomo.travaglini@arm.com 20913481Sgiacomo.travaglini@arm.com MOCK_METHOD1(VoidFromString, void(char* str)); 21013481Sgiacomo.travaglini@arm.com MOCK_METHOD1(StringFromString, char*(char* str)); 21113481Sgiacomo.travaglini@arm.com MOCK_METHOD1(IntFromString, int(char* str)); 21213481Sgiacomo.travaglini@arm.com MOCK_METHOD1(IntRefFromString, int&(char* str)); 21313481Sgiacomo.travaglini@arm.com MOCK_METHOD1(VoidFromFunc, void(void(*func)(char* str))); 21413481Sgiacomo.travaglini@arm.com MOCK_METHOD1(VoidFromIntRef, void(int& n)); // NOLINT 21513481Sgiacomo.travaglini@arm.com MOCK_METHOD1(VoidFromFloat, void(float n)); 21613481Sgiacomo.travaglini@arm.com MOCK_METHOD1(VoidFromDouble, void(double n)); 21713481Sgiacomo.travaglini@arm.com MOCK_METHOD1(VoidFromVector, void(const std::vector<int>& v)); 21813481Sgiacomo.travaglini@arm.com 21913481Sgiacomo.travaglini@arm.com private: 22013481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(Mock); 22113481Sgiacomo.travaglini@arm.com}; 22213481Sgiacomo.travaglini@arm.com 22313481Sgiacomo.travaglini@arm.comclass InvokeHelper { 22413481Sgiacomo.travaglini@arm.com public: 22513481Sgiacomo.travaglini@arm.com static void StaticVoidFromVoid() {} 22613481Sgiacomo.travaglini@arm.com void VoidFromVoid() {} 22713481Sgiacomo.travaglini@arm.com static void StaticVoidFromString(char* /* str */) {} 22813481Sgiacomo.travaglini@arm.com void VoidFromString(char* /* str */) {} 22913481Sgiacomo.travaglini@arm.com static int StaticIntFromString(char* /* str */) { return 1; } 23013481Sgiacomo.travaglini@arm.com static bool StaticBoolFromString(const char* /* str */) { return true; } 23113481Sgiacomo.travaglini@arm.com}; 23213481Sgiacomo.travaglini@arm.com 23313481Sgiacomo.travaglini@arm.comclass FieldHelper { 23413481Sgiacomo.travaglini@arm.com public: 23513481Sgiacomo.travaglini@arm.com explicit FieldHelper(int a_field) : field_(a_field) {} 23613481Sgiacomo.travaglini@arm.com int field() const { return field_; } 23713481Sgiacomo.travaglini@arm.com int field_; // NOLINT -- need external access to field_ to test 23813481Sgiacomo.travaglini@arm.com // the Field matcher. 23913481Sgiacomo.travaglini@arm.com}; 24013481Sgiacomo.travaglini@arm.com 24113481Sgiacomo.travaglini@arm.com// Tests the linkage of the ReturnVoid action. 24213481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestReturnVoid) { 24313481Sgiacomo.travaglini@arm.com Mock mock; 24413481Sgiacomo.travaglini@arm.com 24513481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Return()); 24613481Sgiacomo.travaglini@arm.com mock.VoidFromString(NULL); 24713481Sgiacomo.travaglini@arm.com} 24813481Sgiacomo.travaglini@arm.com 24913481Sgiacomo.travaglini@arm.com// Tests the linkage of the Return action. 25013481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestReturn) { 25113481Sgiacomo.travaglini@arm.com Mock mock; 25213481Sgiacomo.travaglini@arm.com char ch = 'x'; 25313481Sgiacomo.travaglini@arm.com 25413481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, StringFromString(_)).WillOnce(Return(&ch)); 25513481Sgiacomo.travaglini@arm.com mock.StringFromString(NULL); 25613481Sgiacomo.travaglini@arm.com} 25713481Sgiacomo.travaglini@arm.com 25813481Sgiacomo.travaglini@arm.com// Tests the linkage of the ReturnNull action. 25913481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestReturnNull) { 26013481Sgiacomo.travaglini@arm.com Mock mock; 26113481Sgiacomo.travaglini@arm.com 26213481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Return()); 26313481Sgiacomo.travaglini@arm.com mock.VoidFromString(NULL); 26413481Sgiacomo.travaglini@arm.com} 26513481Sgiacomo.travaglini@arm.com 26613481Sgiacomo.travaglini@arm.com// Tests the linkage of the ReturnRef action. 26713481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestReturnRef) { 26813481Sgiacomo.travaglini@arm.com Mock mock; 26913481Sgiacomo.travaglini@arm.com int n = 42; 27013481Sgiacomo.travaglini@arm.com 27113481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, IntRefFromString(_)).WillOnce(ReturnRef(n)); 27213481Sgiacomo.travaglini@arm.com mock.IntRefFromString(NULL); 27313481Sgiacomo.travaglini@arm.com} 27413481Sgiacomo.travaglini@arm.com 27513481Sgiacomo.travaglini@arm.com// Tests the linkage of the Assign action. 27613481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestAssign) { 27713481Sgiacomo.travaglini@arm.com Mock mock; 27813481Sgiacomo.travaglini@arm.com char ch = 'x'; 27913481Sgiacomo.travaglini@arm.com 28013481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Assign(&ch, 'y')); 28113481Sgiacomo.travaglini@arm.com mock.VoidFromString(NULL); 28213481Sgiacomo.travaglini@arm.com} 28313481Sgiacomo.travaglini@arm.com 28413481Sgiacomo.travaglini@arm.com// Tests the linkage of the SetArgPointee action. 28513481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestSetArgPointee) { 28613481Sgiacomo.travaglini@arm.com Mock mock; 28713481Sgiacomo.travaglini@arm.com char ch = 'x'; 28813481Sgiacomo.travaglini@arm.com 28913481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, VoidFromString(_)).WillOnce(SetArgPointee<0>('y')); 29013481Sgiacomo.travaglini@arm.com mock.VoidFromString(&ch); 29113481Sgiacomo.travaglini@arm.com} 29213481Sgiacomo.travaglini@arm.com 29313481Sgiacomo.travaglini@arm.com// Tests the linkage of the SetArrayArgument action. 29413481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestSetArrayArgument) { 29513481Sgiacomo.travaglini@arm.com Mock mock; 29613481Sgiacomo.travaglini@arm.com char ch = 'x'; 29713481Sgiacomo.travaglini@arm.com char ch2 = 'y'; 29813481Sgiacomo.travaglini@arm.com 29913481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, VoidFromString(_)).WillOnce(SetArrayArgument<0>(&ch2, 30013481Sgiacomo.travaglini@arm.com &ch2 + 1)); 30113481Sgiacomo.travaglini@arm.com mock.VoidFromString(&ch); 30213481Sgiacomo.travaglini@arm.com} 30313481Sgiacomo.travaglini@arm.com 30413481Sgiacomo.travaglini@arm.com#if !GTEST_OS_WINDOWS_MOBILE 30513481Sgiacomo.travaglini@arm.com 30613481Sgiacomo.travaglini@arm.com// Tests the linkage of the SetErrnoAndReturn action. 30713481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestSetErrnoAndReturn) { 30813481Sgiacomo.travaglini@arm.com Mock mock; 30913481Sgiacomo.travaglini@arm.com 31013481Sgiacomo.travaglini@arm.com int saved_errno = errno; 31113481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, IntFromString(_)).WillOnce(SetErrnoAndReturn(1, -1)); 31213481Sgiacomo.travaglini@arm.com mock.IntFromString(NULL); 31313481Sgiacomo.travaglini@arm.com errno = saved_errno; 31413481Sgiacomo.travaglini@arm.com} 31513481Sgiacomo.travaglini@arm.com 31613481Sgiacomo.travaglini@arm.com#endif // !GTEST_OS_WINDOWS_MOBILE 31713481Sgiacomo.travaglini@arm.com 31813481Sgiacomo.travaglini@arm.com// Tests the linkage of the Invoke(function) and Invoke(object, method) actions. 31913481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestInvoke) { 32013481Sgiacomo.travaglini@arm.com Mock mock; 32113481Sgiacomo.travaglini@arm.com InvokeHelper test_invoke_helper; 32213481Sgiacomo.travaglini@arm.com 32313481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, VoidFromString(_)) 32413481Sgiacomo.travaglini@arm.com .WillOnce(Invoke(&InvokeHelper::StaticVoidFromString)) 32513481Sgiacomo.travaglini@arm.com .WillOnce(Invoke(&test_invoke_helper, &InvokeHelper::VoidFromString)); 32613481Sgiacomo.travaglini@arm.com mock.VoidFromString(NULL); 32713481Sgiacomo.travaglini@arm.com mock.VoidFromString(NULL); 32813481Sgiacomo.travaglini@arm.com} 32913481Sgiacomo.travaglini@arm.com 33013481Sgiacomo.travaglini@arm.com// Tests the linkage of the InvokeWithoutArgs action. 33113481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestInvokeWithoutArgs) { 33213481Sgiacomo.travaglini@arm.com Mock mock; 33313481Sgiacomo.travaglini@arm.com InvokeHelper test_invoke_helper; 33413481Sgiacomo.travaglini@arm.com 33513481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, VoidFromString(_)) 33613481Sgiacomo.travaglini@arm.com .WillOnce(InvokeWithoutArgs(&InvokeHelper::StaticVoidFromVoid)) 33713481Sgiacomo.travaglini@arm.com .WillOnce(InvokeWithoutArgs(&test_invoke_helper, 33813481Sgiacomo.travaglini@arm.com &InvokeHelper::VoidFromVoid)); 33913481Sgiacomo.travaglini@arm.com mock.VoidFromString(NULL); 34013481Sgiacomo.travaglini@arm.com mock.VoidFromString(NULL); 34113481Sgiacomo.travaglini@arm.com} 34213481Sgiacomo.travaglini@arm.com 34313481Sgiacomo.travaglini@arm.com// Tests the linkage of the InvokeArgument action. 34413481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestInvokeArgument) { 34513481Sgiacomo.travaglini@arm.com Mock mock; 34613481Sgiacomo.travaglini@arm.com char ch = 'x'; 34713481Sgiacomo.travaglini@arm.com 34813481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, VoidFromFunc(_)).WillOnce(InvokeArgument<0>(&ch)); 34913481Sgiacomo.travaglini@arm.com mock.VoidFromFunc(InvokeHelper::StaticVoidFromString); 35013481Sgiacomo.travaglini@arm.com} 35113481Sgiacomo.travaglini@arm.com 35213481Sgiacomo.travaglini@arm.com// Tests the linkage of the WithArg action. 35313481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestWithArg) { 35413481Sgiacomo.travaglini@arm.com Mock mock; 35513481Sgiacomo.travaglini@arm.com 35613481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, VoidFromString(_)) 35713481Sgiacomo.travaglini@arm.com .WillOnce(WithArg<0>(Invoke(&InvokeHelper::StaticVoidFromString))); 35813481Sgiacomo.travaglini@arm.com mock.VoidFromString(NULL); 35913481Sgiacomo.travaglini@arm.com} 36013481Sgiacomo.travaglini@arm.com 36113481Sgiacomo.travaglini@arm.com// Tests the linkage of the WithArgs action. 36213481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestWithArgs) { 36313481Sgiacomo.travaglini@arm.com Mock mock; 36413481Sgiacomo.travaglini@arm.com 36513481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, VoidFromString(_)) 36613481Sgiacomo.travaglini@arm.com .WillOnce(WithArgs<0>(Invoke(&InvokeHelper::StaticVoidFromString))); 36713481Sgiacomo.travaglini@arm.com mock.VoidFromString(NULL); 36813481Sgiacomo.travaglini@arm.com} 36913481Sgiacomo.travaglini@arm.com 37013481Sgiacomo.travaglini@arm.com// Tests the linkage of the WithoutArgs action. 37113481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestWithoutArgs) { 37213481Sgiacomo.travaglini@arm.com Mock mock; 37313481Sgiacomo.travaglini@arm.com 37413481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, VoidFromString(_)).WillOnce(WithoutArgs(Return())); 37513481Sgiacomo.travaglini@arm.com mock.VoidFromString(NULL); 37613481Sgiacomo.travaglini@arm.com} 37713481Sgiacomo.travaglini@arm.com 37813481Sgiacomo.travaglini@arm.com// Tests the linkage of the DoAll action. 37913481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestDoAll) { 38013481Sgiacomo.travaglini@arm.com Mock mock; 38113481Sgiacomo.travaglini@arm.com char ch = 'x'; 38213481Sgiacomo.travaglini@arm.com 38313481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, VoidFromString(_)) 38413481Sgiacomo.travaglini@arm.com .WillOnce(DoAll(SetArgPointee<0>('y'), Return())); 38513481Sgiacomo.travaglini@arm.com mock.VoidFromString(&ch); 38613481Sgiacomo.travaglini@arm.com} 38713481Sgiacomo.travaglini@arm.com 38813481Sgiacomo.travaglini@arm.com// Tests the linkage of the DoDefault action. 38913481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestDoDefault) { 39013481Sgiacomo.travaglini@arm.com Mock mock; 39113481Sgiacomo.travaglini@arm.com char ch = 'x'; 39213481Sgiacomo.travaglini@arm.com 39313481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromString(_)).WillByDefault(Return()); 39413481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, VoidFromString(_)).WillOnce(DoDefault()); 39513481Sgiacomo.travaglini@arm.com mock.VoidFromString(&ch); 39613481Sgiacomo.travaglini@arm.com} 39713481Sgiacomo.travaglini@arm.com 39813481Sgiacomo.travaglini@arm.com// Tests the linkage of the IgnoreResult action. 39913481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestIgnoreResult) { 40013481Sgiacomo.travaglini@arm.com Mock mock; 40113481Sgiacomo.travaglini@arm.com 40213481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, VoidFromString(_)).WillOnce(IgnoreResult(Return(42))); 40313481Sgiacomo.travaglini@arm.com mock.VoidFromString(NULL); 40413481Sgiacomo.travaglini@arm.com} 40513481Sgiacomo.travaglini@arm.com 40613481Sgiacomo.travaglini@arm.com#if GTEST_HAS_EXCEPTIONS 40713481Sgiacomo.travaglini@arm.com// Tests the linkage of the Throw action. 40813481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestThrow) { 40913481Sgiacomo.travaglini@arm.com Mock mock; 41013481Sgiacomo.travaglini@arm.com 41113481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Throw(42)); 41213481Sgiacomo.travaglini@arm.com EXPECT_THROW(mock.VoidFromString(NULL), int); 41313481Sgiacomo.travaglini@arm.com} 41413481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_EXCEPTIONS 41513481Sgiacomo.travaglini@arm.com 41613481Sgiacomo.travaglini@arm.com// The ACTION*() macros trigger warning C4100 (unreferenced formal 41713481Sgiacomo.travaglini@arm.com// parameter) in MSVC with -W4. Unfortunately they cannot be fixed in 41813481Sgiacomo.travaglini@arm.com// the macro definition, as the warnings are generated when the macro 41913481Sgiacomo.travaglini@arm.com// is expanded and macro expansion cannot contain #pragma. Therefore 42013481Sgiacomo.travaglini@arm.com// we suppress them here. 42113481Sgiacomo.travaglini@arm.com#ifdef _MSC_VER 42213481Sgiacomo.travaglini@arm.com# pragma warning(push) 42313481Sgiacomo.travaglini@arm.com# pragma warning(disable:4100) 42413481Sgiacomo.travaglini@arm.com#endif 42513481Sgiacomo.travaglini@arm.com 42613481Sgiacomo.travaglini@arm.com// Tests the linkage of actions created using ACTION macro. 42713481Sgiacomo.travaglini@arm.comnamespace { 42813481Sgiacomo.travaglini@arm.comACTION(Return1) { return 1; } 42913481Sgiacomo.travaglini@arm.com} 43013481Sgiacomo.travaglini@arm.com 43113481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestActionMacro) { 43213481Sgiacomo.travaglini@arm.com Mock mock; 43313481Sgiacomo.travaglini@arm.com 43413481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, IntFromString(_)).WillOnce(Return1()); 43513481Sgiacomo.travaglini@arm.com mock.IntFromString(NULL); 43613481Sgiacomo.travaglini@arm.com} 43713481Sgiacomo.travaglini@arm.com 43813481Sgiacomo.travaglini@arm.com// Tests the linkage of actions created using ACTION_P macro. 43913481Sgiacomo.travaglini@arm.comnamespace { 44013481Sgiacomo.travaglini@arm.comACTION_P(ReturnArgument, ret_value) { return ret_value; } 44113481Sgiacomo.travaglini@arm.com} 44213481Sgiacomo.travaglini@arm.com 44313481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestActionPMacro) { 44413481Sgiacomo.travaglini@arm.com Mock mock; 44513481Sgiacomo.travaglini@arm.com 44613481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, IntFromString(_)).WillOnce(ReturnArgument(42)); 44713481Sgiacomo.travaglini@arm.com mock.IntFromString(NULL); 44813481Sgiacomo.travaglini@arm.com} 44913481Sgiacomo.travaglini@arm.com 45013481Sgiacomo.travaglini@arm.com// Tests the linkage of actions created using ACTION_P2 macro. 45113481Sgiacomo.travaglini@arm.comnamespace { 45213481Sgiacomo.travaglini@arm.comACTION_P2(ReturnEqualsEitherOf, first, second) { 45313481Sgiacomo.travaglini@arm.com return arg0 == first || arg0 == second; 45413481Sgiacomo.travaglini@arm.com} 45513481Sgiacomo.travaglini@arm.com} 45613481Sgiacomo.travaglini@arm.com 45713481Sgiacomo.travaglini@arm.com#ifdef _MSC_VER 45813481Sgiacomo.travaglini@arm.com# pragma warning(pop) 45913481Sgiacomo.travaglini@arm.com#endif 46013481Sgiacomo.travaglini@arm.com 46113481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestActionP2Macro) { 46213481Sgiacomo.travaglini@arm.com Mock mock; 46313481Sgiacomo.travaglini@arm.com char ch = 'x'; 46413481Sgiacomo.travaglini@arm.com 46513481Sgiacomo.travaglini@arm.com EXPECT_CALL(mock, IntFromString(_)) 46613481Sgiacomo.travaglini@arm.com .WillOnce(ReturnEqualsEitherOf("one", "two")); 46713481Sgiacomo.travaglini@arm.com mock.IntFromString(&ch); 46813481Sgiacomo.travaglini@arm.com} 46913481Sgiacomo.travaglini@arm.com 47013481Sgiacomo.travaglini@arm.com// Tests the linkage of the "_" matcher. 47113481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherAnything) { 47213481Sgiacomo.travaglini@arm.com Mock mock; 47313481Sgiacomo.travaglini@arm.com 47413481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromString(_)).WillByDefault(Return()); 47513481Sgiacomo.travaglini@arm.com} 47613481Sgiacomo.travaglini@arm.com 47713481Sgiacomo.travaglini@arm.com// Tests the linkage of the A matcher. 47813481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherA) { 47913481Sgiacomo.travaglini@arm.com Mock mock; 48013481Sgiacomo.travaglini@arm.com 48113481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromString(A<char*>())).WillByDefault(Return()); 48213481Sgiacomo.travaglini@arm.com} 48313481Sgiacomo.travaglini@arm.com 48413481Sgiacomo.travaglini@arm.com// Tests the linkage of the Eq and the "bare value" matcher. 48513481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatchersEq) { 48613481Sgiacomo.travaglini@arm.com Mock mock; 48713481Sgiacomo.travaglini@arm.com const char* p = "x"; 48813481Sgiacomo.travaglini@arm.com 48913481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromString(Eq(p))).WillByDefault(Return()); 49013481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromString(const_cast<char*>("y"))) 49113481Sgiacomo.travaglini@arm.com .WillByDefault(Return()); 49213481Sgiacomo.travaglini@arm.com} 49313481Sgiacomo.travaglini@arm.com 49413481Sgiacomo.travaglini@arm.com// Tests the linkage of the Lt, Gt, Le, Ge, and Ne matchers. 49513481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatchersRelations) { 49613481Sgiacomo.travaglini@arm.com Mock mock; 49713481Sgiacomo.travaglini@arm.com 49813481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromFloat(Lt(1.0f))).WillByDefault(Return()); 49913481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromFloat(Gt(1.0f))).WillByDefault(Return()); 50013481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromFloat(Le(1.0f))).WillByDefault(Return()); 50113481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromFloat(Ge(1.0f))).WillByDefault(Return()); 50213481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromFloat(Ne(1.0f))).WillByDefault(Return()); 50313481Sgiacomo.travaglini@arm.com} 50413481Sgiacomo.travaglini@arm.com 50513481Sgiacomo.travaglini@arm.com// Tests the linkage of the NotNull matcher. 50613481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherNotNull) { 50713481Sgiacomo.travaglini@arm.com Mock mock; 50813481Sgiacomo.travaglini@arm.com 50913481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromString(NotNull())).WillByDefault(Return()); 51013481Sgiacomo.travaglini@arm.com} 51113481Sgiacomo.travaglini@arm.com 51213481Sgiacomo.travaglini@arm.com// Tests the linkage of the IsNull matcher. 51313481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherIsNull) { 51413481Sgiacomo.travaglini@arm.com Mock mock; 51513481Sgiacomo.travaglini@arm.com 51613481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromString(IsNull())).WillByDefault(Return()); 51713481Sgiacomo.travaglini@arm.com} 51813481Sgiacomo.travaglini@arm.com 51913481Sgiacomo.travaglini@arm.com// Tests the linkage of the Ref matcher. 52013481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherRef) { 52113481Sgiacomo.travaglini@arm.com Mock mock; 52213481Sgiacomo.travaglini@arm.com int a = 0; 52313481Sgiacomo.travaglini@arm.com 52413481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromIntRef(Ref(a))).WillByDefault(Return()); 52513481Sgiacomo.travaglini@arm.com} 52613481Sgiacomo.travaglini@arm.com 52713481Sgiacomo.travaglini@arm.com// Tests the linkage of the TypedEq matcher. 52813481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherTypedEq) { 52913481Sgiacomo.travaglini@arm.com Mock mock; 53013481Sgiacomo.travaglini@arm.com long a = 0; 53113481Sgiacomo.travaglini@arm.com 53213481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromIntRef(TypedEq<int&>(a))).WillByDefault(Return()); 53313481Sgiacomo.travaglini@arm.com} 53413481Sgiacomo.travaglini@arm.com 53513481Sgiacomo.travaglini@arm.com// Tests the linkage of the FloatEq, DoubleEq, NanSensitiveFloatEq and 53613481Sgiacomo.travaglini@arm.com// NanSensitiveDoubleEq matchers. 53713481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatchersFloatingPoint) { 53813481Sgiacomo.travaglini@arm.com Mock mock; 53913481Sgiacomo.travaglini@arm.com float a = 0; 54013481Sgiacomo.travaglini@arm.com 54113481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromFloat(FloatEq(a))).WillByDefault(Return()); 54213481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromDouble(DoubleEq(a))).WillByDefault(Return()); 54313481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromFloat(NanSensitiveFloatEq(a))).WillByDefault(Return()); 54413481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromDouble(NanSensitiveDoubleEq(a))) 54513481Sgiacomo.travaglini@arm.com .WillByDefault(Return()); 54613481Sgiacomo.travaglini@arm.com} 54713481Sgiacomo.travaglini@arm.com 54813481Sgiacomo.travaglini@arm.com// Tests the linkage of the ContainsRegex matcher. 54913481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherContainsRegex) { 55013481Sgiacomo.travaglini@arm.com Mock mock; 55113481Sgiacomo.travaglini@arm.com 55213481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromString(ContainsRegex(".*"))).WillByDefault(Return()); 55313481Sgiacomo.travaglini@arm.com} 55413481Sgiacomo.travaglini@arm.com 55513481Sgiacomo.travaglini@arm.com// Tests the linkage of the MatchesRegex matcher. 55613481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherMatchesRegex) { 55713481Sgiacomo.travaglini@arm.com Mock mock; 55813481Sgiacomo.travaglini@arm.com 55913481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromString(MatchesRegex(".*"))).WillByDefault(Return()); 56013481Sgiacomo.travaglini@arm.com} 56113481Sgiacomo.travaglini@arm.com 56213481Sgiacomo.travaglini@arm.com// Tests the linkage of the StartsWith, EndsWith, and HasSubstr matchers. 56313481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatchersSubstrings) { 56413481Sgiacomo.travaglini@arm.com Mock mock; 56513481Sgiacomo.travaglini@arm.com 56613481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromString(StartsWith("a"))).WillByDefault(Return()); 56713481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromString(EndsWith("c"))).WillByDefault(Return()); 56813481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromString(HasSubstr("b"))).WillByDefault(Return()); 56913481Sgiacomo.travaglini@arm.com} 57013481Sgiacomo.travaglini@arm.com 57113481Sgiacomo.travaglini@arm.com// Tests the linkage of the StrEq, StrNe, StrCaseEq, and StrCaseNe matchers. 57213481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatchersStringEquality) { 57313481Sgiacomo.travaglini@arm.com Mock mock; 57413481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromString(StrEq("a"))).WillByDefault(Return()); 57513481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromString(StrNe("a"))).WillByDefault(Return()); 57613481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromString(StrCaseEq("a"))).WillByDefault(Return()); 57713481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromString(StrCaseNe("a"))).WillByDefault(Return()); 57813481Sgiacomo.travaglini@arm.com} 57913481Sgiacomo.travaglini@arm.com 58013481Sgiacomo.travaglini@arm.com// Tests the linkage of the ElementsAre matcher. 58113481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherElementsAre) { 58213481Sgiacomo.travaglini@arm.com Mock mock; 58313481Sgiacomo.travaglini@arm.com 58413481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromVector(ElementsAre('a', _))).WillByDefault(Return()); 58513481Sgiacomo.travaglini@arm.com} 58613481Sgiacomo.travaglini@arm.com 58713481Sgiacomo.travaglini@arm.com// Tests the linkage of the ElementsAreArray matcher. 58813481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherElementsAreArray) { 58913481Sgiacomo.travaglini@arm.com Mock mock; 59013481Sgiacomo.travaglini@arm.com char arr[] = { 'a', 'b' }; 59113481Sgiacomo.travaglini@arm.com 59213481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromVector(ElementsAreArray(arr))).WillByDefault(Return()); 59313481Sgiacomo.travaglini@arm.com} 59413481Sgiacomo.travaglini@arm.com 59513481Sgiacomo.travaglini@arm.com// Tests the linkage of the ContainerEq matcher. 59613481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherContainerEq) { 59713481Sgiacomo.travaglini@arm.com Mock mock; 59813481Sgiacomo.travaglini@arm.com std::vector<int> v; 59913481Sgiacomo.travaglini@arm.com 60013481Sgiacomo.travaglini@arm.com ON_CALL(mock, VoidFromVector(ContainerEq(v))).WillByDefault(Return()); 60113481Sgiacomo.travaglini@arm.com} 60213481Sgiacomo.travaglini@arm.com 60313481Sgiacomo.travaglini@arm.com// Tests the linkage of the Field matcher. 60413481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherField) { 60513481Sgiacomo.travaglini@arm.com FieldHelper helper(0); 60613481Sgiacomo.travaglini@arm.com 60713481Sgiacomo.travaglini@arm.com Matcher<const FieldHelper&> m = Field(&FieldHelper::field_, Eq(0)); 60813481Sgiacomo.travaglini@arm.com EXPECT_TRUE(m.Matches(helper)); 60913481Sgiacomo.travaglini@arm.com 61013481Sgiacomo.travaglini@arm.com Matcher<const FieldHelper*> m2 = Field(&FieldHelper::field_, Eq(0)); 61113481Sgiacomo.travaglini@arm.com EXPECT_TRUE(m2.Matches(&helper)); 61213481Sgiacomo.travaglini@arm.com} 61313481Sgiacomo.travaglini@arm.com 61413481Sgiacomo.travaglini@arm.com// Tests the linkage of the Property matcher. 61513481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherProperty) { 61613481Sgiacomo.travaglini@arm.com FieldHelper helper(0); 61713481Sgiacomo.travaglini@arm.com 61813481Sgiacomo.travaglini@arm.com Matcher<const FieldHelper&> m = Property(&FieldHelper::field, Eq(0)); 61913481Sgiacomo.travaglini@arm.com EXPECT_TRUE(m.Matches(helper)); 62013481Sgiacomo.travaglini@arm.com 62113481Sgiacomo.travaglini@arm.com Matcher<const FieldHelper*> m2 = Property(&FieldHelper::field, Eq(0)); 62213481Sgiacomo.travaglini@arm.com EXPECT_TRUE(m2.Matches(&helper)); 62313481Sgiacomo.travaglini@arm.com} 62413481Sgiacomo.travaglini@arm.com 62513481Sgiacomo.travaglini@arm.com// Tests the linkage of the ResultOf matcher. 62613481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherResultOf) { 62713481Sgiacomo.travaglini@arm.com Matcher<char*> m = ResultOf(&InvokeHelper::StaticIntFromString, Eq(1)); 62813481Sgiacomo.travaglini@arm.com EXPECT_TRUE(m.Matches(NULL)); 62913481Sgiacomo.travaglini@arm.com} 63013481Sgiacomo.travaglini@arm.com 63113481Sgiacomo.travaglini@arm.com// Tests the linkage of the ResultOf matcher. 63213481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherPointee) { 63313481Sgiacomo.travaglini@arm.com int n = 1; 63413481Sgiacomo.travaglini@arm.com 63513481Sgiacomo.travaglini@arm.com Matcher<int*> m = Pointee(Eq(1)); 63613481Sgiacomo.travaglini@arm.com EXPECT_TRUE(m.Matches(&n)); 63713481Sgiacomo.travaglini@arm.com} 63813481Sgiacomo.travaglini@arm.com 63913481Sgiacomo.travaglini@arm.com// Tests the linkage of the Truly matcher. 64013481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherTruly) { 64113481Sgiacomo.travaglini@arm.com Matcher<const char*> m = Truly(&InvokeHelper::StaticBoolFromString); 64213481Sgiacomo.travaglini@arm.com EXPECT_TRUE(m.Matches(NULL)); 64313481Sgiacomo.travaglini@arm.com} 64413481Sgiacomo.travaglini@arm.com 64513481Sgiacomo.travaglini@arm.com// Tests the linkage of the AllOf matcher. 64613481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherAllOf) { 64713481Sgiacomo.travaglini@arm.com Matcher<int> m = AllOf(_, Eq(1)); 64813481Sgiacomo.travaglini@arm.com EXPECT_TRUE(m.Matches(1)); 64913481Sgiacomo.travaglini@arm.com} 65013481Sgiacomo.travaglini@arm.com 65113481Sgiacomo.travaglini@arm.com// Tests the linkage of the AnyOf matcher. 65213481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherAnyOf) { 65313481Sgiacomo.travaglini@arm.com Matcher<int> m = AnyOf(_, Eq(1)); 65413481Sgiacomo.travaglini@arm.com EXPECT_TRUE(m.Matches(1)); 65513481Sgiacomo.travaglini@arm.com} 65613481Sgiacomo.travaglini@arm.com 65713481Sgiacomo.travaglini@arm.com// Tests the linkage of the Not matcher. 65813481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherNot) { 65913481Sgiacomo.travaglini@arm.com Matcher<int> m = Not(_); 66013481Sgiacomo.travaglini@arm.com EXPECT_FALSE(m.Matches(1)); 66113481Sgiacomo.travaglini@arm.com} 66213481Sgiacomo.travaglini@arm.com 66313481Sgiacomo.travaglini@arm.com// Tests the linkage of the MatcherCast<T>() function. 66413481Sgiacomo.travaglini@arm.comTEST(LinkTest, TestMatcherCast) { 66513481Sgiacomo.travaglini@arm.com Matcher<const char*> m = MatcherCast<const char*>(_); 66613481Sgiacomo.travaglini@arm.com EXPECT_TRUE(m.Matches(NULL)); 66713481Sgiacomo.travaglini@arm.com} 66813481Sgiacomo.travaglini@arm.com 66913481Sgiacomo.travaglini@arm.com#endif // GMOCK_TEST_GMOCK_LINK_TEST_H_ 670