mirror of
https://github.com/google/googletest.git
synced 2026-06-15 08:26:11 +08:00
Fix override and nested-type issues
This commit is contained in:
parent
faf2028a33
commit
2b448fc5d6
@ -226,8 +226,6 @@ using internal::FunctionMocker;
|
||||
_Args, _Spec) \
|
||||
GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Args); \
|
||||
GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Spec); \
|
||||
GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE( \
|
||||
GMOCK_PP_NARG0 _Args, GMOCK_INTERNAL_SIGNATURE(_Ret, _Args)); \
|
||||
GMOCK_INTERNAL_ASSERT_VALID_SPEC(_Spec) \
|
||||
GMOCK_INTERNAL_DEFINE_MOCK_METHOD_IMPL( \
|
||||
GMOCK_PP_NARG0 _Args, _MockClass, _MethodName, \
|
||||
@ -236,7 +234,9 @@ using internal::FunctionMocker;
|
||||
GMOCK_INTERNAL_GET_NOEXCEPT_SPEC(_Spec), \
|
||||
GMOCK_INTERNAL_GET_CALLTYPE_SPEC(_Spec), \
|
||||
GMOCK_INTERNAL_GET_REF_SPEC(_Spec), \
|
||||
(GMOCK_INTERNAL_SIGNATURE(_Ret, _Args)))
|
||||
(GMOCK_INTERNAL_SIGNATURE(_Ret, _Args)), \
|
||||
GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE( \
|
||||
GMOCK_PP_NARG0 _Args, GMOCK_INTERNAL_SIGNATURE(_Ret, _Args)))
|
||||
|
||||
#define GMOCK_INTERNAL_DEFINE_MOCK_METHOD_ARG_6(...) \
|
||||
GMOCK_INTERNAL_DEFINE_MOCK_METHOD_WRONG_ARITY(__VA_ARGS__)
|
||||
@ -336,14 +336,13 @@ using internal::FunctionMocker;
|
||||
|
||||
#define GMOCK_INTERNAL_DEFINE_MOCK_METHOD_IMPL( \
|
||||
_N, _MockClass, _MethodName, _Constness, _Override, _Final, _NoexceptSpec, \
|
||||
_CallType, _RefSpec, _Signature) \
|
||||
typename ::testing::internal::Function<GMOCK_PP_REMOVE_PARENS( \
|
||||
_Signature)>::Result \
|
||||
GMOCK_INTERNAL_EXPAND(_CallType) _MockClass::_MethodName( \
|
||||
_CallType, _RefSpec, _Signature, _InClassAssertions) \
|
||||
auto GMOCK_INTERNAL_EXPAND(_CallType) _MockClass::_MethodName( \
|
||||
GMOCK_PP_REPEAT(GMOCK_INTERNAL_PARAMETER, _Signature, _N)) \
|
||||
GMOCK_PP_IF(_Constness, const, ) \
|
||||
_RefSpec _NoexceptSpec GMOCK_PP_IF(_Override, override, ) \
|
||||
GMOCK_PP_IF(_Final, final, ) { \
|
||||
GMOCK_PP_IF(_Constness, const, ) _RefSpec _NoexceptSpec -> \
|
||||
typename ::testing::internal::Function<GMOCK_PP_REMOVE_PARENS( \
|
||||
_Signature)>::Result { \
|
||||
_InClassAssertions; \
|
||||
auto& mocker = gmock_get_mocker_##_MethodName( \
|
||||
::testing::internal::TypeTag<GMOCK_PP_REMOVE_PARENS( \
|
||||
_Signature) GMOCK_PP_IF(_Constness, const, ) _RefSpec>{}); \
|
||||
@ -351,10 +350,10 @@ using internal::FunctionMocker;
|
||||
return mocker.Invoke( \
|
||||
GMOCK_PP_REPEAT(GMOCK_INTERNAL_FORWARD_ARG, _Signature, _N)); \
|
||||
} \
|
||||
::testing::MockSpec<GMOCK_PP_REMOVE_PARENS(_Signature)> \
|
||||
_MockClass::gmock_##_MethodName( \
|
||||
GMOCK_PP_REPEAT(GMOCK_INTERNAL_MATCHER_PARAMETER, _Signature, _N)) \
|
||||
GMOCK_PP_IF(_Constness, const, ) _RefSpec { \
|
||||
auto _MockClass::gmock_##_MethodName( \
|
||||
GMOCK_PP_REPEAT(GMOCK_INTERNAL_MATCHER_PARAMETER, _Signature, _N)) \
|
||||
GMOCK_PP_IF(_Constness, const, ) \
|
||||
_RefSpec->::testing::MockSpec<GMOCK_PP_REMOVE_PARENS(_Signature)> { \
|
||||
auto& mocker = gmock_get_mocker_##_MethodName( \
|
||||
::testing::internal::TypeTag<GMOCK_PP_REMOVE_PARENS( \
|
||||
_Signature) GMOCK_PP_IF(_Constness, const, ) _RefSpec>{}); \
|
||||
@ -362,12 +361,11 @@ using internal::FunctionMocker;
|
||||
return mocker.With( \
|
||||
GMOCK_PP_REPEAT(GMOCK_INTERNAL_MATCHER_ARGUMENT, , _N)); \
|
||||
} \
|
||||
::testing::MockSpec<GMOCK_PP_REMOVE_PARENS(_Signature)> \
|
||||
_MockClass::gmock_##_MethodName( \
|
||||
const ::testing::internal::WithoutMatchers&, \
|
||||
GMOCK_PP_IF(_Constness, const, )::testing::internal::Function< \
|
||||
GMOCK_PP_REMOVE_PARENS(_Signature)>*) \
|
||||
const _RefSpec _NoexceptSpec { \
|
||||
auto _MockClass::gmock_##_MethodName( \
|
||||
const ::testing::internal::WithoutMatchers&, \
|
||||
GMOCK_PP_IF(_Constness, const, )::testing::internal::Function< \
|
||||
GMOCK_PP_REMOVE_PARENS(_Signature)>*) const _RefSpec _NoexceptSpec \
|
||||
->::testing::MockSpec<GMOCK_PP_REMOVE_PARENS(_Signature)> { \
|
||||
return ::testing::internal::ThisRefAdjuster<GMOCK_PP_IF( \
|
||||
_Constness, const, ) int _RefSpec>::Adjust(*this) \
|
||||
.gmock_##_MethodName(GMOCK_PP_REPEAT( \
|
||||
@ -1047,11 +1045,11 @@ using internal::FunctionMocker;
|
||||
|
||||
#define GMOCK_INTERNAL_DEFINE_MOCK_METHODN(constness, ct, Class, Method, \
|
||||
args_num, ...) \
|
||||
GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE( \
|
||||
args_num, ::testing::internal::identity_t<__VA_ARGS__>); \
|
||||
GMOCK_INTERNAL_DEFINE_MOCK_METHOD_IMPL( \
|
||||
args_num, Class, Method, GMOCK_PP_NARG0(constness), 0, 0, , ct, , \
|
||||
(::testing::internal::identity_t<__VA_ARGS__>))
|
||||
(::testing::internal::identity_t<__VA_ARGS__>), \
|
||||
GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE( \
|
||||
args_num, ::testing::internal::identity_t<__VA_ARGS__>))
|
||||
|
||||
#define GMOCK_MOCKER_(arity, constness, Method) \
|
||||
GTEST_CONCAT_TOKEN_(gmock##constness##arity##_##Method##_, __LINE__)
|
||||
|
||||
@ -592,6 +592,9 @@ TEST(SplitMockTest, CallMockMethods) {
|
||||
EXPECT_CALL(mock_split, func_legacy(16, 17)).WillOnce(Return(18));
|
||||
EXPECT_CALL(mock_split, func_legacy_const(19)).WillOnce(Return(20));
|
||||
|
||||
EXPECT_CALL(mock_split, func_inherited(21)).WillOnce(Return(22));
|
||||
EXPECT_CALL(mock_split, func_nested_typedef(23)).WillOnce(Return(24));
|
||||
|
||||
EXPECT_EQ(mock_split.func(1), 2);
|
||||
EXPECT_EQ(std::as_const(mock_split).func_const(3), 4);
|
||||
|
||||
@ -603,6 +606,9 @@ TEST(SplitMockTest, CallMockMethods) {
|
||||
|
||||
EXPECT_EQ(mock_split.func_legacy(16, 17), 18);
|
||||
EXPECT_EQ(std::as_const(mock_split).func_legacy_const(19), 20);
|
||||
|
||||
EXPECT_EQ(mock_split.func_inherited(21), 22);
|
||||
EXPECT_EQ(mock_split.func_nested_typedef(23), 24);
|
||||
}
|
||||
|
||||
class MockB {
|
||||
|
||||
@ -55,3 +55,9 @@ DEFINE_MOCK_METHOD2(MockSplitDeclarationAndDefinition, func_legacy,
|
||||
int(int, int));
|
||||
DEFINE_MOCK_CONST_METHOD1(MockSplitDeclarationAndDefinition, func_legacy_const,
|
||||
int(int));
|
||||
|
||||
DEFINE_MOCK_METHOD(MockSplitDeclarationAndDefinition, int, func_inherited,
|
||||
(int), (override final));
|
||||
|
||||
DEFINE_MOCK_METHOD(MockSplitDeclarationAndDefinition, NESTED_TYPEDEF,
|
||||
func_nested_typedef, (NESTED_TYPEDEF));
|
||||
@ -35,7 +35,12 @@
|
||||
|
||||
#include "gmock/gmock-function-mocker.h"
|
||||
|
||||
struct MockSplitDeclarationAndDefinition {
|
||||
struct MockSplitDeclarationAndDefinitionBase {
|
||||
virtual int func_inherited(int) = 0;
|
||||
};
|
||||
|
||||
struct MockSplitDeclarationAndDefinition
|
||||
: MockSplitDeclarationAndDefinitionBase {
|
||||
MockSplitDeclarationAndDefinition();
|
||||
~MockSplitDeclarationAndDefinition();
|
||||
|
||||
@ -50,6 +55,11 @@ struct MockSplitDeclarationAndDefinition {
|
||||
|
||||
DECLARE_MOCK_METHOD2(func_legacy, int(int, int));
|
||||
DECLARE_MOCK_CONST_METHOD1(func_legacy_const, int(int));
|
||||
|
||||
DECLARE_MOCK_METHOD(int, func_inherited, (int), (override final));
|
||||
|
||||
using NESTED_TYPEDEF = int;
|
||||
DECLARE_MOCK_METHOD(NESTED_TYPEDEF, func_nested_typedef, (NESTED_TYPEDEF));
|
||||
};
|
||||
|
||||
#endif // GOOGLEMOCK_TEST_SPLIT_MOCK_TEST_HELPER_H_
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user