From 200e293b7ff88d4ebdea6fac021835412443f225 Mon Sep 17 00:00:00 2001 From: mat007 Date: Fri, 8 Mar 2013 20:40:00 +0000 Subject: [PATCH] Added MOCK_FUNCTOR_TPL git-svn-id: https://svn.code.sf.net/p/turtle/code/trunk@608 860be788-9bd5-4423-9f1e-828f051e677b --- build/boost/doc/changelog.qbk | 11 ++++++----- build/boost/doc/reference.qbk | 19 +++++++++++++++++++ test/test_mock.cpp | 9 +++++++++ turtle/mock.hpp | 8 ++++++++ 4 files changed, 42 insertions(+), 5 deletions(-) diff --git a/build/boost/doc/changelog.qbk b/build/boost/doc/changelog.qbk index b419c78..48bd793 100644 --- a/build/boost/doc/changelog.qbk +++ b/build/boost/doc/changelog.qbk @@ -3,13 +3,14 @@ [section trunk] Not yet released -* Added variadic macro support for MOCK_FUNCTION and the MOCK_METHOD family -* Added variadic macro support for MOCK_BASE_CLASS and MOCK_FUNCTOR +* Added variadic macro support for MOCK_BASE_CLASS +* Added variadic macro support for MOCK_FUNCTION, MOCK_FUNCTOR and the MOCK_METHOD family * Added round parenthesis support for signatures for MOCK_FUNCTION, MOCK_FUNCTOR and the MOCK_METHOD family * Added MOCK_CONVERSION_OPERATOR_TPL, MOCK_CONST_CONVERSION_OPERATOR_TPL and MOCK_NON_CONST_CONVERSION_OPERATOR_TPL - -[endsect] - +* Added MOCK_FUNCTOR_TPL + +[endsect] + [section 1.2.1] Released 24 January 2013 diff --git a/build/boost/doc/reference.qbk b/build/boost/doc/reference.qbk index 9d7b9e0..98e6b46 100644 --- a/build/boost/doc/reference.qbk +++ b/build/boost/doc/reference.qbk @@ -342,6 +342,8 @@ Example : Synopsis : MOCK_FUNCTOR( name, signature ); + + MOCK_FUNCTOR_TPL( name, signature ); // must be used if the signature uses a template parameter Example : @@ -350,6 +352,23 @@ Example : MOCK_FUNCTOR( f, void( int ) ); } +Example : + + namespace + { + template< typename T > + struct template_class + { + MOCK_FUNCTOR_TPL( f, void( T ) ); + }; + } + + BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_mock_template_functor ) + { + template_class< int > c; + c.f( 3 ); + } + [endsect] [section Function] diff --git a/test/test_mock.cpp b/test/test_mock.cpp index 6ccaedd..d265e11 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -280,6 +280,15 @@ BOOST_AUTO_TEST_CASE( mock_functor ) MOCK_FUNCTOR( f2, int( const std::string& ) ); } +namespace +{ + template< typename T > + struct tpl_functor_class + { + MOCK_FUNCTOR_TPL( f, void( T ) ); + }; +} + BOOST_AUTO_TEST_CASE( mock_functor_reset ) { MOCK_FUNCTOR( f, void() ); diff --git a/turtle/mock.hpp b/turtle/mock.hpp index 5a85907..dbc2dbb 100644 --- a/turtle/mock.hpp +++ b/turtle/mock.hpp @@ -34,15 +34,23 @@ #define MOCK_BASE_CLASS(T, I) \ struct T : I, mock::object, mock::detail::base< I > + #define MOCK_FUNCTOR(f, S) \ mock::detail::functor< MOCK_FUNCTION_TYPE(S,) > f, f##_mock +#define MOCK_FUNCTOR_TPL(f, S) \ + mock::detail::functor< \ + MOCK_FUNCTION_TYPE(S, BOOST_DEDUCED_TYPENAME) > f, f##_mock #else // BOOST_NO_VARIADIC_MACROS #define MOCK_BASE_CLASS(T, ...) \ struct T : __VA_ARGS__, mock::object, mock::detail::base< __VA_ARGS__ > + #define MOCK_FUNCTOR(f, ...) \ mock::detail::functor< MOCK_FUNCTION_TYPE((__VA_ARGS__),) > f, f##_mock +#define MOCK_FUNCTOR_TPL(f, ...) \ + mock::detail::functor< \ + MOCK_FUNCTION_TYPE((__VA_ARGS__), BOOST_DEDUCED_TYPENAME) > f, f##_mock #endif // BOOST_NO_VARIADIC_MACROS