From f97fb87f8122eea9fc0b503c439b87f371c84199 Mon Sep 17 00:00:00 2001 From: mat007 Date: Tue, 4 Jun 2013 22:02:09 +0000 Subject: [PATCH] Added MOCK_NO_VARIADIC_MACROS to deactivate variadic macros support git-svn-id: https://svn.code.sf.net/p/turtle/code/trunk@668 860be788-9bd5-4423-9f1e-828f051e677b --- build/boost/doc/changelog.qbk | 1 + build/boost/test/Jamfile.jam | 2 ++ build/build.xml | 6 ++++ test/detail/test_is_functor.cpp | 7 ++++- test/test_constraint.cpp | 4 +-- test/test_mock.cpp | 4 +-- turtle/config.hpp | 10 +++++- turtle/constraint.hpp | 4 +-- turtle/mock.hpp | 56 ++++++++++++++++----------------- 9 files changed, 58 insertions(+), 36 deletions(-) diff --git a/build/boost/doc/changelog.qbk b/build/boost/doc/changelog.qbk index c6d733e..50e1d63 100644 --- a/build/boost/doc/changelog.qbk +++ b/build/boost/doc/changelog.qbk @@ -4,6 +4,7 @@ Not yet released * Reworked MOCK_CONSTRAINT to be able to provide names to parameters +* Added MOCK_NO_VARIADIC_MACROS to deactivate variadic macros support [endsect] diff --git a/build/boost/test/Jamfile.jam b/build/boost/test/Jamfile.jam index 447f5a9..64ff10d 100644 --- a/build/boost/test/Jamfile.jam +++ b/build/boost/test/Jamfile.jam @@ -15,6 +15,8 @@ rule run-test ( name ) run $(name).cpp /boost//unit_test_framework : : : : $(name) ; run $(name).cpp /boost//unit_test_framework : : : MOCK_MAX_ARGS=21 : $(name)_max_args ; run $(name).cpp /boost//unit_test_framework : : : MOCK_USE_CONVERSIONS : $(name)_use_conversions ; + run $(name).cpp /boost//unit_test_framework : : : MOCK_NO_DECLTYPE : $(name)_no_decltype ; + run $(name).cpp /boost//unit_test_framework : : : MOCK_NO_VARIADIC_MACROS : $(name)_no_variadic_macros ; } alias mock_tests : diff --git a/build/build.xml b/build/build.xml index 2f375da..227ce30 100644 --- a/build/build.xml +++ b/build/build.xml @@ -30,6 +30,12 @@ + + + + + + diff --git a/test/detail/test_is_functor.cpp b/test/detail/test_is_functor.cpp index c4e458f..e5c63ff 100644 --- a/test/detail/test_is_functor.cpp +++ b/test/detail/test_is_functor.cpp @@ -22,7 +22,8 @@ namespace { struct declared_but_not_defined; - BOOST_MPL_ASSERT_NOT(( mock::detail::is_functor< declared_but_not_defined, int > )); + BOOST_MPL_ASSERT_NOT(( + mock::detail::is_functor< declared_but_not_defined, int > )); template< typename T > void is_functor( T ) @@ -142,7 +143,11 @@ BOOST_AUTO_TEST_CASE( class_with_sig_is_functor ) BOOST_AUTO_TEST_CASE( cxx11_lambda_is_functor ) { is_not_functor( []() {} ); +#ifdef MOCK_DECLTYPE is_functor( []( int ) {} ); +#else + is_not_functor( []( int ) {} ); +#endif is_not_functor( []( const std::string&, int ) {} ); is_not_functor( []( int, const std::string& ) {} ); } diff --git a/test/test_constraint.cpp b/test/test_constraint.cpp index d748eb0..bcc55a1 100644 --- a/test/test_constraint.cpp +++ b/test/test_constraint.cpp @@ -9,7 +9,7 @@ #include #include -#ifndef BOOST_NO_VARIADIC_MACROS +#ifdef MOCK_VARIADIC_MACROS namespace { @@ -25,4 +25,4 @@ BOOST_AUTO_TEST_CASE( mock_constraint_is_supported_by_compilers_with_variadic_ma BOOST_CHECK( constraint_2( 0, 0 ).c_( 0 ) ); } -#endif // BOOST_NO_VARIADIC_MACROS +#endif // MOCK_VARIADIC_MACROS diff --git a/test/test_mock.cpp b/test/test_mock.cpp index 382b4a5..4137a56 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -343,7 +343,7 @@ namespace MOCK_FUNCTION( fun0, 0, (std::map< int, int >()), fun0 ) } -#ifndef BOOST_NO_VARIADIC_MACROS +#ifdef MOCK_VARIADIC_MACROS namespace { @@ -390,4 +390,4 @@ namespace MOCK_FUNCTOR( f_variadic, std::map< int, int >() ); } -#endif //BOOST_NO_VARIADIC_MACROS +#endif //MOCK_VARIADIC_MACROS diff --git a/turtle/config.hpp b/turtle/config.hpp index c46daf3..194c211 100644 --- a/turtle/config.hpp +++ b/turtle/config.hpp @@ -54,7 +54,15 @@ #endif #if !defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_DECLTYPE) -# define MOCK_DECLTYPE +# ifndef MOCK_NO_DECLTYPE +# define MOCK_DECLTYPE +# endif +#endif + +#if !defined(BOOST_NO_CXX11_VARIADIC_MACROS) && !defined(BOOST_NO_VARIADIC_MACROS) +# ifndef MOCK_NO_VARIADIC_MACROS +# define MOCK_VARIADIC_MACROS +# endif #endif #endif // MOCK_CONFIG_HPP_INCLUDED diff --git a/turtle/constraint.hpp b/turtle/constraint.hpp index 6f3a6bf..4b0154c 100644 --- a/turtle/constraint.hpp +++ b/turtle/constraint.hpp @@ -209,7 +209,7 @@ namespace detail MOCK_NARY_CONSTRAINT, \ MOCK_UNARY_CONSTRAINT)(Name, n, Args, Expr) -#ifndef BOOST_NO_VARIADIC_MACROS +#ifdef MOCK_VARIADIC_MACROS #if BOOST_MSVC # define MOCK_VARIADIC_SIZE(...) \ @@ -242,6 +242,6 @@ namespace detail MOCK_CONSTRAINT_AUX( \ Name, MOCK_VARIADIC_SIZE(__VA_ARGS__), (__VA_ARGS__)) -#endif // BOOST_NO_VARIADIC_MACROS +#endif // MOCK_VARIADIC_MACROS #endif // MOCK_CONSTRAINT_HPP_INCLUDED diff --git a/turtle/mock.hpp b/turtle/mock.hpp index dbc2dbb..f747bf2 100644 --- a/turtle/mock.hpp +++ b/turtle/mock.hpp @@ -30,18 +30,7 @@ #define MOCK_FUNCTION_TYPE(S, tpn) \ tpn boost::remove_pointer< tpn BOOST_IDENTITY_TYPE((S)) >::type -#ifdef BOOST_NO_VARIADIC_MACROS - -#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 +#ifdef MOCK_VARIADIC_MACROS #define MOCK_BASE_CLASS(T, ...) \ struct T : __VA_ARGS__, mock::object, mock::detail::base< __VA_ARGS__ > @@ -52,7 +41,18 @@ mock::detail::functor< \ MOCK_FUNCTION_TYPE((__VA_ARGS__), BOOST_DEDUCED_TYPENAME) > f, f##_mock -#endif // BOOST_NO_VARIADIC_MACROS +#else // MOCK_VARIADIC_MACROS + +#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 + +#endif // MOCK_VARIADIC_MACROS #define MOCK_HELPER(t) \ t##_mock( mock::detail::root, BOOST_PP_STRINGIZE(t) ) @@ -171,20 +171,7 @@ return MOCK_HELPER(t)( BOOST_PP_ENUM_PARAMS(n, p) ); \ } -#ifdef BOOST_NO_VARIADIC_MACROS - -#define MOCK_METHOD(M, n) \ - MOCK_METHOD_EXT(M, n, MOCK_SIGNATURE(M), M) - -#define MOCK_FUNCTION(F, n, S, t) \ - MOCK_FUNCTION_AUX(F, n, S, t,,) - -#define MOCK_STATIC_METHOD(F, n, S, t) \ - MOCK_FUNCTION_AUX(F, n, S, t, static,) -#define MOCK_STATIC_METHOD_TPL(F, n, S, t) \ - MOCK_FUNCTION_AUX(F, n, S, t, static, BOOST_DEDUCED_TYPENAME) - -#else // BOOST_NO_VARIADIC_MACROS +#ifdef MOCK_VARIADIC_MACROS #define MOCK_VARIADIC_ELEM_0(e0, ...) e0 #define MOCK_VARIADIC_ELEM_1(e0, e1, ...) e1 @@ -233,7 +220,20 @@ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F), \ static, BOOST_DEDUCED_TYPENAME) -#endif // BOOST_NO_VARIADIC_MACROS +#else // MOCK_VARIADIC_MACROS + +#define MOCK_METHOD(M, n) \ + MOCK_METHOD_EXT(M, n, MOCK_SIGNATURE(M), M) + +#define MOCK_FUNCTION(F, n, S, t) \ + MOCK_FUNCTION_AUX(F, n, S, t,,) + +#define MOCK_STATIC_METHOD(F, n, S, t) \ + MOCK_FUNCTION_AUX(F, n, S, t, static,) +#define MOCK_STATIC_METHOD_TPL(F, n, S, t) \ + MOCK_FUNCTION_AUX(F, n, S, t, static, BOOST_DEDUCED_TYPENAME) + +#endif // MOCK_VARIADIC_MACROS #define MOCK_EXPECT(t) MOCK_HELPER(t).expect( __FILE__, __LINE__ ) #define MOCK_RESET(t) MOCK_HELPER(t).reset( __FILE__, __LINE__ )