1dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Copyright 2007, Google Inc. 2dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// All rights reserved. 3dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 4dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Redistribution and use in source and binary forms, with or without 5dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// modification, are permitted provided that the following conditions are 6dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// met: 7dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 8dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// * Redistributions of source code must retain the above copyright 9dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// notice, this list of conditions and the following disclaimer. 10dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// * Redistributions in binary form must reproduce the above 11dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// copyright notice, this list of conditions and the following disclaimer 12dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// in the documentation and/or other materials provided with the 13dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// distribution. 14dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// * Neither the name of Google Inc. nor the names of its 15dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// contributors may be used to endorse or promote products derived from 16dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// this software without specific prior written permission. 17dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 18dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 30dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Author: wan@google.com (Zhanyong Wan) 31dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 32dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Google Mock - a framework for writing C++ mock classes. 33dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 34dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// This file tests the spec builder syntax. 35dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 3646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#include "gmock/gmock-spec-builders.h" 37dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 38dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#include <ostream> // NOLINT 39dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#include <sstream> 40dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#include <string> 41dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 4246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#include "gmock/gmock.h" 4346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#include "gmock/internal/gmock-port.h" 4446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#include "gtest/gtest.h" 4546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#include "gtest/gtest-spi.h" 4646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#include "gtest/internal/gtest-port.h" 47dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 48dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixternamespace testing { 49dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixternamespace internal { 50dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 51dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Helper class for testing the Expectation class template. 52dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass ExpectationTester { 53dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 54dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Sets the call count of the given expectation to the given number. 55dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter void SetCallCount(int n, ExpectationBase* exp) { 56dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter exp->call_count_ = n; 57dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 58dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 59dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 60dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} // namespace internal 61dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} // namespace testing 62dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 63dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixternamespace { 64dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 65dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::_; 66dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::AnyNumber; 67dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::AtLeast; 68dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::AtMost; 69dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::Between; 70dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::Cardinality; 71dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::CardinalityInterface; 7246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanusing testing::ContainsRegex; 73dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::Const; 74dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::DoAll; 75dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::DoDefault; 7646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanusing testing::Eq; 7746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanusing testing::Expectation; 7846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanusing testing::ExpectationSet; 79dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::GMOCK_FLAG(verbose); 80dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::Gt; 81dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::InSequence; 82dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::Invoke; 83dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::InvokeWithoutArgs; 84dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::IsSubstring; 85dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::Lt; 86dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::Message; 87dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::Mock; 8846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanusing testing::Ne; 89dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::Return; 90dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::Sequence; 9146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanusing testing::SetArgPointee; 9246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanusing testing::internal::ExpectationTester; 9346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanusing testing::internal::FormatFileLocation; 94dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::internal::kErrorVerbosity; 95dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::internal::kInfoVerbosity; 96dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::internal::kWarningVerbosity; 9746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanusing testing::internal::String; 9846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanusing testing::internal::linked_ptr; 99dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::internal::string; 100dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 10146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#if GTEST_HAS_STREAM_REDIRECTION 10246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanusing testing::HasSubstr; 10346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanusing testing::internal::CaptureStdout; 10446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanusing testing::internal::GetCapturedStdout; 10546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif 10646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 10746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanclass Incomplete; 10846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 10946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanclass MockIncomplete { 11046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan public: 11146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // This line verifies that a mock method can take a by-reference 11246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // argument of an incomplete type. 11346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MOCK_METHOD1(ByRefFunc, void(const Incomplete& x)); 11446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 11546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 11646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Tells Google Mock how to print a value of type Incomplete. 11746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanvoid PrintTo(const Incomplete& x, ::std::ostream* os); 11846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 11946108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(MockMethodTest, CanInstantiateWithIncompleteArgType) { 12046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // Even though this mock class contains a mock method that takes 12146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // by-reference an argument whose type is incomplete, we can still 12246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // use the mock, as long as Google Mock knows how to print the 12346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // argument. 12446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockIncomplete incomplete; 12546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(incomplete, ByRefFunc(_)) 12646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .Times(AnyNumber()); 12746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 12846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 12946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// The definition of the printer for the argument type doesn't have to 13046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// be visible where the mock is used. 13146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanvoid PrintTo(const Incomplete& /* x */, ::std::ostream* os) { 13246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *os << "incomplete"; 13346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 13446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 135dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass Result {}; 136dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 137dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass MockA { 138dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 13946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA() {} 14046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 141dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MOCK_METHOD1(DoA, void(int n)); // NOLINT 142dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MOCK_METHOD1(ReturnResult, Result(int n)); // NOLINT 143dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MOCK_METHOD2(Binary, bool(int x, int y)); // NOLINT 144dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MOCK_METHOD2(ReturnInt, int(int x, int y)); // NOLINT 14546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 14646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private: 14746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_COPY_AND_ASSIGN_(MockA); 148dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 149dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 150dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass MockB { 151dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 15246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockB() {} 15346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 154dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MOCK_CONST_METHOD0(DoB, int()); // NOLINT 155dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MOCK_METHOD1(DoB, int(int n)); // NOLINT 15646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 15746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private: 15846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_COPY_AND_ASSIGN_(MockB); 15946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 16046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 16146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanclass ReferenceHoldingMock { 16246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan public: 16346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ReferenceHoldingMock() {} 16446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 16546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MOCK_METHOD1(AcceptReference, void(linked_ptr<MockA>*)); 16646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 16746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private: 16846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_COPY_AND_ASSIGN_(ReferenceHoldingMock); 169dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 170dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 171dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that EXPECT_CALL and ON_CALL compile in a presence of macro 172dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// redefining a mock method name. This could happen, for example, when 173dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// the tested code #includes Win32 API headers which define many APIs 174dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// as macros, e.g. #define TextOut TextOutW. 175dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 176dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define Method MethodW 177dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 178dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass CC { 179dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 180dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual ~CC() {} 181dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual int Method() = 0; 182dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 183dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass MockCC : public CC { 184dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 18546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockCC() {} 18646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 187dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MOCK_METHOD0(Method, int()); 18846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 18946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private: 19046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_COPY_AND_ASSIGN_(MockCC); 191dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 192dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 193dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that a method with expanded name compiles. 194dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(OnCallSyntaxTest, CompilesWithMethodNameExpandedFromMacro) { 195dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockCC cc; 196dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(cc, Method()); 197dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 198dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 199dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that the method with expanded name not only compiles but runs 200dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// and returns a correct value, too. 201dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(OnCallSyntaxTest, WorksWithMethodNameExpandedFromMacro) { 202dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockCC cc; 203dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(cc, Method()).WillByDefault(Return(42)); 204dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(42, cc.Method()); 205dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 206dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 207dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that a method with expanded name compiles. 208dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, CompilesWithMethodNameExpandedFromMacro) { 209dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockCC cc; 210dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(cc, Method()); 211dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter cc.Method(); 212dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 213dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 214dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that it works, too. 215dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, WorksWithMethodNameExpandedFromMacro) { 216dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockCC cc; 217dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(cc, Method()).WillOnce(Return(42)); 218dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(42, cc.Method()); 219dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 220dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 221dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#undef Method // Done with macro redefinition tests. 222dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 223dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that ON_CALL evaluates its arguments exactly once as promised 224dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// by Google Mock. 225dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(OnCallSyntaxTest, EvaluatesFirstArgumentOnce) { 226dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 227dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA* pa = &a; 228dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 229dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(*pa++, DoA(_)); 230dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(&a + 1, pa); 231dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 232dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 233dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(OnCallSyntaxTest, EvaluatesSecondArgumentOnce) { 234dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 235dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int n = 0; 236dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 237dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(a, DoA(n++)); 238dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(1, n); 239dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 240dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 241dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that the syntax of ON_CALL() is enforced at run time. 242dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 243dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(OnCallSyntaxTest, WithIsOptional) { 244dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 245dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 246dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(a, DoA(5)) 247dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return()); 248dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(a, DoA(_)) 249dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .With(_) 250dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return()); 251dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 252dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 253dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(OnCallSyntaxTest, WithCanAppearAtMostOnce) { 254dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 255dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 256dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 257dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(a, ReturnResult(_)) 258dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .With(_) 259dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .With(_) 260dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(Result())); 261dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ".With() cannot appear more than once in an ON_CALL()"); 262dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 263dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 264dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(OnCallSyntaxTest, WillByDefaultIsMandatory) { 265dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 266dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 26746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_DEATH_IF_SUPPORTED({ 268dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(a, DoA(5)); 269dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(5); 270dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ""); 271dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 272dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 273dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(OnCallSyntaxTest, WillByDefaultCanAppearAtMostOnce) { 274dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 275dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 276dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 277dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(a, DoA(5)) 278dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return()) 279dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return()); 280dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ".WillByDefault() must appear exactly once in an ON_CALL()"); 281dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 282dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 283dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that EXPECT_CALL evaluates its arguments exactly once as 284dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// promised by Google Mock. 285dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, EvaluatesFirstArgumentOnce) { 286dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 287dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA* pa = &a; 288dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 289dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*pa++, DoA(_)); 290dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(0); 291dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(&a + 1, pa); 292dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 293dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 294dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, EvaluatesSecondArgumentOnce) { 295dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 296dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int n = 0; 297dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 298dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(n++)); 299dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(0); 300dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(1, n); 301dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 302dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 303dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that the syntax of EXPECT_CALL() is enforced at run time. 304dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 305dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, WithIsOptional) { 306dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 307dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 308dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(5)) 309dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(0); 310dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(6)) 311dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .With(_) 312dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(0); 313dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 314dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 315dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, WithCanAppearAtMostOnce) { 316dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 317dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 318dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 319dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(6)) 320dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .With(_) 321dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .With(_); 322dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ".With() cannot appear more than once in an EXPECT_CALL()"); 323dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 324dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(6); 325dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 326dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 327dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, WithMustBeFirstClause) { 328dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 329dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 330dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 331dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)) 332dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(1) 333dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .With(_); 334dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ".With() must be the first clause in an EXPECT_CALL()"); 335dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 336dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 337dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 338dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 339dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(2)) 340dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return()) 341dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .With(_); 342dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ".With() must be the first clause in an EXPECT_CALL()"); 343dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 344dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(2); 345dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 346dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 347dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, TimesCanBeInferred) { 348dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 349dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 350dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)) 351dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return()); 352dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 353dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(2)) 354dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return()) 355dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return()); 356dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 357dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 358dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(2); 359dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(2); 360dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 361dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 362dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, TimesCanAppearAtMostOnce) { 363dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 364dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 365dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 366dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)) 367dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(1) 368dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(2); 369dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ".Times() cannot appear more than once in an EXPECT_CALL()"); 370dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 371dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 372dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 373dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 374dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 375dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, TimesMustBeBeforeInSequence) { 376dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 377dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Sequence s; 378dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 379dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 380dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)) 381dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(s) 382dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(1); 383dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ".Times() cannot appear after "); 384dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 385dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 386dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 387dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 388dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, InSequenceIsOptional) { 389dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 390dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Sequence s; 391dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 392dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)); 393dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(2)) 394dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(s); 395dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 396dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 397dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(2); 398dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 399dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 400dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, InSequenceCanAppearMultipleTimes) { 401dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 402dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Sequence s1, s2; 403dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 404dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)) 405dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(s1, s2) 406dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(s1); 407dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 408dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 409dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 410dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 41146108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(ExpectCallSyntaxTest, InSequenceMustBeBeforeAfter) { 41246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA a; 41346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Sequence s; 41446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 41546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e = EXPECT_CALL(a, DoA(1)) 41646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .Times(AnyNumber()); 41746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_NONFATAL_FAILURE({ // NOLINT 41846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(a, DoA(2)) 41946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .After(e) 42046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .InSequence(s); 42146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }, ".InSequence() cannot appear after "); 42246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 42346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(2); 42446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 42546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 42646108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(ExpectCallSyntaxTest, InSequenceMustBeBeforeWillOnce) { 427dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 428dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Sequence s; 429dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 430dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 431dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)) 432dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return()) 433dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(s); 434dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ".InSequence() cannot appear after "); 435dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 436dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 437dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 438dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 43946108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(ExpectCallSyntaxTest, AfterMustBeBeforeWillOnce) { 44046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA a; 44146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 44246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e = EXPECT_CALL(a, DoA(1)); 44346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_NONFATAL_FAILURE({ 44446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(a, DoA(2)) 44546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .WillOnce(Return()) 44646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .After(e); 44746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }, ".After() cannot appear after "); 44846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 44946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(1); 45046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(2); 45146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 45246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 453dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, WillIsOptional) { 454dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 455dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 456dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)); 457dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(2)) 458dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return()); 459dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 460dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 461dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(2); 462dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 463dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 464dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, WillCanAppearMultipleTimes) { 465dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 466dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 467dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)) 468dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AnyNumber()) 469dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return()) 470dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return()) 471dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return()); 472dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 473dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 474dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, WillMustBeBeforeWillRepeatedly) { 475dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 476dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 477dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 478dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)) 479dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return()) 480dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return()); 481dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ".WillOnce() cannot appear after "); 482dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 483dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 484dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 485dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 486dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, WillRepeatedlyIsOptional) { 487dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 488dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 489dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)) 490dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return()); 491dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(2)) 492dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return()) 493dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return()); 494dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 495dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 496dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(2); 497dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(2); 498dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 499dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 500dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, WillRepeatedlyCannotAppearMultipleTimes) { 501dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 502dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 503dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 504dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)) 505dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return()) 506dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return()); 507dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ".WillRepeatedly() cannot appear more than once in an " 508dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "EXPECT_CALL()"); 509dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 510dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 511dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, WillRepeatedlyMustBeBeforeRetiresOnSaturation) { 512dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 513dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 514dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 515dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)) 516dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .RetiresOnSaturation() 517dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return()); 518dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ".WillRepeatedly() cannot appear after "); 519dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 520dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 521dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, RetiresOnSaturationIsOptional) { 522dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 523dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 524dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)); 525dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)) 526dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .RetiresOnSaturation(); 527dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 528dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 529dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 530dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 531dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 532dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, RetiresOnSaturationCannotAppearMultipleTimes) { 533dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 534dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 535dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 536dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)) 537dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .RetiresOnSaturation() 538dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .RetiresOnSaturation(); 539dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ".RetiresOnSaturation() cannot appear more than once"); 540dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 541dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 542dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 543dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 544dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, DefaultCardinalityIsOnce) { 545dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { 546dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 547dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)); 548dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 549dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 550dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 551dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 552dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)); 553dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, "to be called once"); 554dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 555dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 556dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)); 557dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 558dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 559dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, "to be called once"); 560dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 561dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 56246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#if GTEST_HAS_STREAM_REDIRECTION 563dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 564dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that Google Mock doesn't print a warning when the number of 565dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// WillOnce() is adequate. 566dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, DoesNotWarnOnAdequateActionCount) { 56746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan CaptureStdout(); 568dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { 569dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 570dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 571dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // It's always fine to omit WillOnce() entirely. 572dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 573dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(0); 574dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(1)) 575dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AtMost(1)); 576dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(2)) 577dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(1) 578dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return(1)); 579dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 580dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // It's fine for the number of WillOnce()s to equal the upper bound. 581dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(3)) 582dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(Between(1, 2)) 583dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)) 584dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(2)); 585dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 586dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // It's fine for the number of WillOnce()s to be smaller than the 587dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // upper bound when there is a WillRepeatedly(). 588dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(4)) 589dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AtMost(3)) 590dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)) 591dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return(2)); 592dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 593dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Satisfies the above expectations. 594dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(2); 595dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(3); 596dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 59746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_STREQ("", GetCapturedStdout().c_str()); 598dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 599dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 600dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that Google Mock warns on having too many actions in an 601dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// expectation compared to its cardinality. 602dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, WarnsOnTooManyActions) { 60346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan CaptureStdout(); 604dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { 605dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 606dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 607dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Warns when the number of WillOnce()s is larger than the upper bound. 608dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 609dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(0) 610dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)); // #1 611dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 612dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AtMost(1)) 613dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)) 614dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(2)); // #2 615dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(1)) 616dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(1) 617dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)) 618dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(2)) 619dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .RetiresOnSaturation(); // #3 620dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 621dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Warns when the number of WillOnce()s equals the upper bound and 622dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // there is a WillRepeatedly(). 623dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 624dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(0) 625dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return(1)); // #4 626dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(2)) 627dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(1) 628dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)) 629dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return(2)); // #5 630dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 631dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Satisfies the above expectations. 632dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(1); 633dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(2); 634dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 63546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const String output = GetCapturedStdout(); 63646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_PRED_FORMAT2( 63746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan IsSubstring, 63846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Too many actions specified in EXPECT_CALL(b, DoB())...\n" 63946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Expected to be never called, but has 1 WillOnce().", 64046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan output); // #1 64146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_PRED_FORMAT2( 64246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan IsSubstring, 64346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Too many actions specified in EXPECT_CALL(b, DoB())...\n" 64446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Expected to be called at most once, " 64546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "but has 2 WillOnce()s.", 64646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan output); // #2 64746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_PRED_FORMAT2( 64846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan IsSubstring, 64946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Too many actions specified in EXPECT_CALL(b, DoB(1))...\n" 65046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Expected to be called once, but has 2 WillOnce()s.", 65146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan output); // #3 65246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_PRED_FORMAT2( 65346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan IsSubstring, 65446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Too many actions specified in EXPECT_CALL(b, DoB())...\n" 65546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Expected to be never called, but has 0 WillOnce()s " 65646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "and a WillRepeatedly().", 65746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan output); // #4 65846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_PRED_FORMAT2( 65946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan IsSubstring, 66046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Too many actions specified in EXPECT_CALL(b, DoB(2))...\n" 66146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Expected to be called once, but has 1 WillOnce() " 66246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "and a WillRepeatedly().", 66346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan output); // #5 664dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 665dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 666dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that Google Mock warns on having too few actions in an 667dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// expectation compared to its cardinality. 668dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallSyntaxTest, WarnsOnTooFewActions) { 669dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 670dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 671dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 672dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(Between(2, 3)) 673dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)); 674dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 67546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan CaptureStdout(); 676dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(); 67746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const String output = GetCapturedStdout(); 67846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_PRED_FORMAT2( 67946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan IsSubstring, 68046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Too few actions specified in EXPECT_CALL(b, DoB())...\n" 68146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Expected to be called between 2 and 3 times, " 68246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "but has only 1 WillOnce().", 68346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan output); 684dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(); 685dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 686dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 68746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif // GTEST_HAS_STREAM_REDIRECTION 688dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 689dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests the semantics of ON_CALL(). 690dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 691dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that the built-in default action is taken when no ON_CALL() 692dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// is specified. 693dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(OnCallTest, TakesBuiltInDefaultActionWhenNoOnCall) { 694dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 695dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()); 696dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 697dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB()); 698dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 699dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 700dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that the built-in default action is taken when no ON_CALL() 701dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// matches the invocation. 702dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(OnCallTest, TakesBuiltInDefaultActionWhenNoOnCallMatches) { 703dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 704dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(b, DoB(1)) 705dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(1)); 706dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(_)); 707dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 708dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB(2)); 709dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 710dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 711dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that the last matching ON_CALL() action is taken. 712dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(OnCallTest, PicksLastMatchingOnCall) { 713dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 714dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(b, DoB(_)) 715dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(3)); 716dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(b, DoB(2)) 717dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(2)); 718dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(b, DoB(1)) 719dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(1)); 720dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(_)); 721dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 722dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(2, b.DoB(2)); 723dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 724dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 725dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests the semantics of EXPECT_CALL(). 726dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 727dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that any call is allowed when no EXPECT_CALL() is specified. 728dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallTest, AllowsAnyCallWhenNoSpec) { 729dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 730dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()); 731dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // There is no expectation on DoB(int). 732dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 733dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(); 734dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 735dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // DoB(int) can be called any number of times. 736dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(1); 737dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(2); 738dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 739dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 740dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that the last matching EXPECT_CALL() fires. 741dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallTest, PicksLastMatchingExpectCall) { 742dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 743dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(_)) 744dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return(2)); 745dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(1)) 746dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return(1)); 747dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 748dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(1, b.DoB(1)); 749dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 750dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 751dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests lower-bound violation. 752dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallTest, CatchesTooFewCalls) { 753dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 754dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 755dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(5)) 756dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AtLeast(2)); 757dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 758dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(5); 75946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }, "Actual function call count doesn't match EXPECT_CALL(b, DoB(5))...\n" 760dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Expected: to be called at least twice\n" 761dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Actual: called once - unsatisfied and active"); 762dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 763dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 764dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that the cardinality can be inferred when no Times(...) is 765dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// specified. 766dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallTest, InfersCardinalityWhenThereIsNoWillRepeatedly) { 767dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { 768dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 769dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 770dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)) 771dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(2)); 772dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 773dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(1, b.DoB()); 774dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(2, b.DoB()); 775dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 776dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 777dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 778dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 779dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 780dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)) 781dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(2)); 782dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 783dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(1, b.DoB()); 784dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, "to be called twice"); 785dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 786dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { // NOLINT 787dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 788dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 789dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)) 790dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(2)); 791dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 792dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(1, b.DoB()); 793dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(2, b.DoB()); 794dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE(b.DoB(), "to be called twice"); 795dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 796dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 797dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 798dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallTest, InfersCardinality1WhenThereIsWillRepeatedly) { 799dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { 800dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 801dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 802dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)) 803dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return(2)); 804dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 805dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(1, b.DoB()); 806dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 807dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 808dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { // NOLINT 809dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 810dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 811dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)) 812dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return(2)); 813dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 814dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(1, b.DoB()); 815dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(2, b.DoB()); 816dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(2, b.DoB()); 817dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 818dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 819dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 820dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 821dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 822dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)) 823dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return(2)); 824dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, "to be called at least once"); 825dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 826dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 827dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that the n-th action is taken for the n-th matching 828dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// invocation. 829dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallTest, NthMatchTakesNthAction) { 830dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 831dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 832dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)) 833dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(2)) 834dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(3)); 835dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 836dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(1, b.DoB()); 837dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(2, b.DoB()); 838dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(3, b.DoB()); 839dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 840dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 84146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Tests that the WillRepeatedly() action is taken when the WillOnce(...) 84246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// list is exhausted. 84346108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(ExpectCallTest, TakesRepeatedActionWhenWillListIsExhausted) { 84446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockB b; 84546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(b, DoB()) 84646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .WillOnce(Return(1)) 84746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .WillRepeatedly(Return(2)); 84846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 84946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(1, b.DoB()); 85046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(2, b.DoB()); 85146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(2, b.DoB()); 85246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 85346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 85446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#if GTEST_HAS_STREAM_REDIRECTION 855dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 856dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that the default action is taken when the WillOnce(...) list is 857dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// exhausted and there is no WillRepeatedly(). 858dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectCallTest, TakesDefaultActionWhenWillListIsExhausted) { 859dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 860dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(_)) 861dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(1); 862dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 863dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AnyNumber()) 864dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)) 865dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(2)); 866dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 86746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan CaptureStdout(); 868dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB(1)); // Shouldn't generate a warning as the 869dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // expectation has no action clause at all. 870dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(1, b.DoB()); 871dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(2, b.DoB()); 87246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const String output1 = GetCapturedStdout(); 87346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_STREQ("", output1.c_str()); 874dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 87546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan CaptureStdout(); 876dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB()); 877dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB()); 87846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const String output2 = GetCapturedStdout(); 87946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(output2.c_str(), 88046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan HasSubstr("Actions ran out in EXPECT_CALL(b, DoB())...\n" 88146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Called 3 times, but only 2 WillOnce()s are specified" 88246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan " - returning default value.")); 88346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(output2.c_str(), 88446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan HasSubstr("Actions ran out in EXPECT_CALL(b, DoB())...\n" 88546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Called 4 times, but only 2 WillOnce()s are specified" 88646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan " - returning default value.")); 88746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 88846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 88946108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(FunctionMockerTest, ReportsExpectCallLocationForExhausedActions) { 890dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 89146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan std::string expect_call_location = FormatFileLocation(__FILE__, __LINE__ + 1); 89246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(b, DoB()).Times(AnyNumber()).WillOnce(Return(1)); 893dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 894dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(1, b.DoB()); 89546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 89646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan CaptureStdout(); 89746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(0, b.DoB()); 89846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const String output = GetCapturedStdout(); 89946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // The warning message should contain the call location. 90046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_PRED_FORMAT2(IsSubstring, expect_call_location, output); 901dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 902dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 90346108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(FunctionMockerTest, ReportsDefaultActionLocationOfUninterestingCalls) { 90446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan std::string on_call_location; 90546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan CaptureStdout(); 90646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan { 90746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockB b; 90846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan on_call_location = FormatFileLocation(__FILE__, __LINE__ + 1); 90946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ON_CALL(b, DoB(_)).WillByDefault(Return(0)); 91046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan b.DoB(0); 91146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan } 91246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_PRED_FORMAT2(IsSubstring, on_call_location, GetCapturedStdout()); 91346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 91446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 91546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif // GTEST_HAS_STREAM_REDIRECTION 91646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 917dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that an uninteresting call performs the default action. 918dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(UninterestingCallTest, DoesDefaultAction) { 919dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // When there is an ON_CALL() statement, the action specified by it 920dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // should be taken. 921dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 922dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(a, Binary(_, _)) 923dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(true)); 924dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(a.Binary(1, 2)); 925dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 926dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // When there is no ON_CALL(), the default value for the return type 927dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // should be returned. 928dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 929dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB()); 930dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 931dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 932dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that an unexpected call performs the default action. 933dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(UnexpectedCallTest, DoesDefaultAction) { 934dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // When there is an ON_CALL() statement, the action specified by it 935dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // should be taken. 936dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 937dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(a, Binary(_, _)) 938dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(true)); 939dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, Binary(0, 0)); 940dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.Binary(0, 0); 941dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter bool result = false; 942dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE(result = a.Binary(1, 2), 943dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Unexpected mock function call"); 944dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(result); 945dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 946dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // When there is no ON_CALL(), the default value for the return type 947dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // should be returned. 948dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 949dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(0)) 950dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(0); 951dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int n = -1; 952dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE(n = b.DoB(1), 953dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Unexpected mock function call"); 954dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, n); 955dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 956dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 957dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that when an unexpected void function generates the right 958dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// failure message. 959dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(UnexpectedCallTest, GeneratesFailureForVoidFunction) { 960dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // First, tests the message when there is only one EXPECT_CALL(). 961dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a1; 962dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a1, DoA(1)); 963dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a1.DoA(1); 964dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Ideally we should match the failure message against a regex, but 965dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // EXPECT_NONFATAL_FAILURE doesn't support that, so we test for 966dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // multiple sub-strings instead. 967dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE( 968dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a1.DoA(9), 969dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Unexpected mock function call - returning directly.\n" 970dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Function call: DoA(9)\n" 971dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Google Mock tried the following 1 expectation, but it didn't match:"); 972dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE( 973dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a1.DoA(9), 974dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Expected arg #0: is equal to 1\n" 975dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Actual: 9\n" 976dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Expected: to be called once\n" 977dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Actual: called once - saturated and active"); 978dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 979dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Next, tests the message when there are more than one EXPECT_CALL(). 980dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a2; 981dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a2, DoA(1)); 982dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a2, DoA(3)); 983dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a2.DoA(1); 984dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE( 985dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a2.DoA(2), 986dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Unexpected mock function call - returning directly.\n" 987dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Function call: DoA(2)\n" 988dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Google Mock tried the following 2 expectations, but none matched:"); 989dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE( 990dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a2.DoA(2), 99146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "tried expectation #0: EXPECT_CALL(a2, DoA(1))...\n" 992dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Expected arg #0: is equal to 1\n" 993dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Actual: 2\n" 994dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Expected: to be called once\n" 995dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Actual: called once - saturated and active"); 996dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE( 997dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a2.DoA(2), 99846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "tried expectation #1: EXPECT_CALL(a2, DoA(3))...\n" 999dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Expected arg #0: is equal to 3\n" 1000dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Actual: 2\n" 1001dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Expected: to be called once\n" 1002dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Actual: never called - unsatisfied and active"); 1003dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a2.DoA(3); 1004dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1005dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1006dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that an unexpected non-void function generates the right 1007dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// failure message. 1008dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(UnexpectedCallTest, GeneartesFailureForNonVoidFunction) { 1009dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b1; 1010dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b1, DoB(1)); 1011dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b1.DoB(1); 1012dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE( 1013dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b1.DoB(2), 1014dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Unexpected mock function call - returning default value.\n" 1015dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Function call: DoB(2)\n" 1016dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Returns: 0\n" 1017dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Google Mock tried the following 1 expectation, but it didn't match:"); 1018dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE( 1019dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b1.DoB(2), 1020dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Expected arg #0: is equal to 1\n" 1021dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Actual: 2\n" 1022dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Expected: to be called once\n" 1023dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Actual: called once - saturated and active"); 1024dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1025dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1026dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that Google Mock explains that an retired expectation doesn't 1027dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// match the call. 1028dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(UnexpectedCallTest, RetiredExpectation) { 1029dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 1030dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(1)) 1031dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .RetiresOnSaturation(); 1032dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1033dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(1); 1034dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE( 1035dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(1), 1036dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Expected: the expectation is active\n" 1037dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Actual: it is retired"); 1038dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1039dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1040dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that Google Mock explains that an expectation that doesn't 1041dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// match the arguments doesn't match the call. 1042dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(UnexpectedCallTest, UnmatchedArguments) { 1043dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 1044dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(1)); 1045dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1046dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE( 1047dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(2), 1048dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Expected arg #0: is equal to 1\n" 1049dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Actual: 2\n"); 1050dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(1); 1051dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1052dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1053dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that Google Mock explains that an expectation with 1054dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// unsatisfied pre-requisites doesn't match the call. 1055dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(UnexpectedCallTest, UnsatisifiedPrerequisites) { 1056dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Sequence s1, s2; 1057dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 1058dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(1)) 1059dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(s1); 1060dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(2)) 1061dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AnyNumber()) 1062dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(s1); 1063dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(3)) 1064dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(s2); 1065dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(4)) 1066dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(s1, s2); 1067dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1068dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ::testing::TestPartResultArray failures; 1069dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { 1070dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ::testing::ScopedFakeTestPartResultReporter reporter(&failures); 1071dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(4); 1072dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Now 'failures' contains the Google Test failures generated by 1073dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // the above statement. 1074dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 1075dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1076dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // There should be one non-fatal failure. 1077dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ASSERT_EQ(1, failures.size()); 1078dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const ::testing::TestPartResult& r = failures.GetTestPartResult(0); 107946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(::testing::TestPartResult::kNonFatalFailure, r.type()); 1080dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1081dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Verifies that the failure message contains the two unsatisfied 1082dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // pre-requisites but not the satisfied one. 108346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#if GTEST_USES_PCRE 108446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(r.message(), ContainsRegex( 1085dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // PCRE has trouble using (.|\n) to match any character, but 1086dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // supports the (?s) prefix for using . to match any character. 1087dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "(?s)the following immediate pre-requisites are not satisfied:\n" 1088dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ".*: pre-requisite #0\n" 108946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ".*: pre-requisite #1")); 109046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#elif GTEST_USES_POSIX_RE 109146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(r.message(), ContainsRegex( 1092dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // POSIX RE doesn't understand the (?s) prefix, but has no trouble 1093dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // with (.|\n). 1094dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "the following immediate pre-requisites are not satisfied:\n" 1095dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "(.|\n)*: pre-requisite #0\n" 109646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "(.|\n)*: pre-requisite #1")); 109746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#else 109846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // We can only use Google Test's own simple regex. 109946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(r.message(), ContainsRegex( 110046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "the following immediate pre-requisites are not satisfied:")); 110146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(r.message(), ContainsRegex(": pre-requisite #0")); 110246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(r.message(), ContainsRegex(": pre-requisite #1")); 110346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif // GTEST_USES_PCRE 1104dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1105dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(1); 1106dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(3); 1107dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(4); 1108dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1109dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1110dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(UndefinedReturnValueTest, ReturnValueIsMandatory) { 1111dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 1112dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // TODO(wan@google.com): We should really verify the output message, 1113dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // but we cannot yet due to that EXPECT_DEATH only captures stderr 1114dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // while Google Mock logs to stdout. 111546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_DEATH_IF_SUPPORTED(a.ReturnResult(1), ""); 1116dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1117dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1118dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that an excessive call (one whose arguments match the 1119dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// matchers but is called too many times) performs the default action. 1120dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExcessiveCallTest, DoesDefaultAction) { 1121dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // When there is an ON_CALL() statement, the action specified by it 1122dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // should be taken. 1123dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 1124dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(a, Binary(_, _)) 1125dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(true)); 1126dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, Binary(0, 0)); 1127dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.Binary(0, 0); 1128dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter bool result = false; 1129dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE(result = a.Binary(0, 0), 1130dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Mock function called more times than expected"); 1131dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(result); 1132dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1133dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // When there is no ON_CALL(), the default value for the return type 1134dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // should be returned. 1135dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 1136dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(0)) 1137dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(0); 1138dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int n = -1; 1139dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE(n = b.DoB(0), 1140dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Mock function called more times than expected"); 1141dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, n); 1142dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1143dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1144dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that when a void function is called too many times, 1145dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// the failure message contains the argument values. 1146dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExcessiveCallTest, GeneratesFailureForVoidFunction) { 1147dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 1148dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(_)) 1149dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(0); 1150dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE( 1151dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(9), 1152dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Mock function called more times than expected - returning directly.\n" 1153dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Function call: DoA(9)\n" 1154dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Expected: to be never called\n" 1155dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Actual: called once - over-saturated and active"); 1156dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1157dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1158dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that when a non-void function is called too many times, the 1159dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// failure message contains the argument values and the return value. 1160dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExcessiveCallTest, GeneratesFailureForNonVoidFunction) { 1161dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 1162dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(_)); 1163dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(1); 1164dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE( 1165dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(2), 1166dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Mock function called more times than expected - " 1167dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "returning default value.\n" 1168dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Function call: DoB(2)\n" 1169dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Returns: 0\n" 1170dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Expected: to be called once\n" 1171dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Actual: called twice - over-saturated and active"); 1172dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1173dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1174dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests using sequences. 1175dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1176dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(InSequenceTest, AllExpectationInScopeAreInSequence) { 1177dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 1178dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { 1179dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter InSequence dummy; 1180dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1181dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)); 1182dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(2)); 1183dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 1184dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1185dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 1186dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(2); 1187dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, "Unexpected mock function call"); 1188dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1189dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 1190dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(2); 1191dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1192dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1193dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(InSequenceTest, NestedInSequence) { 1194dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 1195dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { 1196dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter InSequence dummy; 1197dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1198dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)); 1199dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { 1200dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter InSequence dummy2; 1201dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1202dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(2)); 1203dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(3)); 1204dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 1205dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 1206dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1207dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 1208dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 1209dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(3); 1210dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, "Unexpected mock function call"); 1211dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1212dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(2); 1213dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(3); 1214dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1215dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1216dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(InSequenceTest, ExpectationsOutOfScopeAreNotAffected) { 1217dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 1218dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { 1219dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter InSequence dummy; 1220dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1221dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)); 1222dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(2)); 1223dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 1224dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(3)); 1225dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1226dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ // NOLINT 1227dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(2); 1228dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, "Unexpected mock function call"); 1229dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1230dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(3); 1231dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 1232dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(2); 1233dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1234dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1235dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that any order is allowed when no sequence is used. 1236dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(SequenceTest, AnyOrderIsOkByDefault) { 1237dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { 1238dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 1239dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 1240dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1241dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)); 1242dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 1243dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AnyNumber()); 1244dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1245dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 1246dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(); 1247dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 1248dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1249dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { // NOLINT 1250dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 1251dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 1252dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1253dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)); 1254dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 1255dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AnyNumber()); 1256dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1257dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(); 1258dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 1259dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 1260dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1261dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1262dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that the calls must be in strict order when a complete order 1263dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// is specified. 1264dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(SequenceTest, CallsMustBeInStrictOrderWhenSaidSo) { 1265dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 1266dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Sequence s; 1267dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1268dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, ReturnResult(1)) 1269dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(s) 1270dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(Result())); 1271dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1272dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, ReturnResult(2)) 1273dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(s) 1274dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(Result())); 1275dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1276dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, ReturnResult(3)) 1277dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(s) 1278dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(Result())); 1279dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 128046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_DEATH_IF_SUPPORTED({ 1281dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(1); 1282dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(3); 1283dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(2); 1284dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ""); 1285dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 128646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_DEATH_IF_SUPPORTED({ 1287dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(2); 1288dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(1); 1289dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(3); 1290dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ""); 1291dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1292dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(1); 1293dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(2); 1294dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(3); 1295dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1296dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1297dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests specifying a DAG using multiple sequences. 1298dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(SequenceTest, CallsMustConformToSpecifiedDag) { 1299dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 1300dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 1301dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Sequence x, y; 1302dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1303dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, ReturnResult(1)) 1304dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(x) 1305dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(Result())); 1306dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1307dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 1308dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(2) 1309dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(y); 1310dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1311dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, ReturnResult(2)) 1312dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(x, y) 1313dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return(Result())); 1314dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1315dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, ReturnResult(3)) 1316dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(x) 1317dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(Result())); 1318dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 131946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_DEATH_IF_SUPPORTED({ 1320dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(1); 1321dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(); 1322dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(2); 1323dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ""); 1324dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 132546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_DEATH_IF_SUPPORTED({ 1326dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(2); 1327dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ""); 1328dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 132946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_DEATH_IF_SUPPORTED({ 1330dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(3); 1331dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ""); 1332dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 133346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_DEATH_IF_SUPPORTED({ 1334dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(1); 1335dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(); 1336dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(); 1337dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(3); 1338dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(2); 1339dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, ""); 1340dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1341dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(); 1342dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(1); 1343dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(); 1344dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.ReturnResult(3); 1345dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1346dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1347dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(SequenceTest, Retirement) { 1348dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 1349dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Sequence s; 1350dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1351dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)) 1352dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(s); 1353dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(_)) 1354dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(s) 1355dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .RetiresOnSaturation(); 1356dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(1)) 1357dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(s); 1358dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1359dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 1360dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(2); 1361dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(1); 1362dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1363dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 136446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Tests Expectation. 136546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 136646108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(ExpectationTest, ConstrutorsWork) { 136746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA a; 136846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e1; // Default ctor. 136946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 137046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // Ctor from various forms of EXPECT_CALL. 137146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e2 = EXPECT_CALL(a, DoA(2)); 137246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e3 = EXPECT_CALL(a, DoA(3)).With(_); 137346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan { 137446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Sequence s; 137546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e4 = EXPECT_CALL(a, DoA(4)).Times(1); 137646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e5 = EXPECT_CALL(a, DoA(5)).InSequence(s); 137746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan } 137846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e6 = EXPECT_CALL(a, DoA(6)).After(e2); 137946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e7 = EXPECT_CALL(a, DoA(7)).WillOnce(Return()); 138046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e8 = EXPECT_CALL(a, DoA(8)).WillRepeatedly(Return()); 138146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e9 = EXPECT_CALL(a, DoA(9)).RetiresOnSaturation(); 138246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 138346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e10 = e2; // Copy ctor. 138446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 138546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(e1, Ne(e2)); 138646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(e2, Eq(e10)); 138746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 138846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(2); 138946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(3); 139046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(4); 139146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(5); 139246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(6); 139346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(7); 139446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(8); 139546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(9); 139646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 139746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 139846108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(ExpectationTest, AssignmentWorks) { 139946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA a; 140046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e1; 140146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e2 = EXPECT_CALL(a, DoA(1)); 140246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 140346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(e1, Ne(e2)); 140446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 140546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan e1 = e2; 140646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(e1, Eq(e2)); 140746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 140846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(1); 140946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 141046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 141146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Tests ExpectationSet. 141246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 141346108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(ExpectationSetTest, MemberTypesAreCorrect) { 141446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::StaticAssertTypeEq<Expectation, ExpectationSet::value_type>(); 141546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 141646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 141746108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(ExpectationSetTest, ConstructorsWork) { 141846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA a; 141946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 142046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e1; 142146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const Expectation e2; 142246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet es1; // Default ctor. 142346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet es2 = EXPECT_CALL(a, DoA(1)); // Ctor from EXPECT_CALL. 142446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet es3 = e1; // Ctor from Expectation. 142546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet es4(e1); // Ctor from Expectation; alternative syntax. 142646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet es5 = e2; // Ctor from const Expectation. 142746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet es6(e2); // Ctor from const Expectation; alternative syntax. 142846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet es7 = es2; // Copy ctor. 142946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 143046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(0, es1.size()); 143146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(1, es2.size()); 143246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(1, es3.size()); 143346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(1, es4.size()); 143446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(1, es5.size()); 143546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(1, es6.size()); 143646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(1, es7.size()); 143746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 143846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(es3, Ne(es2)); 143946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(es4, Eq(es3)); 144046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(es5, Eq(es4)); 144146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(es6, Eq(es5)); 144246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(es7, Eq(es2)); 144346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(1); 144446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 144546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 144646108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(ExpectationSetTest, AssignmentWorks) { 144746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet es1; 144846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet es2 = Expectation(); 144946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 145046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan es1 = es2; 145146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(1, es1.size()); 145246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(*(es1.begin()), Eq(Expectation())); 145346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(es1, Eq(es2)); 145446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 145546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 145646108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(ExpectationSetTest, InsertionWorks) { 145746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet es1; 145846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e1; 145946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan es1 += e1; 146046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(1, es1.size()); 146146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(*(es1.begin()), Eq(e1)); 146246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 146346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA a; 146446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e2 = EXPECT_CALL(a, DoA(1)); 146546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan es1 += e2; 146646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(2, es1.size()); 146746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 146846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet::const_iterator it1 = es1.begin(); 146946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet::const_iterator it2 = it1; 147046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ++it2; 147146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_TRUE(*it1 == e1 || *it2 == e1); // e1 must be in the set. 147246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_TRUE(*it1 == e2 || *it2 == e2); // e2 must be in the set too. 147346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(1); 147446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 147546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 147646108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(ExpectationSetTest, SizeWorks) { 147746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet es; 147846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(0, es.size()); 147946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 148046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan es += Expectation(); 148146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(1, es.size()); 148246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 148346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA a; 148446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan es += EXPECT_CALL(a, DoA(1)); 148546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_EQ(2, es.size()); 148646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 148746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(1); 148846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 148946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 149046108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(ExpectationSetTest, IsEnumerable) { 149146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet es; 149246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(es.begin(), Eq(es.end())); 149346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 149446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan es += Expectation(); 149546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet::const_iterator it = es.begin(); 149646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(it, Ne(es.end())); 149746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(*it, Eq(Expectation())); 149846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ++it; 149946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(it, Eq(es.end())); 150046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 150146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 150246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Tests the .After() clause. 150346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 150446108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(AfterTest, SucceedsWhenPartialOrderIsSatisfied) { 150546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA a; 150646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet es; 150746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan es += EXPECT_CALL(a, DoA(1)); 150846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan es += EXPECT_CALL(a, DoA(2)); 150946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(a, DoA(3)) 151046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .After(es); 151146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 151246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(1); 151346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(2); 151446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(3); 151546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 151646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 151746108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(AfterTest, SucceedsWhenTotalOrderIsSatisfied) { 151846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA a; 151946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockB b; 152046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // The following also verifies that const Expectation objects work 152146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // too. Do not remove the const modifiers. 152246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const Expectation e1 = EXPECT_CALL(a, DoA(1)); 152346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const Expectation e2 = EXPECT_CALL(b, DoB()) 152446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .Times(2) 152546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .After(e1); 152646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(a, DoA(2)).After(e2); 152746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 152846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(1); 152946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan b.DoB(); 153046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan b.DoB(); 153146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(2); 153246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 153346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 153446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Calls must be in strict order when specified so. 153546108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(AfterDeathTest, CallsMustBeInStrictOrderWhenSpecifiedSo) { 153646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA a; 153746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockB b; 153846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e1 = EXPECT_CALL(a, DoA(1)); 153946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e2 = EXPECT_CALL(b, DoB()) 154046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .Times(2) 154146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .After(e1); 154246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(a, ReturnResult(2)) 154346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .After(e2) 154446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .WillOnce(Return(Result())); 154546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 154646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(1); 154746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // If a call to ReturnResult() violates the specified order, no 154846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // matching expectation will be found, and thus the default action 154946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // will be done. Since the return type of ReturnResult() is not a 155046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // built-in type, gmock won't know what to return and will thus 155146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // abort the program. Therefore a death test can tell us whether 155246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // gmock catches the order violation correctly. 155346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // 155446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // gtest and gmock print messages to stdout, which isn't captured by 155546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // death tests. Therefore we have to match with an empty regular 155646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // expression in all the EXPECT_DEATH()s. 155746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_DEATH_IF_SUPPORTED(a.ReturnResult(2), ""); 155846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 155946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan b.DoB(); 156046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_DEATH_IF_SUPPORTED(a.ReturnResult(2), ""); 156146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 156246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan b.DoB(); 156346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.ReturnResult(2); 156446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 156546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 156646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Calls must satisfy the partial order when specified so. 156746108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(AfterDeathTest, CallsMustSatisfyPartialOrderWhenSpecifiedSo) { 156846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA a; 156946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e = EXPECT_CALL(a, DoA(1)); 157046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const ExpectationSet es = EXPECT_CALL(a, DoA(2)); 157146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(a, ReturnResult(3)) 157246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .After(e, es) 157346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .WillOnce(Return(Result())); 157446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 157546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_DEATH_IF_SUPPORTED(a.ReturnResult(3), ""); 157646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 157746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(2); 157846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_DEATH_IF_SUPPORTED(a.ReturnResult(3), ""); 157946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 158046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(1); 158146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.ReturnResult(3); 158246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 158346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 158446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// .After() can be combined with .InSequence(). 158546108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(AfterDeathTest, CanBeUsedWithInSequence) { 158646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA a; 158746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Sequence s; 158846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e = EXPECT_CALL(a, DoA(1)); 158946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(a, DoA(2)).InSequence(s); 159046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(a, ReturnResult(3)) 159146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .InSequence(s).After(e) 159246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .WillOnce(Return(Result())); 159346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 159446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(1); 159546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_DEATH_IF_SUPPORTED(a.ReturnResult(3), ""); 159646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 159746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(2); 159846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.ReturnResult(3); 159946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 160046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 160146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// .After() can be called multiple times. 160246108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(AfterTest, CanBeCalledManyTimes) { 160346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA a; 160446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e1 = EXPECT_CALL(a, DoA(1)); 160546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e2 = EXPECT_CALL(a, DoA(2)); 160646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e3 = EXPECT_CALL(a, DoA(3)); 160746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(a, DoA(4)) 160846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .After(e1) 160946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .After(e2) 161046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .After(e3); 161146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 161246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(3); 161346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(1); 161446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(2); 161546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(4); 161646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 161746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 161846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// .After() accepts up to 5 arguments. 161946108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(AfterTest, AcceptsUpToFiveArguments) { 162046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA a; 162146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e1 = EXPECT_CALL(a, DoA(1)); 162246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e2 = EXPECT_CALL(a, DoA(2)); 162346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e3 = EXPECT_CALL(a, DoA(3)); 162446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet es1 = EXPECT_CALL(a, DoA(4)); 162546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet es2 = EXPECT_CALL(a, DoA(5)); 162646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(a, DoA(6)) 162746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .After(e1, e2, e3, es1, es2); 162846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 162946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(5); 163046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(2); 163146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(4); 163246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(1); 163346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(3); 163446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(6); 163546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 163646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 163746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// .After() allows input to contain duplicated Expectations. 163846108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(AfterTest, AcceptsDuplicatedInput) { 163946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA a; 164046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e1 = EXPECT_CALL(a, DoA(1)); 164146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e2 = EXPECT_CALL(a, DoA(2)); 164246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet es; 164346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan es += e1; 164446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan es += e2; 164546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(a, ReturnResult(3)) 164646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .After(e1, e2, es, e1) 164746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .WillOnce(Return(Result())); 164846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 164946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(1); 165046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_DEATH_IF_SUPPORTED(a.ReturnResult(3), ""); 165146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 165246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(2); 165346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.ReturnResult(3); 165446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 165546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 165646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// An Expectation added to an ExpectationSet after it has been used in 165746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// an .After() has no effect. 165846108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(AfterTest, ChangesToExpectationSetHaveNoEffectAfterwards) { 165946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA a; 166046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ExpectationSet es1 = EXPECT_CALL(a, DoA(1)); 166146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan Expectation e2 = EXPECT_CALL(a, DoA(2)); 166246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(a, DoA(3)) 166346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .After(es1); 166446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan es1 += e2; 166546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 166646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(1); 166746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(3); 166846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(2); 166946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 167046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 1671dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that Google Mock correctly handles calls to mock functions 1672dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// after a mock object owning one of their pre-requisites has died. 1673dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1674dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that calls that satisfy the original spec are successful. 1675dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(DeletingMockEarlyTest, Success1) { 1676dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB* const b1 = new MockB; 1677dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA* const a = new MockA; 1678dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB* const b2 = new MockB; 1679dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1680dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { 1681dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter InSequence dummy; 1682dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*b1, DoB(_)) 1683dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)); 1684dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*a, Binary(_, _)) 1685dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AnyNumber()) 1686dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return(true)); 1687dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*b2, DoB(_)) 1688dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AnyNumber()) 1689dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return(2)); 1690dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 1691dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1692dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(1, b1->DoB(1)); 1693dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter delete b1; 1694dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // a's pre-requisite has died. 1695dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(a->Binary(0, 1)); 1696dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter delete b2; 1697dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // a's successor has died. 1698dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(a->Binary(1, 2)); 1699dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter delete a; 1700dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1701dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1702dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that calls that satisfy the original spec are successful. 1703dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(DeletingMockEarlyTest, Success2) { 1704dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB* const b1 = new MockB; 1705dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA* const a = new MockA; 1706dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB* const b2 = new MockB; 1707dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1708dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { 1709dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter InSequence dummy; 1710dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*b1, DoB(_)) 1711dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)); 1712dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*a, Binary(_, _)) 1713dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AnyNumber()); 1714dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*b2, DoB(_)) 1715dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AnyNumber()) 1716dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return(2)); 1717dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 1718dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1719dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter delete a; // a is trivially satisfied. 1720dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(1, b1->DoB(1)); 1721dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(2, b2->DoB(2)); 1722dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter delete b1; 1723dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter delete b2; 1724dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1725dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1726dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that it's OK to delete a mock object itself in its action. 1727dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 172846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Suppresses warning on unreferenced formal parameter in MSVC with 172946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// -W4. 173046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#ifdef _MSC_VER 173146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# pragma warning(push) 173246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# pragma warning(disable:4100) 173346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif 173446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 1735dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterACTION_P(Delete, ptr) { delete ptr; } 1736dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 173746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#ifdef _MSC_VER 173846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# pragma warning(pop) 173946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif 174046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 1741dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(DeletingMockEarlyTest, CanDeleteSelfInActionReturningVoid) { 1742dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA* const a = new MockA; 1743dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*a, DoA(_)).WillOnce(Delete(a)); 1744dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a->DoA(42); // This will cause a to be deleted. 1745dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1746dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1747dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(DeletingMockEarlyTest, CanDeleteSelfInActionReturningValue) { 1748dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA* const a = new MockA; 1749dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*a, ReturnResult(_)) 1750dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(DoAll(Delete(a), Return(Result()))); 1751dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a->ReturnResult(42); // This will cause a to be deleted. 1752dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1753dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1754dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that calls that violate the original spec yield failures. 1755dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(DeletingMockEarlyTest, Failure1) { 1756dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB* const b1 = new MockB; 1757dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA* const a = new MockA; 1758dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB* const b2 = new MockB; 1759dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1760dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { 1761dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter InSequence dummy; 1762dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*b1, DoB(_)) 1763dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)); 1764dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*a, Binary(_, _)) 1765dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AnyNumber()); 1766dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*b2, DoB(_)) 1767dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AnyNumber()) 1768dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillRepeatedly(Return(2)); 1769dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 1770dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1771dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter delete a; // a is trivially satisfied. 1772dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE({ 1773dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b2->DoB(2); 1774dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }, "Unexpected mock function call"); 1775dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(1, b1->DoB(1)); 1776dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter delete b1; 1777dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter delete b2; 1778dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1779dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1780dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that calls that violate the original spec yield failures. 1781dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(DeletingMockEarlyTest, Failure2) { 1782dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB* const b1 = new MockB; 1783dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA* const a = new MockA; 1784dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB* const b2 = new MockB; 1785dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1786dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter { 1787dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter InSequence dummy; 1788dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*b1, DoB(_)); 1789dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*a, Binary(_, _)) 1790dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AnyNumber()); 1791dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*b2, DoB(_)) 1792dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AnyNumber()); 1793dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 1794dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1795dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE(delete b1, 1796dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Actual: never called"); 1797dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE(a->Binary(0, 1), 1798dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Unexpected mock function call"); 1799dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE(b2->DoB(1), 1800dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Unexpected mock function call"); 1801dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter delete a; 1802dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter delete b2; 1803dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1804dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1805dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass EvenNumberCardinality : public CardinalityInterface { 1806dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 1807dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Returns true iff call_count calls will satisfy this cardinality. 1808dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual bool IsSatisfiedByCallCount(int call_count) const { 1809dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return call_count % 2 == 0; 1810dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 1811dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1812dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Returns true iff call_count calls will saturate this cardinality. 181346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual bool IsSaturatedByCallCount(int /* call_count */) const { 181446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return false; 181546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan } 1816dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1817dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Describes self to an ostream. 1818dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual void DescribeTo(::std::ostream* os) const { 1819dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter *os << "called even number of times"; 1820dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 1821dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 1822dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1823dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterCardinality EvenNumber() { 1824dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return Cardinality(new EvenNumberCardinality); 1825dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1826dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1827dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(ExpectationBaseTest, 1828dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter AllPrerequisitesAreSatisfiedWorksForNonMonotonicCardinality) { 1829dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA* a = new MockA; 1830dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Sequence s; 1831dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1832dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*a, DoA(1)) 1833dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(EvenNumber()) 1834dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(s); 1835dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*a, DoA(2)) 1836dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AnyNumber()) 1837dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .InSequence(s); 1838dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*a, DoA(3)) 1839dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .Times(AnyNumber()); 1840dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1841dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a->DoA(3); 1842dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a->DoA(1); 1843dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE(a->DoA(2), "Unexpected mock function call"); 1844dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE(delete a, "to be called even number of times"); 1845dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1846dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1847dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// The following tests verify the message generated when a mock 1848dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// function is called. 1849dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1850dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterstruct Printable { 1851dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 1852dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1853dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline void operator<<(::std::ostream& os, const Printable&) { 1854dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter os << "Printable"; 1855dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1856dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1857dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterstruct Unprintable { 1858dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Unprintable() : value(0) {} 1859dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int value; 1860dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 1861dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1862dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass MockC { 1863dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 186446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockC() {} 186546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 1866dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MOCK_METHOD6(VoidMethod, void(bool cond, int n, string s, void* p, 1867dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const Printable& x, Unprintable y)); 1868dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MOCK_METHOD0(NonVoidMethod, int()); // NOLINT 186946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 187046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private: 187146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_COPY_AND_ASSIGN_(MockC); 1872dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 1873dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 187446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanclass VerboseFlagPreservingFixture : public testing::Test { 187546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan protected: 187646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // The code needs to work when both ::string and ::std::string are defined 187746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // and the flag is implemented as a testing::internal::String. In this 187846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // case, without the call to c_str(), the compiler will complain that it 187946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // cannot figure out what overload of string constructor to use. 188046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // TODO(vladl@google.com): Use internal::string instead of String for 188146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // string flags in Google Test. 188246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan VerboseFlagPreservingFixture() 188346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan : saved_verbose_flag_(GMOCK_FLAG(verbose).c_str()) {} 188446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 188546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ~VerboseFlagPreservingFixture() { GMOCK_FLAG(verbose) = saved_verbose_flag_; } 188646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 188746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private: 188846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const string saved_verbose_flag_; 188946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 189046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_COPY_AND_ASSIGN_(VerboseFlagPreservingFixture); 189146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 189246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 189346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#if GTEST_HAS_STREAM_REDIRECTION 1894dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1895dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that an uninteresting mock function call generates a warning 1896dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// containing the stack trace. 1897dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(FunctionCallMessageTest, UninterestingCallGeneratesFyiWithStackTrace) { 1898dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockC c; 189946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan CaptureStdout(); 1900dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable()); 190146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const String output = GetCapturedStdout(); 1902dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_PRED_FORMAT2(IsSubstring, "GMOCK WARNING", output); 1903dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_PRED_FORMAT2(IsSubstring, "Stack trace:", output); 190446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 190546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# ifndef NDEBUG 190646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 1907dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // We check the stack trace content in dbg-mode only, as opt-mode 1908dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // may inline the call we are interested in seeing. 1909dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1910dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Verifies that a void mock function's name appears in the stack 1911dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // trace. 191246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_PRED_FORMAT2(IsSubstring, "VoidMethod(", output); 1913dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1914dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Verifies that a non-void mock function's name appears in the 1915dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // stack trace. 191646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan CaptureStdout(); 1917dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter c.NonVoidMethod(); 191846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const String output2 = GetCapturedStdout(); 191946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_PRED_FORMAT2(IsSubstring, "NonVoidMethod(", output2); 192046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 192146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# endif // NDEBUG 1922dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1923dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1924dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that an uninteresting mock function call causes the function 1925dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// arguments and return value to be printed. 1926dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(FunctionCallMessageTest, UninterestingCallPrintsArgumentsAndReturnValue) { 1927dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // A non-void mock function. 1928dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 192946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan CaptureStdout(); 1930dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(); 193146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const String output1 = GetCapturedStdout(); 1932dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_PRED_FORMAT2( 1933dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter IsSubstring, 1934dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Uninteresting mock function call - returning default value.\n" 1935dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Function call: DoB()\n" 193646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan " Returns: 0\n", output1.c_str()); 1937dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Makes sure the return value is printed. 1938dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1939dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // A void mock function. 1940dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockC c; 194146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan CaptureStdout(); 1942dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable()); 194346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const String output2 = GetCapturedStdout(); 194446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(output2.c_str(), 194546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ContainsRegex( 194646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Uninteresting mock function call - returning directly\\.\n" 194746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan " Function call: VoidMethod" 194846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "\\(false, 5, \"Hi\", NULL, @.+ " 194946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Printable, 4-byte object <00-00 00-00>\\)")); 1950dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // A void function has no return value to print. 1951dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1952dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1953dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests how the --gmock_verbose flag affects Google Mock's output. 1954dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 195546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanclass GMockVerboseFlagTest : public VerboseFlagPreservingFixture { 1956dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 1957dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Verifies that the given Google Mock output is correct. (When 1958dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // should_print is true, the output should match the given regex and 1959dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // contain the given function name in the stack trace. When it's 1960dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // false, the output should be empty.) 196146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan void VerifyOutput(const String& output, bool should_print, 196246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const string& expected_substring, 1963dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const string& function_name) { 1964dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter if (should_print) { 196546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(output.c_str(), HasSubstr(expected_substring)); 196646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# ifndef NDEBUG 1967dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // We check the stack trace content in dbg-mode only, as opt-mode 1968dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // may inline the call we are interested in seeing. 196946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_THAT(output.c_str(), HasSubstr(function_name)); 197046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# else 197146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // Suppresses 'unused function parameter' warnings. 197246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan static_cast<void>(function_name); 197346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# endif // NDEBUG 1974dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } else { 197546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_STREQ("", output.c_str()); 1976dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 1977dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 1978dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1979dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Tests how the flag affects expected calls. 1980dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter void TestExpectedCall(bool should_print) { 1981dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 1982dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, DoA(5)); 1983dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, Binary(_, 1)) 1984dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(true)); 1985dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1986dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // A void-returning function. 198746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan CaptureStdout(); 1988dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(5); 1989dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter VerifyOutput( 199046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GetCapturedStdout(), 1991dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter should_print, 199246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Mock function call matches EXPECT_CALL(a, DoA(5))...\n" 199346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan " Function call: DoA(5)\n" 199446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Stack trace:\n", 199546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "DoA"); 1996dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1997dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // A non-void-returning function. 199846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan CaptureStdout(); 1999dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.Binary(2, 1); 2000dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter VerifyOutput( 200146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GetCapturedStdout(), 2002dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter should_print, 200346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Mock function call matches EXPECT_CALL(a, Binary(_, 1))...\n" 200446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan " Function call: Binary(2, 1)\n" 2005dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Returns: true\n" 200646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Stack trace:\n", 200746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Binary"); 2008dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 2009dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2010dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Tests how the flag affects uninteresting calls. 2011dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter void TestUninterestingCall(bool should_print) { 2012dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 2013dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2014dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // A void-returning function. 201546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan CaptureStdout(); 2016dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.DoA(5); 2017dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter VerifyOutput( 201846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GetCapturedStdout(), 2019dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter should_print, 2020dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "\nGMOCK WARNING:\n" 202146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Uninteresting mock function call - returning directly.\n" 202246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan " Function call: DoA(5)\n" 202346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Stack trace:\n", 202446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "DoA"); 2025dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2026dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // A non-void-returning function. 202746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan CaptureStdout(); 2028dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a.Binary(2, 1); 2029dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter VerifyOutput( 203046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GetCapturedStdout(), 2031dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter should_print, 2032dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "\nGMOCK WARNING:\n" 203346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Uninteresting mock function call - returning default value.\n" 203446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan " Function call: Binary(2, 1)\n" 2035dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter " Returns: false\n" 203646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Stack trace:\n", 203746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan "Binary"); 2038dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 2039dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 2040dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2041dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that --gmock_verbose=info causes both expected and 2042dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// uninteresting calls to be reported. 2043dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST_F(GMockVerboseFlagTest, Info) { 2044dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FLAG(verbose) = kInfoVerbosity; 2045dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter TestExpectedCall(true); 2046dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter TestUninterestingCall(true); 2047dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2048dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2049dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that --gmock_verbose=warning causes uninteresting calls to be 2050dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// reported. 2051dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST_F(GMockVerboseFlagTest, Warning) { 2052dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FLAG(verbose) = kWarningVerbosity; 2053dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter TestExpectedCall(false); 2054dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter TestUninterestingCall(true); 2055dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2056dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2057dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that --gmock_verbose=warning causes neither expected nor 2058dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// uninteresting calls to be reported. 2059dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST_F(GMockVerboseFlagTest, Error) { 2060dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FLAG(verbose) = kErrorVerbosity; 2061dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter TestExpectedCall(false); 2062dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter TestUninterestingCall(false); 2063dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2064dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2065dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that --gmock_verbose=SOME_INVALID_VALUE has the same effect 2066dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// as --gmock_verbose=warning. 2067dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST_F(GMockVerboseFlagTest, InvalidFlagIsTreatedAsWarning) { 2068dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FLAG(verbose) = "invalid"; // Treated as "warning". 2069dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter TestExpectedCall(false); 2070dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter TestUninterestingCall(true); 2071dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2072dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 207346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif // GTEST_HAS_STREAM_REDIRECTION 2074dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2075dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// A helper class that generates a failure when printed. We use it to 2076dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// ensure that Google Mock doesn't print a value (even to an internal 2077dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// buffer) when it is not supposed to do so. 2078dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass PrintMeNot {}; 2079dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2080dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtervoid PrintTo(PrintMeNot /* dummy */, ::std::ostream* /* os */) { 2081dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ADD_FAILURE() << "Google Mock is printing a value that shouldn't be " 2082dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter << "printed even to an internal buffer."; 2083dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2084dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2085dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass LogTestHelper { 2086dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 208746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan LogTestHelper() {} 208846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 2089dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MOCK_METHOD1(Foo, PrintMeNot(PrintMeNot)); 209046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 209146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private: 209246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_COPY_AND_ASSIGN_(LogTestHelper); 2093dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 2094dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 209546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanclass GMockLogTest : public VerboseFlagPreservingFixture { 2096dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter protected: 2097dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter LogTestHelper helper_; 2098dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 2099dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2100dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST_F(GMockLogTest, DoesNotPrintGoodCallInternallyIfVerbosityIsWarning) { 2101dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FLAG(verbose) = kWarningVerbosity; 2102dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(helper_, Foo(_)) 2103dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(PrintMeNot())); 2104dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter helper_.Foo(PrintMeNot()); // This is an expected call. 2105dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2106dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2107dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST_F(GMockLogTest, DoesNotPrintGoodCallInternallyIfVerbosityIsError) { 2108dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FLAG(verbose) = kErrorVerbosity; 2109dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(helper_, Foo(_)) 2110dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(PrintMeNot())); 2111dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter helper_.Foo(PrintMeNot()); // This is an expected call. 2112dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2113dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2114dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST_F(GMockLogTest, DoesNotPrintWarningInternallyIfVerbosityIsError) { 2115dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FLAG(verbose) = kErrorVerbosity; 2116dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(helper_, Foo(_)) 2117dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(PrintMeNot())); 2118dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter helper_.Foo(PrintMeNot()); // This should generate a warning. 2119dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2120dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2121dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests Mock::AllowLeak(). 2122dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2123dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(AllowLeakTest, AllowsLeakingUnusedMockObject) { 2124dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA* a = new MockA; 2125dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::AllowLeak(a); 2126dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2127dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2128dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(AllowLeakTest, CanBeCalledBeforeOnCall) { 2129dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA* a = new MockA; 2130dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::AllowLeak(a); 2131dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(*a, DoA(_)).WillByDefault(Return()); 2132dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a->DoA(0); 2133dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2134dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2135dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(AllowLeakTest, CanBeCalledAfterOnCall) { 2136dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA* a = new MockA; 2137dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(*a, DoA(_)).WillByDefault(Return()); 2138dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::AllowLeak(a); 2139dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2140dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2141dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(AllowLeakTest, CanBeCalledBeforeExpectCall) { 2142dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA* a = new MockA; 2143dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::AllowLeak(a); 2144dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*a, DoA(_)); 2145dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter a->DoA(0); 2146dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2147dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2148dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(AllowLeakTest, CanBeCalledAfterExpectCall) { 2149dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA* a = new MockA; 2150dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*a, DoA(_)).Times(AnyNumber()); 2151dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::AllowLeak(a); 2152dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2153dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2154dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(AllowLeakTest, WorksWhenBothOnCallAndExpectCallArePresent) { 2155dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA* a = new MockA; 2156dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(*a, DoA(_)).WillByDefault(Return()); 2157dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(*a, DoA(_)).Times(AnyNumber()); 2158dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::AllowLeak(a); 2159dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2160dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2161dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that we can verify and clear a mock object's expectations 2162dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// when none of its methods has expectations. 2163dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(VerifyAndClearExpectationsTest, NoMethodHasExpectations) { 2164dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 2165dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b)); 2166dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2167dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // There should be no expectations on the methods now, so we can 2168dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // freely call them. 2169dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB()); 2170dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB(1)); 2171dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2172dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2173dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that we can verify and clear a mock object's expectations 2174dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// when some, but not all, of its methods have expectations *and* the 2175dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// verification succeeds. 2176dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(VerifyAndClearExpectationsTest, SomeMethodsHaveExpectationsAndSucceed) { 2177dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 2178dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 2179dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)); 2180dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(); 2181dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b)); 2182dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2183dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // There should be no expectations on the methods now, so we can 2184dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // freely call them. 2185dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB()); 2186dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB(1)); 2187dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2188dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2189dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that we can verify and clear a mock object's expectations 2190dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// when some, but not all, of its methods have expectations *and* the 2191dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// verification fails. 2192dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(VerifyAndClearExpectationsTest, SomeMethodsHaveExpectationsAndFail) { 2193dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 2194dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 2195dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)); 219646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan bool result = true; 2197dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClearExpectations(&b), 2198dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Actual: never called"); 2199dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ASSERT_FALSE(result); 2200dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2201dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // There should be no expectations on the methods now, so we can 2202dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // freely call them. 2203dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB()); 2204dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB(1)); 2205dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2206dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2207dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that we can verify and clear a mock object's expectations 2208dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// when all of its methods have expectations. 2209dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(VerifyAndClearExpectationsTest, AllMethodsHaveExpectations) { 2210dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 2211dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 2212dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)); 2213dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(_)) 2214dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(2)); 2215dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(); 2216dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(1); 2217dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b)); 2218dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2219dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // There should be no expectations on the methods now, so we can 2220dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // freely call them. 2221dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB()); 2222dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB(1)); 2223dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2224dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2225dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that we can verify and clear a mock object's expectations 2226dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// when a method has more than one expectation. 2227dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(VerifyAndClearExpectationsTest, AMethodHasManyExpectations) { 2228dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 2229dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(0)) 2230dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)); 2231dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(_)) 2232dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(2)); 2233dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(1); 223446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan bool result = true; 2235dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClearExpectations(&b), 2236dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Actual: never called"); 2237dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ASSERT_FALSE(result); 2238dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2239dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // There should be no expectations on the methods now, so we can 2240dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // freely call them. 2241dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB()); 2242dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB(1)); 2243dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2244dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2245dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that we can call VerifyAndClearExpectations() on the same 2246dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// mock object multiple times. 2247dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(VerifyAndClearExpectationsTest, CanCallManyTimes) { 2248dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 2249dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()); 2250dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(); 2251dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::VerifyAndClearExpectations(&b); 2252dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2253dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(_)) 2254dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(1)); 2255dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(1); 2256dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::VerifyAndClearExpectations(&b); 2257dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::VerifyAndClearExpectations(&b); 2258dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2259dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // There should be no expectations on the methods now, so we can 2260dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // freely call them. 2261dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB()); 2262dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB(1)); 2263dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2264dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2265dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that we can clear a mock object's default actions when none 2266dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// of its methods has default actions. 2267dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(VerifyAndClearTest, NoMethodHasDefaultActions) { 2268dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 2269dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // If this crashes or generates a failure, the test will catch it. 2270dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::VerifyAndClear(&b); 2271dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB()); 2272dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2273dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2274dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that we can clear a mock object's default actions when some, 2275dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// but not all of its methods have default actions. 2276dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(VerifyAndClearTest, SomeMethodsHaveDefaultActions) { 2277dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 2278dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(b, DoB()) 2279dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(1)); 2280dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2281dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::VerifyAndClear(&b); 2282dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2283dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Verifies that the default action of int DoB() was removed. 2284dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB()); 2285dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2286dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2287dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that we can clear a mock object's default actions when all of 2288dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// its methods have default actions. 2289dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(VerifyAndClearTest, AllMethodsHaveDefaultActions) { 2290dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 2291dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(b, DoB()) 2292dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(1)); 2293dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(b, DoB(_)) 2294dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(2)); 2295dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2296dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::VerifyAndClear(&b); 2297dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2298dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Verifies that the default action of int DoB() was removed. 2299dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB()); 2300dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2301dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Verifies that the default action of int DoB(int) was removed. 2302dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB(0)); 2303dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2304dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2305dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that we can clear a mock object's default actions when a 2306dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// method has more than one ON_CALL() set on it. 2307dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(VerifyAndClearTest, AMethodHasManyDefaultActions) { 2308dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 2309dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(b, DoB(0)) 2310dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(1)); 2311dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(b, DoB(_)) 2312dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(2)); 2313dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2314dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::VerifyAndClear(&b); 2315dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2316dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Verifies that the default actions (there are two) of int DoB(int) 2317dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // were removed. 2318dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB(0)); 2319dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB(1)); 2320dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2321dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2322dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that we can call VerifyAndClear() on a mock object multiple 2323dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// times. 2324dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(VerifyAndClearTest, CanCallManyTimes) { 2325dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 2326dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(b, DoB()) 2327dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(1)); 2328dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::VerifyAndClear(&b); 2329dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::VerifyAndClear(&b); 2330dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2331dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(b, DoB(_)) 2332dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(1)); 2333dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::VerifyAndClear(&b); 2334dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2335dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB()); 2336dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB(1)); 2337dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2338dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2339dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that VerifyAndClear() works when the verification succeeds. 2340dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(VerifyAndClearTest, Success) { 2341dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 2342dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(b, DoB()) 2343dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(1)); 2344dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(1)) 2345dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(2)); 2346dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2347dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(); 2348dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(1); 2349dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ASSERT_TRUE(Mock::VerifyAndClear(&b)); 2350dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2351dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // There should be no expectations on the methods now, so we can 2352dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // freely call them. 2353dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB()); 2354dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB(1)); 2355dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2356dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2357dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that VerifyAndClear() works when the verification fails. 2358dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(VerifyAndClearTest, Failure) { 2359dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 2360dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(b, DoB(_)) 2361dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(1)); 2362dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 2363dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(2)); 2364dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2365dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(1); 236646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan bool result = true; 2367dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClear(&b), 2368dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter "Actual: never called"); 2369dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ASSERT_FALSE(result); 2370dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2371dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // There should be no expectations on the methods now, so we can 2372dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // freely call them. 2373dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB()); 2374dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB(1)); 2375dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2376dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2377dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that VerifyAndClear() works when the default actions and 2378dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// expectations are set on a const mock object. 2379dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(VerifyAndClearTest, Const) { 2380dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 2381dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(Const(b), DoB()) 2382dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(1)); 2383dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2384dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(Const(b), DoB()) 2385dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(DoDefault()) 2386dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(2)); 2387dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2388dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(); 2389dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(); 2390dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ASSERT_TRUE(Mock::VerifyAndClear(&b)); 2391dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2392dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // There should be no expectations on the methods now, so we can 2393dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // freely call them. 2394dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB()); 2395dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(0, b.DoB(1)); 2396dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2397dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2398dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that we can set default actions and expectations on a mock 2399dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// object after VerifyAndClear() has been called on it. 2400dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(VerifyAndClearTest, CanSetDefaultActionsAndExpectationsAfterwards) { 2401dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b; 2402dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(b, DoB()) 2403dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(1)); 2404dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB(_)) 2405dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(2)); 2406dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b.DoB(1); 2407dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2408dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::VerifyAndClear(&b); 2409dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2410dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b, DoB()) 2411dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(3)); 2412dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(b, DoB(_)) 2413dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(4)); 2414dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2415dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(3, b.DoB()); 2416dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(4, b.DoB(1)); 2417dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2418dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2419dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that calling VerifyAndClear() on one mock object does not 2420dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// affect other mock objects (either of the same type or not). 2421dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(VerifyAndClearTest, DoesNotAffectOtherMockObjects) { 2422dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockA a; 2423dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b1; 2424dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MockB b2; 2425dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2426dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(a, Binary(_, _)) 2427dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(true)); 2428dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(a, Binary(_, _)) 2429dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(DoDefault()) 2430dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(false)); 2431dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2432dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(b1, DoB()) 2433dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(1)); 2434dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b1, DoB(_)) 2435dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillOnce(Return(2)); 2436dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2437dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ON_CALL(b2, DoB()) 2438dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter .WillByDefault(Return(3)); 2439dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_CALL(b2, DoB(_)); 2440dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2441dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter b2.DoB(0); 2442dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Mock::VerifyAndClear(&b2); 2443dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2444dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Verifies that the default actions and expectations of a and b1 2445dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // are still in effect. 2446dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_TRUE(a.Binary(0, 0)); 2447dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_FALSE(a.Binary(0, 0)); 2448dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2449dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(1, b1.DoB()); 2450dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter EXPECT_EQ(2, b1.DoB(0)); 2451dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2452dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 245346108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(VerifyAndClearTest, 245446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan DestroyingChainedMocksDoesNotDeadlockThroughExpectations) { 245546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan linked_ptr<MockA> a(new MockA); 245646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ReferenceHoldingMock test_mock; 245746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 245846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // EXPECT_CALL stores a reference to a inside test_mock. 245946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(test_mock, AcceptReference(_)) 246046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .WillRepeatedly(SetArgPointee<0>(a)); 246146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 246246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // Throw away the reference to the mock that we have in a. After this, the 246346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // only reference to it is stored by test_mock. 246446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.reset(); 246546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 246646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // When test_mock goes out of scope, it destroys the last remaining reference 246746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // to the mock object originally pointed to by a. This will cause the MockA 246846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // destructor to be called from inside the ReferenceHoldingMock destructor. 246946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // The state of all mocks is protected by a single global lock, but there 247046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // should be no deadlock. 247146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 247246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 247346108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(VerifyAndClearTest, 247446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan DestroyingChainedMocksDoesNotDeadlockThroughDefaultAction) { 247546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan linked_ptr<MockA> a(new MockA); 247646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ReferenceHoldingMock test_mock; 247746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 247846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // ON_CALL stores a reference to a inside test_mock. 247946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ON_CALL(test_mock, AcceptReference(_)) 248046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .WillByDefault(SetArgPointee<0>(a)); 248146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 248246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // Throw away the reference to the mock that we have in a. After this, the 248346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // only reference to it is stored by test_mock. 248446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.reset(); 248546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 248646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // When test_mock goes out of scope, it destroys the last remaining reference 248746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // to the mock object originally pointed to by a. This will cause the MockA 248846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // destructor to be called from inside the ReferenceHoldingMock destructor. 248946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // The state of all mocks is protected by a single global lock, but there 249046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // should be no deadlock. 249146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 249246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 2493dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests that a mock function's action can call a mock function 2494dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// (either the same function or a different one) either as an explicit 2495dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// action or as a default action without causing a dead lock. It 2496dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// verifies that the action is not performed inside the critical 2497dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// section. 249846108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanTEST(SynchronizationTest, CanCallMockMethodInAction) { 249946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockA a; 250046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MockC c; 250146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ON_CALL(a, DoA(_)) 250246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .WillByDefault(IgnoreResult(InvokeWithoutArgs(&c, 250346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan &MockC::NonVoidMethod))); 250446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(a, DoA(1)); 250546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(a, DoA(1)) 250646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .WillOnce(Invoke(&a, &MockA::DoA)) 250746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan .RetiresOnSaturation(); 250846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan EXPECT_CALL(c, NonVoidMethod()); 2509dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 251046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan a.DoA(1); 251146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // This will match the second EXPECT_CALL() and trigger another a.DoA(1), 251246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // which will in turn match the first EXPECT_CALL() and trigger a call to 251346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // c.NonVoidMethod() that was specified by the ON_CALL() since the first 251446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // EXPECT_CALL() did not specify an action. 2515dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2516dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2517dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} // namespace 2518dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 251946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Allows the user to define his own main and then invoke gmock_main 252046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// from it. This might be necessary on some platforms which require 252146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// specific setup and teardown. 252246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#if GMOCK_RENAME_MAIN 252346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanint gmock_main(int argc, char **argv) { 252446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#else 2525dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterint main(int argc, char **argv) { 252646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#endif // GMOCK_RENAME_MAIN 2527dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter testing::InitGoogleMock(&argc, argv); 2528dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2529dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Ensures that the tests pass no matter what value of 2530dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // --gmock_catch_leaked_mocks and --gmock_verbose the user specifies. 2531dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter testing::GMOCK_FLAG(catch_leaked_mocks) = true; 2532dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter testing::GMOCK_FLAG(verbose) = testing::internal::kWarningVerbosity; 2533dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2534dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return RUN_ALL_TESTS(); 2535dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 2536