File indexing completed on 2025-02-21 10:03:05
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037 #ifndef GOOGLEMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_FUNCTION_MOCKER_H_
0038 #define GOOGLEMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_FUNCTION_MOCKER_H_
0039
0040 #include <type_traits> // IWYU pragma: keep
0041 #include <utility> // IWYU pragma: keep
0042
0043 #include "gmock/gmock-spec-builders.h"
0044 #include "gmock/internal/gmock-internal-utils.h"
0045 #include "gmock/internal/gmock-pp.h"
0046
0047 namespace testing {
0048 namespace internal {
0049 template <typename T>
0050 using identity_t = T;
0051
0052 template <typename Pattern>
0053 struct ThisRefAdjuster {
0054 template <typename T>
0055 using AdjustT = typename std::conditional<
0056 std::is_const<typename std::remove_reference<Pattern>::type>::value,
0057 typename std::conditional<std::is_lvalue_reference<Pattern>::value,
0058 const T&, const T&&>::type,
0059 typename std::conditional<std::is_lvalue_reference<Pattern>::value, T&,
0060 T&&>::type>::type;
0061
0062 template <typename MockType>
0063 static AdjustT<MockType> Adjust(const MockType& mock) {
0064 return static_cast<AdjustT<MockType>>(const_cast<MockType&>(mock));
0065 }
0066 };
0067
0068 constexpr bool PrefixOf(const char* a, const char* b) {
0069 return *a == 0 || (*a == *b && internal::PrefixOf(a + 1, b + 1));
0070 }
0071
0072 template <int N, int M>
0073 constexpr bool StartsWith(const char (&prefix)[N], const char (&str)[M]) {
0074 return N <= M && internal::PrefixOf(prefix, str);
0075 }
0076
0077 template <int N, int M>
0078 constexpr bool EndsWith(const char (&suffix)[N], const char (&str)[M]) {
0079 return N <= M && internal::PrefixOf(suffix, str + M - N);
0080 }
0081
0082 template <int N, int M>
0083 constexpr bool Equals(const char (&a)[N], const char (&b)[M]) {
0084 return N == M && internal::PrefixOf(a, b);
0085 }
0086
0087 template <int N>
0088 constexpr bool ValidateSpec(const char (&spec)[N]) {
0089 return internal::Equals("const", spec) ||
0090 internal::Equals("override", spec) ||
0091 internal::Equals("final", spec) ||
0092 internal::Equals("noexcept", spec) ||
0093 (internal::StartsWith("noexcept(", spec) &&
0094 internal::EndsWith(")", spec)) ||
0095 internal::Equals("ref(&)", spec) ||
0096 internal::Equals("ref(&&)", spec) ||
0097 (internal::StartsWith("Calltype(", spec) &&
0098 internal::EndsWith(")", spec));
0099 }
0100
0101 }
0102
0103
0104
0105
0106
0107
0108 using internal::FunctionMocker;
0109 }
0110
0111 #define MOCK_METHOD(...) \
0112 GMOCK_PP_VARIADIC_CALL(GMOCK_INTERNAL_MOCK_METHOD_ARG_, __VA_ARGS__)
0113
0114 #define GMOCK_INTERNAL_MOCK_METHOD_ARG_1(...) \
0115 GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__)
0116
0117 #define GMOCK_INTERNAL_MOCK_METHOD_ARG_2(...) \
0118 GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__)
0119
0120 #define GMOCK_INTERNAL_MOCK_METHOD_ARG_3(_Ret, _MethodName, _Args) \
0121 GMOCK_INTERNAL_MOCK_METHOD_ARG_4(_Ret, _MethodName, _Args, ())
0122
0123 #define GMOCK_INTERNAL_MOCK_METHOD_ARG_4(_Ret, _MethodName, _Args, _Spec) \
0124 GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Args); \
0125 GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Spec); \
0126 GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE( \
0127 GMOCK_PP_NARG0 _Args, GMOCK_INTERNAL_SIGNATURE(_Ret, _Args)); \
0128 GMOCK_INTERNAL_ASSERT_VALID_SPEC(_Spec) \
0129 GMOCK_INTERNAL_MOCK_METHOD_IMPL( \
0130 GMOCK_PP_NARG0 _Args, _MethodName, GMOCK_INTERNAL_HAS_CONST(_Spec), \
0131 GMOCK_INTERNAL_HAS_OVERRIDE(_Spec), GMOCK_INTERNAL_HAS_FINAL(_Spec), \
0132 GMOCK_INTERNAL_GET_NOEXCEPT_SPEC(_Spec), \
0133 GMOCK_INTERNAL_GET_CALLTYPE_SPEC(_Spec), \
0134 GMOCK_INTERNAL_GET_REF_SPEC(_Spec), \
0135 (GMOCK_INTERNAL_SIGNATURE(_Ret, _Args)))
0136
0137 #define GMOCK_INTERNAL_MOCK_METHOD_ARG_5(...) \
0138 GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__)
0139
0140 #define GMOCK_INTERNAL_MOCK_METHOD_ARG_6(...) \
0141 GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__)
0142
0143 #define GMOCK_INTERNAL_MOCK_METHOD_ARG_7(...) \
0144 GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__)
0145
0146 #define GMOCK_INTERNAL_WRONG_ARITY(...) \
0147 static_assert( \
0148 false, \
0149 "MOCK_METHOD must be called with 3 or 4 arguments. _Ret, " \
0150 "_MethodName, _Args and optionally _Spec. _Args and _Spec must be " \
0151 "enclosed in parentheses. If _Ret is a type with unprotected commas, " \
0152 "it must also be enclosed in parentheses.")
0153
0154 #define GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Tuple) \
0155 static_assert( \
0156 GMOCK_PP_IS_ENCLOSED_PARENS(_Tuple), \
0157 GMOCK_PP_STRINGIZE(_Tuple) " should be enclosed in parentheses.")
0158
0159 #define GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE(_N, ...) \
0160 static_assert( \
0161 std::is_function<__VA_ARGS__>::value, \
0162 "Signature must be a function type, maybe return type contains " \
0163 "unprotected comma."); \
0164 static_assert( \
0165 ::testing::tuple_size<typename ::testing::internal::Function< \
0166 __VA_ARGS__>::ArgumentTuple>::value == _N, \
0167 "This method does not take " GMOCK_PP_STRINGIZE( \
0168 _N) " arguments. Parenthesize all types with unprotected commas.")
0169
0170 #define GMOCK_INTERNAL_ASSERT_VALID_SPEC(_Spec) \
0171 GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_ASSERT_VALID_SPEC_ELEMENT, ~, _Spec)
0172
0173 #define GMOCK_INTERNAL_MOCK_METHOD_IMPL(_N, _MethodName, _Constness, \
0174 _Override, _Final, _NoexceptSpec, \
0175 _CallType, _RefSpec, _Signature) \
0176 typename ::testing::internal::Function<GMOCK_PP_REMOVE_PARENS( \
0177 _Signature)>::Result \
0178 GMOCK_INTERNAL_EXPAND(_CallType) \
0179 _MethodName(GMOCK_PP_REPEAT(GMOCK_INTERNAL_PARAMETER, _Signature, _N)) \
0180 GMOCK_PP_IF(_Constness, const, ) _RefSpec _NoexceptSpec \
0181 GMOCK_PP_IF(_Override, override, ) GMOCK_PP_IF(_Final, final, ) { \
0182 GMOCK_MOCKER_(_N, _Constness, _MethodName) \
0183 .SetOwnerAndName(this, #_MethodName); \
0184 return GMOCK_MOCKER_(_N, _Constness, _MethodName) \
0185 .Invoke(GMOCK_PP_REPEAT(GMOCK_INTERNAL_FORWARD_ARG, _Signature, _N)); \
0186 } \
0187 ::testing::MockSpec<GMOCK_PP_REMOVE_PARENS(_Signature)> gmock_##_MethodName( \
0188 GMOCK_PP_REPEAT(GMOCK_INTERNAL_MATCHER_PARAMETER, _Signature, _N)) \
0189 GMOCK_PP_IF(_Constness, const, ) _RefSpec { \
0190 GMOCK_MOCKER_(_N, _Constness, _MethodName).RegisterOwner(this); \
0191 return GMOCK_MOCKER_(_N, _Constness, _MethodName) \
0192 .With(GMOCK_PP_REPEAT(GMOCK_INTERNAL_MATCHER_ARGUMENT, , _N)); \
0193 } \
0194 ::testing::MockSpec<GMOCK_PP_REMOVE_PARENS(_Signature)> gmock_##_MethodName( \
0195 const ::testing::internal::WithoutMatchers&, \
0196 GMOCK_PP_IF(_Constness, const, )::testing::internal::Function< \
0197 GMOCK_PP_REMOVE_PARENS(_Signature)>*) const _RefSpec _NoexceptSpec { \
0198 return ::testing::internal::ThisRefAdjuster<GMOCK_PP_IF( \
0199 _Constness, const, ) int _RefSpec>::Adjust(*this) \
0200 .gmock_##_MethodName(GMOCK_PP_REPEAT( \
0201 GMOCK_INTERNAL_A_MATCHER_ARGUMENT, _Signature, _N)); \
0202 } \
0203 mutable ::testing::FunctionMocker<GMOCK_PP_REMOVE_PARENS(_Signature)> \
0204 GMOCK_MOCKER_(_N, _Constness, _MethodName)
0205
0206 #define GMOCK_INTERNAL_EXPAND(...) __VA_ARGS__
0207
0208
0209 #define GMOCK_INTERNAL_HAS_CONST(_Tuple) \
0210 GMOCK_PP_HAS_COMMA(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_DETECT_CONST, ~, _Tuple))
0211
0212 #define GMOCK_INTERNAL_HAS_OVERRIDE(_Tuple) \
0213 GMOCK_PP_HAS_COMMA( \
0214 GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_DETECT_OVERRIDE, ~, _Tuple))
0215
0216 #define GMOCK_INTERNAL_HAS_FINAL(_Tuple) \
0217 GMOCK_PP_HAS_COMMA(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_DETECT_FINAL, ~, _Tuple))
0218
0219 #define GMOCK_INTERNAL_GET_NOEXCEPT_SPEC(_Tuple) \
0220 GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_NOEXCEPT_SPEC_IF_NOEXCEPT, ~, _Tuple)
0221
0222 #define GMOCK_INTERNAL_NOEXCEPT_SPEC_IF_NOEXCEPT(_i, _, _elem) \
0223 GMOCK_PP_IF( \
0224 GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_NOEXCEPT(_i, _, _elem)), \
0225 _elem, )
0226
0227 #define GMOCK_INTERNAL_GET_CALLTYPE_SPEC(_Tuple) \
0228 GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_CALLTYPE_SPEC_IF_CALLTYPE, ~, _Tuple)
0229
0230 #define GMOCK_INTERNAL_CALLTYPE_SPEC_IF_CALLTYPE(_i, _, _elem) \
0231 GMOCK_PP_IF( \
0232 GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_CALLTYPE(_i, _, _elem)), \
0233 GMOCK_PP_CAT(GMOCK_INTERNAL_UNPACK_, _elem), )
0234
0235 #define GMOCK_INTERNAL_GET_REF_SPEC(_Tuple) \
0236 GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_REF_SPEC_IF_REF, ~, _Tuple)
0237
0238 #define GMOCK_INTERNAL_REF_SPEC_IF_REF(_i, _, _elem) \
0239 GMOCK_PP_IF(GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_REF(_i, _, _elem)), \
0240 GMOCK_PP_CAT(GMOCK_INTERNAL_UNPACK_, _elem), )
0241
0242 #ifdef GMOCK_INTERNAL_STRICT_SPEC_ASSERT
0243 #define GMOCK_INTERNAL_ASSERT_VALID_SPEC_ELEMENT(_i, _, _elem) \
0244 static_assert( \
0245 ::testing::internal::ValidateSpec(GMOCK_PP_STRINGIZE(_elem)), \
0246 "Token \'" GMOCK_PP_STRINGIZE( \
0247 _elem) "\' cannot be recognized as a valid specification " \
0248 "modifier. Is a ',' missing?");
0249 #else
0250 #define GMOCK_INTERNAL_ASSERT_VALID_SPEC_ELEMENT(_i, _, _elem) \
0251 static_assert( \
0252 (GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_CONST(_i, _, _elem)) + \
0253 GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_OVERRIDE(_i, _, _elem)) + \
0254 GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_FINAL(_i, _, _elem)) + \
0255 GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_NOEXCEPT(_i, _, _elem)) + \
0256 GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_REF(_i, _, _elem)) + \
0257 GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_CALLTYPE(_i, _, _elem))) == 1, \
0258 GMOCK_PP_STRINGIZE( \
0259 _elem) " cannot be recognized as a valid specification modifier.");
0260 #endif
0261
0262
0263 #define GMOCK_INTERNAL_DETECT_CONST(_i, _, _elem) \
0264 GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_CONST_I_, _elem)
0265
0266 #define GMOCK_INTERNAL_DETECT_CONST_I_const ,
0267
0268 #define GMOCK_INTERNAL_DETECT_OVERRIDE(_i, _, _elem) \
0269 GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_OVERRIDE_I_, _elem)
0270
0271 #define GMOCK_INTERNAL_DETECT_OVERRIDE_I_override ,
0272
0273 #define GMOCK_INTERNAL_DETECT_FINAL(_i, _, _elem) \
0274 GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_FINAL_I_, _elem)
0275
0276 #define GMOCK_INTERNAL_DETECT_FINAL_I_final ,
0277
0278 #define GMOCK_INTERNAL_DETECT_NOEXCEPT(_i, _, _elem) \
0279 GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_NOEXCEPT_I_, _elem)
0280
0281 #define GMOCK_INTERNAL_DETECT_NOEXCEPT_I_noexcept ,
0282
0283 #define GMOCK_INTERNAL_DETECT_REF(_i, _, _elem) \
0284 GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_REF_I_, _elem)
0285
0286 #define GMOCK_INTERNAL_DETECT_REF_I_ref ,
0287
0288 #define GMOCK_INTERNAL_UNPACK_ref(x) x
0289
0290 #define GMOCK_INTERNAL_DETECT_CALLTYPE(_i, _, _elem) \
0291 GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_CALLTYPE_I_, _elem)
0292
0293 #define GMOCK_INTERNAL_DETECT_CALLTYPE_I_Calltype ,
0294
0295 #define GMOCK_INTERNAL_UNPACK_Calltype(...) __VA_ARGS__
0296
0297
0298
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309
0310 #define GMOCK_INTERNAL_SIGNATURE(_Ret, _Args) \
0311 ::testing::internal::identity_t<GMOCK_PP_IF(GMOCK_PP_IS_BEGIN_PARENS(_Ret), \
0312 GMOCK_PP_REMOVE_PARENS, \
0313 GMOCK_PP_IDENTITY)(_Ret)>( \
0314 GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_GET_TYPE, _, _Args))
0315
0316 #define GMOCK_INTERNAL_GET_TYPE(_i, _, _elem) \
0317 GMOCK_PP_COMMA_IF(_i) \
0318 GMOCK_PP_IF(GMOCK_PP_IS_BEGIN_PARENS(_elem), GMOCK_PP_REMOVE_PARENS, \
0319 GMOCK_PP_IDENTITY) \
0320 (_elem)
0321
0322 #define GMOCK_INTERNAL_PARAMETER(_i, _Signature, _) \
0323 GMOCK_PP_COMMA_IF(_i) \
0324 GMOCK_INTERNAL_ARG_O(_i, GMOCK_PP_REMOVE_PARENS(_Signature)) \
0325 gmock_a##_i
0326
0327 #define GMOCK_INTERNAL_FORWARD_ARG(_i, _Signature, _) \
0328 GMOCK_PP_COMMA_IF(_i) \
0329 ::std::forward<GMOCK_INTERNAL_ARG_O( \
0330 _i, GMOCK_PP_REMOVE_PARENS(_Signature))>(gmock_a##_i)
0331
0332 #define GMOCK_INTERNAL_MATCHER_PARAMETER(_i, _Signature, _) \
0333 GMOCK_PP_COMMA_IF(_i) \
0334 GMOCK_INTERNAL_MATCHER_O(_i, GMOCK_PP_REMOVE_PARENS(_Signature)) \
0335 gmock_a##_i
0336
0337 #define GMOCK_INTERNAL_MATCHER_ARGUMENT(_i, _1, _2) \
0338 GMOCK_PP_COMMA_IF(_i) \
0339 gmock_a##_i
0340
0341 #define GMOCK_INTERNAL_A_MATCHER_ARGUMENT(_i, _Signature, _) \
0342 GMOCK_PP_COMMA_IF(_i) \
0343 ::testing::A<GMOCK_INTERNAL_ARG_O(_i, GMOCK_PP_REMOVE_PARENS(_Signature))>()
0344
0345 #define GMOCK_INTERNAL_ARG_O(_i, ...) \
0346 typename ::testing::internal::Function<__VA_ARGS__>::template Arg<_i>::type
0347
0348 #define GMOCK_INTERNAL_MATCHER_O(_i, ...) \
0349 const ::testing::Matcher<typename ::testing::internal::Function< \
0350 __VA_ARGS__>::template Arg<_i>::type>&
0351
0352 #define MOCK_METHOD0(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 0, __VA_ARGS__)
0353 #define MOCK_METHOD1(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 1, __VA_ARGS__)
0354 #define MOCK_METHOD2(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 2, __VA_ARGS__)
0355 #define MOCK_METHOD3(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 3, __VA_ARGS__)
0356 #define MOCK_METHOD4(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 4, __VA_ARGS__)
0357 #define MOCK_METHOD5(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 5, __VA_ARGS__)
0358 #define MOCK_METHOD6(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 6, __VA_ARGS__)
0359 #define MOCK_METHOD7(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 7, __VA_ARGS__)
0360 #define MOCK_METHOD8(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 8, __VA_ARGS__)
0361 #define MOCK_METHOD9(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 9, __VA_ARGS__)
0362 #define MOCK_METHOD10(m, ...) \
0363 GMOCK_INTERNAL_MOCK_METHODN(, , m, 10, __VA_ARGS__)
0364
0365 #define MOCK_CONST_METHOD0(m, ...) \
0366 GMOCK_INTERNAL_MOCK_METHODN(const, , m, 0, __VA_ARGS__)
0367 #define MOCK_CONST_METHOD1(m, ...) \
0368 GMOCK_INTERNAL_MOCK_METHODN(const, , m, 1, __VA_ARGS__)
0369 #define MOCK_CONST_METHOD2(m, ...) \
0370 GMOCK_INTERNAL_MOCK_METHODN(const, , m, 2, __VA_ARGS__)
0371 #define MOCK_CONST_METHOD3(m, ...) \
0372 GMOCK_INTERNAL_MOCK_METHODN(const, , m, 3, __VA_ARGS__)
0373 #define MOCK_CONST_METHOD4(m, ...) \
0374 GMOCK_INTERNAL_MOCK_METHODN(const, , m, 4, __VA_ARGS__)
0375 #define MOCK_CONST_METHOD5(m, ...) \
0376 GMOCK_INTERNAL_MOCK_METHODN(const, , m, 5, __VA_ARGS__)
0377 #define MOCK_CONST_METHOD6(m, ...) \
0378 GMOCK_INTERNAL_MOCK_METHODN(const, , m, 6, __VA_ARGS__)
0379 #define MOCK_CONST_METHOD7(m, ...) \
0380 GMOCK_INTERNAL_MOCK_METHODN(const, , m, 7, __VA_ARGS__)
0381 #define MOCK_CONST_METHOD8(m, ...) \
0382 GMOCK_INTERNAL_MOCK_METHODN(const, , m, 8, __VA_ARGS__)
0383 #define MOCK_CONST_METHOD9(m, ...) \
0384 GMOCK_INTERNAL_MOCK_METHODN(const, , m, 9, __VA_ARGS__)
0385 #define MOCK_CONST_METHOD10(m, ...) \
0386 GMOCK_INTERNAL_MOCK_METHODN(const, , m, 10, __VA_ARGS__)
0387
0388 #define MOCK_METHOD0_T(m, ...) MOCK_METHOD0(m, __VA_ARGS__)
0389 #define MOCK_METHOD1_T(m, ...) MOCK_METHOD1(m, __VA_ARGS__)
0390 #define MOCK_METHOD2_T(m, ...) MOCK_METHOD2(m, __VA_ARGS__)
0391 #define MOCK_METHOD3_T(m, ...) MOCK_METHOD3(m, __VA_ARGS__)
0392 #define MOCK_METHOD4_T(m, ...) MOCK_METHOD4(m, __VA_ARGS__)
0393 #define MOCK_METHOD5_T(m, ...) MOCK_METHOD5(m, __VA_ARGS__)
0394 #define MOCK_METHOD6_T(m, ...) MOCK_METHOD6(m, __VA_ARGS__)
0395 #define MOCK_METHOD7_T(m, ...) MOCK_METHOD7(m, __VA_ARGS__)
0396 #define MOCK_METHOD8_T(m, ...) MOCK_METHOD8(m, __VA_ARGS__)
0397 #define MOCK_METHOD9_T(m, ...) MOCK_METHOD9(m, __VA_ARGS__)
0398 #define MOCK_METHOD10_T(m, ...) MOCK_METHOD10(m, __VA_ARGS__)
0399
0400 #define MOCK_CONST_METHOD0_T(m, ...) MOCK_CONST_METHOD0(m, __VA_ARGS__)
0401 #define MOCK_CONST_METHOD1_T(m, ...) MOCK_CONST_METHOD1(m, __VA_ARGS__)
0402 #define MOCK_CONST_METHOD2_T(m, ...) MOCK_CONST_METHOD2(m, __VA_ARGS__)
0403 #define MOCK_CONST_METHOD3_T(m, ...) MOCK_CONST_METHOD3(m, __VA_ARGS__)
0404 #define MOCK_CONST_METHOD4_T(m, ...) MOCK_CONST_METHOD4(m, __VA_ARGS__)
0405 #define MOCK_CONST_METHOD5_T(m, ...) MOCK_CONST_METHOD5(m, __VA_ARGS__)
0406 #define MOCK_CONST_METHOD6_T(m, ...) MOCK_CONST_METHOD6(m, __VA_ARGS__)
0407 #define MOCK_CONST_METHOD7_T(m, ...) MOCK_CONST_METHOD7(m, __VA_ARGS__)
0408 #define MOCK_CONST_METHOD8_T(m, ...) MOCK_CONST_METHOD8(m, __VA_ARGS__)
0409 #define MOCK_CONST_METHOD9_T(m, ...) MOCK_CONST_METHOD9(m, __VA_ARGS__)
0410 #define MOCK_CONST_METHOD10_T(m, ...) MOCK_CONST_METHOD10(m, __VA_ARGS__)
0411
0412 #define MOCK_METHOD0_WITH_CALLTYPE(ct, m, ...) \
0413 GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 0, __VA_ARGS__)
0414 #define MOCK_METHOD1_WITH_CALLTYPE(ct, m, ...) \
0415 GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 1, __VA_ARGS__)
0416 #define MOCK_METHOD2_WITH_CALLTYPE(ct, m, ...) \
0417 GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 2, __VA_ARGS__)
0418 #define MOCK_METHOD3_WITH_CALLTYPE(ct, m, ...) \
0419 GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 3, __VA_ARGS__)
0420 #define MOCK_METHOD4_WITH_CALLTYPE(ct, m, ...) \
0421 GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 4, __VA_ARGS__)
0422 #define MOCK_METHOD5_WITH_CALLTYPE(ct, m, ...) \
0423 GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 5, __VA_ARGS__)
0424 #define MOCK_METHOD6_WITH_CALLTYPE(ct, m, ...) \
0425 GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 6, __VA_ARGS__)
0426 #define MOCK_METHOD7_WITH_CALLTYPE(ct, m, ...) \
0427 GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 7, __VA_ARGS__)
0428 #define MOCK_METHOD8_WITH_CALLTYPE(ct, m, ...) \
0429 GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 8, __VA_ARGS__)
0430 #define MOCK_METHOD9_WITH_CALLTYPE(ct, m, ...) \
0431 GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 9, __VA_ARGS__)
0432 #define MOCK_METHOD10_WITH_CALLTYPE(ct, m, ...) \
0433 GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 10, __VA_ARGS__)
0434
0435 #define MOCK_CONST_METHOD0_WITH_CALLTYPE(ct, m, ...) \
0436 GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 0, __VA_ARGS__)
0437 #define MOCK_CONST_METHOD1_WITH_CALLTYPE(ct, m, ...) \
0438 GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 1, __VA_ARGS__)
0439 #define MOCK_CONST_METHOD2_WITH_CALLTYPE(ct, m, ...) \
0440 GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 2, __VA_ARGS__)
0441 #define MOCK_CONST_METHOD3_WITH_CALLTYPE(ct, m, ...) \
0442 GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 3, __VA_ARGS__)
0443 #define MOCK_CONST_METHOD4_WITH_CALLTYPE(ct, m, ...) \
0444 GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 4, __VA_ARGS__)
0445 #define MOCK_CONST_METHOD5_WITH_CALLTYPE(ct, m, ...) \
0446 GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 5, __VA_ARGS__)
0447 #define MOCK_CONST_METHOD6_WITH_CALLTYPE(ct, m, ...) \
0448 GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 6, __VA_ARGS__)
0449 #define MOCK_CONST_METHOD7_WITH_CALLTYPE(ct, m, ...) \
0450 GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 7, __VA_ARGS__)
0451 #define MOCK_CONST_METHOD8_WITH_CALLTYPE(ct, m, ...) \
0452 GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 8, __VA_ARGS__)
0453 #define MOCK_CONST_METHOD9_WITH_CALLTYPE(ct, m, ...) \
0454 GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 9, __VA_ARGS__)
0455 #define MOCK_CONST_METHOD10_WITH_CALLTYPE(ct, m, ...) \
0456 GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 10, __VA_ARGS__)
0457
0458 #define MOCK_METHOD0_T_WITH_CALLTYPE(ct, m, ...) \
0459 MOCK_METHOD0_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0460 #define MOCK_METHOD1_T_WITH_CALLTYPE(ct, m, ...) \
0461 MOCK_METHOD1_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0462 #define MOCK_METHOD2_T_WITH_CALLTYPE(ct, m, ...) \
0463 MOCK_METHOD2_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0464 #define MOCK_METHOD3_T_WITH_CALLTYPE(ct, m, ...) \
0465 MOCK_METHOD3_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0466 #define MOCK_METHOD4_T_WITH_CALLTYPE(ct, m, ...) \
0467 MOCK_METHOD4_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0468 #define MOCK_METHOD5_T_WITH_CALLTYPE(ct, m, ...) \
0469 MOCK_METHOD5_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0470 #define MOCK_METHOD6_T_WITH_CALLTYPE(ct, m, ...) \
0471 MOCK_METHOD6_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0472 #define MOCK_METHOD7_T_WITH_CALLTYPE(ct, m, ...) \
0473 MOCK_METHOD7_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0474 #define MOCK_METHOD8_T_WITH_CALLTYPE(ct, m, ...) \
0475 MOCK_METHOD8_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0476 #define MOCK_METHOD9_T_WITH_CALLTYPE(ct, m, ...) \
0477 MOCK_METHOD9_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0478 #define MOCK_METHOD10_T_WITH_CALLTYPE(ct, m, ...) \
0479 MOCK_METHOD10_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0480
0481 #define MOCK_CONST_METHOD0_T_WITH_CALLTYPE(ct, m, ...) \
0482 MOCK_CONST_METHOD0_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0483 #define MOCK_CONST_METHOD1_T_WITH_CALLTYPE(ct, m, ...) \
0484 MOCK_CONST_METHOD1_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0485 #define MOCK_CONST_METHOD2_T_WITH_CALLTYPE(ct, m, ...) \
0486 MOCK_CONST_METHOD2_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0487 #define MOCK_CONST_METHOD3_T_WITH_CALLTYPE(ct, m, ...) \
0488 MOCK_CONST_METHOD3_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0489 #define MOCK_CONST_METHOD4_T_WITH_CALLTYPE(ct, m, ...) \
0490 MOCK_CONST_METHOD4_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0491 #define MOCK_CONST_METHOD5_T_WITH_CALLTYPE(ct, m, ...) \
0492 MOCK_CONST_METHOD5_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0493 #define MOCK_CONST_METHOD6_T_WITH_CALLTYPE(ct, m, ...) \
0494 MOCK_CONST_METHOD6_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0495 #define MOCK_CONST_METHOD7_T_WITH_CALLTYPE(ct, m, ...) \
0496 MOCK_CONST_METHOD7_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0497 #define MOCK_CONST_METHOD8_T_WITH_CALLTYPE(ct, m, ...) \
0498 MOCK_CONST_METHOD8_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0499 #define MOCK_CONST_METHOD9_T_WITH_CALLTYPE(ct, m, ...) \
0500 MOCK_CONST_METHOD9_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0501 #define MOCK_CONST_METHOD10_T_WITH_CALLTYPE(ct, m, ...) \
0502 MOCK_CONST_METHOD10_WITH_CALLTYPE(ct, m, __VA_ARGS__)
0503
0504 #define GMOCK_INTERNAL_MOCK_METHODN(constness, ct, Method, args_num, ...) \
0505 GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE( \
0506 args_num, ::testing::internal::identity_t<__VA_ARGS__>); \
0507 GMOCK_INTERNAL_MOCK_METHOD_IMPL( \
0508 args_num, Method, GMOCK_PP_NARG0(constness), 0, 0, , ct, , \
0509 (::testing::internal::identity_t<__VA_ARGS__>))
0510
0511 #define GMOCK_MOCKER_(arity, constness, Method) \
0512 GTEST_CONCAT_TOKEN_(gmock##constness##arity##_##Method##_, __LINE__)
0513
0514 #endif