1f92157deSopenharmony_ci// Copyright 2007, Google Inc. 2f92157deSopenharmony_ci// All rights reserved. 3f92157deSopenharmony_ci// 4f92157deSopenharmony_ci// Redistribution and use in source and binary forms, with or without 5f92157deSopenharmony_ci// modification, are permitted provided that the following conditions are 6f92157deSopenharmony_ci// met: 7f92157deSopenharmony_ci// 8f92157deSopenharmony_ci// * Redistributions of source code must retain the above copyright 9f92157deSopenharmony_ci// notice, this list of conditions and the following disclaimer. 10f92157deSopenharmony_ci// * Redistributions in binary form must reproduce the above 11f92157deSopenharmony_ci// copyright notice, this list of conditions and the following disclaimer 12f92157deSopenharmony_ci// in the documentation and/or other materials provided with the 13f92157deSopenharmony_ci// distribution. 14f92157deSopenharmony_ci// * Neither the name of Google Inc. nor the names of its 15f92157deSopenharmony_ci// contributors may be used to endorse or promote products derived from 16f92157deSopenharmony_ci// this software without specific prior written permission. 17f92157deSopenharmony_ci// 18f92157deSopenharmony_ci// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19f92157deSopenharmony_ci// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20f92157deSopenharmony_ci// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21f92157deSopenharmony_ci// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22f92157deSopenharmony_ci// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23f92157deSopenharmony_ci// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24f92157deSopenharmony_ci// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25f92157deSopenharmony_ci// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26f92157deSopenharmony_ci// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27f92157deSopenharmony_ci// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28f92157deSopenharmony_ci// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29f92157deSopenharmony_ci 30f92157deSopenharmony_ci// Google Mock - a framework for writing C++ mock classes. 31f92157deSopenharmony_ci// 32f92157deSopenharmony_ci// This file implements MOCK_METHOD. 33f92157deSopenharmony_ci 34f92157deSopenharmony_ci// IWYU pragma: private, include "gmock/gmock.h" 35f92157deSopenharmony_ci// IWYU pragma: friend gmock/.* 36f92157deSopenharmony_ci 37f92157deSopenharmony_ci#ifndef GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_FUNCTION_MOCKER_H_ 38f92157deSopenharmony_ci#define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_FUNCTION_MOCKER_H_ 39f92157deSopenharmony_ci 40f92157deSopenharmony_ci#include <type_traits> // IWYU pragma: keep 41f92157deSopenharmony_ci#include <utility> // IWYU pragma: keep 42f92157deSopenharmony_ci 43f92157deSopenharmony_ci#include "gmock/gmock-spec-builders.h" 44f92157deSopenharmony_ci#include "gmock/internal/gmock-internal-utils.h" 45f92157deSopenharmony_ci#include "gmock/internal/gmock-pp.h" 46f92157deSopenharmony_ci 47f92157deSopenharmony_cinamespace testing { 48f92157deSopenharmony_cinamespace internal { 49f92157deSopenharmony_citemplate <typename T> 50f92157deSopenharmony_ciusing identity_t = T; 51f92157deSopenharmony_ci 52f92157deSopenharmony_citemplate <typename Pattern> 53f92157deSopenharmony_cistruct ThisRefAdjuster { 54f92157deSopenharmony_ci template <typename T> 55f92157deSopenharmony_ci using AdjustT = typename std::conditional< 56f92157deSopenharmony_ci std::is_const<typename std::remove_reference<Pattern>::type>::value, 57f92157deSopenharmony_ci typename std::conditional<std::is_lvalue_reference<Pattern>::value, 58f92157deSopenharmony_ci const T&, const T&&>::type, 59f92157deSopenharmony_ci typename std::conditional<std::is_lvalue_reference<Pattern>::value, T&, 60f92157deSopenharmony_ci T&&>::type>::type; 61f92157deSopenharmony_ci 62f92157deSopenharmony_ci template <typename MockType> 63f92157deSopenharmony_ci static AdjustT<MockType> Adjust(const MockType& mock) { 64f92157deSopenharmony_ci return static_cast<AdjustT<MockType>>(const_cast<MockType&>(mock)); 65f92157deSopenharmony_ci } 66f92157deSopenharmony_ci}; 67f92157deSopenharmony_ci 68f92157deSopenharmony_ciconstexpr bool PrefixOf(const char* a, const char* b) { 69f92157deSopenharmony_ci return *a == 0 || (*a == *b && internal::PrefixOf(a + 1, b + 1)); 70f92157deSopenharmony_ci} 71f92157deSopenharmony_ci 72f92157deSopenharmony_citemplate <int N, int M> 73f92157deSopenharmony_ciconstexpr bool StartsWith(const char (&prefix)[N], const char (&str)[M]) { 74f92157deSopenharmony_ci return N <= M && internal::PrefixOf(prefix, str); 75f92157deSopenharmony_ci} 76f92157deSopenharmony_ci 77f92157deSopenharmony_citemplate <int N, int M> 78f92157deSopenharmony_ciconstexpr bool EndsWith(const char (&suffix)[N], const char (&str)[M]) { 79f92157deSopenharmony_ci return N <= M && internal::PrefixOf(suffix, str + M - N); 80f92157deSopenharmony_ci} 81f92157deSopenharmony_ci 82f92157deSopenharmony_citemplate <int N, int M> 83f92157deSopenharmony_ciconstexpr bool Equals(const char (&a)[N], const char (&b)[M]) { 84f92157deSopenharmony_ci return N == M && internal::PrefixOf(a, b); 85f92157deSopenharmony_ci} 86f92157deSopenharmony_ci 87f92157deSopenharmony_citemplate <int N> 88f92157deSopenharmony_ciconstexpr bool ValidateSpec(const char (&spec)[N]) { 89f92157deSopenharmony_ci return internal::Equals("const", spec) || 90f92157deSopenharmony_ci internal::Equals("override", spec) || 91f92157deSopenharmony_ci internal::Equals("final", spec) || 92f92157deSopenharmony_ci internal::Equals("noexcept", spec) || 93f92157deSopenharmony_ci (internal::StartsWith("noexcept(", spec) && 94f92157deSopenharmony_ci internal::EndsWith(")", spec)) || 95f92157deSopenharmony_ci internal::Equals("ref(&)", spec) || 96f92157deSopenharmony_ci internal::Equals("ref(&&)", spec) || 97f92157deSopenharmony_ci (internal::StartsWith("Calltype(", spec) && 98f92157deSopenharmony_ci internal::EndsWith(")", spec)); 99f92157deSopenharmony_ci} 100f92157deSopenharmony_ci 101f92157deSopenharmony_ci} // namespace internal 102f92157deSopenharmony_ci 103f92157deSopenharmony_ci// The style guide prohibits "using" statements in a namespace scope 104f92157deSopenharmony_ci// inside a header file. However, the FunctionMocker class template 105f92157deSopenharmony_ci// is meant to be defined in the ::testing namespace. The following 106f92157deSopenharmony_ci// line is just a trick for working around a bug in MSVC 8.0, which 107f92157deSopenharmony_ci// cannot handle it if we define FunctionMocker in ::testing. 108f92157deSopenharmony_ciusing internal::FunctionMocker; 109f92157deSopenharmony_ci} // namespace testing 110f92157deSopenharmony_ci 111f92157deSopenharmony_ci#define MOCK_METHOD(...) \ 112f92157deSopenharmony_ci GMOCK_INTERNAL_WARNING_PUSH() \ 113f92157deSopenharmony_ci GMOCK_INTERNAL_WARNING_CLANG(ignored, "-Wunused-member-function") \ 114f92157deSopenharmony_ci GMOCK_PP_VARIADIC_CALL(GMOCK_INTERNAL_MOCK_METHOD_ARG_, __VA_ARGS__) \ 115f92157deSopenharmony_ci GMOCK_INTERNAL_WARNING_POP() 116f92157deSopenharmony_ci 117f92157deSopenharmony_ci#define GMOCK_INTERNAL_MOCK_METHOD_ARG_1(...) \ 118f92157deSopenharmony_ci GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) 119f92157deSopenharmony_ci 120f92157deSopenharmony_ci#define GMOCK_INTERNAL_MOCK_METHOD_ARG_2(...) \ 121f92157deSopenharmony_ci GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) 122f92157deSopenharmony_ci 123f92157deSopenharmony_ci#define GMOCK_INTERNAL_MOCK_METHOD_ARG_3(_Ret, _MethodName, _Args) \ 124f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHOD_ARG_4(_Ret, _MethodName, _Args, ()) 125f92157deSopenharmony_ci 126f92157deSopenharmony_ci#define GMOCK_INTERNAL_MOCK_METHOD_ARG_4(_Ret, _MethodName, _Args, _Spec) \ 127f92157deSopenharmony_ci GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Args); \ 128f92157deSopenharmony_ci GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Spec); \ 129f92157deSopenharmony_ci GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE( \ 130f92157deSopenharmony_ci GMOCK_PP_NARG0 _Args, GMOCK_INTERNAL_SIGNATURE(_Ret, _Args)); \ 131f92157deSopenharmony_ci GMOCK_INTERNAL_ASSERT_VALID_SPEC(_Spec) \ 132f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHOD_IMPL( \ 133f92157deSopenharmony_ci GMOCK_PP_NARG0 _Args, _MethodName, GMOCK_INTERNAL_HAS_CONST(_Spec), \ 134f92157deSopenharmony_ci GMOCK_INTERNAL_HAS_OVERRIDE(_Spec), GMOCK_INTERNAL_HAS_FINAL(_Spec), \ 135f92157deSopenharmony_ci GMOCK_INTERNAL_GET_NOEXCEPT_SPEC(_Spec), \ 136f92157deSopenharmony_ci GMOCK_INTERNAL_GET_CALLTYPE_SPEC(_Spec), \ 137f92157deSopenharmony_ci GMOCK_INTERNAL_GET_REF_SPEC(_Spec), \ 138f92157deSopenharmony_ci (GMOCK_INTERNAL_SIGNATURE(_Ret, _Args))) 139f92157deSopenharmony_ci 140f92157deSopenharmony_ci#define GMOCK_INTERNAL_MOCK_METHOD_ARG_5(...) \ 141f92157deSopenharmony_ci GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) 142f92157deSopenharmony_ci 143f92157deSopenharmony_ci#define GMOCK_INTERNAL_MOCK_METHOD_ARG_6(...) \ 144f92157deSopenharmony_ci GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) 145f92157deSopenharmony_ci 146f92157deSopenharmony_ci#define GMOCK_INTERNAL_MOCK_METHOD_ARG_7(...) \ 147f92157deSopenharmony_ci GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) 148f92157deSopenharmony_ci 149f92157deSopenharmony_ci#define GMOCK_INTERNAL_WRONG_ARITY(...) \ 150f92157deSopenharmony_ci static_assert( \ 151f92157deSopenharmony_ci false, \ 152f92157deSopenharmony_ci "MOCK_METHOD must be called with 3 or 4 arguments. _Ret, " \ 153f92157deSopenharmony_ci "_MethodName, _Args and optionally _Spec. _Args and _Spec must be " \ 154f92157deSopenharmony_ci "enclosed in parentheses. If _Ret is a type with unprotected commas, " \ 155f92157deSopenharmony_ci "it must also be enclosed in parentheses.") 156f92157deSopenharmony_ci 157f92157deSopenharmony_ci#define GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Tuple) \ 158f92157deSopenharmony_ci static_assert( \ 159f92157deSopenharmony_ci GMOCK_PP_IS_ENCLOSED_PARENS(_Tuple), \ 160f92157deSopenharmony_ci GMOCK_PP_STRINGIZE(_Tuple) " should be enclosed in parentheses.") 161f92157deSopenharmony_ci 162f92157deSopenharmony_ci#define GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE(_N, ...) \ 163f92157deSopenharmony_ci static_assert( \ 164f92157deSopenharmony_ci std::is_function<__VA_ARGS__>::value, \ 165f92157deSopenharmony_ci "Signature must be a function type, maybe return type contains " \ 166f92157deSopenharmony_ci "unprotected comma."); \ 167f92157deSopenharmony_ci static_assert( \ 168f92157deSopenharmony_ci ::testing::tuple_size<typename ::testing::internal::Function< \ 169f92157deSopenharmony_ci __VA_ARGS__>::ArgumentTuple>::value == _N, \ 170f92157deSopenharmony_ci "This method does not take " GMOCK_PP_STRINGIZE( \ 171f92157deSopenharmony_ci _N) " arguments. Parenthesize all types with unprotected commas.") 172f92157deSopenharmony_ci 173f92157deSopenharmony_ci#define GMOCK_INTERNAL_ASSERT_VALID_SPEC(_Spec) \ 174f92157deSopenharmony_ci GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_ASSERT_VALID_SPEC_ELEMENT, ~, _Spec) 175f92157deSopenharmony_ci 176f92157deSopenharmony_ci#define GMOCK_INTERNAL_MOCK_METHOD_IMPL(_N, _MethodName, _Constness, \ 177f92157deSopenharmony_ci _Override, _Final, _NoexceptSpec, \ 178f92157deSopenharmony_ci _CallType, _RefSpec, _Signature) \ 179f92157deSopenharmony_ci typename ::testing::internal::Function<GMOCK_PP_REMOVE_PARENS( \ 180f92157deSopenharmony_ci _Signature)>::Result \ 181f92157deSopenharmony_ci GMOCK_INTERNAL_EXPAND(_CallType) \ 182f92157deSopenharmony_ci _MethodName(GMOCK_PP_REPEAT(GMOCK_INTERNAL_PARAMETER, _Signature, _N)) \ 183f92157deSopenharmony_ci GMOCK_PP_IF(_Constness, const, ) _RefSpec _NoexceptSpec \ 184f92157deSopenharmony_ci GMOCK_PP_IF(_Override, override, ) GMOCK_PP_IF(_Final, final, ) { \ 185f92157deSopenharmony_ci GMOCK_MOCKER_(_N, _Constness, _MethodName) \ 186f92157deSopenharmony_ci .SetOwnerAndName(this, #_MethodName); \ 187f92157deSopenharmony_ci return GMOCK_MOCKER_(_N, _Constness, _MethodName) \ 188f92157deSopenharmony_ci .Invoke(GMOCK_PP_REPEAT(GMOCK_INTERNAL_FORWARD_ARG, _Signature, _N)); \ 189f92157deSopenharmony_ci } \ 190f92157deSopenharmony_ci ::testing::MockSpec<GMOCK_PP_REMOVE_PARENS(_Signature)> gmock_##_MethodName( \ 191f92157deSopenharmony_ci GMOCK_PP_REPEAT(GMOCK_INTERNAL_MATCHER_PARAMETER, _Signature, _N)) \ 192f92157deSopenharmony_ci GMOCK_PP_IF(_Constness, const, ) _RefSpec { \ 193f92157deSopenharmony_ci GMOCK_MOCKER_(_N, _Constness, _MethodName).RegisterOwner(this); \ 194f92157deSopenharmony_ci return GMOCK_MOCKER_(_N, _Constness, _MethodName) \ 195f92157deSopenharmony_ci .With(GMOCK_PP_REPEAT(GMOCK_INTERNAL_MATCHER_ARGUMENT, , _N)); \ 196f92157deSopenharmony_ci } \ 197f92157deSopenharmony_ci ::testing::MockSpec<GMOCK_PP_REMOVE_PARENS(_Signature)> gmock_##_MethodName( \ 198f92157deSopenharmony_ci const ::testing::internal::WithoutMatchers&, \ 199f92157deSopenharmony_ci GMOCK_PP_IF(_Constness, const, )::testing::internal::Function< \ 200f92157deSopenharmony_ci GMOCK_PP_REMOVE_PARENS(_Signature)>*) const _RefSpec _NoexceptSpec { \ 201f92157deSopenharmony_ci return ::testing::internal::ThisRefAdjuster<GMOCK_PP_IF( \ 202f92157deSopenharmony_ci _Constness, const, ) int _RefSpec>::Adjust(*this) \ 203f92157deSopenharmony_ci .gmock_##_MethodName(GMOCK_PP_REPEAT( \ 204f92157deSopenharmony_ci GMOCK_INTERNAL_A_MATCHER_ARGUMENT, _Signature, _N)); \ 205f92157deSopenharmony_ci } \ 206f92157deSopenharmony_ci mutable ::testing::FunctionMocker<GMOCK_PP_REMOVE_PARENS(_Signature)> \ 207f92157deSopenharmony_ci GMOCK_MOCKER_(_N, _Constness, _MethodName) 208f92157deSopenharmony_ci 209f92157deSopenharmony_ci#define GMOCK_INTERNAL_EXPAND(...) __VA_ARGS__ 210f92157deSopenharmony_ci 211f92157deSopenharmony_ci// Valid modifiers. 212f92157deSopenharmony_ci#define GMOCK_INTERNAL_HAS_CONST(_Tuple) \ 213f92157deSopenharmony_ci GMOCK_PP_HAS_COMMA(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_DETECT_CONST, ~, _Tuple)) 214f92157deSopenharmony_ci 215f92157deSopenharmony_ci#define GMOCK_INTERNAL_HAS_OVERRIDE(_Tuple) \ 216f92157deSopenharmony_ci GMOCK_PP_HAS_COMMA( \ 217f92157deSopenharmony_ci GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_DETECT_OVERRIDE, ~, _Tuple)) 218f92157deSopenharmony_ci 219f92157deSopenharmony_ci#define GMOCK_INTERNAL_HAS_FINAL(_Tuple) \ 220f92157deSopenharmony_ci GMOCK_PP_HAS_COMMA(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_DETECT_FINAL, ~, _Tuple)) 221f92157deSopenharmony_ci 222f92157deSopenharmony_ci#define GMOCK_INTERNAL_GET_NOEXCEPT_SPEC(_Tuple) \ 223f92157deSopenharmony_ci GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_NOEXCEPT_SPEC_IF_NOEXCEPT, ~, _Tuple) 224f92157deSopenharmony_ci 225f92157deSopenharmony_ci#define GMOCK_INTERNAL_NOEXCEPT_SPEC_IF_NOEXCEPT(_i, _, _elem) \ 226f92157deSopenharmony_ci GMOCK_PP_IF( \ 227f92157deSopenharmony_ci GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_NOEXCEPT(_i, _, _elem)), \ 228f92157deSopenharmony_ci _elem, ) 229f92157deSopenharmony_ci 230f92157deSopenharmony_ci#define GMOCK_INTERNAL_GET_CALLTYPE_SPEC(_Tuple) \ 231f92157deSopenharmony_ci GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_CALLTYPE_SPEC_IF_CALLTYPE, ~, _Tuple) 232f92157deSopenharmony_ci 233f92157deSopenharmony_ci#define GMOCK_INTERNAL_CALLTYPE_SPEC_IF_CALLTYPE(_i, _, _elem) \ 234f92157deSopenharmony_ci GMOCK_PP_IF( \ 235f92157deSopenharmony_ci GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_CALLTYPE(_i, _, _elem)), \ 236f92157deSopenharmony_ci GMOCK_PP_CAT(GMOCK_INTERNAL_UNPACK_, _elem), ) 237f92157deSopenharmony_ci 238f92157deSopenharmony_ci#define GMOCK_INTERNAL_GET_REF_SPEC(_Tuple) \ 239f92157deSopenharmony_ci GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_REF_SPEC_IF_REF, ~, _Tuple) 240f92157deSopenharmony_ci 241f92157deSopenharmony_ci#define GMOCK_INTERNAL_REF_SPEC_IF_REF(_i, _, _elem) \ 242f92157deSopenharmony_ci GMOCK_PP_IF(GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_REF(_i, _, _elem)), \ 243f92157deSopenharmony_ci GMOCK_PP_CAT(GMOCK_INTERNAL_UNPACK_, _elem), ) 244f92157deSopenharmony_ci 245f92157deSopenharmony_ci#ifdef GMOCK_INTERNAL_STRICT_SPEC_ASSERT 246f92157deSopenharmony_ci#define GMOCK_INTERNAL_ASSERT_VALID_SPEC_ELEMENT(_i, _, _elem) \ 247f92157deSopenharmony_ci static_assert( \ 248f92157deSopenharmony_ci ::testing::internal::ValidateSpec(GMOCK_PP_STRINGIZE(_elem)), \ 249f92157deSopenharmony_ci "Token \'" GMOCK_PP_STRINGIZE( \ 250f92157deSopenharmony_ci _elem) "\' cannot be recognized as a valid specification " \ 251f92157deSopenharmony_ci "modifier. Is a ',' missing?"); 252f92157deSopenharmony_ci#else 253f92157deSopenharmony_ci#define GMOCK_INTERNAL_ASSERT_VALID_SPEC_ELEMENT(_i, _, _elem) \ 254f92157deSopenharmony_ci static_assert( \ 255f92157deSopenharmony_ci (GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_CONST(_i, _, _elem)) + \ 256f92157deSopenharmony_ci GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_OVERRIDE(_i, _, _elem)) + \ 257f92157deSopenharmony_ci GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_FINAL(_i, _, _elem)) + \ 258f92157deSopenharmony_ci GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_NOEXCEPT(_i, _, _elem)) + \ 259f92157deSopenharmony_ci GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_REF(_i, _, _elem)) + \ 260f92157deSopenharmony_ci GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_CALLTYPE(_i, _, _elem))) == 1, \ 261f92157deSopenharmony_ci GMOCK_PP_STRINGIZE( \ 262f92157deSopenharmony_ci _elem) " cannot be recognized as a valid specification modifier."); 263f92157deSopenharmony_ci#endif // GMOCK_INTERNAL_STRICT_SPEC_ASSERT 264f92157deSopenharmony_ci 265f92157deSopenharmony_ci// Modifiers implementation. 266f92157deSopenharmony_ci#define GMOCK_INTERNAL_DETECT_CONST(_i, _, _elem) \ 267f92157deSopenharmony_ci GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_CONST_I_, _elem) 268f92157deSopenharmony_ci 269f92157deSopenharmony_ci#define GMOCK_INTERNAL_DETECT_CONST_I_const , 270f92157deSopenharmony_ci 271f92157deSopenharmony_ci#define GMOCK_INTERNAL_DETECT_OVERRIDE(_i, _, _elem) \ 272f92157deSopenharmony_ci GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_OVERRIDE_I_, _elem) 273f92157deSopenharmony_ci 274f92157deSopenharmony_ci#define GMOCK_INTERNAL_DETECT_OVERRIDE_I_override , 275f92157deSopenharmony_ci 276f92157deSopenharmony_ci#define GMOCK_INTERNAL_DETECT_FINAL(_i, _, _elem) \ 277f92157deSopenharmony_ci GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_FINAL_I_, _elem) 278f92157deSopenharmony_ci 279f92157deSopenharmony_ci#define GMOCK_INTERNAL_DETECT_FINAL_I_final , 280f92157deSopenharmony_ci 281f92157deSopenharmony_ci#define GMOCK_INTERNAL_DETECT_NOEXCEPT(_i, _, _elem) \ 282f92157deSopenharmony_ci GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_NOEXCEPT_I_, _elem) 283f92157deSopenharmony_ci 284f92157deSopenharmony_ci#define GMOCK_INTERNAL_DETECT_NOEXCEPT_I_noexcept , 285f92157deSopenharmony_ci 286f92157deSopenharmony_ci#define GMOCK_INTERNAL_DETECT_REF(_i, _, _elem) \ 287f92157deSopenharmony_ci GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_REF_I_, _elem) 288f92157deSopenharmony_ci 289f92157deSopenharmony_ci#define GMOCK_INTERNAL_DETECT_REF_I_ref , 290f92157deSopenharmony_ci 291f92157deSopenharmony_ci#define GMOCK_INTERNAL_UNPACK_ref(x) x 292f92157deSopenharmony_ci 293f92157deSopenharmony_ci#define GMOCK_INTERNAL_DETECT_CALLTYPE(_i, _, _elem) \ 294f92157deSopenharmony_ci GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_CALLTYPE_I_, _elem) 295f92157deSopenharmony_ci 296f92157deSopenharmony_ci#define GMOCK_INTERNAL_DETECT_CALLTYPE_I_Calltype , 297f92157deSopenharmony_ci 298f92157deSopenharmony_ci#define GMOCK_INTERNAL_UNPACK_Calltype(...) __VA_ARGS__ 299f92157deSopenharmony_ci 300f92157deSopenharmony_ci// Note: The use of `identity_t` here allows _Ret to represent return types that 301f92157deSopenharmony_ci// would normally need to be specified in a different way. For example, a method 302f92157deSopenharmony_ci// returning a function pointer must be written as 303f92157deSopenharmony_ci// 304f92157deSopenharmony_ci// fn_ptr_return_t (*method(method_args_t...))(fn_ptr_args_t...) 305f92157deSopenharmony_ci// 306f92157deSopenharmony_ci// But we only support placing the return type at the beginning. To handle this, 307f92157deSopenharmony_ci// we wrap all calls in identity_t, so that a declaration will be expanded to 308f92157deSopenharmony_ci// 309f92157deSopenharmony_ci// identity_t<fn_ptr_return_t (*)(fn_ptr_args_t...)> method(method_args_t...) 310f92157deSopenharmony_ci// 311f92157deSopenharmony_ci// This allows us to work around the syntactic oddities of function/method 312f92157deSopenharmony_ci// types. 313f92157deSopenharmony_ci#define GMOCK_INTERNAL_SIGNATURE(_Ret, _Args) \ 314f92157deSopenharmony_ci ::testing::internal::identity_t<GMOCK_PP_IF(GMOCK_PP_IS_BEGIN_PARENS(_Ret), \ 315f92157deSopenharmony_ci GMOCK_PP_REMOVE_PARENS, \ 316f92157deSopenharmony_ci GMOCK_PP_IDENTITY)(_Ret)>( \ 317f92157deSopenharmony_ci GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_GET_TYPE, _, _Args)) 318f92157deSopenharmony_ci 319f92157deSopenharmony_ci#define GMOCK_INTERNAL_GET_TYPE(_i, _, _elem) \ 320f92157deSopenharmony_ci GMOCK_PP_COMMA_IF(_i) \ 321f92157deSopenharmony_ci GMOCK_PP_IF(GMOCK_PP_IS_BEGIN_PARENS(_elem), GMOCK_PP_REMOVE_PARENS, \ 322f92157deSopenharmony_ci GMOCK_PP_IDENTITY) \ 323f92157deSopenharmony_ci (_elem) 324f92157deSopenharmony_ci 325f92157deSopenharmony_ci#define GMOCK_INTERNAL_PARAMETER(_i, _Signature, _) \ 326f92157deSopenharmony_ci GMOCK_PP_COMMA_IF(_i) \ 327f92157deSopenharmony_ci GMOCK_INTERNAL_ARG_O(_i, GMOCK_PP_REMOVE_PARENS(_Signature)) \ 328f92157deSopenharmony_ci gmock_a##_i 329f92157deSopenharmony_ci 330f92157deSopenharmony_ci#define GMOCK_INTERNAL_FORWARD_ARG(_i, _Signature, _) \ 331f92157deSopenharmony_ci GMOCK_PP_COMMA_IF(_i) \ 332f92157deSopenharmony_ci ::std::forward<GMOCK_INTERNAL_ARG_O( \ 333f92157deSopenharmony_ci _i, GMOCK_PP_REMOVE_PARENS(_Signature))>(gmock_a##_i) 334f92157deSopenharmony_ci 335f92157deSopenharmony_ci#define GMOCK_INTERNAL_MATCHER_PARAMETER(_i, _Signature, _) \ 336f92157deSopenharmony_ci GMOCK_PP_COMMA_IF(_i) \ 337f92157deSopenharmony_ci GMOCK_INTERNAL_MATCHER_O(_i, GMOCK_PP_REMOVE_PARENS(_Signature)) \ 338f92157deSopenharmony_ci gmock_a##_i 339f92157deSopenharmony_ci 340f92157deSopenharmony_ci#define GMOCK_INTERNAL_MATCHER_ARGUMENT(_i, _1, _2) \ 341f92157deSopenharmony_ci GMOCK_PP_COMMA_IF(_i) \ 342f92157deSopenharmony_ci gmock_a##_i 343f92157deSopenharmony_ci 344f92157deSopenharmony_ci#define GMOCK_INTERNAL_A_MATCHER_ARGUMENT(_i, _Signature, _) \ 345f92157deSopenharmony_ci GMOCK_PP_COMMA_IF(_i) \ 346f92157deSopenharmony_ci ::testing::A<GMOCK_INTERNAL_ARG_O(_i, GMOCK_PP_REMOVE_PARENS(_Signature))>() 347f92157deSopenharmony_ci 348f92157deSopenharmony_ci#define GMOCK_INTERNAL_ARG_O(_i, ...) \ 349f92157deSopenharmony_ci typename ::testing::internal::Function<__VA_ARGS__>::template Arg<_i>::type 350f92157deSopenharmony_ci 351f92157deSopenharmony_ci#define GMOCK_INTERNAL_MATCHER_O(_i, ...) \ 352f92157deSopenharmony_ci const ::testing::Matcher<typename ::testing::internal::Function< \ 353f92157deSopenharmony_ci __VA_ARGS__>::template Arg<_i>::type>& 354f92157deSopenharmony_ci 355f92157deSopenharmony_ci#define MOCK_METHOD0(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 0, __VA_ARGS__) 356f92157deSopenharmony_ci#define MOCK_METHOD1(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 1, __VA_ARGS__) 357f92157deSopenharmony_ci#define MOCK_METHOD2(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 2, __VA_ARGS__) 358f92157deSopenharmony_ci#define MOCK_METHOD3(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 3, __VA_ARGS__) 359f92157deSopenharmony_ci#define MOCK_METHOD4(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 4, __VA_ARGS__) 360f92157deSopenharmony_ci#define MOCK_METHOD5(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 5, __VA_ARGS__) 361f92157deSopenharmony_ci#define MOCK_METHOD6(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 6, __VA_ARGS__) 362f92157deSopenharmony_ci#define MOCK_METHOD7(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 7, __VA_ARGS__) 363f92157deSopenharmony_ci#define MOCK_METHOD8(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 8, __VA_ARGS__) 364f92157deSopenharmony_ci#define MOCK_METHOD9(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 9, __VA_ARGS__) 365f92157deSopenharmony_ci#define MOCK_METHOD10(m, ...) \ 366f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(, , m, 10, __VA_ARGS__) 367f92157deSopenharmony_ci#define MOCK_METHOD11(m, ...) \ 368f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(, , m, 11, __VA_ARGS__) 369f92157deSopenharmony_ci 370f92157deSopenharmony_ci#define MOCK_CONST_METHOD0(m, ...) \ 371f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, , m, 0, __VA_ARGS__) 372f92157deSopenharmony_ci#define MOCK_CONST_METHOD1(m, ...) \ 373f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, , m, 1, __VA_ARGS__) 374f92157deSopenharmony_ci#define MOCK_CONST_METHOD2(m, ...) \ 375f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, , m, 2, __VA_ARGS__) 376f92157deSopenharmony_ci#define MOCK_CONST_METHOD3(m, ...) \ 377f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, , m, 3, __VA_ARGS__) 378f92157deSopenharmony_ci#define MOCK_CONST_METHOD4(m, ...) \ 379f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, , m, 4, __VA_ARGS__) 380f92157deSopenharmony_ci#define MOCK_CONST_METHOD5(m, ...) \ 381f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, , m, 5, __VA_ARGS__) 382f92157deSopenharmony_ci#define MOCK_CONST_METHOD6(m, ...) \ 383f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, , m, 6, __VA_ARGS__) 384f92157deSopenharmony_ci#define MOCK_CONST_METHOD7(m, ...) \ 385f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, , m, 7, __VA_ARGS__) 386f92157deSopenharmony_ci#define MOCK_CONST_METHOD8(m, ...) \ 387f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, , m, 8, __VA_ARGS__) 388f92157deSopenharmony_ci#define MOCK_CONST_METHOD9(m, ...) \ 389f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, , m, 9, __VA_ARGS__) 390f92157deSopenharmony_ci#define MOCK_CONST_METHOD10(m, ...) \ 391f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, , m, 10, __VA_ARGS__) 392f92157deSopenharmony_ci 393f92157deSopenharmony_ci#define MOCK_METHOD0_T(m, ...) MOCK_METHOD0(m, __VA_ARGS__) 394f92157deSopenharmony_ci#define MOCK_METHOD1_T(m, ...) MOCK_METHOD1(m, __VA_ARGS__) 395f92157deSopenharmony_ci#define MOCK_METHOD2_T(m, ...) MOCK_METHOD2(m, __VA_ARGS__) 396f92157deSopenharmony_ci#define MOCK_METHOD3_T(m, ...) MOCK_METHOD3(m, __VA_ARGS__) 397f92157deSopenharmony_ci#define MOCK_METHOD4_T(m, ...) MOCK_METHOD4(m, __VA_ARGS__) 398f92157deSopenharmony_ci#define MOCK_METHOD5_T(m, ...) MOCK_METHOD5(m, __VA_ARGS__) 399f92157deSopenharmony_ci#define MOCK_METHOD6_T(m, ...) MOCK_METHOD6(m, __VA_ARGS__) 400f92157deSopenharmony_ci#define MOCK_METHOD7_T(m, ...) MOCK_METHOD7(m, __VA_ARGS__) 401f92157deSopenharmony_ci#define MOCK_METHOD8_T(m, ...) MOCK_METHOD8(m, __VA_ARGS__) 402f92157deSopenharmony_ci#define MOCK_METHOD9_T(m, ...) MOCK_METHOD9(m, __VA_ARGS__) 403f92157deSopenharmony_ci#define MOCK_METHOD10_T(m, ...) MOCK_METHOD10(m, __VA_ARGS__) 404f92157deSopenharmony_ci 405f92157deSopenharmony_ci#define MOCK_CONST_METHOD0_T(m, ...) MOCK_CONST_METHOD0(m, __VA_ARGS__) 406f92157deSopenharmony_ci#define MOCK_CONST_METHOD1_T(m, ...) MOCK_CONST_METHOD1(m, __VA_ARGS__) 407f92157deSopenharmony_ci#define MOCK_CONST_METHOD2_T(m, ...) MOCK_CONST_METHOD2(m, __VA_ARGS__) 408f92157deSopenharmony_ci#define MOCK_CONST_METHOD3_T(m, ...) MOCK_CONST_METHOD3(m, __VA_ARGS__) 409f92157deSopenharmony_ci#define MOCK_CONST_METHOD4_T(m, ...) MOCK_CONST_METHOD4(m, __VA_ARGS__) 410f92157deSopenharmony_ci#define MOCK_CONST_METHOD5_T(m, ...) MOCK_CONST_METHOD5(m, __VA_ARGS__) 411f92157deSopenharmony_ci#define MOCK_CONST_METHOD6_T(m, ...) MOCK_CONST_METHOD6(m, __VA_ARGS__) 412f92157deSopenharmony_ci#define MOCK_CONST_METHOD7_T(m, ...) MOCK_CONST_METHOD7(m, __VA_ARGS__) 413f92157deSopenharmony_ci#define MOCK_CONST_METHOD8_T(m, ...) MOCK_CONST_METHOD8(m, __VA_ARGS__) 414f92157deSopenharmony_ci#define MOCK_CONST_METHOD9_T(m, ...) MOCK_CONST_METHOD9(m, __VA_ARGS__) 415f92157deSopenharmony_ci#define MOCK_CONST_METHOD10_T(m, ...) MOCK_CONST_METHOD10(m, __VA_ARGS__) 416f92157deSopenharmony_ci 417f92157deSopenharmony_ci#define MOCK_METHOD0_WITH_CALLTYPE(ct, m, ...) \ 418f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 0, __VA_ARGS__) 419f92157deSopenharmony_ci#define MOCK_METHOD1_WITH_CALLTYPE(ct, m, ...) \ 420f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 1, __VA_ARGS__) 421f92157deSopenharmony_ci#define MOCK_METHOD2_WITH_CALLTYPE(ct, m, ...) \ 422f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 2, __VA_ARGS__) 423f92157deSopenharmony_ci#define MOCK_METHOD3_WITH_CALLTYPE(ct, m, ...) \ 424f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 3, __VA_ARGS__) 425f92157deSopenharmony_ci#define MOCK_METHOD4_WITH_CALLTYPE(ct, m, ...) \ 426f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 4, __VA_ARGS__) 427f92157deSopenharmony_ci#define MOCK_METHOD5_WITH_CALLTYPE(ct, m, ...) \ 428f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 5, __VA_ARGS__) 429f92157deSopenharmony_ci#define MOCK_METHOD6_WITH_CALLTYPE(ct, m, ...) \ 430f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 6, __VA_ARGS__) 431f92157deSopenharmony_ci#define MOCK_METHOD7_WITH_CALLTYPE(ct, m, ...) \ 432f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 7, __VA_ARGS__) 433f92157deSopenharmony_ci#define MOCK_METHOD8_WITH_CALLTYPE(ct, m, ...) \ 434f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 8, __VA_ARGS__) 435f92157deSopenharmony_ci#define MOCK_METHOD9_WITH_CALLTYPE(ct, m, ...) \ 436f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 9, __VA_ARGS__) 437f92157deSopenharmony_ci#define MOCK_METHOD10_WITH_CALLTYPE(ct, m, ...) \ 438f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 10, __VA_ARGS__) 439f92157deSopenharmony_ci 440f92157deSopenharmony_ci#define MOCK_CONST_METHOD0_WITH_CALLTYPE(ct, m, ...) \ 441f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 0, __VA_ARGS__) 442f92157deSopenharmony_ci#define MOCK_CONST_METHOD1_WITH_CALLTYPE(ct, m, ...) \ 443f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 1, __VA_ARGS__) 444f92157deSopenharmony_ci#define MOCK_CONST_METHOD2_WITH_CALLTYPE(ct, m, ...) \ 445f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 2, __VA_ARGS__) 446f92157deSopenharmony_ci#define MOCK_CONST_METHOD3_WITH_CALLTYPE(ct, m, ...) \ 447f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 3, __VA_ARGS__) 448f92157deSopenharmony_ci#define MOCK_CONST_METHOD4_WITH_CALLTYPE(ct, m, ...) \ 449f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 4, __VA_ARGS__) 450f92157deSopenharmony_ci#define MOCK_CONST_METHOD5_WITH_CALLTYPE(ct, m, ...) \ 451f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 5, __VA_ARGS__) 452f92157deSopenharmony_ci#define MOCK_CONST_METHOD6_WITH_CALLTYPE(ct, m, ...) \ 453f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 6, __VA_ARGS__) 454f92157deSopenharmony_ci#define MOCK_CONST_METHOD7_WITH_CALLTYPE(ct, m, ...) \ 455f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 7, __VA_ARGS__) 456f92157deSopenharmony_ci#define MOCK_CONST_METHOD8_WITH_CALLTYPE(ct, m, ...) \ 457f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 8, __VA_ARGS__) 458f92157deSopenharmony_ci#define MOCK_CONST_METHOD9_WITH_CALLTYPE(ct, m, ...) \ 459f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 9, __VA_ARGS__) 460f92157deSopenharmony_ci#define MOCK_CONST_METHOD10_WITH_CALLTYPE(ct, m, ...) \ 461f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 10, __VA_ARGS__) 462f92157deSopenharmony_ci 463f92157deSopenharmony_ci#define MOCK_METHOD0_T_WITH_CALLTYPE(ct, m, ...) \ 464f92157deSopenharmony_ci MOCK_METHOD0_WITH_CALLTYPE(ct, m, __VA_ARGS__) 465f92157deSopenharmony_ci#define MOCK_METHOD1_T_WITH_CALLTYPE(ct, m, ...) \ 466f92157deSopenharmony_ci MOCK_METHOD1_WITH_CALLTYPE(ct, m, __VA_ARGS__) 467f92157deSopenharmony_ci#define MOCK_METHOD2_T_WITH_CALLTYPE(ct, m, ...) \ 468f92157deSopenharmony_ci MOCK_METHOD2_WITH_CALLTYPE(ct, m, __VA_ARGS__) 469f92157deSopenharmony_ci#define MOCK_METHOD3_T_WITH_CALLTYPE(ct, m, ...) \ 470f92157deSopenharmony_ci MOCK_METHOD3_WITH_CALLTYPE(ct, m, __VA_ARGS__) 471f92157deSopenharmony_ci#define MOCK_METHOD4_T_WITH_CALLTYPE(ct, m, ...) \ 472f92157deSopenharmony_ci MOCK_METHOD4_WITH_CALLTYPE(ct, m, __VA_ARGS__) 473f92157deSopenharmony_ci#define MOCK_METHOD5_T_WITH_CALLTYPE(ct, m, ...) \ 474f92157deSopenharmony_ci MOCK_METHOD5_WITH_CALLTYPE(ct, m, __VA_ARGS__) 475f92157deSopenharmony_ci#define MOCK_METHOD6_T_WITH_CALLTYPE(ct, m, ...) \ 476f92157deSopenharmony_ci MOCK_METHOD6_WITH_CALLTYPE(ct, m, __VA_ARGS__) 477f92157deSopenharmony_ci#define MOCK_METHOD7_T_WITH_CALLTYPE(ct, m, ...) \ 478f92157deSopenharmony_ci MOCK_METHOD7_WITH_CALLTYPE(ct, m, __VA_ARGS__) 479f92157deSopenharmony_ci#define MOCK_METHOD8_T_WITH_CALLTYPE(ct, m, ...) \ 480f92157deSopenharmony_ci MOCK_METHOD8_WITH_CALLTYPE(ct, m, __VA_ARGS__) 481f92157deSopenharmony_ci#define MOCK_METHOD9_T_WITH_CALLTYPE(ct, m, ...) \ 482f92157deSopenharmony_ci MOCK_METHOD9_WITH_CALLTYPE(ct, m, __VA_ARGS__) 483f92157deSopenharmony_ci#define MOCK_METHOD10_T_WITH_CALLTYPE(ct, m, ...) \ 484f92157deSopenharmony_ci MOCK_METHOD10_WITH_CALLTYPE(ct, m, __VA_ARGS__) 485f92157deSopenharmony_ci 486f92157deSopenharmony_ci#define MOCK_CONST_METHOD0_T_WITH_CALLTYPE(ct, m, ...) \ 487f92157deSopenharmony_ci MOCK_CONST_METHOD0_WITH_CALLTYPE(ct, m, __VA_ARGS__) 488f92157deSopenharmony_ci#define MOCK_CONST_METHOD1_T_WITH_CALLTYPE(ct, m, ...) \ 489f92157deSopenharmony_ci MOCK_CONST_METHOD1_WITH_CALLTYPE(ct, m, __VA_ARGS__) 490f92157deSopenharmony_ci#define MOCK_CONST_METHOD2_T_WITH_CALLTYPE(ct, m, ...) \ 491f92157deSopenharmony_ci MOCK_CONST_METHOD2_WITH_CALLTYPE(ct, m, __VA_ARGS__) 492f92157deSopenharmony_ci#define MOCK_CONST_METHOD3_T_WITH_CALLTYPE(ct, m, ...) \ 493f92157deSopenharmony_ci MOCK_CONST_METHOD3_WITH_CALLTYPE(ct, m, __VA_ARGS__) 494f92157deSopenharmony_ci#define MOCK_CONST_METHOD4_T_WITH_CALLTYPE(ct, m, ...) \ 495f92157deSopenharmony_ci MOCK_CONST_METHOD4_WITH_CALLTYPE(ct, m, __VA_ARGS__) 496f92157deSopenharmony_ci#define MOCK_CONST_METHOD5_T_WITH_CALLTYPE(ct, m, ...) \ 497f92157deSopenharmony_ci MOCK_CONST_METHOD5_WITH_CALLTYPE(ct, m, __VA_ARGS__) 498f92157deSopenharmony_ci#define MOCK_CONST_METHOD6_T_WITH_CALLTYPE(ct, m, ...) \ 499f92157deSopenharmony_ci MOCK_CONST_METHOD6_WITH_CALLTYPE(ct, m, __VA_ARGS__) 500f92157deSopenharmony_ci#define MOCK_CONST_METHOD7_T_WITH_CALLTYPE(ct, m, ...) \ 501f92157deSopenharmony_ci MOCK_CONST_METHOD7_WITH_CALLTYPE(ct, m, __VA_ARGS__) 502f92157deSopenharmony_ci#define MOCK_CONST_METHOD8_T_WITH_CALLTYPE(ct, m, ...) \ 503f92157deSopenharmony_ci MOCK_CONST_METHOD8_WITH_CALLTYPE(ct, m, __VA_ARGS__) 504f92157deSopenharmony_ci#define MOCK_CONST_METHOD9_T_WITH_CALLTYPE(ct, m, ...) \ 505f92157deSopenharmony_ci MOCK_CONST_METHOD9_WITH_CALLTYPE(ct, m, __VA_ARGS__) 506f92157deSopenharmony_ci#define MOCK_CONST_METHOD10_T_WITH_CALLTYPE(ct, m, ...) \ 507f92157deSopenharmony_ci MOCK_CONST_METHOD10_WITH_CALLTYPE(ct, m, __VA_ARGS__) 508f92157deSopenharmony_ci 509f92157deSopenharmony_ci#define GMOCK_INTERNAL_MOCK_METHODN(constness, ct, Method, args_num, ...) \ 510f92157deSopenharmony_ci GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE( \ 511f92157deSopenharmony_ci args_num, ::testing::internal::identity_t<__VA_ARGS__>); \ 512f92157deSopenharmony_ci GMOCK_INTERNAL_MOCK_METHOD_IMPL( \ 513f92157deSopenharmony_ci args_num, Method, GMOCK_PP_NARG0(constness), 0, 0, , ct, , \ 514f92157deSopenharmony_ci (::testing::internal::identity_t<__VA_ARGS__>)) 515f92157deSopenharmony_ci 516f92157deSopenharmony_ci#define GMOCK_MOCKER_(arity, constness, Method) \ 517f92157deSopenharmony_ci GTEST_CONCAT_TOKEN_(gmock##constness##arity##_##Method##_, __LINE__) 518f92157deSopenharmony_ci 519f92157deSopenharmony_ci#endif // GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_FUNCTION_MOCKER_H_ 520