113481Sgiacomo.travaglini@arm.com// This file was GENERATED by command: 213481Sgiacomo.travaglini@arm.com// pump.py gmock-generated-nice-strict.h.pump 313481Sgiacomo.travaglini@arm.com// DO NOT EDIT BY HAND!!! 413481Sgiacomo.travaglini@arm.com 513481Sgiacomo.travaglini@arm.com// Copyright 2008, Google Inc. 613481Sgiacomo.travaglini@arm.com// All rights reserved. 713481Sgiacomo.travaglini@arm.com// 813481Sgiacomo.travaglini@arm.com// Redistribution and use in source and binary forms, with or without 913481Sgiacomo.travaglini@arm.com// modification, are permitted provided that the following conditions are 1013481Sgiacomo.travaglini@arm.com// met: 1113481Sgiacomo.travaglini@arm.com// 1213481Sgiacomo.travaglini@arm.com// * Redistributions of source code must retain the above copyright 1313481Sgiacomo.travaglini@arm.com// notice, this list of conditions and the following disclaimer. 1413481Sgiacomo.travaglini@arm.com// * Redistributions in binary form must reproduce the above 1513481Sgiacomo.travaglini@arm.com// copyright notice, this list of conditions and the following disclaimer 1613481Sgiacomo.travaglini@arm.com// in the documentation and/or other materials provided with the 1713481Sgiacomo.travaglini@arm.com// distribution. 1813481Sgiacomo.travaglini@arm.com// * Neither the name of Google Inc. nor the names of its 1913481Sgiacomo.travaglini@arm.com// contributors may be used to endorse or promote products derived from 2013481Sgiacomo.travaglini@arm.com// this software without specific prior written permission. 2113481Sgiacomo.travaglini@arm.com// 2213481Sgiacomo.travaglini@arm.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2313481Sgiacomo.travaglini@arm.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2413481Sgiacomo.travaglini@arm.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2513481Sgiacomo.travaglini@arm.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2613481Sgiacomo.travaglini@arm.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2713481Sgiacomo.travaglini@arm.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2813481Sgiacomo.travaglini@arm.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2913481Sgiacomo.travaglini@arm.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3013481Sgiacomo.travaglini@arm.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3113481Sgiacomo.travaglini@arm.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3213481Sgiacomo.travaglini@arm.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3313481Sgiacomo.travaglini@arm.com// 3413481Sgiacomo.travaglini@arm.com// Author: wan@google.com (Zhanyong Wan) 3513481Sgiacomo.travaglini@arm.com 3613481Sgiacomo.travaglini@arm.com// Implements class templates NiceMock, NaggyMock, and StrictMock. 3713481Sgiacomo.travaglini@arm.com// 3813481Sgiacomo.travaglini@arm.com// Given a mock class MockFoo that is created using Google Mock, 3913481Sgiacomo.travaglini@arm.com// NiceMock<MockFoo> is a subclass of MockFoo that allows 4013481Sgiacomo.travaglini@arm.com// uninteresting calls (i.e. calls to mock methods that have no 4113481Sgiacomo.travaglini@arm.com// EXPECT_CALL specs), NaggyMock<MockFoo> is a subclass of MockFoo 4213481Sgiacomo.travaglini@arm.com// that prints a warning when an uninteresting call occurs, and 4313481Sgiacomo.travaglini@arm.com// StrictMock<MockFoo> is a subclass of MockFoo that treats all 4413481Sgiacomo.travaglini@arm.com// uninteresting calls as errors. 4513481Sgiacomo.travaglini@arm.com// 4613481Sgiacomo.travaglini@arm.com// Currently a mock is naggy by default, so MockFoo and 4713481Sgiacomo.travaglini@arm.com// NaggyMock<MockFoo> behave like the same. However, we will soon 4813481Sgiacomo.travaglini@arm.com// switch the default behavior of mocks to be nice, as that in general 4913481Sgiacomo.travaglini@arm.com// leads to more maintainable tests. When that happens, MockFoo will 5013481Sgiacomo.travaglini@arm.com// stop behaving like NaggyMock<MockFoo> and start behaving like 5113481Sgiacomo.travaglini@arm.com// NiceMock<MockFoo>. 5213481Sgiacomo.travaglini@arm.com// 5313481Sgiacomo.travaglini@arm.com// NiceMock, NaggyMock, and StrictMock "inherit" the constructors of 5413481Sgiacomo.travaglini@arm.com// their respective base class, with up-to 10 arguments. Therefore 5513481Sgiacomo.travaglini@arm.com// you can write NiceMock<MockFoo>(5, "a") to construct a nice mock 5613481Sgiacomo.travaglini@arm.com// where MockFoo has a constructor that accepts (int, const char*), 5713481Sgiacomo.travaglini@arm.com// for example. 5813481Sgiacomo.travaglini@arm.com// 5913481Sgiacomo.travaglini@arm.com// A known limitation is that NiceMock<MockFoo>, NaggyMock<MockFoo>, 6013481Sgiacomo.travaglini@arm.com// and StrictMock<MockFoo> only works for mock methods defined using 6113481Sgiacomo.travaglini@arm.com// the MOCK_METHOD* family of macros DIRECTLY in the MockFoo class. 6213481Sgiacomo.travaglini@arm.com// If a mock method is defined in a base class of MockFoo, the "nice" 6313481Sgiacomo.travaglini@arm.com// or "strict" modifier may not affect it, depending on the compiler. 6413481Sgiacomo.travaglini@arm.com// In particular, nesting NiceMock, NaggyMock, and StrictMock is NOT 6513481Sgiacomo.travaglini@arm.com// supported. 6613481Sgiacomo.travaglini@arm.com// 6713481Sgiacomo.travaglini@arm.com// Another known limitation is that the constructors of the base mock 6813481Sgiacomo.travaglini@arm.com// cannot have arguments passed by non-const reference, which are 6913481Sgiacomo.travaglini@arm.com// banned by the Google C++ style guide anyway. 7013481Sgiacomo.travaglini@arm.com 7113481Sgiacomo.travaglini@arm.com#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_NICE_STRICT_H_ 7213481Sgiacomo.travaglini@arm.com#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_NICE_STRICT_H_ 7313481Sgiacomo.travaglini@arm.com 7413481Sgiacomo.travaglini@arm.com#include "gmock/gmock-spec-builders.h" 7513481Sgiacomo.travaglini@arm.com#include "gmock/internal/gmock-port.h" 7613481Sgiacomo.travaglini@arm.com 7713481Sgiacomo.travaglini@arm.comnamespace testing { 7813481Sgiacomo.travaglini@arm.com 7913481Sgiacomo.travaglini@arm.comtemplate <class MockClass> 8013481Sgiacomo.travaglini@arm.comclass NiceMock : public MockClass { 8113481Sgiacomo.travaglini@arm.com public: 8213481Sgiacomo.travaglini@arm.com // We don't factor out the constructor body to a common method, as 8313481Sgiacomo.travaglini@arm.com // we have to avoid a possible clash with members of MockClass. 8413481Sgiacomo.travaglini@arm.com NiceMock() { 8513481Sgiacomo.travaglini@arm.com ::testing::Mock::AllowUninterestingCalls( 8613481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 8713481Sgiacomo.travaglini@arm.com } 8813481Sgiacomo.travaglini@arm.com 8913481Sgiacomo.travaglini@arm.com // C++ doesn't (yet) allow inheritance of constructors, so we have 9013481Sgiacomo.travaglini@arm.com // to define it for each arity. 9113481Sgiacomo.travaglini@arm.com template <typename A1> 9213481Sgiacomo.travaglini@arm.com explicit NiceMock(const A1& a1) : MockClass(a1) { 9313481Sgiacomo.travaglini@arm.com ::testing::Mock::AllowUninterestingCalls( 9413481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 9513481Sgiacomo.travaglini@arm.com } 9613481Sgiacomo.travaglini@arm.com template <typename A1, typename A2> 9713481Sgiacomo.travaglini@arm.com NiceMock(const A1& a1, const A2& a2) : MockClass(a1, a2) { 9813481Sgiacomo.travaglini@arm.com ::testing::Mock::AllowUninterestingCalls( 9913481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 10013481Sgiacomo.travaglini@arm.com } 10113481Sgiacomo.travaglini@arm.com 10213481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3> 10313481Sgiacomo.travaglini@arm.com NiceMock(const A1& a1, const A2& a2, const A3& a3) : MockClass(a1, a2, a3) { 10413481Sgiacomo.travaglini@arm.com ::testing::Mock::AllowUninterestingCalls( 10513481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 10613481Sgiacomo.travaglini@arm.com } 10713481Sgiacomo.travaglini@arm.com 10813481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4> 10913481Sgiacomo.travaglini@arm.com NiceMock(const A1& a1, const A2& a2, const A3& a3, 11013481Sgiacomo.travaglini@arm.com const A4& a4) : MockClass(a1, a2, a3, a4) { 11113481Sgiacomo.travaglini@arm.com ::testing::Mock::AllowUninterestingCalls( 11213481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 11313481Sgiacomo.travaglini@arm.com } 11413481Sgiacomo.travaglini@arm.com 11513481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5> 11613481Sgiacomo.travaglini@arm.com NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 11713481Sgiacomo.travaglini@arm.com const A5& a5) : MockClass(a1, a2, a3, a4, a5) { 11813481Sgiacomo.travaglini@arm.com ::testing::Mock::AllowUninterestingCalls( 11913481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 12013481Sgiacomo.travaglini@arm.com } 12113481Sgiacomo.travaglini@arm.com 12213481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5, 12313481Sgiacomo.travaglini@arm.com typename A6> 12413481Sgiacomo.travaglini@arm.com NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 12513481Sgiacomo.travaglini@arm.com const A5& a5, const A6& a6) : MockClass(a1, a2, a3, a4, a5, a6) { 12613481Sgiacomo.travaglini@arm.com ::testing::Mock::AllowUninterestingCalls( 12713481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 12813481Sgiacomo.travaglini@arm.com } 12913481Sgiacomo.travaglini@arm.com 13013481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5, 13113481Sgiacomo.travaglini@arm.com typename A6, typename A7> 13213481Sgiacomo.travaglini@arm.com NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 13313481Sgiacomo.travaglini@arm.com const A5& a5, const A6& a6, const A7& a7) : MockClass(a1, a2, a3, a4, a5, 13413481Sgiacomo.travaglini@arm.com a6, a7) { 13513481Sgiacomo.travaglini@arm.com ::testing::Mock::AllowUninterestingCalls( 13613481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 13713481Sgiacomo.travaglini@arm.com } 13813481Sgiacomo.travaglini@arm.com 13913481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5, 14013481Sgiacomo.travaglini@arm.com typename A6, typename A7, typename A8> 14113481Sgiacomo.travaglini@arm.com NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 14213481Sgiacomo.travaglini@arm.com const A5& a5, const A6& a6, const A7& a7, const A8& a8) : MockClass(a1, 14313481Sgiacomo.travaglini@arm.com a2, a3, a4, a5, a6, a7, a8) { 14413481Sgiacomo.travaglini@arm.com ::testing::Mock::AllowUninterestingCalls( 14513481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 14613481Sgiacomo.travaglini@arm.com } 14713481Sgiacomo.travaglini@arm.com 14813481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5, 14913481Sgiacomo.travaglini@arm.com typename A6, typename A7, typename A8, typename A9> 15013481Sgiacomo.travaglini@arm.com NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 15113481Sgiacomo.travaglini@arm.com const A5& a5, const A6& a6, const A7& a7, const A8& a8, 15213481Sgiacomo.travaglini@arm.com const A9& a9) : MockClass(a1, a2, a3, a4, a5, a6, a7, a8, a9) { 15313481Sgiacomo.travaglini@arm.com ::testing::Mock::AllowUninterestingCalls( 15413481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 15513481Sgiacomo.travaglini@arm.com } 15613481Sgiacomo.travaglini@arm.com 15713481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5, 15813481Sgiacomo.travaglini@arm.com typename A6, typename A7, typename A8, typename A9, typename A10> 15913481Sgiacomo.travaglini@arm.com NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 16013481Sgiacomo.travaglini@arm.com const A5& a5, const A6& a6, const A7& a7, const A8& a8, const A9& a9, 16113481Sgiacomo.travaglini@arm.com const A10& a10) : MockClass(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) { 16213481Sgiacomo.travaglini@arm.com ::testing::Mock::AllowUninterestingCalls( 16313481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 16413481Sgiacomo.travaglini@arm.com } 16513481Sgiacomo.travaglini@arm.com 16613481Sgiacomo.travaglini@arm.com virtual ~NiceMock() { 16713481Sgiacomo.travaglini@arm.com ::testing::Mock::UnregisterCallReaction( 16813481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 16913481Sgiacomo.travaglini@arm.com } 17013481Sgiacomo.travaglini@arm.com 17113481Sgiacomo.travaglini@arm.com private: 17213481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(NiceMock); 17313481Sgiacomo.travaglini@arm.com}; 17413481Sgiacomo.travaglini@arm.com 17513481Sgiacomo.travaglini@arm.comtemplate <class MockClass> 17613481Sgiacomo.travaglini@arm.comclass NaggyMock : public MockClass { 17713481Sgiacomo.travaglini@arm.com public: 17813481Sgiacomo.travaglini@arm.com // We don't factor out the constructor body to a common method, as 17913481Sgiacomo.travaglini@arm.com // we have to avoid a possible clash with members of MockClass. 18013481Sgiacomo.travaglini@arm.com NaggyMock() { 18113481Sgiacomo.travaglini@arm.com ::testing::Mock::WarnUninterestingCalls( 18213481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 18313481Sgiacomo.travaglini@arm.com } 18413481Sgiacomo.travaglini@arm.com 18513481Sgiacomo.travaglini@arm.com // C++ doesn't (yet) allow inheritance of constructors, so we have 18613481Sgiacomo.travaglini@arm.com // to define it for each arity. 18713481Sgiacomo.travaglini@arm.com template <typename A1> 18813481Sgiacomo.travaglini@arm.com explicit NaggyMock(const A1& a1) : MockClass(a1) { 18913481Sgiacomo.travaglini@arm.com ::testing::Mock::WarnUninterestingCalls( 19013481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 19113481Sgiacomo.travaglini@arm.com } 19213481Sgiacomo.travaglini@arm.com template <typename A1, typename A2> 19313481Sgiacomo.travaglini@arm.com NaggyMock(const A1& a1, const A2& a2) : MockClass(a1, a2) { 19413481Sgiacomo.travaglini@arm.com ::testing::Mock::WarnUninterestingCalls( 19513481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 19613481Sgiacomo.travaglini@arm.com } 19713481Sgiacomo.travaglini@arm.com 19813481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3> 19913481Sgiacomo.travaglini@arm.com NaggyMock(const A1& a1, const A2& a2, const A3& a3) : MockClass(a1, a2, a3) { 20013481Sgiacomo.travaglini@arm.com ::testing::Mock::WarnUninterestingCalls( 20113481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 20213481Sgiacomo.travaglini@arm.com } 20313481Sgiacomo.travaglini@arm.com 20413481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4> 20513481Sgiacomo.travaglini@arm.com NaggyMock(const A1& a1, const A2& a2, const A3& a3, 20613481Sgiacomo.travaglini@arm.com const A4& a4) : MockClass(a1, a2, a3, a4) { 20713481Sgiacomo.travaglini@arm.com ::testing::Mock::WarnUninterestingCalls( 20813481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 20913481Sgiacomo.travaglini@arm.com } 21013481Sgiacomo.travaglini@arm.com 21113481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5> 21213481Sgiacomo.travaglini@arm.com NaggyMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 21313481Sgiacomo.travaglini@arm.com const A5& a5) : MockClass(a1, a2, a3, a4, a5) { 21413481Sgiacomo.travaglini@arm.com ::testing::Mock::WarnUninterestingCalls( 21513481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 21613481Sgiacomo.travaglini@arm.com } 21713481Sgiacomo.travaglini@arm.com 21813481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5, 21913481Sgiacomo.travaglini@arm.com typename A6> 22013481Sgiacomo.travaglini@arm.com NaggyMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 22113481Sgiacomo.travaglini@arm.com const A5& a5, const A6& a6) : MockClass(a1, a2, a3, a4, a5, a6) { 22213481Sgiacomo.travaglini@arm.com ::testing::Mock::WarnUninterestingCalls( 22313481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 22413481Sgiacomo.travaglini@arm.com } 22513481Sgiacomo.travaglini@arm.com 22613481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5, 22713481Sgiacomo.travaglini@arm.com typename A6, typename A7> 22813481Sgiacomo.travaglini@arm.com NaggyMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 22913481Sgiacomo.travaglini@arm.com const A5& a5, const A6& a6, const A7& a7) : MockClass(a1, a2, a3, a4, a5, 23013481Sgiacomo.travaglini@arm.com a6, a7) { 23113481Sgiacomo.travaglini@arm.com ::testing::Mock::WarnUninterestingCalls( 23213481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 23313481Sgiacomo.travaglini@arm.com } 23413481Sgiacomo.travaglini@arm.com 23513481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5, 23613481Sgiacomo.travaglini@arm.com typename A6, typename A7, typename A8> 23713481Sgiacomo.travaglini@arm.com NaggyMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 23813481Sgiacomo.travaglini@arm.com const A5& a5, const A6& a6, const A7& a7, const A8& a8) : MockClass(a1, 23913481Sgiacomo.travaglini@arm.com a2, a3, a4, a5, a6, a7, a8) { 24013481Sgiacomo.travaglini@arm.com ::testing::Mock::WarnUninterestingCalls( 24113481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 24213481Sgiacomo.travaglini@arm.com } 24313481Sgiacomo.travaglini@arm.com 24413481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5, 24513481Sgiacomo.travaglini@arm.com typename A6, typename A7, typename A8, typename A9> 24613481Sgiacomo.travaglini@arm.com NaggyMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 24713481Sgiacomo.travaglini@arm.com const A5& a5, const A6& a6, const A7& a7, const A8& a8, 24813481Sgiacomo.travaglini@arm.com const A9& a9) : MockClass(a1, a2, a3, a4, a5, a6, a7, a8, a9) { 24913481Sgiacomo.travaglini@arm.com ::testing::Mock::WarnUninterestingCalls( 25013481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 25113481Sgiacomo.travaglini@arm.com } 25213481Sgiacomo.travaglini@arm.com 25313481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5, 25413481Sgiacomo.travaglini@arm.com typename A6, typename A7, typename A8, typename A9, typename A10> 25513481Sgiacomo.travaglini@arm.com NaggyMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 25613481Sgiacomo.travaglini@arm.com const A5& a5, const A6& a6, const A7& a7, const A8& a8, const A9& a9, 25713481Sgiacomo.travaglini@arm.com const A10& a10) : MockClass(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) { 25813481Sgiacomo.travaglini@arm.com ::testing::Mock::WarnUninterestingCalls( 25913481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 26013481Sgiacomo.travaglini@arm.com } 26113481Sgiacomo.travaglini@arm.com 26213481Sgiacomo.travaglini@arm.com virtual ~NaggyMock() { 26313481Sgiacomo.travaglini@arm.com ::testing::Mock::UnregisterCallReaction( 26413481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 26513481Sgiacomo.travaglini@arm.com } 26613481Sgiacomo.travaglini@arm.com 26713481Sgiacomo.travaglini@arm.com private: 26813481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(NaggyMock); 26913481Sgiacomo.travaglini@arm.com}; 27013481Sgiacomo.travaglini@arm.com 27113481Sgiacomo.travaglini@arm.comtemplate <class MockClass> 27213481Sgiacomo.travaglini@arm.comclass StrictMock : public MockClass { 27313481Sgiacomo.travaglini@arm.com public: 27413481Sgiacomo.travaglini@arm.com // We don't factor out the constructor body to a common method, as 27513481Sgiacomo.travaglini@arm.com // we have to avoid a possible clash with members of MockClass. 27613481Sgiacomo.travaglini@arm.com StrictMock() { 27713481Sgiacomo.travaglini@arm.com ::testing::Mock::FailUninterestingCalls( 27813481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 27913481Sgiacomo.travaglini@arm.com } 28013481Sgiacomo.travaglini@arm.com 28113481Sgiacomo.travaglini@arm.com // C++ doesn't (yet) allow inheritance of constructors, so we have 28213481Sgiacomo.travaglini@arm.com // to define it for each arity. 28313481Sgiacomo.travaglini@arm.com template <typename A1> 28413481Sgiacomo.travaglini@arm.com explicit StrictMock(const A1& a1) : MockClass(a1) { 28513481Sgiacomo.travaglini@arm.com ::testing::Mock::FailUninterestingCalls( 28613481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 28713481Sgiacomo.travaglini@arm.com } 28813481Sgiacomo.travaglini@arm.com template <typename A1, typename A2> 28913481Sgiacomo.travaglini@arm.com StrictMock(const A1& a1, const A2& a2) : MockClass(a1, a2) { 29013481Sgiacomo.travaglini@arm.com ::testing::Mock::FailUninterestingCalls( 29113481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 29213481Sgiacomo.travaglini@arm.com } 29313481Sgiacomo.travaglini@arm.com 29413481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3> 29513481Sgiacomo.travaglini@arm.com StrictMock(const A1& a1, const A2& a2, const A3& a3) : MockClass(a1, a2, a3) { 29613481Sgiacomo.travaglini@arm.com ::testing::Mock::FailUninterestingCalls( 29713481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 29813481Sgiacomo.travaglini@arm.com } 29913481Sgiacomo.travaglini@arm.com 30013481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4> 30113481Sgiacomo.travaglini@arm.com StrictMock(const A1& a1, const A2& a2, const A3& a3, 30213481Sgiacomo.travaglini@arm.com const A4& a4) : MockClass(a1, a2, a3, a4) { 30313481Sgiacomo.travaglini@arm.com ::testing::Mock::FailUninterestingCalls( 30413481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 30513481Sgiacomo.travaglini@arm.com } 30613481Sgiacomo.travaglini@arm.com 30713481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5> 30813481Sgiacomo.travaglini@arm.com StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 30913481Sgiacomo.travaglini@arm.com const A5& a5) : MockClass(a1, a2, a3, a4, a5) { 31013481Sgiacomo.travaglini@arm.com ::testing::Mock::FailUninterestingCalls( 31113481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 31213481Sgiacomo.travaglini@arm.com } 31313481Sgiacomo.travaglini@arm.com 31413481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5, 31513481Sgiacomo.travaglini@arm.com typename A6> 31613481Sgiacomo.travaglini@arm.com StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 31713481Sgiacomo.travaglini@arm.com const A5& a5, const A6& a6) : MockClass(a1, a2, a3, a4, a5, a6) { 31813481Sgiacomo.travaglini@arm.com ::testing::Mock::FailUninterestingCalls( 31913481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 32013481Sgiacomo.travaglini@arm.com } 32113481Sgiacomo.travaglini@arm.com 32213481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5, 32313481Sgiacomo.travaglini@arm.com typename A6, typename A7> 32413481Sgiacomo.travaglini@arm.com StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 32513481Sgiacomo.travaglini@arm.com const A5& a5, const A6& a6, const A7& a7) : MockClass(a1, a2, a3, a4, a5, 32613481Sgiacomo.travaglini@arm.com a6, a7) { 32713481Sgiacomo.travaglini@arm.com ::testing::Mock::FailUninterestingCalls( 32813481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 32913481Sgiacomo.travaglini@arm.com } 33013481Sgiacomo.travaglini@arm.com 33113481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5, 33213481Sgiacomo.travaglini@arm.com typename A6, typename A7, typename A8> 33313481Sgiacomo.travaglini@arm.com StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 33413481Sgiacomo.travaglini@arm.com const A5& a5, const A6& a6, const A7& a7, const A8& a8) : MockClass(a1, 33513481Sgiacomo.travaglini@arm.com a2, a3, a4, a5, a6, a7, a8) { 33613481Sgiacomo.travaglini@arm.com ::testing::Mock::FailUninterestingCalls( 33713481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 33813481Sgiacomo.travaglini@arm.com } 33913481Sgiacomo.travaglini@arm.com 34013481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5, 34113481Sgiacomo.travaglini@arm.com typename A6, typename A7, typename A8, typename A9> 34213481Sgiacomo.travaglini@arm.com StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 34313481Sgiacomo.travaglini@arm.com const A5& a5, const A6& a6, const A7& a7, const A8& a8, 34413481Sgiacomo.travaglini@arm.com const A9& a9) : MockClass(a1, a2, a3, a4, a5, a6, a7, a8, a9) { 34513481Sgiacomo.travaglini@arm.com ::testing::Mock::FailUninterestingCalls( 34613481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 34713481Sgiacomo.travaglini@arm.com } 34813481Sgiacomo.travaglini@arm.com 34913481Sgiacomo.travaglini@arm.com template <typename A1, typename A2, typename A3, typename A4, typename A5, 35013481Sgiacomo.travaglini@arm.com typename A6, typename A7, typename A8, typename A9, typename A10> 35113481Sgiacomo.travaglini@arm.com StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, 35213481Sgiacomo.travaglini@arm.com const A5& a5, const A6& a6, const A7& a7, const A8& a8, const A9& a9, 35313481Sgiacomo.travaglini@arm.com const A10& a10) : MockClass(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) { 35413481Sgiacomo.travaglini@arm.com ::testing::Mock::FailUninterestingCalls( 35513481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 35613481Sgiacomo.travaglini@arm.com } 35713481Sgiacomo.travaglini@arm.com 35813481Sgiacomo.travaglini@arm.com virtual ~StrictMock() { 35913481Sgiacomo.travaglini@arm.com ::testing::Mock::UnregisterCallReaction( 36013481Sgiacomo.travaglini@arm.com internal::ImplicitCast_<MockClass*>(this)); 36113481Sgiacomo.travaglini@arm.com } 36213481Sgiacomo.travaglini@arm.com 36313481Sgiacomo.travaglini@arm.com private: 36413481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(StrictMock); 36513481Sgiacomo.travaglini@arm.com}; 36613481Sgiacomo.travaglini@arm.com 36713481Sgiacomo.travaglini@arm.com// The following specializations catch some (relatively more common) 36813481Sgiacomo.travaglini@arm.com// user errors of nesting nice and strict mocks. They do NOT catch 36913481Sgiacomo.travaglini@arm.com// all possible errors. 37013481Sgiacomo.travaglini@arm.com 37113481Sgiacomo.travaglini@arm.com// These specializations are declared but not defined, as NiceMock, 37213481Sgiacomo.travaglini@arm.com// NaggyMock, and StrictMock cannot be nested. 37313481Sgiacomo.travaglini@arm.com 37413481Sgiacomo.travaglini@arm.comtemplate <typename MockClass> 37513481Sgiacomo.travaglini@arm.comclass NiceMock<NiceMock<MockClass> >; 37613481Sgiacomo.travaglini@arm.comtemplate <typename MockClass> 37713481Sgiacomo.travaglini@arm.comclass NiceMock<NaggyMock<MockClass> >; 37813481Sgiacomo.travaglini@arm.comtemplate <typename MockClass> 37913481Sgiacomo.travaglini@arm.comclass NiceMock<StrictMock<MockClass> >; 38013481Sgiacomo.travaglini@arm.com 38113481Sgiacomo.travaglini@arm.comtemplate <typename MockClass> 38213481Sgiacomo.travaglini@arm.comclass NaggyMock<NiceMock<MockClass> >; 38313481Sgiacomo.travaglini@arm.comtemplate <typename MockClass> 38413481Sgiacomo.travaglini@arm.comclass NaggyMock<NaggyMock<MockClass> >; 38513481Sgiacomo.travaglini@arm.comtemplate <typename MockClass> 38613481Sgiacomo.travaglini@arm.comclass NaggyMock<StrictMock<MockClass> >; 38713481Sgiacomo.travaglini@arm.com 38813481Sgiacomo.travaglini@arm.comtemplate <typename MockClass> 38913481Sgiacomo.travaglini@arm.comclass StrictMock<NiceMock<MockClass> >; 39013481Sgiacomo.travaglini@arm.comtemplate <typename MockClass> 39113481Sgiacomo.travaglini@arm.comclass StrictMock<NaggyMock<MockClass> >; 39213481Sgiacomo.travaglini@arm.comtemplate <typename MockClass> 39313481Sgiacomo.travaglini@arm.comclass StrictMock<StrictMock<MockClass> >; 39413481Sgiacomo.travaglini@arm.com 39513481Sgiacomo.travaglini@arm.com} // namespace testing 39613481Sgiacomo.travaglini@arm.com 39713481Sgiacomo.travaglini@arm.com#endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_NICE_STRICT_H_ 398