From ed36823235ce1d0d847ee3d180ede9b3cdc00df8 Mon Sep 17 00:00:00 2001 From: Mathieu Champlon Date: Tue, 7 Apr 2015 07:21:14 +0200 Subject: [PATCH] Added support for mocking protected member function --- doc/changelog.qbk | 1 + include/turtle/mock.hpp | 24 ++++++++++++++---------- test/test_mock.cpp | 5 +++++ 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/doc/changelog.qbk b/doc/changelog.qbk index c95e588..7563dde 100644 --- a/doc/changelog.qbk +++ b/doc/changelog.qbk @@ -14,6 +14,7 @@ Not yet released * Added support for multiple parameters constraints * Added inline to generated MOCK_FUNCTION * Documented limitation concerning MOCK_METHOD_TPL +* Fixed mocking protected member function [section 1.2.6] Released 24 May 2014 diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index a120650..9f27d0a 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -43,8 +43,8 @@ #else // MOCK_VARIADIC_MACROS -#define MOCK_BASE_CLASS(T, I) \ - struct T : I, mock::object, mock::detail::base< I > +#define MOCK_BASE_CLASS(T, B) \ + struct T : B, mock::object, mock::detail::base< B > #define MOCK_FUNCTOR(f, S) \ mock::detail::functor< MOCK_FUNCTION_TYPE(S,) > f, f##_mock @@ -177,29 +177,32 @@ #define MOCK_VARIADIC_ELEM_1(e0, e1, ...) e1 #define MOCK_VARIADIC_ELEM_2(e0, e1, e2, ...) e2 -#define MOCK_METHOD(M, ... ) \ - MOCK_METHOD_EXT(M, \ +#define MOCK_METHOD_SIGNATURE(M, n, S, t) \ + typedef MOCK_FUNCTION_TYPE(S,) BOOST_PP_CAT(t,_sig_type); \ + MOCK_METHOD_EXT(M, n, BOOST_PP_CAT(t,_sig_type), t) +#define MOCK_METHOD(M, ...) \ + MOCK_METHOD_SIGNATURE(M, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__ ), \ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M)), \ MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M)) -#define MOCK_CONST_METHOD(M, n, ... ) \ +#define MOCK_CONST_METHOD(M, n, ...) \ MOCK_CONST_METHOD_EXT(M, n, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M)) -#define MOCK_NON_CONST_METHOD(M, n, ... ) \ +#define MOCK_NON_CONST_METHOD(M, n, ...) \ MOCK_NON_CONST_METHOD_EXT(M, n, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M)) -#define MOCK_METHOD_TPL(M, n, ... ) \ +#define MOCK_METHOD_TPL(M, n, ...) \ MOCK_METHOD_EXT_TPL(M, n, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M)) -#define MOCK_CONST_METHOD_TPL(M, n, ... ) \ +#define MOCK_CONST_METHOD_TPL(M, n, ...) \ MOCK_CONST_METHOD_EXT_TPL(M, n, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M)) -#define MOCK_NON_CONST_METHOD_TPL(M, n, ... ) \ +#define MOCK_NON_CONST_METHOD_TPL(M, n, ...) \ MOCK_NON_CONST_METHOD_EXT_TPL(M, n, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M)) @@ -224,7 +227,8 @@ #else // MOCK_VARIADIC_MACROS #define MOCK_METHOD(M, n) \ - MOCK_METHOD_EXT(M, n, MOCK_SIGNATURE(M), M) + typedef MOCK_SIGNATURE(M) M##_sig_type; \ + MOCK_METHOD_EXT(M, n, M##_sig_type, M) #define MOCK_FUNCTION(F, n, S, t) \ MOCK_FUNCTION_AUX(F, n, S, t,,) diff --git a/test/test_mock.cpp b/test/test_mock.cpp index 0961b0d..7a41f6f 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -361,6 +361,7 @@ namespace { virtual ~base() {} + protected: virtual void m1() = 0; }; @@ -439,6 +440,10 @@ namespace stdcall { struct base { + virtual ~base() + {} + + protected: virtual void MOCK_STDCALL m1() = 0; };