113481Sgiacomo.travaglini@arm.com// Copyright 2007, 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: wan@google.com (Zhanyong Wan) 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 the spec builder syntax. 3513481Sgiacomo.travaglini@arm.com 3613481Sgiacomo.travaglini@arm.com#include "gmock/gmock-spec-builders.h" 3713481Sgiacomo.travaglini@arm.com 3813481Sgiacomo.travaglini@arm.com#include <ostream> // NOLINT 3913481Sgiacomo.travaglini@arm.com#include <sstream> 4013481Sgiacomo.travaglini@arm.com#include <string> 4113481Sgiacomo.travaglini@arm.com 4213481Sgiacomo.travaglini@arm.com#include "gmock/gmock.h" 4313481Sgiacomo.travaglini@arm.com#include "gmock/internal/gmock-port.h" 4413481Sgiacomo.travaglini@arm.com#include "gtest/gtest.h" 4513481Sgiacomo.travaglini@arm.com#include "gtest/gtest-spi.h" 4613481Sgiacomo.travaglini@arm.com#include "gtest/internal/gtest-port.h" 4713481Sgiacomo.travaglini@arm.com 4813481Sgiacomo.travaglini@arm.comnamespace testing { 4913481Sgiacomo.travaglini@arm.comnamespace internal { 5013481Sgiacomo.travaglini@arm.com 5113481Sgiacomo.travaglini@arm.com// Helper class for testing the Expectation class template. 5213481Sgiacomo.travaglini@arm.comclass ExpectationTester { 5313481Sgiacomo.travaglini@arm.com public: 5413481Sgiacomo.travaglini@arm.com // Sets the call count of the given expectation to the given number. 5513481Sgiacomo.travaglini@arm.com void SetCallCount(int n, ExpectationBase* exp) { 5613481Sgiacomo.travaglini@arm.com exp->call_count_ = n; 5713481Sgiacomo.travaglini@arm.com } 5813481Sgiacomo.travaglini@arm.com}; 5913481Sgiacomo.travaglini@arm.com 6013481Sgiacomo.travaglini@arm.com} // namespace internal 6113481Sgiacomo.travaglini@arm.com} // namespace testing 6213481Sgiacomo.travaglini@arm.com 6313481Sgiacomo.travaglini@arm.comnamespace { 6413481Sgiacomo.travaglini@arm.com 6513481Sgiacomo.travaglini@arm.comusing testing::_; 6613481Sgiacomo.travaglini@arm.comusing testing::AnyNumber; 6713481Sgiacomo.travaglini@arm.comusing testing::AtLeast; 6813481Sgiacomo.travaglini@arm.comusing testing::AtMost; 6913481Sgiacomo.travaglini@arm.comusing testing::Between; 7013481Sgiacomo.travaglini@arm.comusing testing::Cardinality; 7113481Sgiacomo.travaglini@arm.comusing testing::CardinalityInterface; 7213481Sgiacomo.travaglini@arm.comusing testing::ContainsRegex; 7313481Sgiacomo.travaglini@arm.comusing testing::Const; 7413481Sgiacomo.travaglini@arm.comusing testing::DoAll; 7513481Sgiacomo.travaglini@arm.comusing testing::DoDefault; 7613481Sgiacomo.travaglini@arm.comusing testing::Eq; 7713481Sgiacomo.travaglini@arm.comusing testing::Expectation; 7813481Sgiacomo.travaglini@arm.comusing testing::ExpectationSet; 7913481Sgiacomo.travaglini@arm.comusing testing::GMOCK_FLAG(verbose); 8013481Sgiacomo.travaglini@arm.comusing testing::Gt; 8113481Sgiacomo.travaglini@arm.comusing testing::InSequence; 8213481Sgiacomo.travaglini@arm.comusing testing::Invoke; 8313481Sgiacomo.travaglini@arm.comusing testing::InvokeWithoutArgs; 8413481Sgiacomo.travaglini@arm.comusing testing::IsNotSubstring; 8513481Sgiacomo.travaglini@arm.comusing testing::IsSubstring; 8613481Sgiacomo.travaglini@arm.comusing testing::Lt; 8713481Sgiacomo.travaglini@arm.comusing testing::Message; 8813481Sgiacomo.travaglini@arm.comusing testing::Mock; 8913481Sgiacomo.travaglini@arm.comusing testing::NaggyMock; 9013481Sgiacomo.travaglini@arm.comusing testing::Ne; 9113481Sgiacomo.travaglini@arm.comusing testing::Return; 9213481Sgiacomo.travaglini@arm.comusing testing::Sequence; 9313481Sgiacomo.travaglini@arm.comusing testing::SetArgPointee; 9413481Sgiacomo.travaglini@arm.comusing testing::internal::ExpectationTester; 9513481Sgiacomo.travaglini@arm.comusing testing::internal::FormatFileLocation; 9613481Sgiacomo.travaglini@arm.comusing testing::internal::kErrorVerbosity; 9713481Sgiacomo.travaglini@arm.comusing testing::internal::kInfoVerbosity; 9813481Sgiacomo.travaglini@arm.comusing testing::internal::kWarningVerbosity; 9913481Sgiacomo.travaglini@arm.comusing testing::internal::linked_ptr; 10013481Sgiacomo.travaglini@arm.comusing testing::internal::string; 10113481Sgiacomo.travaglini@arm.com 10213481Sgiacomo.travaglini@arm.com#if GTEST_HAS_STREAM_REDIRECTION 10313481Sgiacomo.travaglini@arm.comusing testing::HasSubstr; 10413481Sgiacomo.travaglini@arm.comusing testing::internal::CaptureStdout; 10513481Sgiacomo.travaglini@arm.comusing testing::internal::GetCapturedStdout; 10613481Sgiacomo.travaglini@arm.com#endif 10713481Sgiacomo.travaglini@arm.com 10813481Sgiacomo.travaglini@arm.comclass Incomplete; 10913481Sgiacomo.travaglini@arm.com 11013481Sgiacomo.travaglini@arm.comclass MockIncomplete { 11113481Sgiacomo.travaglini@arm.com public: 11213481Sgiacomo.travaglini@arm.com // This line verifies that a mock method can take a by-reference 11313481Sgiacomo.travaglini@arm.com // argument of an incomplete type. 11413481Sgiacomo.travaglini@arm.com MOCK_METHOD1(ByRefFunc, void(const Incomplete& x)); 11513481Sgiacomo.travaglini@arm.com}; 11613481Sgiacomo.travaglini@arm.com 11713481Sgiacomo.travaglini@arm.com// Tells Google Mock how to print a value of type Incomplete. 11813481Sgiacomo.travaglini@arm.comvoid PrintTo(const Incomplete& x, ::std::ostream* os); 11913481Sgiacomo.travaglini@arm.com 12013481Sgiacomo.travaglini@arm.comTEST(MockMethodTest, CanInstantiateWithIncompleteArgType) { 12113481Sgiacomo.travaglini@arm.com // Even though this mock class contains a mock method that takes 12213481Sgiacomo.travaglini@arm.com // by-reference an argument whose type is incomplete, we can still 12313481Sgiacomo.travaglini@arm.com // use the mock, as long as Google Mock knows how to print the 12413481Sgiacomo.travaglini@arm.com // argument. 12513481Sgiacomo.travaglini@arm.com MockIncomplete incomplete; 12613481Sgiacomo.travaglini@arm.com EXPECT_CALL(incomplete, ByRefFunc(_)) 12713481Sgiacomo.travaglini@arm.com .Times(AnyNumber()); 12813481Sgiacomo.travaglini@arm.com} 12913481Sgiacomo.travaglini@arm.com 13013481Sgiacomo.travaglini@arm.com// The definition of the printer for the argument type doesn't have to 13113481Sgiacomo.travaglini@arm.com// be visible where the mock is used. 13213481Sgiacomo.travaglini@arm.comvoid PrintTo(const Incomplete& /* x */, ::std::ostream* os) { 13313481Sgiacomo.travaglini@arm.com *os << "incomplete"; 13413481Sgiacomo.travaglini@arm.com} 13513481Sgiacomo.travaglini@arm.com 13613481Sgiacomo.travaglini@arm.comclass Result {}; 13713481Sgiacomo.travaglini@arm.com 13813481Sgiacomo.travaglini@arm.com// A type that's not default constructible. 13913481Sgiacomo.travaglini@arm.comclass NonDefaultConstructible { 14013481Sgiacomo.travaglini@arm.com public: 14113481Sgiacomo.travaglini@arm.com explicit NonDefaultConstructible(int /* dummy */) {} 14213481Sgiacomo.travaglini@arm.com}; 14313481Sgiacomo.travaglini@arm.com 14413481Sgiacomo.travaglini@arm.comclass MockA { 14513481Sgiacomo.travaglini@arm.com public: 14613481Sgiacomo.travaglini@arm.com MockA() {} 14713481Sgiacomo.travaglini@arm.com 14813481Sgiacomo.travaglini@arm.com MOCK_METHOD1(DoA, void(int n)); 14913481Sgiacomo.travaglini@arm.com MOCK_METHOD1(ReturnResult, Result(int n)); 15013481Sgiacomo.travaglini@arm.com MOCK_METHOD0(ReturnNonDefaultConstructible, NonDefaultConstructible()); 15113481Sgiacomo.travaglini@arm.com MOCK_METHOD2(Binary, bool(int x, int y)); 15213481Sgiacomo.travaglini@arm.com MOCK_METHOD2(ReturnInt, int(int x, int y)); 15313481Sgiacomo.travaglini@arm.com 15413481Sgiacomo.travaglini@arm.com private: 15513481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(MockA); 15613481Sgiacomo.travaglini@arm.com}; 15713481Sgiacomo.travaglini@arm.com 15813481Sgiacomo.travaglini@arm.comclass MockB { 15913481Sgiacomo.travaglini@arm.com public: 16013481Sgiacomo.travaglini@arm.com MockB() {} 16113481Sgiacomo.travaglini@arm.com 16213481Sgiacomo.travaglini@arm.com MOCK_CONST_METHOD0(DoB, int()); // NOLINT 16313481Sgiacomo.travaglini@arm.com MOCK_METHOD1(DoB, int(int n)); // NOLINT 16413481Sgiacomo.travaglini@arm.com 16513481Sgiacomo.travaglini@arm.com private: 16613481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(MockB); 16713481Sgiacomo.travaglini@arm.com}; 16813481Sgiacomo.travaglini@arm.com 16913481Sgiacomo.travaglini@arm.comclass ReferenceHoldingMock { 17013481Sgiacomo.travaglini@arm.com public: 17113481Sgiacomo.travaglini@arm.com ReferenceHoldingMock() {} 17213481Sgiacomo.travaglini@arm.com 17313481Sgiacomo.travaglini@arm.com MOCK_METHOD1(AcceptReference, void(linked_ptr<MockA>*)); 17413481Sgiacomo.travaglini@arm.com 17513481Sgiacomo.travaglini@arm.com private: 17613481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(ReferenceHoldingMock); 17713481Sgiacomo.travaglini@arm.com}; 17813481Sgiacomo.travaglini@arm.com 17913481Sgiacomo.travaglini@arm.com// Tests that EXPECT_CALL and ON_CALL compile in a presence of macro 18013481Sgiacomo.travaglini@arm.com// redefining a mock method name. This could happen, for example, when 18113481Sgiacomo.travaglini@arm.com// the tested code #includes Win32 API headers which define many APIs 18213481Sgiacomo.travaglini@arm.com// as macros, e.g. #define TextOut TextOutW. 18313481Sgiacomo.travaglini@arm.com 18413481Sgiacomo.travaglini@arm.com#define Method MethodW 18513481Sgiacomo.travaglini@arm.com 18613481Sgiacomo.travaglini@arm.comclass CC { 18713481Sgiacomo.travaglini@arm.com public: 18813481Sgiacomo.travaglini@arm.com virtual ~CC() {} 18913481Sgiacomo.travaglini@arm.com virtual int Method() = 0; 19013481Sgiacomo.travaglini@arm.com}; 19113481Sgiacomo.travaglini@arm.comclass MockCC : public CC { 19213481Sgiacomo.travaglini@arm.com public: 19313481Sgiacomo.travaglini@arm.com MockCC() {} 19413481Sgiacomo.travaglini@arm.com 19513481Sgiacomo.travaglini@arm.com MOCK_METHOD0(Method, int()); 19613481Sgiacomo.travaglini@arm.com 19713481Sgiacomo.travaglini@arm.com private: 19813481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(MockCC); 19913481Sgiacomo.travaglini@arm.com}; 20013481Sgiacomo.travaglini@arm.com 20113481Sgiacomo.travaglini@arm.com// Tests that a method with expanded name compiles. 20213481Sgiacomo.travaglini@arm.comTEST(OnCallSyntaxTest, CompilesWithMethodNameExpandedFromMacro) { 20313481Sgiacomo.travaglini@arm.com MockCC cc; 20413481Sgiacomo.travaglini@arm.com ON_CALL(cc, Method()); 20513481Sgiacomo.travaglini@arm.com} 20613481Sgiacomo.travaglini@arm.com 20713481Sgiacomo.travaglini@arm.com// Tests that the method with expanded name not only compiles but runs 20813481Sgiacomo.travaglini@arm.com// and returns a correct value, too. 20913481Sgiacomo.travaglini@arm.comTEST(OnCallSyntaxTest, WorksWithMethodNameExpandedFromMacro) { 21013481Sgiacomo.travaglini@arm.com MockCC cc; 21113481Sgiacomo.travaglini@arm.com ON_CALL(cc, Method()).WillByDefault(Return(42)); 21213481Sgiacomo.travaglini@arm.com EXPECT_EQ(42, cc.Method()); 21313481Sgiacomo.travaglini@arm.com} 21413481Sgiacomo.travaglini@arm.com 21513481Sgiacomo.travaglini@arm.com// Tests that a method with expanded name compiles. 21613481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, CompilesWithMethodNameExpandedFromMacro) { 21713481Sgiacomo.travaglini@arm.com MockCC cc; 21813481Sgiacomo.travaglini@arm.com EXPECT_CALL(cc, Method()); 21913481Sgiacomo.travaglini@arm.com cc.Method(); 22013481Sgiacomo.travaglini@arm.com} 22113481Sgiacomo.travaglini@arm.com 22213481Sgiacomo.travaglini@arm.com// Tests that it works, too. 22313481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, WorksWithMethodNameExpandedFromMacro) { 22413481Sgiacomo.travaglini@arm.com MockCC cc; 22513481Sgiacomo.travaglini@arm.com EXPECT_CALL(cc, Method()).WillOnce(Return(42)); 22613481Sgiacomo.travaglini@arm.com EXPECT_EQ(42, cc.Method()); 22713481Sgiacomo.travaglini@arm.com} 22813481Sgiacomo.travaglini@arm.com 22913481Sgiacomo.travaglini@arm.com#undef Method // Done with macro redefinition tests. 23013481Sgiacomo.travaglini@arm.com 23113481Sgiacomo.travaglini@arm.com// Tests that ON_CALL evaluates its arguments exactly once as promised 23213481Sgiacomo.travaglini@arm.com// by Google Mock. 23313481Sgiacomo.travaglini@arm.comTEST(OnCallSyntaxTest, EvaluatesFirstArgumentOnce) { 23413481Sgiacomo.travaglini@arm.com MockA a; 23513481Sgiacomo.travaglini@arm.com MockA* pa = &a; 23613481Sgiacomo.travaglini@arm.com 23713481Sgiacomo.travaglini@arm.com ON_CALL(*pa++, DoA(_)); 23813481Sgiacomo.travaglini@arm.com EXPECT_EQ(&a + 1, pa); 23913481Sgiacomo.travaglini@arm.com} 24013481Sgiacomo.travaglini@arm.com 24113481Sgiacomo.travaglini@arm.comTEST(OnCallSyntaxTest, EvaluatesSecondArgumentOnce) { 24213481Sgiacomo.travaglini@arm.com MockA a; 24313481Sgiacomo.travaglini@arm.com int n = 0; 24413481Sgiacomo.travaglini@arm.com 24513481Sgiacomo.travaglini@arm.com ON_CALL(a, DoA(n++)); 24613481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, n); 24713481Sgiacomo.travaglini@arm.com} 24813481Sgiacomo.travaglini@arm.com 24913481Sgiacomo.travaglini@arm.com// Tests that the syntax of ON_CALL() is enforced at run time. 25013481Sgiacomo.travaglini@arm.com 25113481Sgiacomo.travaglini@arm.comTEST(OnCallSyntaxTest, WithIsOptional) { 25213481Sgiacomo.travaglini@arm.com MockA a; 25313481Sgiacomo.travaglini@arm.com 25413481Sgiacomo.travaglini@arm.com ON_CALL(a, DoA(5)) 25513481Sgiacomo.travaglini@arm.com .WillByDefault(Return()); 25613481Sgiacomo.travaglini@arm.com ON_CALL(a, DoA(_)) 25713481Sgiacomo.travaglini@arm.com .With(_) 25813481Sgiacomo.travaglini@arm.com .WillByDefault(Return()); 25913481Sgiacomo.travaglini@arm.com} 26013481Sgiacomo.travaglini@arm.com 26113481Sgiacomo.travaglini@arm.comTEST(OnCallSyntaxTest, WithCanAppearAtMostOnce) { 26213481Sgiacomo.travaglini@arm.com MockA a; 26313481Sgiacomo.travaglini@arm.com 26413481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 26513481Sgiacomo.travaglini@arm.com ON_CALL(a, ReturnResult(_)) 26613481Sgiacomo.travaglini@arm.com .With(_) 26713481Sgiacomo.travaglini@arm.com .With(_) 26813481Sgiacomo.travaglini@arm.com .WillByDefault(Return(Result())); 26913481Sgiacomo.travaglini@arm.com }, ".With() cannot appear more than once in an ON_CALL()"); 27013481Sgiacomo.travaglini@arm.com} 27113481Sgiacomo.travaglini@arm.com 27213481Sgiacomo.travaglini@arm.comTEST(OnCallSyntaxTest, WillByDefaultIsMandatory) { 27313481Sgiacomo.travaglini@arm.com MockA a; 27413481Sgiacomo.travaglini@arm.com 27513481Sgiacomo.travaglini@arm.com EXPECT_DEATH_IF_SUPPORTED({ 27613481Sgiacomo.travaglini@arm.com ON_CALL(a, DoA(5)); 27713481Sgiacomo.travaglini@arm.com a.DoA(5); 27813481Sgiacomo.travaglini@arm.com }, ""); 27913481Sgiacomo.travaglini@arm.com} 28013481Sgiacomo.travaglini@arm.com 28113481Sgiacomo.travaglini@arm.comTEST(OnCallSyntaxTest, WillByDefaultCanAppearAtMostOnce) { 28213481Sgiacomo.travaglini@arm.com MockA a; 28313481Sgiacomo.travaglini@arm.com 28413481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 28513481Sgiacomo.travaglini@arm.com ON_CALL(a, DoA(5)) 28613481Sgiacomo.travaglini@arm.com .WillByDefault(Return()) 28713481Sgiacomo.travaglini@arm.com .WillByDefault(Return()); 28813481Sgiacomo.travaglini@arm.com }, ".WillByDefault() must appear exactly once in an ON_CALL()"); 28913481Sgiacomo.travaglini@arm.com} 29013481Sgiacomo.travaglini@arm.com 29113481Sgiacomo.travaglini@arm.com// Tests that EXPECT_CALL evaluates its arguments exactly once as 29213481Sgiacomo.travaglini@arm.com// promised by Google Mock. 29313481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, EvaluatesFirstArgumentOnce) { 29413481Sgiacomo.travaglini@arm.com MockA a; 29513481Sgiacomo.travaglini@arm.com MockA* pa = &a; 29613481Sgiacomo.travaglini@arm.com 29713481Sgiacomo.travaglini@arm.com EXPECT_CALL(*pa++, DoA(_)); 29813481Sgiacomo.travaglini@arm.com a.DoA(0); 29913481Sgiacomo.travaglini@arm.com EXPECT_EQ(&a + 1, pa); 30013481Sgiacomo.travaglini@arm.com} 30113481Sgiacomo.travaglini@arm.com 30213481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, EvaluatesSecondArgumentOnce) { 30313481Sgiacomo.travaglini@arm.com MockA a; 30413481Sgiacomo.travaglini@arm.com int n = 0; 30513481Sgiacomo.travaglini@arm.com 30613481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(n++)); 30713481Sgiacomo.travaglini@arm.com a.DoA(0); 30813481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, n); 30913481Sgiacomo.travaglini@arm.com} 31013481Sgiacomo.travaglini@arm.com 31113481Sgiacomo.travaglini@arm.com// Tests that the syntax of EXPECT_CALL() is enforced at run time. 31213481Sgiacomo.travaglini@arm.com 31313481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, WithIsOptional) { 31413481Sgiacomo.travaglini@arm.com MockA a; 31513481Sgiacomo.travaglini@arm.com 31613481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(5)) 31713481Sgiacomo.travaglini@arm.com .Times(0); 31813481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(6)) 31913481Sgiacomo.travaglini@arm.com .With(_) 32013481Sgiacomo.travaglini@arm.com .Times(0); 32113481Sgiacomo.travaglini@arm.com} 32213481Sgiacomo.travaglini@arm.com 32313481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, WithCanAppearAtMostOnce) { 32413481Sgiacomo.travaglini@arm.com MockA a; 32513481Sgiacomo.travaglini@arm.com 32613481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 32713481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(6)) 32813481Sgiacomo.travaglini@arm.com .With(_) 32913481Sgiacomo.travaglini@arm.com .With(_); 33013481Sgiacomo.travaglini@arm.com }, ".With() cannot appear more than once in an EXPECT_CALL()"); 33113481Sgiacomo.travaglini@arm.com 33213481Sgiacomo.travaglini@arm.com a.DoA(6); 33313481Sgiacomo.travaglini@arm.com} 33413481Sgiacomo.travaglini@arm.com 33513481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, WithMustBeFirstClause) { 33613481Sgiacomo.travaglini@arm.com MockA a; 33713481Sgiacomo.travaglini@arm.com 33813481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 33913481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)) 34013481Sgiacomo.travaglini@arm.com .Times(1) 34113481Sgiacomo.travaglini@arm.com .With(_); 34213481Sgiacomo.travaglini@arm.com }, ".With() must be the first clause in an EXPECT_CALL()"); 34313481Sgiacomo.travaglini@arm.com 34413481Sgiacomo.travaglini@arm.com a.DoA(1); 34513481Sgiacomo.travaglini@arm.com 34613481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 34713481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(2)) 34813481Sgiacomo.travaglini@arm.com .WillOnce(Return()) 34913481Sgiacomo.travaglini@arm.com .With(_); 35013481Sgiacomo.travaglini@arm.com }, ".With() must be the first clause in an EXPECT_CALL()"); 35113481Sgiacomo.travaglini@arm.com 35213481Sgiacomo.travaglini@arm.com a.DoA(2); 35313481Sgiacomo.travaglini@arm.com} 35413481Sgiacomo.travaglini@arm.com 35513481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, TimesCanBeInferred) { 35613481Sgiacomo.travaglini@arm.com MockA a; 35713481Sgiacomo.travaglini@arm.com 35813481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)) 35913481Sgiacomo.travaglini@arm.com .WillOnce(Return()); 36013481Sgiacomo.travaglini@arm.com 36113481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(2)) 36213481Sgiacomo.travaglini@arm.com .WillOnce(Return()) 36313481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return()); 36413481Sgiacomo.travaglini@arm.com 36513481Sgiacomo.travaglini@arm.com a.DoA(1); 36613481Sgiacomo.travaglini@arm.com a.DoA(2); 36713481Sgiacomo.travaglini@arm.com a.DoA(2); 36813481Sgiacomo.travaglini@arm.com} 36913481Sgiacomo.travaglini@arm.com 37013481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, TimesCanAppearAtMostOnce) { 37113481Sgiacomo.travaglini@arm.com MockA a; 37213481Sgiacomo.travaglini@arm.com 37313481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 37413481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)) 37513481Sgiacomo.travaglini@arm.com .Times(1) 37613481Sgiacomo.travaglini@arm.com .Times(2); 37713481Sgiacomo.travaglini@arm.com }, ".Times() cannot appear more than once in an EXPECT_CALL()"); 37813481Sgiacomo.travaglini@arm.com 37913481Sgiacomo.travaglini@arm.com a.DoA(1); 38013481Sgiacomo.travaglini@arm.com a.DoA(1); 38113481Sgiacomo.travaglini@arm.com} 38213481Sgiacomo.travaglini@arm.com 38313481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, TimesMustBeBeforeInSequence) { 38413481Sgiacomo.travaglini@arm.com MockA a; 38513481Sgiacomo.travaglini@arm.com Sequence s; 38613481Sgiacomo.travaglini@arm.com 38713481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 38813481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)) 38913481Sgiacomo.travaglini@arm.com .InSequence(s) 39013481Sgiacomo.travaglini@arm.com .Times(1); 39113481Sgiacomo.travaglini@arm.com }, ".Times() cannot appear after "); 39213481Sgiacomo.travaglini@arm.com 39313481Sgiacomo.travaglini@arm.com a.DoA(1); 39413481Sgiacomo.travaglini@arm.com} 39513481Sgiacomo.travaglini@arm.com 39613481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, InSequenceIsOptional) { 39713481Sgiacomo.travaglini@arm.com MockA a; 39813481Sgiacomo.travaglini@arm.com Sequence s; 39913481Sgiacomo.travaglini@arm.com 40013481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)); 40113481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(2)) 40213481Sgiacomo.travaglini@arm.com .InSequence(s); 40313481Sgiacomo.travaglini@arm.com 40413481Sgiacomo.travaglini@arm.com a.DoA(1); 40513481Sgiacomo.travaglini@arm.com a.DoA(2); 40613481Sgiacomo.travaglini@arm.com} 40713481Sgiacomo.travaglini@arm.com 40813481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, InSequenceCanAppearMultipleTimes) { 40913481Sgiacomo.travaglini@arm.com MockA a; 41013481Sgiacomo.travaglini@arm.com Sequence s1, s2; 41113481Sgiacomo.travaglini@arm.com 41213481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)) 41313481Sgiacomo.travaglini@arm.com .InSequence(s1, s2) 41413481Sgiacomo.travaglini@arm.com .InSequence(s1); 41513481Sgiacomo.travaglini@arm.com 41613481Sgiacomo.travaglini@arm.com a.DoA(1); 41713481Sgiacomo.travaglini@arm.com} 41813481Sgiacomo.travaglini@arm.com 41913481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, InSequenceMustBeBeforeAfter) { 42013481Sgiacomo.travaglini@arm.com MockA a; 42113481Sgiacomo.travaglini@arm.com Sequence s; 42213481Sgiacomo.travaglini@arm.com 42313481Sgiacomo.travaglini@arm.com Expectation e = EXPECT_CALL(a, DoA(1)) 42413481Sgiacomo.travaglini@arm.com .Times(AnyNumber()); 42513481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 42613481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(2)) 42713481Sgiacomo.travaglini@arm.com .After(e) 42813481Sgiacomo.travaglini@arm.com .InSequence(s); 42913481Sgiacomo.travaglini@arm.com }, ".InSequence() cannot appear after "); 43013481Sgiacomo.travaglini@arm.com 43113481Sgiacomo.travaglini@arm.com a.DoA(2); 43213481Sgiacomo.travaglini@arm.com} 43313481Sgiacomo.travaglini@arm.com 43413481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, InSequenceMustBeBeforeWillOnce) { 43513481Sgiacomo.travaglini@arm.com MockA a; 43613481Sgiacomo.travaglini@arm.com Sequence s; 43713481Sgiacomo.travaglini@arm.com 43813481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 43913481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)) 44013481Sgiacomo.travaglini@arm.com .WillOnce(Return()) 44113481Sgiacomo.travaglini@arm.com .InSequence(s); 44213481Sgiacomo.travaglini@arm.com }, ".InSequence() cannot appear after "); 44313481Sgiacomo.travaglini@arm.com 44413481Sgiacomo.travaglini@arm.com a.DoA(1); 44513481Sgiacomo.travaglini@arm.com} 44613481Sgiacomo.travaglini@arm.com 44713481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, AfterMustBeBeforeWillOnce) { 44813481Sgiacomo.travaglini@arm.com MockA a; 44913481Sgiacomo.travaglini@arm.com 45013481Sgiacomo.travaglini@arm.com Expectation e = EXPECT_CALL(a, DoA(1)); 45113481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ 45213481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(2)) 45313481Sgiacomo.travaglini@arm.com .WillOnce(Return()) 45413481Sgiacomo.travaglini@arm.com .After(e); 45513481Sgiacomo.travaglini@arm.com }, ".After() cannot appear after "); 45613481Sgiacomo.travaglini@arm.com 45713481Sgiacomo.travaglini@arm.com a.DoA(1); 45813481Sgiacomo.travaglini@arm.com a.DoA(2); 45913481Sgiacomo.travaglini@arm.com} 46013481Sgiacomo.travaglini@arm.com 46113481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, WillIsOptional) { 46213481Sgiacomo.travaglini@arm.com MockA a; 46313481Sgiacomo.travaglini@arm.com 46413481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)); 46513481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(2)) 46613481Sgiacomo.travaglini@arm.com .WillOnce(Return()); 46713481Sgiacomo.travaglini@arm.com 46813481Sgiacomo.travaglini@arm.com a.DoA(1); 46913481Sgiacomo.travaglini@arm.com a.DoA(2); 47013481Sgiacomo.travaglini@arm.com} 47113481Sgiacomo.travaglini@arm.com 47213481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, WillCanAppearMultipleTimes) { 47313481Sgiacomo.travaglini@arm.com MockA a; 47413481Sgiacomo.travaglini@arm.com 47513481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)) 47613481Sgiacomo.travaglini@arm.com .Times(AnyNumber()) 47713481Sgiacomo.travaglini@arm.com .WillOnce(Return()) 47813481Sgiacomo.travaglini@arm.com .WillOnce(Return()) 47913481Sgiacomo.travaglini@arm.com .WillOnce(Return()); 48013481Sgiacomo.travaglini@arm.com} 48113481Sgiacomo.travaglini@arm.com 48213481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, WillMustBeBeforeWillRepeatedly) { 48313481Sgiacomo.travaglini@arm.com MockA a; 48413481Sgiacomo.travaglini@arm.com 48513481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 48613481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)) 48713481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return()) 48813481Sgiacomo.travaglini@arm.com .WillOnce(Return()); 48913481Sgiacomo.travaglini@arm.com }, ".WillOnce() cannot appear after "); 49013481Sgiacomo.travaglini@arm.com 49113481Sgiacomo.travaglini@arm.com a.DoA(1); 49213481Sgiacomo.travaglini@arm.com} 49313481Sgiacomo.travaglini@arm.com 49413481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, WillRepeatedlyIsOptional) { 49513481Sgiacomo.travaglini@arm.com MockA a; 49613481Sgiacomo.travaglini@arm.com 49713481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)) 49813481Sgiacomo.travaglini@arm.com .WillOnce(Return()); 49913481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(2)) 50013481Sgiacomo.travaglini@arm.com .WillOnce(Return()) 50113481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return()); 50213481Sgiacomo.travaglini@arm.com 50313481Sgiacomo.travaglini@arm.com a.DoA(1); 50413481Sgiacomo.travaglini@arm.com a.DoA(2); 50513481Sgiacomo.travaglini@arm.com a.DoA(2); 50613481Sgiacomo.travaglini@arm.com} 50713481Sgiacomo.travaglini@arm.com 50813481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, WillRepeatedlyCannotAppearMultipleTimes) { 50913481Sgiacomo.travaglini@arm.com MockA a; 51013481Sgiacomo.travaglini@arm.com 51113481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 51213481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)) 51313481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return()) 51413481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return()); 51513481Sgiacomo.travaglini@arm.com }, ".WillRepeatedly() cannot appear more than once in an " 51613481Sgiacomo.travaglini@arm.com "EXPECT_CALL()"); 51713481Sgiacomo.travaglini@arm.com} 51813481Sgiacomo.travaglini@arm.com 51913481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, WillRepeatedlyMustBeBeforeRetiresOnSaturation) { 52013481Sgiacomo.travaglini@arm.com MockA a; 52113481Sgiacomo.travaglini@arm.com 52213481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 52313481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)) 52413481Sgiacomo.travaglini@arm.com .RetiresOnSaturation() 52513481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return()); 52613481Sgiacomo.travaglini@arm.com }, ".WillRepeatedly() cannot appear after "); 52713481Sgiacomo.travaglini@arm.com} 52813481Sgiacomo.travaglini@arm.com 52913481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, RetiresOnSaturationIsOptional) { 53013481Sgiacomo.travaglini@arm.com MockA a; 53113481Sgiacomo.travaglini@arm.com 53213481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)); 53313481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)) 53413481Sgiacomo.travaglini@arm.com .RetiresOnSaturation(); 53513481Sgiacomo.travaglini@arm.com 53613481Sgiacomo.travaglini@arm.com a.DoA(1); 53713481Sgiacomo.travaglini@arm.com a.DoA(1); 53813481Sgiacomo.travaglini@arm.com} 53913481Sgiacomo.travaglini@arm.com 54013481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, RetiresOnSaturationCannotAppearMultipleTimes) { 54113481Sgiacomo.travaglini@arm.com MockA a; 54213481Sgiacomo.travaglini@arm.com 54313481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 54413481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)) 54513481Sgiacomo.travaglini@arm.com .RetiresOnSaturation() 54613481Sgiacomo.travaglini@arm.com .RetiresOnSaturation(); 54713481Sgiacomo.travaglini@arm.com }, ".RetiresOnSaturation() cannot appear more than once"); 54813481Sgiacomo.travaglini@arm.com 54913481Sgiacomo.travaglini@arm.com a.DoA(1); 55013481Sgiacomo.travaglini@arm.com} 55113481Sgiacomo.travaglini@arm.com 55213481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, DefaultCardinalityIsOnce) { 55313481Sgiacomo.travaglini@arm.com { 55413481Sgiacomo.travaglini@arm.com MockA a; 55513481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)); 55613481Sgiacomo.travaglini@arm.com a.DoA(1); 55713481Sgiacomo.travaglini@arm.com } 55813481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 55913481Sgiacomo.travaglini@arm.com MockA a; 56013481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)); 56113481Sgiacomo.travaglini@arm.com }, "to be called once"); 56213481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 56313481Sgiacomo.travaglini@arm.com MockA a; 56413481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)); 56513481Sgiacomo.travaglini@arm.com a.DoA(1); 56613481Sgiacomo.travaglini@arm.com a.DoA(1); 56713481Sgiacomo.travaglini@arm.com }, "to be called once"); 56813481Sgiacomo.travaglini@arm.com} 56913481Sgiacomo.travaglini@arm.com 57013481Sgiacomo.travaglini@arm.com#if GTEST_HAS_STREAM_REDIRECTION 57113481Sgiacomo.travaglini@arm.com 57213481Sgiacomo.travaglini@arm.com// Tests that Google Mock doesn't print a warning when the number of 57313481Sgiacomo.travaglini@arm.com// WillOnce() is adequate. 57413481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, DoesNotWarnOnAdequateActionCount) { 57513481Sgiacomo.travaglini@arm.com CaptureStdout(); 57613481Sgiacomo.travaglini@arm.com { 57713481Sgiacomo.travaglini@arm.com MockB b; 57813481Sgiacomo.travaglini@arm.com 57913481Sgiacomo.travaglini@arm.com // It's always fine to omit WillOnce() entirely. 58013481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 58113481Sgiacomo.travaglini@arm.com .Times(0); 58213481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(1)) 58313481Sgiacomo.travaglini@arm.com .Times(AtMost(1)); 58413481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(2)) 58513481Sgiacomo.travaglini@arm.com .Times(1) 58613481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return(1)); 58713481Sgiacomo.travaglini@arm.com 58813481Sgiacomo.travaglini@arm.com // It's fine for the number of WillOnce()s to equal the upper bound. 58913481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(3)) 59013481Sgiacomo.travaglini@arm.com .Times(Between(1, 2)) 59113481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)) 59213481Sgiacomo.travaglini@arm.com .WillOnce(Return(2)); 59313481Sgiacomo.travaglini@arm.com 59413481Sgiacomo.travaglini@arm.com // It's fine for the number of WillOnce()s to be smaller than the 59513481Sgiacomo.travaglini@arm.com // upper bound when there is a WillRepeatedly(). 59613481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(4)) 59713481Sgiacomo.travaglini@arm.com .Times(AtMost(3)) 59813481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)) 59913481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return(2)); 60013481Sgiacomo.travaglini@arm.com 60113481Sgiacomo.travaglini@arm.com // Satisfies the above expectations. 60213481Sgiacomo.travaglini@arm.com b.DoB(2); 60313481Sgiacomo.travaglini@arm.com b.DoB(3); 60413481Sgiacomo.travaglini@arm.com } 60513481Sgiacomo.travaglini@arm.com EXPECT_STREQ("", GetCapturedStdout().c_str()); 60613481Sgiacomo.travaglini@arm.com} 60713481Sgiacomo.travaglini@arm.com 60813481Sgiacomo.travaglini@arm.com// Tests that Google Mock warns on having too many actions in an 60913481Sgiacomo.travaglini@arm.com// expectation compared to its cardinality. 61013481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, WarnsOnTooManyActions) { 61113481Sgiacomo.travaglini@arm.com CaptureStdout(); 61213481Sgiacomo.travaglini@arm.com { 61313481Sgiacomo.travaglini@arm.com MockB b; 61413481Sgiacomo.travaglini@arm.com 61513481Sgiacomo.travaglini@arm.com // Warns when the number of WillOnce()s is larger than the upper bound. 61613481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 61713481Sgiacomo.travaglini@arm.com .Times(0) 61813481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)); // #1 61913481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 62013481Sgiacomo.travaglini@arm.com .Times(AtMost(1)) 62113481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)) 62213481Sgiacomo.travaglini@arm.com .WillOnce(Return(2)); // #2 62313481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(1)) 62413481Sgiacomo.travaglini@arm.com .Times(1) 62513481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)) 62613481Sgiacomo.travaglini@arm.com .WillOnce(Return(2)) 62713481Sgiacomo.travaglini@arm.com .RetiresOnSaturation(); // #3 62813481Sgiacomo.travaglini@arm.com 62913481Sgiacomo.travaglini@arm.com // Warns when the number of WillOnce()s equals the upper bound and 63013481Sgiacomo.travaglini@arm.com // there is a WillRepeatedly(). 63113481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 63213481Sgiacomo.travaglini@arm.com .Times(0) 63313481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return(1)); // #4 63413481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(2)) 63513481Sgiacomo.travaglini@arm.com .Times(1) 63613481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)) 63713481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return(2)); // #5 63813481Sgiacomo.travaglini@arm.com 63913481Sgiacomo.travaglini@arm.com // Satisfies the above expectations. 64013481Sgiacomo.travaglini@arm.com b.DoB(1); 64113481Sgiacomo.travaglini@arm.com b.DoB(2); 64213481Sgiacomo.travaglini@arm.com } 64313481Sgiacomo.travaglini@arm.com const std::string output = GetCapturedStdout(); 64413481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2( 64513481Sgiacomo.travaglini@arm.com IsSubstring, 64613481Sgiacomo.travaglini@arm.com "Too many actions specified in EXPECT_CALL(b, DoB())...\n" 64713481Sgiacomo.travaglini@arm.com "Expected to be never called, but has 1 WillOnce().", 64813481Sgiacomo.travaglini@arm.com output); // #1 64913481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2( 65013481Sgiacomo.travaglini@arm.com IsSubstring, 65113481Sgiacomo.travaglini@arm.com "Too many actions specified in EXPECT_CALL(b, DoB())...\n" 65213481Sgiacomo.travaglini@arm.com "Expected to be called at most once, " 65313481Sgiacomo.travaglini@arm.com "but has 2 WillOnce()s.", 65413481Sgiacomo.travaglini@arm.com output); // #2 65513481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2( 65613481Sgiacomo.travaglini@arm.com IsSubstring, 65713481Sgiacomo.travaglini@arm.com "Too many actions specified in EXPECT_CALL(b, DoB(1))...\n" 65813481Sgiacomo.travaglini@arm.com "Expected to be called once, but has 2 WillOnce()s.", 65913481Sgiacomo.travaglini@arm.com output); // #3 66013481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2( 66113481Sgiacomo.travaglini@arm.com IsSubstring, 66213481Sgiacomo.travaglini@arm.com "Too many actions specified in EXPECT_CALL(b, DoB())...\n" 66313481Sgiacomo.travaglini@arm.com "Expected to be never called, but has 0 WillOnce()s " 66413481Sgiacomo.travaglini@arm.com "and a WillRepeatedly().", 66513481Sgiacomo.travaglini@arm.com output); // #4 66613481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2( 66713481Sgiacomo.travaglini@arm.com IsSubstring, 66813481Sgiacomo.travaglini@arm.com "Too many actions specified in EXPECT_CALL(b, DoB(2))...\n" 66913481Sgiacomo.travaglini@arm.com "Expected to be called once, but has 1 WillOnce() " 67013481Sgiacomo.travaglini@arm.com "and a WillRepeatedly().", 67113481Sgiacomo.travaglini@arm.com output); // #5 67213481Sgiacomo.travaglini@arm.com} 67313481Sgiacomo.travaglini@arm.com 67413481Sgiacomo.travaglini@arm.com// Tests that Google Mock warns on having too few actions in an 67513481Sgiacomo.travaglini@arm.com// expectation compared to its cardinality. 67613481Sgiacomo.travaglini@arm.comTEST(ExpectCallSyntaxTest, WarnsOnTooFewActions) { 67713481Sgiacomo.travaglini@arm.com MockB b; 67813481Sgiacomo.travaglini@arm.com 67913481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 68013481Sgiacomo.travaglini@arm.com .Times(Between(2, 3)) 68113481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)); 68213481Sgiacomo.travaglini@arm.com 68313481Sgiacomo.travaglini@arm.com CaptureStdout(); 68413481Sgiacomo.travaglini@arm.com b.DoB(); 68513481Sgiacomo.travaglini@arm.com const std::string output = GetCapturedStdout(); 68613481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2( 68713481Sgiacomo.travaglini@arm.com IsSubstring, 68813481Sgiacomo.travaglini@arm.com "Too few actions specified in EXPECT_CALL(b, DoB())...\n" 68913481Sgiacomo.travaglini@arm.com "Expected to be called between 2 and 3 times, " 69013481Sgiacomo.travaglini@arm.com "but has only 1 WillOnce().", 69113481Sgiacomo.travaglini@arm.com output); 69213481Sgiacomo.travaglini@arm.com b.DoB(); 69313481Sgiacomo.travaglini@arm.com} 69413481Sgiacomo.travaglini@arm.com 69513481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_STREAM_REDIRECTION 69613481Sgiacomo.travaglini@arm.com 69713481Sgiacomo.travaglini@arm.com// Tests the semantics of ON_CALL(). 69813481Sgiacomo.travaglini@arm.com 69913481Sgiacomo.travaglini@arm.com// Tests that the built-in default action is taken when no ON_CALL() 70013481Sgiacomo.travaglini@arm.com// is specified. 70113481Sgiacomo.travaglini@arm.comTEST(OnCallTest, TakesBuiltInDefaultActionWhenNoOnCall) { 70213481Sgiacomo.travaglini@arm.com MockB b; 70313481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()); 70413481Sgiacomo.travaglini@arm.com 70513481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 70613481Sgiacomo.travaglini@arm.com} 70713481Sgiacomo.travaglini@arm.com 70813481Sgiacomo.travaglini@arm.com// Tests that the built-in default action is taken when no ON_CALL() 70913481Sgiacomo.travaglini@arm.com// matches the invocation. 71013481Sgiacomo.travaglini@arm.comTEST(OnCallTest, TakesBuiltInDefaultActionWhenNoOnCallMatches) { 71113481Sgiacomo.travaglini@arm.com MockB b; 71213481Sgiacomo.travaglini@arm.com ON_CALL(b, DoB(1)) 71313481Sgiacomo.travaglini@arm.com .WillByDefault(Return(1)); 71413481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(_)); 71513481Sgiacomo.travaglini@arm.com 71613481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB(2)); 71713481Sgiacomo.travaglini@arm.com} 71813481Sgiacomo.travaglini@arm.com 71913481Sgiacomo.travaglini@arm.com// Tests that the last matching ON_CALL() action is taken. 72013481Sgiacomo.travaglini@arm.comTEST(OnCallTest, PicksLastMatchingOnCall) { 72113481Sgiacomo.travaglini@arm.com MockB b; 72213481Sgiacomo.travaglini@arm.com ON_CALL(b, DoB(_)) 72313481Sgiacomo.travaglini@arm.com .WillByDefault(Return(3)); 72413481Sgiacomo.travaglini@arm.com ON_CALL(b, DoB(2)) 72513481Sgiacomo.travaglini@arm.com .WillByDefault(Return(2)); 72613481Sgiacomo.travaglini@arm.com ON_CALL(b, DoB(1)) 72713481Sgiacomo.travaglini@arm.com .WillByDefault(Return(1)); 72813481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(_)); 72913481Sgiacomo.travaglini@arm.com 73013481Sgiacomo.travaglini@arm.com EXPECT_EQ(2, b.DoB(2)); 73113481Sgiacomo.travaglini@arm.com} 73213481Sgiacomo.travaglini@arm.com 73313481Sgiacomo.travaglini@arm.com// Tests the semantics of EXPECT_CALL(). 73413481Sgiacomo.travaglini@arm.com 73513481Sgiacomo.travaglini@arm.com// Tests that any call is allowed when no EXPECT_CALL() is specified. 73613481Sgiacomo.travaglini@arm.comTEST(ExpectCallTest, AllowsAnyCallWhenNoSpec) { 73713481Sgiacomo.travaglini@arm.com MockB b; 73813481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()); 73913481Sgiacomo.travaglini@arm.com // There is no expectation on DoB(int). 74013481Sgiacomo.travaglini@arm.com 74113481Sgiacomo.travaglini@arm.com b.DoB(); 74213481Sgiacomo.travaglini@arm.com 74313481Sgiacomo.travaglini@arm.com // DoB(int) can be called any number of times. 74413481Sgiacomo.travaglini@arm.com b.DoB(1); 74513481Sgiacomo.travaglini@arm.com b.DoB(2); 74613481Sgiacomo.travaglini@arm.com} 74713481Sgiacomo.travaglini@arm.com 74813481Sgiacomo.travaglini@arm.com// Tests that the last matching EXPECT_CALL() fires. 74913481Sgiacomo.travaglini@arm.comTEST(ExpectCallTest, PicksLastMatchingExpectCall) { 75013481Sgiacomo.travaglini@arm.com MockB b; 75113481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(_)) 75213481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return(2)); 75313481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(1)) 75413481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return(1)); 75513481Sgiacomo.travaglini@arm.com 75613481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, b.DoB(1)); 75713481Sgiacomo.travaglini@arm.com} 75813481Sgiacomo.travaglini@arm.com 75913481Sgiacomo.travaglini@arm.com// Tests lower-bound violation. 76013481Sgiacomo.travaglini@arm.comTEST(ExpectCallTest, CatchesTooFewCalls) { 76113481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 76213481Sgiacomo.travaglini@arm.com MockB b; 76313481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(5)) 76413481Sgiacomo.travaglini@arm.com .Times(AtLeast(2)); 76513481Sgiacomo.travaglini@arm.com 76613481Sgiacomo.travaglini@arm.com b.DoB(5); 76713481Sgiacomo.travaglini@arm.com }, "Actual function call count doesn't match EXPECT_CALL(b, DoB(5))...\n" 76813481Sgiacomo.travaglini@arm.com " Expected: to be called at least twice\n" 76913481Sgiacomo.travaglini@arm.com " Actual: called once - unsatisfied and active"); 77013481Sgiacomo.travaglini@arm.com} 77113481Sgiacomo.travaglini@arm.com 77213481Sgiacomo.travaglini@arm.com// Tests that the cardinality can be inferred when no Times(...) is 77313481Sgiacomo.travaglini@arm.com// specified. 77413481Sgiacomo.travaglini@arm.comTEST(ExpectCallTest, InfersCardinalityWhenThereIsNoWillRepeatedly) { 77513481Sgiacomo.travaglini@arm.com { 77613481Sgiacomo.travaglini@arm.com MockB b; 77713481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 77813481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)) 77913481Sgiacomo.travaglini@arm.com .WillOnce(Return(2)); 78013481Sgiacomo.travaglini@arm.com 78113481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, b.DoB()); 78213481Sgiacomo.travaglini@arm.com EXPECT_EQ(2, b.DoB()); 78313481Sgiacomo.travaglini@arm.com } 78413481Sgiacomo.travaglini@arm.com 78513481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 78613481Sgiacomo.travaglini@arm.com MockB b; 78713481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 78813481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)) 78913481Sgiacomo.travaglini@arm.com .WillOnce(Return(2)); 79013481Sgiacomo.travaglini@arm.com 79113481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, b.DoB()); 79213481Sgiacomo.travaglini@arm.com }, "to be called twice"); 79313481Sgiacomo.travaglini@arm.com 79413481Sgiacomo.travaglini@arm.com { // NOLINT 79513481Sgiacomo.travaglini@arm.com MockB b; 79613481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 79713481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)) 79813481Sgiacomo.travaglini@arm.com .WillOnce(Return(2)); 79913481Sgiacomo.travaglini@arm.com 80013481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, b.DoB()); 80113481Sgiacomo.travaglini@arm.com EXPECT_EQ(2, b.DoB()); 80213481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(b.DoB(), "to be called twice"); 80313481Sgiacomo.travaglini@arm.com } 80413481Sgiacomo.travaglini@arm.com} 80513481Sgiacomo.travaglini@arm.com 80613481Sgiacomo.travaglini@arm.comTEST(ExpectCallTest, InfersCardinality1WhenThereIsWillRepeatedly) { 80713481Sgiacomo.travaglini@arm.com { 80813481Sgiacomo.travaglini@arm.com MockB b; 80913481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 81013481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)) 81113481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return(2)); 81213481Sgiacomo.travaglini@arm.com 81313481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, b.DoB()); 81413481Sgiacomo.travaglini@arm.com } 81513481Sgiacomo.travaglini@arm.com 81613481Sgiacomo.travaglini@arm.com { // NOLINT 81713481Sgiacomo.travaglini@arm.com MockB b; 81813481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 81913481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)) 82013481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return(2)); 82113481Sgiacomo.travaglini@arm.com 82213481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, b.DoB()); 82313481Sgiacomo.travaglini@arm.com EXPECT_EQ(2, b.DoB()); 82413481Sgiacomo.travaglini@arm.com EXPECT_EQ(2, b.DoB()); 82513481Sgiacomo.travaglini@arm.com } 82613481Sgiacomo.travaglini@arm.com 82713481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 82813481Sgiacomo.travaglini@arm.com MockB b; 82913481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 83013481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)) 83113481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return(2)); 83213481Sgiacomo.travaglini@arm.com }, "to be called at least once"); 83313481Sgiacomo.travaglini@arm.com} 83413481Sgiacomo.travaglini@arm.com 83513481Sgiacomo.travaglini@arm.com// Tests that the n-th action is taken for the n-th matching 83613481Sgiacomo.travaglini@arm.com// invocation. 83713481Sgiacomo.travaglini@arm.comTEST(ExpectCallTest, NthMatchTakesNthAction) { 83813481Sgiacomo.travaglini@arm.com MockB b; 83913481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 84013481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)) 84113481Sgiacomo.travaglini@arm.com .WillOnce(Return(2)) 84213481Sgiacomo.travaglini@arm.com .WillOnce(Return(3)); 84313481Sgiacomo.travaglini@arm.com 84413481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, b.DoB()); 84513481Sgiacomo.travaglini@arm.com EXPECT_EQ(2, b.DoB()); 84613481Sgiacomo.travaglini@arm.com EXPECT_EQ(3, b.DoB()); 84713481Sgiacomo.travaglini@arm.com} 84813481Sgiacomo.travaglini@arm.com 84913481Sgiacomo.travaglini@arm.com// Tests that the WillRepeatedly() action is taken when the WillOnce(...) 85013481Sgiacomo.travaglini@arm.com// list is exhausted. 85113481Sgiacomo.travaglini@arm.comTEST(ExpectCallTest, TakesRepeatedActionWhenWillListIsExhausted) { 85213481Sgiacomo.travaglini@arm.com MockB b; 85313481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 85413481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)) 85513481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return(2)); 85613481Sgiacomo.travaglini@arm.com 85713481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, b.DoB()); 85813481Sgiacomo.travaglini@arm.com EXPECT_EQ(2, b.DoB()); 85913481Sgiacomo.travaglini@arm.com EXPECT_EQ(2, b.DoB()); 86013481Sgiacomo.travaglini@arm.com} 86113481Sgiacomo.travaglini@arm.com 86213481Sgiacomo.travaglini@arm.com#if GTEST_HAS_STREAM_REDIRECTION 86313481Sgiacomo.travaglini@arm.com 86413481Sgiacomo.travaglini@arm.com// Tests that the default action is taken when the WillOnce(...) list is 86513481Sgiacomo.travaglini@arm.com// exhausted and there is no WillRepeatedly(). 86613481Sgiacomo.travaglini@arm.comTEST(ExpectCallTest, TakesDefaultActionWhenWillListIsExhausted) { 86713481Sgiacomo.travaglini@arm.com MockB b; 86813481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(_)) 86913481Sgiacomo.travaglini@arm.com .Times(1); 87013481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 87113481Sgiacomo.travaglini@arm.com .Times(AnyNumber()) 87213481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)) 87313481Sgiacomo.travaglini@arm.com .WillOnce(Return(2)); 87413481Sgiacomo.travaglini@arm.com 87513481Sgiacomo.travaglini@arm.com CaptureStdout(); 87613481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB(1)); // Shouldn't generate a warning as the 87713481Sgiacomo.travaglini@arm.com // expectation has no action clause at all. 87813481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, b.DoB()); 87913481Sgiacomo.travaglini@arm.com EXPECT_EQ(2, b.DoB()); 88013481Sgiacomo.travaglini@arm.com const std::string output1 = GetCapturedStdout(); 88113481Sgiacomo.travaglini@arm.com EXPECT_STREQ("", output1.c_str()); 88213481Sgiacomo.travaglini@arm.com 88313481Sgiacomo.travaglini@arm.com CaptureStdout(); 88413481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 88513481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 88613481Sgiacomo.travaglini@arm.com const std::string output2 = GetCapturedStdout(); 88713481Sgiacomo.travaglini@arm.com EXPECT_THAT(output2.c_str(), 88813481Sgiacomo.travaglini@arm.com HasSubstr("Actions ran out in EXPECT_CALL(b, DoB())...\n" 88913481Sgiacomo.travaglini@arm.com "Called 3 times, but only 2 WillOnce()s are specified" 89013481Sgiacomo.travaglini@arm.com " - returning default value.")); 89113481Sgiacomo.travaglini@arm.com EXPECT_THAT(output2.c_str(), 89213481Sgiacomo.travaglini@arm.com HasSubstr("Actions ran out in EXPECT_CALL(b, DoB())...\n" 89313481Sgiacomo.travaglini@arm.com "Called 4 times, but only 2 WillOnce()s are specified" 89413481Sgiacomo.travaglini@arm.com " - returning default value.")); 89513481Sgiacomo.travaglini@arm.com} 89613481Sgiacomo.travaglini@arm.com 89713481Sgiacomo.travaglini@arm.comTEST(FunctionMockerMessageTest, ReportsExpectCallLocationForExhausedActions) { 89813481Sgiacomo.travaglini@arm.com MockB b; 89913481Sgiacomo.travaglini@arm.com std::string expect_call_location = FormatFileLocation(__FILE__, __LINE__ + 1); 90013481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()).Times(AnyNumber()).WillOnce(Return(1)); 90113481Sgiacomo.travaglini@arm.com 90213481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, b.DoB()); 90313481Sgiacomo.travaglini@arm.com 90413481Sgiacomo.travaglini@arm.com CaptureStdout(); 90513481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 90613481Sgiacomo.travaglini@arm.com const std::string output = GetCapturedStdout(); 90713481Sgiacomo.travaglini@arm.com // The warning message should contain the call location. 90813481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(IsSubstring, expect_call_location, output); 90913481Sgiacomo.travaglini@arm.com} 91013481Sgiacomo.travaglini@arm.com 91113481Sgiacomo.travaglini@arm.comTEST(FunctionMockerMessageTest, 91213481Sgiacomo.travaglini@arm.com ReportsDefaultActionLocationOfUninterestingCallsForNaggyMock) { 91313481Sgiacomo.travaglini@arm.com std::string on_call_location; 91413481Sgiacomo.travaglini@arm.com CaptureStdout(); 91513481Sgiacomo.travaglini@arm.com { 91613481Sgiacomo.travaglini@arm.com NaggyMock<MockB> b; 91713481Sgiacomo.travaglini@arm.com on_call_location = FormatFileLocation(__FILE__, __LINE__ + 1); 91813481Sgiacomo.travaglini@arm.com ON_CALL(b, DoB(_)).WillByDefault(Return(0)); 91913481Sgiacomo.travaglini@arm.com b.DoB(0); 92013481Sgiacomo.travaglini@arm.com } 92113481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(IsSubstring, on_call_location, GetCapturedStdout()); 92213481Sgiacomo.travaglini@arm.com} 92313481Sgiacomo.travaglini@arm.com 92413481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_STREAM_REDIRECTION 92513481Sgiacomo.travaglini@arm.com 92613481Sgiacomo.travaglini@arm.com// Tests that an uninteresting call performs the default action. 92713481Sgiacomo.travaglini@arm.comTEST(UninterestingCallTest, DoesDefaultAction) { 92813481Sgiacomo.travaglini@arm.com // When there is an ON_CALL() statement, the action specified by it 92913481Sgiacomo.travaglini@arm.com // should be taken. 93013481Sgiacomo.travaglini@arm.com MockA a; 93113481Sgiacomo.travaglini@arm.com ON_CALL(a, Binary(_, _)) 93213481Sgiacomo.travaglini@arm.com .WillByDefault(Return(true)); 93313481Sgiacomo.travaglini@arm.com EXPECT_TRUE(a.Binary(1, 2)); 93413481Sgiacomo.travaglini@arm.com 93513481Sgiacomo.travaglini@arm.com // When there is no ON_CALL(), the default value for the return type 93613481Sgiacomo.travaglini@arm.com // should be returned. 93713481Sgiacomo.travaglini@arm.com MockB b; 93813481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 93913481Sgiacomo.travaglini@arm.com} 94013481Sgiacomo.travaglini@arm.com 94113481Sgiacomo.travaglini@arm.com// Tests that an unexpected call performs the default action. 94213481Sgiacomo.travaglini@arm.comTEST(UnexpectedCallTest, DoesDefaultAction) { 94313481Sgiacomo.travaglini@arm.com // When there is an ON_CALL() statement, the action specified by it 94413481Sgiacomo.travaglini@arm.com // should be taken. 94513481Sgiacomo.travaglini@arm.com MockA a; 94613481Sgiacomo.travaglini@arm.com ON_CALL(a, Binary(_, _)) 94713481Sgiacomo.travaglini@arm.com .WillByDefault(Return(true)); 94813481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, Binary(0, 0)); 94913481Sgiacomo.travaglini@arm.com a.Binary(0, 0); 95013481Sgiacomo.travaglini@arm.com bool result = false; 95113481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(result = a.Binary(1, 2), 95213481Sgiacomo.travaglini@arm.com "Unexpected mock function call"); 95313481Sgiacomo.travaglini@arm.com EXPECT_TRUE(result); 95413481Sgiacomo.travaglini@arm.com 95513481Sgiacomo.travaglini@arm.com // When there is no ON_CALL(), the default value for the return type 95613481Sgiacomo.travaglini@arm.com // should be returned. 95713481Sgiacomo.travaglini@arm.com MockB b; 95813481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(0)) 95913481Sgiacomo.travaglini@arm.com .Times(0); 96013481Sgiacomo.travaglini@arm.com int n = -1; 96113481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(n = b.DoB(1), 96213481Sgiacomo.travaglini@arm.com "Unexpected mock function call"); 96313481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, n); 96413481Sgiacomo.travaglini@arm.com} 96513481Sgiacomo.travaglini@arm.com 96613481Sgiacomo.travaglini@arm.com// Tests that when an unexpected void function generates the right 96713481Sgiacomo.travaglini@arm.com// failure message. 96813481Sgiacomo.travaglini@arm.comTEST(UnexpectedCallTest, GeneratesFailureForVoidFunction) { 96913481Sgiacomo.travaglini@arm.com // First, tests the message when there is only one EXPECT_CALL(). 97013481Sgiacomo.travaglini@arm.com MockA a1; 97113481Sgiacomo.travaglini@arm.com EXPECT_CALL(a1, DoA(1)); 97213481Sgiacomo.travaglini@arm.com a1.DoA(1); 97313481Sgiacomo.travaglini@arm.com // Ideally we should match the failure message against a regex, but 97413481Sgiacomo.travaglini@arm.com // EXPECT_NONFATAL_FAILURE doesn't support that, so we test for 97513481Sgiacomo.travaglini@arm.com // multiple sub-strings instead. 97613481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE( 97713481Sgiacomo.travaglini@arm.com a1.DoA(9), 97813481Sgiacomo.travaglini@arm.com "Unexpected mock function call - returning directly.\n" 97913481Sgiacomo.travaglini@arm.com " Function call: DoA(9)\n" 98013481Sgiacomo.travaglini@arm.com "Google Mock tried the following 1 expectation, but it didn't match:"); 98113481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE( 98213481Sgiacomo.travaglini@arm.com a1.DoA(9), 98313481Sgiacomo.travaglini@arm.com " Expected arg #0: is equal to 1\n" 98413481Sgiacomo.travaglini@arm.com " Actual: 9\n" 98513481Sgiacomo.travaglini@arm.com " Expected: to be called once\n" 98613481Sgiacomo.travaglini@arm.com " Actual: called once - saturated and active"); 98713481Sgiacomo.travaglini@arm.com 98813481Sgiacomo.travaglini@arm.com // Next, tests the message when there are more than one EXPECT_CALL(). 98913481Sgiacomo.travaglini@arm.com MockA a2; 99013481Sgiacomo.travaglini@arm.com EXPECT_CALL(a2, DoA(1)); 99113481Sgiacomo.travaglini@arm.com EXPECT_CALL(a2, DoA(3)); 99213481Sgiacomo.travaglini@arm.com a2.DoA(1); 99313481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE( 99413481Sgiacomo.travaglini@arm.com a2.DoA(2), 99513481Sgiacomo.travaglini@arm.com "Unexpected mock function call - returning directly.\n" 99613481Sgiacomo.travaglini@arm.com " Function call: DoA(2)\n" 99713481Sgiacomo.travaglini@arm.com "Google Mock tried the following 2 expectations, but none matched:"); 99813481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE( 99913481Sgiacomo.travaglini@arm.com a2.DoA(2), 100013481Sgiacomo.travaglini@arm.com "tried expectation #0: EXPECT_CALL(a2, DoA(1))...\n" 100113481Sgiacomo.travaglini@arm.com " Expected arg #0: is equal to 1\n" 100213481Sgiacomo.travaglini@arm.com " Actual: 2\n" 100313481Sgiacomo.travaglini@arm.com " Expected: to be called once\n" 100413481Sgiacomo.travaglini@arm.com " Actual: called once - saturated and active"); 100513481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE( 100613481Sgiacomo.travaglini@arm.com a2.DoA(2), 100713481Sgiacomo.travaglini@arm.com "tried expectation #1: EXPECT_CALL(a2, DoA(3))...\n" 100813481Sgiacomo.travaglini@arm.com " Expected arg #0: is equal to 3\n" 100913481Sgiacomo.travaglini@arm.com " Actual: 2\n" 101013481Sgiacomo.travaglini@arm.com " Expected: to be called once\n" 101113481Sgiacomo.travaglini@arm.com " Actual: never called - unsatisfied and active"); 101213481Sgiacomo.travaglini@arm.com a2.DoA(3); 101313481Sgiacomo.travaglini@arm.com} 101413481Sgiacomo.travaglini@arm.com 101513481Sgiacomo.travaglini@arm.com// Tests that an unexpected non-void function generates the right 101613481Sgiacomo.travaglini@arm.com// failure message. 101713481Sgiacomo.travaglini@arm.comTEST(UnexpectedCallTest, GeneartesFailureForNonVoidFunction) { 101813481Sgiacomo.travaglini@arm.com MockB b1; 101913481Sgiacomo.travaglini@arm.com EXPECT_CALL(b1, DoB(1)); 102013481Sgiacomo.travaglini@arm.com b1.DoB(1); 102113481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE( 102213481Sgiacomo.travaglini@arm.com b1.DoB(2), 102313481Sgiacomo.travaglini@arm.com "Unexpected mock function call - returning default value.\n" 102413481Sgiacomo.travaglini@arm.com " Function call: DoB(2)\n" 102513481Sgiacomo.travaglini@arm.com " Returns: 0\n" 102613481Sgiacomo.travaglini@arm.com "Google Mock tried the following 1 expectation, but it didn't match:"); 102713481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE( 102813481Sgiacomo.travaglini@arm.com b1.DoB(2), 102913481Sgiacomo.travaglini@arm.com " Expected arg #0: is equal to 1\n" 103013481Sgiacomo.travaglini@arm.com " Actual: 2\n" 103113481Sgiacomo.travaglini@arm.com " Expected: to be called once\n" 103213481Sgiacomo.travaglini@arm.com " Actual: called once - saturated and active"); 103313481Sgiacomo.travaglini@arm.com} 103413481Sgiacomo.travaglini@arm.com 103513481Sgiacomo.travaglini@arm.com// Tests that Google Mock explains that an retired expectation doesn't 103613481Sgiacomo.travaglini@arm.com// match the call. 103713481Sgiacomo.travaglini@arm.comTEST(UnexpectedCallTest, RetiredExpectation) { 103813481Sgiacomo.travaglini@arm.com MockB b; 103913481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(1)) 104013481Sgiacomo.travaglini@arm.com .RetiresOnSaturation(); 104113481Sgiacomo.travaglini@arm.com 104213481Sgiacomo.travaglini@arm.com b.DoB(1); 104313481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE( 104413481Sgiacomo.travaglini@arm.com b.DoB(1), 104513481Sgiacomo.travaglini@arm.com " Expected: the expectation is active\n" 104613481Sgiacomo.travaglini@arm.com " Actual: it is retired"); 104713481Sgiacomo.travaglini@arm.com} 104813481Sgiacomo.travaglini@arm.com 104913481Sgiacomo.travaglini@arm.com// Tests that Google Mock explains that an expectation that doesn't 105013481Sgiacomo.travaglini@arm.com// match the arguments doesn't match the call. 105113481Sgiacomo.travaglini@arm.comTEST(UnexpectedCallTest, UnmatchedArguments) { 105213481Sgiacomo.travaglini@arm.com MockB b; 105313481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(1)); 105413481Sgiacomo.travaglini@arm.com 105513481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE( 105613481Sgiacomo.travaglini@arm.com b.DoB(2), 105713481Sgiacomo.travaglini@arm.com " Expected arg #0: is equal to 1\n" 105813481Sgiacomo.travaglini@arm.com " Actual: 2\n"); 105913481Sgiacomo.travaglini@arm.com b.DoB(1); 106013481Sgiacomo.travaglini@arm.com} 106113481Sgiacomo.travaglini@arm.com 106213481Sgiacomo.travaglini@arm.com// Tests that Google Mock explains that an expectation with 106313481Sgiacomo.travaglini@arm.com// unsatisfied pre-requisites doesn't match the call. 106413481Sgiacomo.travaglini@arm.comTEST(UnexpectedCallTest, UnsatisifiedPrerequisites) { 106513481Sgiacomo.travaglini@arm.com Sequence s1, s2; 106613481Sgiacomo.travaglini@arm.com MockB b; 106713481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(1)) 106813481Sgiacomo.travaglini@arm.com .InSequence(s1); 106913481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(2)) 107013481Sgiacomo.travaglini@arm.com .Times(AnyNumber()) 107113481Sgiacomo.travaglini@arm.com .InSequence(s1); 107213481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(3)) 107313481Sgiacomo.travaglini@arm.com .InSequence(s2); 107413481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(4)) 107513481Sgiacomo.travaglini@arm.com .InSequence(s1, s2); 107613481Sgiacomo.travaglini@arm.com 107713481Sgiacomo.travaglini@arm.com ::testing::TestPartResultArray failures; 107813481Sgiacomo.travaglini@arm.com { 107913481Sgiacomo.travaglini@arm.com ::testing::ScopedFakeTestPartResultReporter reporter(&failures); 108013481Sgiacomo.travaglini@arm.com b.DoB(4); 108113481Sgiacomo.travaglini@arm.com // Now 'failures' contains the Google Test failures generated by 108213481Sgiacomo.travaglini@arm.com // the above statement. 108313481Sgiacomo.travaglini@arm.com } 108413481Sgiacomo.travaglini@arm.com 108513481Sgiacomo.travaglini@arm.com // There should be one non-fatal failure. 108613481Sgiacomo.travaglini@arm.com ASSERT_EQ(1, failures.size()); 108713481Sgiacomo.travaglini@arm.com const ::testing::TestPartResult& r = failures.GetTestPartResult(0); 108813481Sgiacomo.travaglini@arm.com EXPECT_EQ(::testing::TestPartResult::kNonFatalFailure, r.type()); 108913481Sgiacomo.travaglini@arm.com 109013481Sgiacomo.travaglini@arm.com // Verifies that the failure message contains the two unsatisfied 109113481Sgiacomo.travaglini@arm.com // pre-requisites but not the satisfied one. 109213481Sgiacomo.travaglini@arm.com#if GTEST_USES_PCRE 109313481Sgiacomo.travaglini@arm.com EXPECT_THAT(r.message(), ContainsRegex( 109413481Sgiacomo.travaglini@arm.com // PCRE has trouble using (.|\n) to match any character, but 109513481Sgiacomo.travaglini@arm.com // supports the (?s) prefix for using . to match any character. 109613481Sgiacomo.travaglini@arm.com "(?s)the following immediate pre-requisites are not satisfied:\n" 109713481Sgiacomo.travaglini@arm.com ".*: pre-requisite #0\n" 109813481Sgiacomo.travaglini@arm.com ".*: pre-requisite #1")); 109913481Sgiacomo.travaglini@arm.com#elif GTEST_USES_POSIX_RE 110013481Sgiacomo.travaglini@arm.com EXPECT_THAT(r.message(), ContainsRegex( 110113481Sgiacomo.travaglini@arm.com // POSIX RE doesn't understand the (?s) prefix, but has no trouble 110213481Sgiacomo.travaglini@arm.com // with (.|\n). 110313481Sgiacomo.travaglini@arm.com "the following immediate pre-requisites are not satisfied:\n" 110413481Sgiacomo.travaglini@arm.com "(.|\n)*: pre-requisite #0\n" 110513481Sgiacomo.travaglini@arm.com "(.|\n)*: pre-requisite #1")); 110613481Sgiacomo.travaglini@arm.com#else 110713481Sgiacomo.travaglini@arm.com // We can only use Google Test's own simple regex. 110813481Sgiacomo.travaglini@arm.com EXPECT_THAT(r.message(), ContainsRegex( 110913481Sgiacomo.travaglini@arm.com "the following immediate pre-requisites are not satisfied:")); 111013481Sgiacomo.travaglini@arm.com EXPECT_THAT(r.message(), ContainsRegex(": pre-requisite #0")); 111113481Sgiacomo.travaglini@arm.com EXPECT_THAT(r.message(), ContainsRegex(": pre-requisite #1")); 111213481Sgiacomo.travaglini@arm.com#endif // GTEST_USES_PCRE 111313481Sgiacomo.travaglini@arm.com 111413481Sgiacomo.travaglini@arm.com b.DoB(1); 111513481Sgiacomo.travaglini@arm.com b.DoB(3); 111613481Sgiacomo.travaglini@arm.com b.DoB(4); 111713481Sgiacomo.travaglini@arm.com} 111813481Sgiacomo.travaglini@arm.com 111913481Sgiacomo.travaglini@arm.comTEST(UndefinedReturnValueTest, 112013481Sgiacomo.travaglini@arm.com ReturnValueIsMandatoryWhenNotDefaultConstructible) { 112113481Sgiacomo.travaglini@arm.com MockA a; 112213481Sgiacomo.travaglini@arm.com // TODO(wan@google.com): We should really verify the output message, 112313481Sgiacomo.travaglini@arm.com // but we cannot yet due to that EXPECT_DEATH only captures stderr 112413481Sgiacomo.travaglini@arm.com // while Google Mock logs to stdout. 112513481Sgiacomo.travaglini@arm.com#if GTEST_HAS_EXCEPTIONS 112613481Sgiacomo.travaglini@arm.com EXPECT_ANY_THROW(a.ReturnNonDefaultConstructible()); 112713481Sgiacomo.travaglini@arm.com#else 112813481Sgiacomo.travaglini@arm.com EXPECT_DEATH_IF_SUPPORTED(a.ReturnNonDefaultConstructible(), ""); 112913481Sgiacomo.travaglini@arm.com#endif 113013481Sgiacomo.travaglini@arm.com} 113113481Sgiacomo.travaglini@arm.com 113213481Sgiacomo.travaglini@arm.com// Tests that an excessive call (one whose arguments match the 113313481Sgiacomo.travaglini@arm.com// matchers but is called too many times) performs the default action. 113413481Sgiacomo.travaglini@arm.comTEST(ExcessiveCallTest, DoesDefaultAction) { 113513481Sgiacomo.travaglini@arm.com // When there is an ON_CALL() statement, the action specified by it 113613481Sgiacomo.travaglini@arm.com // should be taken. 113713481Sgiacomo.travaglini@arm.com MockA a; 113813481Sgiacomo.travaglini@arm.com ON_CALL(a, Binary(_, _)) 113913481Sgiacomo.travaglini@arm.com .WillByDefault(Return(true)); 114013481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, Binary(0, 0)); 114113481Sgiacomo.travaglini@arm.com a.Binary(0, 0); 114213481Sgiacomo.travaglini@arm.com bool result = false; 114313481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(result = a.Binary(0, 0), 114413481Sgiacomo.travaglini@arm.com "Mock function called more times than expected"); 114513481Sgiacomo.travaglini@arm.com EXPECT_TRUE(result); 114613481Sgiacomo.travaglini@arm.com 114713481Sgiacomo.travaglini@arm.com // When there is no ON_CALL(), the default value for the return type 114813481Sgiacomo.travaglini@arm.com // should be returned. 114913481Sgiacomo.travaglini@arm.com MockB b; 115013481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(0)) 115113481Sgiacomo.travaglini@arm.com .Times(0); 115213481Sgiacomo.travaglini@arm.com int n = -1; 115313481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(n = b.DoB(0), 115413481Sgiacomo.travaglini@arm.com "Mock function called more times than expected"); 115513481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, n); 115613481Sgiacomo.travaglini@arm.com} 115713481Sgiacomo.travaglini@arm.com 115813481Sgiacomo.travaglini@arm.com// Tests that when a void function is called too many times, 115913481Sgiacomo.travaglini@arm.com// the failure message contains the argument values. 116013481Sgiacomo.travaglini@arm.comTEST(ExcessiveCallTest, GeneratesFailureForVoidFunction) { 116113481Sgiacomo.travaglini@arm.com MockA a; 116213481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(_)) 116313481Sgiacomo.travaglini@arm.com .Times(0); 116413481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE( 116513481Sgiacomo.travaglini@arm.com a.DoA(9), 116613481Sgiacomo.travaglini@arm.com "Mock function called more times than expected - returning directly.\n" 116713481Sgiacomo.travaglini@arm.com " Function call: DoA(9)\n" 116813481Sgiacomo.travaglini@arm.com " Expected: to be never called\n" 116913481Sgiacomo.travaglini@arm.com " Actual: called once - over-saturated and active"); 117013481Sgiacomo.travaglini@arm.com} 117113481Sgiacomo.travaglini@arm.com 117213481Sgiacomo.travaglini@arm.com// Tests that when a non-void function is called too many times, the 117313481Sgiacomo.travaglini@arm.com// failure message contains the argument values and the return value. 117413481Sgiacomo.travaglini@arm.comTEST(ExcessiveCallTest, GeneratesFailureForNonVoidFunction) { 117513481Sgiacomo.travaglini@arm.com MockB b; 117613481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(_)); 117713481Sgiacomo.travaglini@arm.com b.DoB(1); 117813481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE( 117913481Sgiacomo.travaglini@arm.com b.DoB(2), 118013481Sgiacomo.travaglini@arm.com "Mock function called more times than expected - " 118113481Sgiacomo.travaglini@arm.com "returning default value.\n" 118213481Sgiacomo.travaglini@arm.com " Function call: DoB(2)\n" 118313481Sgiacomo.travaglini@arm.com " Returns: 0\n" 118413481Sgiacomo.travaglini@arm.com " Expected: to be called once\n" 118513481Sgiacomo.travaglini@arm.com " Actual: called twice - over-saturated and active"); 118613481Sgiacomo.travaglini@arm.com} 118713481Sgiacomo.travaglini@arm.com 118813481Sgiacomo.travaglini@arm.com// Tests using sequences. 118913481Sgiacomo.travaglini@arm.com 119013481Sgiacomo.travaglini@arm.comTEST(InSequenceTest, AllExpectationInScopeAreInSequence) { 119113481Sgiacomo.travaglini@arm.com MockA a; 119213481Sgiacomo.travaglini@arm.com { 119313481Sgiacomo.travaglini@arm.com InSequence dummy; 119413481Sgiacomo.travaglini@arm.com 119513481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)); 119613481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(2)); 119713481Sgiacomo.travaglini@arm.com } 119813481Sgiacomo.travaglini@arm.com 119913481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 120013481Sgiacomo.travaglini@arm.com a.DoA(2); 120113481Sgiacomo.travaglini@arm.com }, "Unexpected mock function call"); 120213481Sgiacomo.travaglini@arm.com 120313481Sgiacomo.travaglini@arm.com a.DoA(1); 120413481Sgiacomo.travaglini@arm.com a.DoA(2); 120513481Sgiacomo.travaglini@arm.com} 120613481Sgiacomo.travaglini@arm.com 120713481Sgiacomo.travaglini@arm.comTEST(InSequenceTest, NestedInSequence) { 120813481Sgiacomo.travaglini@arm.com MockA a; 120913481Sgiacomo.travaglini@arm.com { 121013481Sgiacomo.travaglini@arm.com InSequence dummy; 121113481Sgiacomo.travaglini@arm.com 121213481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)); 121313481Sgiacomo.travaglini@arm.com { 121413481Sgiacomo.travaglini@arm.com InSequence dummy2; 121513481Sgiacomo.travaglini@arm.com 121613481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(2)); 121713481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(3)); 121813481Sgiacomo.travaglini@arm.com } 121913481Sgiacomo.travaglini@arm.com } 122013481Sgiacomo.travaglini@arm.com 122113481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 122213481Sgiacomo.travaglini@arm.com a.DoA(1); 122313481Sgiacomo.travaglini@arm.com a.DoA(3); 122413481Sgiacomo.travaglini@arm.com }, "Unexpected mock function call"); 122513481Sgiacomo.travaglini@arm.com 122613481Sgiacomo.travaglini@arm.com a.DoA(2); 122713481Sgiacomo.travaglini@arm.com a.DoA(3); 122813481Sgiacomo.travaglini@arm.com} 122913481Sgiacomo.travaglini@arm.com 123013481Sgiacomo.travaglini@arm.comTEST(InSequenceTest, ExpectationsOutOfScopeAreNotAffected) { 123113481Sgiacomo.travaglini@arm.com MockA a; 123213481Sgiacomo.travaglini@arm.com { 123313481Sgiacomo.travaglini@arm.com InSequence dummy; 123413481Sgiacomo.travaglini@arm.com 123513481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)); 123613481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(2)); 123713481Sgiacomo.travaglini@arm.com } 123813481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(3)); 123913481Sgiacomo.travaglini@arm.com 124013481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ // NOLINT 124113481Sgiacomo.travaglini@arm.com a.DoA(2); 124213481Sgiacomo.travaglini@arm.com }, "Unexpected mock function call"); 124313481Sgiacomo.travaglini@arm.com 124413481Sgiacomo.travaglini@arm.com a.DoA(3); 124513481Sgiacomo.travaglini@arm.com a.DoA(1); 124613481Sgiacomo.travaglini@arm.com a.DoA(2); 124713481Sgiacomo.travaglini@arm.com} 124813481Sgiacomo.travaglini@arm.com 124913481Sgiacomo.travaglini@arm.com// Tests that any order is allowed when no sequence is used. 125013481Sgiacomo.travaglini@arm.comTEST(SequenceTest, AnyOrderIsOkByDefault) { 125113481Sgiacomo.travaglini@arm.com { 125213481Sgiacomo.travaglini@arm.com MockA a; 125313481Sgiacomo.travaglini@arm.com MockB b; 125413481Sgiacomo.travaglini@arm.com 125513481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)); 125613481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 125713481Sgiacomo.travaglini@arm.com .Times(AnyNumber()); 125813481Sgiacomo.travaglini@arm.com 125913481Sgiacomo.travaglini@arm.com a.DoA(1); 126013481Sgiacomo.travaglini@arm.com b.DoB(); 126113481Sgiacomo.travaglini@arm.com } 126213481Sgiacomo.travaglini@arm.com 126313481Sgiacomo.travaglini@arm.com { // NOLINT 126413481Sgiacomo.travaglini@arm.com MockA a; 126513481Sgiacomo.travaglini@arm.com MockB b; 126613481Sgiacomo.travaglini@arm.com 126713481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)); 126813481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 126913481Sgiacomo.travaglini@arm.com .Times(AnyNumber()); 127013481Sgiacomo.travaglini@arm.com 127113481Sgiacomo.travaglini@arm.com b.DoB(); 127213481Sgiacomo.travaglini@arm.com a.DoA(1); 127313481Sgiacomo.travaglini@arm.com } 127413481Sgiacomo.travaglini@arm.com} 127513481Sgiacomo.travaglini@arm.com 127613481Sgiacomo.travaglini@arm.com// Tests that the calls must be in strict order when a complete order 127713481Sgiacomo.travaglini@arm.com// is specified. 127813481Sgiacomo.travaglini@arm.comTEST(SequenceTest, CallsMustBeInStrictOrderWhenSaidSo1) { 127913481Sgiacomo.travaglini@arm.com MockA a; 128013481Sgiacomo.travaglini@arm.com ON_CALL(a, ReturnResult(_)) 128113481Sgiacomo.travaglini@arm.com .WillByDefault(Return(Result())); 128213481Sgiacomo.travaglini@arm.com 128313481Sgiacomo.travaglini@arm.com Sequence s; 128413481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, ReturnResult(1)) 128513481Sgiacomo.travaglini@arm.com .InSequence(s); 128613481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, ReturnResult(2)) 128713481Sgiacomo.travaglini@arm.com .InSequence(s); 128813481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, ReturnResult(3)) 128913481Sgiacomo.travaglini@arm.com .InSequence(s); 129013481Sgiacomo.travaglini@arm.com 129113481Sgiacomo.travaglini@arm.com a.ReturnResult(1); 129213481Sgiacomo.travaglini@arm.com 129313481Sgiacomo.travaglini@arm.com // May only be called after a.ReturnResult(2). 129413481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(a.ReturnResult(3), "Unexpected mock function call"); 129513481Sgiacomo.travaglini@arm.com 129613481Sgiacomo.travaglini@arm.com a.ReturnResult(2); 129713481Sgiacomo.travaglini@arm.com a.ReturnResult(3); 129813481Sgiacomo.travaglini@arm.com} 129913481Sgiacomo.travaglini@arm.com 130013481Sgiacomo.travaglini@arm.com// Tests that the calls must be in strict order when a complete order 130113481Sgiacomo.travaglini@arm.com// is specified. 130213481Sgiacomo.travaglini@arm.comTEST(SequenceTest, CallsMustBeInStrictOrderWhenSaidSo2) { 130313481Sgiacomo.travaglini@arm.com MockA a; 130413481Sgiacomo.travaglini@arm.com ON_CALL(a, ReturnResult(_)) 130513481Sgiacomo.travaglini@arm.com .WillByDefault(Return(Result())); 130613481Sgiacomo.travaglini@arm.com 130713481Sgiacomo.travaglini@arm.com Sequence s; 130813481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, ReturnResult(1)) 130913481Sgiacomo.travaglini@arm.com .InSequence(s); 131013481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, ReturnResult(2)) 131113481Sgiacomo.travaglini@arm.com .InSequence(s); 131213481Sgiacomo.travaglini@arm.com 131313481Sgiacomo.travaglini@arm.com // May only be called after a.ReturnResult(1). 131413481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(a.ReturnResult(2), "Unexpected mock function call"); 131513481Sgiacomo.travaglini@arm.com 131613481Sgiacomo.travaglini@arm.com a.ReturnResult(1); 131713481Sgiacomo.travaglini@arm.com a.ReturnResult(2); 131813481Sgiacomo.travaglini@arm.com} 131913481Sgiacomo.travaglini@arm.com 132013481Sgiacomo.travaglini@arm.com// Tests specifying a DAG using multiple sequences. 132113481Sgiacomo.travaglini@arm.comclass PartialOrderTest : public testing::Test { 132213481Sgiacomo.travaglini@arm.com protected: 132313481Sgiacomo.travaglini@arm.com PartialOrderTest() { 132413481Sgiacomo.travaglini@arm.com ON_CALL(a_, ReturnResult(_)) 132513481Sgiacomo.travaglini@arm.com .WillByDefault(Return(Result())); 132613481Sgiacomo.travaglini@arm.com 132713481Sgiacomo.travaglini@arm.com // Specifies this partial ordering: 132813481Sgiacomo.travaglini@arm.com // 132913481Sgiacomo.travaglini@arm.com // a.ReturnResult(1) ==> 133013481Sgiacomo.travaglini@arm.com // a.ReturnResult(2) * n ==> a.ReturnResult(3) 133113481Sgiacomo.travaglini@arm.com // b.DoB() * 2 ==> 133213481Sgiacomo.travaglini@arm.com Sequence x, y; 133313481Sgiacomo.travaglini@arm.com EXPECT_CALL(a_, ReturnResult(1)) 133413481Sgiacomo.travaglini@arm.com .InSequence(x); 133513481Sgiacomo.travaglini@arm.com EXPECT_CALL(b_, DoB()) 133613481Sgiacomo.travaglini@arm.com .Times(2) 133713481Sgiacomo.travaglini@arm.com .InSequence(y); 133813481Sgiacomo.travaglini@arm.com EXPECT_CALL(a_, ReturnResult(2)) 133913481Sgiacomo.travaglini@arm.com .Times(AnyNumber()) 134013481Sgiacomo.travaglini@arm.com .InSequence(x, y); 134113481Sgiacomo.travaglini@arm.com EXPECT_CALL(a_, ReturnResult(3)) 134213481Sgiacomo.travaglini@arm.com .InSequence(x); 134313481Sgiacomo.travaglini@arm.com } 134413481Sgiacomo.travaglini@arm.com 134513481Sgiacomo.travaglini@arm.com MockA a_; 134613481Sgiacomo.travaglini@arm.com MockB b_; 134713481Sgiacomo.travaglini@arm.com}; 134813481Sgiacomo.travaglini@arm.com 134913481Sgiacomo.travaglini@arm.comTEST_F(PartialOrderTest, CallsMustConformToSpecifiedDag1) { 135013481Sgiacomo.travaglini@arm.com a_.ReturnResult(1); 135113481Sgiacomo.travaglini@arm.com b_.DoB(); 135213481Sgiacomo.travaglini@arm.com 135313481Sgiacomo.travaglini@arm.com // May only be called after the second DoB(). 135413481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(a_.ReturnResult(2), "Unexpected mock function call"); 135513481Sgiacomo.travaglini@arm.com 135613481Sgiacomo.travaglini@arm.com b_.DoB(); 135713481Sgiacomo.travaglini@arm.com a_.ReturnResult(3); 135813481Sgiacomo.travaglini@arm.com} 135913481Sgiacomo.travaglini@arm.com 136013481Sgiacomo.travaglini@arm.comTEST_F(PartialOrderTest, CallsMustConformToSpecifiedDag2) { 136113481Sgiacomo.travaglini@arm.com // May only be called after ReturnResult(1). 136213481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(a_.ReturnResult(2), "Unexpected mock function call"); 136313481Sgiacomo.travaglini@arm.com 136413481Sgiacomo.travaglini@arm.com a_.ReturnResult(1); 136513481Sgiacomo.travaglini@arm.com b_.DoB(); 136613481Sgiacomo.travaglini@arm.com b_.DoB(); 136713481Sgiacomo.travaglini@arm.com a_.ReturnResult(3); 136813481Sgiacomo.travaglini@arm.com} 136913481Sgiacomo.travaglini@arm.com 137013481Sgiacomo.travaglini@arm.comTEST_F(PartialOrderTest, CallsMustConformToSpecifiedDag3) { 137113481Sgiacomo.travaglini@arm.com // May only be called last. 137213481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(a_.ReturnResult(3), "Unexpected mock function call"); 137313481Sgiacomo.travaglini@arm.com 137413481Sgiacomo.travaglini@arm.com a_.ReturnResult(1); 137513481Sgiacomo.travaglini@arm.com b_.DoB(); 137613481Sgiacomo.travaglini@arm.com b_.DoB(); 137713481Sgiacomo.travaglini@arm.com a_.ReturnResult(3); 137813481Sgiacomo.travaglini@arm.com} 137913481Sgiacomo.travaglini@arm.com 138013481Sgiacomo.travaglini@arm.comTEST_F(PartialOrderTest, CallsMustConformToSpecifiedDag4) { 138113481Sgiacomo.travaglini@arm.com a_.ReturnResult(1); 138213481Sgiacomo.travaglini@arm.com b_.DoB(); 138313481Sgiacomo.travaglini@arm.com b_.DoB(); 138413481Sgiacomo.travaglini@arm.com a_.ReturnResult(3); 138513481Sgiacomo.travaglini@arm.com 138613481Sgiacomo.travaglini@arm.com // May only be called before ReturnResult(3). 138713481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(a_.ReturnResult(2), "Unexpected mock function call"); 138813481Sgiacomo.travaglini@arm.com} 138913481Sgiacomo.travaglini@arm.com 139013481Sgiacomo.travaglini@arm.comTEST(SequenceTest, Retirement) { 139113481Sgiacomo.travaglini@arm.com MockA a; 139213481Sgiacomo.travaglini@arm.com Sequence s; 139313481Sgiacomo.travaglini@arm.com 139413481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)) 139513481Sgiacomo.travaglini@arm.com .InSequence(s); 139613481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(_)) 139713481Sgiacomo.travaglini@arm.com .InSequence(s) 139813481Sgiacomo.travaglini@arm.com .RetiresOnSaturation(); 139913481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)) 140013481Sgiacomo.travaglini@arm.com .InSequence(s); 140113481Sgiacomo.travaglini@arm.com 140213481Sgiacomo.travaglini@arm.com a.DoA(1); 140313481Sgiacomo.travaglini@arm.com a.DoA(2); 140413481Sgiacomo.travaglini@arm.com a.DoA(1); 140513481Sgiacomo.travaglini@arm.com} 140613481Sgiacomo.travaglini@arm.com 140713481Sgiacomo.travaglini@arm.com// Tests Expectation. 140813481Sgiacomo.travaglini@arm.com 140913481Sgiacomo.travaglini@arm.comTEST(ExpectationTest, ConstrutorsWork) { 141013481Sgiacomo.travaglini@arm.com MockA a; 141113481Sgiacomo.travaglini@arm.com Expectation e1; // Default ctor. 141213481Sgiacomo.travaglini@arm.com 141313481Sgiacomo.travaglini@arm.com // Ctor from various forms of EXPECT_CALL. 141413481Sgiacomo.travaglini@arm.com Expectation e2 = EXPECT_CALL(a, DoA(2)); 141513481Sgiacomo.travaglini@arm.com Expectation e3 = EXPECT_CALL(a, DoA(3)).With(_); 141613481Sgiacomo.travaglini@arm.com { 141713481Sgiacomo.travaglini@arm.com Sequence s; 141813481Sgiacomo.travaglini@arm.com Expectation e4 = EXPECT_CALL(a, DoA(4)).Times(1); 141913481Sgiacomo.travaglini@arm.com Expectation e5 = EXPECT_CALL(a, DoA(5)).InSequence(s); 142013481Sgiacomo.travaglini@arm.com } 142113481Sgiacomo.travaglini@arm.com Expectation e6 = EXPECT_CALL(a, DoA(6)).After(e2); 142213481Sgiacomo.travaglini@arm.com Expectation e7 = EXPECT_CALL(a, DoA(7)).WillOnce(Return()); 142313481Sgiacomo.travaglini@arm.com Expectation e8 = EXPECT_CALL(a, DoA(8)).WillRepeatedly(Return()); 142413481Sgiacomo.travaglini@arm.com Expectation e9 = EXPECT_CALL(a, DoA(9)).RetiresOnSaturation(); 142513481Sgiacomo.travaglini@arm.com 142613481Sgiacomo.travaglini@arm.com Expectation e10 = e2; // Copy ctor. 142713481Sgiacomo.travaglini@arm.com 142813481Sgiacomo.travaglini@arm.com EXPECT_THAT(e1, Ne(e2)); 142913481Sgiacomo.travaglini@arm.com EXPECT_THAT(e2, Eq(e10)); 143013481Sgiacomo.travaglini@arm.com 143113481Sgiacomo.travaglini@arm.com a.DoA(2); 143213481Sgiacomo.travaglini@arm.com a.DoA(3); 143313481Sgiacomo.travaglini@arm.com a.DoA(4); 143413481Sgiacomo.travaglini@arm.com a.DoA(5); 143513481Sgiacomo.travaglini@arm.com a.DoA(6); 143613481Sgiacomo.travaglini@arm.com a.DoA(7); 143713481Sgiacomo.travaglini@arm.com a.DoA(8); 143813481Sgiacomo.travaglini@arm.com a.DoA(9); 143913481Sgiacomo.travaglini@arm.com} 144013481Sgiacomo.travaglini@arm.com 144113481Sgiacomo.travaglini@arm.comTEST(ExpectationTest, AssignmentWorks) { 144213481Sgiacomo.travaglini@arm.com MockA a; 144313481Sgiacomo.travaglini@arm.com Expectation e1; 144413481Sgiacomo.travaglini@arm.com Expectation e2 = EXPECT_CALL(a, DoA(1)); 144513481Sgiacomo.travaglini@arm.com 144613481Sgiacomo.travaglini@arm.com EXPECT_THAT(e1, Ne(e2)); 144713481Sgiacomo.travaglini@arm.com 144813481Sgiacomo.travaglini@arm.com e1 = e2; 144913481Sgiacomo.travaglini@arm.com EXPECT_THAT(e1, Eq(e2)); 145013481Sgiacomo.travaglini@arm.com 145113481Sgiacomo.travaglini@arm.com a.DoA(1); 145213481Sgiacomo.travaglini@arm.com} 145313481Sgiacomo.travaglini@arm.com 145413481Sgiacomo.travaglini@arm.com// Tests ExpectationSet. 145513481Sgiacomo.travaglini@arm.com 145613481Sgiacomo.travaglini@arm.comTEST(ExpectationSetTest, MemberTypesAreCorrect) { 145713481Sgiacomo.travaglini@arm.com ::testing::StaticAssertTypeEq<Expectation, ExpectationSet::value_type>(); 145813481Sgiacomo.travaglini@arm.com} 145913481Sgiacomo.travaglini@arm.com 146013481Sgiacomo.travaglini@arm.comTEST(ExpectationSetTest, ConstructorsWork) { 146113481Sgiacomo.travaglini@arm.com MockA a; 146213481Sgiacomo.travaglini@arm.com 146313481Sgiacomo.travaglini@arm.com Expectation e1; 146413481Sgiacomo.travaglini@arm.com const Expectation e2; 146513481Sgiacomo.travaglini@arm.com ExpectationSet es1; // Default ctor. 146613481Sgiacomo.travaglini@arm.com ExpectationSet es2 = EXPECT_CALL(a, DoA(1)); // Ctor from EXPECT_CALL. 146713481Sgiacomo.travaglini@arm.com ExpectationSet es3 = e1; // Ctor from Expectation. 146813481Sgiacomo.travaglini@arm.com ExpectationSet es4(e1); // Ctor from Expectation; alternative syntax. 146913481Sgiacomo.travaglini@arm.com ExpectationSet es5 = e2; // Ctor from const Expectation. 147013481Sgiacomo.travaglini@arm.com ExpectationSet es6(e2); // Ctor from const Expectation; alternative syntax. 147113481Sgiacomo.travaglini@arm.com ExpectationSet es7 = es2; // Copy ctor. 147213481Sgiacomo.travaglini@arm.com 147313481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, es1.size()); 147413481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, es2.size()); 147513481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, es3.size()); 147613481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, es4.size()); 147713481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, es5.size()); 147813481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, es6.size()); 147913481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, es7.size()); 148013481Sgiacomo.travaglini@arm.com 148113481Sgiacomo.travaglini@arm.com EXPECT_THAT(es3, Ne(es2)); 148213481Sgiacomo.travaglini@arm.com EXPECT_THAT(es4, Eq(es3)); 148313481Sgiacomo.travaglini@arm.com EXPECT_THAT(es5, Eq(es4)); 148413481Sgiacomo.travaglini@arm.com EXPECT_THAT(es6, Eq(es5)); 148513481Sgiacomo.travaglini@arm.com EXPECT_THAT(es7, Eq(es2)); 148613481Sgiacomo.travaglini@arm.com a.DoA(1); 148713481Sgiacomo.travaglini@arm.com} 148813481Sgiacomo.travaglini@arm.com 148913481Sgiacomo.travaglini@arm.comTEST(ExpectationSetTest, AssignmentWorks) { 149013481Sgiacomo.travaglini@arm.com ExpectationSet es1; 149113481Sgiacomo.travaglini@arm.com ExpectationSet es2 = Expectation(); 149213481Sgiacomo.travaglini@arm.com 149313481Sgiacomo.travaglini@arm.com es1 = es2; 149413481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, es1.size()); 149513481Sgiacomo.travaglini@arm.com EXPECT_THAT(*(es1.begin()), Eq(Expectation())); 149613481Sgiacomo.travaglini@arm.com EXPECT_THAT(es1, Eq(es2)); 149713481Sgiacomo.travaglini@arm.com} 149813481Sgiacomo.travaglini@arm.com 149913481Sgiacomo.travaglini@arm.comTEST(ExpectationSetTest, InsertionWorks) { 150013481Sgiacomo.travaglini@arm.com ExpectationSet es1; 150113481Sgiacomo.travaglini@arm.com Expectation e1; 150213481Sgiacomo.travaglini@arm.com es1 += e1; 150313481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, es1.size()); 150413481Sgiacomo.travaglini@arm.com EXPECT_THAT(*(es1.begin()), Eq(e1)); 150513481Sgiacomo.travaglini@arm.com 150613481Sgiacomo.travaglini@arm.com MockA a; 150713481Sgiacomo.travaglini@arm.com Expectation e2 = EXPECT_CALL(a, DoA(1)); 150813481Sgiacomo.travaglini@arm.com es1 += e2; 150913481Sgiacomo.travaglini@arm.com EXPECT_EQ(2, es1.size()); 151013481Sgiacomo.travaglini@arm.com 151113481Sgiacomo.travaglini@arm.com ExpectationSet::const_iterator it1 = es1.begin(); 151213481Sgiacomo.travaglini@arm.com ExpectationSet::const_iterator it2 = it1; 151313481Sgiacomo.travaglini@arm.com ++it2; 151413481Sgiacomo.travaglini@arm.com EXPECT_TRUE(*it1 == e1 || *it2 == e1); // e1 must be in the set. 151513481Sgiacomo.travaglini@arm.com EXPECT_TRUE(*it1 == e2 || *it2 == e2); // e2 must be in the set too. 151613481Sgiacomo.travaglini@arm.com a.DoA(1); 151713481Sgiacomo.travaglini@arm.com} 151813481Sgiacomo.travaglini@arm.com 151913481Sgiacomo.travaglini@arm.comTEST(ExpectationSetTest, SizeWorks) { 152013481Sgiacomo.travaglini@arm.com ExpectationSet es; 152113481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, es.size()); 152213481Sgiacomo.travaglini@arm.com 152313481Sgiacomo.travaglini@arm.com es += Expectation(); 152413481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, es.size()); 152513481Sgiacomo.travaglini@arm.com 152613481Sgiacomo.travaglini@arm.com MockA a; 152713481Sgiacomo.travaglini@arm.com es += EXPECT_CALL(a, DoA(1)); 152813481Sgiacomo.travaglini@arm.com EXPECT_EQ(2, es.size()); 152913481Sgiacomo.travaglini@arm.com 153013481Sgiacomo.travaglini@arm.com a.DoA(1); 153113481Sgiacomo.travaglini@arm.com} 153213481Sgiacomo.travaglini@arm.com 153313481Sgiacomo.travaglini@arm.comTEST(ExpectationSetTest, IsEnumerable) { 153413481Sgiacomo.travaglini@arm.com ExpectationSet es; 153513481Sgiacomo.travaglini@arm.com EXPECT_TRUE(es.begin() == es.end()); 153613481Sgiacomo.travaglini@arm.com 153713481Sgiacomo.travaglini@arm.com es += Expectation(); 153813481Sgiacomo.travaglini@arm.com ExpectationSet::const_iterator it = es.begin(); 153913481Sgiacomo.travaglini@arm.com EXPECT_TRUE(it != es.end()); 154013481Sgiacomo.travaglini@arm.com EXPECT_THAT(*it, Eq(Expectation())); 154113481Sgiacomo.travaglini@arm.com ++it; 154213481Sgiacomo.travaglini@arm.com EXPECT_TRUE(it== es.end()); 154313481Sgiacomo.travaglini@arm.com} 154413481Sgiacomo.travaglini@arm.com 154513481Sgiacomo.travaglini@arm.com// Tests the .After() clause. 154613481Sgiacomo.travaglini@arm.com 154713481Sgiacomo.travaglini@arm.comTEST(AfterTest, SucceedsWhenPartialOrderIsSatisfied) { 154813481Sgiacomo.travaglini@arm.com MockA a; 154913481Sgiacomo.travaglini@arm.com ExpectationSet es; 155013481Sgiacomo.travaglini@arm.com es += EXPECT_CALL(a, DoA(1)); 155113481Sgiacomo.travaglini@arm.com es += EXPECT_CALL(a, DoA(2)); 155213481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(3)) 155313481Sgiacomo.travaglini@arm.com .After(es); 155413481Sgiacomo.travaglini@arm.com 155513481Sgiacomo.travaglini@arm.com a.DoA(1); 155613481Sgiacomo.travaglini@arm.com a.DoA(2); 155713481Sgiacomo.travaglini@arm.com a.DoA(3); 155813481Sgiacomo.travaglini@arm.com} 155913481Sgiacomo.travaglini@arm.com 156013481Sgiacomo.travaglini@arm.comTEST(AfterTest, SucceedsWhenTotalOrderIsSatisfied) { 156113481Sgiacomo.travaglini@arm.com MockA a; 156213481Sgiacomo.travaglini@arm.com MockB b; 156313481Sgiacomo.travaglini@arm.com // The following also verifies that const Expectation objects work 156413481Sgiacomo.travaglini@arm.com // too. Do not remove the const modifiers. 156513481Sgiacomo.travaglini@arm.com const Expectation e1 = EXPECT_CALL(a, DoA(1)); 156613481Sgiacomo.travaglini@arm.com const Expectation e2 = EXPECT_CALL(b, DoB()) 156713481Sgiacomo.travaglini@arm.com .Times(2) 156813481Sgiacomo.travaglini@arm.com .After(e1); 156913481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(2)).After(e2); 157013481Sgiacomo.travaglini@arm.com 157113481Sgiacomo.travaglini@arm.com a.DoA(1); 157213481Sgiacomo.travaglini@arm.com b.DoB(); 157313481Sgiacomo.travaglini@arm.com b.DoB(); 157413481Sgiacomo.travaglini@arm.com a.DoA(2); 157513481Sgiacomo.travaglini@arm.com} 157613481Sgiacomo.travaglini@arm.com 157713481Sgiacomo.travaglini@arm.com// Calls must be in strict order when specified so using .After(). 157813481Sgiacomo.travaglini@arm.comTEST(AfterTest, CallsMustBeInStrictOrderWhenSpecifiedSo1) { 157913481Sgiacomo.travaglini@arm.com MockA a; 158013481Sgiacomo.travaglini@arm.com MockB b; 158113481Sgiacomo.travaglini@arm.com 158213481Sgiacomo.travaglini@arm.com // Define ordering: 158313481Sgiacomo.travaglini@arm.com // a.DoA(1) ==> b.DoB() ==> a.DoA(2) 158413481Sgiacomo.travaglini@arm.com Expectation e1 = EXPECT_CALL(a, DoA(1)); 158513481Sgiacomo.travaglini@arm.com Expectation e2 = EXPECT_CALL(b, DoB()) 158613481Sgiacomo.travaglini@arm.com .After(e1); 158713481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(2)) 158813481Sgiacomo.travaglini@arm.com .After(e2); 158913481Sgiacomo.travaglini@arm.com 159013481Sgiacomo.travaglini@arm.com a.DoA(1); 159113481Sgiacomo.travaglini@arm.com 159213481Sgiacomo.travaglini@arm.com // May only be called after DoB(). 159313481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(a.DoA(2), "Unexpected mock function call"); 159413481Sgiacomo.travaglini@arm.com 159513481Sgiacomo.travaglini@arm.com b.DoB(); 159613481Sgiacomo.travaglini@arm.com a.DoA(2); 159713481Sgiacomo.travaglini@arm.com} 159813481Sgiacomo.travaglini@arm.com 159913481Sgiacomo.travaglini@arm.com// Calls must be in strict order when specified so using .After(). 160013481Sgiacomo.travaglini@arm.comTEST(AfterTest, CallsMustBeInStrictOrderWhenSpecifiedSo2) { 160113481Sgiacomo.travaglini@arm.com MockA a; 160213481Sgiacomo.travaglini@arm.com MockB b; 160313481Sgiacomo.travaglini@arm.com 160413481Sgiacomo.travaglini@arm.com // Define ordering: 160513481Sgiacomo.travaglini@arm.com // a.DoA(1) ==> b.DoB() * 2 ==> a.DoA(2) 160613481Sgiacomo.travaglini@arm.com Expectation e1 = EXPECT_CALL(a, DoA(1)); 160713481Sgiacomo.travaglini@arm.com Expectation e2 = EXPECT_CALL(b, DoB()) 160813481Sgiacomo.travaglini@arm.com .Times(2) 160913481Sgiacomo.travaglini@arm.com .After(e1); 161013481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(2)) 161113481Sgiacomo.travaglini@arm.com .After(e2); 161213481Sgiacomo.travaglini@arm.com 161313481Sgiacomo.travaglini@arm.com a.DoA(1); 161413481Sgiacomo.travaglini@arm.com b.DoB(); 161513481Sgiacomo.travaglini@arm.com 161613481Sgiacomo.travaglini@arm.com // May only be called after the second DoB(). 161713481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(a.DoA(2), "Unexpected mock function call"); 161813481Sgiacomo.travaglini@arm.com 161913481Sgiacomo.travaglini@arm.com b.DoB(); 162013481Sgiacomo.travaglini@arm.com a.DoA(2); 162113481Sgiacomo.travaglini@arm.com} 162213481Sgiacomo.travaglini@arm.com 162313481Sgiacomo.travaglini@arm.com// Calls must satisfy the partial order when specified so. 162413481Sgiacomo.travaglini@arm.comTEST(AfterTest, CallsMustSatisfyPartialOrderWhenSpecifiedSo) { 162513481Sgiacomo.travaglini@arm.com MockA a; 162613481Sgiacomo.travaglini@arm.com ON_CALL(a, ReturnResult(_)) 162713481Sgiacomo.travaglini@arm.com .WillByDefault(Return(Result())); 162813481Sgiacomo.travaglini@arm.com 162913481Sgiacomo.travaglini@arm.com // Define ordering: 163013481Sgiacomo.travaglini@arm.com // a.DoA(1) ==> 163113481Sgiacomo.travaglini@arm.com // a.DoA(2) ==> a.ReturnResult(3) 163213481Sgiacomo.travaglini@arm.com Expectation e = EXPECT_CALL(a, DoA(1)); 163313481Sgiacomo.travaglini@arm.com const ExpectationSet es = EXPECT_CALL(a, DoA(2)); 163413481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, ReturnResult(3)) 163513481Sgiacomo.travaglini@arm.com .After(e, es); 163613481Sgiacomo.travaglini@arm.com 163713481Sgiacomo.travaglini@arm.com // May only be called last. 163813481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(a.ReturnResult(3), "Unexpected mock function call"); 163913481Sgiacomo.travaglini@arm.com 164013481Sgiacomo.travaglini@arm.com a.DoA(2); 164113481Sgiacomo.travaglini@arm.com a.DoA(1); 164213481Sgiacomo.travaglini@arm.com a.ReturnResult(3); 164313481Sgiacomo.travaglini@arm.com} 164413481Sgiacomo.travaglini@arm.com 164513481Sgiacomo.travaglini@arm.com// Calls must satisfy the partial order when specified so. 164613481Sgiacomo.travaglini@arm.comTEST(AfterTest, CallsMustSatisfyPartialOrderWhenSpecifiedSo2) { 164713481Sgiacomo.travaglini@arm.com MockA a; 164813481Sgiacomo.travaglini@arm.com 164913481Sgiacomo.travaglini@arm.com // Define ordering: 165013481Sgiacomo.travaglini@arm.com // a.DoA(1) ==> 165113481Sgiacomo.travaglini@arm.com // a.DoA(2) ==> a.DoA(3) 165213481Sgiacomo.travaglini@arm.com Expectation e = EXPECT_CALL(a, DoA(1)); 165313481Sgiacomo.travaglini@arm.com const ExpectationSet es = EXPECT_CALL(a, DoA(2)); 165413481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(3)) 165513481Sgiacomo.travaglini@arm.com .After(e, es); 165613481Sgiacomo.travaglini@arm.com 165713481Sgiacomo.travaglini@arm.com a.DoA(2); 165813481Sgiacomo.travaglini@arm.com 165913481Sgiacomo.travaglini@arm.com // May only be called last. 166013481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(a.DoA(3), "Unexpected mock function call"); 166113481Sgiacomo.travaglini@arm.com 166213481Sgiacomo.travaglini@arm.com a.DoA(1); 166313481Sgiacomo.travaglini@arm.com a.DoA(3); 166413481Sgiacomo.travaglini@arm.com} 166513481Sgiacomo.travaglini@arm.com 166613481Sgiacomo.travaglini@arm.com// .After() can be combined with .InSequence(). 166713481Sgiacomo.travaglini@arm.comTEST(AfterTest, CanBeUsedWithInSequence) { 166813481Sgiacomo.travaglini@arm.com MockA a; 166913481Sgiacomo.travaglini@arm.com Sequence s; 167013481Sgiacomo.travaglini@arm.com Expectation e = EXPECT_CALL(a, DoA(1)); 167113481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(2)).InSequence(s); 167213481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(3)) 167313481Sgiacomo.travaglini@arm.com .InSequence(s) 167413481Sgiacomo.travaglini@arm.com .After(e); 167513481Sgiacomo.travaglini@arm.com 167613481Sgiacomo.travaglini@arm.com a.DoA(1); 167713481Sgiacomo.travaglini@arm.com 167813481Sgiacomo.travaglini@arm.com // May only be after DoA(2). 167913481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(a.DoA(3), "Unexpected mock function call"); 168013481Sgiacomo.travaglini@arm.com 168113481Sgiacomo.travaglini@arm.com a.DoA(2); 168213481Sgiacomo.travaglini@arm.com a.DoA(3); 168313481Sgiacomo.travaglini@arm.com} 168413481Sgiacomo.travaglini@arm.com 168513481Sgiacomo.travaglini@arm.com// .After() can be called multiple times. 168613481Sgiacomo.travaglini@arm.comTEST(AfterTest, CanBeCalledManyTimes) { 168713481Sgiacomo.travaglini@arm.com MockA a; 168813481Sgiacomo.travaglini@arm.com Expectation e1 = EXPECT_CALL(a, DoA(1)); 168913481Sgiacomo.travaglini@arm.com Expectation e2 = EXPECT_CALL(a, DoA(2)); 169013481Sgiacomo.travaglini@arm.com Expectation e3 = EXPECT_CALL(a, DoA(3)); 169113481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(4)) 169213481Sgiacomo.travaglini@arm.com .After(e1) 169313481Sgiacomo.travaglini@arm.com .After(e2) 169413481Sgiacomo.travaglini@arm.com .After(e3); 169513481Sgiacomo.travaglini@arm.com 169613481Sgiacomo.travaglini@arm.com a.DoA(3); 169713481Sgiacomo.travaglini@arm.com a.DoA(1); 169813481Sgiacomo.travaglini@arm.com a.DoA(2); 169913481Sgiacomo.travaglini@arm.com a.DoA(4); 170013481Sgiacomo.travaglini@arm.com} 170113481Sgiacomo.travaglini@arm.com 170213481Sgiacomo.travaglini@arm.com// .After() accepts up to 5 arguments. 170313481Sgiacomo.travaglini@arm.comTEST(AfterTest, AcceptsUpToFiveArguments) { 170413481Sgiacomo.travaglini@arm.com MockA a; 170513481Sgiacomo.travaglini@arm.com Expectation e1 = EXPECT_CALL(a, DoA(1)); 170613481Sgiacomo.travaglini@arm.com Expectation e2 = EXPECT_CALL(a, DoA(2)); 170713481Sgiacomo.travaglini@arm.com Expectation e3 = EXPECT_CALL(a, DoA(3)); 170813481Sgiacomo.travaglini@arm.com ExpectationSet es1 = EXPECT_CALL(a, DoA(4)); 170913481Sgiacomo.travaglini@arm.com ExpectationSet es2 = EXPECT_CALL(a, DoA(5)); 171013481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(6)) 171113481Sgiacomo.travaglini@arm.com .After(e1, e2, e3, es1, es2); 171213481Sgiacomo.travaglini@arm.com 171313481Sgiacomo.travaglini@arm.com a.DoA(5); 171413481Sgiacomo.travaglini@arm.com a.DoA(2); 171513481Sgiacomo.travaglini@arm.com a.DoA(4); 171613481Sgiacomo.travaglini@arm.com a.DoA(1); 171713481Sgiacomo.travaglini@arm.com a.DoA(3); 171813481Sgiacomo.travaglini@arm.com a.DoA(6); 171913481Sgiacomo.travaglini@arm.com} 172013481Sgiacomo.travaglini@arm.com 172113481Sgiacomo.travaglini@arm.com// .After() allows input to contain duplicated Expectations. 172213481Sgiacomo.travaglini@arm.comTEST(AfterTest, AcceptsDuplicatedInput) { 172313481Sgiacomo.travaglini@arm.com MockA a; 172413481Sgiacomo.travaglini@arm.com ON_CALL(a, ReturnResult(_)) 172513481Sgiacomo.travaglini@arm.com .WillByDefault(Return(Result())); 172613481Sgiacomo.travaglini@arm.com 172713481Sgiacomo.travaglini@arm.com // Define ordering: 172813481Sgiacomo.travaglini@arm.com // DoA(1) ==> 172913481Sgiacomo.travaglini@arm.com // DoA(2) ==> ReturnResult(3) 173013481Sgiacomo.travaglini@arm.com Expectation e1 = EXPECT_CALL(a, DoA(1)); 173113481Sgiacomo.travaglini@arm.com Expectation e2 = EXPECT_CALL(a, DoA(2)); 173213481Sgiacomo.travaglini@arm.com ExpectationSet es; 173313481Sgiacomo.travaglini@arm.com es += e1; 173413481Sgiacomo.travaglini@arm.com es += e2; 173513481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, ReturnResult(3)) 173613481Sgiacomo.travaglini@arm.com .After(e1, e2, es, e1); 173713481Sgiacomo.travaglini@arm.com 173813481Sgiacomo.travaglini@arm.com a.DoA(1); 173913481Sgiacomo.travaglini@arm.com 174013481Sgiacomo.travaglini@arm.com // May only be after DoA(2). 174113481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(a.ReturnResult(3), "Unexpected mock function call"); 174213481Sgiacomo.travaglini@arm.com 174313481Sgiacomo.travaglini@arm.com a.DoA(2); 174413481Sgiacomo.travaglini@arm.com a.ReturnResult(3); 174513481Sgiacomo.travaglini@arm.com} 174613481Sgiacomo.travaglini@arm.com 174713481Sgiacomo.travaglini@arm.com// An Expectation added to an ExpectationSet after it has been used in 174813481Sgiacomo.travaglini@arm.com// an .After() has no effect. 174913481Sgiacomo.travaglini@arm.comTEST(AfterTest, ChangesToExpectationSetHaveNoEffectAfterwards) { 175013481Sgiacomo.travaglini@arm.com MockA a; 175113481Sgiacomo.travaglini@arm.com ExpectationSet es1 = EXPECT_CALL(a, DoA(1)); 175213481Sgiacomo.travaglini@arm.com Expectation e2 = EXPECT_CALL(a, DoA(2)); 175313481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(3)) 175413481Sgiacomo.travaglini@arm.com .After(es1); 175513481Sgiacomo.travaglini@arm.com es1 += e2; 175613481Sgiacomo.travaglini@arm.com 175713481Sgiacomo.travaglini@arm.com a.DoA(1); 175813481Sgiacomo.travaglini@arm.com a.DoA(3); 175913481Sgiacomo.travaglini@arm.com a.DoA(2); 176013481Sgiacomo.travaglini@arm.com} 176113481Sgiacomo.travaglini@arm.com 176213481Sgiacomo.travaglini@arm.com// Tests that Google Mock correctly handles calls to mock functions 176313481Sgiacomo.travaglini@arm.com// after a mock object owning one of their pre-requisites has died. 176413481Sgiacomo.travaglini@arm.com 176513481Sgiacomo.travaglini@arm.com// Tests that calls that satisfy the original spec are successful. 176613481Sgiacomo.travaglini@arm.comTEST(DeletingMockEarlyTest, Success1) { 176713481Sgiacomo.travaglini@arm.com MockB* const b1 = new MockB; 176813481Sgiacomo.travaglini@arm.com MockA* const a = new MockA; 176913481Sgiacomo.travaglini@arm.com MockB* const b2 = new MockB; 177013481Sgiacomo.travaglini@arm.com 177113481Sgiacomo.travaglini@arm.com { 177213481Sgiacomo.travaglini@arm.com InSequence dummy; 177313481Sgiacomo.travaglini@arm.com EXPECT_CALL(*b1, DoB(_)) 177413481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)); 177513481Sgiacomo.travaglini@arm.com EXPECT_CALL(*a, Binary(_, _)) 177613481Sgiacomo.travaglini@arm.com .Times(AnyNumber()) 177713481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return(true)); 177813481Sgiacomo.travaglini@arm.com EXPECT_CALL(*b2, DoB(_)) 177913481Sgiacomo.travaglini@arm.com .Times(AnyNumber()) 178013481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return(2)); 178113481Sgiacomo.travaglini@arm.com } 178213481Sgiacomo.travaglini@arm.com 178313481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, b1->DoB(1)); 178413481Sgiacomo.travaglini@arm.com delete b1; 178513481Sgiacomo.travaglini@arm.com // a's pre-requisite has died. 178613481Sgiacomo.travaglini@arm.com EXPECT_TRUE(a->Binary(0, 1)); 178713481Sgiacomo.travaglini@arm.com delete b2; 178813481Sgiacomo.travaglini@arm.com // a's successor has died. 178913481Sgiacomo.travaglini@arm.com EXPECT_TRUE(a->Binary(1, 2)); 179013481Sgiacomo.travaglini@arm.com delete a; 179113481Sgiacomo.travaglini@arm.com} 179213481Sgiacomo.travaglini@arm.com 179313481Sgiacomo.travaglini@arm.com// Tests that calls that satisfy the original spec are successful. 179413481Sgiacomo.travaglini@arm.comTEST(DeletingMockEarlyTest, Success2) { 179513481Sgiacomo.travaglini@arm.com MockB* const b1 = new MockB; 179613481Sgiacomo.travaglini@arm.com MockA* const a = new MockA; 179713481Sgiacomo.travaglini@arm.com MockB* const b2 = new MockB; 179813481Sgiacomo.travaglini@arm.com 179913481Sgiacomo.travaglini@arm.com { 180013481Sgiacomo.travaglini@arm.com InSequence dummy; 180113481Sgiacomo.travaglini@arm.com EXPECT_CALL(*b1, DoB(_)) 180213481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)); 180313481Sgiacomo.travaglini@arm.com EXPECT_CALL(*a, Binary(_, _)) 180413481Sgiacomo.travaglini@arm.com .Times(AnyNumber()); 180513481Sgiacomo.travaglini@arm.com EXPECT_CALL(*b2, DoB(_)) 180613481Sgiacomo.travaglini@arm.com .Times(AnyNumber()) 180713481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return(2)); 180813481Sgiacomo.travaglini@arm.com } 180913481Sgiacomo.travaglini@arm.com 181013481Sgiacomo.travaglini@arm.com delete a; // a is trivially satisfied. 181113481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, b1->DoB(1)); 181213481Sgiacomo.travaglini@arm.com EXPECT_EQ(2, b2->DoB(2)); 181313481Sgiacomo.travaglini@arm.com delete b1; 181413481Sgiacomo.travaglini@arm.com delete b2; 181513481Sgiacomo.travaglini@arm.com} 181613481Sgiacomo.travaglini@arm.com 181713481Sgiacomo.travaglini@arm.com// Tests that it's OK to delete a mock object itself in its action. 181813481Sgiacomo.travaglini@arm.com 181913481Sgiacomo.travaglini@arm.com// Suppresses warning on unreferenced formal parameter in MSVC with 182013481Sgiacomo.travaglini@arm.com// -W4. 182113481Sgiacomo.travaglini@arm.com#ifdef _MSC_VER 182213481Sgiacomo.travaglini@arm.com# pragma warning(push) 182313481Sgiacomo.travaglini@arm.com# pragma warning(disable:4100) 182413481Sgiacomo.travaglini@arm.com#endif 182513481Sgiacomo.travaglini@arm.com 182613481Sgiacomo.travaglini@arm.comACTION_P(Delete, ptr) { delete ptr; } 182713481Sgiacomo.travaglini@arm.com 182813481Sgiacomo.travaglini@arm.com#ifdef _MSC_VER 182913481Sgiacomo.travaglini@arm.com# pragma warning(pop) 183013481Sgiacomo.travaglini@arm.com#endif 183113481Sgiacomo.travaglini@arm.com 183213481Sgiacomo.travaglini@arm.comTEST(DeletingMockEarlyTest, CanDeleteSelfInActionReturningVoid) { 183313481Sgiacomo.travaglini@arm.com MockA* const a = new MockA; 183413481Sgiacomo.travaglini@arm.com EXPECT_CALL(*a, DoA(_)).WillOnce(Delete(a)); 183513481Sgiacomo.travaglini@arm.com a->DoA(42); // This will cause a to be deleted. 183613481Sgiacomo.travaglini@arm.com} 183713481Sgiacomo.travaglini@arm.com 183813481Sgiacomo.travaglini@arm.comTEST(DeletingMockEarlyTest, CanDeleteSelfInActionReturningValue) { 183913481Sgiacomo.travaglini@arm.com MockA* const a = new MockA; 184013481Sgiacomo.travaglini@arm.com EXPECT_CALL(*a, ReturnResult(_)) 184113481Sgiacomo.travaglini@arm.com .WillOnce(DoAll(Delete(a), Return(Result()))); 184213481Sgiacomo.travaglini@arm.com a->ReturnResult(42); // This will cause a to be deleted. 184313481Sgiacomo.travaglini@arm.com} 184413481Sgiacomo.travaglini@arm.com 184513481Sgiacomo.travaglini@arm.com// Tests that calls that violate the original spec yield failures. 184613481Sgiacomo.travaglini@arm.comTEST(DeletingMockEarlyTest, Failure1) { 184713481Sgiacomo.travaglini@arm.com MockB* const b1 = new MockB; 184813481Sgiacomo.travaglini@arm.com MockA* const a = new MockA; 184913481Sgiacomo.travaglini@arm.com MockB* const b2 = new MockB; 185013481Sgiacomo.travaglini@arm.com 185113481Sgiacomo.travaglini@arm.com { 185213481Sgiacomo.travaglini@arm.com InSequence dummy; 185313481Sgiacomo.travaglini@arm.com EXPECT_CALL(*b1, DoB(_)) 185413481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)); 185513481Sgiacomo.travaglini@arm.com EXPECT_CALL(*a, Binary(_, _)) 185613481Sgiacomo.travaglini@arm.com .Times(AnyNumber()); 185713481Sgiacomo.travaglini@arm.com EXPECT_CALL(*b2, DoB(_)) 185813481Sgiacomo.travaglini@arm.com .Times(AnyNumber()) 185913481Sgiacomo.travaglini@arm.com .WillRepeatedly(Return(2)); 186013481Sgiacomo.travaglini@arm.com } 186113481Sgiacomo.travaglini@arm.com 186213481Sgiacomo.travaglini@arm.com delete a; // a is trivially satisfied. 186313481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE({ 186413481Sgiacomo.travaglini@arm.com b2->DoB(2); 186513481Sgiacomo.travaglini@arm.com }, "Unexpected mock function call"); 186613481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, b1->DoB(1)); 186713481Sgiacomo.travaglini@arm.com delete b1; 186813481Sgiacomo.travaglini@arm.com delete b2; 186913481Sgiacomo.travaglini@arm.com} 187013481Sgiacomo.travaglini@arm.com 187113481Sgiacomo.travaglini@arm.com// Tests that calls that violate the original spec yield failures. 187213481Sgiacomo.travaglini@arm.comTEST(DeletingMockEarlyTest, Failure2) { 187313481Sgiacomo.travaglini@arm.com MockB* const b1 = new MockB; 187413481Sgiacomo.travaglini@arm.com MockA* const a = new MockA; 187513481Sgiacomo.travaglini@arm.com MockB* const b2 = new MockB; 187613481Sgiacomo.travaglini@arm.com 187713481Sgiacomo.travaglini@arm.com { 187813481Sgiacomo.travaglini@arm.com InSequence dummy; 187913481Sgiacomo.travaglini@arm.com EXPECT_CALL(*b1, DoB(_)); 188013481Sgiacomo.travaglini@arm.com EXPECT_CALL(*a, Binary(_, _)) 188113481Sgiacomo.travaglini@arm.com .Times(AnyNumber()); 188213481Sgiacomo.travaglini@arm.com EXPECT_CALL(*b2, DoB(_)) 188313481Sgiacomo.travaglini@arm.com .Times(AnyNumber()); 188413481Sgiacomo.travaglini@arm.com } 188513481Sgiacomo.travaglini@arm.com 188613481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(delete b1, 188713481Sgiacomo.travaglini@arm.com "Actual: never called"); 188813481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(a->Binary(0, 1), 188913481Sgiacomo.travaglini@arm.com "Unexpected mock function call"); 189013481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(b2->DoB(1), 189113481Sgiacomo.travaglini@arm.com "Unexpected mock function call"); 189213481Sgiacomo.travaglini@arm.com delete a; 189313481Sgiacomo.travaglini@arm.com delete b2; 189413481Sgiacomo.travaglini@arm.com} 189513481Sgiacomo.travaglini@arm.com 189613481Sgiacomo.travaglini@arm.comclass EvenNumberCardinality : public CardinalityInterface { 189713481Sgiacomo.travaglini@arm.com public: 189813481Sgiacomo.travaglini@arm.com // Returns true iff call_count calls will satisfy this cardinality. 189913481Sgiacomo.travaglini@arm.com virtual bool IsSatisfiedByCallCount(int call_count) const { 190013481Sgiacomo.travaglini@arm.com return call_count % 2 == 0; 190113481Sgiacomo.travaglini@arm.com } 190213481Sgiacomo.travaglini@arm.com 190313481Sgiacomo.travaglini@arm.com // Returns true iff call_count calls will saturate this cardinality. 190413481Sgiacomo.travaglini@arm.com virtual bool IsSaturatedByCallCount(int /* call_count */) const { 190513481Sgiacomo.travaglini@arm.com return false; 190613481Sgiacomo.travaglini@arm.com } 190713481Sgiacomo.travaglini@arm.com 190813481Sgiacomo.travaglini@arm.com // Describes self to an ostream. 190913481Sgiacomo.travaglini@arm.com virtual void DescribeTo(::std::ostream* os) const { 191013481Sgiacomo.travaglini@arm.com *os << "called even number of times"; 191113481Sgiacomo.travaglini@arm.com } 191213481Sgiacomo.travaglini@arm.com}; 191313481Sgiacomo.travaglini@arm.com 191413481Sgiacomo.travaglini@arm.comCardinality EvenNumber() { 191513481Sgiacomo.travaglini@arm.com return Cardinality(new EvenNumberCardinality); 191613481Sgiacomo.travaglini@arm.com} 191713481Sgiacomo.travaglini@arm.com 191813481Sgiacomo.travaglini@arm.comTEST(ExpectationBaseTest, 191913481Sgiacomo.travaglini@arm.com AllPrerequisitesAreSatisfiedWorksForNonMonotonicCardinality) { 192013481Sgiacomo.travaglini@arm.com MockA* a = new MockA; 192113481Sgiacomo.travaglini@arm.com Sequence s; 192213481Sgiacomo.travaglini@arm.com 192313481Sgiacomo.travaglini@arm.com EXPECT_CALL(*a, DoA(1)) 192413481Sgiacomo.travaglini@arm.com .Times(EvenNumber()) 192513481Sgiacomo.travaglini@arm.com .InSequence(s); 192613481Sgiacomo.travaglini@arm.com EXPECT_CALL(*a, DoA(2)) 192713481Sgiacomo.travaglini@arm.com .Times(AnyNumber()) 192813481Sgiacomo.travaglini@arm.com .InSequence(s); 192913481Sgiacomo.travaglini@arm.com EXPECT_CALL(*a, DoA(3)) 193013481Sgiacomo.travaglini@arm.com .Times(AnyNumber()); 193113481Sgiacomo.travaglini@arm.com 193213481Sgiacomo.travaglini@arm.com a->DoA(3); 193313481Sgiacomo.travaglini@arm.com a->DoA(1); 193413481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(a->DoA(2), "Unexpected mock function call"); 193513481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(delete a, "to be called even number of times"); 193613481Sgiacomo.travaglini@arm.com} 193713481Sgiacomo.travaglini@arm.com 193813481Sgiacomo.travaglini@arm.com// The following tests verify the message generated when a mock 193913481Sgiacomo.travaglini@arm.com// function is called. 194013481Sgiacomo.travaglini@arm.com 194113481Sgiacomo.travaglini@arm.comstruct Printable { 194213481Sgiacomo.travaglini@arm.com}; 194313481Sgiacomo.travaglini@arm.com 194413481Sgiacomo.travaglini@arm.cominline void operator<<(::std::ostream& os, const Printable&) { 194513481Sgiacomo.travaglini@arm.com os << "Printable"; 194613481Sgiacomo.travaglini@arm.com} 194713481Sgiacomo.travaglini@arm.com 194813481Sgiacomo.travaglini@arm.comstruct Unprintable { 194913481Sgiacomo.travaglini@arm.com Unprintable() : value(0) {} 195013481Sgiacomo.travaglini@arm.com int value; 195113481Sgiacomo.travaglini@arm.com}; 195213481Sgiacomo.travaglini@arm.com 195313481Sgiacomo.travaglini@arm.comclass MockC { 195413481Sgiacomo.travaglini@arm.com public: 195513481Sgiacomo.travaglini@arm.com MockC() {} 195613481Sgiacomo.travaglini@arm.com 195713481Sgiacomo.travaglini@arm.com MOCK_METHOD6(VoidMethod, void(bool cond, int n, string s, void* p, 195813481Sgiacomo.travaglini@arm.com const Printable& x, Unprintable y)); 195913481Sgiacomo.travaglini@arm.com MOCK_METHOD0(NonVoidMethod, int()); // NOLINT 196013481Sgiacomo.travaglini@arm.com 196113481Sgiacomo.travaglini@arm.com private: 196213481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(MockC); 196313481Sgiacomo.travaglini@arm.com}; 196413481Sgiacomo.travaglini@arm.com 196513481Sgiacomo.travaglini@arm.comclass VerboseFlagPreservingFixture : public testing::Test { 196613481Sgiacomo.travaglini@arm.com protected: 196713481Sgiacomo.travaglini@arm.com VerboseFlagPreservingFixture() 196813481Sgiacomo.travaglini@arm.com : saved_verbose_flag_(GMOCK_FLAG(verbose)) {} 196913481Sgiacomo.travaglini@arm.com 197013481Sgiacomo.travaglini@arm.com ~VerboseFlagPreservingFixture() { GMOCK_FLAG(verbose) = saved_verbose_flag_; } 197113481Sgiacomo.travaglini@arm.com 197213481Sgiacomo.travaglini@arm.com private: 197313481Sgiacomo.travaglini@arm.com const string saved_verbose_flag_; 197413481Sgiacomo.travaglini@arm.com 197513481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(VerboseFlagPreservingFixture); 197613481Sgiacomo.travaglini@arm.com}; 197713481Sgiacomo.travaglini@arm.com 197813481Sgiacomo.travaglini@arm.com#if GTEST_HAS_STREAM_REDIRECTION 197913481Sgiacomo.travaglini@arm.com 198013481Sgiacomo.travaglini@arm.com// Tests that an uninteresting mock function call on a naggy mock 198113481Sgiacomo.travaglini@arm.com// generates a warning without the stack trace when 198213481Sgiacomo.travaglini@arm.com// --gmock_verbose=warning is specified. 198313481Sgiacomo.travaglini@arm.comTEST(FunctionCallMessageTest, 198413481Sgiacomo.travaglini@arm.com UninterestingCallOnNaggyMockGeneratesNoStackTraceWhenVerboseWarning) { 198513481Sgiacomo.travaglini@arm.com GMOCK_FLAG(verbose) = kWarningVerbosity; 198613481Sgiacomo.travaglini@arm.com NaggyMock<MockC> c; 198713481Sgiacomo.travaglini@arm.com CaptureStdout(); 198813481Sgiacomo.travaglini@arm.com c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable()); 198913481Sgiacomo.travaglini@arm.com const std::string output = GetCapturedStdout(); 199013481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(IsSubstring, "GMOCK WARNING", output); 199113481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(IsNotSubstring, "Stack trace:", output); 199213481Sgiacomo.travaglini@arm.com} 199313481Sgiacomo.travaglini@arm.com 199413481Sgiacomo.travaglini@arm.com// Tests that an uninteresting mock function call on a naggy mock 199513481Sgiacomo.travaglini@arm.com// generates a warning containing the stack trace when 199613481Sgiacomo.travaglini@arm.com// --gmock_verbose=info is specified. 199713481Sgiacomo.travaglini@arm.comTEST(FunctionCallMessageTest, 199813481Sgiacomo.travaglini@arm.com UninterestingCallOnNaggyMockGeneratesFyiWithStackTraceWhenVerboseInfo) { 199913481Sgiacomo.travaglini@arm.com GMOCK_FLAG(verbose) = kInfoVerbosity; 200013481Sgiacomo.travaglini@arm.com NaggyMock<MockC> c; 200113481Sgiacomo.travaglini@arm.com CaptureStdout(); 200213481Sgiacomo.travaglini@arm.com c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable()); 200313481Sgiacomo.travaglini@arm.com const std::string output = GetCapturedStdout(); 200413481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(IsSubstring, "GMOCK WARNING", output); 200513481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(IsSubstring, "Stack trace:", output); 200613481Sgiacomo.travaglini@arm.com 200713481Sgiacomo.travaglini@arm.com# ifndef NDEBUG 200813481Sgiacomo.travaglini@arm.com 200913481Sgiacomo.travaglini@arm.com // We check the stack trace content in dbg-mode only, as opt-mode 201013481Sgiacomo.travaglini@arm.com // may inline the call we are interested in seeing. 201113481Sgiacomo.travaglini@arm.com 201213481Sgiacomo.travaglini@arm.com // Verifies that a void mock function's name appears in the stack 201313481Sgiacomo.travaglini@arm.com // trace. 201413481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(IsSubstring, "VoidMethod(", output); 201513481Sgiacomo.travaglini@arm.com 201613481Sgiacomo.travaglini@arm.com // Verifies that a non-void mock function's name appears in the 201713481Sgiacomo.travaglini@arm.com // stack trace. 201813481Sgiacomo.travaglini@arm.com CaptureStdout(); 201913481Sgiacomo.travaglini@arm.com c.NonVoidMethod(); 202013481Sgiacomo.travaglini@arm.com const std::string output2 = GetCapturedStdout(); 202113481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(IsSubstring, "NonVoidMethod(", output2); 202213481Sgiacomo.travaglini@arm.com 202313481Sgiacomo.travaglini@arm.com# endif // NDEBUG 202413481Sgiacomo.travaglini@arm.com} 202513481Sgiacomo.travaglini@arm.com 202613481Sgiacomo.travaglini@arm.com// Tests that an uninteresting mock function call on a naggy mock 202713481Sgiacomo.travaglini@arm.com// causes the function arguments and return value to be printed. 202813481Sgiacomo.travaglini@arm.comTEST(FunctionCallMessageTest, 202913481Sgiacomo.travaglini@arm.com UninterestingCallOnNaggyMockPrintsArgumentsAndReturnValue) { 203013481Sgiacomo.travaglini@arm.com // A non-void mock function. 203113481Sgiacomo.travaglini@arm.com NaggyMock<MockB> b; 203213481Sgiacomo.travaglini@arm.com CaptureStdout(); 203313481Sgiacomo.travaglini@arm.com b.DoB(); 203413481Sgiacomo.travaglini@arm.com const std::string output1 = GetCapturedStdout(); 203513481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2( 203613481Sgiacomo.travaglini@arm.com IsSubstring, 203713481Sgiacomo.travaglini@arm.com "Uninteresting mock function call - returning default value.\n" 203813481Sgiacomo.travaglini@arm.com " Function call: DoB()\n" 203913481Sgiacomo.travaglini@arm.com " Returns: 0\n", output1.c_str()); 204013481Sgiacomo.travaglini@arm.com // Makes sure the return value is printed. 204113481Sgiacomo.travaglini@arm.com 204213481Sgiacomo.travaglini@arm.com // A void mock function. 204313481Sgiacomo.travaglini@arm.com NaggyMock<MockC> c; 204413481Sgiacomo.travaglini@arm.com CaptureStdout(); 204513481Sgiacomo.travaglini@arm.com c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable()); 204613481Sgiacomo.travaglini@arm.com const std::string output2 = GetCapturedStdout(); 204713481Sgiacomo.travaglini@arm.com EXPECT_THAT(output2.c_str(), 204813481Sgiacomo.travaglini@arm.com ContainsRegex( 204913481Sgiacomo.travaglini@arm.com "Uninteresting mock function call - returning directly\\.\n" 205013481Sgiacomo.travaglini@arm.com " Function call: VoidMethod" 205113481Sgiacomo.travaglini@arm.com "\\(false, 5, \"Hi\", NULL, @.+ " 205213481Sgiacomo.travaglini@arm.com "Printable, 4-byte object <00-00 00-00>\\)")); 205313481Sgiacomo.travaglini@arm.com // A void function has no return value to print. 205413481Sgiacomo.travaglini@arm.com} 205513481Sgiacomo.travaglini@arm.com 205613481Sgiacomo.travaglini@arm.com// Tests how the --gmock_verbose flag affects Google Mock's output. 205713481Sgiacomo.travaglini@arm.com 205813481Sgiacomo.travaglini@arm.comclass GMockVerboseFlagTest : public VerboseFlagPreservingFixture { 205913481Sgiacomo.travaglini@arm.com public: 206013481Sgiacomo.travaglini@arm.com // Verifies that the given Google Mock output is correct. (When 206113481Sgiacomo.travaglini@arm.com // should_print is true, the output should match the given regex and 206213481Sgiacomo.travaglini@arm.com // contain the given function name in the stack trace. When it's 206313481Sgiacomo.travaglini@arm.com // false, the output should be empty.) 206413481Sgiacomo.travaglini@arm.com void VerifyOutput(const std::string& output, bool should_print, 206513481Sgiacomo.travaglini@arm.com const string& expected_substring, 206613481Sgiacomo.travaglini@arm.com const string& function_name) { 206713481Sgiacomo.travaglini@arm.com if (should_print) { 206813481Sgiacomo.travaglini@arm.com EXPECT_THAT(output.c_str(), HasSubstr(expected_substring)); 206913481Sgiacomo.travaglini@arm.com# ifndef NDEBUG 207013481Sgiacomo.travaglini@arm.com // We check the stack trace content in dbg-mode only, as opt-mode 207113481Sgiacomo.travaglini@arm.com // may inline the call we are interested in seeing. 207213481Sgiacomo.travaglini@arm.com EXPECT_THAT(output.c_str(), HasSubstr(function_name)); 207313481Sgiacomo.travaglini@arm.com# else 207413481Sgiacomo.travaglini@arm.com // Suppresses 'unused function parameter' warnings. 207513481Sgiacomo.travaglini@arm.com static_cast<void>(function_name); 207613481Sgiacomo.travaglini@arm.com# endif // NDEBUG 207713481Sgiacomo.travaglini@arm.com } else { 207813481Sgiacomo.travaglini@arm.com EXPECT_STREQ("", output.c_str()); 207913481Sgiacomo.travaglini@arm.com } 208013481Sgiacomo.travaglini@arm.com } 208113481Sgiacomo.travaglini@arm.com 208213481Sgiacomo.travaglini@arm.com // Tests how the flag affects expected calls. 208313481Sgiacomo.travaglini@arm.com void TestExpectedCall(bool should_print) { 208413481Sgiacomo.travaglini@arm.com MockA a; 208513481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(5)); 208613481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, Binary(_, 1)) 208713481Sgiacomo.travaglini@arm.com .WillOnce(Return(true)); 208813481Sgiacomo.travaglini@arm.com 208913481Sgiacomo.travaglini@arm.com // A void-returning function. 209013481Sgiacomo.travaglini@arm.com CaptureStdout(); 209113481Sgiacomo.travaglini@arm.com a.DoA(5); 209213481Sgiacomo.travaglini@arm.com VerifyOutput( 209313481Sgiacomo.travaglini@arm.com GetCapturedStdout(), 209413481Sgiacomo.travaglini@arm.com should_print, 209513481Sgiacomo.travaglini@arm.com "Mock function call matches EXPECT_CALL(a, DoA(5))...\n" 209613481Sgiacomo.travaglini@arm.com " Function call: DoA(5)\n" 209713481Sgiacomo.travaglini@arm.com "Stack trace:\n", 209813481Sgiacomo.travaglini@arm.com "DoA"); 209913481Sgiacomo.travaglini@arm.com 210013481Sgiacomo.travaglini@arm.com // A non-void-returning function. 210113481Sgiacomo.travaglini@arm.com CaptureStdout(); 210213481Sgiacomo.travaglini@arm.com a.Binary(2, 1); 210313481Sgiacomo.travaglini@arm.com VerifyOutput( 210413481Sgiacomo.travaglini@arm.com GetCapturedStdout(), 210513481Sgiacomo.travaglini@arm.com should_print, 210613481Sgiacomo.travaglini@arm.com "Mock function call matches EXPECT_CALL(a, Binary(_, 1))...\n" 210713481Sgiacomo.travaglini@arm.com " Function call: Binary(2, 1)\n" 210813481Sgiacomo.travaglini@arm.com " Returns: true\n" 210913481Sgiacomo.travaglini@arm.com "Stack trace:\n", 211013481Sgiacomo.travaglini@arm.com "Binary"); 211113481Sgiacomo.travaglini@arm.com } 211213481Sgiacomo.travaglini@arm.com 211313481Sgiacomo.travaglini@arm.com // Tests how the flag affects uninteresting calls on a naggy mock. 211413481Sgiacomo.travaglini@arm.com void TestUninterestingCallOnNaggyMock(bool should_print) { 211513481Sgiacomo.travaglini@arm.com NaggyMock<MockA> a; 211613481Sgiacomo.travaglini@arm.com const string note = 211713481Sgiacomo.travaglini@arm.com "NOTE: You can safely ignore the above warning unless this " 211813481Sgiacomo.travaglini@arm.com "call should not happen. Do not suppress it by blindly adding " 211913481Sgiacomo.travaglini@arm.com "an EXPECT_CALL() if you don't mean to enforce the call. " 212013481Sgiacomo.travaglini@arm.com "See https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#" 212113481Sgiacomo.travaglini@arm.com "knowing-when-to-expect for details."; 212213481Sgiacomo.travaglini@arm.com 212313481Sgiacomo.travaglini@arm.com // A void-returning function. 212413481Sgiacomo.travaglini@arm.com CaptureStdout(); 212513481Sgiacomo.travaglini@arm.com a.DoA(5); 212613481Sgiacomo.travaglini@arm.com VerifyOutput( 212713481Sgiacomo.travaglini@arm.com GetCapturedStdout(), 212813481Sgiacomo.travaglini@arm.com should_print, 212913481Sgiacomo.travaglini@arm.com "\nGMOCK WARNING:\n" 213013481Sgiacomo.travaglini@arm.com "Uninteresting mock function call - returning directly.\n" 213113481Sgiacomo.travaglini@arm.com " Function call: DoA(5)\n" + 213213481Sgiacomo.travaglini@arm.com note, 213313481Sgiacomo.travaglini@arm.com "DoA"); 213413481Sgiacomo.travaglini@arm.com 213513481Sgiacomo.travaglini@arm.com // A non-void-returning function. 213613481Sgiacomo.travaglini@arm.com CaptureStdout(); 213713481Sgiacomo.travaglini@arm.com a.Binary(2, 1); 213813481Sgiacomo.travaglini@arm.com VerifyOutput( 213913481Sgiacomo.travaglini@arm.com GetCapturedStdout(), 214013481Sgiacomo.travaglini@arm.com should_print, 214113481Sgiacomo.travaglini@arm.com "\nGMOCK WARNING:\n" 214213481Sgiacomo.travaglini@arm.com "Uninteresting mock function call - returning default value.\n" 214313481Sgiacomo.travaglini@arm.com " Function call: Binary(2, 1)\n" 214413481Sgiacomo.travaglini@arm.com " Returns: false\n" + 214513481Sgiacomo.travaglini@arm.com note, 214613481Sgiacomo.travaglini@arm.com "Binary"); 214713481Sgiacomo.travaglini@arm.com } 214813481Sgiacomo.travaglini@arm.com}; 214913481Sgiacomo.travaglini@arm.com 215013481Sgiacomo.travaglini@arm.com// Tests that --gmock_verbose=info causes both expected and 215113481Sgiacomo.travaglini@arm.com// uninteresting calls to be reported. 215213481Sgiacomo.travaglini@arm.comTEST_F(GMockVerboseFlagTest, Info) { 215313481Sgiacomo.travaglini@arm.com GMOCK_FLAG(verbose) = kInfoVerbosity; 215413481Sgiacomo.travaglini@arm.com TestExpectedCall(true); 215513481Sgiacomo.travaglini@arm.com TestUninterestingCallOnNaggyMock(true); 215613481Sgiacomo.travaglini@arm.com} 215713481Sgiacomo.travaglini@arm.com 215813481Sgiacomo.travaglini@arm.com// Tests that --gmock_verbose=warning causes uninteresting calls to be 215913481Sgiacomo.travaglini@arm.com// reported. 216013481Sgiacomo.travaglini@arm.comTEST_F(GMockVerboseFlagTest, Warning) { 216113481Sgiacomo.travaglini@arm.com GMOCK_FLAG(verbose) = kWarningVerbosity; 216213481Sgiacomo.travaglini@arm.com TestExpectedCall(false); 216313481Sgiacomo.travaglini@arm.com TestUninterestingCallOnNaggyMock(true); 216413481Sgiacomo.travaglini@arm.com} 216513481Sgiacomo.travaglini@arm.com 216613481Sgiacomo.travaglini@arm.com// Tests that --gmock_verbose=warning causes neither expected nor 216713481Sgiacomo.travaglini@arm.com// uninteresting calls to be reported. 216813481Sgiacomo.travaglini@arm.comTEST_F(GMockVerboseFlagTest, Error) { 216913481Sgiacomo.travaglini@arm.com GMOCK_FLAG(verbose) = kErrorVerbosity; 217013481Sgiacomo.travaglini@arm.com TestExpectedCall(false); 217113481Sgiacomo.travaglini@arm.com TestUninterestingCallOnNaggyMock(false); 217213481Sgiacomo.travaglini@arm.com} 217313481Sgiacomo.travaglini@arm.com 217413481Sgiacomo.travaglini@arm.com// Tests that --gmock_verbose=SOME_INVALID_VALUE has the same effect 217513481Sgiacomo.travaglini@arm.com// as --gmock_verbose=warning. 217613481Sgiacomo.travaglini@arm.comTEST_F(GMockVerboseFlagTest, InvalidFlagIsTreatedAsWarning) { 217713481Sgiacomo.travaglini@arm.com GMOCK_FLAG(verbose) = "invalid"; // Treated as "warning". 217813481Sgiacomo.travaglini@arm.com TestExpectedCall(false); 217913481Sgiacomo.travaglini@arm.com TestUninterestingCallOnNaggyMock(true); 218013481Sgiacomo.travaglini@arm.com} 218113481Sgiacomo.travaglini@arm.com 218213481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_STREAM_REDIRECTION 218313481Sgiacomo.travaglini@arm.com 218413481Sgiacomo.travaglini@arm.com// A helper class that generates a failure when printed. We use it to 218513481Sgiacomo.travaglini@arm.com// ensure that Google Mock doesn't print a value (even to an internal 218613481Sgiacomo.travaglini@arm.com// buffer) when it is not supposed to do so. 218713481Sgiacomo.travaglini@arm.comclass PrintMeNot {}; 218813481Sgiacomo.travaglini@arm.com 218913481Sgiacomo.travaglini@arm.comvoid PrintTo(PrintMeNot /* dummy */, ::std::ostream* /* os */) { 219013481Sgiacomo.travaglini@arm.com ADD_FAILURE() << "Google Mock is printing a value that shouldn't be " 219113481Sgiacomo.travaglini@arm.com << "printed even to an internal buffer."; 219213481Sgiacomo.travaglini@arm.com} 219313481Sgiacomo.travaglini@arm.com 219413481Sgiacomo.travaglini@arm.comclass LogTestHelper { 219513481Sgiacomo.travaglini@arm.com public: 219613481Sgiacomo.travaglini@arm.com LogTestHelper() {} 219713481Sgiacomo.travaglini@arm.com 219813481Sgiacomo.travaglini@arm.com MOCK_METHOD1(Foo, PrintMeNot(PrintMeNot)); 219913481Sgiacomo.travaglini@arm.com 220013481Sgiacomo.travaglini@arm.com private: 220113481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(LogTestHelper); 220213481Sgiacomo.travaglini@arm.com}; 220313481Sgiacomo.travaglini@arm.com 220413481Sgiacomo.travaglini@arm.comclass GMockLogTest : public VerboseFlagPreservingFixture { 220513481Sgiacomo.travaglini@arm.com protected: 220613481Sgiacomo.travaglini@arm.com LogTestHelper helper_; 220713481Sgiacomo.travaglini@arm.com}; 220813481Sgiacomo.travaglini@arm.com 220913481Sgiacomo.travaglini@arm.comTEST_F(GMockLogTest, DoesNotPrintGoodCallInternallyIfVerbosityIsWarning) { 221013481Sgiacomo.travaglini@arm.com GMOCK_FLAG(verbose) = kWarningVerbosity; 221113481Sgiacomo.travaglini@arm.com EXPECT_CALL(helper_, Foo(_)) 221213481Sgiacomo.travaglini@arm.com .WillOnce(Return(PrintMeNot())); 221313481Sgiacomo.travaglini@arm.com helper_.Foo(PrintMeNot()); // This is an expected call. 221413481Sgiacomo.travaglini@arm.com} 221513481Sgiacomo.travaglini@arm.com 221613481Sgiacomo.travaglini@arm.comTEST_F(GMockLogTest, DoesNotPrintGoodCallInternallyIfVerbosityIsError) { 221713481Sgiacomo.travaglini@arm.com GMOCK_FLAG(verbose) = kErrorVerbosity; 221813481Sgiacomo.travaglini@arm.com EXPECT_CALL(helper_, Foo(_)) 221913481Sgiacomo.travaglini@arm.com .WillOnce(Return(PrintMeNot())); 222013481Sgiacomo.travaglini@arm.com helper_.Foo(PrintMeNot()); // This is an expected call. 222113481Sgiacomo.travaglini@arm.com} 222213481Sgiacomo.travaglini@arm.com 222313481Sgiacomo.travaglini@arm.comTEST_F(GMockLogTest, DoesNotPrintWarningInternallyIfVerbosityIsError) { 222413481Sgiacomo.travaglini@arm.com GMOCK_FLAG(verbose) = kErrorVerbosity; 222513481Sgiacomo.travaglini@arm.com ON_CALL(helper_, Foo(_)) 222613481Sgiacomo.travaglini@arm.com .WillByDefault(Return(PrintMeNot())); 222713481Sgiacomo.travaglini@arm.com helper_.Foo(PrintMeNot()); // This should generate a warning. 222813481Sgiacomo.travaglini@arm.com} 222913481Sgiacomo.travaglini@arm.com 223013481Sgiacomo.travaglini@arm.com// Tests Mock::AllowLeak(). 223113481Sgiacomo.travaglini@arm.com 223213481Sgiacomo.travaglini@arm.comTEST(AllowLeakTest, AllowsLeakingUnusedMockObject) { 223313481Sgiacomo.travaglini@arm.com MockA* a = new MockA; 223413481Sgiacomo.travaglini@arm.com Mock::AllowLeak(a); 223513481Sgiacomo.travaglini@arm.com} 223613481Sgiacomo.travaglini@arm.com 223713481Sgiacomo.travaglini@arm.comTEST(AllowLeakTest, CanBeCalledBeforeOnCall) { 223813481Sgiacomo.travaglini@arm.com MockA* a = new MockA; 223913481Sgiacomo.travaglini@arm.com Mock::AllowLeak(a); 224013481Sgiacomo.travaglini@arm.com ON_CALL(*a, DoA(_)).WillByDefault(Return()); 224113481Sgiacomo.travaglini@arm.com a->DoA(0); 224213481Sgiacomo.travaglini@arm.com} 224313481Sgiacomo.travaglini@arm.com 224413481Sgiacomo.travaglini@arm.comTEST(AllowLeakTest, CanBeCalledAfterOnCall) { 224513481Sgiacomo.travaglini@arm.com MockA* a = new MockA; 224613481Sgiacomo.travaglini@arm.com ON_CALL(*a, DoA(_)).WillByDefault(Return()); 224713481Sgiacomo.travaglini@arm.com Mock::AllowLeak(a); 224813481Sgiacomo.travaglini@arm.com} 224913481Sgiacomo.travaglini@arm.com 225013481Sgiacomo.travaglini@arm.comTEST(AllowLeakTest, CanBeCalledBeforeExpectCall) { 225113481Sgiacomo.travaglini@arm.com MockA* a = new MockA; 225213481Sgiacomo.travaglini@arm.com Mock::AllowLeak(a); 225313481Sgiacomo.travaglini@arm.com EXPECT_CALL(*a, DoA(_)); 225413481Sgiacomo.travaglini@arm.com a->DoA(0); 225513481Sgiacomo.travaglini@arm.com} 225613481Sgiacomo.travaglini@arm.com 225713481Sgiacomo.travaglini@arm.comTEST(AllowLeakTest, CanBeCalledAfterExpectCall) { 225813481Sgiacomo.travaglini@arm.com MockA* a = new MockA; 225913481Sgiacomo.travaglini@arm.com EXPECT_CALL(*a, DoA(_)).Times(AnyNumber()); 226013481Sgiacomo.travaglini@arm.com Mock::AllowLeak(a); 226113481Sgiacomo.travaglini@arm.com} 226213481Sgiacomo.travaglini@arm.com 226313481Sgiacomo.travaglini@arm.comTEST(AllowLeakTest, WorksWhenBothOnCallAndExpectCallArePresent) { 226413481Sgiacomo.travaglini@arm.com MockA* a = new MockA; 226513481Sgiacomo.travaglini@arm.com ON_CALL(*a, DoA(_)).WillByDefault(Return()); 226613481Sgiacomo.travaglini@arm.com EXPECT_CALL(*a, DoA(_)).Times(AnyNumber()); 226713481Sgiacomo.travaglini@arm.com Mock::AllowLeak(a); 226813481Sgiacomo.travaglini@arm.com} 226913481Sgiacomo.travaglini@arm.com 227013481Sgiacomo.travaglini@arm.com// Tests that we can verify and clear a mock object's expectations 227113481Sgiacomo.travaglini@arm.com// when none of its methods has expectations. 227213481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearExpectationsTest, NoMethodHasExpectations) { 227313481Sgiacomo.travaglini@arm.com MockB b; 227413481Sgiacomo.travaglini@arm.com ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b)); 227513481Sgiacomo.travaglini@arm.com 227613481Sgiacomo.travaglini@arm.com // There should be no expectations on the methods now, so we can 227713481Sgiacomo.travaglini@arm.com // freely call them. 227813481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 227913481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB(1)); 228013481Sgiacomo.travaglini@arm.com} 228113481Sgiacomo.travaglini@arm.com 228213481Sgiacomo.travaglini@arm.com// Tests that we can verify and clear a mock object's expectations 228313481Sgiacomo.travaglini@arm.com// when some, but not all, of its methods have expectations *and* the 228413481Sgiacomo.travaglini@arm.com// verification succeeds. 228513481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearExpectationsTest, SomeMethodsHaveExpectationsAndSucceed) { 228613481Sgiacomo.travaglini@arm.com MockB b; 228713481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 228813481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)); 228913481Sgiacomo.travaglini@arm.com b.DoB(); 229013481Sgiacomo.travaglini@arm.com ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b)); 229113481Sgiacomo.travaglini@arm.com 229213481Sgiacomo.travaglini@arm.com // There should be no expectations on the methods now, so we can 229313481Sgiacomo.travaglini@arm.com // freely call them. 229413481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 229513481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB(1)); 229613481Sgiacomo.travaglini@arm.com} 229713481Sgiacomo.travaglini@arm.com 229813481Sgiacomo.travaglini@arm.com// Tests that we can verify and clear a mock object's expectations 229913481Sgiacomo.travaglini@arm.com// when some, but not all, of its methods have expectations *and* the 230013481Sgiacomo.travaglini@arm.com// verification fails. 230113481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearExpectationsTest, SomeMethodsHaveExpectationsAndFail) { 230213481Sgiacomo.travaglini@arm.com MockB b; 230313481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 230413481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)); 230513481Sgiacomo.travaglini@arm.com bool result = true; 230613481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClearExpectations(&b), 230713481Sgiacomo.travaglini@arm.com "Actual: never called"); 230813481Sgiacomo.travaglini@arm.com ASSERT_FALSE(result); 230913481Sgiacomo.travaglini@arm.com 231013481Sgiacomo.travaglini@arm.com // There should be no expectations on the methods now, so we can 231113481Sgiacomo.travaglini@arm.com // freely call them. 231213481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 231313481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB(1)); 231413481Sgiacomo.travaglini@arm.com} 231513481Sgiacomo.travaglini@arm.com 231613481Sgiacomo.travaglini@arm.com// Tests that we can verify and clear a mock object's expectations 231713481Sgiacomo.travaglini@arm.com// when all of its methods have expectations. 231813481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearExpectationsTest, AllMethodsHaveExpectations) { 231913481Sgiacomo.travaglini@arm.com MockB b; 232013481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 232113481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)); 232213481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(_)) 232313481Sgiacomo.travaglini@arm.com .WillOnce(Return(2)); 232413481Sgiacomo.travaglini@arm.com b.DoB(); 232513481Sgiacomo.travaglini@arm.com b.DoB(1); 232613481Sgiacomo.travaglini@arm.com ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b)); 232713481Sgiacomo.travaglini@arm.com 232813481Sgiacomo.travaglini@arm.com // There should be no expectations on the methods now, so we can 232913481Sgiacomo.travaglini@arm.com // freely call them. 233013481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 233113481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB(1)); 233213481Sgiacomo.travaglini@arm.com} 233313481Sgiacomo.travaglini@arm.com 233413481Sgiacomo.travaglini@arm.com// Tests that we can verify and clear a mock object's expectations 233513481Sgiacomo.travaglini@arm.com// when a method has more than one expectation. 233613481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearExpectationsTest, AMethodHasManyExpectations) { 233713481Sgiacomo.travaglini@arm.com MockB b; 233813481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(0)) 233913481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)); 234013481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(_)) 234113481Sgiacomo.travaglini@arm.com .WillOnce(Return(2)); 234213481Sgiacomo.travaglini@arm.com b.DoB(1); 234313481Sgiacomo.travaglini@arm.com bool result = true; 234413481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClearExpectations(&b), 234513481Sgiacomo.travaglini@arm.com "Actual: never called"); 234613481Sgiacomo.travaglini@arm.com ASSERT_FALSE(result); 234713481Sgiacomo.travaglini@arm.com 234813481Sgiacomo.travaglini@arm.com // There should be no expectations on the methods now, so we can 234913481Sgiacomo.travaglini@arm.com // freely call them. 235013481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 235113481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB(1)); 235213481Sgiacomo.travaglini@arm.com} 235313481Sgiacomo.travaglini@arm.com 235413481Sgiacomo.travaglini@arm.com// Tests that we can call VerifyAndClearExpectations() on the same 235513481Sgiacomo.travaglini@arm.com// mock object multiple times. 235613481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearExpectationsTest, CanCallManyTimes) { 235713481Sgiacomo.travaglini@arm.com MockB b; 235813481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()); 235913481Sgiacomo.travaglini@arm.com b.DoB(); 236013481Sgiacomo.travaglini@arm.com Mock::VerifyAndClearExpectations(&b); 236113481Sgiacomo.travaglini@arm.com 236213481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(_)) 236313481Sgiacomo.travaglini@arm.com .WillOnce(Return(1)); 236413481Sgiacomo.travaglini@arm.com b.DoB(1); 236513481Sgiacomo.travaglini@arm.com Mock::VerifyAndClearExpectations(&b); 236613481Sgiacomo.travaglini@arm.com Mock::VerifyAndClearExpectations(&b); 236713481Sgiacomo.travaglini@arm.com 236813481Sgiacomo.travaglini@arm.com // There should be no expectations on the methods now, so we can 236913481Sgiacomo.travaglini@arm.com // freely call them. 237013481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 237113481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB(1)); 237213481Sgiacomo.travaglini@arm.com} 237313481Sgiacomo.travaglini@arm.com 237413481Sgiacomo.travaglini@arm.com// Tests that we can clear a mock object's default actions when none 237513481Sgiacomo.travaglini@arm.com// of its methods has default actions. 237613481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearTest, NoMethodHasDefaultActions) { 237713481Sgiacomo.travaglini@arm.com MockB b; 237813481Sgiacomo.travaglini@arm.com // If this crashes or generates a failure, the test will catch it. 237913481Sgiacomo.travaglini@arm.com Mock::VerifyAndClear(&b); 238013481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 238113481Sgiacomo.travaglini@arm.com} 238213481Sgiacomo.travaglini@arm.com 238313481Sgiacomo.travaglini@arm.com// Tests that we can clear a mock object's default actions when some, 238413481Sgiacomo.travaglini@arm.com// but not all of its methods have default actions. 238513481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearTest, SomeMethodsHaveDefaultActions) { 238613481Sgiacomo.travaglini@arm.com MockB b; 238713481Sgiacomo.travaglini@arm.com ON_CALL(b, DoB()) 238813481Sgiacomo.travaglini@arm.com .WillByDefault(Return(1)); 238913481Sgiacomo.travaglini@arm.com 239013481Sgiacomo.travaglini@arm.com Mock::VerifyAndClear(&b); 239113481Sgiacomo.travaglini@arm.com 239213481Sgiacomo.travaglini@arm.com // Verifies that the default action of int DoB() was removed. 239313481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 239413481Sgiacomo.travaglini@arm.com} 239513481Sgiacomo.travaglini@arm.com 239613481Sgiacomo.travaglini@arm.com// Tests that we can clear a mock object's default actions when all of 239713481Sgiacomo.travaglini@arm.com// its methods have default actions. 239813481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearTest, AllMethodsHaveDefaultActions) { 239913481Sgiacomo.travaglini@arm.com MockB b; 240013481Sgiacomo.travaglini@arm.com ON_CALL(b, DoB()) 240113481Sgiacomo.travaglini@arm.com .WillByDefault(Return(1)); 240213481Sgiacomo.travaglini@arm.com ON_CALL(b, DoB(_)) 240313481Sgiacomo.travaglini@arm.com .WillByDefault(Return(2)); 240413481Sgiacomo.travaglini@arm.com 240513481Sgiacomo.travaglini@arm.com Mock::VerifyAndClear(&b); 240613481Sgiacomo.travaglini@arm.com 240713481Sgiacomo.travaglini@arm.com // Verifies that the default action of int DoB() was removed. 240813481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 240913481Sgiacomo.travaglini@arm.com 241013481Sgiacomo.travaglini@arm.com // Verifies that the default action of int DoB(int) was removed. 241113481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB(0)); 241213481Sgiacomo.travaglini@arm.com} 241313481Sgiacomo.travaglini@arm.com 241413481Sgiacomo.travaglini@arm.com// Tests that we can clear a mock object's default actions when a 241513481Sgiacomo.travaglini@arm.com// method has more than one ON_CALL() set on it. 241613481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearTest, AMethodHasManyDefaultActions) { 241713481Sgiacomo.travaglini@arm.com MockB b; 241813481Sgiacomo.travaglini@arm.com ON_CALL(b, DoB(0)) 241913481Sgiacomo.travaglini@arm.com .WillByDefault(Return(1)); 242013481Sgiacomo.travaglini@arm.com ON_CALL(b, DoB(_)) 242113481Sgiacomo.travaglini@arm.com .WillByDefault(Return(2)); 242213481Sgiacomo.travaglini@arm.com 242313481Sgiacomo.travaglini@arm.com Mock::VerifyAndClear(&b); 242413481Sgiacomo.travaglini@arm.com 242513481Sgiacomo.travaglini@arm.com // Verifies that the default actions (there are two) of int DoB(int) 242613481Sgiacomo.travaglini@arm.com // were removed. 242713481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB(0)); 242813481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB(1)); 242913481Sgiacomo.travaglini@arm.com} 243013481Sgiacomo.travaglini@arm.com 243113481Sgiacomo.travaglini@arm.com// Tests that we can call VerifyAndClear() on a mock object multiple 243213481Sgiacomo.travaglini@arm.com// times. 243313481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearTest, CanCallManyTimes) { 243413481Sgiacomo.travaglini@arm.com MockB b; 243513481Sgiacomo.travaglini@arm.com ON_CALL(b, DoB()) 243613481Sgiacomo.travaglini@arm.com .WillByDefault(Return(1)); 243713481Sgiacomo.travaglini@arm.com Mock::VerifyAndClear(&b); 243813481Sgiacomo.travaglini@arm.com Mock::VerifyAndClear(&b); 243913481Sgiacomo.travaglini@arm.com 244013481Sgiacomo.travaglini@arm.com ON_CALL(b, DoB(_)) 244113481Sgiacomo.travaglini@arm.com .WillByDefault(Return(1)); 244213481Sgiacomo.travaglini@arm.com Mock::VerifyAndClear(&b); 244313481Sgiacomo.travaglini@arm.com 244413481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 244513481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB(1)); 244613481Sgiacomo.travaglini@arm.com} 244713481Sgiacomo.travaglini@arm.com 244813481Sgiacomo.travaglini@arm.com// Tests that VerifyAndClear() works when the verification succeeds. 244913481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearTest, Success) { 245013481Sgiacomo.travaglini@arm.com MockB b; 245113481Sgiacomo.travaglini@arm.com ON_CALL(b, DoB()) 245213481Sgiacomo.travaglini@arm.com .WillByDefault(Return(1)); 245313481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(1)) 245413481Sgiacomo.travaglini@arm.com .WillOnce(Return(2)); 245513481Sgiacomo.travaglini@arm.com 245613481Sgiacomo.travaglini@arm.com b.DoB(); 245713481Sgiacomo.travaglini@arm.com b.DoB(1); 245813481Sgiacomo.travaglini@arm.com ASSERT_TRUE(Mock::VerifyAndClear(&b)); 245913481Sgiacomo.travaglini@arm.com 246013481Sgiacomo.travaglini@arm.com // There should be no expectations on the methods now, so we can 246113481Sgiacomo.travaglini@arm.com // freely call them. 246213481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 246313481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB(1)); 246413481Sgiacomo.travaglini@arm.com} 246513481Sgiacomo.travaglini@arm.com 246613481Sgiacomo.travaglini@arm.com// Tests that VerifyAndClear() works when the verification fails. 246713481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearTest, Failure) { 246813481Sgiacomo.travaglini@arm.com MockB b; 246913481Sgiacomo.travaglini@arm.com ON_CALL(b, DoB(_)) 247013481Sgiacomo.travaglini@arm.com .WillByDefault(Return(1)); 247113481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 247213481Sgiacomo.travaglini@arm.com .WillOnce(Return(2)); 247313481Sgiacomo.travaglini@arm.com 247413481Sgiacomo.travaglini@arm.com b.DoB(1); 247513481Sgiacomo.travaglini@arm.com bool result = true; 247613481Sgiacomo.travaglini@arm.com EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClear(&b), 247713481Sgiacomo.travaglini@arm.com "Actual: never called"); 247813481Sgiacomo.travaglini@arm.com ASSERT_FALSE(result); 247913481Sgiacomo.travaglini@arm.com 248013481Sgiacomo.travaglini@arm.com // There should be no expectations on the methods now, so we can 248113481Sgiacomo.travaglini@arm.com // freely call them. 248213481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 248313481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB(1)); 248413481Sgiacomo.travaglini@arm.com} 248513481Sgiacomo.travaglini@arm.com 248613481Sgiacomo.travaglini@arm.com// Tests that VerifyAndClear() works when the default actions and 248713481Sgiacomo.travaglini@arm.com// expectations are set on a const mock object. 248813481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearTest, Const) { 248913481Sgiacomo.travaglini@arm.com MockB b; 249013481Sgiacomo.travaglini@arm.com ON_CALL(Const(b), DoB()) 249113481Sgiacomo.travaglini@arm.com .WillByDefault(Return(1)); 249213481Sgiacomo.travaglini@arm.com 249313481Sgiacomo.travaglini@arm.com EXPECT_CALL(Const(b), DoB()) 249413481Sgiacomo.travaglini@arm.com .WillOnce(DoDefault()) 249513481Sgiacomo.travaglini@arm.com .WillOnce(Return(2)); 249613481Sgiacomo.travaglini@arm.com 249713481Sgiacomo.travaglini@arm.com b.DoB(); 249813481Sgiacomo.travaglini@arm.com b.DoB(); 249913481Sgiacomo.travaglini@arm.com ASSERT_TRUE(Mock::VerifyAndClear(&b)); 250013481Sgiacomo.travaglini@arm.com 250113481Sgiacomo.travaglini@arm.com // There should be no expectations on the methods now, so we can 250213481Sgiacomo.travaglini@arm.com // freely call them. 250313481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB()); 250413481Sgiacomo.travaglini@arm.com EXPECT_EQ(0, b.DoB(1)); 250513481Sgiacomo.travaglini@arm.com} 250613481Sgiacomo.travaglini@arm.com 250713481Sgiacomo.travaglini@arm.com// Tests that we can set default actions and expectations on a mock 250813481Sgiacomo.travaglini@arm.com// object after VerifyAndClear() has been called on it. 250913481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearTest, CanSetDefaultActionsAndExpectationsAfterwards) { 251013481Sgiacomo.travaglini@arm.com MockB b; 251113481Sgiacomo.travaglini@arm.com ON_CALL(b, DoB()) 251213481Sgiacomo.travaglini@arm.com .WillByDefault(Return(1)); 251313481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB(_)) 251413481Sgiacomo.travaglini@arm.com .WillOnce(Return(2)); 251513481Sgiacomo.travaglini@arm.com b.DoB(1); 251613481Sgiacomo.travaglini@arm.com 251713481Sgiacomo.travaglini@arm.com Mock::VerifyAndClear(&b); 251813481Sgiacomo.travaglini@arm.com 251913481Sgiacomo.travaglini@arm.com EXPECT_CALL(b, DoB()) 252013481Sgiacomo.travaglini@arm.com .WillOnce(Return(3)); 252113481Sgiacomo.travaglini@arm.com ON_CALL(b, DoB(_)) 252213481Sgiacomo.travaglini@arm.com .WillByDefault(Return(4)); 252313481Sgiacomo.travaglini@arm.com 252413481Sgiacomo.travaglini@arm.com EXPECT_EQ(3, b.DoB()); 252513481Sgiacomo.travaglini@arm.com EXPECT_EQ(4, b.DoB(1)); 252613481Sgiacomo.travaglini@arm.com} 252713481Sgiacomo.travaglini@arm.com 252813481Sgiacomo.travaglini@arm.com// Tests that calling VerifyAndClear() on one mock object does not 252913481Sgiacomo.travaglini@arm.com// affect other mock objects (either of the same type or not). 253013481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearTest, DoesNotAffectOtherMockObjects) { 253113481Sgiacomo.travaglini@arm.com MockA a; 253213481Sgiacomo.travaglini@arm.com MockB b1; 253313481Sgiacomo.travaglini@arm.com MockB b2; 253413481Sgiacomo.travaglini@arm.com 253513481Sgiacomo.travaglini@arm.com ON_CALL(a, Binary(_, _)) 253613481Sgiacomo.travaglini@arm.com .WillByDefault(Return(true)); 253713481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, Binary(_, _)) 253813481Sgiacomo.travaglini@arm.com .WillOnce(DoDefault()) 253913481Sgiacomo.travaglini@arm.com .WillOnce(Return(false)); 254013481Sgiacomo.travaglini@arm.com 254113481Sgiacomo.travaglini@arm.com ON_CALL(b1, DoB()) 254213481Sgiacomo.travaglini@arm.com .WillByDefault(Return(1)); 254313481Sgiacomo.travaglini@arm.com EXPECT_CALL(b1, DoB(_)) 254413481Sgiacomo.travaglini@arm.com .WillOnce(Return(2)); 254513481Sgiacomo.travaglini@arm.com 254613481Sgiacomo.travaglini@arm.com ON_CALL(b2, DoB()) 254713481Sgiacomo.travaglini@arm.com .WillByDefault(Return(3)); 254813481Sgiacomo.travaglini@arm.com EXPECT_CALL(b2, DoB(_)); 254913481Sgiacomo.travaglini@arm.com 255013481Sgiacomo.travaglini@arm.com b2.DoB(0); 255113481Sgiacomo.travaglini@arm.com Mock::VerifyAndClear(&b2); 255213481Sgiacomo.travaglini@arm.com 255313481Sgiacomo.travaglini@arm.com // Verifies that the default actions and expectations of a and b1 255413481Sgiacomo.travaglini@arm.com // are still in effect. 255513481Sgiacomo.travaglini@arm.com EXPECT_TRUE(a.Binary(0, 0)); 255613481Sgiacomo.travaglini@arm.com EXPECT_FALSE(a.Binary(0, 0)); 255713481Sgiacomo.travaglini@arm.com 255813481Sgiacomo.travaglini@arm.com EXPECT_EQ(1, b1.DoB()); 255913481Sgiacomo.travaglini@arm.com EXPECT_EQ(2, b1.DoB(0)); 256013481Sgiacomo.travaglini@arm.com} 256113481Sgiacomo.travaglini@arm.com 256213481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearTest, 256313481Sgiacomo.travaglini@arm.com DestroyingChainedMocksDoesNotDeadlockThroughExpectations) { 256413481Sgiacomo.travaglini@arm.com linked_ptr<MockA> a(new MockA); 256513481Sgiacomo.travaglini@arm.com ReferenceHoldingMock test_mock; 256613481Sgiacomo.travaglini@arm.com 256713481Sgiacomo.travaglini@arm.com // EXPECT_CALL stores a reference to a inside test_mock. 256813481Sgiacomo.travaglini@arm.com EXPECT_CALL(test_mock, AcceptReference(_)) 256913481Sgiacomo.travaglini@arm.com .WillRepeatedly(SetArgPointee<0>(a)); 257013481Sgiacomo.travaglini@arm.com 257113481Sgiacomo.travaglini@arm.com // Throw away the reference to the mock that we have in a. After this, the 257213481Sgiacomo.travaglini@arm.com // only reference to it is stored by test_mock. 257313481Sgiacomo.travaglini@arm.com a.reset(); 257413481Sgiacomo.travaglini@arm.com 257513481Sgiacomo.travaglini@arm.com // When test_mock goes out of scope, it destroys the last remaining reference 257613481Sgiacomo.travaglini@arm.com // to the mock object originally pointed to by a. This will cause the MockA 257713481Sgiacomo.travaglini@arm.com // destructor to be called from inside the ReferenceHoldingMock destructor. 257813481Sgiacomo.travaglini@arm.com // The state of all mocks is protected by a single global lock, but there 257913481Sgiacomo.travaglini@arm.com // should be no deadlock. 258013481Sgiacomo.travaglini@arm.com} 258113481Sgiacomo.travaglini@arm.com 258213481Sgiacomo.travaglini@arm.comTEST(VerifyAndClearTest, 258313481Sgiacomo.travaglini@arm.com DestroyingChainedMocksDoesNotDeadlockThroughDefaultAction) { 258413481Sgiacomo.travaglini@arm.com linked_ptr<MockA> a(new MockA); 258513481Sgiacomo.travaglini@arm.com ReferenceHoldingMock test_mock; 258613481Sgiacomo.travaglini@arm.com 258713481Sgiacomo.travaglini@arm.com // ON_CALL stores a reference to a inside test_mock. 258813481Sgiacomo.travaglini@arm.com ON_CALL(test_mock, AcceptReference(_)) 258913481Sgiacomo.travaglini@arm.com .WillByDefault(SetArgPointee<0>(a)); 259013481Sgiacomo.travaglini@arm.com 259113481Sgiacomo.travaglini@arm.com // Throw away the reference to the mock that we have in a. After this, the 259213481Sgiacomo.travaglini@arm.com // only reference to it is stored by test_mock. 259313481Sgiacomo.travaglini@arm.com a.reset(); 259413481Sgiacomo.travaglini@arm.com 259513481Sgiacomo.travaglini@arm.com // When test_mock goes out of scope, it destroys the last remaining reference 259613481Sgiacomo.travaglini@arm.com // to the mock object originally pointed to by a. This will cause the MockA 259713481Sgiacomo.travaglini@arm.com // destructor to be called from inside the ReferenceHoldingMock destructor. 259813481Sgiacomo.travaglini@arm.com // The state of all mocks is protected by a single global lock, but there 259913481Sgiacomo.travaglini@arm.com // should be no deadlock. 260013481Sgiacomo.travaglini@arm.com} 260113481Sgiacomo.travaglini@arm.com 260213481Sgiacomo.travaglini@arm.com// Tests that a mock function's action can call a mock function 260313481Sgiacomo.travaglini@arm.com// (either the same function or a different one) either as an explicit 260413481Sgiacomo.travaglini@arm.com// action or as a default action without causing a dead lock. It 260513481Sgiacomo.travaglini@arm.com// verifies that the action is not performed inside the critical 260613481Sgiacomo.travaglini@arm.com// section. 260713481Sgiacomo.travaglini@arm.comTEST(SynchronizationTest, CanCallMockMethodInAction) { 260813481Sgiacomo.travaglini@arm.com MockA a; 260913481Sgiacomo.travaglini@arm.com MockC c; 261013481Sgiacomo.travaglini@arm.com ON_CALL(a, DoA(_)) 261113481Sgiacomo.travaglini@arm.com .WillByDefault(IgnoreResult(InvokeWithoutArgs(&c, 261213481Sgiacomo.travaglini@arm.com &MockC::NonVoidMethod))); 261313481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)); 261413481Sgiacomo.travaglini@arm.com EXPECT_CALL(a, DoA(1)) 261513481Sgiacomo.travaglini@arm.com .WillOnce(Invoke(&a, &MockA::DoA)) 261613481Sgiacomo.travaglini@arm.com .RetiresOnSaturation(); 261713481Sgiacomo.travaglini@arm.com EXPECT_CALL(c, NonVoidMethod()); 261813481Sgiacomo.travaglini@arm.com 261913481Sgiacomo.travaglini@arm.com a.DoA(1); 262013481Sgiacomo.travaglini@arm.com // This will match the second EXPECT_CALL() and trigger another a.DoA(1), 262113481Sgiacomo.travaglini@arm.com // which will in turn match the first EXPECT_CALL() and trigger a call to 262213481Sgiacomo.travaglini@arm.com // c.NonVoidMethod() that was specified by the ON_CALL() since the first 262313481Sgiacomo.travaglini@arm.com // EXPECT_CALL() did not specify an action. 262413481Sgiacomo.travaglini@arm.com} 262513481Sgiacomo.travaglini@arm.com 262613481Sgiacomo.travaglini@arm.com} // namespace 262713481Sgiacomo.travaglini@arm.com 262813481Sgiacomo.travaglini@arm.com// Allows the user to define his own main and then invoke gmock_main 262913481Sgiacomo.travaglini@arm.com// from it. This might be necessary on some platforms which require 263013481Sgiacomo.travaglini@arm.com// specific setup and teardown. 263113481Sgiacomo.travaglini@arm.com#if GMOCK_RENAME_MAIN 263213481Sgiacomo.travaglini@arm.comint gmock_main(int argc, char **argv) { 263313481Sgiacomo.travaglini@arm.com#else 263413481Sgiacomo.travaglini@arm.comint main(int argc, char **argv) { 263513481Sgiacomo.travaglini@arm.com#endif // GMOCK_RENAME_MAIN 263613481Sgiacomo.travaglini@arm.com testing::InitGoogleMock(&argc, argv); 263713481Sgiacomo.travaglini@arm.com 263813481Sgiacomo.travaglini@arm.com // Ensures that the tests pass no matter what value of 263913481Sgiacomo.travaglini@arm.com // --gmock_catch_leaked_mocks and --gmock_verbose the user specifies. 264013481Sgiacomo.travaglini@arm.com testing::GMOCK_FLAG(catch_leaked_mocks) = true; 264113481Sgiacomo.travaglini@arm.com testing::GMOCK_FLAG(verbose) = testing::internal::kWarningVerbosity; 264213481Sgiacomo.travaglini@arm.com 264313481Sgiacomo.travaglini@arm.com return RUN_ALL_TESTS(); 264413481Sgiacomo.travaglini@arm.com} 2645