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