113481Sgiacomo.travaglini@arm.com// This file was GENERATED by command: 213481Sgiacomo.travaglini@arm.com// pump.py gmock-generated-function-mockers.h.pump 313481Sgiacomo.travaglini@arm.com// DO NOT EDIT BY HAND!!! 413481Sgiacomo.travaglini@arm.com 513481Sgiacomo.travaglini@arm.com// Copyright 2007, 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// Google Mock - a framework for writing C++ mock classes. 3713481Sgiacomo.travaglini@arm.com// 3813481Sgiacomo.travaglini@arm.com// This file implements function mockers of various arities. 3913481Sgiacomo.travaglini@arm.com 4013481Sgiacomo.travaglini@arm.com#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_FUNCTION_MOCKERS_H_ 4113481Sgiacomo.travaglini@arm.com#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_FUNCTION_MOCKERS_H_ 4213481Sgiacomo.travaglini@arm.com 4313481Sgiacomo.travaglini@arm.com#include "gmock/gmock-spec-builders.h" 4413481Sgiacomo.travaglini@arm.com#include "gmock/internal/gmock-internal-utils.h" 4513481Sgiacomo.travaglini@arm.com 4613481Sgiacomo.travaglini@arm.com#if GTEST_HAS_STD_FUNCTION_ 4713481Sgiacomo.travaglini@arm.com# include <functional> 4813481Sgiacomo.travaglini@arm.com#endif 4913481Sgiacomo.travaglini@arm.com 5013481Sgiacomo.travaglini@arm.comnamespace testing { 5113481Sgiacomo.travaglini@arm.comnamespace internal { 5213481Sgiacomo.travaglini@arm.com 5313481Sgiacomo.travaglini@arm.comtemplate <typename F> 5413481Sgiacomo.travaglini@arm.comclass FunctionMockerBase; 5513481Sgiacomo.travaglini@arm.com 5613481Sgiacomo.travaglini@arm.com// Note: class FunctionMocker really belongs to the ::testing 5713481Sgiacomo.travaglini@arm.com// namespace. However if we define it in ::testing, MSVC will 5813481Sgiacomo.travaglini@arm.com// complain when classes in ::testing::internal declare it as a 5913481Sgiacomo.travaglini@arm.com// friend class template. To workaround this compiler bug, we define 6013481Sgiacomo.travaglini@arm.com// FunctionMocker in ::testing::internal and import it into ::testing. 6113481Sgiacomo.travaglini@arm.comtemplate <typename F> 6213481Sgiacomo.travaglini@arm.comclass FunctionMocker; 6313481Sgiacomo.travaglini@arm.com 6413481Sgiacomo.travaglini@arm.comtemplate <typename R> 6513481Sgiacomo.travaglini@arm.comclass FunctionMocker<R()> : public 6613481Sgiacomo.travaglini@arm.com internal::FunctionMockerBase<R()> { 6713481Sgiacomo.travaglini@arm.com public: 6813481Sgiacomo.travaglini@arm.com typedef R F(); 6913481Sgiacomo.travaglini@arm.com typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; 7013481Sgiacomo.travaglini@arm.com 7113481Sgiacomo.travaglini@arm.com MockSpec<F>& With() { 7213481Sgiacomo.travaglini@arm.com return this->current_spec(); 7313481Sgiacomo.travaglini@arm.com } 7413481Sgiacomo.travaglini@arm.com 7513481Sgiacomo.travaglini@arm.com R Invoke() { 7613481Sgiacomo.travaglini@arm.com // Even though gcc and MSVC don't enforce it, 'this->' is required 7713481Sgiacomo.travaglini@arm.com // by the C++ standard [14.6.4] here, as the base class type is 7813481Sgiacomo.travaglini@arm.com // dependent on the template argument (and thus shouldn't be 7913481Sgiacomo.travaglini@arm.com // looked into when resolving InvokeWith). 8013481Sgiacomo.travaglini@arm.com return this->InvokeWith(ArgumentTuple()); 8113481Sgiacomo.travaglini@arm.com } 8213481Sgiacomo.travaglini@arm.com}; 8313481Sgiacomo.travaglini@arm.com 8413481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1> 8513481Sgiacomo.travaglini@arm.comclass FunctionMocker<R(A1)> : public 8613481Sgiacomo.travaglini@arm.com internal::FunctionMockerBase<R(A1)> { 8713481Sgiacomo.travaglini@arm.com public: 8813481Sgiacomo.travaglini@arm.com typedef R F(A1); 8913481Sgiacomo.travaglini@arm.com typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; 9013481Sgiacomo.travaglini@arm.com 9113481Sgiacomo.travaglini@arm.com MockSpec<F>& With(const Matcher<A1>& m1) { 9213481Sgiacomo.travaglini@arm.com this->current_spec().SetMatchers(::testing::make_tuple(m1)); 9313481Sgiacomo.travaglini@arm.com return this->current_spec(); 9413481Sgiacomo.travaglini@arm.com } 9513481Sgiacomo.travaglini@arm.com 9613481Sgiacomo.travaglini@arm.com R Invoke(A1 a1) { 9713481Sgiacomo.travaglini@arm.com // Even though gcc and MSVC don't enforce it, 'this->' is required 9813481Sgiacomo.travaglini@arm.com // by the C++ standard [14.6.4] here, as the base class type is 9913481Sgiacomo.travaglini@arm.com // dependent on the template argument (and thus shouldn't be 10013481Sgiacomo.travaglini@arm.com // looked into when resolving InvokeWith). 10113481Sgiacomo.travaglini@arm.com return this->InvokeWith(ArgumentTuple(a1)); 10213481Sgiacomo.travaglini@arm.com } 10313481Sgiacomo.travaglini@arm.com}; 10413481Sgiacomo.travaglini@arm.com 10513481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2> 10613481Sgiacomo.travaglini@arm.comclass FunctionMocker<R(A1, A2)> : public 10713481Sgiacomo.travaglini@arm.com internal::FunctionMockerBase<R(A1, A2)> { 10813481Sgiacomo.travaglini@arm.com public: 10913481Sgiacomo.travaglini@arm.com typedef R F(A1, A2); 11013481Sgiacomo.travaglini@arm.com typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; 11113481Sgiacomo.travaglini@arm.com 11213481Sgiacomo.travaglini@arm.com MockSpec<F>& With(const Matcher<A1>& m1, const Matcher<A2>& m2) { 11313481Sgiacomo.travaglini@arm.com this->current_spec().SetMatchers(::testing::make_tuple(m1, m2)); 11413481Sgiacomo.travaglini@arm.com return this->current_spec(); 11513481Sgiacomo.travaglini@arm.com } 11613481Sgiacomo.travaglini@arm.com 11713481Sgiacomo.travaglini@arm.com R Invoke(A1 a1, A2 a2) { 11813481Sgiacomo.travaglini@arm.com // Even though gcc and MSVC don't enforce it, 'this->' is required 11913481Sgiacomo.travaglini@arm.com // by the C++ standard [14.6.4] here, as the base class type is 12013481Sgiacomo.travaglini@arm.com // dependent on the template argument (and thus shouldn't be 12113481Sgiacomo.travaglini@arm.com // looked into when resolving InvokeWith). 12213481Sgiacomo.travaglini@arm.com return this->InvokeWith(ArgumentTuple(a1, a2)); 12313481Sgiacomo.travaglini@arm.com } 12413481Sgiacomo.travaglini@arm.com}; 12513481Sgiacomo.travaglini@arm.com 12613481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2, typename A3> 12713481Sgiacomo.travaglini@arm.comclass FunctionMocker<R(A1, A2, A3)> : public 12813481Sgiacomo.travaglini@arm.com internal::FunctionMockerBase<R(A1, A2, A3)> { 12913481Sgiacomo.travaglini@arm.com public: 13013481Sgiacomo.travaglini@arm.com typedef R F(A1, A2, A3); 13113481Sgiacomo.travaglini@arm.com typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; 13213481Sgiacomo.travaglini@arm.com 13313481Sgiacomo.travaglini@arm.com MockSpec<F>& With(const Matcher<A1>& m1, const Matcher<A2>& m2, 13413481Sgiacomo.travaglini@arm.com const Matcher<A3>& m3) { 13513481Sgiacomo.travaglini@arm.com this->current_spec().SetMatchers(::testing::make_tuple(m1, m2, m3)); 13613481Sgiacomo.travaglini@arm.com return this->current_spec(); 13713481Sgiacomo.travaglini@arm.com } 13813481Sgiacomo.travaglini@arm.com 13913481Sgiacomo.travaglini@arm.com R Invoke(A1 a1, A2 a2, A3 a3) { 14013481Sgiacomo.travaglini@arm.com // Even though gcc and MSVC don't enforce it, 'this->' is required 14113481Sgiacomo.travaglini@arm.com // by the C++ standard [14.6.4] here, as the base class type is 14213481Sgiacomo.travaglini@arm.com // dependent on the template argument (and thus shouldn't be 14313481Sgiacomo.travaglini@arm.com // looked into when resolving InvokeWith). 14413481Sgiacomo.travaglini@arm.com return this->InvokeWith(ArgumentTuple(a1, a2, a3)); 14513481Sgiacomo.travaglini@arm.com } 14613481Sgiacomo.travaglini@arm.com}; 14713481Sgiacomo.travaglini@arm.com 14813481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2, typename A3, typename A4> 14913481Sgiacomo.travaglini@arm.comclass FunctionMocker<R(A1, A2, A3, A4)> : public 15013481Sgiacomo.travaglini@arm.com internal::FunctionMockerBase<R(A1, A2, A3, A4)> { 15113481Sgiacomo.travaglini@arm.com public: 15213481Sgiacomo.travaglini@arm.com typedef R F(A1, A2, A3, A4); 15313481Sgiacomo.travaglini@arm.com typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; 15413481Sgiacomo.travaglini@arm.com 15513481Sgiacomo.travaglini@arm.com MockSpec<F>& With(const Matcher<A1>& m1, const Matcher<A2>& m2, 15613481Sgiacomo.travaglini@arm.com const Matcher<A3>& m3, const Matcher<A4>& m4) { 15713481Sgiacomo.travaglini@arm.com this->current_spec().SetMatchers(::testing::make_tuple(m1, m2, m3, m4)); 15813481Sgiacomo.travaglini@arm.com return this->current_spec(); 15913481Sgiacomo.travaglini@arm.com } 16013481Sgiacomo.travaglini@arm.com 16113481Sgiacomo.travaglini@arm.com R Invoke(A1 a1, A2 a2, A3 a3, A4 a4) { 16213481Sgiacomo.travaglini@arm.com // Even though gcc and MSVC don't enforce it, 'this->' is required 16313481Sgiacomo.travaglini@arm.com // by the C++ standard [14.6.4] here, as the base class type is 16413481Sgiacomo.travaglini@arm.com // dependent on the template argument (and thus shouldn't be 16513481Sgiacomo.travaglini@arm.com // looked into when resolving InvokeWith). 16613481Sgiacomo.travaglini@arm.com return this->InvokeWith(ArgumentTuple(a1, a2, a3, a4)); 16713481Sgiacomo.travaglini@arm.com } 16813481Sgiacomo.travaglini@arm.com}; 16913481Sgiacomo.travaglini@arm.com 17013481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 17113481Sgiacomo.travaglini@arm.com typename A5> 17213481Sgiacomo.travaglini@arm.comclass FunctionMocker<R(A1, A2, A3, A4, A5)> : public 17313481Sgiacomo.travaglini@arm.com internal::FunctionMockerBase<R(A1, A2, A3, A4, A5)> { 17413481Sgiacomo.travaglini@arm.com public: 17513481Sgiacomo.travaglini@arm.com typedef R F(A1, A2, A3, A4, A5); 17613481Sgiacomo.travaglini@arm.com typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; 17713481Sgiacomo.travaglini@arm.com 17813481Sgiacomo.travaglini@arm.com MockSpec<F>& With(const Matcher<A1>& m1, const Matcher<A2>& m2, 17913481Sgiacomo.travaglini@arm.com const Matcher<A3>& m3, const Matcher<A4>& m4, const Matcher<A5>& m5) { 18013481Sgiacomo.travaglini@arm.com this->current_spec().SetMatchers(::testing::make_tuple(m1, m2, m3, m4, m5)); 18113481Sgiacomo.travaglini@arm.com return this->current_spec(); 18213481Sgiacomo.travaglini@arm.com } 18313481Sgiacomo.travaglini@arm.com 18413481Sgiacomo.travaglini@arm.com R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { 18513481Sgiacomo.travaglini@arm.com // Even though gcc and MSVC don't enforce it, 'this->' is required 18613481Sgiacomo.travaglini@arm.com // by the C++ standard [14.6.4] here, as the base class type is 18713481Sgiacomo.travaglini@arm.com // dependent on the template argument (and thus shouldn't be 18813481Sgiacomo.travaglini@arm.com // looked into when resolving InvokeWith). 18913481Sgiacomo.travaglini@arm.com return this->InvokeWith(ArgumentTuple(a1, a2, a3, a4, a5)); 19013481Sgiacomo.travaglini@arm.com } 19113481Sgiacomo.travaglini@arm.com}; 19213481Sgiacomo.travaglini@arm.com 19313481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 19413481Sgiacomo.travaglini@arm.com typename A5, typename A6> 19513481Sgiacomo.travaglini@arm.comclass FunctionMocker<R(A1, A2, A3, A4, A5, A6)> : public 19613481Sgiacomo.travaglini@arm.com internal::FunctionMockerBase<R(A1, A2, A3, A4, A5, A6)> { 19713481Sgiacomo.travaglini@arm.com public: 19813481Sgiacomo.travaglini@arm.com typedef R F(A1, A2, A3, A4, A5, A6); 19913481Sgiacomo.travaglini@arm.com typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; 20013481Sgiacomo.travaglini@arm.com 20113481Sgiacomo.travaglini@arm.com MockSpec<F>& With(const Matcher<A1>& m1, const Matcher<A2>& m2, 20213481Sgiacomo.travaglini@arm.com const Matcher<A3>& m3, const Matcher<A4>& m4, const Matcher<A5>& m5, 20313481Sgiacomo.travaglini@arm.com const Matcher<A6>& m6) { 20413481Sgiacomo.travaglini@arm.com this->current_spec().SetMatchers(::testing::make_tuple(m1, m2, m3, m4, m5, 20513481Sgiacomo.travaglini@arm.com m6)); 20613481Sgiacomo.travaglini@arm.com return this->current_spec(); 20713481Sgiacomo.travaglini@arm.com } 20813481Sgiacomo.travaglini@arm.com 20913481Sgiacomo.travaglini@arm.com R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { 21013481Sgiacomo.travaglini@arm.com // Even though gcc and MSVC don't enforce it, 'this->' is required 21113481Sgiacomo.travaglini@arm.com // by the C++ standard [14.6.4] here, as the base class type is 21213481Sgiacomo.travaglini@arm.com // dependent on the template argument (and thus shouldn't be 21313481Sgiacomo.travaglini@arm.com // looked into when resolving InvokeWith). 21413481Sgiacomo.travaglini@arm.com return this->InvokeWith(ArgumentTuple(a1, a2, a3, a4, a5, a6)); 21513481Sgiacomo.travaglini@arm.com } 21613481Sgiacomo.travaglini@arm.com}; 21713481Sgiacomo.travaglini@arm.com 21813481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 21913481Sgiacomo.travaglini@arm.com typename A5, typename A6, typename A7> 22013481Sgiacomo.travaglini@arm.comclass FunctionMocker<R(A1, A2, A3, A4, A5, A6, A7)> : public 22113481Sgiacomo.travaglini@arm.com internal::FunctionMockerBase<R(A1, A2, A3, A4, A5, A6, A7)> { 22213481Sgiacomo.travaglini@arm.com public: 22313481Sgiacomo.travaglini@arm.com typedef R F(A1, A2, A3, A4, A5, A6, A7); 22413481Sgiacomo.travaglini@arm.com typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; 22513481Sgiacomo.travaglini@arm.com 22613481Sgiacomo.travaglini@arm.com MockSpec<F>& With(const Matcher<A1>& m1, const Matcher<A2>& m2, 22713481Sgiacomo.travaglini@arm.com const Matcher<A3>& m3, const Matcher<A4>& m4, const Matcher<A5>& m5, 22813481Sgiacomo.travaglini@arm.com const Matcher<A6>& m6, const Matcher<A7>& m7) { 22913481Sgiacomo.travaglini@arm.com this->current_spec().SetMatchers(::testing::make_tuple(m1, m2, m3, m4, m5, 23013481Sgiacomo.travaglini@arm.com m6, m7)); 23113481Sgiacomo.travaglini@arm.com return this->current_spec(); 23213481Sgiacomo.travaglini@arm.com } 23313481Sgiacomo.travaglini@arm.com 23413481Sgiacomo.travaglini@arm.com R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { 23513481Sgiacomo.travaglini@arm.com // Even though gcc and MSVC don't enforce it, 'this->' is required 23613481Sgiacomo.travaglini@arm.com // by the C++ standard [14.6.4] here, as the base class type is 23713481Sgiacomo.travaglini@arm.com // dependent on the template argument (and thus shouldn't be 23813481Sgiacomo.travaglini@arm.com // looked into when resolving InvokeWith). 23913481Sgiacomo.travaglini@arm.com return this->InvokeWith(ArgumentTuple(a1, a2, a3, a4, a5, a6, a7)); 24013481Sgiacomo.travaglini@arm.com } 24113481Sgiacomo.travaglini@arm.com}; 24213481Sgiacomo.travaglini@arm.com 24313481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 24413481Sgiacomo.travaglini@arm.com typename A5, typename A6, typename A7, typename A8> 24513481Sgiacomo.travaglini@arm.comclass FunctionMocker<R(A1, A2, A3, A4, A5, A6, A7, A8)> : public 24613481Sgiacomo.travaglini@arm.com internal::FunctionMockerBase<R(A1, A2, A3, A4, A5, A6, A7, A8)> { 24713481Sgiacomo.travaglini@arm.com public: 24813481Sgiacomo.travaglini@arm.com typedef R F(A1, A2, A3, A4, A5, A6, A7, A8); 24913481Sgiacomo.travaglini@arm.com typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; 25013481Sgiacomo.travaglini@arm.com 25113481Sgiacomo.travaglini@arm.com MockSpec<F>& With(const Matcher<A1>& m1, const Matcher<A2>& m2, 25213481Sgiacomo.travaglini@arm.com const Matcher<A3>& m3, const Matcher<A4>& m4, const Matcher<A5>& m5, 25313481Sgiacomo.travaglini@arm.com const Matcher<A6>& m6, const Matcher<A7>& m7, const Matcher<A8>& m8) { 25413481Sgiacomo.travaglini@arm.com this->current_spec().SetMatchers(::testing::make_tuple(m1, m2, m3, m4, m5, 25513481Sgiacomo.travaglini@arm.com m6, m7, m8)); 25613481Sgiacomo.travaglini@arm.com return this->current_spec(); 25713481Sgiacomo.travaglini@arm.com } 25813481Sgiacomo.travaglini@arm.com 25913481Sgiacomo.travaglini@arm.com R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) { 26013481Sgiacomo.travaglini@arm.com // Even though gcc and MSVC don't enforce it, 'this->' is required 26113481Sgiacomo.travaglini@arm.com // by the C++ standard [14.6.4] here, as the base class type is 26213481Sgiacomo.travaglini@arm.com // dependent on the template argument (and thus shouldn't be 26313481Sgiacomo.travaglini@arm.com // looked into when resolving InvokeWith). 26413481Sgiacomo.travaglini@arm.com return this->InvokeWith(ArgumentTuple(a1, a2, a3, a4, a5, a6, a7, a8)); 26513481Sgiacomo.travaglini@arm.com } 26613481Sgiacomo.travaglini@arm.com}; 26713481Sgiacomo.travaglini@arm.com 26813481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 26913481Sgiacomo.travaglini@arm.com typename A5, typename A6, typename A7, typename A8, typename A9> 27013481Sgiacomo.travaglini@arm.comclass FunctionMocker<R(A1, A2, A3, A4, A5, A6, A7, A8, A9)> : public 27113481Sgiacomo.travaglini@arm.com internal::FunctionMockerBase<R(A1, A2, A3, A4, A5, A6, A7, A8, A9)> { 27213481Sgiacomo.travaglini@arm.com public: 27313481Sgiacomo.travaglini@arm.com typedef R F(A1, A2, A3, A4, A5, A6, A7, A8, A9); 27413481Sgiacomo.travaglini@arm.com typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; 27513481Sgiacomo.travaglini@arm.com 27613481Sgiacomo.travaglini@arm.com MockSpec<F>& With(const Matcher<A1>& m1, const Matcher<A2>& m2, 27713481Sgiacomo.travaglini@arm.com const Matcher<A3>& m3, const Matcher<A4>& m4, const Matcher<A5>& m5, 27813481Sgiacomo.travaglini@arm.com const Matcher<A6>& m6, const Matcher<A7>& m7, const Matcher<A8>& m8, 27913481Sgiacomo.travaglini@arm.com const Matcher<A9>& m9) { 28013481Sgiacomo.travaglini@arm.com this->current_spec().SetMatchers(::testing::make_tuple(m1, m2, m3, m4, m5, 28113481Sgiacomo.travaglini@arm.com m6, m7, m8, m9)); 28213481Sgiacomo.travaglini@arm.com return this->current_spec(); 28313481Sgiacomo.travaglini@arm.com } 28413481Sgiacomo.travaglini@arm.com 28513481Sgiacomo.travaglini@arm.com R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) { 28613481Sgiacomo.travaglini@arm.com // Even though gcc and MSVC don't enforce it, 'this->' is required 28713481Sgiacomo.travaglini@arm.com // by the C++ standard [14.6.4] here, as the base class type is 28813481Sgiacomo.travaglini@arm.com // dependent on the template argument (and thus shouldn't be 28913481Sgiacomo.travaglini@arm.com // looked into when resolving InvokeWith). 29013481Sgiacomo.travaglini@arm.com return this->InvokeWith(ArgumentTuple(a1, a2, a3, a4, a5, a6, a7, a8, a9)); 29113481Sgiacomo.travaglini@arm.com } 29213481Sgiacomo.travaglini@arm.com}; 29313481Sgiacomo.travaglini@arm.com 29413481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 29513481Sgiacomo.travaglini@arm.com typename A5, typename A6, typename A7, typename A8, typename A9, 29613481Sgiacomo.travaglini@arm.com typename A10> 29713481Sgiacomo.travaglini@arm.comclass FunctionMocker<R(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)> : public 29813481Sgiacomo.travaglini@arm.com internal::FunctionMockerBase<R(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)> { 29913481Sgiacomo.travaglini@arm.com public: 30013481Sgiacomo.travaglini@arm.com typedef R F(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10); 30113481Sgiacomo.travaglini@arm.com typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; 30213481Sgiacomo.travaglini@arm.com 30313481Sgiacomo.travaglini@arm.com MockSpec<F>& With(const Matcher<A1>& m1, const Matcher<A2>& m2, 30413481Sgiacomo.travaglini@arm.com const Matcher<A3>& m3, const Matcher<A4>& m4, const Matcher<A5>& m5, 30513481Sgiacomo.travaglini@arm.com const Matcher<A6>& m6, const Matcher<A7>& m7, const Matcher<A8>& m8, 30613481Sgiacomo.travaglini@arm.com const Matcher<A9>& m9, const Matcher<A10>& m10) { 30713481Sgiacomo.travaglini@arm.com this->current_spec().SetMatchers(::testing::make_tuple(m1, m2, m3, m4, m5, 30813481Sgiacomo.travaglini@arm.com m6, m7, m8, m9, m10)); 30913481Sgiacomo.travaglini@arm.com return this->current_spec(); 31013481Sgiacomo.travaglini@arm.com } 31113481Sgiacomo.travaglini@arm.com 31213481Sgiacomo.travaglini@arm.com R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, 31313481Sgiacomo.travaglini@arm.com A10 a10) { 31413481Sgiacomo.travaglini@arm.com // Even though gcc and MSVC don't enforce it, 'this->' is required 31513481Sgiacomo.travaglini@arm.com // by the C++ standard [14.6.4] here, as the base class type is 31613481Sgiacomo.travaglini@arm.com // dependent on the template argument (and thus shouldn't be 31713481Sgiacomo.travaglini@arm.com // looked into when resolving InvokeWith). 31813481Sgiacomo.travaglini@arm.com return this->InvokeWith(ArgumentTuple(a1, a2, a3, a4, a5, a6, a7, a8, a9, 31913481Sgiacomo.travaglini@arm.com a10)); 32013481Sgiacomo.travaglini@arm.com } 32113481Sgiacomo.travaglini@arm.com}; 32213481Sgiacomo.travaglini@arm.com 32313481Sgiacomo.travaglini@arm.com} // namespace internal 32413481Sgiacomo.travaglini@arm.com 32513481Sgiacomo.travaglini@arm.com// The style guide prohibits "using" statements in a namespace scope 32613481Sgiacomo.travaglini@arm.com// inside a header file. However, the FunctionMocker class template 32713481Sgiacomo.travaglini@arm.com// is meant to be defined in the ::testing namespace. The following 32813481Sgiacomo.travaglini@arm.com// line is just a trick for working around a bug in MSVC 8.0, which 32913481Sgiacomo.travaglini@arm.com// cannot handle it if we define FunctionMocker in ::testing. 33013481Sgiacomo.travaglini@arm.comusing internal::FunctionMocker; 33113481Sgiacomo.travaglini@arm.com 33213481Sgiacomo.travaglini@arm.com// GMOCK_RESULT_(tn, F) expands to the result type of function type F. 33313481Sgiacomo.travaglini@arm.com// We define this as a variadic macro in case F contains unprotected 33413481Sgiacomo.travaglini@arm.com// commas (the same reason that we use variadic macros in other places 33513481Sgiacomo.travaglini@arm.com// in this file). 33613481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! 33713481Sgiacomo.travaglini@arm.com#define GMOCK_RESULT_(tn, ...) \ 33813481Sgiacomo.travaglini@arm.com tn ::testing::internal::Function<__VA_ARGS__>::Result 33913481Sgiacomo.travaglini@arm.com 34013481Sgiacomo.travaglini@arm.com// The type of argument N of the given function type. 34113481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! 34213481Sgiacomo.travaglini@arm.com#define GMOCK_ARG_(tn, N, ...) \ 34313481Sgiacomo.travaglini@arm.com tn ::testing::internal::Function<__VA_ARGS__>::Argument##N 34413481Sgiacomo.travaglini@arm.com 34513481Sgiacomo.travaglini@arm.com// The matcher type for argument N of the given function type. 34613481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! 34713481Sgiacomo.travaglini@arm.com#define GMOCK_MATCHER_(tn, N, ...) \ 34813481Sgiacomo.travaglini@arm.com const ::testing::Matcher<GMOCK_ARG_(tn, N, __VA_ARGS__)>& 34913481Sgiacomo.travaglini@arm.com 35013481Sgiacomo.travaglini@arm.com// The variable for mocking the given method. 35113481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! 35213481Sgiacomo.travaglini@arm.com#define GMOCK_MOCKER_(arity, constness, Method) \ 35313481Sgiacomo.travaglini@arm.com GTEST_CONCAT_TOKEN_(gmock##constness##arity##_##Method##_, __LINE__) 35413481Sgiacomo.travaglini@arm.com 35513481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! 35613481Sgiacomo.travaglini@arm.com#define GMOCK_METHOD0_(tn, constness, ct, Method, ...) \ 35713481Sgiacomo.travaglini@arm.com GMOCK_RESULT_(tn, __VA_ARGS__) ct Method( \ 35813481Sgiacomo.travaglini@arm.com ) constness { \ 35913481Sgiacomo.travaglini@arm.com GTEST_COMPILE_ASSERT_((::testing::tuple_size< \ 36013481Sgiacomo.travaglini@arm.com tn ::testing::internal::Function<__VA_ARGS__>::ArgumentTuple>::value \ 36113481Sgiacomo.travaglini@arm.com == 0), \ 36213481Sgiacomo.travaglini@arm.com this_method_does_not_take_0_arguments); \ 36313481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(0, constness, Method).SetOwnerAndName(this, #Method); \ 36413481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(0, constness, Method).Invoke(); \ 36513481Sgiacomo.travaglini@arm.com } \ 36613481Sgiacomo.travaglini@arm.com ::testing::MockSpec<__VA_ARGS__>& \ 36713481Sgiacomo.travaglini@arm.com gmock_##Method() constness { \ 36813481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(0, constness, Method).RegisterOwner(this); \ 36913481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(0, constness, Method).With(); \ 37013481Sgiacomo.travaglini@arm.com } \ 37113481Sgiacomo.travaglini@arm.com mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(0, constness, \ 37213481Sgiacomo.travaglini@arm.com Method) 37313481Sgiacomo.travaglini@arm.com 37413481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! 37513481Sgiacomo.travaglini@arm.com#define GMOCK_METHOD1_(tn, constness, ct, Method, ...) \ 37613481Sgiacomo.travaglini@arm.com GMOCK_RESULT_(tn, __VA_ARGS__) ct Method( \ 37713481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1) constness { \ 37813481Sgiacomo.travaglini@arm.com GTEST_COMPILE_ASSERT_((::testing::tuple_size< \ 37913481Sgiacomo.travaglini@arm.com tn ::testing::internal::Function<__VA_ARGS__>::ArgumentTuple>::value \ 38013481Sgiacomo.travaglini@arm.com == 1), \ 38113481Sgiacomo.travaglini@arm.com this_method_does_not_take_1_argument); \ 38213481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(1, constness, Method).SetOwnerAndName(this, #Method); \ 38313481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(1, constness, Method).Invoke(gmock_a1); \ 38413481Sgiacomo.travaglini@arm.com } \ 38513481Sgiacomo.travaglini@arm.com ::testing::MockSpec<__VA_ARGS__>& \ 38613481Sgiacomo.travaglini@arm.com gmock_##Method(GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1) constness { \ 38713481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(1, constness, Method).RegisterOwner(this); \ 38813481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(1, constness, Method).With(gmock_a1); \ 38913481Sgiacomo.travaglini@arm.com } \ 39013481Sgiacomo.travaglini@arm.com mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(1, constness, \ 39113481Sgiacomo.travaglini@arm.com Method) 39213481Sgiacomo.travaglini@arm.com 39313481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! 39413481Sgiacomo.travaglini@arm.com#define GMOCK_METHOD2_(tn, constness, ct, Method, ...) \ 39513481Sgiacomo.travaglini@arm.com GMOCK_RESULT_(tn, __VA_ARGS__) ct Method( \ 39613481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ 39713481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2) constness { \ 39813481Sgiacomo.travaglini@arm.com GTEST_COMPILE_ASSERT_((::testing::tuple_size< \ 39913481Sgiacomo.travaglini@arm.com tn ::testing::internal::Function<__VA_ARGS__>::ArgumentTuple>::value \ 40013481Sgiacomo.travaglini@arm.com == 2), \ 40113481Sgiacomo.travaglini@arm.com this_method_does_not_take_2_arguments); \ 40213481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(2, constness, Method).SetOwnerAndName(this, #Method); \ 40313481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(2, constness, Method).Invoke(gmock_a1, gmock_a2); \ 40413481Sgiacomo.travaglini@arm.com } \ 40513481Sgiacomo.travaglini@arm.com ::testing::MockSpec<__VA_ARGS__>& \ 40613481Sgiacomo.travaglini@arm.com gmock_##Method(GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ 40713481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2) constness { \ 40813481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(2, constness, Method).RegisterOwner(this); \ 40913481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(2, constness, Method).With(gmock_a1, gmock_a2); \ 41013481Sgiacomo.travaglini@arm.com } \ 41113481Sgiacomo.travaglini@arm.com mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(2, constness, \ 41213481Sgiacomo.travaglini@arm.com Method) 41313481Sgiacomo.travaglini@arm.com 41413481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! 41513481Sgiacomo.travaglini@arm.com#define GMOCK_METHOD3_(tn, constness, ct, Method, ...) \ 41613481Sgiacomo.travaglini@arm.com GMOCK_RESULT_(tn, __VA_ARGS__) ct Method( \ 41713481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ 41813481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ 41913481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3) constness { \ 42013481Sgiacomo.travaglini@arm.com GTEST_COMPILE_ASSERT_((::testing::tuple_size< \ 42113481Sgiacomo.travaglini@arm.com tn ::testing::internal::Function<__VA_ARGS__>::ArgumentTuple>::value \ 42213481Sgiacomo.travaglini@arm.com == 3), \ 42313481Sgiacomo.travaglini@arm.com this_method_does_not_take_3_arguments); \ 42413481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(3, constness, Method).SetOwnerAndName(this, #Method); \ 42513481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(3, constness, Method).Invoke(gmock_a1, gmock_a2, \ 42613481Sgiacomo.travaglini@arm.com gmock_a3); \ 42713481Sgiacomo.travaglini@arm.com } \ 42813481Sgiacomo.travaglini@arm.com ::testing::MockSpec<__VA_ARGS__>& \ 42913481Sgiacomo.travaglini@arm.com gmock_##Method(GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ 43013481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ 43113481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3) constness { \ 43213481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(3, constness, Method).RegisterOwner(this); \ 43313481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(3, constness, Method).With(gmock_a1, gmock_a2, \ 43413481Sgiacomo.travaglini@arm.com gmock_a3); \ 43513481Sgiacomo.travaglini@arm.com } \ 43613481Sgiacomo.travaglini@arm.com mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(3, constness, \ 43713481Sgiacomo.travaglini@arm.com Method) 43813481Sgiacomo.travaglini@arm.com 43913481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! 44013481Sgiacomo.travaglini@arm.com#define GMOCK_METHOD4_(tn, constness, ct, Method, ...) \ 44113481Sgiacomo.travaglini@arm.com GMOCK_RESULT_(tn, __VA_ARGS__) ct Method( \ 44213481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ 44313481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ 44413481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ 44513481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4) constness { \ 44613481Sgiacomo.travaglini@arm.com GTEST_COMPILE_ASSERT_((::testing::tuple_size< \ 44713481Sgiacomo.travaglini@arm.com tn ::testing::internal::Function<__VA_ARGS__>::ArgumentTuple>::value \ 44813481Sgiacomo.travaglini@arm.com == 4), \ 44913481Sgiacomo.travaglini@arm.com this_method_does_not_take_4_arguments); \ 45013481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(4, constness, Method).SetOwnerAndName(this, #Method); \ 45113481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(4, constness, Method).Invoke(gmock_a1, gmock_a2, \ 45213481Sgiacomo.travaglini@arm.com gmock_a3, gmock_a4); \ 45313481Sgiacomo.travaglini@arm.com } \ 45413481Sgiacomo.travaglini@arm.com ::testing::MockSpec<__VA_ARGS__>& \ 45513481Sgiacomo.travaglini@arm.com gmock_##Method(GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ 45613481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ 45713481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ 45813481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4) constness { \ 45913481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(4, constness, Method).RegisterOwner(this); \ 46013481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(4, constness, Method).With(gmock_a1, gmock_a2, \ 46113481Sgiacomo.travaglini@arm.com gmock_a3, gmock_a4); \ 46213481Sgiacomo.travaglini@arm.com } \ 46313481Sgiacomo.travaglini@arm.com mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(4, constness, \ 46413481Sgiacomo.travaglini@arm.com Method) 46513481Sgiacomo.travaglini@arm.com 46613481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! 46713481Sgiacomo.travaglini@arm.com#define GMOCK_METHOD5_(tn, constness, ct, Method, ...) \ 46813481Sgiacomo.travaglini@arm.com GMOCK_RESULT_(tn, __VA_ARGS__) ct Method( \ 46913481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ 47013481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ 47113481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ 47213481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ 47313481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5) constness { \ 47413481Sgiacomo.travaglini@arm.com GTEST_COMPILE_ASSERT_((::testing::tuple_size< \ 47513481Sgiacomo.travaglini@arm.com tn ::testing::internal::Function<__VA_ARGS__>::ArgumentTuple>::value \ 47613481Sgiacomo.travaglini@arm.com == 5), \ 47713481Sgiacomo.travaglini@arm.com this_method_does_not_take_5_arguments); \ 47813481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(5, constness, Method).SetOwnerAndName(this, #Method); \ 47913481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(5, constness, Method).Invoke(gmock_a1, gmock_a2, \ 48013481Sgiacomo.travaglini@arm.com gmock_a3, gmock_a4, gmock_a5); \ 48113481Sgiacomo.travaglini@arm.com } \ 48213481Sgiacomo.travaglini@arm.com ::testing::MockSpec<__VA_ARGS__>& \ 48313481Sgiacomo.travaglini@arm.com gmock_##Method(GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ 48413481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ 48513481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ 48613481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ 48713481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5) constness { \ 48813481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(5, constness, Method).RegisterOwner(this); \ 48913481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(5, constness, Method).With(gmock_a1, gmock_a2, \ 49013481Sgiacomo.travaglini@arm.com gmock_a3, gmock_a4, gmock_a5); \ 49113481Sgiacomo.travaglini@arm.com } \ 49213481Sgiacomo.travaglini@arm.com mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(5, constness, \ 49313481Sgiacomo.travaglini@arm.com Method) 49413481Sgiacomo.travaglini@arm.com 49513481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! 49613481Sgiacomo.travaglini@arm.com#define GMOCK_METHOD6_(tn, constness, ct, Method, ...) \ 49713481Sgiacomo.travaglini@arm.com GMOCK_RESULT_(tn, __VA_ARGS__) ct Method( \ 49813481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ 49913481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ 50013481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ 50113481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ 50213481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5, \ 50313481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 6, __VA_ARGS__) gmock_a6) constness { \ 50413481Sgiacomo.travaglini@arm.com GTEST_COMPILE_ASSERT_((::testing::tuple_size< \ 50513481Sgiacomo.travaglini@arm.com tn ::testing::internal::Function<__VA_ARGS__>::ArgumentTuple>::value \ 50613481Sgiacomo.travaglini@arm.com == 6), \ 50713481Sgiacomo.travaglini@arm.com this_method_does_not_take_6_arguments); \ 50813481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(6, constness, Method).SetOwnerAndName(this, #Method); \ 50913481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(6, constness, Method).Invoke(gmock_a1, gmock_a2, \ 51013481Sgiacomo.travaglini@arm.com gmock_a3, gmock_a4, gmock_a5, gmock_a6); \ 51113481Sgiacomo.travaglini@arm.com } \ 51213481Sgiacomo.travaglini@arm.com ::testing::MockSpec<__VA_ARGS__>& \ 51313481Sgiacomo.travaglini@arm.com gmock_##Method(GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ 51413481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ 51513481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ 51613481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ 51713481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5, \ 51813481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 6, __VA_ARGS__) gmock_a6) constness { \ 51913481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(6, constness, Method).RegisterOwner(this); \ 52013481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(6, constness, Method).With(gmock_a1, gmock_a2, \ 52113481Sgiacomo.travaglini@arm.com gmock_a3, gmock_a4, gmock_a5, gmock_a6); \ 52213481Sgiacomo.travaglini@arm.com } \ 52313481Sgiacomo.travaglini@arm.com mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(6, constness, \ 52413481Sgiacomo.travaglini@arm.com Method) 52513481Sgiacomo.travaglini@arm.com 52613481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! 52713481Sgiacomo.travaglini@arm.com#define GMOCK_METHOD7_(tn, constness, ct, Method, ...) \ 52813481Sgiacomo.travaglini@arm.com GMOCK_RESULT_(tn, __VA_ARGS__) ct Method( \ 52913481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ 53013481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ 53113481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ 53213481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ 53313481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5, \ 53413481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 6, __VA_ARGS__) gmock_a6, \ 53513481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 7, __VA_ARGS__) gmock_a7) constness { \ 53613481Sgiacomo.travaglini@arm.com GTEST_COMPILE_ASSERT_((::testing::tuple_size< \ 53713481Sgiacomo.travaglini@arm.com tn ::testing::internal::Function<__VA_ARGS__>::ArgumentTuple>::value \ 53813481Sgiacomo.travaglini@arm.com == 7), \ 53913481Sgiacomo.travaglini@arm.com this_method_does_not_take_7_arguments); \ 54013481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(7, constness, Method).SetOwnerAndName(this, #Method); \ 54113481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(7, constness, Method).Invoke(gmock_a1, gmock_a2, \ 54213481Sgiacomo.travaglini@arm.com gmock_a3, gmock_a4, gmock_a5, gmock_a6, gmock_a7); \ 54313481Sgiacomo.travaglini@arm.com } \ 54413481Sgiacomo.travaglini@arm.com ::testing::MockSpec<__VA_ARGS__>& \ 54513481Sgiacomo.travaglini@arm.com gmock_##Method(GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ 54613481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ 54713481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ 54813481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ 54913481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5, \ 55013481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 6, __VA_ARGS__) gmock_a6, \ 55113481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 7, __VA_ARGS__) gmock_a7) constness { \ 55213481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(7, constness, Method).RegisterOwner(this); \ 55313481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(7, constness, Method).With(gmock_a1, gmock_a2, \ 55413481Sgiacomo.travaglini@arm.com gmock_a3, gmock_a4, gmock_a5, gmock_a6, gmock_a7); \ 55513481Sgiacomo.travaglini@arm.com } \ 55613481Sgiacomo.travaglini@arm.com mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(7, constness, \ 55713481Sgiacomo.travaglini@arm.com Method) 55813481Sgiacomo.travaglini@arm.com 55913481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! 56013481Sgiacomo.travaglini@arm.com#define GMOCK_METHOD8_(tn, constness, ct, Method, ...) \ 56113481Sgiacomo.travaglini@arm.com GMOCK_RESULT_(tn, __VA_ARGS__) ct Method( \ 56213481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ 56313481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ 56413481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ 56513481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ 56613481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5, \ 56713481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 6, __VA_ARGS__) gmock_a6, \ 56813481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 7, __VA_ARGS__) gmock_a7, \ 56913481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 8, __VA_ARGS__) gmock_a8) constness { \ 57013481Sgiacomo.travaglini@arm.com GTEST_COMPILE_ASSERT_((::testing::tuple_size< \ 57113481Sgiacomo.travaglini@arm.com tn ::testing::internal::Function<__VA_ARGS__>::ArgumentTuple>::value \ 57213481Sgiacomo.travaglini@arm.com == 8), \ 57313481Sgiacomo.travaglini@arm.com this_method_does_not_take_8_arguments); \ 57413481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(8, constness, Method).SetOwnerAndName(this, #Method); \ 57513481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(8, constness, Method).Invoke(gmock_a1, gmock_a2, \ 57613481Sgiacomo.travaglini@arm.com gmock_a3, gmock_a4, gmock_a5, gmock_a6, gmock_a7, gmock_a8); \ 57713481Sgiacomo.travaglini@arm.com } \ 57813481Sgiacomo.travaglini@arm.com ::testing::MockSpec<__VA_ARGS__>& \ 57913481Sgiacomo.travaglini@arm.com gmock_##Method(GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ 58013481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ 58113481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ 58213481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ 58313481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5, \ 58413481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 6, __VA_ARGS__) gmock_a6, \ 58513481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 7, __VA_ARGS__) gmock_a7, \ 58613481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 8, __VA_ARGS__) gmock_a8) constness { \ 58713481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(8, constness, Method).RegisterOwner(this); \ 58813481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(8, constness, Method).With(gmock_a1, gmock_a2, \ 58913481Sgiacomo.travaglini@arm.com gmock_a3, gmock_a4, gmock_a5, gmock_a6, gmock_a7, gmock_a8); \ 59013481Sgiacomo.travaglini@arm.com } \ 59113481Sgiacomo.travaglini@arm.com mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(8, constness, \ 59213481Sgiacomo.travaglini@arm.com Method) 59313481Sgiacomo.travaglini@arm.com 59413481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! 59513481Sgiacomo.travaglini@arm.com#define GMOCK_METHOD9_(tn, constness, ct, Method, ...) \ 59613481Sgiacomo.travaglini@arm.com GMOCK_RESULT_(tn, __VA_ARGS__) ct Method( \ 59713481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ 59813481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ 59913481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ 60013481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ 60113481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5, \ 60213481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 6, __VA_ARGS__) gmock_a6, \ 60313481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 7, __VA_ARGS__) gmock_a7, \ 60413481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 8, __VA_ARGS__) gmock_a8, \ 60513481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 9, __VA_ARGS__) gmock_a9) constness { \ 60613481Sgiacomo.travaglini@arm.com GTEST_COMPILE_ASSERT_((::testing::tuple_size< \ 60713481Sgiacomo.travaglini@arm.com tn ::testing::internal::Function<__VA_ARGS__>::ArgumentTuple>::value \ 60813481Sgiacomo.travaglini@arm.com == 9), \ 60913481Sgiacomo.travaglini@arm.com this_method_does_not_take_9_arguments); \ 61013481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(9, constness, Method).SetOwnerAndName(this, #Method); \ 61113481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(9, constness, Method).Invoke(gmock_a1, gmock_a2, \ 61213481Sgiacomo.travaglini@arm.com gmock_a3, gmock_a4, gmock_a5, gmock_a6, gmock_a7, gmock_a8, \ 61313481Sgiacomo.travaglini@arm.com gmock_a9); \ 61413481Sgiacomo.travaglini@arm.com } \ 61513481Sgiacomo.travaglini@arm.com ::testing::MockSpec<__VA_ARGS__>& \ 61613481Sgiacomo.travaglini@arm.com gmock_##Method(GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ 61713481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ 61813481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ 61913481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ 62013481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5, \ 62113481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 6, __VA_ARGS__) gmock_a6, \ 62213481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 7, __VA_ARGS__) gmock_a7, \ 62313481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 8, __VA_ARGS__) gmock_a8, \ 62413481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 9, __VA_ARGS__) gmock_a9) constness { \ 62513481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(9, constness, Method).RegisterOwner(this); \ 62613481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(9, constness, Method).With(gmock_a1, gmock_a2, \ 62713481Sgiacomo.travaglini@arm.com gmock_a3, gmock_a4, gmock_a5, gmock_a6, gmock_a7, gmock_a8, \ 62813481Sgiacomo.travaglini@arm.com gmock_a9); \ 62913481Sgiacomo.travaglini@arm.com } \ 63013481Sgiacomo.travaglini@arm.com mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(9, constness, \ 63113481Sgiacomo.travaglini@arm.com Method) 63213481Sgiacomo.travaglini@arm.com 63313481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! 63413481Sgiacomo.travaglini@arm.com#define GMOCK_METHOD10_(tn, constness, ct, Method, ...) \ 63513481Sgiacomo.travaglini@arm.com GMOCK_RESULT_(tn, __VA_ARGS__) ct Method( \ 63613481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ 63713481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ 63813481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ 63913481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ 64013481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5, \ 64113481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 6, __VA_ARGS__) gmock_a6, \ 64213481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 7, __VA_ARGS__) gmock_a7, \ 64313481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 8, __VA_ARGS__) gmock_a8, \ 64413481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 9, __VA_ARGS__) gmock_a9, \ 64513481Sgiacomo.travaglini@arm.com GMOCK_ARG_(tn, 10, __VA_ARGS__) gmock_a10) constness { \ 64613481Sgiacomo.travaglini@arm.com GTEST_COMPILE_ASSERT_((::testing::tuple_size< \ 64713481Sgiacomo.travaglini@arm.com tn ::testing::internal::Function<__VA_ARGS__>::ArgumentTuple>::value \ 64813481Sgiacomo.travaglini@arm.com == 10), \ 64913481Sgiacomo.travaglini@arm.com this_method_does_not_take_10_arguments); \ 65013481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(10, constness, Method).SetOwnerAndName(this, #Method); \ 65113481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(10, constness, Method).Invoke(gmock_a1, gmock_a2, \ 65213481Sgiacomo.travaglini@arm.com gmock_a3, gmock_a4, gmock_a5, gmock_a6, gmock_a7, gmock_a8, gmock_a9, \ 65313481Sgiacomo.travaglini@arm.com gmock_a10); \ 65413481Sgiacomo.travaglini@arm.com } \ 65513481Sgiacomo.travaglini@arm.com ::testing::MockSpec<__VA_ARGS__>& \ 65613481Sgiacomo.travaglini@arm.com gmock_##Method(GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ 65713481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ 65813481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ 65913481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ 66013481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5, \ 66113481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 6, __VA_ARGS__) gmock_a6, \ 66213481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 7, __VA_ARGS__) gmock_a7, \ 66313481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 8, __VA_ARGS__) gmock_a8, \ 66413481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 9, __VA_ARGS__) gmock_a9, \ 66513481Sgiacomo.travaglini@arm.com GMOCK_MATCHER_(tn, 10, \ 66613481Sgiacomo.travaglini@arm.com __VA_ARGS__) gmock_a10) constness { \ 66713481Sgiacomo.travaglini@arm.com GMOCK_MOCKER_(10, constness, Method).RegisterOwner(this); \ 66813481Sgiacomo.travaglini@arm.com return GMOCK_MOCKER_(10, constness, Method).With(gmock_a1, gmock_a2, \ 66913481Sgiacomo.travaglini@arm.com gmock_a3, gmock_a4, gmock_a5, gmock_a6, gmock_a7, gmock_a8, gmock_a9, \ 67013481Sgiacomo.travaglini@arm.com gmock_a10); \ 67113481Sgiacomo.travaglini@arm.com } \ 67213481Sgiacomo.travaglini@arm.com mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(10, constness, \ 67313481Sgiacomo.travaglini@arm.com Method) 67413481Sgiacomo.travaglini@arm.com 67513481Sgiacomo.travaglini@arm.com#define MOCK_METHOD0(m, ...) GMOCK_METHOD0_(, , , m, __VA_ARGS__) 67613481Sgiacomo.travaglini@arm.com#define MOCK_METHOD1(m, ...) GMOCK_METHOD1_(, , , m, __VA_ARGS__) 67713481Sgiacomo.travaglini@arm.com#define MOCK_METHOD2(m, ...) GMOCK_METHOD2_(, , , m, __VA_ARGS__) 67813481Sgiacomo.travaglini@arm.com#define MOCK_METHOD3(m, ...) GMOCK_METHOD3_(, , , m, __VA_ARGS__) 67913481Sgiacomo.travaglini@arm.com#define MOCK_METHOD4(m, ...) GMOCK_METHOD4_(, , , m, __VA_ARGS__) 68013481Sgiacomo.travaglini@arm.com#define MOCK_METHOD5(m, ...) GMOCK_METHOD5_(, , , m, __VA_ARGS__) 68113481Sgiacomo.travaglini@arm.com#define MOCK_METHOD6(m, ...) GMOCK_METHOD6_(, , , m, __VA_ARGS__) 68213481Sgiacomo.travaglini@arm.com#define MOCK_METHOD7(m, ...) GMOCK_METHOD7_(, , , m, __VA_ARGS__) 68313481Sgiacomo.travaglini@arm.com#define MOCK_METHOD8(m, ...) GMOCK_METHOD8_(, , , m, __VA_ARGS__) 68413481Sgiacomo.travaglini@arm.com#define MOCK_METHOD9(m, ...) GMOCK_METHOD9_(, , , m, __VA_ARGS__) 68513481Sgiacomo.travaglini@arm.com#define MOCK_METHOD10(m, ...) GMOCK_METHOD10_(, , , m, __VA_ARGS__) 68613481Sgiacomo.travaglini@arm.com 68713481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD0(m, ...) GMOCK_METHOD0_(, const, , m, __VA_ARGS__) 68813481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD1(m, ...) GMOCK_METHOD1_(, const, , m, __VA_ARGS__) 68913481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD2(m, ...) GMOCK_METHOD2_(, const, , m, __VA_ARGS__) 69013481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD3(m, ...) GMOCK_METHOD3_(, const, , m, __VA_ARGS__) 69113481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD4(m, ...) GMOCK_METHOD4_(, const, , m, __VA_ARGS__) 69213481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD5(m, ...) GMOCK_METHOD5_(, const, , m, __VA_ARGS__) 69313481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD6(m, ...) GMOCK_METHOD6_(, const, , m, __VA_ARGS__) 69413481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD7(m, ...) GMOCK_METHOD7_(, const, , m, __VA_ARGS__) 69513481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD8(m, ...) GMOCK_METHOD8_(, const, , m, __VA_ARGS__) 69613481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD9(m, ...) GMOCK_METHOD9_(, const, , m, __VA_ARGS__) 69713481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD10(m, ...) GMOCK_METHOD10_(, const, , m, __VA_ARGS__) 69813481Sgiacomo.travaglini@arm.com 69913481Sgiacomo.travaglini@arm.com#define MOCK_METHOD0_T(m, ...) GMOCK_METHOD0_(typename, , , m, __VA_ARGS__) 70013481Sgiacomo.travaglini@arm.com#define MOCK_METHOD1_T(m, ...) GMOCK_METHOD1_(typename, , , m, __VA_ARGS__) 70113481Sgiacomo.travaglini@arm.com#define MOCK_METHOD2_T(m, ...) GMOCK_METHOD2_(typename, , , m, __VA_ARGS__) 70213481Sgiacomo.travaglini@arm.com#define MOCK_METHOD3_T(m, ...) GMOCK_METHOD3_(typename, , , m, __VA_ARGS__) 70313481Sgiacomo.travaglini@arm.com#define MOCK_METHOD4_T(m, ...) GMOCK_METHOD4_(typename, , , m, __VA_ARGS__) 70413481Sgiacomo.travaglini@arm.com#define MOCK_METHOD5_T(m, ...) GMOCK_METHOD5_(typename, , , m, __VA_ARGS__) 70513481Sgiacomo.travaglini@arm.com#define MOCK_METHOD6_T(m, ...) GMOCK_METHOD6_(typename, , , m, __VA_ARGS__) 70613481Sgiacomo.travaglini@arm.com#define MOCK_METHOD7_T(m, ...) GMOCK_METHOD7_(typename, , , m, __VA_ARGS__) 70713481Sgiacomo.travaglini@arm.com#define MOCK_METHOD8_T(m, ...) GMOCK_METHOD8_(typename, , , m, __VA_ARGS__) 70813481Sgiacomo.travaglini@arm.com#define MOCK_METHOD9_T(m, ...) GMOCK_METHOD9_(typename, , , m, __VA_ARGS__) 70913481Sgiacomo.travaglini@arm.com#define MOCK_METHOD10_T(m, ...) GMOCK_METHOD10_(typename, , , m, __VA_ARGS__) 71013481Sgiacomo.travaglini@arm.com 71113481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD0_T(m, ...) \ 71213481Sgiacomo.travaglini@arm.com GMOCK_METHOD0_(typename, const, , m, __VA_ARGS__) 71313481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD1_T(m, ...) \ 71413481Sgiacomo.travaglini@arm.com GMOCK_METHOD1_(typename, const, , m, __VA_ARGS__) 71513481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD2_T(m, ...) \ 71613481Sgiacomo.travaglini@arm.com GMOCK_METHOD2_(typename, const, , m, __VA_ARGS__) 71713481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD3_T(m, ...) \ 71813481Sgiacomo.travaglini@arm.com GMOCK_METHOD3_(typename, const, , m, __VA_ARGS__) 71913481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD4_T(m, ...) \ 72013481Sgiacomo.travaglini@arm.com GMOCK_METHOD4_(typename, const, , m, __VA_ARGS__) 72113481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD5_T(m, ...) \ 72213481Sgiacomo.travaglini@arm.com GMOCK_METHOD5_(typename, const, , m, __VA_ARGS__) 72313481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD6_T(m, ...) \ 72413481Sgiacomo.travaglini@arm.com GMOCK_METHOD6_(typename, const, , m, __VA_ARGS__) 72513481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD7_T(m, ...) \ 72613481Sgiacomo.travaglini@arm.com GMOCK_METHOD7_(typename, const, , m, __VA_ARGS__) 72713481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD8_T(m, ...) \ 72813481Sgiacomo.travaglini@arm.com GMOCK_METHOD8_(typename, const, , m, __VA_ARGS__) 72913481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD9_T(m, ...) \ 73013481Sgiacomo.travaglini@arm.com GMOCK_METHOD9_(typename, const, , m, __VA_ARGS__) 73113481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD10_T(m, ...) \ 73213481Sgiacomo.travaglini@arm.com GMOCK_METHOD10_(typename, const, , m, __VA_ARGS__) 73313481Sgiacomo.travaglini@arm.com 73413481Sgiacomo.travaglini@arm.com#define MOCK_METHOD0_WITH_CALLTYPE(ct, m, ...) \ 73513481Sgiacomo.travaglini@arm.com GMOCK_METHOD0_(, , ct, m, __VA_ARGS__) 73613481Sgiacomo.travaglini@arm.com#define MOCK_METHOD1_WITH_CALLTYPE(ct, m, ...) \ 73713481Sgiacomo.travaglini@arm.com GMOCK_METHOD1_(, , ct, m, __VA_ARGS__) 73813481Sgiacomo.travaglini@arm.com#define MOCK_METHOD2_WITH_CALLTYPE(ct, m, ...) \ 73913481Sgiacomo.travaglini@arm.com GMOCK_METHOD2_(, , ct, m, __VA_ARGS__) 74013481Sgiacomo.travaglini@arm.com#define MOCK_METHOD3_WITH_CALLTYPE(ct, m, ...) \ 74113481Sgiacomo.travaglini@arm.com GMOCK_METHOD3_(, , ct, m, __VA_ARGS__) 74213481Sgiacomo.travaglini@arm.com#define MOCK_METHOD4_WITH_CALLTYPE(ct, m, ...) \ 74313481Sgiacomo.travaglini@arm.com GMOCK_METHOD4_(, , ct, m, __VA_ARGS__) 74413481Sgiacomo.travaglini@arm.com#define MOCK_METHOD5_WITH_CALLTYPE(ct, m, ...) \ 74513481Sgiacomo.travaglini@arm.com GMOCK_METHOD5_(, , ct, m, __VA_ARGS__) 74613481Sgiacomo.travaglini@arm.com#define MOCK_METHOD6_WITH_CALLTYPE(ct, m, ...) \ 74713481Sgiacomo.travaglini@arm.com GMOCK_METHOD6_(, , ct, m, __VA_ARGS__) 74813481Sgiacomo.travaglini@arm.com#define MOCK_METHOD7_WITH_CALLTYPE(ct, m, ...) \ 74913481Sgiacomo.travaglini@arm.com GMOCK_METHOD7_(, , ct, m, __VA_ARGS__) 75013481Sgiacomo.travaglini@arm.com#define MOCK_METHOD8_WITH_CALLTYPE(ct, m, ...) \ 75113481Sgiacomo.travaglini@arm.com GMOCK_METHOD8_(, , ct, m, __VA_ARGS__) 75213481Sgiacomo.travaglini@arm.com#define MOCK_METHOD9_WITH_CALLTYPE(ct, m, ...) \ 75313481Sgiacomo.travaglini@arm.com GMOCK_METHOD9_(, , ct, m, __VA_ARGS__) 75413481Sgiacomo.travaglini@arm.com#define MOCK_METHOD10_WITH_CALLTYPE(ct, m, ...) \ 75513481Sgiacomo.travaglini@arm.com GMOCK_METHOD10_(, , ct, m, __VA_ARGS__) 75613481Sgiacomo.travaglini@arm.com 75713481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD0_WITH_CALLTYPE(ct, m, ...) \ 75813481Sgiacomo.travaglini@arm.com GMOCK_METHOD0_(, const, ct, m, __VA_ARGS__) 75913481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD1_WITH_CALLTYPE(ct, m, ...) \ 76013481Sgiacomo.travaglini@arm.com GMOCK_METHOD1_(, const, ct, m, __VA_ARGS__) 76113481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD2_WITH_CALLTYPE(ct, m, ...) \ 76213481Sgiacomo.travaglini@arm.com GMOCK_METHOD2_(, const, ct, m, __VA_ARGS__) 76313481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD3_WITH_CALLTYPE(ct, m, ...) \ 76413481Sgiacomo.travaglini@arm.com GMOCK_METHOD3_(, const, ct, m, __VA_ARGS__) 76513481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD4_WITH_CALLTYPE(ct, m, ...) \ 76613481Sgiacomo.travaglini@arm.com GMOCK_METHOD4_(, const, ct, m, __VA_ARGS__) 76713481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD5_WITH_CALLTYPE(ct, m, ...) \ 76813481Sgiacomo.travaglini@arm.com GMOCK_METHOD5_(, const, ct, m, __VA_ARGS__) 76913481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD6_WITH_CALLTYPE(ct, m, ...) \ 77013481Sgiacomo.travaglini@arm.com GMOCK_METHOD6_(, const, ct, m, __VA_ARGS__) 77113481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD7_WITH_CALLTYPE(ct, m, ...) \ 77213481Sgiacomo.travaglini@arm.com GMOCK_METHOD7_(, const, ct, m, __VA_ARGS__) 77313481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD8_WITH_CALLTYPE(ct, m, ...) \ 77413481Sgiacomo.travaglini@arm.com GMOCK_METHOD8_(, const, ct, m, __VA_ARGS__) 77513481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD9_WITH_CALLTYPE(ct, m, ...) \ 77613481Sgiacomo.travaglini@arm.com GMOCK_METHOD9_(, const, ct, m, __VA_ARGS__) 77713481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD10_WITH_CALLTYPE(ct, m, ...) \ 77813481Sgiacomo.travaglini@arm.com GMOCK_METHOD10_(, const, ct, m, __VA_ARGS__) 77913481Sgiacomo.travaglini@arm.com 78013481Sgiacomo.travaglini@arm.com#define MOCK_METHOD0_T_WITH_CALLTYPE(ct, m, ...) \ 78113481Sgiacomo.travaglini@arm.com GMOCK_METHOD0_(typename, , ct, m, __VA_ARGS__) 78213481Sgiacomo.travaglini@arm.com#define MOCK_METHOD1_T_WITH_CALLTYPE(ct, m, ...) \ 78313481Sgiacomo.travaglini@arm.com GMOCK_METHOD1_(typename, , ct, m, __VA_ARGS__) 78413481Sgiacomo.travaglini@arm.com#define MOCK_METHOD2_T_WITH_CALLTYPE(ct, m, ...) \ 78513481Sgiacomo.travaglini@arm.com GMOCK_METHOD2_(typename, , ct, m, __VA_ARGS__) 78613481Sgiacomo.travaglini@arm.com#define MOCK_METHOD3_T_WITH_CALLTYPE(ct, m, ...) \ 78713481Sgiacomo.travaglini@arm.com GMOCK_METHOD3_(typename, , ct, m, __VA_ARGS__) 78813481Sgiacomo.travaglini@arm.com#define MOCK_METHOD4_T_WITH_CALLTYPE(ct, m, ...) \ 78913481Sgiacomo.travaglini@arm.com GMOCK_METHOD4_(typename, , ct, m, __VA_ARGS__) 79013481Sgiacomo.travaglini@arm.com#define MOCK_METHOD5_T_WITH_CALLTYPE(ct, m, ...) \ 79113481Sgiacomo.travaglini@arm.com GMOCK_METHOD5_(typename, , ct, m, __VA_ARGS__) 79213481Sgiacomo.travaglini@arm.com#define MOCK_METHOD6_T_WITH_CALLTYPE(ct, m, ...) \ 79313481Sgiacomo.travaglini@arm.com GMOCK_METHOD6_(typename, , ct, m, __VA_ARGS__) 79413481Sgiacomo.travaglini@arm.com#define MOCK_METHOD7_T_WITH_CALLTYPE(ct, m, ...) \ 79513481Sgiacomo.travaglini@arm.com GMOCK_METHOD7_(typename, , ct, m, __VA_ARGS__) 79613481Sgiacomo.travaglini@arm.com#define MOCK_METHOD8_T_WITH_CALLTYPE(ct, m, ...) \ 79713481Sgiacomo.travaglini@arm.com GMOCK_METHOD8_(typename, , ct, m, __VA_ARGS__) 79813481Sgiacomo.travaglini@arm.com#define MOCK_METHOD9_T_WITH_CALLTYPE(ct, m, ...) \ 79913481Sgiacomo.travaglini@arm.com GMOCK_METHOD9_(typename, , ct, m, __VA_ARGS__) 80013481Sgiacomo.travaglini@arm.com#define MOCK_METHOD10_T_WITH_CALLTYPE(ct, m, ...) \ 80113481Sgiacomo.travaglini@arm.com GMOCK_METHOD10_(typename, , ct, m, __VA_ARGS__) 80213481Sgiacomo.travaglini@arm.com 80313481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD0_T_WITH_CALLTYPE(ct, m, ...) \ 80413481Sgiacomo.travaglini@arm.com GMOCK_METHOD0_(typename, const, ct, m, __VA_ARGS__) 80513481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD1_T_WITH_CALLTYPE(ct, m, ...) \ 80613481Sgiacomo.travaglini@arm.com GMOCK_METHOD1_(typename, const, ct, m, __VA_ARGS__) 80713481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD2_T_WITH_CALLTYPE(ct, m, ...) \ 80813481Sgiacomo.travaglini@arm.com GMOCK_METHOD2_(typename, const, ct, m, __VA_ARGS__) 80913481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD3_T_WITH_CALLTYPE(ct, m, ...) \ 81013481Sgiacomo.travaglini@arm.com GMOCK_METHOD3_(typename, const, ct, m, __VA_ARGS__) 81113481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD4_T_WITH_CALLTYPE(ct, m, ...) \ 81213481Sgiacomo.travaglini@arm.com GMOCK_METHOD4_(typename, const, ct, m, __VA_ARGS__) 81313481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD5_T_WITH_CALLTYPE(ct, m, ...) \ 81413481Sgiacomo.travaglini@arm.com GMOCK_METHOD5_(typename, const, ct, m, __VA_ARGS__) 81513481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD6_T_WITH_CALLTYPE(ct, m, ...) \ 81613481Sgiacomo.travaglini@arm.com GMOCK_METHOD6_(typename, const, ct, m, __VA_ARGS__) 81713481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD7_T_WITH_CALLTYPE(ct, m, ...) \ 81813481Sgiacomo.travaglini@arm.com GMOCK_METHOD7_(typename, const, ct, m, __VA_ARGS__) 81913481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD8_T_WITH_CALLTYPE(ct, m, ...) \ 82013481Sgiacomo.travaglini@arm.com GMOCK_METHOD8_(typename, const, ct, m, __VA_ARGS__) 82113481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD9_T_WITH_CALLTYPE(ct, m, ...) \ 82213481Sgiacomo.travaglini@arm.com GMOCK_METHOD9_(typename, const, ct, m, __VA_ARGS__) 82313481Sgiacomo.travaglini@arm.com#define MOCK_CONST_METHOD10_T_WITH_CALLTYPE(ct, m, ...) \ 82413481Sgiacomo.travaglini@arm.com GMOCK_METHOD10_(typename, const, ct, m, __VA_ARGS__) 82513481Sgiacomo.travaglini@arm.com 82613481Sgiacomo.travaglini@arm.com// A MockFunction<F> class has one mock method whose type is F. It is 82713481Sgiacomo.travaglini@arm.com// useful when you just want your test code to emit some messages and 82813481Sgiacomo.travaglini@arm.com// have Google Mock verify the right messages are sent (and perhaps at 82913481Sgiacomo.travaglini@arm.com// the right times). For example, if you are exercising code: 83013481Sgiacomo.travaglini@arm.com// 83113481Sgiacomo.travaglini@arm.com// Foo(1); 83213481Sgiacomo.travaglini@arm.com// Foo(2); 83313481Sgiacomo.travaglini@arm.com// Foo(3); 83413481Sgiacomo.travaglini@arm.com// 83513481Sgiacomo.travaglini@arm.com// and want to verify that Foo(1) and Foo(3) both invoke 83613481Sgiacomo.travaglini@arm.com// mock.Bar("a"), but Foo(2) doesn't invoke anything, you can write: 83713481Sgiacomo.travaglini@arm.com// 83813481Sgiacomo.travaglini@arm.com// TEST(FooTest, InvokesBarCorrectly) { 83913481Sgiacomo.travaglini@arm.com// MyMock mock; 84013481Sgiacomo.travaglini@arm.com// MockFunction<void(string check_point_name)> check; 84113481Sgiacomo.travaglini@arm.com// { 84213481Sgiacomo.travaglini@arm.com// InSequence s; 84313481Sgiacomo.travaglini@arm.com// 84413481Sgiacomo.travaglini@arm.com// EXPECT_CALL(mock, Bar("a")); 84513481Sgiacomo.travaglini@arm.com// EXPECT_CALL(check, Call("1")); 84613481Sgiacomo.travaglini@arm.com// EXPECT_CALL(check, Call("2")); 84713481Sgiacomo.travaglini@arm.com// EXPECT_CALL(mock, Bar("a")); 84813481Sgiacomo.travaglini@arm.com// } 84913481Sgiacomo.travaglini@arm.com// Foo(1); 85013481Sgiacomo.travaglini@arm.com// check.Call("1"); 85113481Sgiacomo.travaglini@arm.com// Foo(2); 85213481Sgiacomo.travaglini@arm.com// check.Call("2"); 85313481Sgiacomo.travaglini@arm.com// Foo(3); 85413481Sgiacomo.travaglini@arm.com// } 85513481Sgiacomo.travaglini@arm.com// 85613481Sgiacomo.travaglini@arm.com// The expectation spec says that the first Bar("a") must happen 85713481Sgiacomo.travaglini@arm.com// before check point "1", the second Bar("a") must happen after check 85813481Sgiacomo.travaglini@arm.com// point "2", and nothing should happen between the two check 85913481Sgiacomo.travaglini@arm.com// points. The explicit check points make it easy to tell which 86013481Sgiacomo.travaglini@arm.com// Bar("a") is called by which call to Foo(). 86113481Sgiacomo.travaglini@arm.com// 86213481Sgiacomo.travaglini@arm.com// MockFunction<F> can also be used to exercise code that accepts 86313481Sgiacomo.travaglini@arm.com// std::function<F> callbacks. To do so, use AsStdFunction() method 86413481Sgiacomo.travaglini@arm.com// to create std::function proxy forwarding to original object's Call. 86513481Sgiacomo.travaglini@arm.com// Example: 86613481Sgiacomo.travaglini@arm.com// 86713481Sgiacomo.travaglini@arm.com// TEST(FooTest, RunsCallbackWithBarArgument) { 86813481Sgiacomo.travaglini@arm.com// MockFunction<int(string)> callback; 86913481Sgiacomo.travaglini@arm.com// EXPECT_CALL(callback, Call("bar")).WillOnce(Return(1)); 87013481Sgiacomo.travaglini@arm.com// Foo(callback.AsStdFunction()); 87113481Sgiacomo.travaglini@arm.com// } 87213481Sgiacomo.travaglini@arm.comtemplate <typename F> 87313481Sgiacomo.travaglini@arm.comclass MockFunction; 87413481Sgiacomo.travaglini@arm.com 87513481Sgiacomo.travaglini@arm.comtemplate <typename R> 87613481Sgiacomo.travaglini@arm.comclass MockFunction<R()> { 87713481Sgiacomo.travaglini@arm.com public: 87813481Sgiacomo.travaglini@arm.com MockFunction() {} 87913481Sgiacomo.travaglini@arm.com 88013481Sgiacomo.travaglini@arm.com MOCK_METHOD0_T(Call, R()); 88113481Sgiacomo.travaglini@arm.com 88213481Sgiacomo.travaglini@arm.com#if GTEST_HAS_STD_FUNCTION_ 88313481Sgiacomo.travaglini@arm.com std::function<R()> AsStdFunction() { 88413481Sgiacomo.travaglini@arm.com return [this]() -> R { 88513481Sgiacomo.travaglini@arm.com return this->Call(); 88613481Sgiacomo.travaglini@arm.com }; 88713481Sgiacomo.travaglini@arm.com } 88813481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_STD_FUNCTION_ 88913481Sgiacomo.travaglini@arm.com 89013481Sgiacomo.travaglini@arm.com private: 89113481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); 89213481Sgiacomo.travaglini@arm.com}; 89313481Sgiacomo.travaglini@arm.com 89413481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A0> 89513481Sgiacomo.travaglini@arm.comclass MockFunction<R(A0)> { 89613481Sgiacomo.travaglini@arm.com public: 89713481Sgiacomo.travaglini@arm.com MockFunction() {} 89813481Sgiacomo.travaglini@arm.com 89913481Sgiacomo.travaglini@arm.com MOCK_METHOD1_T(Call, R(A0)); 90013481Sgiacomo.travaglini@arm.com 90113481Sgiacomo.travaglini@arm.com#if GTEST_HAS_STD_FUNCTION_ 90213481Sgiacomo.travaglini@arm.com std::function<R(A0)> AsStdFunction() { 90313481Sgiacomo.travaglini@arm.com return [this](A0 a0) -> R { 90413481Sgiacomo.travaglini@arm.com return this->Call(a0); 90513481Sgiacomo.travaglini@arm.com }; 90613481Sgiacomo.travaglini@arm.com } 90713481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_STD_FUNCTION_ 90813481Sgiacomo.travaglini@arm.com 90913481Sgiacomo.travaglini@arm.com private: 91013481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); 91113481Sgiacomo.travaglini@arm.com}; 91213481Sgiacomo.travaglini@arm.com 91313481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A0, typename A1> 91413481Sgiacomo.travaglini@arm.comclass MockFunction<R(A0, A1)> { 91513481Sgiacomo.travaglini@arm.com public: 91613481Sgiacomo.travaglini@arm.com MockFunction() {} 91713481Sgiacomo.travaglini@arm.com 91813481Sgiacomo.travaglini@arm.com MOCK_METHOD2_T(Call, R(A0, A1)); 91913481Sgiacomo.travaglini@arm.com 92013481Sgiacomo.travaglini@arm.com#if GTEST_HAS_STD_FUNCTION_ 92113481Sgiacomo.travaglini@arm.com std::function<R(A0, A1)> AsStdFunction() { 92213481Sgiacomo.travaglini@arm.com return [this](A0 a0, A1 a1) -> R { 92313481Sgiacomo.travaglini@arm.com return this->Call(a0, a1); 92413481Sgiacomo.travaglini@arm.com }; 92513481Sgiacomo.travaglini@arm.com } 92613481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_STD_FUNCTION_ 92713481Sgiacomo.travaglini@arm.com 92813481Sgiacomo.travaglini@arm.com private: 92913481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); 93013481Sgiacomo.travaglini@arm.com}; 93113481Sgiacomo.travaglini@arm.com 93213481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A0, typename A1, typename A2> 93313481Sgiacomo.travaglini@arm.comclass MockFunction<R(A0, A1, A2)> { 93413481Sgiacomo.travaglini@arm.com public: 93513481Sgiacomo.travaglini@arm.com MockFunction() {} 93613481Sgiacomo.travaglini@arm.com 93713481Sgiacomo.travaglini@arm.com MOCK_METHOD3_T(Call, R(A0, A1, A2)); 93813481Sgiacomo.travaglini@arm.com 93913481Sgiacomo.travaglini@arm.com#if GTEST_HAS_STD_FUNCTION_ 94013481Sgiacomo.travaglini@arm.com std::function<R(A0, A1, A2)> AsStdFunction() { 94113481Sgiacomo.travaglini@arm.com return [this](A0 a0, A1 a1, A2 a2) -> R { 94213481Sgiacomo.travaglini@arm.com return this->Call(a0, a1, a2); 94313481Sgiacomo.travaglini@arm.com }; 94413481Sgiacomo.travaglini@arm.com } 94513481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_STD_FUNCTION_ 94613481Sgiacomo.travaglini@arm.com 94713481Sgiacomo.travaglini@arm.com private: 94813481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); 94913481Sgiacomo.travaglini@arm.com}; 95013481Sgiacomo.travaglini@arm.com 95113481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A0, typename A1, typename A2, typename A3> 95213481Sgiacomo.travaglini@arm.comclass MockFunction<R(A0, A1, A2, A3)> { 95313481Sgiacomo.travaglini@arm.com public: 95413481Sgiacomo.travaglini@arm.com MockFunction() {} 95513481Sgiacomo.travaglini@arm.com 95613481Sgiacomo.travaglini@arm.com MOCK_METHOD4_T(Call, R(A0, A1, A2, A3)); 95713481Sgiacomo.travaglini@arm.com 95813481Sgiacomo.travaglini@arm.com#if GTEST_HAS_STD_FUNCTION_ 95913481Sgiacomo.travaglini@arm.com std::function<R(A0, A1, A2, A3)> AsStdFunction() { 96013481Sgiacomo.travaglini@arm.com return [this](A0 a0, A1 a1, A2 a2, A3 a3) -> R { 96113481Sgiacomo.travaglini@arm.com return this->Call(a0, a1, a2, a3); 96213481Sgiacomo.travaglini@arm.com }; 96313481Sgiacomo.travaglini@arm.com } 96413481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_STD_FUNCTION_ 96513481Sgiacomo.travaglini@arm.com 96613481Sgiacomo.travaglini@arm.com private: 96713481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); 96813481Sgiacomo.travaglini@arm.com}; 96913481Sgiacomo.travaglini@arm.com 97013481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A0, typename A1, typename A2, typename A3, 97113481Sgiacomo.travaglini@arm.com typename A4> 97213481Sgiacomo.travaglini@arm.comclass MockFunction<R(A0, A1, A2, A3, A4)> { 97313481Sgiacomo.travaglini@arm.com public: 97413481Sgiacomo.travaglini@arm.com MockFunction() {} 97513481Sgiacomo.travaglini@arm.com 97613481Sgiacomo.travaglini@arm.com MOCK_METHOD5_T(Call, R(A0, A1, A2, A3, A4)); 97713481Sgiacomo.travaglini@arm.com 97813481Sgiacomo.travaglini@arm.com#if GTEST_HAS_STD_FUNCTION_ 97913481Sgiacomo.travaglini@arm.com std::function<R(A0, A1, A2, A3, A4)> AsStdFunction() { 98013481Sgiacomo.travaglini@arm.com return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) -> R { 98113481Sgiacomo.travaglini@arm.com return this->Call(a0, a1, a2, a3, a4); 98213481Sgiacomo.travaglini@arm.com }; 98313481Sgiacomo.travaglini@arm.com } 98413481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_STD_FUNCTION_ 98513481Sgiacomo.travaglini@arm.com 98613481Sgiacomo.travaglini@arm.com private: 98713481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); 98813481Sgiacomo.travaglini@arm.com}; 98913481Sgiacomo.travaglini@arm.com 99013481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A0, typename A1, typename A2, typename A3, 99113481Sgiacomo.travaglini@arm.com typename A4, typename A5> 99213481Sgiacomo.travaglini@arm.comclass MockFunction<R(A0, A1, A2, A3, A4, A5)> { 99313481Sgiacomo.travaglini@arm.com public: 99413481Sgiacomo.travaglini@arm.com MockFunction() {} 99513481Sgiacomo.travaglini@arm.com 99613481Sgiacomo.travaglini@arm.com MOCK_METHOD6_T(Call, R(A0, A1, A2, A3, A4, A5)); 99713481Sgiacomo.travaglini@arm.com 99813481Sgiacomo.travaglini@arm.com#if GTEST_HAS_STD_FUNCTION_ 99913481Sgiacomo.travaglini@arm.com std::function<R(A0, A1, A2, A3, A4, A5)> AsStdFunction() { 100013481Sgiacomo.travaglini@arm.com return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) -> R { 100113481Sgiacomo.travaglini@arm.com return this->Call(a0, a1, a2, a3, a4, a5); 100213481Sgiacomo.travaglini@arm.com }; 100313481Sgiacomo.travaglini@arm.com } 100413481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_STD_FUNCTION_ 100513481Sgiacomo.travaglini@arm.com 100613481Sgiacomo.travaglini@arm.com private: 100713481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); 100813481Sgiacomo.travaglini@arm.com}; 100913481Sgiacomo.travaglini@arm.com 101013481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A0, typename A1, typename A2, typename A3, 101113481Sgiacomo.travaglini@arm.com typename A4, typename A5, typename A6> 101213481Sgiacomo.travaglini@arm.comclass MockFunction<R(A0, A1, A2, A3, A4, A5, A6)> { 101313481Sgiacomo.travaglini@arm.com public: 101413481Sgiacomo.travaglini@arm.com MockFunction() {} 101513481Sgiacomo.travaglini@arm.com 101613481Sgiacomo.travaglini@arm.com MOCK_METHOD7_T(Call, R(A0, A1, A2, A3, A4, A5, A6)); 101713481Sgiacomo.travaglini@arm.com 101813481Sgiacomo.travaglini@arm.com#if GTEST_HAS_STD_FUNCTION_ 101913481Sgiacomo.travaglini@arm.com std::function<R(A0, A1, A2, A3, A4, A5, A6)> AsStdFunction() { 102013481Sgiacomo.travaglini@arm.com return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) -> R { 102113481Sgiacomo.travaglini@arm.com return this->Call(a0, a1, a2, a3, a4, a5, a6); 102213481Sgiacomo.travaglini@arm.com }; 102313481Sgiacomo.travaglini@arm.com } 102413481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_STD_FUNCTION_ 102513481Sgiacomo.travaglini@arm.com 102613481Sgiacomo.travaglini@arm.com private: 102713481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); 102813481Sgiacomo.travaglini@arm.com}; 102913481Sgiacomo.travaglini@arm.com 103013481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A0, typename A1, typename A2, typename A3, 103113481Sgiacomo.travaglini@arm.com typename A4, typename A5, typename A6, typename A7> 103213481Sgiacomo.travaglini@arm.comclass MockFunction<R(A0, A1, A2, A3, A4, A5, A6, A7)> { 103313481Sgiacomo.travaglini@arm.com public: 103413481Sgiacomo.travaglini@arm.com MockFunction() {} 103513481Sgiacomo.travaglini@arm.com 103613481Sgiacomo.travaglini@arm.com MOCK_METHOD8_T(Call, R(A0, A1, A2, A3, A4, A5, A6, A7)); 103713481Sgiacomo.travaglini@arm.com 103813481Sgiacomo.travaglini@arm.com#if GTEST_HAS_STD_FUNCTION_ 103913481Sgiacomo.travaglini@arm.com std::function<R(A0, A1, A2, A3, A4, A5, A6, A7)> AsStdFunction() { 104013481Sgiacomo.travaglini@arm.com return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) -> R { 104113481Sgiacomo.travaglini@arm.com return this->Call(a0, a1, a2, a3, a4, a5, a6, a7); 104213481Sgiacomo.travaglini@arm.com }; 104313481Sgiacomo.travaglini@arm.com } 104413481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_STD_FUNCTION_ 104513481Sgiacomo.travaglini@arm.com 104613481Sgiacomo.travaglini@arm.com private: 104713481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); 104813481Sgiacomo.travaglini@arm.com}; 104913481Sgiacomo.travaglini@arm.com 105013481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A0, typename A1, typename A2, typename A3, 105113481Sgiacomo.travaglini@arm.com typename A4, typename A5, typename A6, typename A7, typename A8> 105213481Sgiacomo.travaglini@arm.comclass MockFunction<R(A0, A1, A2, A3, A4, A5, A6, A7, A8)> { 105313481Sgiacomo.travaglini@arm.com public: 105413481Sgiacomo.travaglini@arm.com MockFunction() {} 105513481Sgiacomo.travaglini@arm.com 105613481Sgiacomo.travaglini@arm.com MOCK_METHOD9_T(Call, R(A0, A1, A2, A3, A4, A5, A6, A7, A8)); 105713481Sgiacomo.travaglini@arm.com 105813481Sgiacomo.travaglini@arm.com#if GTEST_HAS_STD_FUNCTION_ 105913481Sgiacomo.travaglini@arm.com std::function<R(A0, A1, A2, A3, A4, A5, A6, A7, A8)> AsStdFunction() { 106013481Sgiacomo.travaglini@arm.com return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, 106113481Sgiacomo.travaglini@arm.com A8 a8) -> R { 106213481Sgiacomo.travaglini@arm.com return this->Call(a0, a1, a2, a3, a4, a5, a6, a7, a8); 106313481Sgiacomo.travaglini@arm.com }; 106413481Sgiacomo.travaglini@arm.com } 106513481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_STD_FUNCTION_ 106613481Sgiacomo.travaglini@arm.com 106713481Sgiacomo.travaglini@arm.com private: 106813481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); 106913481Sgiacomo.travaglini@arm.com}; 107013481Sgiacomo.travaglini@arm.com 107113481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A0, typename A1, typename A2, typename A3, 107213481Sgiacomo.travaglini@arm.com typename A4, typename A5, typename A6, typename A7, typename A8, 107313481Sgiacomo.travaglini@arm.com typename A9> 107413481Sgiacomo.travaglini@arm.comclass MockFunction<R(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9)> { 107513481Sgiacomo.travaglini@arm.com public: 107613481Sgiacomo.travaglini@arm.com MockFunction() {} 107713481Sgiacomo.travaglini@arm.com 107813481Sgiacomo.travaglini@arm.com MOCK_METHOD10_T(Call, R(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9)); 107913481Sgiacomo.travaglini@arm.com 108013481Sgiacomo.travaglini@arm.com#if GTEST_HAS_STD_FUNCTION_ 108113481Sgiacomo.travaglini@arm.com std::function<R(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9)> AsStdFunction() { 108213481Sgiacomo.travaglini@arm.com return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, 108313481Sgiacomo.travaglini@arm.com A8 a8, A9 a9) -> R { 108413481Sgiacomo.travaglini@arm.com return this->Call(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); 108513481Sgiacomo.travaglini@arm.com }; 108613481Sgiacomo.travaglini@arm.com } 108713481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_STD_FUNCTION_ 108813481Sgiacomo.travaglini@arm.com 108913481Sgiacomo.travaglini@arm.com private: 109013481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); 109113481Sgiacomo.travaglini@arm.com}; 109213481Sgiacomo.travaglini@arm.com 109313481Sgiacomo.travaglini@arm.com} // namespace testing 109413481Sgiacomo.travaglini@arm.com 109513481Sgiacomo.travaglini@arm.com#endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_FUNCTION_MOCKERS_H_ 1096