diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..132530c --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +bin +out diff --git a/build/boost/Jamfile.v2 b/Jamfile.v2 similarity index 100% rename from build/boost/Jamfile.v2 rename to Jamfile.v2 diff --git a/build/boost/Jamroot.jam b/Jamroot.jam similarity index 53% rename from build/boost/Jamroot.jam rename to Jamroot.jam index 869d2c8..8797198 100644 --- a/build/boost/Jamroot.jam +++ b/Jamroot.jam @@ -1,3 +1,8 @@ +# Copyright Rene Rivera 2007. +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) import modules ; diff --git a/build/boost/LICENSE_1_0.txt b/LICENSE_1_0.txt similarity index 100% rename from build/boost/LICENSE_1_0.txt rename to LICENSE_1_0.txt diff --git a/build/boost/doc/html/boost-no-inspect b/build/boost/doc/html/boost-no-inspect deleted file mode 100644 index e69de29..0000000 diff --git a/build/build.properties b/build/build.properties index 25ba777..9324819 100644 --- a/build/build.properties +++ b/build/build.properties @@ -1,5 +1 @@ -extensions = svn,headers,check -src.dir = ${root.dir} -tests.dir = ${root.dir} -libraries.dir = ${root.dir} -boost.dir = ${out.dir}/../boost +extensions = headers,check diff --git a/build/build.xml b/build/build.xml index 633a2c4..86465d1 100644 --- a/build/build.xml +++ b/build/build.xml @@ -1,135 +1,26 @@ + - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${file} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${file} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -137,37 +28,65 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - - - - - - - - - + - + @@ -214,55 +133,29 @@ - - - - + - + - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/build/vc100/.gitignore b/build/vc100/.gitignore new file mode 100644 index 0000000..bacfd8c --- /dev/null +++ b/build/vc100/.gitignore @@ -0,0 +1,3 @@ +/*.opensdf +/*.sdf +/*.suo diff --git a/build/vc100/turtle.vcxproj b/build/vc100/turtle.vcxproj index 48ffd07..cc9280e 100644 --- a/build/vc100/turtle.vcxproj +++ b/build/vc100/turtle.vcxproj @@ -19,45 +19,45 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D} diff --git a/build/vc100/turtle.vcxproj.filters b/build/vc100/turtle.vcxproj.filters index 762be52..db9e20b 100644 --- a/build/vc100/turtle.vcxproj.filters +++ b/build/vc100/turtle.vcxproj.filters @@ -10,121 +10,121 @@ - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - + Source Files - + Source Files - + Source Files - + Source Files - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - + Source Files - + Source Files - + Source Files\detail - + Source Files\detail - + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + + Source Files\detail + + Source Files\detail diff --git a/build/boost/doc/Jamfile.jam b/doc/Jamfile.jam similarity index 100% rename from build/boost/doc/Jamfile.jam rename to doc/Jamfile.jam diff --git a/build/boost/doc/acknowledgements.qbk b/doc/acknowledgements.qbk similarity index 100% rename from build/boost/doc/acknowledgements.qbk rename to doc/acknowledgements.qbk diff --git a/build/boost/doc/changelog.qbk b/doc/changelog.qbk similarity index 99% rename from build/boost/doc/changelog.qbk rename to doc/changelog.qbk index b789ed9..2dd926a 100644 --- a/build/boost/doc/changelog.qbk +++ b/doc/changelog.qbk @@ -7,7 +7,7 @@ [section Changelog] -[section trunk] +[section unreleased] Not yet released * Dropped support for obsolete Boost.Phoenix V2 diff --git a/build/boost/doc/customization.qbk b/doc/customization.qbk similarity index 100% rename from build/boost/doc/customization.qbk rename to doc/customization.qbk diff --git a/build/boost/doc/example/calculator.hpp b/doc/example/calculator.hpp similarity index 100% rename from build/boost/doc/example/calculator.hpp rename to doc/example/calculator.hpp diff --git a/build/boost/doc/example/customization.cpp b/doc/example/customization.cpp similarity index 100% rename from build/boost/doc/example/customization.cpp rename to doc/example/customization.cpp diff --git a/build/boost/doc/example/getting_started.cpp b/doc/example/getting_started.cpp similarity index 100% rename from build/boost/doc/example/getting_started.cpp rename to doc/example/getting_started.cpp diff --git a/build/boost/doc/example/limitations_comma_in_macro.cpp b/doc/example/limitations_comma_in_macro.cpp similarity index 95% rename from build/boost/doc/example/limitations_comma_in_macro.cpp rename to doc/example/limitations_comma_in_macro.cpp index 6ae1e50..c19ebdf 100644 --- a/build/boost/doc/example/limitations_comma_in_macro.cpp +++ b/doc/example/limitations_comma_in_macro.cpp @@ -1,48 +1,48 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2014 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define BOOST_AUTO_TEST_MAIN -#include -#include - -namespace -{ -//[ limitations_comma_in_macro_problem - template< typename T1, typename T2 > - struct my_base_class - {}; -//] -} - -namespace limitations_comma_in_macro_solution_1 -{ -//[ limitations_comma_in_macro_solution_1 - typedef my_base_class< int, int > my_base_type; - - MOCK_BASE_CLASS( my_mock, my_base_type ) - {}; -//] -} - -namespace limitations_comma_in_macro_solution_2 -{ -//[ limitations_comma_in_macro_solution_2 - template< typename T1, typename T2 > - MOCK_BASE_CLASS( my_mock, my_base_class< T1 BOOST_PP_COMMA() T2 > ) - {}; -//] -} - -namespace limitations_comma_in_macro_solution_3 -{ -//[ limitations_comma_in_macro_solution_3 - template< typename T1, typename T2 > - struct my_mock : my_base_class< T1, T2 >, mock::object - {}; -//] -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2014 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define BOOST_AUTO_TEST_MAIN +#include +#include + +namespace +{ +//[ limitations_comma_in_macro_problem + template< typename T1, typename T2 > + struct my_base_class + {}; +//] +} + +namespace limitations_comma_in_macro_solution_1 +{ +//[ limitations_comma_in_macro_solution_1 + typedef my_base_class< int, int > my_base_type; + + MOCK_BASE_CLASS( my_mock, my_base_type ) + {}; +//] +} + +namespace limitations_comma_in_macro_solution_2 +{ +//[ limitations_comma_in_macro_solution_2 + template< typename T1, typename T2 > + MOCK_BASE_CLASS( my_mock, my_base_class< T1 BOOST_PP_COMMA() T2 > ) + {}; +//] +} + +namespace limitations_comma_in_macro_solution_3 +{ +//[ limitations_comma_in_macro_solution_3 + template< typename T1, typename T2 > + struct my_mock : my_base_class< T1, T2 >, mock::object + {}; +//] +} diff --git a/build/boost/doc/example/limitations_const_parameter_warning.cpp b/doc/example/limitations_const_parameter_warning.cpp similarity index 95% rename from build/boost/doc/example/limitations_const_parameter_warning.cpp rename to doc/example/limitations_const_parameter_warning.cpp index 871e033..531bba2 100644 --- a/build/boost/doc/example/limitations_const_parameter_warning.cpp +++ b/doc/example/limitations_const_parameter_warning.cpp @@ -1,50 +1,50 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2014 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define BOOST_AUTO_TEST_MAIN -#include -#include - -namespace -{ -//[ limitations_const_parameter_warning_problem - class base - { - public: - virtual void method( const int ) = 0; - }; -//] -} - -namespace limitations_const_parameter_warning_explanation -{ -//[ limitations_const_parameter_warning_explanation - class derived : public base - { - public: - virtual void method( const int ); - }; - - void derived::method( int ) - {} -//] -} - -namespace limitations_const_parameter_warning_solution -{ -//[ limitations_const_parameter_warning_solution - MOCK_BASE_CLASS( mock_base, base ) - { - void method( const int i ) - { - method_stub( i ); - } - MOCK_METHOD( method_stub, 1, void( int ), method ) - }; -//] -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2014 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define BOOST_AUTO_TEST_MAIN +#include +#include + +namespace +{ +//[ limitations_const_parameter_warning_problem + class base + { + public: + virtual void method( const int ) = 0; + }; +//] +} + +namespace limitations_const_parameter_warning_explanation +{ +//[ limitations_const_parameter_warning_explanation + class derived : public base + { + public: + virtual void method( const int ); + }; + + void derived::method( int ) + {} +//] +} + +namespace limitations_const_parameter_warning_solution +{ +//[ limitations_const_parameter_warning_solution + MOCK_BASE_CLASS( mock_base, base ) + { + void method( const int i ) + { + method_stub( i ); + } + MOCK_METHOD( method_stub, 1, void( int ), method ) + }; +//] +} diff --git a/build/boost/doc/example/limitations_literal_zero.cpp b/doc/example/limitations_literal_zero.cpp similarity index 95% rename from build/boost/doc/example/limitations_literal_zero.cpp rename to doc/example/limitations_literal_zero.cpp index 08c2c05..463f4ea 100644 --- a/build/boost/doc/example/limitations_literal_zero.cpp +++ b/doc/example/limitations_literal_zero.cpp @@ -1,43 +1,43 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2014 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define BOOST_AUTO_TEST_MAIN -#include -#include - -namespace -{ -//[ limitations_literal_zero_problem - class base - { - public: - virtual void method( int* i ) = 0; - }; - - MOCK_BASE_CLASS( mock_base, base ) - { - MOCK_METHOD( method, 1 ) - }; -//] -} - -BOOST_AUTO_TEST_CASE( literal_zero ) -{ - mock_base m; -//[ limitations_literal_zero_solution_1 - MOCK_EXPECT( m.method ).with( mock::equal< int* >( 0 ) ); // this compiles -//] -//[ limitations_literal_zero_solution_2 - MOCK_EXPECT( m.method ).with( mock::negate ); -//] -#ifdef MOCK_NULLPTR -//[ limitations_literal_zero_solution_3 - MOCK_EXPECT( m.method ).with( nullptr ); -//] -#endif -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2014 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define BOOST_AUTO_TEST_MAIN +#include +#include + +namespace +{ +//[ limitations_literal_zero_problem + class base + { + public: + virtual void method( int* i ) = 0; + }; + + MOCK_BASE_CLASS( mock_base, base ) + { + MOCK_METHOD( method, 1 ) + }; +//] +} + +BOOST_AUTO_TEST_CASE( literal_zero ) +{ + mock_base m; +//[ limitations_literal_zero_solution_1 + MOCK_EXPECT( m.method ).with( mock::equal< int* >( 0 ) ); // this compiles +//] +//[ limitations_literal_zero_solution_2 + MOCK_EXPECT( m.method ).with( mock::negate ); +//] +#ifdef MOCK_NULLPTR +//[ limitations_literal_zero_solution_3 + MOCK_EXPECT( m.method ).with( nullptr ); +//] +#endif +} diff --git a/build/boost/doc/example/limitations_non_virtual_method.cpp b/doc/example/limitations_non_virtual_method.cpp similarity index 95% rename from build/boost/doc/example/limitations_non_virtual_method.cpp rename to doc/example/limitations_non_virtual_method.cpp index 019a59e..b6f0457 100644 --- a/build/boost/doc/example/limitations_non_virtual_method.cpp +++ b/doc/example/limitations_non_virtual_method.cpp @@ -1,27 +1,27 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2014 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define BOOST_AUTO_TEST_MAIN -#include -#include - -//[ limitations_non_virtual_method_problem -class base -{ -public: - void method() // the method is not virtual - {} -}; -//] - -//[ limitations_non_virtual_method_problem_2 -MOCK_BASE_CLASS( mock_base, base ) -{ - MOCK_METHOD( method, 0 ) -}; -//] +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2014 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define BOOST_AUTO_TEST_MAIN +#include +#include + +//[ limitations_non_virtual_method_problem +class base +{ +public: + void method() // the method is not virtual + {} +}; +//] + +//[ limitations_non_virtual_method_problem_2 +MOCK_BASE_CLASS( mock_base, base ) +{ + MOCK_METHOD( method, 0 ) +}; +//] diff --git a/build/boost/doc/example/limitations_private_method.cpp b/doc/example/limitations_private_method.cpp similarity index 95% rename from build/boost/doc/example/limitations_private_method.cpp rename to doc/example/limitations_private_method.cpp index e1bf2c6..b03c086 100644 --- a/build/boost/doc/example/limitations_private_method.cpp +++ b/doc/example/limitations_private_method.cpp @@ -1,29 +1,29 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2014 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define BOOST_AUTO_TEST_MAIN -#include -#include - -namespace -{ -//[ limitations_private_method_problem - class base - { - private: - virtual void method() = 0; - }; -//] - -//[ limitations_private_method_solution - MOCK_BASE_CLASS( mock_base, base ) - { - MOCK_METHOD( method, 0, void() ) - }; -//] -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2014 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define BOOST_AUTO_TEST_MAIN +#include +#include + +namespace +{ +//[ limitations_private_method_problem + class base + { + private: + virtual void method() = 0; + }; +//] + +//[ limitations_private_method_solution + MOCK_BASE_CLASS( mock_base, base ) + { + MOCK_METHOD( method, 0, void() ) + }; +//] +} diff --git a/build/boost/doc/example/limitations_template_method.cpp b/doc/example/limitations_template_method.cpp similarity index 95% rename from build/boost/doc/example/limitations_template_method.cpp rename to doc/example/limitations_template_method.cpp index f89d1fe..7d30313 100644 --- a/build/boost/doc/example/limitations_template_method.cpp +++ b/doc/example/limitations_template_method.cpp @@ -1,83 +1,83 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2014 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define BOOST_AUTO_TEST_MAIN -#include -#include - -namespace limitations_template_method_problem -{ -//[ limitations_template_method_problem -class concept -{ -public: - template< typename T > - void method( T t ) - {} -}; - -template< typename T > -void function_under_test( T t ) // T is supposed to model the previous concept -{ - t.method( 42 ); - t.method( "string" ); -} -//] - -//[ limitations_template_method_solution -MOCK_CLASS( mock_concept ) -{ - MOCK_METHOD( method, 1, void( int ), method_int ) - MOCK_METHOD( method, 1, void( const char* ), method_string ) -}; -//] -} - -namespace limitations_template_method_problem_2 -{ -//[ limitations_template_method_problem_2 -class concept -{ -public: - template< typename T > - T create() - { - return T(); - } -}; - -template< typename T > -void function_under_test( T t ) // T is supposed to model the previous concept -{ - t.create< int >(); - t.create< std::string >(); -} -//] - -//[ limitations_template_method_solution_2 -MOCK_CLASS( mock_concept ) -{ - template< typename T > - T create(); - - template<> - int create< int >() - { - return create_int(); - } - template<> - std::string create< std::string >() - { - return create_string(); - } - - MOCK_METHOD( create_int, 0, int(), create_int ) - MOCK_METHOD( create_string, 0, std::string(), create_string ) -}; -//] -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2014 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define BOOST_AUTO_TEST_MAIN +#include +#include + +namespace limitations_template_method_problem +{ +//[ limitations_template_method_problem +class concept +{ +public: + template< typename T > + void method( T t ) + {} +}; + +template< typename T > +void function_under_test( T t ) // T is supposed to model the previous concept +{ + t.method( 42 ); + t.method( "string" ); +} +//] + +//[ limitations_template_method_solution +MOCK_CLASS( mock_concept ) +{ + MOCK_METHOD( method, 1, void( int ), method_int ) + MOCK_METHOD( method, 1, void( const char* ), method_string ) +}; +//] +} + +namespace limitations_template_method_problem_2 +{ +//[ limitations_template_method_problem_2 +class concept +{ +public: + template< typename T > + T create() + { + return T(); + } +}; + +template< typename T > +void function_under_test( T t ) // T is supposed to model the previous concept +{ + t.create< int >(); + t.create< std::string >(); +} +//] + +//[ limitations_template_method_solution_2 +MOCK_CLASS( mock_concept ) +{ + template< typename T > + T create(); + + template<> + int create< int >() + { + return create_int(); + } + template<> + std::string create< std::string >() + { + return create_string(); + } + + MOCK_METHOD( create_int, 0, int(), create_int ) + MOCK_METHOD( create_string, 0, std::string(), create_string ) +}; +//] +} diff --git a/build/boost/doc/example/limitations_throw_specifier.cpp b/doc/example/limitations_throw_specifier.cpp similarity index 95% rename from build/boost/doc/example/limitations_throw_specifier.cpp rename to doc/example/limitations_throw_specifier.cpp index 89e3913..01e70fe 100644 --- a/build/boost/doc/example/limitations_throw_specifier.cpp +++ b/doc/example/limitations_throw_specifier.cpp @@ -1,35 +1,35 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2014 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define BOOST_AUTO_TEST_MAIN -#include -#include - -namespace -{ -//[ limitations_throw_specifier_problem - struct base_class - { - virtual ~base_class() - {} - - virtual void method() throw (); - }; -//] - -//[ limitations_throw_specifier_solution - MOCK_BASE_CLASS( mock_class, base_class ) - { - void method() throw () - { - method_proxy(); - } - MOCK_METHOD( method_proxy, 0, void(), method ) - }; -//] -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2014 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define BOOST_AUTO_TEST_MAIN +#include +#include + +namespace +{ +//[ limitations_throw_specifier_problem + struct base_class + { + virtual ~base_class() + {} + + virtual void method() throw (); + }; +//] + +//[ limitations_throw_specifier_solution + MOCK_BASE_CLASS( mock_class, base_class ) + { + void method() throw () + { + method_proxy(); + } + MOCK_METHOD( method_proxy, 0, void(), method ) + }; +//] +} diff --git a/build/boost/doc/example/mock_view.hpp b/doc/example/mock_view.hpp similarity index 100% rename from build/boost/doc/example/mock_view.hpp rename to doc/example/mock_view.hpp diff --git a/build/boost/doc/example/motivation.cpp b/doc/example/motivation.cpp similarity index 95% rename from build/boost/doc/example/motivation.cpp rename to doc/example/motivation.cpp index 89a6bce..617cc06 100644 --- a/build/boost/doc/example/motivation.cpp +++ b/doc/example/motivation.cpp @@ -1,76 +1,76 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2014 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define BOOST_AUTO_TEST_MAIN -#include -#include -#include "calculator.hpp" -#include "mock_view.hpp" - -namespace simple -{ -//[ simple_calculator -class calculator -{ -public: - int add( int a, int b ); -}; -//] - -//[ simple_zero_plus_zero_is_zero -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) -{ - calculator c; - BOOST_CHECK_EQUAL( 0, c.add( 0, 0 ) ); -} -//] -} - -namespace without_mock_object -{ -//[ my_view -class my_view : public view -{ -public: - my_view() - : called( false ) - {} - virtual void display( int result ) - { - called = true; - value = result; - } - bool called; - int value; -}; -//] - -//[ zero_plus_zero_is_zero_without_mock_object -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) -{ - my_view v; - calculator c( v ); - c.add( 0, 0 ); - BOOST_REQUIRE( v.called ); - BOOST_CHECK_EQUAL( 0, v.value ); -} -//] -} - -namespace with_mock_object -{ -//[ zero_plus_zero_is_zero_with_mock_object -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) -{ - mock_view v; - calculator c( v ); - MOCK_EXPECT( v.display ).once().with( 0 ); // expect the 'display' method to be called once (and only once) with a parameter value equal to 0 - c.add( 0, 0 ); -} -//] -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2014 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define BOOST_AUTO_TEST_MAIN +#include +#include +#include "calculator.hpp" +#include "mock_view.hpp" + +namespace simple +{ +//[ simple_calculator +class calculator +{ +public: + int add( int a, int b ); +}; +//] + +//[ simple_zero_plus_zero_is_zero +BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) +{ + calculator c; + BOOST_CHECK_EQUAL( 0, c.add( 0, 0 ) ); +} +//] +} + +namespace without_mock_object +{ +//[ my_view +class my_view : public view +{ +public: + my_view() + : called( false ) + {} + virtual void display( int result ) + { + called = true; + value = result; + } + bool called; + int value; +}; +//] + +//[ zero_plus_zero_is_zero_without_mock_object +BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) +{ + my_view v; + calculator c( v ); + c.add( 0, 0 ); + BOOST_REQUIRE( v.called ); + BOOST_CHECK_EQUAL( 0, v.value ); +} +//] +} + +namespace with_mock_object +{ +//[ zero_plus_zero_is_zero_with_mock_object +BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) +{ + mock_view v; + calculator c( v ); + MOCK_EXPECT( v.display ).once().with( 0 ); // expect the 'display' method to be called once (and only once) with a parameter value equal to 0 + c.add( 0, 0 ); +} +//] +} diff --git a/build/boost/doc/example/patterns_async_call.cpp b/doc/example/patterns_async_call.cpp similarity index 96% rename from build/boost/doc/example/patterns_async_call.cpp rename to doc/example/patterns_async_call.cpp index 83df2ed..2a0dd5d 100644 --- a/build/boost/doc/example/patterns_async_call.cpp +++ b/doc/example/patterns_async_call.cpp @@ -1,61 +1,61 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2014 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -//[ async_call_problem -namespace -{ - class base_class - { - public: - virtual void method() = 0; - }; - - class my_class - { - public: - explicit my_class( base_class& ); - - void flush(); // repetitively calling this method will in turn call base_class::method at some point - }; -} -//] - -//[ async_call_solution -#define BOOST_AUTO_TEST_MAIN -#include -#include -#include -#include - -namespace -{ - template< typename F > - void wait( bool& condition, F flush, int timeout = 100, int sleep = 100 ) - { - while( !condition && timeout > 0 ) - { - --timeout; - boost::this_thread::sleep( boost::posix_time::milliseconds( sleep ) ); - flush(); - } - } - MOCK_BASE_CLASS( mock_base_class, base_class ) - { - MOCK_METHOD( method, 0 ) - }; -} - -BOOST_AUTO_TEST_CASE( method_is_called ) -{ - mock_base_class mock; - my_class c( mock ); - bool done = false; - MOCK_EXPECT( mock.method ).once().calls( boost::lambda::var( done ) = true ); // when method is called it will set done to true - wait( done, boost::bind( &my_class::flush, &c ) ); // just wait on done, flushing from time to time -} -//] +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2014 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +//[ async_call_problem +namespace +{ + class base_class + { + public: + virtual void method() = 0; + }; + + class my_class + { + public: + explicit my_class( base_class& ); + + void flush(); // repetitively calling this method will in turn call base_class::method at some point + }; +} +//] + +//[ async_call_solution +#define BOOST_AUTO_TEST_MAIN +#include +#include +#include +#include + +namespace +{ + template< typename F > + void wait( bool& condition, F flush, int timeout = 100, int sleep = 100 ) + { + while( !condition && timeout > 0 ) + { + --timeout; + boost::this_thread::sleep( boost::posix_time::milliseconds( sleep ) ); + flush(); + } + } + MOCK_BASE_CLASS( mock_base_class, base_class ) + { + MOCK_METHOD( method, 0 ) + }; +} + +BOOST_AUTO_TEST_CASE( method_is_called ) +{ + mock_base_class mock; + my_class c( mock ); + bool done = false; + MOCK_EXPECT( mock.method ).once().calls( boost::lambda::var( done ) = true ); // when method is called it will set done to true + wait( done, boost::bind( &my_class::flush, &c ) ); // just wait on done, flushing from time to time +} +//] diff --git a/build/boost/doc/example/patterns_invoke_functor.cpp b/doc/example/patterns_invoke_functor.cpp similarity index 96% rename from build/boost/doc/example/patterns_invoke_functor.cpp rename to doc/example/patterns_invoke_functor.cpp index 0faf8e9..a7e0676 100644 --- a/build/boost/doc/example/patterns_invoke_functor.cpp +++ b/doc/example/patterns_invoke_functor.cpp @@ -1,44 +1,44 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2014 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -//[ invoke_functor_problem -#include - -namespace -{ - class base_class - { - public: - virtual void method( boost::function< void( int ) > functor ) = 0; - }; - - void function( base_class& ); // the function will call 'method' with a functor to be applied -} -//] - -//[ invoke_functor_solution -#define BOOST_AUTO_TEST_MAIN -#include -#include -#include - -namespace -{ - MOCK_BASE_CLASS( mock_class, base_class ) - { - MOCK_METHOD( method, 1 ) - }; -} - -BOOST_AUTO_TEST_CASE( how_to_invoke_a_functor_passed_as_parameter_of_a_mock_method ) -{ - mock_class mock; - MOCK_EXPECT( mock.method ).calls( boost::bind( boost::apply< void >(), _1, 42 ) ); // whenever 'method' is called, invoke the functor with 42 - function( mock ); -} -//] +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2014 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +//[ invoke_functor_problem +#include + +namespace +{ + class base_class + { + public: + virtual void method( boost::function< void( int ) > functor ) = 0; + }; + + void function( base_class& ); // the function will call 'method' with a functor to be applied +} +//] + +//[ invoke_functor_solution +#define BOOST_AUTO_TEST_MAIN +#include +#include +#include + +namespace +{ + MOCK_BASE_CLASS( mock_class, base_class ) + { + MOCK_METHOD( method, 1 ) + }; +} + +BOOST_AUTO_TEST_CASE( how_to_invoke_a_functor_passed_as_parameter_of_a_mock_method ) +{ + mock_class mock; + MOCK_EXPECT( mock.method ).calls( boost::bind( boost::apply< void >(), _1, 42 ) ); // whenever 'method' is called, invoke the functor with 42 + function( mock ); +} +//] diff --git a/build/boost/doc/example/patterns_quick_constraint.cpp b/doc/example/patterns_quick_constraint.cpp similarity index 96% rename from build/boost/doc/example/patterns_quick_constraint.cpp rename to doc/example/patterns_quick_constraint.cpp index eb0821d..f3bc053 100644 --- a/build/boost/doc/example/patterns_quick_constraint.cpp +++ b/doc/example/patterns_quick_constraint.cpp @@ -1,54 +1,54 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2014 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -//[ quick_constraint_problem -#define BOOST_AUTO_TEST_MAIN -#include -#include -#include - -namespace -{ - class my_class - { - public: - explicit my_class( int data ) - : data_( data ) - {} - int data_; - }; - std::ostream& operator<<( std::ostream& os, const my_class& c ) // my_class is serializable to an std::ostream - { - return os << "my_class( " << c.data_ << " )"; - } - - MOCK_CLASS( my_mock ) - { - MOCK_METHOD( method, 1, void( const my_class& ) ) // how to simply write a custom constraint ? - }; -} -//] - -//[ quick_constraint_solution -#include - -namespace mock // it could also be in the namespace of 'my_class' -{ - bool operator==( const my_class& actual, const std::string& expected ) // the first part of the trick is to compare to a string - { - return boost::lexical_cast< std::string >( actual ) == expected; - } -} // mock - -BOOST_AUTO_TEST_CASE( method_is_called ) -{ - my_mock mock; - MOCK_EXPECT( mock.method ).once().with( "my_class( 42 )" ); // the second part of the trick is to express the constraint as a string - mock.method( my_class( 42 ) ); -} -//] +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2014 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +//[ quick_constraint_problem +#define BOOST_AUTO_TEST_MAIN +#include +#include +#include + +namespace +{ + class my_class + { + public: + explicit my_class( int data ) + : data_( data ) + {} + int data_; + }; + std::ostream& operator<<( std::ostream& os, const my_class& c ) // my_class is serializable to an std::ostream + { + return os << "my_class( " << c.data_ << " )"; + } + + MOCK_CLASS( my_mock ) + { + MOCK_METHOD( method, 1, void( const my_class& ) ) // how to simply write a custom constraint ? + }; +} +//] + +//[ quick_constraint_solution +#include + +namespace mock // it could also be in the namespace of 'my_class' +{ + bool operator==( const my_class& actual, const std::string& expected ) // the first part of the trick is to compare to a string + { + return boost::lexical_cast< std::string >( actual ) == expected; + } +} // mock + +BOOST_AUTO_TEST_CASE( method_is_called ) +{ + my_mock mock; + MOCK_EXPECT( mock.method ).once().with( "my_class( 42 )" ); // the second part of the trick is to express the constraint as a string + mock.method( my_class( 42 ) ); +} +//] diff --git a/build/boost/doc/example/patterns_retrieve_cref.cpp b/doc/example/patterns_retrieve_cref.cpp similarity index 96% rename from build/boost/doc/example/patterns_retrieve_cref.cpp rename to doc/example/patterns_retrieve_cref.cpp index ffc3f40..8be3e9a 100644 --- a/build/boost/doc/example/patterns_retrieve_cref.cpp +++ b/doc/example/patterns_retrieve_cref.cpp @@ -1,50 +1,50 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2014 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -//[ retrieve_cref_problem -namespace -{ - class base_class - { - public: - virtual void method( int value ) = 0; - }; - - class my_class - { - public: - explicit my_class( base_class& ); - - void process(); // the processing will call 'method' two times with the same value, but we don't know what value beforehand - }; -} -//] - -//[ retrieve_cref_solution -#define BOOST_AUTO_TEST_MAIN -#include -#include - -namespace -{ - MOCK_BASE_CLASS( mock_base_class, base_class ) - { - MOCK_METHOD( method, 1 ) - }; -} - -BOOST_AUTO_TEST_CASE( method_is_called_two_times_with_the_same_value ) -{ - mock_base_class mock; - my_class c( mock ); - int value; - MOCK_EXPECT( mock.method ).once().with( mock::retrieve( value ) ); // on first call retrieve the value, this expectation takes precedence because it can never fail - MOCK_EXPECT( mock.method ).once().with( boost::cref( value ) ); // on second call compare the previously retrieved value with the newly received one - c.process(); -} -//] +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2014 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +//[ retrieve_cref_problem +namespace +{ + class base_class + { + public: + virtual void method( int value ) = 0; + }; + + class my_class + { + public: + explicit my_class( base_class& ); + + void process(); // the processing will call 'method' two times with the same value, but we don't know what value beforehand + }; +} +//] + +//[ retrieve_cref_solution +#define BOOST_AUTO_TEST_MAIN +#include +#include + +namespace +{ + MOCK_BASE_CLASS( mock_base_class, base_class ) + { + MOCK_METHOD( method, 1 ) + }; +} + +BOOST_AUTO_TEST_CASE( method_is_called_two_times_with_the_same_value ) +{ + mock_base_class mock; + my_class c( mock ); + int value; + MOCK_EXPECT( mock.method ).once().with( mock::retrieve( value ) ); // on first call retrieve the value, this expectation takes precedence because it can never fail + MOCK_EXPECT( mock.method ).once().with( boost::cref( value ) ); // on second call compare the previously retrieved value with the newly received one + c.process(); +} +//] diff --git a/build/boost/doc/example/rationale.cpp b/doc/example/rationale.cpp similarity index 100% rename from build/boost/doc/example/rationale.cpp rename to doc/example/rationale.cpp diff --git a/build/boost/doc/example/reference.cpp b/doc/example/reference.cpp similarity index 95% rename from build/boost/doc/example/reference.cpp rename to doc/example/reference.cpp index 1fb520c..f7c24d0 100644 --- a/build/boost/doc/example/reference.cpp +++ b/doc/example/reference.cpp @@ -1,984 +1,984 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2014 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define BOOST_AUTO_TEST_MAIN -#include -#include - -namespace class_example_1 -{ -//[ class_example_1 -MOCK_CLASS( mock_class ) -{}; - -BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_mock_class ) -{ - mock_class c; -} -//] -} - -namespace class_example_2 -{ -//[ class_example_2 -template< typename T > -MOCK_CLASS( mock_class ) -{}; - -BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_template_mock_class ) -{ - mock_class< int > c; -} -//] -} - -namespace class_example_3 -{ -//[ class_example_3 -struct base_class -{}; - -MOCK_BASE_CLASS( mock_class, base_class ) -{}; - -BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_derived_mock_class ) -{ - mock_class c; -} -//] -} - -namespace class_example_4 -{ -//[ class_example_4 -template< typename T > -struct base_class -{}; - -template< typename T > -MOCK_BASE_CLASS( mock_class, base_class< T > ) -{}; - -BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_template_derived_mock_class ) -{ - mock_class< int > c; -} -//] -} - -namespace class_example_5 -{ -//[ class_example_5 -struct name : mock::object // equivalent to using MOCK_CLASS -{}; -//] -} - -namespace class_example_6 -{ -//[ class_example_6 -template< typename T > -struct name : mock::object // equivalent to using MOCK_CLASS -{}; -//] -} - -namespace class_example_7 -{ -//[ class_example_7 -class base -{}; - -struct name : base, mock::object // equivalent to using MOCK_BASE_CLASS -{ - typedef base base_type; // this is required for the shortest form of MOCK_METHOD to work when not using MOCK_BASE_CLASS -}; -//] -} - -namespace class_example_8 -{ -//[ class_example_8 -template< typename T > -struct base -{}; - -template< typename T > -struct mock : base< T >, mock::object -{ - typedef typename base< T > base_type; -}; -//] -} - -namespace member_function_example_1 -{ -//[ member_function_example_1 -struct base_class -{ - virtual ~base_class() - {} - virtual void method( int ) = 0; -}; - -MOCK_BASE_CLASS( mock_class, base_class ) -{ - MOCK_METHOD( method, 1 ) // only possible when referring unambiguously to a base class method -}; -//] -} - -namespace member_function_example_2 -{ -//[ member_function_example_2 -struct base_class -{ - virtual ~base_class() - {} - virtual void method( int, const std::string& ) = 0; - virtual void method( float ) = 0; -}; - -MOCK_BASE_CLASS( mock_class, base_class ) -{ - MOCK_METHOD( method, 2, void( int, const std::string& ), identifier_1 ) // both the signature and identifier must be specified because of ambiguity due to overloading - MOCK_METHOD( method, 1, void( float ), identifier_2 ) // the identifier must differ from the previous one in order to fully disambiguate methods -}; -//] -} - -namespace member_function_example_3 -{ -//[ member_function_example_3 -struct base_class -{ - virtual ~base_class() - {} - virtual void method( float ) = 0; - virtual void method( float ) const = 0; -}; - -MOCK_BASE_CLASS( mock_class, base_class ) -{ - MOCK_METHOD( method, 1, void( float ) ) // this generates both const and non-const versions -}; -//] -} - -namespace member_function_example_4 -{ -//[ member_function_example_4 -struct base_class -{ - virtual ~base_class() - {} - virtual void method( float ) = 0; - virtual void method( float ) const = 0; -}; - -MOCK_BASE_CLASS( mock_class, base_class ) -{ - MOCK_CONST_METHOD( method, 1, void( float ), identifier_1 ) // this generates only the const version - MOCK_NON_CONST_METHOD( method, 1, void( float ), identifier_2 ) // this generates only the non-const version, with a different identifier -}; -//] -} - -namespace member_function_example_5 -{ -//[ member_function_example_5 -struct base_class -{ - virtual ~base_class() - {} - virtual void method( float ) = 0; -}; - -struct mock_class : base_class -{ - typedef base_class base_type; // this is required for MOCK_METHOD to work when not using MOCK_BASE_CLASS - - MOCK_METHOD( method, 1 ) -}; -//] -} - -namespace member_function_example_6 -{ -//[ member_function_example_6 -MOCK_CLASS( mock_class ) -{ - MOCK_NON_CONST_METHOD( operator=, 1, mock_class&( const mock_class& ), assignment ) // operators require a custom identifier -}; -//] -} - -namespace member_function_example_7 -{ -//[ member_function_example_7 -template< typename T > -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD_TPL( method, 1, void( const T& ) ) // the _TPL variants must be used if the signature includes a template parameter of the class -}; -//] -} - -namespace member_function_example_8 -{ -//[ member_function_example_8 -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD( method, 0, (std::map< int, int >()) ) // the signature must be surrounded with round parenthesis if the return type contains a comma -}; -//] -} - -#ifdef BOOST_MSVC -namespace member_function_example_9 -{ -//[ member_function_example_9 -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD( __stdcall method, 0, void(), method ) // all parameters must be provided when specifying a different calling convention -}; -//] -} -#elif defined( BOOST_GCC ) -namespace member_function_example_10 -{ -//[ member_function_example_10 -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD( __attribute((stdcall)) method, 0, void(), method ) // all parameters must be provided when specifying a different calling convention -}; -//] -} -#endif - -namespace static_member_function_example_1 -{ -//[ static_member_function_example_1 -MOCK_CLASS( mock_class ) -{ - MOCK_STATIC_METHOD( method, 1, float( int ) ) -}; -//] -} - -namespace static_member_function_example_2 -{ -//[ static_member_function_example_2 -template< typename T > -MOCK_CLASS( mock_class ) -{ - MOCK_STATIC_METHOD_TPL( method, 1, void( T ) ) -}; -//] -} - -#ifdef BOOST_MSVC -namespace static_member_function_example_3 -{ -//[ static_member_function_example_3 -MOCK_CLASS( mock_class ) -{ - MOCK_STATIC_METHOD( __stdcall method, 0, void(), method ) // all parameters must be provided when specifying a different calling convention -}; -//] -} -#elif defined( BOOST_GCC ) -namespace static_member_function_example_4 -{ -//[ static_member_function_example_4 -MOCK_CLASS( mock_class ) -{ - MOCK_STATIC_METHOD( __attribute((stdcall)) method, 0, void(), method ) // all parameters must be provided when specifying a different calling convention -}; -//] -} -#endif - -namespace constructor_example_1 -{ -//[ constructor_example_1 -MOCK_CLASS( mock_class ) -{ - MOCK_CONSTRUCTOR( mock_class, 2, ( int, const std::string& ), identifier ) -}; -//] -} - -namespace constructor_example_2 -{ -//[ constructor_example_2 -template< typename T > -MOCK_CLASS( mock_class ) -{ - MOCK_CONSTRUCTOR( mock_class, 2, ( int, const std::string& ), identifier ) - MOCK_CONSTRUCTOR_TPL( mock_class, 2, ( T, const std::string& ), identifier ) -}; -//] -} - -#ifdef BOOST_MSVC -namespace constructor_example_3 -{ -//[ constructor_example_3 -MOCK_CLASS( mock_class ) -{ - MOCK_CONSTRUCTOR( __stdcall mock_class, 0, (), constructor ) -}; -//] -} -#elif defined( BOOST_GCC ) -namespace constructor_example_4 -{ -//[ constructor_example_4 -MOCK_CLASS( mock_class ) -{ - MOCK_CONSTRUCTOR( __attribute((stdcall)) mock_class, 0, (), constructor ) -}; -//] -} -#endif - -namespace destructor_example_1 -{ -//[ destructor_example_1 -MOCK_CLASS( mock_class ) -{ - MOCK_DESTRUCTOR( ~mock_class, destructor ) -}; -//] -} - -#ifdef BOOST_MSVC -namespace destructor_example_2 -{ -//[ destructor_example_2 -MOCK_CLASS( mock_class ) -{ - MOCK_DESTRUCTOR( __stdcall ~mock_class, destructor ) -}; -//] -} -#elif defined( BOOST_GCC ) -namespace destructor_example_3 -{ -//[ destructor_example_3 -MOCK_CLASS( mock_class ) -{ - MOCK_DESTRUCTOR( __attribute((stdcall)) ~mock_class, destructor ) -}; -//] -} -#endif - -namespace conversion_operator_example_1 -{ -//[ conversion_operator_example_1 -MOCK_CLASS( mock_class ) -{ - MOCK_CONVERSION_OPERATOR( operator, int, conversion_to_int ) - MOCK_CONST_CONVERSION_OPERATOR( operator, const std::string&, conversion_to_string ) -}; -//] -} - -namespace conversion_operator_example_2 -{ -//[ conversion_operator_example_2 -template< typename T > -MOCK_CLASS( mock_class ) -{ - MOCK_CONVERSION_OPERATOR_TPL( operator, T, conversion_to_T ) // the _TPL variants must be used if the signature includes a template parameter of the class - MOCK_CONST_CONVERSION_OPERATOR( operator, const std::string&, const_conversion_to_string ) - MOCK_NON_CONST_CONVERSION_OPERATOR( operator, const std::string&, non_const_conversion_to_string ) -}; -//] -} - -#ifdef BOOST_MSVC -namespace conversion_operator_example_3 -{ -//[ conversion_operator_example_3 -MOCK_CLASS( mock_class ) -{ - MOCK_CONVERSION_OPERATOR( __stdcall operator, int, conversion_to_int ) -}; -//] -} -#elif defined( BOOST_GCC ) -namespace conversion_operator_example_4 -{ -//[ conversion_operator_example_4 -MOCK_CLASS( mock_class ) -{ - MOCK_CONVERSION_OPERATOR( __attribute((stdcall)) operator, int, conversion_to_int ) -}; -//] -} -#endif - -namespace function_example_1 -{ -//[ function_example_1 -MOCK_FUNCTION( f, 1, float( int ) ) - -BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_mock_function ) -{ - f( 3 ); -} -//] -} - -#ifdef BOOST_MSVC -namespace function_example_2 -{ -//[ function_example_2 -MOCK_FUNCTION( __stdcall f, 0, void(), f ) // all parameters must be provided when specifying a different calling convention -//] -} -#elif defined( BOOST_GCC ) -namespace function_example_3 -{ -//[ function_example_3 -MOCK_FUNCTION( __attribute((stdcall)) f, 0, void(), f ) // all parameters must be provided when specifying a different calling convention -//] -} -#endif - -namespace functor_example_1 -{ -//[ functor_example_1 -BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_mock_functor ) -{ - MOCK_FUNCTOR( f, void( int ) ); - f( 3 ); -} -//] -} - -namespace functor_example_2 -{ -//[ functor_example_2 -template< typename T > -struct mock_class -{ - MOCK_FUNCTOR_TPL( f, void( T ) ); -}; - -BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_mock_functor ) -{ - mock_class< int > c; - c.f( 3 ); -} -//] -} - -namespace expectation_example_1 -{ -//[ expectation_example_1 -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD( method, 1, int( int ), method ) - MOCK_METHOD( method, 2, void( const std::string&, float ), method2 ) -}; - -BOOST_AUTO_TEST_CASE( demonstrates_configuring_mock_objects ) -{ - mock_class c; - mock::sequence s; - MOCK_EXPECT( c.method ).once().with( 0 ).in( s ).returns( 42 ); - MOCK_EXPECT( c.method2 ).never().with( "ok", mock::any ); - MOCK_EXPECT( c.method2 ).at_least( 2 ).in( s ).throws( std::runtime_error( "error !" ) ); -} -//] -} - -namespace invocation_example_1 -{ -//[ invocation_example_1 -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD( method, 2, void( int, const std::string& ) ) -}; - -BOOST_AUTO_TEST_CASE( demonstrates_setting_up_invocations_on_a_mock_method ) -{ - mock_class c; - MOCK_EXPECT( c.method ).once(); // can only be called once - MOCK_EXPECT( c.method ); // can be called an unlimited number of times -} -//] -} - -namespace invocation_example_2 -{ -//[ invocation_example_2 -BOOST_AUTO_TEST_CASE( demonstrates_setting_up_an_invocation_on_a_mock_functor ) -{ - MOCK_FUNCTOR( f, void( int, const std::string& ) ); - MOCK_EXPECT( f ).once(); -} -//] -} - -namespace invocation_example_3 -{ -//[ invocation_example_3 -MOCK_FUNCTION( f, 1, void( int ) ) - -BOOST_AUTO_TEST_CASE( demonstrates_setting_up_an_invocation_on_a_mock_function ) -{ - MOCK_EXPECT( f ).once(); -} -//] -} - -namespace invocation_example_4 -{ -//[ invocation_example_4 -MOCK_CLASS( mock_class ) -{ - MOCK_STATIC_METHOD( method, 1, void( int ) ) -}; - -BOOST_AUTO_TEST_CASE( demonstrates_setting_up_an_invocation_on_a_mock_static_method ) -{ - mock_class c; - MOCK_EXPECT( c.method ).once(); - MOCK_EXPECT( mock_class::method ).once(); // does the same -} -//] -} - -namespace constraints_example_1 -{ -//[ constraints_example_1 -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD( method, 2, void( int, const std::string& ) ) -}; - -BOOST_AUTO_TEST_CASE( demonstrates_adding_builtin_constraints ) -{ - mock_class c; - MOCK_EXPECT( c.method ).with( mock::equal( 3 ), mock::equal( "some string" ) ); - MOCK_EXPECT( c.method ).with( 3, "some string" ); // equivalent to the previous one using short-cuts -} -//] -} - -namespace constraints_example_2 -{ -//[ constraints_example_2 -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD( method, 1, void( int ) ) -}; - -bool custom_constraint( int actual ) -{ - return actual == 42; -} - -BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_a_free_function ) -{ - mock_class c; - MOCK_EXPECT( c.method ).with( &custom_constraint ); -} -//] -} - -namespace constraints_example_3 -{ -//[ constraints_example_3 -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD( method, 1, void( int ) ) -}; - -bool custom_constraint( int expected, int actual ) -{ - return expected == actual; -} - -BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_a_standard_library_functor ) -{ - mock_class c; - MOCK_EXPECT( c.method ).with( std::bind1st( std::ptr_fun( &custom_constraint ), 42 ) ); // std::ptr_fun creates an std::unary_function -} -//] -} - -namespace constraints_example_4 -{ -//[ constraints_example_4 -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD( method, 1, void( int ) ) -}; - -bool custom_constraint( int expected, int actual ) -{ - return expected == actual; -} - -BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_boost_bind ) -{ - mock_class c; - MOCK_EXPECT( c.method ).with( boost::bind( &custom_constraint, 42, _1 ) ); -} -//] -} - -#ifndef BOOST_MSVC // this produces an ICE with all versions of MSVC - -#include - -namespace constraints_example_5 -{ -//[ constraints_example_5 -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD( method, 1, void( int ) ) -}; - -BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_boost_lambda ) -{ - mock_class c; - MOCK_EXPECT( c.method ).with( boost::lambda::_1 == 42 ); -} -//] -} - -#endif // BOOST_MSVC - -#include - -namespace constraints_example_6 -{ -//[ constraints_example_6 -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD( method, 1, void( int ) ) -}; - -BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_boost_phoenix ) -{ - mock_class c; - MOCK_EXPECT( c.method ).with( boost::phoenix::arg_names::arg1 == 42 ); - MOCK_EXPECT( c.method ).with( boost::phoenix::arg_names::_1 == 42 ); -} -//] -} - -#ifdef MOCK_LAMBDAS - -namespace constraints_example_7 -{ -//[ constraints_example_7 -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD( method, 1, void( int ) ) -}; - -BOOST_AUTO_TEST_CASE( demonstrates_adding_a_constraint_with_cxx11_lambda ) -{ - mock_class c; - MOCK_EXPECT( c.method ).with( []( int actual ) { return 42 == actual; } ); -} -//] -} - -#endif - -namespace constraints_example_8 -{ -//[ constraints_example_8 -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD( method, 2, void( int, const std::string& ) ) -}; - -BOOST_AUTO_TEST_CASE( demonstrates_combining_constraints ) -{ - mock_class c; - MOCK_EXPECT( c.method ).with( mock::less( 4 ) && mock::greater( 2 ), ! mock::equal( "" ) ); -} -//] -} - -namespace sequence_example_1 -{ -//[ sequence_example_1 -MOCK_CLASS( mock_class_1 ) -{ - MOCK_METHOD( method_1, 0, void() ) -}; - -MOCK_CLASS( mock_class_2 ) -{ - MOCK_METHOD( method_2, 0, void() ) -}; - -MOCK_CLASS( mock_class_3 ) -{ - MOCK_METHOD( method_3, 0, void() ) -}; - -BOOST_AUTO_TEST_CASE( demonstrates_enforcing_several_expectation_orders ) -{ - mock_class_1 c_1; - mock_class_2 c_2; - mock_class_3 c_3; - mock::sequence s_1, s_2; - MOCK_EXPECT( c_1.method_1 ).in( s_1 ); - MOCK_EXPECT( c_2.method_2 ).in( s_2 ); // c_1.method_1 and c_2.method_2 are in different sequences and can be called in any order - MOCK_EXPECT( c_3.method_3 ).in( s_1, s_2 ); // c_3.method_3 must be called after both c_1.method_1 and c_2.method_2 -} -//] -} - -namespace action_example_1 -{ -//[ action_example_1 -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD( method, 1, int( int ) ) -}; - -int function( int i ) -{ - return i; -} - -BOOST_AUTO_TEST_CASE( demonstrates_configuring_actions ) -{ - mock_class c; - MOCK_EXPECT( c.method ).returns( 42 ); - MOCK_EXPECT( c.method ).moves( 42 ); // returns by moving the value - MOCK_EXPECT( c.method ).throws( std::runtime_error( "error !" ) ); - MOCK_EXPECT( c.method ).calls( &function ); // forwards 'method' parameter to 'function' - MOCK_EXPECT( c.method ).calls( boost::bind( &function, 42 ) ); // drops 'method' parameter and binds 42 as parameter to 'function' - MOCK_EXPECT( c.method ).calls( []( int i ) { return i; } ); // uses a C++11 lambda -} -//] -} - -namespace verification_example_1 -{ -//[ verification_example_1 -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD( method, 0, void() ) -}; - -BOOST_AUTO_TEST_CASE( demonstrates_verifying_a_mock_method ) -{ - mock_class c; - MOCK_VERIFY( c.method ); // logs an error and returns false if not all expectations are met - mock::verify( c ); // verifies all expectations set for all methods of 'c' - mock::verify(); // verifies all existing mock objects, functions and functors -} -//] -} - -namespace verification_example_2 -{ -//[ verification_example_2 -BOOST_AUTO_TEST_CASE( demonstrates_verifying_a_mock_functor ) -{ - MOCK_FUNCTOR( f, void( int ) ); - MOCK_VERIFY( f ); // logs an error and returns false if not all expectations are met - mock::verify( f ); // behaves the same as MOCK_VERIFY - mock::verify(); // verifies all existing mock objects, functions and functors -} -//] -} - -namespace verification_example_3 -{ -//[ verification_example_3 -MOCK_FUNCTION( f, 1, void( int ) ) - -BOOST_AUTO_TEST_CASE( demonstrates_verifying_a_mock_function ) -{ - MOCK_VERIFY( f ); // logs an error and returns false if not all expectations are met - mock::verify(); // verifies all existing mock objects, functions and functors -} -//] -} - -namespace verification_example_4 -{ -//[ verification_example_4 -MOCK_CLASS( mock_class ) -{ - MOCK_STATIC_METHOD( method, 0, void() ) -}; - -BOOST_AUTO_TEST_CASE( demonstrates_verifying_a_static_mock_method ) -{ - mock_class c; - MOCK_VERIFY( c.method ); // logs an error and returns false if not all expectations are met - MOCK_VERIFY( mock_class::method ); // does the same - mock::verify(); // verifies all existing mock objects, functions and functors -} -//] -} - -namespace reset_example_1 -{ -//[ reset_example_1 -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD( method, 0, void() ) -}; - -BOOST_AUTO_TEST_CASE( demonstrates_resetting_a_mock_method ) -{ - mock_class c; - MOCK_RESET( c.method ); // resets all expectations set for 'c.method' - mock::reset( c ); // resets all expectations set on 'c' - mock::reset(); // resets all existing mock objects, functions and functors -} -//] -} - -namespace reset_example_2 -{ -//[ reset_example_2 -BOOST_AUTO_TEST_CASE( demonstrates_resetting_a_mock_functor ) -{ - MOCK_FUNCTOR( f, void( int ) ); - MOCK_RESET( f ); // resets all expectations set for 'f' - mock::reset( f ); // behaves the same as MOCK_RESET - mock::reset(); // resets all existing mock objects, functions and functors -} -//] -} - -namespace reset_example_3 -{ -//[ reset_example_3 -MOCK_FUNCTION( f, 1, void( int ) ) - -BOOST_AUTO_TEST_CASE( demonstrates_resetting_a_mock_function ) -{ - MOCK_RESET( f ); // resets all expectations set for 'f' - mock::reset(); // resets all existing mock objects, functions and functors -} -//] -} - -namespace reset_example_4 -{ -//[ reset_example_4 -MOCK_CLASS( mock_class ) -{ - MOCK_STATIC_METHOD( method, 0, void() ) -}; - -BOOST_AUTO_TEST_CASE( demonstrates_resetting_a_static_mock_method ) -{ - mock_class c; - MOCK_RESET( c.method ); // resets all expectations set for 'c::method' - MOCK_RESET( mock_class::method ); // resets all expectations set for 'c::method' - mock::reset(); // resets all existing mock objects, functions and functors -} -//] -} - -namespace helpers_example_1 -{ -//[ helpers_example_1 -MOCK_CONSTRAINT( any, true ) // this is how mock::any could be defined -MOCK_CONSTRAINT( forty_two, actual == 42 ) // this defines a 'forty_two' constraint - -BOOST_AUTO_TEST_CASE( mock_constraint_0_arity ) -{ - MOCK_FUNCTOR( f, void( int ) ); - MOCK_EXPECT( f ).with( forty_two ); - MOCK_EXPECT( f ).with( any ); -} -//] -} - -namespace helpers_example_2 -{ -//[ helpers_example_2 -MOCK_CONSTRAINT( equal, expected, actual == expected ) // this is how mock::equal could be defined -MOCK_CONSTRAINT( near, expected, std::abs( actual - expected ) < 0.01 ) // this defines a 'near' constraint which can be used as 'near( 42 )' - -BOOST_AUTO_TEST_CASE( mock_constraint_1_arity ) -{ - MOCK_FUNCTOR( f, void( int ) ); - MOCK_EXPECT( f ).with( near( 42 ) ); - MOCK_EXPECT( f ).with( equal( 42 ) ); -} -//] -} - -namespace helpers_example_3 -{ -//[ helpers_example_3 -MOCK_CONSTRAINT( near, expected, tolerance, std::abs( actual - expected ) < tolerance ) // this is how mock::near could be defined - -BOOST_AUTO_TEST_CASE( mock_constraint_2_arity ) -{ - MOCK_FUNCTOR( f, void( int ) ); - MOCK_EXPECT( f ).with( near( 42, 0.001 ) ); -} -//] -} - -namespace helpers_example_4 -{ -//[ helpers_example_4 -MOCK_CONSTRAINT_EXT( any, 0,, true ) // this is (almost) how mock::any is defined -MOCK_CONSTRAINT_EXT( forty_two, 0,, actual == 42 ) // this defines a 'forty_two' constraint - -BOOST_AUTO_TEST_CASE( mock_constraint_0_arity ) -{ - MOCK_FUNCTOR( f, void( int ) ); - MOCK_EXPECT( f ).with( forty_two ); - MOCK_EXPECT( f ).with( any ); -} -//] -} - -namespace helpers_example_5 -{ -//[ helpers_example_5 -MOCK_CONSTRAINT_EXT( equal, 1, ( expected ), actual == expected ) // this is how mock::equal is defined -MOCK_CONSTRAINT_EXT( near, 1, ( expected ), std::abs( actual - expected ) < 0.01 ) // this defines a 'near' constraint which can be used as 'near( 42 )' - -BOOST_AUTO_TEST_CASE( mock_constraint_1_arity ) -{ - MOCK_FUNCTOR( f, void( int ) ); - MOCK_EXPECT( f ).with( near( 42 ) ); - MOCK_EXPECT( f ).with( equal( 42 ) ); -} -//] -} - -namespace helpers_example_6 -{ -//[ helpers_example_6 -MOCK_CONSTRAINT_EXT( near, 2, ( expected, tolerance ), std::abs( actual - expected ) < tolerance ) // this is how mock::near is defined - -BOOST_AUTO_TEST_CASE( mock_constraint_2_arity ) -{ - MOCK_FUNCTOR( f, void( int ) ); - MOCK_EXPECT( f ).with( near( 42, 0.001 ) ); -} -//] -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2014 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define BOOST_AUTO_TEST_MAIN +#include +#include + +namespace class_example_1 +{ +//[ class_example_1 +MOCK_CLASS( mock_class ) +{}; + +BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_mock_class ) +{ + mock_class c; +} +//] +} + +namespace class_example_2 +{ +//[ class_example_2 +template< typename T > +MOCK_CLASS( mock_class ) +{}; + +BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_template_mock_class ) +{ + mock_class< int > c; +} +//] +} + +namespace class_example_3 +{ +//[ class_example_3 +struct base_class +{}; + +MOCK_BASE_CLASS( mock_class, base_class ) +{}; + +BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_derived_mock_class ) +{ + mock_class c; +} +//] +} + +namespace class_example_4 +{ +//[ class_example_4 +template< typename T > +struct base_class +{}; + +template< typename T > +MOCK_BASE_CLASS( mock_class, base_class< T > ) +{}; + +BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_template_derived_mock_class ) +{ + mock_class< int > c; +} +//] +} + +namespace class_example_5 +{ +//[ class_example_5 +struct name : mock::object // equivalent to using MOCK_CLASS +{}; +//] +} + +namespace class_example_6 +{ +//[ class_example_6 +template< typename T > +struct name : mock::object // equivalent to using MOCK_CLASS +{}; +//] +} + +namespace class_example_7 +{ +//[ class_example_7 +class base +{}; + +struct name : base, mock::object // equivalent to using MOCK_BASE_CLASS +{ + typedef base base_type; // this is required for the shortest form of MOCK_METHOD to work when not using MOCK_BASE_CLASS +}; +//] +} + +namespace class_example_8 +{ +//[ class_example_8 +template< typename T > +struct base +{}; + +template< typename T > +struct mock : base< T >, mock::object +{ + typedef typename base< T > base_type; +}; +//] +} + +namespace member_function_example_1 +{ +//[ member_function_example_1 +struct base_class +{ + virtual ~base_class() + {} + virtual void method( int ) = 0; +}; + +MOCK_BASE_CLASS( mock_class, base_class ) +{ + MOCK_METHOD( method, 1 ) // only possible when referring unambiguously to a base class method +}; +//] +} + +namespace member_function_example_2 +{ +//[ member_function_example_2 +struct base_class +{ + virtual ~base_class() + {} + virtual void method( int, const std::string& ) = 0; + virtual void method( float ) = 0; +}; + +MOCK_BASE_CLASS( mock_class, base_class ) +{ + MOCK_METHOD( method, 2, void( int, const std::string& ), identifier_1 ) // both the signature and identifier must be specified because of ambiguity due to overloading + MOCK_METHOD( method, 1, void( float ), identifier_2 ) // the identifier must differ from the previous one in order to fully disambiguate methods +}; +//] +} + +namespace member_function_example_3 +{ +//[ member_function_example_3 +struct base_class +{ + virtual ~base_class() + {} + virtual void method( float ) = 0; + virtual void method( float ) const = 0; +}; + +MOCK_BASE_CLASS( mock_class, base_class ) +{ + MOCK_METHOD( method, 1, void( float ) ) // this generates both const and non-const versions +}; +//] +} + +namespace member_function_example_4 +{ +//[ member_function_example_4 +struct base_class +{ + virtual ~base_class() + {} + virtual void method( float ) = 0; + virtual void method( float ) const = 0; +}; + +MOCK_BASE_CLASS( mock_class, base_class ) +{ + MOCK_CONST_METHOD( method, 1, void( float ), identifier_1 ) // this generates only the const version + MOCK_NON_CONST_METHOD( method, 1, void( float ), identifier_2 ) // this generates only the non-const version, with a different identifier +}; +//] +} + +namespace member_function_example_5 +{ +//[ member_function_example_5 +struct base_class +{ + virtual ~base_class() + {} + virtual void method( float ) = 0; +}; + +struct mock_class : base_class +{ + typedef base_class base_type; // this is required for MOCK_METHOD to work when not using MOCK_BASE_CLASS + + MOCK_METHOD( method, 1 ) +}; +//] +} + +namespace member_function_example_6 +{ +//[ member_function_example_6 +MOCK_CLASS( mock_class ) +{ + MOCK_NON_CONST_METHOD( operator=, 1, mock_class&( const mock_class& ), assignment ) // operators require a custom identifier +}; +//] +} + +namespace member_function_example_7 +{ +//[ member_function_example_7 +template< typename T > +MOCK_CLASS( mock_class ) +{ + MOCK_METHOD_TPL( method, 1, void( const T& ) ) // the _TPL variants must be used if the signature includes a template parameter of the class +}; +//] +} + +namespace member_function_example_8 +{ +//[ member_function_example_8 +MOCK_CLASS( mock_class ) +{ + MOCK_METHOD( method, 0, (std::map< int, int >()) ) // the signature must be surrounded with round parenthesis if the return type contains a comma +}; +//] +} + +#ifdef BOOST_MSVC +namespace member_function_example_9 +{ +//[ member_function_example_9 +MOCK_CLASS( mock_class ) +{ + MOCK_METHOD( __stdcall method, 0, void(), method ) // all parameters must be provided when specifying a different calling convention +}; +//] +} +#elif defined( BOOST_GCC ) +namespace member_function_example_10 +{ +//[ member_function_example_10 +MOCK_CLASS( mock_class ) +{ + MOCK_METHOD( __attribute((stdcall)) method, 0, void(), method ) // all parameters must be provided when specifying a different calling convention +}; +//] +} +#endif + +namespace static_member_function_example_1 +{ +//[ static_member_function_example_1 +MOCK_CLASS( mock_class ) +{ + MOCK_STATIC_METHOD( method, 1, float( int ) ) +}; +//] +} + +namespace static_member_function_example_2 +{ +//[ static_member_function_example_2 +template< typename T > +MOCK_CLASS( mock_class ) +{ + MOCK_STATIC_METHOD_TPL( method, 1, void( T ) ) +}; +//] +} + +#ifdef BOOST_MSVC +namespace static_member_function_example_3 +{ +//[ static_member_function_example_3 +MOCK_CLASS( mock_class ) +{ + MOCK_STATIC_METHOD( __stdcall method, 0, void(), method ) // all parameters must be provided when specifying a different calling convention +}; +//] +} +#elif defined( BOOST_GCC ) +namespace static_member_function_example_4 +{ +//[ static_member_function_example_4 +MOCK_CLASS( mock_class ) +{ + MOCK_STATIC_METHOD( __attribute((stdcall)) method, 0, void(), method ) // all parameters must be provided when specifying a different calling convention +}; +//] +} +#endif + +namespace constructor_example_1 +{ +//[ constructor_example_1 +MOCK_CLASS( mock_class ) +{ + MOCK_CONSTRUCTOR( mock_class, 2, ( int, const std::string& ), identifier ) +}; +//] +} + +namespace constructor_example_2 +{ +//[ constructor_example_2 +template< typename T > +MOCK_CLASS( mock_class ) +{ + MOCK_CONSTRUCTOR( mock_class, 2, ( int, const std::string& ), identifier ) + MOCK_CONSTRUCTOR_TPL( mock_class, 2, ( T, const std::string& ), identifier ) +}; +//] +} + +#ifdef BOOST_MSVC +namespace constructor_example_3 +{ +//[ constructor_example_3 +MOCK_CLASS( mock_class ) +{ + MOCK_CONSTRUCTOR( __stdcall mock_class, 0, (), constructor ) +}; +//] +} +#elif defined( BOOST_GCC ) +namespace constructor_example_4 +{ +//[ constructor_example_4 +MOCK_CLASS( mock_class ) +{ + MOCK_CONSTRUCTOR( __attribute((stdcall)) mock_class, 0, (), constructor ) +}; +//] +} +#endif + +namespace destructor_example_1 +{ +//[ destructor_example_1 +MOCK_CLASS( mock_class ) +{ + MOCK_DESTRUCTOR( ~mock_class, destructor ) +}; +//] +} + +#ifdef BOOST_MSVC +namespace destructor_example_2 +{ +//[ destructor_example_2 +MOCK_CLASS( mock_class ) +{ + MOCK_DESTRUCTOR( __stdcall ~mock_class, destructor ) +}; +//] +} +#elif defined( BOOST_GCC ) +namespace destructor_example_3 +{ +//[ destructor_example_3 +MOCK_CLASS( mock_class ) +{ + MOCK_DESTRUCTOR( __attribute((stdcall)) ~mock_class, destructor ) +}; +//] +} +#endif + +namespace conversion_operator_example_1 +{ +//[ conversion_operator_example_1 +MOCK_CLASS( mock_class ) +{ + MOCK_CONVERSION_OPERATOR( operator, int, conversion_to_int ) + MOCK_CONST_CONVERSION_OPERATOR( operator, const std::string&, conversion_to_string ) +}; +//] +} + +namespace conversion_operator_example_2 +{ +//[ conversion_operator_example_2 +template< typename T > +MOCK_CLASS( mock_class ) +{ + MOCK_CONVERSION_OPERATOR_TPL( operator, T, conversion_to_T ) // the _TPL variants must be used if the signature includes a template parameter of the class + MOCK_CONST_CONVERSION_OPERATOR( operator, const std::string&, const_conversion_to_string ) + MOCK_NON_CONST_CONVERSION_OPERATOR( operator, const std::string&, non_const_conversion_to_string ) +}; +//] +} + +#ifdef BOOST_MSVC +namespace conversion_operator_example_3 +{ +//[ conversion_operator_example_3 +MOCK_CLASS( mock_class ) +{ + MOCK_CONVERSION_OPERATOR( __stdcall operator, int, conversion_to_int ) +}; +//] +} +#elif defined( BOOST_GCC ) +namespace conversion_operator_example_4 +{ +//[ conversion_operator_example_4 +MOCK_CLASS( mock_class ) +{ + MOCK_CONVERSION_OPERATOR( __attribute((stdcall)) operator, int, conversion_to_int ) +}; +//] +} +#endif + +namespace function_example_1 +{ +//[ function_example_1 +MOCK_FUNCTION( f, 1, float( int ) ) + +BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_mock_function ) +{ + f( 3 ); +} +//] +} + +#ifdef BOOST_MSVC +namespace function_example_2 +{ +//[ function_example_2 +MOCK_FUNCTION( __stdcall f, 0, void(), f ) // all parameters must be provided when specifying a different calling convention +//] +} +#elif defined( BOOST_GCC ) +namespace function_example_3 +{ +//[ function_example_3 +MOCK_FUNCTION( __attribute((stdcall)) f, 0, void(), f ) // all parameters must be provided when specifying a different calling convention +//] +} +#endif + +namespace functor_example_1 +{ +//[ functor_example_1 +BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_mock_functor ) +{ + MOCK_FUNCTOR( f, void( int ) ); + f( 3 ); +} +//] +} + +namespace functor_example_2 +{ +//[ functor_example_2 +template< typename T > +struct mock_class +{ + MOCK_FUNCTOR_TPL( f, void( T ) ); +}; + +BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_mock_functor ) +{ + mock_class< int > c; + c.f( 3 ); +} +//] +} + +namespace expectation_example_1 +{ +//[ expectation_example_1 +MOCK_CLASS( mock_class ) +{ + MOCK_METHOD( method, 1, int( int ), method ) + MOCK_METHOD( method, 2, void( const std::string&, float ), method2 ) +}; + +BOOST_AUTO_TEST_CASE( demonstrates_configuring_mock_objects ) +{ + mock_class c; + mock::sequence s; + MOCK_EXPECT( c.method ).once().with( 0 ).in( s ).returns( 42 ); + MOCK_EXPECT( c.method2 ).never().with( "ok", mock::any ); + MOCK_EXPECT( c.method2 ).at_least( 2 ).in( s ).throws( std::runtime_error( "error !" ) ); +} +//] +} + +namespace invocation_example_1 +{ +//[ invocation_example_1 +MOCK_CLASS( mock_class ) +{ + MOCK_METHOD( method, 2, void( int, const std::string& ) ) +}; + +BOOST_AUTO_TEST_CASE( demonstrates_setting_up_invocations_on_a_mock_method ) +{ + mock_class c; + MOCK_EXPECT( c.method ).once(); // can only be called once + MOCK_EXPECT( c.method ); // can be called an unlimited number of times +} +//] +} + +namespace invocation_example_2 +{ +//[ invocation_example_2 +BOOST_AUTO_TEST_CASE( demonstrates_setting_up_an_invocation_on_a_mock_functor ) +{ + MOCK_FUNCTOR( f, void( int, const std::string& ) ); + MOCK_EXPECT( f ).once(); +} +//] +} + +namespace invocation_example_3 +{ +//[ invocation_example_3 +MOCK_FUNCTION( f, 1, void( int ) ) + +BOOST_AUTO_TEST_CASE( demonstrates_setting_up_an_invocation_on_a_mock_function ) +{ + MOCK_EXPECT( f ).once(); +} +//] +} + +namespace invocation_example_4 +{ +//[ invocation_example_4 +MOCK_CLASS( mock_class ) +{ + MOCK_STATIC_METHOD( method, 1, void( int ) ) +}; + +BOOST_AUTO_TEST_CASE( demonstrates_setting_up_an_invocation_on_a_mock_static_method ) +{ + mock_class c; + MOCK_EXPECT( c.method ).once(); + MOCK_EXPECT( mock_class::method ).once(); // does the same +} +//] +} + +namespace constraints_example_1 +{ +//[ constraints_example_1 +MOCK_CLASS( mock_class ) +{ + MOCK_METHOD( method, 2, void( int, const std::string& ) ) +}; + +BOOST_AUTO_TEST_CASE( demonstrates_adding_builtin_constraints ) +{ + mock_class c; + MOCK_EXPECT( c.method ).with( mock::equal( 3 ), mock::equal( "some string" ) ); + MOCK_EXPECT( c.method ).with( 3, "some string" ); // equivalent to the previous one using short-cuts +} +//] +} + +namespace constraints_example_2 +{ +//[ constraints_example_2 +MOCK_CLASS( mock_class ) +{ + MOCK_METHOD( method, 1, void( int ) ) +}; + +bool custom_constraint( int actual ) +{ + return actual == 42; +} + +BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_a_free_function ) +{ + mock_class c; + MOCK_EXPECT( c.method ).with( &custom_constraint ); +} +//] +} + +namespace constraints_example_3 +{ +//[ constraints_example_3 +MOCK_CLASS( mock_class ) +{ + MOCK_METHOD( method, 1, void( int ) ) +}; + +bool custom_constraint( int expected, int actual ) +{ + return expected == actual; +} + +BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_a_standard_library_functor ) +{ + mock_class c; + MOCK_EXPECT( c.method ).with( std::bind1st( std::ptr_fun( &custom_constraint ), 42 ) ); // std::ptr_fun creates an std::unary_function +} +//] +} + +namespace constraints_example_4 +{ +//[ constraints_example_4 +MOCK_CLASS( mock_class ) +{ + MOCK_METHOD( method, 1, void( int ) ) +}; + +bool custom_constraint( int expected, int actual ) +{ + return expected == actual; +} + +BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_boost_bind ) +{ + mock_class c; + MOCK_EXPECT( c.method ).with( boost::bind( &custom_constraint, 42, _1 ) ); +} +//] +} + +#ifndef BOOST_MSVC // this produces an ICE with all versions of MSVC + +#include + +namespace constraints_example_5 +{ +//[ constraints_example_5 +MOCK_CLASS( mock_class ) +{ + MOCK_METHOD( method, 1, void( int ) ) +}; + +BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_boost_lambda ) +{ + mock_class c; + MOCK_EXPECT( c.method ).with( boost::lambda::_1 == 42 ); +} +//] +} + +#endif // BOOST_MSVC + +#include + +namespace constraints_example_6 +{ +//[ constraints_example_6 +MOCK_CLASS( mock_class ) +{ + MOCK_METHOD( method, 1, void( int ) ) +}; + +BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_boost_phoenix ) +{ + mock_class c; + MOCK_EXPECT( c.method ).with( boost::phoenix::arg_names::arg1 == 42 ); + MOCK_EXPECT( c.method ).with( boost::phoenix::arg_names::_1 == 42 ); +} +//] +} + +#ifdef MOCK_LAMBDAS + +namespace constraints_example_7 +{ +//[ constraints_example_7 +MOCK_CLASS( mock_class ) +{ + MOCK_METHOD( method, 1, void( int ) ) +}; + +BOOST_AUTO_TEST_CASE( demonstrates_adding_a_constraint_with_cxx11_lambda ) +{ + mock_class c; + MOCK_EXPECT( c.method ).with( []( int actual ) { return 42 == actual; } ); +} +//] +} + +#endif + +namespace constraints_example_8 +{ +//[ constraints_example_8 +MOCK_CLASS( mock_class ) +{ + MOCK_METHOD( method, 2, void( int, const std::string& ) ) +}; + +BOOST_AUTO_TEST_CASE( demonstrates_combining_constraints ) +{ + mock_class c; + MOCK_EXPECT( c.method ).with( mock::less( 4 ) && mock::greater( 2 ), ! mock::equal( "" ) ); +} +//] +} + +namespace sequence_example_1 +{ +//[ sequence_example_1 +MOCK_CLASS( mock_class_1 ) +{ + MOCK_METHOD( method_1, 0, void() ) +}; + +MOCK_CLASS( mock_class_2 ) +{ + MOCK_METHOD( method_2, 0, void() ) +}; + +MOCK_CLASS( mock_class_3 ) +{ + MOCK_METHOD( method_3, 0, void() ) +}; + +BOOST_AUTO_TEST_CASE( demonstrates_enforcing_several_expectation_orders ) +{ + mock_class_1 c_1; + mock_class_2 c_2; + mock_class_3 c_3; + mock::sequence s_1, s_2; + MOCK_EXPECT( c_1.method_1 ).in( s_1 ); + MOCK_EXPECT( c_2.method_2 ).in( s_2 ); // c_1.method_1 and c_2.method_2 are in different sequences and can be called in any order + MOCK_EXPECT( c_3.method_3 ).in( s_1, s_2 ); // c_3.method_3 must be called after both c_1.method_1 and c_2.method_2 +} +//] +} + +namespace action_example_1 +{ +//[ action_example_1 +MOCK_CLASS( mock_class ) +{ + MOCK_METHOD( method, 1, int( int ) ) +}; + +int function( int i ) +{ + return i; +} + +BOOST_AUTO_TEST_CASE( demonstrates_configuring_actions ) +{ + mock_class c; + MOCK_EXPECT( c.method ).returns( 42 ); + MOCK_EXPECT( c.method ).moves( 42 ); // returns by moving the value + MOCK_EXPECT( c.method ).throws( std::runtime_error( "error !" ) ); + MOCK_EXPECT( c.method ).calls( &function ); // forwards 'method' parameter to 'function' + MOCK_EXPECT( c.method ).calls( boost::bind( &function, 42 ) ); // drops 'method' parameter and binds 42 as parameter to 'function' + MOCK_EXPECT( c.method ).calls( []( int i ) { return i; } ); // uses a C++11 lambda +} +//] +} + +namespace verification_example_1 +{ +//[ verification_example_1 +MOCK_CLASS( mock_class ) +{ + MOCK_METHOD( method, 0, void() ) +}; + +BOOST_AUTO_TEST_CASE( demonstrates_verifying_a_mock_method ) +{ + mock_class c; + MOCK_VERIFY( c.method ); // logs an error and returns false if not all expectations are met + mock::verify( c ); // verifies all expectations set for all methods of 'c' + mock::verify(); // verifies all existing mock objects, functions and functors +} +//] +} + +namespace verification_example_2 +{ +//[ verification_example_2 +BOOST_AUTO_TEST_CASE( demonstrates_verifying_a_mock_functor ) +{ + MOCK_FUNCTOR( f, void( int ) ); + MOCK_VERIFY( f ); // logs an error and returns false if not all expectations are met + mock::verify( f ); // behaves the same as MOCK_VERIFY + mock::verify(); // verifies all existing mock objects, functions and functors +} +//] +} + +namespace verification_example_3 +{ +//[ verification_example_3 +MOCK_FUNCTION( f, 1, void( int ) ) + +BOOST_AUTO_TEST_CASE( demonstrates_verifying_a_mock_function ) +{ + MOCK_VERIFY( f ); // logs an error and returns false if not all expectations are met + mock::verify(); // verifies all existing mock objects, functions and functors +} +//] +} + +namespace verification_example_4 +{ +//[ verification_example_4 +MOCK_CLASS( mock_class ) +{ + MOCK_STATIC_METHOD( method, 0, void() ) +}; + +BOOST_AUTO_TEST_CASE( demonstrates_verifying_a_static_mock_method ) +{ + mock_class c; + MOCK_VERIFY( c.method ); // logs an error and returns false if not all expectations are met + MOCK_VERIFY( mock_class::method ); // does the same + mock::verify(); // verifies all existing mock objects, functions and functors +} +//] +} + +namespace reset_example_1 +{ +//[ reset_example_1 +MOCK_CLASS( mock_class ) +{ + MOCK_METHOD( method, 0, void() ) +}; + +BOOST_AUTO_TEST_CASE( demonstrates_resetting_a_mock_method ) +{ + mock_class c; + MOCK_RESET( c.method ); // resets all expectations set for 'c.method' + mock::reset( c ); // resets all expectations set on 'c' + mock::reset(); // resets all existing mock objects, functions and functors +} +//] +} + +namespace reset_example_2 +{ +//[ reset_example_2 +BOOST_AUTO_TEST_CASE( demonstrates_resetting_a_mock_functor ) +{ + MOCK_FUNCTOR( f, void( int ) ); + MOCK_RESET( f ); // resets all expectations set for 'f' + mock::reset( f ); // behaves the same as MOCK_RESET + mock::reset(); // resets all existing mock objects, functions and functors +} +//] +} + +namespace reset_example_3 +{ +//[ reset_example_3 +MOCK_FUNCTION( f, 1, void( int ) ) + +BOOST_AUTO_TEST_CASE( demonstrates_resetting_a_mock_function ) +{ + MOCK_RESET( f ); // resets all expectations set for 'f' + mock::reset(); // resets all existing mock objects, functions and functors +} +//] +} + +namespace reset_example_4 +{ +//[ reset_example_4 +MOCK_CLASS( mock_class ) +{ + MOCK_STATIC_METHOD( method, 0, void() ) +}; + +BOOST_AUTO_TEST_CASE( demonstrates_resetting_a_static_mock_method ) +{ + mock_class c; + MOCK_RESET( c.method ); // resets all expectations set for 'c::method' + MOCK_RESET( mock_class::method ); // resets all expectations set for 'c::method' + mock::reset(); // resets all existing mock objects, functions and functors +} +//] +} + +namespace helpers_example_1 +{ +//[ helpers_example_1 +MOCK_CONSTRAINT( any, true ) // this is how mock::any could be defined +MOCK_CONSTRAINT( forty_two, actual == 42 ) // this defines a 'forty_two' constraint + +BOOST_AUTO_TEST_CASE( mock_constraint_0_arity ) +{ + MOCK_FUNCTOR( f, void( int ) ); + MOCK_EXPECT( f ).with( forty_two ); + MOCK_EXPECT( f ).with( any ); +} +//] +} + +namespace helpers_example_2 +{ +//[ helpers_example_2 +MOCK_CONSTRAINT( equal, expected, actual == expected ) // this is how mock::equal could be defined +MOCK_CONSTRAINT( near, expected, std::abs( actual - expected ) < 0.01 ) // this defines a 'near' constraint which can be used as 'near( 42 )' + +BOOST_AUTO_TEST_CASE( mock_constraint_1_arity ) +{ + MOCK_FUNCTOR( f, void( int ) ); + MOCK_EXPECT( f ).with( near( 42 ) ); + MOCK_EXPECT( f ).with( equal( 42 ) ); +} +//] +} + +namespace helpers_example_3 +{ +//[ helpers_example_3 +MOCK_CONSTRAINT( near, expected, tolerance, std::abs( actual - expected ) < tolerance ) // this is how mock::near could be defined + +BOOST_AUTO_TEST_CASE( mock_constraint_2_arity ) +{ + MOCK_FUNCTOR( f, void( int ) ); + MOCK_EXPECT( f ).with( near( 42, 0.001 ) ); +} +//] +} + +namespace helpers_example_4 +{ +//[ helpers_example_4 +MOCK_CONSTRAINT_EXT( any, 0,, true ) // this is (almost) how mock::any is defined +MOCK_CONSTRAINT_EXT( forty_two, 0,, actual == 42 ) // this defines a 'forty_two' constraint + +BOOST_AUTO_TEST_CASE( mock_constraint_0_arity ) +{ + MOCK_FUNCTOR( f, void( int ) ); + MOCK_EXPECT( f ).with( forty_two ); + MOCK_EXPECT( f ).with( any ); +} +//] +} + +namespace helpers_example_5 +{ +//[ helpers_example_5 +MOCK_CONSTRAINT_EXT( equal, 1, ( expected ), actual == expected ) // this is how mock::equal is defined +MOCK_CONSTRAINT_EXT( near, 1, ( expected ), std::abs( actual - expected ) < 0.01 ) // this defines a 'near' constraint which can be used as 'near( 42 )' + +BOOST_AUTO_TEST_CASE( mock_constraint_1_arity ) +{ + MOCK_FUNCTOR( f, void( int ) ); + MOCK_EXPECT( f ).with( near( 42 ) ); + MOCK_EXPECT( f ).with( equal( 42 ) ); +} +//] +} + +namespace helpers_example_6 +{ +//[ helpers_example_6 +MOCK_CONSTRAINT_EXT( near, 2, ( expected, tolerance ), std::abs( actual - expected ) < tolerance ) // this is how mock::near is defined + +BOOST_AUTO_TEST_CASE( mock_constraint_2_arity ) +{ + MOCK_FUNCTOR( f, void( int ) ); + MOCK_EXPECT( f ).with( near( 42, 0.001 ) ); +} +//] +} diff --git a/build/boost/doc/example/view.hpp b/doc/example/view.hpp similarity index 100% rename from build/boost/doc/example/view.hpp rename to doc/example/view.hpp diff --git a/build/boost/doc/getting_started.qbk b/doc/getting_started.qbk similarity index 100% rename from build/boost/doc/getting_started.qbk rename to doc/getting_started.qbk diff --git a/doc/html/.gitignore b/doc/html/.gitignore new file mode 100644 index 0000000..6660434 --- /dev/null +++ b/doc/html/.gitignore @@ -0,0 +1,2 @@ +*.html +standalone_HTML.manifest diff --git a/build/boost/doc/images/boost.png b/doc/html/images/boost.png similarity index 100% rename from build/boost/doc/images/boost.png rename to doc/html/images/boost.png diff --git a/build/boost/doc/limitations.qbk b/doc/limitations.qbk similarity index 100% rename from build/boost/doc/limitations.qbk rename to doc/limitations.qbk diff --git a/build/boost/doc/mock.qbk b/doc/mock.qbk similarity index 100% rename from build/boost/doc/mock.qbk rename to doc/mock.qbk diff --git a/build/boost/doc/motivation.qbk b/doc/motivation.qbk similarity index 100% rename from build/boost/doc/motivation.qbk rename to doc/motivation.qbk diff --git a/build/boost/doc/patterns.qbk b/doc/patterns.qbk similarity index 100% rename from build/boost/doc/patterns.qbk rename to doc/patterns.qbk diff --git a/build/boost/doc/rationale.qbk b/doc/rationale.qbk similarity index 100% rename from build/boost/doc/rationale.qbk rename to doc/rationale.qbk diff --git a/build/boost/doc/reference.qbk b/doc/reference.qbk similarity index 100% rename from build/boost/doc/reference.qbk rename to doc/reference.qbk diff --git a/turtle/config.hpp b/include/turtle/config.hpp similarity index 96% rename from turtle/config.hpp rename to include/turtle/config.hpp index a09c73a..54000f6 100644 --- a/turtle/config.hpp +++ b/include/turtle/config.hpp @@ -1,85 +1,85 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2009 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// boost-no-inspect - -#ifndef MOCK_CONFIG_HPP_INCLUDED -#define MOCK_CONFIG_HPP_INCLUDED - -#include -#include -#include - -#ifndef MOCK_ERROR_POLICY -# define MOCK_ERROR_POLICY mock::error -# define MOCK_USE_BOOST_TEST -#endif - -#ifndef MOCK_MAX_ARGS -# define MOCK_MAX_ARGS 9 -#endif - -#ifndef MOCK_MAX_SEQUENCES -# define MOCK_MAX_SEQUENCES 10 -#endif - -#ifndef BOOST_FUNCTION_MAX_ARGS -# define BOOST_FUNCTION_MAX_ARGS MOCK_MAX_ARGS -#elif BOOST_PP_LESS(BOOST_FUNCTION_MAX_ARGS, MOCK_MAX_ARGS) -# error BOOST_FUNCTION_MAX_ARGS must be set to MOCK_MAX_ARGS or higher -#endif - -#ifndef BOOST_FT_MAX_ARITY -# define BOOST_FT_MAX_ARITY BOOST_PP_INC(MOCK_MAX_ARGS) -#elif BOOST_PP_LESS_EQUAL(BOOST_FT_MAX_ARITY, MOCK_MAX_ARGS) -# error BOOST_FT_MAX_ARITY must be set to MOCK_MAX_ARGS + 1 or higher -#endif - -#if !defined(BOOST_NO_CXX11_NULLPTR) && !defined(BOOST_NO_NULLPTR) -# ifndef MOCK_NO_NULLPTR -# define MOCK_NULLPTR -# endif -#endif - -#if !defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_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 - -#if !defined(BOOST_NO_CXX11_SMART_PTR) && !defined(BOOST_NO_SMART_PTR) -# ifndef MOCK_NO_SMART_PTR -# define MOCK_SMART_PTR -# endif -#endif - -#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_RVALUE_REFERENCES) -# ifndef MOCK_NO_RVALUE_REFERENCES -# define MOCK_RVALUE_REFERENCES -# endif -#endif - -#if !defined(BOOST_NO_CXX11_HDR_MUTEX) && !defined(BOOST_NO_0X_HDR_MUTEX) -# ifndef MOCK_NO_HDR_MUTEX -# define MOCK_HDR_MUTEX -# endif -#endif - -#if !defined(BOOST_NO_CXX11_LAMBDAS) && !defined(BOOST_NO_LAMBDAS) -# ifndef MOCK_NO_LAMBDAS -# define MOCK_LAMBDAS -# endif -#endif - -#endif // MOCK_CONFIG_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2009 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// boost-no-inspect + +#ifndef MOCK_CONFIG_HPP_INCLUDED +#define MOCK_CONFIG_HPP_INCLUDED + +#include +#include +#include + +#ifndef MOCK_ERROR_POLICY +# define MOCK_ERROR_POLICY mock::error +# define MOCK_USE_BOOST_TEST +#endif + +#ifndef MOCK_MAX_ARGS +# define MOCK_MAX_ARGS 9 +#endif + +#ifndef MOCK_MAX_SEQUENCES +# define MOCK_MAX_SEQUENCES 10 +#endif + +#ifndef BOOST_FUNCTION_MAX_ARGS +# define BOOST_FUNCTION_MAX_ARGS MOCK_MAX_ARGS +#elif BOOST_PP_LESS(BOOST_FUNCTION_MAX_ARGS, MOCK_MAX_ARGS) +# error BOOST_FUNCTION_MAX_ARGS must be set to MOCK_MAX_ARGS or higher +#endif + +#ifndef BOOST_FT_MAX_ARITY +# define BOOST_FT_MAX_ARITY BOOST_PP_INC(MOCK_MAX_ARGS) +#elif BOOST_PP_LESS_EQUAL(BOOST_FT_MAX_ARITY, MOCK_MAX_ARGS) +# error BOOST_FT_MAX_ARITY must be set to MOCK_MAX_ARGS + 1 or higher +#endif + +#if !defined(BOOST_NO_CXX11_NULLPTR) && !defined(BOOST_NO_NULLPTR) +# ifndef MOCK_NO_NULLPTR +# define MOCK_NULLPTR +# endif +#endif + +#if !defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_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 + +#if !defined(BOOST_NO_CXX11_SMART_PTR) && !defined(BOOST_NO_SMART_PTR) +# ifndef MOCK_NO_SMART_PTR +# define MOCK_SMART_PTR +# endif +#endif + +#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_RVALUE_REFERENCES) +# ifndef MOCK_NO_RVALUE_REFERENCES +# define MOCK_RVALUE_REFERENCES +# endif +#endif + +#if !defined(BOOST_NO_CXX11_HDR_MUTEX) && !defined(BOOST_NO_0X_HDR_MUTEX) +# ifndef MOCK_NO_HDR_MUTEX +# define MOCK_HDR_MUTEX +# endif +#endif + +#if !defined(BOOST_NO_CXX11_LAMBDAS) && !defined(BOOST_NO_LAMBDAS) +# ifndef MOCK_NO_LAMBDAS +# define MOCK_LAMBDAS +# endif +#endif + +#endif // MOCK_CONFIG_HPP_INCLUDED diff --git a/turtle/constraint.hpp b/include/turtle/constraint.hpp similarity index 96% rename from turtle/constraint.hpp rename to include/turtle/constraint.hpp index b30a469..32329c2 100644 --- a/turtle/constraint.hpp +++ b/include/turtle/constraint.hpp @@ -1,247 +1,247 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_CONSTRAINT_HPP_INCLUDED -#define MOCK_CONSTRAINT_HPP_INCLUDED - -#include "config.hpp" -#include "log.hpp" -#include -#include -#include -#include -#include -#include -#include -#include - -namespace mock -{ - template< typename Constraint > - struct constraint - { - constraint() - {} - constraint( const Constraint& c ) - : c_( c ) - {} - Constraint c_; - }; - -namespace detail -{ - template< typename Lhs, typename Rhs > - class and_ - { - public: - and_( const Lhs& lhs, const Rhs& rhs ) - : lhs_( lhs ) - , rhs_( rhs ) - {} - template< typename Actual > - bool operator()( const Actual& actual ) const - { - return lhs_( actual ) && rhs_( actual ); - } - friend std::ostream& operator<<( std::ostream& s, const and_& a ) - { - return s << "( " << mock::format( a.lhs_ ) - << " && " << mock::format( a.rhs_ ) << " )"; - } - private: - Lhs lhs_; - Rhs rhs_; - }; - - template< typename Lhs, typename Rhs > - class or_ - { - public: - or_( const Lhs& lhs, const Rhs& rhs ) - : lhs_( lhs ) - , rhs_( rhs ) - {} - template< typename Actual > - bool operator()( const Actual& actual ) const - { - return lhs_( actual ) || rhs_( actual ); - } - friend std::ostream& operator<<( std::ostream& s, const or_& o ) - { - return s << "( " << mock::format( o.lhs_ ) - << " || " << mock::format( o.rhs_ )<< " )"; - } - private: - Lhs lhs_; - Rhs rhs_; - }; - - template< typename Constraint > - class not_ - { - public: - explicit not_( const Constraint& c ) - : c_( c ) - {} - template< typename Actual > - bool operator()( const Actual& actual ) const - { - return ! c_( actual ); - } - friend std::ostream& operator<<( std::ostream& s, const not_& n ) - { - return s << "! " << mock::format( n.c_ ); - } - private: - Constraint c_; - }; -} - - template< typename Lhs, typename Rhs > - const constraint< detail::or_< Lhs, Rhs > > - operator||( const constraint< Lhs >& lhs, - const constraint< Rhs >& rhs ) - { - return detail::or_< Lhs, Rhs >( lhs.c_, rhs.c_ ); - } - - template< typename Lhs, typename Rhs > - const constraint< detail::and_< Lhs, Rhs > > - operator&&( const constraint< Lhs >& lhs, - const constraint< Rhs >& rhs ) - { - return detail::and_< Lhs, Rhs >( lhs.c_, rhs.c_ ); - } - - template< typename Constraint > - const constraint< detail::not_< Constraint > > - operator!( const constraint< Constraint >& c ) - { - return detail::not_< Constraint >( c.c_ ); - } -} // mock - -#define MOCK_UNARY_CONSTRAINT(Name, n, Args, Expr) \ - namespace detail \ - { \ - struct Name \ - { \ - template< typename Actual > \ - bool operator()( const Actual& actual ) const \ - { \ - return Expr; \ - } \ - friend std::ostream& operator<<( std::ostream& s, const Name& ) \ - { \ - return s << BOOST_STRINGIZE(Name); \ - } \ - }; \ - } \ - const mock::constraint< detail::Name > Name; - -#define MOCK_CONSTRAINT_ASSIGN(z, n, d) \ - expected##n( e##n ) - -#define MOCK_CONSTRAINT_UNWRAP_REF(z, n, d) \ - boost::unwrap_ref( expected##n ) - -#define MOCK_CONSTRAINT_FORMAT(z, n, d) \ - BOOST_PP_IF(n, << ", " <<,) mock::format( c.expected##n ) - -#define MOCK_CONSTRAINT_MEMBER(z, n, d) \ - Expected_##n expected##n; - -#define MOCK_CONSTRAINT_CREF_PARAM(z, n, Args) \ - typename \ - boost::unwrap_reference< Expected_##n >::type \ - BOOST_PP_ARRAY_ELEM(n, Args) - -#define MOCK_CONSTRAINT_PARAM(z, n, Args) \ - T##n BOOST_PP_ARRAY_ELEM(n, Args) - -#define MOCK_NARY_CONSTRAINT(Name, n, Args, Expr) \ - namespace detail \ - { \ - template< BOOST_PP_ENUM_PARAMS(n, typename Expected_) > \ - struct Name \ - { \ - explicit Name( \ - BOOST_PP_ENUM_BINARY_PARAMS(n, const Expected_, & e) ) \ - : BOOST_PP_ENUM(n, MOCK_CONSTRAINT_ASSIGN, _) \ - {} \ - template< typename Actual > \ - bool operator()( const Actual& actual ) const \ - { \ - return test( actual, \ - BOOST_PP_ENUM(n, MOCK_CONSTRAINT_UNWRAP_REF, _) ); \ - } \ - template< typename Actual > \ - bool test( const Actual& actual, \ - BOOST_PP_ENUM(n, \ - MOCK_CONSTRAINT_CREF_PARAM, (n, Args)) ) const \ - { \ - return Expr; \ - } \ - friend std::ostream& operator<<( std::ostream& s, const Name& c ) \ - { \ - return s << BOOST_STRINGIZE(Name) << "( " \ - << BOOST_PP_REPEAT(n, MOCK_CONSTRAINT_FORMAT, _) \ - << " )"; \ - } \ - BOOST_PP_REPEAT(n, MOCK_CONSTRAINT_MEMBER, _) \ - }; \ - } \ - template< BOOST_PP_ENUM_PARAMS(n, typename T) > \ - mock::constraint< \ - detail::Name< BOOST_PP_ENUM_PARAMS(n, T) > \ - > Name( BOOST_PP_ENUM(n, MOCK_CONSTRAINT_PARAM, (n, Args)) ) \ - { \ - return detail::Name< BOOST_PP_ENUM_PARAMS(n, T) > Args; \ - } - -#define MOCK_CONSTRAINT_EXT(Name, n, Args, Expr) \ - BOOST_PP_IF(n, \ - MOCK_NARY_CONSTRAINT, \ - MOCK_UNARY_CONSTRAINT)(Name, n, Args, Expr) - -#ifdef MOCK_VARIADIC_MACROS - -#if BOOST_MSVC -# define MOCK_VARIADIC_SIZE(...) \ - BOOST_PP_CAT(MOCK_VARIADIC_SIZE_I(__VA_ARGS__, \ - 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, \ - 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, \ - 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,),) -#else // BOOST_MSVC -# define MOCK_VARIADIC_SIZE(...) \ - MOCK_VARIADIC_SIZE_I(__VA_ARGS__, \ - 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, \ - 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, \ - 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,) -#endif // BOOST_MSVC -#define MOCK_VARIADIC_SIZE_I( \ - e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, \ - e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, \ - e25, e26, e27, e28, e29, e30, e31, size, ...) size - -#define MOCK_CONSTRAINT_AUX_AUX(Name, n, Array) \ - MOCK_CONSTRAINT_EXT( \ - Name, n, \ - BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_BACK(Array)), \ - BOOST_PP_ARRAY_ELEM(n, Array)) - -#define MOCK_CONSTRAINT_AUX(Name, Size, Tuple) \ - MOCK_CONSTRAINT_AUX_AUX(Name, BOOST_PP_DEC(Size), (Size,Tuple)) - -#define MOCK_CONSTRAINT(Name, ...) \ - MOCK_CONSTRAINT_AUX( \ - Name, MOCK_VARIADIC_SIZE(__VA_ARGS__), (__VA_ARGS__)) - -#endif // MOCK_VARIADIC_MACROS - -#endif // MOCK_CONSTRAINT_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_CONSTRAINT_HPP_INCLUDED +#define MOCK_CONSTRAINT_HPP_INCLUDED + +#include "config.hpp" +#include "log.hpp" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace mock +{ + template< typename Constraint > + struct constraint + { + constraint() + {} + constraint( const Constraint& c ) + : c_( c ) + {} + Constraint c_; + }; + +namespace detail +{ + template< typename Lhs, typename Rhs > + class and_ + { + public: + and_( const Lhs& lhs, const Rhs& rhs ) + : lhs_( lhs ) + , rhs_( rhs ) + {} + template< typename Actual > + bool operator()( const Actual& actual ) const + { + return lhs_( actual ) && rhs_( actual ); + } + friend std::ostream& operator<<( std::ostream& s, const and_& a ) + { + return s << "( " << mock::format( a.lhs_ ) + << " && " << mock::format( a.rhs_ ) << " )"; + } + private: + Lhs lhs_; + Rhs rhs_; + }; + + template< typename Lhs, typename Rhs > + class or_ + { + public: + or_( const Lhs& lhs, const Rhs& rhs ) + : lhs_( lhs ) + , rhs_( rhs ) + {} + template< typename Actual > + bool operator()( const Actual& actual ) const + { + return lhs_( actual ) || rhs_( actual ); + } + friend std::ostream& operator<<( std::ostream& s, const or_& o ) + { + return s << "( " << mock::format( o.lhs_ ) + << " || " << mock::format( o.rhs_ )<< " )"; + } + private: + Lhs lhs_; + Rhs rhs_; + }; + + template< typename Constraint > + class not_ + { + public: + explicit not_( const Constraint& c ) + : c_( c ) + {} + template< typename Actual > + bool operator()( const Actual& actual ) const + { + return ! c_( actual ); + } + friend std::ostream& operator<<( std::ostream& s, const not_& n ) + { + return s << "! " << mock::format( n.c_ ); + } + private: + Constraint c_; + }; +} + + template< typename Lhs, typename Rhs > + const constraint< detail::or_< Lhs, Rhs > > + operator||( const constraint< Lhs >& lhs, + const constraint< Rhs >& rhs ) + { + return detail::or_< Lhs, Rhs >( lhs.c_, rhs.c_ ); + } + + template< typename Lhs, typename Rhs > + const constraint< detail::and_< Lhs, Rhs > > + operator&&( const constraint< Lhs >& lhs, + const constraint< Rhs >& rhs ) + { + return detail::and_< Lhs, Rhs >( lhs.c_, rhs.c_ ); + } + + template< typename Constraint > + const constraint< detail::not_< Constraint > > + operator!( const constraint< Constraint >& c ) + { + return detail::not_< Constraint >( c.c_ ); + } +} // mock + +#define MOCK_UNARY_CONSTRAINT(Name, n, Args, Expr) \ + namespace detail \ + { \ + struct Name \ + { \ + template< typename Actual > \ + bool operator()( const Actual& actual ) const \ + { \ + return Expr; \ + } \ + friend std::ostream& operator<<( std::ostream& s, const Name& ) \ + { \ + return s << BOOST_STRINGIZE(Name); \ + } \ + }; \ + } \ + const mock::constraint< detail::Name > Name; + +#define MOCK_CONSTRAINT_ASSIGN(z, n, d) \ + expected##n( e##n ) + +#define MOCK_CONSTRAINT_UNWRAP_REF(z, n, d) \ + boost::unwrap_ref( expected##n ) + +#define MOCK_CONSTRAINT_FORMAT(z, n, d) \ + BOOST_PP_IF(n, << ", " <<,) mock::format( c.expected##n ) + +#define MOCK_CONSTRAINT_MEMBER(z, n, d) \ + Expected_##n expected##n; + +#define MOCK_CONSTRAINT_CREF_PARAM(z, n, Args) \ + typename \ + boost::unwrap_reference< Expected_##n >::type \ + BOOST_PP_ARRAY_ELEM(n, Args) + +#define MOCK_CONSTRAINT_PARAM(z, n, Args) \ + T##n BOOST_PP_ARRAY_ELEM(n, Args) + +#define MOCK_NARY_CONSTRAINT(Name, n, Args, Expr) \ + namespace detail \ + { \ + template< BOOST_PP_ENUM_PARAMS(n, typename Expected_) > \ + struct Name \ + { \ + explicit Name( \ + BOOST_PP_ENUM_BINARY_PARAMS(n, const Expected_, & e) ) \ + : BOOST_PP_ENUM(n, MOCK_CONSTRAINT_ASSIGN, _) \ + {} \ + template< typename Actual > \ + bool operator()( const Actual& actual ) const \ + { \ + return test( actual, \ + BOOST_PP_ENUM(n, MOCK_CONSTRAINT_UNWRAP_REF, _) ); \ + } \ + template< typename Actual > \ + bool test( const Actual& actual, \ + BOOST_PP_ENUM(n, \ + MOCK_CONSTRAINT_CREF_PARAM, (n, Args)) ) const \ + { \ + return Expr; \ + } \ + friend std::ostream& operator<<( std::ostream& s, const Name& c ) \ + { \ + return s << BOOST_STRINGIZE(Name) << "( " \ + << BOOST_PP_REPEAT(n, MOCK_CONSTRAINT_FORMAT, _) \ + << " )"; \ + } \ + BOOST_PP_REPEAT(n, MOCK_CONSTRAINT_MEMBER, _) \ + }; \ + } \ + template< BOOST_PP_ENUM_PARAMS(n, typename T) > \ + mock::constraint< \ + detail::Name< BOOST_PP_ENUM_PARAMS(n, T) > \ + > Name( BOOST_PP_ENUM(n, MOCK_CONSTRAINT_PARAM, (n, Args)) ) \ + { \ + return detail::Name< BOOST_PP_ENUM_PARAMS(n, T) > Args; \ + } + +#define MOCK_CONSTRAINT_EXT(Name, n, Args, Expr) \ + BOOST_PP_IF(n, \ + MOCK_NARY_CONSTRAINT, \ + MOCK_UNARY_CONSTRAINT)(Name, n, Args, Expr) + +#ifdef MOCK_VARIADIC_MACROS + +#if BOOST_MSVC +# define MOCK_VARIADIC_SIZE(...) \ + BOOST_PP_CAT(MOCK_VARIADIC_SIZE_I(__VA_ARGS__, \ + 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, \ + 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, \ + 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,),) +#else // BOOST_MSVC +# define MOCK_VARIADIC_SIZE(...) \ + MOCK_VARIADIC_SIZE_I(__VA_ARGS__, \ + 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, \ + 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, \ + 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,) +#endif // BOOST_MSVC +#define MOCK_VARIADIC_SIZE_I( \ + e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, \ + e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, \ + e25, e26, e27, e28, e29, e30, e31, size, ...) size + +#define MOCK_CONSTRAINT_AUX_AUX(Name, n, Array) \ + MOCK_CONSTRAINT_EXT( \ + Name, n, \ + BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_BACK(Array)), \ + BOOST_PP_ARRAY_ELEM(n, Array)) + +#define MOCK_CONSTRAINT_AUX(Name, Size, Tuple) \ + MOCK_CONSTRAINT_AUX_AUX(Name, BOOST_PP_DEC(Size), (Size,Tuple)) + +#define MOCK_CONSTRAINT(Name, ...) \ + MOCK_CONSTRAINT_AUX( \ + Name, MOCK_VARIADIC_SIZE(__VA_ARGS__), (__VA_ARGS__)) + +#endif // MOCK_VARIADIC_MACROS + +#endif // MOCK_CONSTRAINT_HPP_INCLUDED diff --git a/turtle/constraints.hpp b/include/turtle/constraints.hpp similarity index 96% rename from turtle/constraints.hpp rename to include/turtle/constraints.hpp index f74eeca..bc7ea28 100644 --- a/turtle/constraints.hpp +++ b/include/turtle/constraints.hpp @@ -1,201 +1,201 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_CONSTRAINTS_HPP_INCLUDED -#define MOCK_CONSTRAINTS_HPP_INCLUDED - -#include "config.hpp" -#include "constraint.hpp" -#include "detail/addressof.hpp" -#include -#include -#include -#include - -namespace mock -{ - MOCK_UNARY_CONSTRAINT( any, 0,, true && &actual ) - MOCK_UNARY_CONSTRAINT( affirm, 0,, !! actual ) - MOCK_UNARY_CONSTRAINT( negate, 0,, ! actual ) - MOCK_UNARY_CONSTRAINT( evaluate, 0,, actual() ) - - MOCK_NARY_CONSTRAINT( equal, 1, ( expected ), actual == expected ) - MOCK_NARY_CONSTRAINT( less, 1, ( expected ), actual < expected ) - MOCK_NARY_CONSTRAINT( greater, 1, ( expected ), actual > expected ) - MOCK_NARY_CONSTRAINT( less_equal, 1, ( expected ), actual <= expected ) - MOCK_NARY_CONSTRAINT( greater_equal, 1, ( expected ), actual >= expected ) - -#ifdef BOOST_MSVC -# pragma push_macro( "small" ) -# undef small -#endif - MOCK_NARY_CONSTRAINT( small, 1, ( expected ), \ - ( boost::test_tools::check_is_small( actual, expected ) ) ) -#ifdef BOOST_MSVC -# pragma pop_macro( "small" ) -#endif - - MOCK_NARY_CONSTRAINT( close, 2, ( expected, tolerance ), \ - ( boost::test_tools::check_is_close( \ - actual, expected, \ - boost::test_tools::percent_tolerance( tolerance ) ) ) ) - MOCK_NARY_CONSTRAINT( close_fraction, 2, ( expected, tolerance ), \ - ( boost::test_tools::check_is_close( \ - actual, expected, \ - boost::test_tools::fraction_tolerance( tolerance ) ) ) ) - -#ifdef BOOST_MSVC -# pragma push_macro( "near" ) -# undef near -#endif - MOCK_NARY_CONSTRAINT( near, 2, ( expected, tolerance ), \ - std::abs( actual - expected ) < tolerance ) -#ifdef BOOST_MSVC -# pragma pop_macro( "near" ) -#endif - -namespace detail -{ - template< typename Expected > - struct same - { - explicit same( const Expected& expected ) - : expected_( detail::addressof( boost::unwrap_ref( expected ) ) ) - {} - template< typename Actual > - bool operator()( const Actual& actual ) const - { - return detail::addressof( actual ) == expected_; - } - friend std::ostream& operator<<( std::ostream& os, const same& s ) - { - return os << "same( " << mock::format( *s.expected_ ) << " )"; - } - const typename - boost::unwrap_reference< Expected >::type* expected_; - }; - - template< typename Expected > - struct retrieve - { - explicit retrieve( Expected& expected ) - : expected_( detail::addressof( boost::unwrap_ref( expected ) ) ) - {} - template< typename Actual > - bool operator()( const Actual& actual, - typename boost::disable_if< - boost::is_convertible< - const Actual*, - typename - boost::unwrap_reference< Expected >::type - > - >::type* = 0 ) const - { - *expected_ = actual; - return true; - } - template< typename Actual > - bool operator()( Actual& actual, - typename boost::enable_if< - boost::is_convertible< Actual*, - typename - boost::unwrap_reference< Expected >::type - > - >::type* = 0 ) const - { - *expected_ = detail::addressof( actual ); - return true; - } - friend std::ostream& operator<<( std::ostream& s, const retrieve& r ) - { - return s << "retrieve( " << mock::format( *r.expected_ ) << " )"; - } - typename - boost::unwrap_reference< Expected >::type* expected_; - }; - - template< typename Expected > - struct assign - { - explicit assign( const Expected& expected ) - : expected_( expected ) - {} - template< typename Actual > - bool operator()( Actual& actual ) const - { - actual = boost::unwrap_ref( expected_ ); - return true; - } - template< typename Actual > - bool operator()( Actual* actual, - typename boost::enable_if< - boost::is_convertible< - typename - boost::unwrap_reference< Expected >::type, - Actual - > - >::type* = 0 ) const - { - *actual = boost::unwrap_ref( expected_ ); - return true; - } - friend std::ostream& operator<<( std::ostream& s, const assign& a ) - { - return s << "assign( " << mock::format( a.expected_ ) << " )"; - } - Expected expected_; - }; - - template< typename Expected > - struct contain - { - explicit contain( const Expected& expected ) - : expected_( expected ) - {} - bool operator()( const std::string& actual ) const - { - return actual.find( boost::unwrap_ref( expected_ ) ) - != std::string::npos; - } - friend std::ostream& operator<<( std::ostream& s, const contain& n ) - { - return s << "contain( " << mock::format( n.expected_ ) << " )"; - } - Expected expected_; - }; -} - - template< typename T > - constraint< detail::same< T > > same( T& t ) - { - return detail::same< T >( t ); - } - template< typename T > - constraint< detail::retrieve< T > > retrieve( T& t ) - { - return detail::retrieve< T >( t ); - } - template< typename T > - constraint< detail::assign< T > > assign( T t ) - { - return detail::assign< T >( t ); - } - template< typename T > - constraint< detail::contain< T > > contain( T t ) - { - return detail::contain< T >( t ); - } - - template< typename T > - constraint< T > call( T t ) - { - return constraint< T >( t ); - } -} // mock - -#endif // MOCK_CONSTRAINTS_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_CONSTRAINTS_HPP_INCLUDED +#define MOCK_CONSTRAINTS_HPP_INCLUDED + +#include "config.hpp" +#include "constraint.hpp" +#include "detail/addressof.hpp" +#include +#include +#include +#include + +namespace mock +{ + MOCK_UNARY_CONSTRAINT( any, 0,, true && &actual ) + MOCK_UNARY_CONSTRAINT( affirm, 0,, !! actual ) + MOCK_UNARY_CONSTRAINT( negate, 0,, ! actual ) + MOCK_UNARY_CONSTRAINT( evaluate, 0,, actual() ) + + MOCK_NARY_CONSTRAINT( equal, 1, ( expected ), actual == expected ) + MOCK_NARY_CONSTRAINT( less, 1, ( expected ), actual < expected ) + MOCK_NARY_CONSTRAINT( greater, 1, ( expected ), actual > expected ) + MOCK_NARY_CONSTRAINT( less_equal, 1, ( expected ), actual <= expected ) + MOCK_NARY_CONSTRAINT( greater_equal, 1, ( expected ), actual >= expected ) + +#ifdef BOOST_MSVC +# pragma push_macro( "small" ) +# undef small +#endif + MOCK_NARY_CONSTRAINT( small, 1, ( expected ), \ + ( boost::test_tools::check_is_small( actual, expected ) ) ) +#ifdef BOOST_MSVC +# pragma pop_macro( "small" ) +#endif + + MOCK_NARY_CONSTRAINT( close, 2, ( expected, tolerance ), \ + ( boost::test_tools::check_is_close( \ + actual, expected, \ + boost::test_tools::percent_tolerance( tolerance ) ) ) ) + MOCK_NARY_CONSTRAINT( close_fraction, 2, ( expected, tolerance ), \ + ( boost::test_tools::check_is_close( \ + actual, expected, \ + boost::test_tools::fraction_tolerance( tolerance ) ) ) ) + +#ifdef BOOST_MSVC +# pragma push_macro( "near" ) +# undef near +#endif + MOCK_NARY_CONSTRAINT( near, 2, ( expected, tolerance ), \ + std::abs( actual - expected ) < tolerance ) +#ifdef BOOST_MSVC +# pragma pop_macro( "near" ) +#endif + +namespace detail +{ + template< typename Expected > + struct same + { + explicit same( const Expected& expected ) + : expected_( detail::addressof( boost::unwrap_ref( expected ) ) ) + {} + template< typename Actual > + bool operator()( const Actual& actual ) const + { + return detail::addressof( actual ) == expected_; + } + friend std::ostream& operator<<( std::ostream& os, const same& s ) + { + return os << "same( " << mock::format( *s.expected_ ) << " )"; + } + const typename + boost::unwrap_reference< Expected >::type* expected_; + }; + + template< typename Expected > + struct retrieve + { + explicit retrieve( Expected& expected ) + : expected_( detail::addressof( boost::unwrap_ref( expected ) ) ) + {} + template< typename Actual > + bool operator()( const Actual& actual, + typename boost::disable_if< + boost::is_convertible< + const Actual*, + typename + boost::unwrap_reference< Expected >::type + > + >::type* = 0 ) const + { + *expected_ = actual; + return true; + } + template< typename Actual > + bool operator()( Actual& actual, + typename boost::enable_if< + boost::is_convertible< Actual*, + typename + boost::unwrap_reference< Expected >::type + > + >::type* = 0 ) const + { + *expected_ = detail::addressof( actual ); + return true; + } + friend std::ostream& operator<<( std::ostream& s, const retrieve& r ) + { + return s << "retrieve( " << mock::format( *r.expected_ ) << " )"; + } + typename + boost::unwrap_reference< Expected >::type* expected_; + }; + + template< typename Expected > + struct assign + { + explicit assign( const Expected& expected ) + : expected_( expected ) + {} + template< typename Actual > + bool operator()( Actual& actual ) const + { + actual = boost::unwrap_ref( expected_ ); + return true; + } + template< typename Actual > + bool operator()( Actual* actual, + typename boost::enable_if< + boost::is_convertible< + typename + boost::unwrap_reference< Expected >::type, + Actual + > + >::type* = 0 ) const + { + *actual = boost::unwrap_ref( expected_ ); + return true; + } + friend std::ostream& operator<<( std::ostream& s, const assign& a ) + { + return s << "assign( " << mock::format( a.expected_ ) << " )"; + } + Expected expected_; + }; + + template< typename Expected > + struct contain + { + explicit contain( const Expected& expected ) + : expected_( expected ) + {} + bool operator()( const std::string& actual ) const + { + return actual.find( boost::unwrap_ref( expected_ ) ) + != std::string::npos; + } + friend std::ostream& operator<<( std::ostream& s, const contain& n ) + { + return s << "contain( " << mock::format( n.expected_ ) << " )"; + } + Expected expected_; + }; +} + + template< typename T > + constraint< detail::same< T > > same( T& t ) + { + return detail::same< T >( t ); + } + template< typename T > + constraint< detail::retrieve< T > > retrieve( T& t ) + { + return detail::retrieve< T >( t ); + } + template< typename T > + constraint< detail::assign< T > > assign( T t ) + { + return detail::assign< T >( t ); + } + template< typename T > + constraint< detail::contain< T > > contain( T t ) + { + return detail::contain< T >( t ); + } + + template< typename T > + constraint< T > call( T t ) + { + return constraint< T >( t ); + } +} // mock + +#endif // MOCK_CONSTRAINTS_HPP_INCLUDED diff --git a/turtle/detail/action.hpp b/include/turtle/detail/action.hpp similarity index 96% rename from turtle/detail/action.hpp rename to include/turtle/detail/action.hpp index 02c5e4c..db98aad 100644 --- a/turtle/detail/action.hpp +++ b/include/turtle/detail/action.hpp @@ -1,214 +1,214 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_ACTION_HPP_INCLUDED -#define MOCK_ACTION_HPP_INCLUDED - -#include "../config.hpp" -#include -#include -#include -#include -#include -#include -#include -#include - -namespace mock -{ -namespace detail -{ - template< typename Result, typename Signature > - class action_base - { - private: - typedef boost::function< Signature > functor_type; - typedef boost::function< Result() > action_type; - - public: - const functor_type& functor() const - { - return f_; - } - bool valid() const - { - return f_ || a_; - } - Result trigger() const - { - return a_(); - } - - void calls( const functor_type& f ) - { - if( ! f ) - throw std::invalid_argument( "null functor" ); - f_ = f; - } - - template< typename Exception > - void throws( Exception e ) - { - a_ = boost::bind( &do_throw< Exception >, e ); - } - - protected: - void set( const action_type& a ) - { - a_ = a; - } - template< typename Y > - void set( const boost::reference_wrapper< Y >& r ) - { - a_ = boost::bind( &do_ref< Y >, r.get_pointer() ); - } - - private: - template< typename T > - static T& do_ref( T* t ) - { - return *t; - } - template< typename T > - static Result do_throw( T t ) - { - throw t; - } - - functor_type f_; - action_type a_; - }; - - template< typename Result, typename Signature > - class action : public action_base< Result, Signature > - { - public: - template< typename Value > - void returns( const Value& v ) - { - this->set( boost::ref( store( v ) ) ); - } - template< typename Y > - void returns( const boost::reference_wrapper< Y >& r ) - { - this->set( r ); - } - - template< typename Value > - void moves( BOOST_RV_REF( Value ) v ) - { - this->set( - boost::bind( - &boost::move< BOOST_RV_REF( Value ) >, - boost::ref( store( boost::move( v ) ) ) ) ); - } - - private: - struct value : boost::noncopyable - { - virtual ~value() - {} - }; - template< typename T > - struct value_imp : value - { - typedef - typename boost::remove_const< - typename boost::remove_reference< - T - >::type - >::type value_type; - - value_imp( BOOST_RV_REF( value_type ) t ) - : t_( boost::move( t ) ) - {} - value_imp( const T& t ) - : t_( t ) - {} - template< typename Y > - value_imp( Y* y ) - : t_( y ) - {} - value_type t_; - }; - - template< typename T > - T& store( BOOST_RV_REF( T ) t ) - { - v_.reset( new value_imp< T >( boost::move( t ) ) ); - return static_cast< value_imp< T >& >( *v_ ).t_; - } - template< typename T > - T& store( const T& t ) - { - v_.reset( new value_imp< T >( t ) ); - return static_cast< value_imp< T >& >( *v_ ).t_; - } - template< typename T > - Result& store( T* t ) - { - v_.reset( new value_imp< Result >( t ) ); - return static_cast< value_imp< Result >& >( *v_ ).t_; - } - - boost::shared_ptr< value > v_; - }; - - template< typename Signature > - class action< void, Signature > : public action_base< void, Signature > - { - public: - action() - { - this->set( boost::bind( &do_nothing ) ); - } - - private: - static void do_nothing() - {} - }; - - template< typename Result, typename Signature > - class action< std::auto_ptr< Result >, Signature > - : public action_base< std::auto_ptr< Result >, Signature > - { - public: - action() - {} - action( const action& rhs ) - : v_( rhs.v_.release() ) - { - if( v_.get() ) - returns( boost::ref( v_ ) ); - } - - template< typename Y > - void returns( Y* r ) - { - v_.reset( r ); - this->set( boost::ref( v_ ) ); - } - template< typename Y > - void returns( std::auto_ptr< Y > r ) - { - v_ = r; - this->set( boost::ref( v_ ) ); - } - template< typename Y > - void returns( const boost::reference_wrapper< Y >& r ) - { - this->set( r ); - } - - private: - mutable std::auto_ptr< Result > v_; - }; -} -} // mock - -#endif // MOCK_ACTION_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_ACTION_HPP_INCLUDED +#define MOCK_ACTION_HPP_INCLUDED + +#include "../config.hpp" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace mock +{ +namespace detail +{ + template< typename Result, typename Signature > + class action_base + { + private: + typedef boost::function< Signature > functor_type; + typedef boost::function< Result() > action_type; + + public: + const functor_type& functor() const + { + return f_; + } + bool valid() const + { + return f_ || a_; + } + Result trigger() const + { + return a_(); + } + + void calls( const functor_type& f ) + { + if( ! f ) + throw std::invalid_argument( "null functor" ); + f_ = f; + } + + template< typename Exception > + void throws( Exception e ) + { + a_ = boost::bind( &do_throw< Exception >, e ); + } + + protected: + void set( const action_type& a ) + { + a_ = a; + } + template< typename Y > + void set( const boost::reference_wrapper< Y >& r ) + { + a_ = boost::bind( &do_ref< Y >, r.get_pointer() ); + } + + private: + template< typename T > + static T& do_ref( T* t ) + { + return *t; + } + template< typename T > + static Result do_throw( T t ) + { + throw t; + } + + functor_type f_; + action_type a_; + }; + + template< typename Result, typename Signature > + class action : public action_base< Result, Signature > + { + public: + template< typename Value > + void returns( const Value& v ) + { + this->set( boost::ref( store( v ) ) ); + } + template< typename Y > + void returns( const boost::reference_wrapper< Y >& r ) + { + this->set( r ); + } + + template< typename Value > + void moves( BOOST_RV_REF( Value ) v ) + { + this->set( + boost::bind( + &boost::move< BOOST_RV_REF( Value ) >, + boost::ref( store( boost::move( v ) ) ) ) ); + } + + private: + struct value : boost::noncopyable + { + virtual ~value() + {} + }; + template< typename T > + struct value_imp : value + { + typedef + typename boost::remove_const< + typename boost::remove_reference< + T + >::type + >::type value_type; + + value_imp( BOOST_RV_REF( value_type ) t ) + : t_( boost::move( t ) ) + {} + value_imp( const T& t ) + : t_( t ) + {} + template< typename Y > + value_imp( Y* y ) + : t_( y ) + {} + value_type t_; + }; + + template< typename T > + T& store( BOOST_RV_REF( T ) t ) + { + v_.reset( new value_imp< T >( boost::move( t ) ) ); + return static_cast< value_imp< T >& >( *v_ ).t_; + } + template< typename T > + T& store( const T& t ) + { + v_.reset( new value_imp< T >( t ) ); + return static_cast< value_imp< T >& >( *v_ ).t_; + } + template< typename T > + Result& store( T* t ) + { + v_.reset( new value_imp< Result >( t ) ); + return static_cast< value_imp< Result >& >( *v_ ).t_; + } + + boost::shared_ptr< value > v_; + }; + + template< typename Signature > + class action< void, Signature > : public action_base< void, Signature > + { + public: + action() + { + this->set( boost::bind( &do_nothing ) ); + } + + private: + static void do_nothing() + {} + }; + + template< typename Result, typename Signature > + class action< std::auto_ptr< Result >, Signature > + : public action_base< std::auto_ptr< Result >, Signature > + { + public: + action() + {} + action( const action& rhs ) + : v_( rhs.v_.release() ) + { + if( v_.get() ) + returns( boost::ref( v_ ) ); + } + + template< typename Y > + void returns( Y* r ) + { + v_.reset( r ); + this->set( boost::ref( v_ ) ); + } + template< typename Y > + void returns( std::auto_ptr< Y > r ) + { + v_ = r; + this->set( boost::ref( v_ ) ); + } + template< typename Y > + void returns( const boost::reference_wrapper< Y >& r ) + { + this->set( r ); + } + + private: + mutable std::auto_ptr< Result > v_; + }; +} +} // mock + +#endif // MOCK_ACTION_HPP_INCLUDED diff --git a/turtle/detail/addressof.hpp b/include/turtle/detail/addressof.hpp similarity index 95% rename from turtle/detail/addressof.hpp rename to include/turtle/detail/addressof.hpp index a818945..4e48a8d 100644 --- a/turtle/detail/addressof.hpp +++ b/include/turtle/detail/addressof.hpp @@ -1,36 +1,36 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2013 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_ADDRESSOF_HPP_INCLUDED -#define MOCK_ADDRESSOF_HPP_INCLUDED - -#include "../config.hpp" -#include - -namespace mock -{ -namespace detail -{ - using boost::addressof; - -#ifdef MOCK_NULLPTR - - inline const std::nullptr_t* addressof( const std::nullptr_t& p ) - { - return &p; - } - inline std::nullptr_t* addressof( std::nullptr_t& p ) - { - return &p; - } - -#endif -} -} // mock - -#endif // MOCK_ADDRESSOF_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2013 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_ADDRESSOF_HPP_INCLUDED +#define MOCK_ADDRESSOF_HPP_INCLUDED + +#include "../config.hpp" +#include + +namespace mock +{ +namespace detail +{ + using boost::addressof; + +#ifdef MOCK_NULLPTR + + inline const std::nullptr_t* addressof( const std::nullptr_t& p ) + { + return &p; + } + inline std::nullptr_t* addressof( std::nullptr_t& p ) + { + return &p; + } + +#endif +} +} // mock + +#endif // MOCK_ADDRESSOF_HPP_INCLUDED diff --git a/turtle/detail/child.hpp b/include/turtle/detail/child.hpp similarity index 96% rename from turtle/detail/child.hpp rename to include/turtle/detail/child.hpp index 3de8492..992d397 100644 --- a/turtle/detail/child.hpp +++ b/include/turtle/detail/child.hpp @@ -1,52 +1,52 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_CHILD_HPP_INCLUDED -#define MOCK_CHILD_HPP_INCLUDED - -#include "../config.hpp" -#include "type_name.hpp" -#include "parent.hpp" -#include -#include -#include - -namespace mock -{ -namespace detail -{ - class child - { - public: - child() - : parent_( 0 ) - {} - void update( parent& p, - boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ) - { - if( instance != "?." || name_.empty() ) - p = parent( instance, type ); - parent_ = &p; - name_ = name; - } - friend std::ostream& operator<<( std::ostream& s, const child& c ) - { - if( c.parent_ ) - s << *c.parent_; - return s << c.name_; - } - private: - const parent* parent_; - boost::unit_test::const_string name_; - }; -} -} // mock - -#endif // MOCK_CHILD_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_CHILD_HPP_INCLUDED +#define MOCK_CHILD_HPP_INCLUDED + +#include "../config.hpp" +#include "type_name.hpp" +#include "parent.hpp" +#include +#include +#include + +namespace mock +{ +namespace detail +{ + class child + { + public: + child() + : parent_( 0 ) + {} + void update( parent& p, + boost::unit_test::const_string instance, + boost::optional< type_name > type, + boost::unit_test::const_string name ) + { + if( instance != "?." || name_.empty() ) + p = parent( instance, type ); + parent_ = &p; + name_ = name; + } + friend std::ostream& operator<<( std::ostream& s, const child& c ) + { + if( c.parent_ ) + s << *c.parent_; + return s << c.name_; + } + private: + const parent* parent_; + boost::unit_test::const_string name_; + }; +} +} // mock + +#endif // MOCK_CHILD_HPP_INCLUDED diff --git a/turtle/detail/cleanup.hpp b/include/turtle/detail/cleanup.hpp similarity index 95% rename from turtle/detail/cleanup.hpp rename to include/turtle/detail/cleanup.hpp index 88e20e0..ca5d212 100644 --- a/turtle/detail/cleanup.hpp +++ b/include/turtle/detail/cleanup.hpp @@ -1,37 +1,37 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_CLEANUP_HPP_INCLUDED -#define MOCK_CLEANUP_HPP_INCLUDED - -#include "../config.hpp" -#ifdef MOCK_USE_BOOST_TEST -#include "../verify.hpp" -#include "../reset.hpp" -#include - -namespace mock -{ -namespace detail -{ - struct cleanup - { - ~cleanup() - { - // see https://svn.boost.org/trac/boost/ticket/5563 - //mock::verify(); - mock::reset(); - } - }; - BOOST_GLOBAL_FIXTURE( cleanup ) -} -} // mock - -#endif // MOCK_USE_BOOST_TEST - -#endif // MOCK_CLEANUP_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_CLEANUP_HPP_INCLUDED +#define MOCK_CLEANUP_HPP_INCLUDED + +#include "../config.hpp" +#ifdef MOCK_USE_BOOST_TEST +#include "../verify.hpp" +#include "../reset.hpp" +#include + +namespace mock +{ +namespace detail +{ + struct cleanup + { + ~cleanup() + { + // see https://svn.boost.org/trac/boost/ticket/5563 + //mock::verify(); + mock::reset(); + } + }; + BOOST_GLOBAL_FIXTURE( cleanup ) +} +} // mock + +#endif // MOCK_USE_BOOST_TEST + +#endif // MOCK_CLEANUP_HPP_INCLUDED diff --git a/turtle/detail/context.hpp b/include/turtle/detail/context.hpp similarity index 96% rename from turtle/detail/context.hpp rename to include/turtle/detail/context.hpp index 39ca5bb..9b275a3 100644 --- a/turtle/detail/context.hpp +++ b/include/turtle/detail/context.hpp @@ -1,44 +1,44 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_CONTEXT_HPP_INCLUDED -#define MOCK_CONTEXT_HPP_INCLUDED - -#include "../config.hpp" -#include "type_name.hpp" -#include -#include -#include -#include - -namespace mock -{ -namespace detail -{ - class verifiable; - - class context : boost::noncopyable - { - public: - context() {} - virtual ~context() {} - - virtual void add( const void* p, verifiable& v, - boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ) = 0; - virtual void add( verifiable& v ) = 0; - virtual void remove( verifiable& v ) = 0; - - virtual void serialize( std::ostream& s, - const verifiable& v ) const = 0; - }; -} -} // mock - -#endif // MOCK_CONTEXT_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_CONTEXT_HPP_INCLUDED +#define MOCK_CONTEXT_HPP_INCLUDED + +#include "../config.hpp" +#include "type_name.hpp" +#include +#include +#include +#include + +namespace mock +{ +namespace detail +{ + class verifiable; + + class context : boost::noncopyable + { + public: + context() {} + virtual ~context() {} + + virtual void add( const void* p, verifiable& v, + boost::unit_test::const_string instance, + boost::optional< type_name > type, + boost::unit_test::const_string name ) = 0; + virtual void add( verifiable& v ) = 0; + virtual void remove( verifiable& v ) = 0; + + virtual void serialize( std::ostream& s, + const verifiable& v ) const = 0; + }; +} +} // mock + +#endif // MOCK_CONTEXT_HPP_INCLUDED diff --git a/turtle/detail/expectation_template.hpp b/include/turtle/detail/expectation_template.hpp similarity index 96% rename from turtle/detail/expectation_template.hpp rename to include/turtle/detail/expectation_template.hpp index 8431cd1..3c5b461 100644 --- a/turtle/detail/expectation_template.hpp +++ b/include/turtle/detail/expectation_template.hpp @@ -1,263 +1,263 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include "matcher_base_template.hpp" - -#define MOCK_EXPECTATION_INITIALIZE(z, n, d) \ - BOOST_PP_COMMA_IF(n) c##n##_( c##n ) - -#define MOCK_EXPECTATION_MEMBER(z, n, d) \ - matcher< T##n, Constraint_##n > c##n##_; - -#define MOCK_EXPECTATION_IS_VALID(z, n, d) \ - BOOST_PP_IF(n, &&,) c##n##_( a##n ) - -#define MOCK_EXPECTATION_SERIALIZE(z, n, d) \ - BOOST_PP_IF(n, << ", " <<,) c##n##_ - -#define MOCK_EXPECTATION_SERIALIZE_ANY(z, n, d) \ - BOOST_PP_IF(n, << ", " <<,) "any" - -namespace mock -{ -namespace detail -{ - template< typename Signature > class default_matcher; - - template< - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename T) > - class default_matcher< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > - : public matcher_base< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > - { - private: - virtual bool operator()( - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) - { - return true; - } - virtual void serialize( std::ostream& s ) const - { - s << "" BOOST_PP_REPEAT(MOCK_NUM_ARGS, - MOCK_EXPECTATION_SERIALIZE_ANY, _ ); - } - }; - -#ifndef MOCK_NUM_ARGS_0 - - template< typename Constraint, typename Signature > class single_matcher; - - template< - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename Constraint_), - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename T) - > - class single_matcher< - void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, Constraint_) ), - void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) - > - : public matcher_base< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > - { - public: - single_matcher( - BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c) ) - : BOOST_PP_REPEAT(MOCK_NUM_ARGS, - MOCK_EXPECTATION_INITIALIZE, _) - {} - - private: - virtual bool operator()( - BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, T, a) ) - { - return BOOST_PP_REPEAT(MOCK_NUM_ARGS, - MOCK_EXPECTATION_IS_VALID, _); - } - virtual void serialize( std::ostream& s ) const - { - s << BOOST_PP_REPEAT(MOCK_NUM_ARGS, - MOCK_EXPECTATION_SERIALIZE, _ ); - } - - private: - BOOST_PP_REPEAT( - MOCK_NUM_ARGS, MOCK_EXPECTATION_MEMBER, _ ) -}; - - template< typename F, typename Signature > class multi_matcher; - - template< typename F, - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename T) > - class multi_matcher< F, void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > - : public matcher_base< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS,T) ) > - { - public: - multi_matcher( const F& f ) - : f_( f ) - {} - - private: - virtual bool operator()( - BOOST_PP_ENUM_BINARY_PARAMS( MOCK_NUM_ARGS, T, a ) ) - { - return f_( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, a ) ); - } - virtual void serialize( std::ostream& s ) const - { - s << mock::format( f_ ); - } - - private: - F f_; - }; - -#endif - - template< typename Signature > class expectation; - - template< typename R - BOOST_PP_ENUM_TRAILING_PARAMS(MOCK_NUM_ARGS, typename T) > - class expectation< R (BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS,T)) > - : public action< R, R (BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS,T)) > - { - public: - expectation() - : invocation_( boost::make_shared< unlimited >() ) - , matcher_( - boost::make_shared< - default_matcher< - void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) - > - > () ) - , file_( "unknown location" ) - , line_( 0 ) - {} - expectation( const char* file, int line ) - : invocation_( boost::make_shared< unlimited >() ) - , matcher_( - boost::make_shared< - default_matcher< - void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) - > - > () ) - , file_( file ) - , line_( line ) - {} - - ~expectation() - { - for( sequences_cit it = sequences_.begin(); - it != sequences_.end(); ++it ) - (*it)->remove( this ); - } - - void invoke( const boost::shared_ptr< invocation >& i ) - { - invocation_ = i; - } - -#ifndef MOCK_NUM_ARGS_0 - template< - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename Constraint_) - > - expectation& with( - BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c) ) - { - matcher_ = - boost::make_shared< single_matcher< - void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, Constraint_) ), - void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) - > >( - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, c) ); - return *this; - } -#if MOCK_NUM_ARGS > 1 - template< typename Constraint > - expectation& with( const Constraint& c ) - { - matcher_ = - boost::make_shared< multi_matcher< - Constraint, - void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > >( c ); - return *this; - } -#endif -#endif - - void add( sequence& s ) - { - s.impl_->add( this ); - sequences_.push_back( s.impl_ ); - } - - bool verify() const - { - return invocation_->verify(); - } - - bool is_valid( - BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, T, a) ) const - { - return !invocation_->exhausted() - && (*matcher_)( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, a) ); - } - - bool invoke() const - { - for( sequences_cit it = sequences_.begin(); - it != sequences_.end(); ++it ) - if( ! (*it)->is_valid( this ) ) - return false; - bool result = invocation_->invoke(); - for( sequences_cit it = sequences_.begin(); - it != sequences_.end(); ++it ) - (*it)->invalidate( this ); - return result; - } - - const char* file() const - { - return file_; - } - int line() const - { - return line_; - } - - friend std::ostream& operator<<( - std::ostream& s, const expectation& e ) - { - return s << ( e.invocation_->exhausted() ? 'v' : '.' ) - << ' ' << *e.invocation_ -#ifndef MOCK_NUM_ARGS_0 - << ".with( " << *e.matcher_ << " )" -#endif - ; - } - - private: - typedef std::vector< - boost::shared_ptr< sequence_impl > - > sequences_type; - typedef sequences_type::const_iterator sequences_cit; - - boost::shared_ptr< invocation > invocation_; - boost::shared_ptr< - matcher_base< - void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) - > - > matcher_; - sequences_type sequences_; - const char* file_; - int line_; - }; -} -} // mock - -#undef MOCK_EXPECTATION_INITIALIZE -#undef MOCK_EXPECTATION_MEMBER -#undef MOCK_EXPECTATION_IS_VALID -#undef MOCK_EXPECTATION_SERIALIZE -#undef MOCK_EXPECTATION_SERIALIZE_ANY +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2012 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include "matcher_base_template.hpp" + +#define MOCK_EXPECTATION_INITIALIZE(z, n, d) \ + BOOST_PP_COMMA_IF(n) c##n##_( c##n ) + +#define MOCK_EXPECTATION_MEMBER(z, n, d) \ + matcher< T##n, Constraint_##n > c##n##_; + +#define MOCK_EXPECTATION_IS_VALID(z, n, d) \ + BOOST_PP_IF(n, &&,) c##n##_( a##n ) + +#define MOCK_EXPECTATION_SERIALIZE(z, n, d) \ + BOOST_PP_IF(n, << ", " <<,) c##n##_ + +#define MOCK_EXPECTATION_SERIALIZE_ANY(z, n, d) \ + BOOST_PP_IF(n, << ", " <<,) "any" + +namespace mock +{ +namespace detail +{ + template< typename Signature > class default_matcher; + + template< + BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename T) > + class default_matcher< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > + : public matcher_base< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > + { + private: + virtual bool operator()( + BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) + { + return true; + } + virtual void serialize( std::ostream& s ) const + { + s << "" BOOST_PP_REPEAT(MOCK_NUM_ARGS, + MOCK_EXPECTATION_SERIALIZE_ANY, _ ); + } + }; + +#ifndef MOCK_NUM_ARGS_0 + + template< typename Constraint, typename Signature > class single_matcher; + + template< + BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename Constraint_), + BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename T) + > + class single_matcher< + void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, Constraint_) ), + void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) + > + : public matcher_base< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > + { + public: + single_matcher( + BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c) ) + : BOOST_PP_REPEAT(MOCK_NUM_ARGS, + MOCK_EXPECTATION_INITIALIZE, _) + {} + + private: + virtual bool operator()( + BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, T, a) ) + { + return BOOST_PP_REPEAT(MOCK_NUM_ARGS, + MOCK_EXPECTATION_IS_VALID, _); + } + virtual void serialize( std::ostream& s ) const + { + s << BOOST_PP_REPEAT(MOCK_NUM_ARGS, + MOCK_EXPECTATION_SERIALIZE, _ ); + } + + private: + BOOST_PP_REPEAT( + MOCK_NUM_ARGS, MOCK_EXPECTATION_MEMBER, _ ) +}; + + template< typename F, typename Signature > class multi_matcher; + + template< typename F, + BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename T) > + class multi_matcher< F, void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > + : public matcher_base< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS,T) ) > + { + public: + multi_matcher( const F& f ) + : f_( f ) + {} + + private: + virtual bool operator()( + BOOST_PP_ENUM_BINARY_PARAMS( MOCK_NUM_ARGS, T, a ) ) + { + return f_( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, a ) ); + } + virtual void serialize( std::ostream& s ) const + { + s << mock::format( f_ ); + } + + private: + F f_; + }; + +#endif + + template< typename Signature > class expectation; + + template< typename R + BOOST_PP_ENUM_TRAILING_PARAMS(MOCK_NUM_ARGS, typename T) > + class expectation< R (BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS,T)) > + : public action< R, R (BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS,T)) > + { + public: + expectation() + : invocation_( boost::make_shared< unlimited >() ) + , matcher_( + boost::make_shared< + default_matcher< + void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) + > + > () ) + , file_( "unknown location" ) + , line_( 0 ) + {} + expectation( const char* file, int line ) + : invocation_( boost::make_shared< unlimited >() ) + , matcher_( + boost::make_shared< + default_matcher< + void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) + > + > () ) + , file_( file ) + , line_( line ) + {} + + ~expectation() + { + for( sequences_cit it = sequences_.begin(); + it != sequences_.end(); ++it ) + (*it)->remove( this ); + } + + void invoke( const boost::shared_ptr< invocation >& i ) + { + invocation_ = i; + } + +#ifndef MOCK_NUM_ARGS_0 + template< + BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename Constraint_) + > + expectation& with( + BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c) ) + { + matcher_ = + boost::make_shared< single_matcher< + void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, Constraint_) ), + void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) + > >( + BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, c) ); + return *this; + } +#if MOCK_NUM_ARGS > 1 + template< typename Constraint > + expectation& with( const Constraint& c ) + { + matcher_ = + boost::make_shared< multi_matcher< + Constraint, + void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > >( c ); + return *this; + } +#endif +#endif + + void add( sequence& s ) + { + s.impl_->add( this ); + sequences_.push_back( s.impl_ ); + } + + bool verify() const + { + return invocation_->verify(); + } + + bool is_valid( + BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, T, a) ) const + { + return !invocation_->exhausted() + && (*matcher_)( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, a) ); + } + + bool invoke() const + { + for( sequences_cit it = sequences_.begin(); + it != sequences_.end(); ++it ) + if( ! (*it)->is_valid( this ) ) + return false; + bool result = invocation_->invoke(); + for( sequences_cit it = sequences_.begin(); + it != sequences_.end(); ++it ) + (*it)->invalidate( this ); + return result; + } + + const char* file() const + { + return file_; + } + int line() const + { + return line_; + } + + friend std::ostream& operator<<( + std::ostream& s, const expectation& e ) + { + return s << ( e.invocation_->exhausted() ? 'v' : '.' ) + << ' ' << *e.invocation_ +#ifndef MOCK_NUM_ARGS_0 + << ".with( " << *e.matcher_ << " )" +#endif + ; + } + + private: + typedef std::vector< + boost::shared_ptr< sequence_impl > + > sequences_type; + typedef sequences_type::const_iterator sequences_cit; + + boost::shared_ptr< invocation > invocation_; + boost::shared_ptr< + matcher_base< + void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) + > + > matcher_; + sequences_type sequences_; + const char* file_; + int line_; + }; +} +} // mock + +#undef MOCK_EXPECTATION_INITIALIZE +#undef MOCK_EXPECTATION_MEMBER +#undef MOCK_EXPECTATION_IS_VALID +#undef MOCK_EXPECTATION_SERIALIZE +#undef MOCK_EXPECTATION_SERIALIZE_ANY diff --git a/turtle/detail/formatter.hpp b/include/turtle/detail/formatter.hpp similarity index 95% rename from turtle/detail/formatter.hpp rename to include/turtle/detail/formatter.hpp index 78dddae..18ccd73 100644 --- a/turtle/detail/formatter.hpp +++ b/include/turtle/detail/formatter.hpp @@ -1,50 +1,50 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_FORMATTER_HPP_INCLUDED -#define MOCK_FORMATTER_HPP_INCLUDED - -#include "../config.hpp" -#include "../stream.hpp" -#include "addressof.hpp" - -namespace mock -{ -namespace detail -{ - template< typename T > - struct formatter - { - explicit formatter( const T& t ) - : t_( detail::addressof( t ) ) - {} - void serialize( stream& s ) const - { - detail::serialize( s, *t_ ); - } - const T* t_; - }; - - template< typename T > - stream& operator<<( stream& s, const formatter< T >& f ) - { - f.serialize( s ); - return s; - } - - template< typename T > - std::ostream& operator<<( std::ostream& s, const formatter< T >& f ) - { - stream ss( s ); - f.serialize( ss ); - return s; - } -} -} // mock - -#endif // MOCK_FORMATTER_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2012 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_FORMATTER_HPP_INCLUDED +#define MOCK_FORMATTER_HPP_INCLUDED + +#include "../config.hpp" +#include "../stream.hpp" +#include "addressof.hpp" + +namespace mock +{ +namespace detail +{ + template< typename T > + struct formatter + { + explicit formatter( const T& t ) + : t_( detail::addressof( t ) ) + {} + void serialize( stream& s ) const + { + detail::serialize( s, *t_ ); + } + const T* t_; + }; + + template< typename T > + stream& operator<<( stream& s, const formatter< T >& f ) + { + f.serialize( s ); + return s; + } + + template< typename T > + std::ostream& operator<<( std::ostream& s, const formatter< T >& f ) + { + stream ss( s ); + f.serialize( ss ); + return s; + } +} +} // mock + +#endif // MOCK_FORMATTER_HPP_INCLUDED diff --git a/turtle/detail/function.hpp b/include/turtle/detail/function.hpp similarity index 96% rename from turtle/detail/function.hpp rename to include/turtle/detail/function.hpp index 300786c..4a48220 100644 --- a/turtle/detail/function.hpp +++ b/include/turtle/detail/function.hpp @@ -1,103 +1,103 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_FUNCTION_HPP_INCLUDED -#define MOCK_FUNCTION_HPP_INCLUDED - -#include "../config.hpp" -#include "../error.hpp" -#include "../log.hpp" -#include "../constraints.hpp" -#include "../sequence.hpp" -#include "../matcher.hpp" -#include "action.hpp" -#include "verifiable.hpp" -#include "invocation.hpp" -#include "type_name.hpp" -#include "context.hpp" -#include "mutex.hpp" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace mock -{ -namespace detail -{ - template< typename R, typename E > - struct wrapper_base - { - wrapper_base( E& e ) - : e_( &e ) - {} - - template< typename T > - void returns( T t ) - { - e_->returns( t ); - } - - E* e_; - }; - template< typename E > - struct wrapper_base< void, E > - { - wrapper_base( E& e ) - : e_( &e ) - {} - - E* e_; - }; - template< typename R, typename E > - struct wrapper_base< R*, E > - { - wrapper_base( E& e ) - : e_( &e ) - {} - - void returns( R* r ) - { - e_->returns( r ); - } - template< typename Y > - void returns( const boost::reference_wrapper< Y >& r ) - { - e_->returns( r ); - } - - E* e_; - }; -} -} // mock - -#define MOCK_NUM_ARGS 0 -#define MOCK_NUM_ARGS_0 -#include "function_template.hpp" -#undef MOCK_NUM_ARGS_0 -#undef MOCK_NUM_ARGS - -#define BOOST_PP_FILENAME_1 -#define BOOST_PP_ITERATION_LIMITS (1, MOCK_MAX_ARGS) -#include BOOST_PP_ITERATE() -#undef BOOST_PP_FILENAME_1 -#undef BOOST_PP_ITERATION_LIMITS - -#endif // MOCK_FUNCTION_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_FUNCTION_HPP_INCLUDED +#define MOCK_FUNCTION_HPP_INCLUDED + +#include "../config.hpp" +#include "../error.hpp" +#include "../log.hpp" +#include "../constraints.hpp" +#include "../sequence.hpp" +#include "../matcher.hpp" +#include "action.hpp" +#include "verifiable.hpp" +#include "invocation.hpp" +#include "type_name.hpp" +#include "context.hpp" +#include "mutex.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace mock +{ +namespace detail +{ + template< typename R, typename E > + struct wrapper_base + { + wrapper_base( E& e ) + : e_( &e ) + {} + + template< typename T > + void returns( T t ) + { + e_->returns( t ); + } + + E* e_; + }; + template< typename E > + struct wrapper_base< void, E > + { + wrapper_base( E& e ) + : e_( &e ) + {} + + E* e_; + }; + template< typename R, typename E > + struct wrapper_base< R*, E > + { + wrapper_base( E& e ) + : e_( &e ) + {} + + void returns( R* r ) + { + e_->returns( r ); + } + template< typename Y > + void returns( const boost::reference_wrapper< Y >& r ) + { + e_->returns( r ); + } + + E* e_; + }; +} +} // mock + +#define MOCK_NUM_ARGS 0 +#define MOCK_NUM_ARGS_0 +#include "function_template.hpp" +#undef MOCK_NUM_ARGS_0 +#undef MOCK_NUM_ARGS + +#define BOOST_PP_FILENAME_1 +#define BOOST_PP_ITERATION_LIMITS (1, MOCK_MAX_ARGS) +#include BOOST_PP_ITERATE() +#undef BOOST_PP_FILENAME_1 +#undef BOOST_PP_ITERATION_LIMITS + +#endif // MOCK_FUNCTION_HPP_INCLUDED diff --git a/turtle/detail/function_impl_template.hpp b/include/turtle/detail/function_impl_template.hpp similarity index 93% rename from turtle/detail/function_impl_template.hpp rename to include/turtle/detail/function_impl_template.hpp index 16205e7..32f04b3 100644 --- a/turtle/detail/function_impl_template.hpp +++ b/include/turtle/detail/function_impl_template.hpp @@ -1,304 +1,308 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include "expectation_template.hpp" - -#ifndef MOCK_ERROR_POLICY -# error no error policy has been set -#endif - -#define MOCK_FUNCTION_FORMAT(z, n, N) \ - << ' ' << mock::format( t##n ) \ - << BOOST_PP_IF(BOOST_PP_EQUAL(N,n), ' ', ',') - -#define MOCK_FUNCTION_CONTEXT \ - boost::unit_test::lazy_ostream::instance() \ - << lazy_context( this ) \ - << '(' BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_FUNCTION_FORMAT, \ - BOOST_PP_DEC(MOCK_NUM_ARGS)) \ - << ')' \ - << lazy_expectations( this ) - -namespace mock -{ -namespace detail -{ - template< typename Signature > class function_impl; - - template< typename R - BOOST_PP_ENUM_TRAILING_PARAMS(MOCK_NUM_ARGS, typename T) > - class function_impl< R ( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > - : public verifiable, public boost::enable_shared_from_this< - function_impl< R ( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) )> > - { - public: - typedef safe_error< R, MOCK_ERROR_POLICY< R > > error_type; - - public: - function_impl() - : context_( 0 ) - , valid_( true ) - , mutex_( boost::make_shared< mutex >() ) - {} - virtual ~function_impl() - { - if( valid_ && ! std::uncaught_exception() ) - for( expectations_cit it = expectations_.begin(); - it != expectations_.end(); ++it ) - if( ! it->verify() ) - error_type::fail( "untriggered expectation", - boost::unit_test::lazy_ostream::instance() - << lazy_context( this ) - << lazy_expectations( this ), - it->file(), it->line() ); - if( context_ ) - context_->remove( *this ); - } - - virtual bool verify() const - { - lock _( mutex_ ); - for( expectations_cit it = expectations_.begin(); - it != expectations_.end(); ++it ) - if( ! it->verify() ) - { - valid_ = false; - error_type::fail( "verification failed", - boost::unit_test::lazy_ostream::instance() - << lazy_context( this ) - << lazy_expectations( this ), - it->file(), it->line() ); - } - return valid_; - } - - virtual void reset() - { - lock _( mutex_ ); - valid_ = true; - boost::shared_ptr< function_impl > guard = - this->shared_from_this(); - expectations_.clear(); - } - - private: - typedef expectation< - R( BOOST_PP_ENUM_PARAMS( MOCK_NUM_ARGS, T ) ) - > expectation_type; - - struct wrapper : wrapper_base< R, expectation_type > - { - wrapper( const boost::shared_ptr< mutex >& m, expectation_type& e ) - : wrapper_base< R, expectation_type >( e ) - , lock_( m ) - {} - - wrapper once() - { - this->e_->invoke( boost::make_shared< detail::once >() ); - return *this; - } - wrapper never() - { - this->e_->invoke( boost::make_shared< detail::never >() ); - return *this; - } - wrapper exactly( std::size_t count ) - { - this->e_->invoke( boost::make_shared< detail::exactly >( count ) ); - return *this; - } - wrapper at_least( std::size_t min ) - { - this->e_->invoke( boost::make_shared< detail::at_least >( min ) ); - return *this; - } - wrapper at_most( std::size_t max ) - { - this->e_->invoke( boost::make_shared< detail::at_most >( max ) ); - return *this; - } - wrapper between( std::size_t min, std::size_t max ) - { - this->e_->invoke( boost::make_shared< detail::between >( min, max ) ); - return *this; - } - -#ifndef MOCK_NUM_ARGS_0 - template< - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename Constraint_) - > - wrapper with( - BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c) ) - { - this->e_->with( - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, c) ); - return *this; - } -#if MOCK_NUM_ARGS > 1 - template< typename Constraint > - wrapper with( const Constraint& c ) - { - this->e_->with( c ); - return *this; - } -#endif -#endif - -#define MOCK_FUNCTION_IN_ADD(z, n, d) \ - this->e_->add( s##n ); - -#define MOCK_FUNCTION_IN(z, n, d) \ - wrapper in( BOOST_PP_ENUM_PARAMS(n, sequence& s) ) \ - { \ - BOOST_PP_REPEAT(n, MOCK_FUNCTION_IN_ADD, _) \ - return *this; \ - } - - BOOST_PP_REPEAT(MOCK_MAX_SEQUENCES, - MOCK_FUNCTION_IN, _) - -#undef MOCK_FUNCTION_IN -#undef MOCK_FUNCTION_IN_ADD - - template< typename TT > - void calls( TT t ) - { - this->e_->calls( t ); - } - template< typename TT > - void throws( TT t ) - { - this->e_->throws( t ); - } - template< typename TT > - void moves( TT t ) - { - this->e_->moves( t ); - } - - lock lock_; - }; - - public: - typedef wrapper wrapper_type; - - wrapper expect( const char* file, int line ) - { - lock _( mutex_ ); - expectations_.push_back( expectation_type( file, line ) ); - valid_ = true; - return wrapper( mutex_, expectations_.back() ); - } - wrapper expect() - { - lock _( mutex_ ); - expectations_.push_back( expectation_type() ); - valid_ = true; - return wrapper( mutex_, expectations_.back() ); - } - - R operator()( - BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, T, t) ) const - { - lock _( mutex_ ); - valid_ = false; - for( expectations_cit it = expectations_.begin(); - it != expectations_.end(); ++it ) - if( it->is_valid( - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, t) ) ) - { - if( ! it->invoke() ) - { - error_type::fail( "sequence failed", - MOCK_FUNCTION_CONTEXT, it->file(), it->line() ); - return error_type::abort(); - } - if( ! it->valid() ) - { - error_type::fail( "missing action", - MOCK_FUNCTION_CONTEXT, it->file(), it->line() ); - return error_type::abort(); - } - valid_ = true; - error_type::call( - MOCK_FUNCTION_CONTEXT, it->file(), it->line() ); - if( it->functor() ) - return it->functor()( - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, t) ); - return it->trigger(); - } - error_type::fail( "unexpected call", MOCK_FUNCTION_CONTEXT ); - return error_type::abort(); - } - - void add( context& c, const void* p, - boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ) - { - lock _( mutex_ ); - if( ! context_ ) - c.add( *this ); - c.add( p, *this, instance, type, name ); - context_ = &c; - } - - friend std::ostream& operator<<( - std::ostream& s, const function_impl& impl ) - { - lock _( impl.mutex_ ); - return s << lazy_context( &impl ) << lazy_expectations( &impl ); - } - - struct lazy_context - { - lazy_context( const function_impl* impl ) - : impl_( impl ) - {} - friend std::ostream& operator<<( - std::ostream& s, const lazy_context& c ) - { - if( c.impl_->context_ ) - c.impl_->context_->serialize( s, *c.impl_ ); - else - s << '?'; - return s; - } - const function_impl* impl_; - }; - - struct lazy_expectations - { - lazy_expectations( const function_impl* impl ) - : impl_( impl ) - {} - friend std::ostream& operator<<( - std::ostream& s, const lazy_expectations& e ) - { - for( expectations_cit it = e.impl_->expectations_.begin(); - it != e.impl_->expectations_.end(); ++it ) - s << std::endl << *it; - return s; - } - const function_impl* impl_; - }; - - typedef std::list< expectation_type > expectations_type; - typedef typename expectations_type::const_iterator expectations_cit; - - expectations_type expectations_; - context* context_; - mutable bool valid_; - const boost::shared_ptr< mutex > mutex_; - }; -} -} // mock - -#undef MOCK_FUNCTION_FORMAT -#undef MOCK_FUNCTION_CONTEXT +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2012 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include "expectation_template.hpp" + +#ifndef MOCK_ERROR_POLICY +# error no error policy has been set +#endif + +#define MOCK_FUNCTION_FORMAT(z, n, N) \ + << ' ' << mock::format( t##n ) \ + << BOOST_PP_IF(BOOST_PP_EQUAL(N,n), ' ', ',') + +#define MOCK_FUNCTION_CONTEXT \ + boost::unit_test::lazy_ostream::instance() \ + << lazy_context( this ) \ + << '(' BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_FUNCTION_FORMAT, \ + BOOST_PP_DEC(MOCK_NUM_ARGS)) \ + << ')' \ + << lazy_expectations( this ) + +namespace mock +{ +namespace detail +{ + template< typename Signature > class function_impl; + + template< typename R + BOOST_PP_ENUM_TRAILING_PARAMS(MOCK_NUM_ARGS, typename T) > + class function_impl< R ( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > + : public verifiable, public boost::enable_shared_from_this< + function_impl< R ( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) )> > + { + public: + typedef safe_error< R, MOCK_ERROR_POLICY< R > > error_type; + + public: + function_impl() + : context_( 0 ) + , valid_( true ) + , mutex_( boost::make_shared< mutex >() ) + {} + virtual ~function_impl() + { + if( valid_ && ! std::uncaught_exception() ) + for( expectations_cit it = expectations_.begin(); + it != expectations_.end(); ++it ) + if( ! it->verify() ) + error_type::fail( "untriggered expectation", + boost::unit_test::lazy_ostream::instance() + << lazy_context( this ) + << lazy_expectations( this ), + it->file(), it->line() ); + if( context_ ) + context_->remove( *this ); + } + + virtual bool verify() const + { + lock _( mutex_ ); + for( expectations_cit it = expectations_.begin(); + it != expectations_.end(); ++it ) + if( ! it->verify() ) + { + valid_ = false; + error_type::fail( "verification failed", + boost::unit_test::lazy_ostream::instance() + << lazy_context( this ) + << lazy_expectations( this ), + it->file(), it->line() ); + } + return valid_; + } + + virtual void reset() + { + lock _( mutex_ ); + valid_ = true; + boost::shared_ptr< function_impl > guard = + this->shared_from_this(); + expectations_.clear(); + } + + private: + typedef expectation< + R( BOOST_PP_ENUM_PARAMS( MOCK_NUM_ARGS, T ) ) + > expectation_type; + + struct wrapper : wrapper_base< R, expectation_type > + { + wrapper( const boost::shared_ptr< mutex >& m, expectation_type& e ) + : wrapper_base< R, expectation_type >( e ) + , lock_( m ) + {} + + wrapper once() + { + this->e_->invoke( boost::make_shared< detail::once >() ); + return *this; + } + wrapper never() + { + this->e_->invoke( boost::make_shared< detail::never >() ); + return *this; + } + wrapper exactly( std::size_t count ) + { + this->e_->invoke( + boost::make_shared< detail::exactly >( count ) ); + return *this; + } + wrapper at_least( std::size_t min ) + { + this->e_->invoke( + boost::make_shared< detail::at_least >( min ) ); + return *this; + } + wrapper at_most( std::size_t max ) + { + this->e_->invoke( + boost::make_shared< detail::at_most >( max ) ); + return *this; + } + wrapper between( std::size_t min, std::size_t max ) + { + this->e_->invoke( + boost::make_shared< detail::between >( min, max ) ); + return *this; + } + +#ifndef MOCK_NUM_ARGS_0 + template< + BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename Constraint_) + > + wrapper with( + BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c) ) + { + this->e_->with( + BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, c) ); + return *this; + } +#if MOCK_NUM_ARGS > 1 + template< typename Constraint > + wrapper with( const Constraint& c ) + { + this->e_->with( c ); + return *this; + } +#endif +#endif + +#define MOCK_FUNCTION_IN_ADD(z, n, d) \ + this->e_->add( s##n ); + +#define MOCK_FUNCTION_IN(z, n, d) \ + wrapper in( BOOST_PP_ENUM_PARAMS(n, sequence& s) ) \ + { \ + BOOST_PP_REPEAT(n, MOCK_FUNCTION_IN_ADD, _) \ + return *this; \ + } + + BOOST_PP_REPEAT(MOCK_MAX_SEQUENCES, + MOCK_FUNCTION_IN, _) + +#undef MOCK_FUNCTION_IN +#undef MOCK_FUNCTION_IN_ADD + + template< typename TT > + void calls( TT t ) + { + this->e_->calls( t ); + } + template< typename TT > + void throws( TT t ) + { + this->e_->throws( t ); + } + template< typename TT > + void moves( TT t ) + { + this->e_->moves( t ); + } + + lock lock_; + }; + + public: + typedef wrapper wrapper_type; + + wrapper expect( const char* file, int line ) + { + lock _( mutex_ ); + expectations_.push_back( expectation_type( file, line ) ); + valid_ = true; + return wrapper( mutex_, expectations_.back() ); + } + wrapper expect() + { + lock _( mutex_ ); + expectations_.push_back( expectation_type() ); + valid_ = true; + return wrapper( mutex_, expectations_.back() ); + } + + R operator()( + BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, T, t) ) const + { + lock _( mutex_ ); + valid_ = false; + for( expectations_cit it = expectations_.begin(); + it != expectations_.end(); ++it ) + if( it->is_valid( + BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, t) ) ) + { + if( ! it->invoke() ) + { + error_type::fail( "sequence failed", + MOCK_FUNCTION_CONTEXT, it->file(), it->line() ); + return error_type::abort(); + } + if( ! it->valid() ) + { + error_type::fail( "missing action", + MOCK_FUNCTION_CONTEXT, it->file(), it->line() ); + return error_type::abort(); + } + valid_ = true; + error_type::call( + MOCK_FUNCTION_CONTEXT, it->file(), it->line() ); + if( it->functor() ) + return it->functor()( + BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, t) ); + return it->trigger(); + } + error_type::fail( "unexpected call", MOCK_FUNCTION_CONTEXT ); + return error_type::abort(); + } + + void add( context& c, const void* p, + boost::unit_test::const_string instance, + boost::optional< type_name > type, + boost::unit_test::const_string name ) + { + lock _( mutex_ ); + if( ! context_ ) + c.add( *this ); + c.add( p, *this, instance, type, name ); + context_ = &c; + } + + friend std::ostream& operator<<( + std::ostream& s, const function_impl& impl ) + { + lock _( impl.mutex_ ); + return s << lazy_context( &impl ) << lazy_expectations( &impl ); + } + + struct lazy_context + { + lazy_context( const function_impl* impl ) + : impl_( impl ) + {} + friend std::ostream& operator<<( + std::ostream& s, const lazy_context& c ) + { + if( c.impl_->context_ ) + c.impl_->context_->serialize( s, *c.impl_ ); + else + s << '?'; + return s; + } + const function_impl* impl_; + }; + + struct lazy_expectations + { + lazy_expectations( const function_impl* impl ) + : impl_( impl ) + {} + friend std::ostream& operator<<( + std::ostream& s, const lazy_expectations& e ) + { + for( expectations_cit it = e.impl_->expectations_.begin(); + it != e.impl_->expectations_.end(); ++it ) + s << std::endl << *it; + return s; + } + const function_impl* impl_; + }; + + typedef std::list< expectation_type > expectations_type; + typedef typename expectations_type::const_iterator expectations_cit; + + expectations_type expectations_; + context* context_; + mutable bool valid_; + const boost::shared_ptr< mutex > mutex_; + }; +} +} // mock + +#undef MOCK_FUNCTION_FORMAT +#undef MOCK_FUNCTION_CONTEXT diff --git a/turtle/detail/function_iterate.hpp b/include/turtle/detail/function_iterate.hpp similarity index 96% rename from turtle/detail/function_iterate.hpp rename to include/turtle/detail/function_iterate.hpp index 7bf1794..f86538e 100644 --- a/turtle/detail/function_iterate.hpp +++ b/include/turtle/detail/function_iterate.hpp @@ -1,11 +1,11 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define MOCK_NUM_ARGS BOOST_PP_ITERATION() -#include "function_template.hpp" -#undef MOCK_NUM_ARGS +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2012 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define MOCK_NUM_ARGS BOOST_PP_ITERATION() +#include "function_template.hpp" +#undef MOCK_NUM_ARGS diff --git a/turtle/detail/function_template.hpp b/include/turtle/detail/function_template.hpp similarity index 96% rename from turtle/detail/function_template.hpp rename to include/turtle/detail/function_template.hpp index 1093f28..f356eca 100644 --- a/turtle/detail/function_template.hpp +++ b/include/turtle/detail/function_template.hpp @@ -1,111 +1,111 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include "function_impl_template.hpp" - -#define MOCK_FUNCTION_CALL(z, n, d ) \ - BOOST_PP_COMMA_IF(n) typename \ - boost::call_traits< T##n >::param_type - -#define MOCK_FUNCTION_PARAM(z, n, d) \ - MOCK_FUNCTION_CALL(z, n, d) t##n - -namespace mock -{ -namespace detail -{ - template< typename Signature > class function; - - template< typename R - BOOST_PP_ENUM_TRAILING_PARAMS(MOCK_NUM_ARGS, typename T) > - class function< R ( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > - { - public: - typedef R result_type; - - template< typename Args > - struct sig - { - typedef R type; - }; - - private: - typedef function_impl< - R ( BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_FUNCTION_CALL, _) ) - > impl_type; - typedef typename impl_type::wrapper_type expectation_type; - typedef typename impl_type::error_type error_type; - - public: - function() - : impl_( boost::make_shared< impl_type >() ) - {} - - bool verify() const - { - return impl_->verify(); - } - bool verify( const char* file, int line ) const - { - error_type::pass( file, line ); - return impl_->verify(); - } - void reset() - { - impl_->reset(); - } - void reset( const char* file, int line ) - { - error_type::pass( file, line ); - impl_->reset(); - } - - expectation_type expect( const char* file, int line ) - { - error_type::pass( file, line ); - return impl_->expect( file, line ); - } - expectation_type expect() - { - return impl_->expect(); - } - - R operator()( - BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_FUNCTION_PARAM, _) ) const - { - return (*impl_)( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, t) ); - } - - friend std::ostream& operator<<( std::ostream& s, const function& f ) - { - return s << *f.impl_; - } - - function& operator()( context& c, - boost::unit_test::const_string instance ) - { - impl_->add( c, impl_.get(), instance, boost::none, "" ); - return *this; - } - - void configure( context& c, const void* p, - boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ) const - { - impl_->add( c, p, instance, type, name ); - } - - private: - boost::shared_ptr< impl_type > impl_; - }; -} -} // mock - -#undef MOCK_FUNCTION_CALL -#undef MOCK_FUNCTION_PARAM +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include "function_impl_template.hpp" + +#define MOCK_FUNCTION_CALL(z, n, d ) \ + BOOST_PP_COMMA_IF(n) typename \ + boost::call_traits< T##n >::param_type + +#define MOCK_FUNCTION_PARAM(z, n, d) \ + MOCK_FUNCTION_CALL(z, n, d) t##n + +namespace mock +{ +namespace detail +{ + template< typename Signature > class function; + + template< typename R + BOOST_PP_ENUM_TRAILING_PARAMS(MOCK_NUM_ARGS, typename T) > + class function< R ( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > + { + public: + typedef R result_type; + + template< typename Args > + struct sig + { + typedef R type; + }; + + private: + typedef function_impl< + R ( BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_FUNCTION_CALL, _) ) + > impl_type; + typedef typename impl_type::wrapper_type expectation_type; + typedef typename impl_type::error_type error_type; + + public: + function() + : impl_( boost::make_shared< impl_type >() ) + {} + + bool verify() const + { + return impl_->verify(); + } + bool verify( const char* file, int line ) const + { + error_type::pass( file, line ); + return impl_->verify(); + } + void reset() + { + impl_->reset(); + } + void reset( const char* file, int line ) + { + error_type::pass( file, line ); + impl_->reset(); + } + + expectation_type expect( const char* file, int line ) + { + error_type::pass( file, line ); + return impl_->expect( file, line ); + } + expectation_type expect() + { + return impl_->expect(); + } + + R operator()( + BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_FUNCTION_PARAM, _) ) const + { + return (*impl_)( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, t) ); + } + + friend std::ostream& operator<<( std::ostream& s, const function& f ) + { + return s << *f.impl_; + } + + function& operator()( context& c, + boost::unit_test::const_string instance ) + { + impl_->add( c, impl_.get(), instance, boost::none, "" ); + return *this; + } + + void configure( context& c, const void* p, + boost::unit_test::const_string instance, + boost::optional< type_name > type, + boost::unit_test::const_string name ) const + { + impl_->add( c, p, instance, type, name ); + } + + private: + boost::shared_ptr< impl_type > impl_; + }; +} +} // mock + +#undef MOCK_FUNCTION_CALL +#undef MOCK_FUNCTION_PARAM diff --git a/turtle/detail/functor.hpp b/include/turtle/detail/functor.hpp similarity index 95% rename from turtle/detail/functor.hpp rename to include/turtle/detail/functor.hpp index b5c777e..232c7c9 100644 --- a/turtle/detail/functor.hpp +++ b/include/turtle/detail/functor.hpp @@ -1,52 +1,52 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_FUNCTOR_HPP_INCLUDED -#define MOCK_FUNCTOR_HPP_INCLUDED - -#include "../config.hpp" -#include "function.hpp" -#include "mutex.hpp" - -namespace mock -{ -namespace detail -{ - class functor_mutex_t : - public boost::unit_test::singleton< functor_mutex_t >, - public mutex - { - private: - BOOST_TEST_SINGLETON_CONS( functor_mutex_t ); - }; - BOOST_TEST_SINGLETON_INST( functor_mutex ) - - template< typename Signature > - struct functor : function< Signature > - { - functor() - { - scoped_lock _( functor_mutex ); - static functor* f = 0; - if( f ) - { - *this = *f; - f = 0; - functor_mutex.unlock(); - } - else - { - functor_mutex.lock(); - f = this; - } - } - }; -} -} // mock - -#endif // MOCK_FUNCTOR_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2012 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_FUNCTOR_HPP_INCLUDED +#define MOCK_FUNCTOR_HPP_INCLUDED + +#include "../config.hpp" +#include "function.hpp" +#include "mutex.hpp" + +namespace mock +{ +namespace detail +{ + class functor_mutex_t : + public boost::unit_test::singleton< functor_mutex_t >, + public mutex + { + private: + BOOST_TEST_SINGLETON_CONS( functor_mutex_t ); + }; + BOOST_TEST_SINGLETON_INST( functor_mutex ) + + template< typename Signature > + struct functor : function< Signature > + { + functor() + { + scoped_lock _( functor_mutex ); + static functor* f = 0; + if( f ) + { + *this = *f; + f = 0; + functor_mutex.unlock(); + } + else + { + functor_mutex.lock(); + f = this; + } + } + }; +} +} // mock + +#endif // MOCK_FUNCTOR_HPP_INCLUDED diff --git a/turtle/detail/group.hpp b/include/turtle/detail/group.hpp similarity index 96% rename from turtle/detail/group.hpp rename to include/turtle/detail/group.hpp index 7d97f00..d0668cc 100644 --- a/turtle/detail/group.hpp +++ b/include/turtle/detail/group.hpp @@ -1,64 +1,64 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_GROUP_HPP_INCLUDED -#define MOCK_GROUP_HPP_INCLUDED - -#include "../config.hpp" -#include "verifiable.hpp" -#include -#include -#include - -namespace mock -{ -namespace detail -{ - class group - { - public: - void add( verifiable& v ) - { - verifiables_.push_back( &v ); - } - void remove( verifiable& v ) - { - verifiables_.erase( - std::remove( verifiables_.begin(), verifiables_.end(), &v ), - verifiables_.end() ); - } - - bool verify() const - { - bool valid = true; - for( verifiables_cit it = verifiables_.begin(); - it != verifiables_.end(); ++it ) - if( ! (*it)->verify() ) - valid = false; - return valid; - } - void reset() - { - const verifiables_t verifiables = verifiables_; - for( verifiables_cit it = verifiables.begin(); - it != verifiables.end(); ++it ) - if( std::find( verifiables_.begin(), verifiables_.end(), *it ) - != verifiables_.end() ) - (*it)->reset(); - } - - private: - typedef std::vector< verifiable* > verifiables_t; - typedef verifiables_t::const_iterator verifiables_cit; - - verifiables_t verifiables_; - }; -} -} // mock - -#endif // MOCK_GROUP_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_GROUP_HPP_INCLUDED +#define MOCK_GROUP_HPP_INCLUDED + +#include "../config.hpp" +#include "verifiable.hpp" +#include +#include +#include + +namespace mock +{ +namespace detail +{ + class group + { + public: + void add( verifiable& v ) + { + verifiables_.push_back( &v ); + } + void remove( verifiable& v ) + { + verifiables_.erase( + std::remove( verifiables_.begin(), verifiables_.end(), &v ), + verifiables_.end() ); + } + + bool verify() const + { + bool valid = true; + for( verifiables_cit it = verifiables_.begin(); + it != verifiables_.end(); ++it ) + if( ! (*it)->verify() ) + valid = false; + return valid; + } + void reset() + { + const verifiables_t verifiables = verifiables_; + for( verifiables_cit it = verifiables.begin(); + it != verifiables.end(); ++it ) + if( std::find( verifiables_.begin(), verifiables_.end(), *it ) + != verifiables_.end() ) + (*it)->reset(); + } + + private: + typedef std::vector< verifiable* > verifiables_t; + typedef verifiables_t::const_iterator verifiables_cit; + + verifiables_t verifiables_; + }; +} +} // mock + +#endif // MOCK_GROUP_HPP_INCLUDED diff --git a/turtle/detail/invocation.hpp b/include/turtle/detail/invocation.hpp similarity index 95% rename from turtle/detail/invocation.hpp rename to include/turtle/detail/invocation.hpp index bf13310..fd1c0f6 100644 --- a/turtle/detail/invocation.hpp +++ b/include/turtle/detail/invocation.hpp @@ -1,170 +1,170 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_INVOCATION_HPP_INCLUDED -#define MOCK_INVOCATION_HPP_INCLUDED - -#include "../config.hpp" -#include -#include -#include -#include - -namespace mock -{ -namespace detail -{ - class invocation : private boost::noncopyable - { - public: - invocation() {} - virtual ~invocation() {} - - virtual bool invoke() = 0; - virtual bool verify() const = 0; - - virtual bool exhausted() const = 0; - - friend std::ostream& operator<<( std::ostream& s, const invocation& i ) - { - return i.serialize( s ); - } - - private: - virtual std::ostream& serialize( std::ostream& s ) const = 0; - }; - - class between : public invocation - { - public: - between( std::size_t min, std::size_t max ) - : min_( min ) - , max_( max ) - , count_( 0 ) - { - if( min > max ) - throw std::invalid_argument( "'min' > 'max'" ); - } - - virtual bool invoke() - { - if( count_ == max_ ) - return false; - ++count_; - return true; - } - - virtual bool exhausted() const - { - return count_ >= max_; - } - - virtual bool verify() const - { - return min_ <= count_ && count_ <= max_; - } - - protected: - const std::size_t min_, max_; - std::size_t count_; - - private: - virtual std::ostream& serialize( std::ostream& s ) const - { - return s << "between( " << count_ - << "/[" << min_ << ',' << max_ << "] )"; - } - }; - - class exactly : public between - { - public: - explicit exactly( std::size_t count ) - : between( count, count ) - {} - - private: - virtual std::ostream& serialize( std::ostream& s ) const - { - return s << "exactly( " << count_ << '/' << max_ << " )"; - } - }; - - class never : public exactly - { - public: - never() - : exactly( 0 ) - {} - - private: - virtual std::ostream& serialize( std::ostream& s ) const - { - return s << "never()"; - } - }; - - class once : public exactly - { - public: - once() - : exactly( 1 ) - {} - - private: - virtual std::ostream& serialize( std::ostream& s ) const - { - return s << "once()"; - } - }; - - class at_least : public between - { - public: - explicit at_least( std::size_t min ) - : between( min, (std::numeric_limits< std::size_t >::max)() ) - {} - - private: - virtual std::ostream& serialize( std::ostream& s ) const - { - return s << "at_least( " << count_ << '/' << min_ << " )"; - } - }; - - class at_most : public between - { - public: - explicit at_most( std::size_t max ) - : between( 0, max ) - {} - - private: - virtual std::ostream& serialize( std::ostream& s ) const - { - return s << "at_most( " << count_ << '/' << max_ << " )"; - } - }; - - class unlimited : public at_least - { - public: - unlimited() - : at_least( 0 ) - {} - - private: - virtual std::ostream& serialize( std::ostream& s ) const - { - return s << "unlimited()"; - } - }; -} -} // mock - -#endif // MOCK_INVOCATION_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_INVOCATION_HPP_INCLUDED +#define MOCK_INVOCATION_HPP_INCLUDED + +#include "../config.hpp" +#include +#include +#include +#include + +namespace mock +{ +namespace detail +{ + class invocation : private boost::noncopyable + { + public: + invocation() {} + virtual ~invocation() {} + + virtual bool invoke() = 0; + virtual bool verify() const = 0; + + virtual bool exhausted() const = 0; + + friend std::ostream& operator<<( std::ostream& s, const invocation& i ) + { + return i.serialize( s ); + } + + private: + virtual std::ostream& serialize( std::ostream& s ) const = 0; + }; + + class between : public invocation + { + public: + between( std::size_t min, std::size_t max ) + : min_( min ) + , max_( max ) + , count_( 0 ) + { + if( min > max ) + throw std::invalid_argument( "'min' > 'max'" ); + } + + virtual bool invoke() + { + if( count_ == max_ ) + return false; + ++count_; + return true; + } + + virtual bool exhausted() const + { + return count_ >= max_; + } + + virtual bool verify() const + { + return min_ <= count_ && count_ <= max_; + } + + protected: + const std::size_t min_, max_; + std::size_t count_; + + private: + virtual std::ostream& serialize( std::ostream& s ) const + { + return s << "between( " << count_ + << "/[" << min_ << ',' << max_ << "] )"; + } + }; + + class exactly : public between + { + public: + explicit exactly( std::size_t count ) + : between( count, count ) + {} + + private: + virtual std::ostream& serialize( std::ostream& s ) const + { + return s << "exactly( " << count_ << '/' << max_ << " )"; + } + }; + + class never : public exactly + { + public: + never() + : exactly( 0 ) + {} + + private: + virtual std::ostream& serialize( std::ostream& s ) const + { + return s << "never()"; + } + }; + + class once : public exactly + { + public: + once() + : exactly( 1 ) + {} + + private: + virtual std::ostream& serialize( std::ostream& s ) const + { + return s << "once()"; + } + }; + + class at_least : public between + { + public: + explicit at_least( std::size_t min ) + : between( min, (std::numeric_limits< std::size_t >::max)() ) + {} + + private: + virtual std::ostream& serialize( std::ostream& s ) const + { + return s << "at_least( " << count_ << '/' << min_ << " )"; + } + }; + + class at_most : public between + { + public: + explicit at_most( std::size_t max ) + : between( 0, max ) + {} + + private: + virtual std::ostream& serialize( std::ostream& s ) const + { + return s << "at_most( " << count_ << '/' << max_ << " )"; + } + }; + + class unlimited : public at_least + { + public: + unlimited() + : at_least( 0 ) + {} + + private: + virtual std::ostream& serialize( std::ostream& s ) const + { + return s << "unlimited()"; + } + }; +} +} // mock + +#endif // MOCK_INVOCATION_HPP_INCLUDED diff --git a/turtle/detail/is_functor.hpp b/include/turtle/detail/is_functor.hpp similarity index 96% rename from turtle/detail/is_functor.hpp rename to include/turtle/detail/is_functor.hpp index c2007b0..5d4de95 100644 --- a/turtle/detail/is_functor.hpp +++ b/include/turtle/detail/is_functor.hpp @@ -1,62 +1,62 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2009 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_IS_FUNCTOR_HPP_INCLUDED -#define MOCK_IS_FUNCTOR_HPP_INCLUDED - -#include "../config.hpp" -#include -#include -#include -#include -#include - -namespace mock -{ -namespace detail -{ - BOOST_MPL_HAS_XXX_TRAIT_DEF( result_type ) - BOOST_MPL_HAS_XXX_TEMPLATE_DEF( sig ) - BOOST_MPL_HAS_XXX_TEMPLATE_DEF( result ) - -#ifdef MOCK_DECLTYPE - - template< typename F, typename P > - struct is_callable - { - typedef boost::type_traits::yes_type yes_type; - typedef boost::type_traits::no_type no_type; - - template< typename T > - static yes_type check( - decltype( boost::declval< T >()( boost::declval< P >() ) )* ); - template< typename T > - static no_type check( ... ); - - typedef boost::mpl::bool_< - sizeof( check< F >( 0 ) ) == sizeof( yes_type ) > type; - }; - -#endif // MOCK_DECLTYPE - - template< typename T, typename P > - struct is_functor - : boost::mpl::or_< - boost::function_types::is_callable_builtin< T >, -#ifdef MOCK_DECLTYPE - is_callable< T, P >, -#endif - has_result_type< T >, - has_result< T >, - has_sig< T > - > - {}; -} -} // mock - -#endif // MOCK_IS_FUNCTOR_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2009 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_IS_FUNCTOR_HPP_INCLUDED +#define MOCK_IS_FUNCTOR_HPP_INCLUDED + +#include "../config.hpp" +#include +#include +#include +#include +#include + +namespace mock +{ +namespace detail +{ + BOOST_MPL_HAS_XXX_TRAIT_DEF( result_type ) + BOOST_MPL_HAS_XXX_TEMPLATE_DEF( sig ) + BOOST_MPL_HAS_XXX_TEMPLATE_DEF( result ) + +#ifdef MOCK_DECLTYPE + + template< typename F, typename P > + struct is_callable + { + typedef boost::type_traits::yes_type yes_type; + typedef boost::type_traits::no_type no_type; + + template< typename T > + static yes_type check( + decltype( boost::declval< T >()( boost::declval< P >() ) )* ); + template< typename T > + static no_type check( ... ); + + typedef boost::mpl::bool_< + sizeof( check< F >( 0 ) ) == sizeof( yes_type ) > type; + }; + +#endif // MOCK_DECLTYPE + + template< typename T, typename P > + struct is_functor + : boost::mpl::or_< + boost::function_types::is_callable_builtin< T >, +#ifdef MOCK_DECLTYPE + is_callable< T, P >, +#endif + has_result_type< T >, + has_result< T >, + has_sig< T > + > + {}; +} +} // mock + +#endif // MOCK_IS_FUNCTOR_HPP_INCLUDED diff --git a/turtle/detail/matcher_base_template.hpp b/include/turtle/detail/matcher_base_template.hpp similarity index 96% rename from turtle/detail/matcher_base_template.hpp rename to include/turtle/detail/matcher_base_template.hpp index 7636c2f..d3d0993 100644 --- a/turtle/detail/matcher_base_template.hpp +++ b/include/turtle/detail/matcher_base_template.hpp @@ -1,37 +1,37 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -namespace mock -{ -namespace detail -{ - template< typename Signature > class matcher_base; - - template< - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename Actual_) > - class matcher_base< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, Actual_) ) > - : boost::noncopyable - { - public: - virtual ~matcher_base() {} - - virtual bool operator()( - BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Actual_, actual_) ) = 0; - - friend std::ostream& operator<<( - std::ostream& s, const matcher_base& m ) - { - m.serialize( s ); - return s; - } - - private: - virtual void serialize( std::ostream& ) const = 0; - }; -} -} // mock +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2012 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +namespace mock +{ +namespace detail +{ + template< typename Signature > class matcher_base; + + template< + BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename Actual_) > + class matcher_base< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, Actual_) ) > + : boost::noncopyable + { + public: + virtual ~matcher_base() {} + + virtual bool operator()( + BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Actual_, actual_) ) = 0; + + friend std::ostream& operator<<( + std::ostream& s, const matcher_base& m ) + { + m.serialize( s ); + return s; + } + + private: + virtual void serialize( std::ostream& ) const = 0; + }; +} +} // mock diff --git a/turtle/detail/mutex.hpp b/include/turtle/detail/mutex.hpp similarity index 95% rename from turtle/detail/mutex.hpp rename to include/turtle/detail/mutex.hpp index fdb643d..4837c6c 100644 --- a/turtle/detail/mutex.hpp +++ b/include/turtle/detail/mutex.hpp @@ -1,141 +1,141 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2014 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_MUTEX_HPP_INCLUDED -#define MOCK_MUTEX_HPP_INCLUDED - -#include "../config.hpp" -#include -#include - -#ifdef MOCK_THREAD_SAFE - -#ifdef MOCK_HDR_MUTEX -#include -#else -#include -#include -#endif - -namespace mock -{ -namespace detail -{ -#ifdef MOCK_HDR_MUTEX - typedef std::recursive_mutex mutex; - typedef std::lock_guard< mutex > scoped_lock; -#else - typedef boost::recursive_mutex mutex; - typedef boost::lock_guard< mutex > scoped_lock; -#endif - - struct lock - { - lock( const boost::shared_ptr< mutex >& m ) - : m_( m ) - { - m_->lock(); - } - lock( const lock& rhs ) - { - m_.swap( rhs.m_ ); - } - ~lock() - { - if( m_ ) - m_->unlock(); - } - - private: - lock& operator=( const lock& rhs ); - - mutable boost::shared_ptr< mutex > m_; - }; -} -} // mock - -#else // MOCK_THREAD_SAFE - -namespace mock -{ -namespace detail -{ - struct mutex - { - mutex() - {} - void lock() - {} - void unlock() - {} - }; - struct scoped_lock - { - scoped_lock( mutex& ) - {} - }; - struct lock - { - lock( const boost::shared_ptr< mutex >& ) - {} - }; -} -} // mock - -#endif // MOCK_THREAD_SAFE - -namespace mock -{ -namespace detail -{ - class error_mutex_t : public boost::unit_test::singleton< error_mutex_t >, - public mutex - { - private: - BOOST_TEST_SINGLETON_CONS( error_mutex_t ); - }; - BOOST_TEST_SINGLETON_INST( error_mutex ) - -#ifdef BOOST_MSVC -# pragma warning( push ) -# pragma warning( disable: 4702 ) -#endif - template< typename Result, typename Error > - struct safe_error - { - static Result abort() - { - scoped_lock _( error_mutex ); - return Error::abort(); - } - template< typename Context > - static void fail( const char* message, const Context& context, - const char* file = "unknown location", int line = 0 ) - { - scoped_lock _( error_mutex ); - Error::fail( message, context, file, line ); - } - template< typename Context > - static void call( const Context& context, const char* file, int line ) - { - scoped_lock _( error_mutex ); - Error::call( context, file, line ); - } - static void pass( const char* file, int line ) - { - scoped_lock _( error_mutex ); - Error::pass( file, line ); - } - }; -#ifdef BOOST_MSVC -# pragma warning( pop ) -#endif -} -} // mock - -#endif // MOCK_MUTEX_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2014 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_MUTEX_HPP_INCLUDED +#define MOCK_MUTEX_HPP_INCLUDED + +#include "../config.hpp" +#include +#include + +#ifdef MOCK_THREAD_SAFE + +#ifdef MOCK_HDR_MUTEX +#include +#else +#include +#include +#endif + +namespace mock +{ +namespace detail +{ +#ifdef MOCK_HDR_MUTEX + typedef std::recursive_mutex mutex; + typedef std::lock_guard< mutex > scoped_lock; +#else + typedef boost::recursive_mutex mutex; + typedef boost::lock_guard< mutex > scoped_lock; +#endif + + struct lock + { + lock( const boost::shared_ptr< mutex >& m ) + : m_( m ) + { + m_->lock(); + } + lock( const lock& rhs ) + { + m_.swap( rhs.m_ ); + } + ~lock() + { + if( m_ ) + m_->unlock(); + } + + private: + lock& operator=( const lock& rhs ); + + mutable boost::shared_ptr< mutex > m_; + }; +} +} // mock + +#else // MOCK_THREAD_SAFE + +namespace mock +{ +namespace detail +{ + struct mutex + { + mutex() + {} + void lock() + {} + void unlock() + {} + }; + struct scoped_lock + { + scoped_lock( mutex& ) + {} + }; + struct lock + { + lock( const boost::shared_ptr< mutex >& ) + {} + }; +} +} // mock + +#endif // MOCK_THREAD_SAFE + +namespace mock +{ +namespace detail +{ + class error_mutex_t : public boost::unit_test::singleton< error_mutex_t >, + public mutex + { + private: + BOOST_TEST_SINGLETON_CONS( error_mutex_t ); + }; + BOOST_TEST_SINGLETON_INST( error_mutex ) + +#ifdef BOOST_MSVC +# pragma warning( push ) +# pragma warning( disable: 4702 ) +#endif + template< typename Result, typename Error > + struct safe_error + { + static Result abort() + { + scoped_lock _( error_mutex ); + return Error::abort(); + } + template< typename Context > + static void fail( const char* message, const Context& context, + const char* file = "unknown location", int line = 0 ) + { + scoped_lock _( error_mutex ); + Error::fail( message, context, file, line ); + } + template< typename Context > + static void call( const Context& context, const char* file, int line ) + { + scoped_lock _( error_mutex ); + Error::call( context, file, line ); + } + static void pass( const char* file, int line ) + { + scoped_lock _( error_mutex ); + Error::pass( file, line ); + } + }; +#ifdef BOOST_MSVC +# pragma warning( pop ) +#endif +} +} // mock + +#endif // MOCK_MUTEX_HPP_INCLUDED diff --git a/turtle/detail/object_impl.hpp b/include/turtle/detail/object_impl.hpp similarity index 96% rename from turtle/detail/object_impl.hpp rename to include/turtle/detail/object_impl.hpp index 20e3fa1..6aa215f 100644 --- a/turtle/detail/object_impl.hpp +++ b/include/turtle/detail/object_impl.hpp @@ -1,94 +1,94 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_OBJECT_IMPL_HPP_INCLUDED -#define MOCK_OBJECT_IMPL_HPP_INCLUDED - -#include "../config.hpp" -#include "root.hpp" -#include "parent.hpp" -#include "type_name.hpp" -#include "context.hpp" -#include "child.hpp" -#include "mutex.hpp" -#include -#include -#include -#include - -namespace mock -{ -namespace detail -{ - class object_impl : public context, public verifiable, - public boost::enable_shared_from_this< object_impl > - { - public: - object_impl() - : mutex_( boost::make_shared< mutex >() ) - {} - - virtual void add( const void* /*p*/, verifiable& v, - boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ) - { - lock _( mutex_ ); - if( children_.empty() ) - detail::root.add( *this ); - children_[ &v ].update( parent_, instance, type, name ); - } - virtual void add( verifiable& v ) - { - lock _( mutex_ ); - group_.add( v ); - } - virtual void remove( verifiable& v ) - { - lock _( mutex_ ); - group_.remove( v ); - children_.erase( &v ); - if( children_.empty() ) - detail::root.remove( *this ); - } - - virtual void serialize( std::ostream& s, const verifiable& v ) const - { - lock _( mutex_ ); - children_cit it = children_.find( &v ); - if( it != children_.end() ) - s << it->second; - else - s << "?"; - } - - virtual bool verify() const - { - lock _( mutex_ ); - return group_.verify(); - } - virtual void reset() - { - lock _( mutex_ ); - boost::shared_ptr< object_impl > guard = shared_from_this(); - group_.reset(); - } - - private: - typedef std::map< const verifiable*, child > children_t; - typedef children_t::const_iterator children_cit; - - group group_; - parent parent_; - children_t children_; - const boost::shared_ptr< mutex > mutex_; - }; -} -} // mock - -#endif // MOCK_OBJECT_IMPL_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2012 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_OBJECT_IMPL_HPP_INCLUDED +#define MOCK_OBJECT_IMPL_HPP_INCLUDED + +#include "../config.hpp" +#include "root.hpp" +#include "parent.hpp" +#include "type_name.hpp" +#include "context.hpp" +#include "child.hpp" +#include "mutex.hpp" +#include +#include +#include +#include + +namespace mock +{ +namespace detail +{ + class object_impl : public context, public verifiable, + public boost::enable_shared_from_this< object_impl > + { + public: + object_impl() + : mutex_( boost::make_shared< mutex >() ) + {} + + virtual void add( const void* /*p*/, verifiable& v, + boost::unit_test::const_string instance, + boost::optional< type_name > type, + boost::unit_test::const_string name ) + { + lock _( mutex_ ); + if( children_.empty() ) + detail::root.add( *this ); + children_[ &v ].update( parent_, instance, type, name ); + } + virtual void add( verifiable& v ) + { + lock _( mutex_ ); + group_.add( v ); + } + virtual void remove( verifiable& v ) + { + lock _( mutex_ ); + group_.remove( v ); + children_.erase( &v ); + if( children_.empty() ) + detail::root.remove( *this ); + } + + virtual void serialize( std::ostream& s, const verifiable& v ) const + { + lock _( mutex_ ); + children_cit it = children_.find( &v ); + if( it != children_.end() ) + s << it->second; + else + s << "?"; + } + + virtual bool verify() const + { + lock _( mutex_ ); + return group_.verify(); + } + virtual void reset() + { + lock _( mutex_ ); + boost::shared_ptr< object_impl > guard = shared_from_this(); + group_.reset(); + } + + private: + typedef std::map< const verifiable*, child > children_t; + typedef children_t::const_iterator children_cit; + + group group_; + parent parent_; + children_t children_; + const boost::shared_ptr< mutex > mutex_; + }; +} +} // mock + +#endif // MOCK_OBJECT_IMPL_HPP_INCLUDED diff --git a/turtle/detail/parameter.hpp b/include/turtle/detail/parameter.hpp similarity index 96% rename from turtle/detail/parameter.hpp rename to include/turtle/detail/parameter.hpp index 2135fd2..38925a2 100644 --- a/turtle/detail/parameter.hpp +++ b/include/turtle/detail/parameter.hpp @@ -1,34 +1,34 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_PARAMETER_HPP_INCLUDED -#define MOCK_PARAMETER_HPP_INCLUDED - -#include "../config.hpp" -#include -#include -#include - -namespace mock -{ -namespace detail -{ - template< typename Signature, int n > - struct parameter - { - typedef typename - boost::mpl::at_c< - typename - boost::function_types::parameter_types< Signature >, - n - >::type type; - }; -} -} // mock - -#endif // MOCK_PARAMETER_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2012 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_PARAMETER_HPP_INCLUDED +#define MOCK_PARAMETER_HPP_INCLUDED + +#include "../config.hpp" +#include +#include +#include + +namespace mock +{ +namespace detail +{ + template< typename Signature, int n > + struct parameter + { + typedef typename + boost::mpl::at_c< + typename + boost::function_types::parameter_types< Signature >, + n + >::type type; + }; +} +} // mock + +#endif // MOCK_PARAMETER_HPP_INCLUDED diff --git a/turtle/detail/parent.hpp b/include/turtle/detail/parent.hpp similarity index 95% rename from turtle/detail/parent.hpp rename to include/turtle/detail/parent.hpp index d793273..0d14e77 100644 --- a/turtle/detail/parent.hpp +++ b/include/turtle/detail/parent.hpp @@ -1,46 +1,46 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_PARENT_HPP_INCLUDED -#define MOCK_PARENT_HPP_INCLUDED - -#include "../config.hpp" -#include "type_name.hpp" -#include -#include -#include - -namespace mock -{ -namespace detail -{ - class parent - { - public: - parent() - {} - parent( boost::unit_test::const_string instance, - boost::optional< type_name > type ) - : instance_( instance ) - , type_( type ) - {} - friend std::ostream& operator<<( std::ostream& s, const parent& p ) - { - s << p.instance_; - if( p.type_ ) - s << *p.type_ << "::"; - return s; - } - private: - boost::unit_test::const_string instance_; - boost::optional< type_name > type_; - }; -} -} // mock - -#endif // MOCK_PARENT_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_PARENT_HPP_INCLUDED +#define MOCK_PARENT_HPP_INCLUDED + +#include "../config.hpp" +#include "type_name.hpp" +#include +#include +#include + +namespace mock +{ +namespace detail +{ + class parent + { + public: + parent() + {} + parent( boost::unit_test::const_string instance, + boost::optional< type_name > type ) + : instance_( instance ) + , type_( type ) + {} + friend std::ostream& operator<<( std::ostream& s, const parent& p ) + { + s << p.instance_; + if( p.type_ ) + s << *p.type_ << "::"; + return s; + } + private: + boost::unit_test::const_string instance_; + boost::optional< type_name > type_; + }; +} +} // mock + +#endif // MOCK_PARENT_HPP_INCLUDED diff --git a/turtle/detail/root.hpp b/include/turtle/detail/root.hpp similarity index 96% rename from turtle/detail/root.hpp rename to include/turtle/detail/root.hpp index d56954c..2006a28 100644 --- a/turtle/detail/root.hpp +++ b/include/turtle/detail/root.hpp @@ -1,138 +1,138 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_ROOT_HPP_INCLUDED -#define MOCK_ROOT_HPP_INCLUDED - -#include "../config.hpp" -#include "parent.hpp" -#include "group.hpp" -#include "context.hpp" -#include "child.hpp" -#include "mutex.hpp" -#include -#include -#include -#include - -namespace mock -{ -namespace detail -{ - class root_t : public boost::unit_test::singleton< root_t >, public context - { - public: - virtual void add( const void* p, verifiable& v, - boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ) - { - scoped_lock _( mutex_ ); - children_t::iterator it = children_.lower_bound( &v ); - if( it == children_.end() || - children_.key_comp()( &v, it->first ) ) - it = children_.insert( it, - std::make_pair( &v, counter_child( parents_, p ) ) ); - it->second.update( instance, type, name ); - } - virtual void add( verifiable& v ) - { - scoped_lock _( mutex_ ); - group_.add( v ); - } - - virtual void remove( verifiable& v ) - { - scoped_lock _( mutex_ ); - group_.remove( v ); - children_.erase( &v ); - } - - bool verify() const - { - scoped_lock _( mutex_ ); - return group_.verify(); - } - void reset() - { - scoped_lock _( mutex_ ); - group_.reset(); - } - - virtual void serialize( std::ostream& s, const verifiable& v ) const - { - scoped_lock _( mutex_ ); - children_cit it = children_.find( &v ); - if( it != children_.end() ) - s << it->second; - else - s << "?"; - } - - private: - typedef std::map< const void*, - std::pair< parent, std::size_t > > parents_t; - - class counter_child - { - public: - counter_child( parents_t& parents, const void* p ) - : parents_( &parents ) - , it_( parents.insert( - std::make_pair( p, parents_t::mapped_type() ) ).first ) - { - ++it_->second.second; - } - counter_child( const counter_child& rhs ) - : parents_( rhs.parents_ ) - , it_( rhs.it_ ) - , child_( rhs.child_ ) - { - ++it_->second.second; - } - ~counter_child() - { - if( --it_->second.second == 0 ) - parents_->erase( it_ ); - } - void update( boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ) - { - child_.update( it_->second.first, instance, type, name ); - } - friend std::ostream& operator<<( std::ostream& s, - const counter_child& c ) - { - return s << c.child_; - } - - private: - counter_child& operator=( const counter_child& ); - - parents_t* parents_; - parents_t::iterator it_; - child child_; - }; - - typedef std::map< const verifiable*, counter_child > children_t; - typedef children_t::const_iterator children_cit; - - parents_t parents_; - children_t children_; - group group_; - mutable mutex mutex_; - - private: - BOOST_TEST_SINGLETON_CONS( root_t ); - }; - BOOST_TEST_SINGLETON_INST( root ) -} -} // mock - -#endif // MOCK_ROOT_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_ROOT_HPP_INCLUDED +#define MOCK_ROOT_HPP_INCLUDED + +#include "../config.hpp" +#include "parent.hpp" +#include "group.hpp" +#include "context.hpp" +#include "child.hpp" +#include "mutex.hpp" +#include +#include +#include +#include + +namespace mock +{ +namespace detail +{ + class root_t : public boost::unit_test::singleton< root_t >, public context + { + public: + virtual void add( const void* p, verifiable& v, + boost::unit_test::const_string instance, + boost::optional< type_name > type, + boost::unit_test::const_string name ) + { + scoped_lock _( mutex_ ); + children_t::iterator it = children_.lower_bound( &v ); + if( it == children_.end() || + children_.key_comp()( &v, it->first ) ) + it = children_.insert( it, + std::make_pair( &v, counter_child( parents_, p ) ) ); + it->second.update( instance, type, name ); + } + virtual void add( verifiable& v ) + { + scoped_lock _( mutex_ ); + group_.add( v ); + } + + virtual void remove( verifiable& v ) + { + scoped_lock _( mutex_ ); + group_.remove( v ); + children_.erase( &v ); + } + + bool verify() const + { + scoped_lock _( mutex_ ); + return group_.verify(); + } + void reset() + { + scoped_lock _( mutex_ ); + group_.reset(); + } + + virtual void serialize( std::ostream& s, const verifiable& v ) const + { + scoped_lock _( mutex_ ); + children_cit it = children_.find( &v ); + if( it != children_.end() ) + s << it->second; + else + s << "?"; + } + + private: + typedef std::map< const void*, + std::pair< parent, std::size_t > > parents_t; + + class counter_child + { + public: + counter_child( parents_t& parents, const void* p ) + : parents_( &parents ) + , it_( parents.insert( + std::make_pair( p, parents_t::mapped_type() ) ).first ) + { + ++it_->second.second; + } + counter_child( const counter_child& rhs ) + : parents_( rhs.parents_ ) + , it_( rhs.it_ ) + , child_( rhs.child_ ) + { + ++it_->second.second; + } + ~counter_child() + { + if( --it_->second.second == 0 ) + parents_->erase( it_ ); + } + void update( boost::unit_test::const_string instance, + boost::optional< type_name > type, + boost::unit_test::const_string name ) + { + child_.update( it_->second.first, instance, type, name ); + } + friend std::ostream& operator<<( std::ostream& s, + const counter_child& c ) + { + return s << c.child_; + } + + private: + counter_child& operator=( const counter_child& ); + + parents_t* parents_; + parents_t::iterator it_; + child child_; + }; + + typedef std::map< const verifiable*, counter_child > children_t; + typedef children_t::const_iterator children_cit; + + parents_t parents_; + children_t children_; + group group_; + mutable mutex mutex_; + + private: + BOOST_TEST_SINGLETON_CONS( root_t ); + }; + BOOST_TEST_SINGLETON_INST( root ) +} +} // mock + +#endif // MOCK_ROOT_HPP_INCLUDED diff --git a/turtle/detail/sequence_impl.hpp b/include/turtle/detail/sequence_impl.hpp similarity index 96% rename from turtle/detail/sequence_impl.hpp rename to include/turtle/detail/sequence_impl.hpp index 63ed319..26ad742 100644 --- a/turtle/detail/sequence_impl.hpp +++ b/include/turtle/detail/sequence_impl.hpp @@ -1,57 +1,57 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_SEQUENCE_IMPL_HPP_INCLUDED -#define MOCK_SEQUENCE_IMPL_HPP_INCLUDED - -#include "../config.hpp" -#include -#include -#include -#include - -namespace mock -{ -namespace detail -{ - class sequence_impl : private boost::noncopyable - { - public: - void add( void* e ) - { - elements_.push_back( e ); - } - void remove( void* e ) - { - elements_.erase( std::remove( elements_.begin(), - elements_.end(), e ), elements_.end() ); - } - - bool is_valid( const void* e ) const - { - return std::find( elements_.begin(), elements_.end(), e ) - != elements_.end(); - } - - void invalidate( const void* e ) - { - elements_type::iterator it = - std::find( elements_.begin(), elements_.end(), e ); - if( it != elements_.end() ) - elements_.erase( elements_.begin(), it ); - } - - private: - typedef std::vector< void* > elements_type; - - elements_type elements_; - }; -} -} // mock - -#endif // MOCK_SEQUENCE_IMPL_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2012 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_SEQUENCE_IMPL_HPP_INCLUDED +#define MOCK_SEQUENCE_IMPL_HPP_INCLUDED + +#include "../config.hpp" +#include +#include +#include +#include + +namespace mock +{ +namespace detail +{ + class sequence_impl : private boost::noncopyable + { + public: + void add( void* e ) + { + elements_.push_back( e ); + } + void remove( void* e ) + { + elements_.erase( std::remove( elements_.begin(), + elements_.end(), e ), elements_.end() ); + } + + bool is_valid( const void* e ) const + { + return std::find( elements_.begin(), elements_.end(), e ) + != elements_.end(); + } + + void invalidate( const void* e ) + { + elements_type::iterator it = + std::find( elements_.begin(), elements_.end(), e ); + if( it != elements_.end() ) + elements_.erase( elements_.begin(), it ); + } + + private: + typedef std::vector< void* > elements_type; + + elements_type elements_; + }; +} +} // mock + +#endif // MOCK_SEQUENCE_IMPL_HPP_INCLUDED diff --git a/turtle/detail/signature.hpp b/include/turtle/detail/signature.hpp similarity index 96% rename from turtle/detail/signature.hpp rename to include/turtle/detail/signature.hpp index 796e70f..03c016c 100644 --- a/turtle/detail/signature.hpp +++ b/include/turtle/detail/signature.hpp @@ -1,63 +1,63 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_SIGNATURE_HPP_INCLUDED -#define MOCK_SIGNATURE_HPP_INCLUDED - -#include "../config.hpp" -#include -#include -#include -#include -#include -#include -#define BOOST_TYPEOF_SILENT -#include - -namespace mock -{ -namespace detail -{ - template< typename M > - struct signature : - boost::function_types::function_type< - boost::mpl::joint_view< - boost::mpl::single_view< - typename - boost::function_types::result_type< M >::type - >, - typename boost::mpl::pop_front< - typename - boost::function_types::parameter_types< M > - >::type - > - > - {}; - - template< typename T > - struct base - { - typedef T base_type; - }; - - // if an error is generated by the line below it means - // the method is ambiguous : specify its signature to - // disambiguate - template< typename T > - T& ambiguous_method_requires_to_specify_signature( const T& ); -} -} // mock - -#define MOCK_SIGNATURE(M) \ - mock::detail::signature< \ - BOOST_TYPEOF( \ - mock::detail::ambiguous_method_requires_to_specify_signature( \ - &base_type::M ) ) \ - >::type - -#endif // MOCK_SIGNATURE_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2012 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_SIGNATURE_HPP_INCLUDED +#define MOCK_SIGNATURE_HPP_INCLUDED + +#include "../config.hpp" +#include +#include +#include +#include +#include +#include +#define BOOST_TYPEOF_SILENT +#include + +namespace mock +{ +namespace detail +{ + template< typename M > + struct signature : + boost::function_types::function_type< + boost::mpl::joint_view< + boost::mpl::single_view< + typename + boost::function_types::result_type< M >::type + >, + typename boost::mpl::pop_front< + typename + boost::function_types::parameter_types< M > + >::type + > + > + {}; + + template< typename T > + struct base + { + typedef T base_type; + }; + + // if an error is generated by the line below it means + // the method is ambiguous : specify its signature to + // disambiguate + template< typename T > + T& ambiguous_method_requires_to_specify_signature( const T& ); +} +} // mock + +#define MOCK_SIGNATURE(M) \ + mock::detail::signature< \ + BOOST_TYPEOF( \ + mock::detail::ambiguous_method_requires_to_specify_signature( \ + &base_type::M ) ) \ + >::type + +#endif // MOCK_SIGNATURE_HPP_INCLUDED diff --git a/turtle/detail/type_name.hpp b/include/turtle/detail/type_name.hpp similarity index 96% rename from turtle/detail/type_name.hpp rename to include/turtle/detail/type_name.hpp index 96d6cc1..7b171fb 100644 --- a/turtle/detail/type_name.hpp +++ b/include/turtle/detail/type_name.hpp @@ -1,116 +1,116 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2009 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_TYPE_NAME_HPP_INCLUDED -#define MOCK_TYPE_NAME_HPP_INCLUDED - -#include "../config.hpp" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef __GNUC__ -#include -#include -#endif - -#define MOCK_TYPE_NAME( T ) mock::detail::type_name( BOOST_SP_TYPEID(T) ) - -namespace mock -{ -namespace detail -{ - class type_name - { - public: - explicit type_name( const boost::detail::sp_typeinfo& info ) - : info_( &info ) - {} - friend std::ostream& operator<<( std::ostream& s, const type_name& t ) - { - t.serialize( s, *t.info_ ); - return s; - } - private: - void serialize( std::ostream& s, - const boost::detail::sp_typeinfo& info ) const - { - const char* name = info.name(); -#ifdef __GNUC__ - int status = 0; - boost::shared_ptr< char > demangled( - abi::__cxa_demangle( name, 0, 0, &status ), - &std::free ); - if( ! status && demangled ) - serialize( s, demangled.get() ); - else -#endif - serialize( s, name ); - } - - typedef std::string::size_type size_type; - - void serialize( std::ostream& s, std::string name ) const - { - const size_type nm = rfind( name, ':' ) + 1; - const size_type tpl = name.find( '<', nm ); - s << clean( name.substr( nm, tpl - nm ) ); - if( tpl == std::string::npos ) - return; - s << '<'; - list( s, name.substr( tpl + 1, name.rfind( '>' ) - tpl - 1 ) ); - s << '>'; - } - void list( std::ostream& s, const std::string& name ) const - { - const size_type comma = rfind( name, ',' ); - if( comma != std::string::npos ) - { - list( s, name.substr( 0, comma ) ); - s << ", "; - } - serialize( s, name.substr( comma + 1 ) ); - } - std::string clean( std::string name ) const - { - boost::algorithm::trim( name ); - boost::algorithm::erase_all( name, "class " ); - boost::algorithm::erase_all( name, "struct " ); - boost::algorithm::erase_all( name, "__ptr64" ); - boost::algorithm::replace_all( name, " &", "&" ); - boost::algorithm::replace_all( name, "& ", "&" ); - boost::algorithm::replace_all( name, " *", "*" ); - boost::algorithm::replace_all( name, "* ", "*" ); - return name; - } - size_type rfind( const std::string& name, char c ) const - { - size_type count = 0; - for( size_type i = name.size() - 1; i > 0; --i ) - { - if( name[ i ] == '>' ) - ++count; - else if( name[ i ] == '<' ) - --count; - if( name[ i ] == c && count == 0 ) - return i; - } - return std::string::npos; - } - - const boost::detail::sp_typeinfo* info_; - }; -} -} // mock - -#endif // MOCK_TYPE_NAME_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2009 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_TYPE_NAME_HPP_INCLUDED +#define MOCK_TYPE_NAME_HPP_INCLUDED + +#include "../config.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef __GNUC__ +#include +#include +#endif + +#define MOCK_TYPE_NAME( T ) mock::detail::type_name( BOOST_SP_TYPEID(T) ) + +namespace mock +{ +namespace detail +{ + class type_name + { + public: + explicit type_name( const boost::detail::sp_typeinfo& info ) + : info_( &info ) + {} + friend std::ostream& operator<<( std::ostream& s, const type_name& t ) + { + t.serialize( s, *t.info_ ); + return s; + } + private: + void serialize( std::ostream& s, + const boost::detail::sp_typeinfo& info ) const + { + const char* name = info.name(); +#ifdef __GNUC__ + int status = 0; + boost::shared_ptr< char > demangled( + abi::__cxa_demangle( name, 0, 0, &status ), + &std::free ); + if( ! status && demangled ) + serialize( s, demangled.get() ); + else +#endif + serialize( s, name ); + } + + typedef std::string::size_type size_type; + + void serialize( std::ostream& s, std::string name ) const + { + const size_type nm = rfind( name, ':' ) + 1; + const size_type tpl = name.find( '<', nm ); + s << clean( name.substr( nm, tpl - nm ) ); + if( tpl == std::string::npos ) + return; + s << '<'; + list( s, name.substr( tpl + 1, name.rfind( '>' ) - tpl - 1 ) ); + s << '>'; + } + void list( std::ostream& s, const std::string& name ) const + { + const size_type comma = rfind( name, ',' ); + if( comma != std::string::npos ) + { + list( s, name.substr( 0, comma ) ); + s << ", "; + } + serialize( s, name.substr( comma + 1 ) ); + } + std::string clean( std::string name ) const + { + boost::algorithm::trim( name ); + boost::algorithm::erase_all( name, "class " ); + boost::algorithm::erase_all( name, "struct " ); + boost::algorithm::erase_all( name, "__ptr64" ); + boost::algorithm::replace_all( name, " &", "&" ); + boost::algorithm::replace_all( name, "& ", "&" ); + boost::algorithm::replace_all( name, " *", "*" ); + boost::algorithm::replace_all( name, "* ", "*" ); + return name; + } + size_type rfind( const std::string& name, char c ) const + { + size_type count = 0; + for( size_type i = name.size() - 1; i > 0; --i ) + { + if( name[ i ] == '>' ) + ++count; + else if( name[ i ] == '<' ) + --count; + if( name[ i ] == c && count == 0 ) + return i; + } + return std::string::npos; + } + + const boost::detail::sp_typeinfo* info_; + }; +} +} // mock + +#endif // MOCK_TYPE_NAME_HPP_INCLUDED diff --git a/turtle/detail/verifiable.hpp b/include/turtle/detail/verifiable.hpp similarity index 95% rename from turtle/detail/verifiable.hpp rename to include/turtle/detail/verifiable.hpp index bfa525d..5d85c93 100644 --- a/turtle/detail/verifiable.hpp +++ b/include/turtle/detail/verifiable.hpp @@ -1,32 +1,32 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_VERIFIABLE_HPP_INCLUDED -#define MOCK_VERIFIABLE_HPP_INCLUDED - -#include "../config.hpp" -#include - -namespace mock -{ -namespace detail -{ - class verifiable : private boost::noncopyable - { - public: - verifiable() {} - virtual ~verifiable() {} - - virtual bool verify() const = 0; - - virtual void reset() = 0; - }; -} -} // mock - -#endif // MOCK_VERIFIABLE_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_VERIFIABLE_HPP_INCLUDED +#define MOCK_VERIFIABLE_HPP_INCLUDED + +#include "../config.hpp" +#include + +namespace mock +{ +namespace detail +{ + class verifiable : private boost::noncopyable + { + public: + verifiable() {} + virtual ~verifiable() {} + + virtual bool verify() const = 0; + + virtual void reset() = 0; + }; +} +} // mock + +#endif // MOCK_VERIFIABLE_HPP_INCLUDED diff --git a/turtle/error.hpp b/include/turtle/error.hpp similarity index 97% rename from turtle/error.hpp rename to include/turtle/error.hpp index c17fa41..7b04ad3 100644 --- a/turtle/error.hpp +++ b/include/turtle/error.hpp @@ -1,67 +1,67 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_ERROR_HPP_INCLUDED -#define MOCK_ERROR_HPP_INCLUDED - -#include "config.hpp" -#ifdef MOCK_USE_BOOST_TEST -#include "exception.hpp" -#include -#include -#include -#include - -namespace mock -{ - template< typename Result > - struct error - { - static Result abort() - { - boost::unit_test::framework::test_unit_aborted( - boost::unit_test::framework::current_test_case() ); - throw boost::enable_current_exception( exception() ); - } - - static void pass( const char* file, int line ) - { - boost::unit_test::unit_test_log.set_checkpoint( file, - static_cast< std::size_t >( line ) ); - } - - template< typename Context > - static void fail( const char* message, const Context& context, - const char* file = "unknown location", int line = 0 ) - { - boost::unit_test::framework::assertion_result( false ); - boost::unit_test::unit_test_log - << boost::unit_test::log::begin( file, - static_cast< std::size_t >( line ) ) - << boost::unit_test::log_all_errors - << message << ": " << context - << boost::unit_test::log::end(); - } - - template< typename Context > - static void call( const Context& context, const char* file, int line ) - { - boost::unit_test::framework::assertion_result( true ); - boost::unit_test::unit_test_log - << boost::unit_test::log::begin( file, - static_cast< std::size_t >( line ) ) - << boost::unit_test::log_successful_tests - << "mock expectation fulfilled: " << context - << boost::unit_test::log::end(); - } - }; -} // mock - -#endif // MOCK_USE_BOOST_TEST - -#endif // MOCK_ERROR_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_ERROR_HPP_INCLUDED +#define MOCK_ERROR_HPP_INCLUDED + +#include "config.hpp" +#ifdef MOCK_USE_BOOST_TEST +#include "exception.hpp" +#include +#include +#include +#include + +namespace mock +{ + template< typename Result > + struct error + { + static Result abort() + { + boost::unit_test::framework::test_unit_aborted( + boost::unit_test::framework::current_test_case() ); + throw boost::enable_current_exception( exception() ); + } + + static void pass( const char* file, int line ) + { + boost::unit_test::unit_test_log.set_checkpoint( file, + static_cast< std::size_t >( line ) ); + } + + template< typename Context > + static void fail( const char* message, const Context& context, + const char* file = "unknown location", int line = 0 ) + { + boost::unit_test::framework::assertion_result( false ); + boost::unit_test::unit_test_log + << boost::unit_test::log::begin( file, + static_cast< std::size_t >( line ) ) + << boost::unit_test::log_all_errors + << message << ": " << context + << boost::unit_test::log::end(); + } + + template< typename Context > + static void call( const Context& context, const char* file, int line ) + { + boost::unit_test::framework::assertion_result( true ); + boost::unit_test::unit_test_log + << boost::unit_test::log::begin( file, + static_cast< std::size_t >( line ) ) + << boost::unit_test::log_successful_tests + << "mock expectation fulfilled: " << context + << boost::unit_test::log::end(); + } + }; +} // mock + +#endif // MOCK_USE_BOOST_TEST + +#endif // MOCK_ERROR_HPP_INCLUDED diff --git a/turtle/exception.hpp b/include/turtle/exception.hpp similarity index 95% rename from turtle/exception.hpp rename to include/turtle/exception.hpp index 16e5aaa..4e7796c 100644 --- a/turtle/exception.hpp +++ b/include/turtle/exception.hpp @@ -1,24 +1,24 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_EXCEPTION_HPP_INCLUDED -#define MOCK_EXCEPTION_HPP_INCLUDED - -#include "config.hpp" -#ifdef MOCK_USE_BOOST_TEST -#include - -namespace mock -{ - struct exception : virtual boost::execution_aborted - {}; -} // mock - -#endif // MOCK_USE_BOOST_TEST - -#endif // MOCK_EXCEPTION_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2012 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_EXCEPTION_HPP_INCLUDED +#define MOCK_EXCEPTION_HPP_INCLUDED + +#include "config.hpp" +#ifdef MOCK_USE_BOOST_TEST +#include + +namespace mock +{ + struct exception : virtual boost::execution_aborted + {}; +} // mock + +#endif // MOCK_USE_BOOST_TEST + +#endif // MOCK_EXCEPTION_HPP_INCLUDED diff --git a/turtle/format.hpp b/include/turtle/format.hpp similarity index 95% rename from turtle/format.hpp rename to include/turtle/format.hpp index 69add89..6b4095c 100644 --- a/turtle/format.hpp +++ b/include/turtle/format.hpp @@ -1,25 +1,25 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_FORMAT_HPP_INCLUDED -#define MOCK_FORMAT_HPP_INCLUDED - -#include "config.hpp" -#include "detail/formatter.hpp" - -namespace mock -{ - template< typename T > - detail::formatter< T > format( const T& t ) - { - return detail::formatter< T >( t ); - } - -} // mock - -#endif // MOCK_FORMAT_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_FORMAT_HPP_INCLUDED +#define MOCK_FORMAT_HPP_INCLUDED + +#include "config.hpp" +#include "detail/formatter.hpp" + +namespace mock +{ + template< typename T > + detail::formatter< T > format( const T& t ) + { + return detail::formatter< T >( t ); + } + +} // mock + +#endif // MOCK_FORMAT_HPP_INCLUDED diff --git a/turtle/log.hpp b/include/turtle/log.hpp similarity index 96% rename from turtle/log.hpp rename to include/turtle/log.hpp index 678b78f..b5dfcdf 100644 --- a/turtle/log.hpp +++ b/include/turtle/log.hpp @@ -1,188 +1,188 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_LOG_HPP_INCLUDED -#define MOCK_LOG_HPP_INCLUDED - -#include "config.hpp" -#include "stream.hpp" -#include "format.hpp" -#include -#include -#include -#include - -namespace boost -{ - template< typename T > class shared_ptr; - template< typename T > class weak_ptr; - template< typename T > class reference_wrapper; - -namespace phoenix -{ - template< typename T > struct actor; -} -namespace lambda -{ - template< typename T > class lambda_functor; -} -namespace assign_detail -{ - template< typename T > class generic_list; -} -} - -namespace mock -{ -namespace detail -{ - template< typename T > - void serialize( stream& s, const T& begin, const T& end ) - { - s << '('; - for( T it = begin; it != end; ++it ) - s << (it == begin ? "" : ",") << mock::format( *it ); - s << ')'; - } -} - - template< typename T > - stream& operator<<( stream& s, const std::auto_ptr< T >& t ) - { - return s << mock::format( t.get() ); - } - template< typename T1, typename T2 > - stream& operator<<( stream& s, const std::pair< T1, T2 >& p ) - { - return s << '(' << mock::format( p.first ) - << ',' << mock::format( p.second ) << ')'; - } - - template< typename T, typename A > - stream& operator<<( stream& s, const std::deque< T, A >& t ) - { - detail::serialize( s, t.begin(), t.end() ); - return s; - } - template< typename T, typename A > - stream& operator<<( stream& s, const std::list< T, A >& t ) - { - detail::serialize( s, t.begin(), t.end() ); - return s; - } - template< typename T, typename A > - stream& operator<<( stream& s, const std::vector< T, A >& t ) - { - detail::serialize( s, t.begin(), t.end() ); - return s; - } - template< typename K, typename T, typename C, typename A > - stream& operator<<( stream& s, const std::map< K, T, C, A >& t ) - { - detail::serialize( s, t.begin(), t.end() ); - return s; - } - template< typename K, typename T, typename C, typename A > - stream& operator<<( stream& s, const std::multimap< K, T, C, A >& t ) - { - detail::serialize( s, t.begin(), t.end() ); - return s; - } - template< typename T, typename C, typename A > - stream& operator<<( stream& s, const std::set< T, C, A >& t ) - { - detail::serialize( s, t.begin(), t.end() ); - return s; - } - template< typename T, typename C, typename A > - stream& operator<<( stream& s, const std::multiset< T, C, A >& t ) - { - detail::serialize( s, t.begin(), t.end() ); - return s; - } - template< typename T > - stream& operator<<( stream& s, - const boost::assign_detail::generic_list< T >& t ) - { - detail::serialize( s, t.begin(), t.end() ); - return s; - } - template< typename T > - stream& operator<<( stream& s, const boost::reference_wrapper< T >& t ) - { - return s << mock::format( t.get() ); - } - template< typename T > - stream& operator<<( stream& s, const boost::shared_ptr< T >& t ) - { - return s << mock::format( t.get() ); - } - template< typename T > - stream& operator<<( stream& s, const boost::weak_ptr< T >& t ) - { - return s << mock::format( t.lock() ); - } - -#ifdef MOCK_SMART_PTR - template< typename T > - stream& operator<<( stream& s, const std::shared_ptr< T >& t ) - { - return s << mock::format( t.get() ); - } - template< typename T > - stream& operator<<( stream& s, const std::weak_ptr< T >& t ) - { - return s << mock::format( t.lock() ); - } - template< typename T, typename D > - inline stream& operator<<( stream& s, const std::unique_ptr< T, D >& p ) - { - return s << mock::format( p.get() ); - } -#endif - - template< typename T > - stream& operator<<( stream& s, const boost::lambda::lambda_functor< T >& ) - { - return s << '?'; - } - template< typename T > - stream& operator<<( stream& s, const boost::phoenix::actor< T >& ) - { - return s << '?'; - } - -#ifdef MOCK_NULLPTR - inline stream& operator<<( stream& s, std::nullptr_t ) - { - return s << "nullptr"; - } -#endif - - template< typename T > - typename boost::enable_if< - boost::function_types::is_callable_builtin< T >, - stream& - >::type - operator<<( stream& s, T* ) - { - return s << '?'; - } - template< typename T > - typename boost::disable_if< - boost::function_types::is_callable_builtin< T >, - stream& - >::type - operator<<( stream& s, T* t ) - { - *s.s_ << t; - return s; - } -} // mock - -#endif // MOCK_LOG_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_LOG_HPP_INCLUDED +#define MOCK_LOG_HPP_INCLUDED + +#include "config.hpp" +#include "stream.hpp" +#include "format.hpp" +#include +#include +#include +#include + +namespace boost +{ + template< typename T > class shared_ptr; + template< typename T > class weak_ptr; + template< typename T > class reference_wrapper; + +namespace phoenix +{ + template< typename T > struct actor; +} +namespace lambda +{ + template< typename T > class lambda_functor; +} +namespace assign_detail +{ + template< typename T > class generic_list; +} +} + +namespace mock +{ +namespace detail +{ + template< typename T > + void serialize( stream& s, const T& begin, const T& end ) + { + s << '('; + for( T it = begin; it != end; ++it ) + s << (it == begin ? "" : ",") << mock::format( *it ); + s << ')'; + } +} + + template< typename T > + stream& operator<<( stream& s, const std::auto_ptr< T >& t ) + { + return s << mock::format( t.get() ); + } + template< typename T1, typename T2 > + stream& operator<<( stream& s, const std::pair< T1, T2 >& p ) + { + return s << '(' << mock::format( p.first ) + << ',' << mock::format( p.second ) << ')'; + } + + template< typename T, typename A > + stream& operator<<( stream& s, const std::deque< T, A >& t ) + { + detail::serialize( s, t.begin(), t.end() ); + return s; + } + template< typename T, typename A > + stream& operator<<( stream& s, const std::list< T, A >& t ) + { + detail::serialize( s, t.begin(), t.end() ); + return s; + } + template< typename T, typename A > + stream& operator<<( stream& s, const std::vector< T, A >& t ) + { + detail::serialize( s, t.begin(), t.end() ); + return s; + } + template< typename K, typename T, typename C, typename A > + stream& operator<<( stream& s, const std::map< K, T, C, A >& t ) + { + detail::serialize( s, t.begin(), t.end() ); + return s; + } + template< typename K, typename T, typename C, typename A > + stream& operator<<( stream& s, const std::multimap< K, T, C, A >& t ) + { + detail::serialize( s, t.begin(), t.end() ); + return s; + } + template< typename T, typename C, typename A > + stream& operator<<( stream& s, const std::set< T, C, A >& t ) + { + detail::serialize( s, t.begin(), t.end() ); + return s; + } + template< typename T, typename C, typename A > + stream& operator<<( stream& s, const std::multiset< T, C, A >& t ) + { + detail::serialize( s, t.begin(), t.end() ); + return s; + } + template< typename T > + stream& operator<<( stream& s, + const boost::assign_detail::generic_list< T >& t ) + { + detail::serialize( s, t.begin(), t.end() ); + return s; + } + template< typename T > + stream& operator<<( stream& s, const boost::reference_wrapper< T >& t ) + { + return s << mock::format( t.get() ); + } + template< typename T > + stream& operator<<( stream& s, const boost::shared_ptr< T >& t ) + { + return s << mock::format( t.get() ); + } + template< typename T > + stream& operator<<( stream& s, const boost::weak_ptr< T >& t ) + { + return s << mock::format( t.lock() ); + } + +#ifdef MOCK_SMART_PTR + template< typename T > + stream& operator<<( stream& s, const std::shared_ptr< T >& t ) + { + return s << mock::format( t.get() ); + } + template< typename T > + stream& operator<<( stream& s, const std::weak_ptr< T >& t ) + { + return s << mock::format( t.lock() ); + } + template< typename T, typename D > + inline stream& operator<<( stream& s, const std::unique_ptr< T, D >& p ) + { + return s << mock::format( p.get() ); + } +#endif + + template< typename T > + stream& operator<<( stream& s, const boost::lambda::lambda_functor< T >& ) + { + return s << '?'; + } + template< typename T > + stream& operator<<( stream& s, const boost::phoenix::actor< T >& ) + { + return s << '?'; + } + +#ifdef MOCK_NULLPTR + inline stream& operator<<( stream& s, std::nullptr_t ) + { + return s << "nullptr"; + } +#endif + + template< typename T > + typename boost::enable_if< + boost::function_types::is_callable_builtin< T >, + stream& + >::type + operator<<( stream& s, T* ) + { + return s << '?'; + } + template< typename T > + typename boost::disable_if< + boost::function_types::is_callable_builtin< T >, + stream& + >::type + operator<<( stream& s, T* t ) + { + *s.s_ << t; + return s; + } +} // mock + +#endif // MOCK_LOG_HPP_INCLUDED diff --git a/turtle/matcher.hpp b/include/turtle/matcher.hpp similarity index 96% rename from turtle/matcher.hpp rename to include/turtle/matcher.hpp index b9c61ff..162301b 100644 --- a/turtle/matcher.hpp +++ b/include/turtle/matcher.hpp @@ -1,107 +1,107 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_MATCHER_HPP_INCLUDED -#define MOCK_MATCHER_HPP_INCLUDED - -#include "config.hpp" -#include "log.hpp" -#include "constraint.hpp" -#include "detail/is_functor.hpp" -#include -#include -#include - -namespace mock -{ - template< typename Actual, typename Expected, typename Enable = void > - class matcher - { - public: - explicit matcher( Expected expected ) - : expected_( expected ) - {} - bool operator()( Actual actual ) - { - return actual == boost::unwrap_ref( expected_ ); - } - friend std::ostream& operator<<( - std::ostream& s, const matcher& m ) - { - return s << mock::format( m.expected_ ); - } - private: - Expected expected_; - }; - - template<> - class matcher< const char*, const char* > - { - public: - explicit matcher( const char* expected ) - : expected_( expected ) - {} - bool operator()( const char* actual ) - { - return std::strcmp( actual, expected_ ) == 0; - } - friend std::ostream& operator<<( - std::ostream& s, const matcher& m ) - { - return s << mock::format( m.expected_ ); - } - private: - const char* expected_; - }; - - template< typename Actual, typename Constraint > - class matcher< Actual, mock::constraint< Constraint > > - { - public: - explicit matcher( const constraint< Constraint >& c ) - : c_( c.c_ ) - {} - bool operator()( Actual actual ) - { - return c_( actual ); - } - friend std::ostream& operator<<( - std::ostream& s, const matcher& m ) - { - return s << mock::format( m.c_ ); - } - private: - Constraint c_; - }; - - template< typename Actual, typename Functor > - class matcher< Actual, Functor, - typename boost::enable_if< - detail::is_functor< Functor, Actual > - >::type - > - { - public: - explicit matcher( const Functor& f ) - : c_( f ) - {} - bool operator()( Actual actual ) - { - return c_( actual ); - } - friend std::ostream& operator<<( - std::ostream& s, const matcher& m ) - { - return s << mock::format( m.c_ ); - } - private: - Functor c_; - }; -} // mock - -#endif // MOCK_MATCHER_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_MATCHER_HPP_INCLUDED +#define MOCK_MATCHER_HPP_INCLUDED + +#include "config.hpp" +#include "log.hpp" +#include "constraint.hpp" +#include "detail/is_functor.hpp" +#include +#include +#include + +namespace mock +{ + template< typename Actual, typename Expected, typename Enable = void > + class matcher + { + public: + explicit matcher( Expected expected ) + : expected_( expected ) + {} + bool operator()( Actual actual ) + { + return actual == boost::unwrap_ref( expected_ ); + } + friend std::ostream& operator<<( + std::ostream& s, const matcher& m ) + { + return s << mock::format( m.expected_ ); + } + private: + Expected expected_; + }; + + template<> + class matcher< const char*, const char* > + { + public: + explicit matcher( const char* expected ) + : expected_( expected ) + {} + bool operator()( const char* actual ) + { + return std::strcmp( actual, expected_ ) == 0; + } + friend std::ostream& operator<<( + std::ostream& s, const matcher& m ) + { + return s << mock::format( m.expected_ ); + } + private: + const char* expected_; + }; + + template< typename Actual, typename Constraint > + class matcher< Actual, mock::constraint< Constraint > > + { + public: + explicit matcher( const constraint< Constraint >& c ) + : c_( c.c_ ) + {} + bool operator()( Actual actual ) + { + return c_( actual ); + } + friend std::ostream& operator<<( + std::ostream& s, const matcher& m ) + { + return s << mock::format( m.c_ ); + } + private: + Constraint c_; + }; + + template< typename Actual, typename Functor > + class matcher< Actual, Functor, + typename boost::enable_if< + detail::is_functor< Functor, Actual > + >::type + > + { + public: + explicit matcher( const Functor& f ) + : c_( f ) + {} + bool operator()( Actual actual ) + { + return c_( actual ); + } + friend std::ostream& operator<<( + std::ostream& s, const matcher& m ) + { + return s << mock::format( m.c_ ); + } + private: + Functor c_; + }; +} // mock + +#endif // MOCK_MATCHER_HPP_INCLUDED diff --git a/turtle/mock.hpp b/include/turtle/mock.hpp similarity index 97% rename from turtle/mock.hpp rename to include/turtle/mock.hpp index 3fe2aba..49142c9 100644 --- a/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -1,242 +1,242 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_MOCK_HPP_INCLUDED -#define MOCK_MOCK_HPP_INCLUDED - -#include "config.hpp" -#include "object.hpp" -#include "reset.hpp" -#include "verify.hpp" -#include "detail/functor.hpp" -#include "detail/function.hpp" -#include "detail/type_name.hpp" -#include "detail/signature.hpp" -#include "detail/parameter.hpp" -#include "detail/cleanup.hpp" -#include -#include -#include -#include - -#define MOCK_CLASS(T) \ - struct T : mock::object - -#define MOCK_FUNCTION_TYPE(S, tpn) \ - tpn boost::remove_pointer< tpn BOOST_IDENTITY_TYPE((S)) >::type - -#ifdef MOCK_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__), typename) > f, f##_mock - -#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, typename) > f, f##_mock - -#endif // MOCK_VARIADIC_MACROS - -#define MOCK_HELPER(t) \ - t##_mock( mock::detail::root, BOOST_PP_STRINGIZE(t) ) -#define MOCK_ANONYMOUS_HELPER(t) \ - t##_mock( mock::detail::root, "?." ) - -#define MOCK_METHOD_HELPER(S, t, tpn) \ - mutable mock::detail::function< MOCK_FUNCTION_TYPE(S, tpn) > t##_mock_; \ - mock::detail::function< MOCK_FUNCTION_TYPE(S, tpn) >& t##_mock( \ - const mock::detail::context&, \ - boost::unit_test::const_string instance ) const \ - { \ - mock::detail::configure( *this, t##_mock_, \ - instance.substr( 0, instance.rfind( BOOST_PP_STRINGIZE(t) ) ), \ - MOCK_TYPE_NAME(*this), \ - BOOST_PP_STRINGIZE(t) ); \ - return t##_mock_; \ - } - -#define MOCK_PARAM(z, n, d) \ - BOOST_PP_COMMA_IF(n) d, n >::type p##n -#define MOCK_PARAMS(n, S, tpn) \ - BOOST_PP_REPEAT(n, MOCK_PARAM, \ - tpn mock::detail::parameter< MOCK_FUNCTION_TYPE(S, tpn)) -#define MOCK_DECL(M, n, S, c, tpn) \ - tpn boost::function_types::result_type< \ - MOCK_FUNCTION_TYPE(S, tpn) >::type M( \ - MOCK_PARAMS(n, S, tpn) ) c - -#define MOCK_METHOD_AUX(M, n, S, t, c, tpn) \ - MOCK_DECL(M, n, S, c, tpn) \ - { \ - BOOST_MPL_ASSERT_RELATION( n, ==, \ - boost::function_types::function_arity< \ - MOCK_FUNCTION_TYPE(S, tpn) >::value ); \ - return MOCK_ANONYMOUS_HELPER(t)( \ - BOOST_PP_ENUM_PARAMS(n, p) ); \ - } - -#define MOCK_METHOD_EXT(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t,,) \ - MOCK_METHOD_AUX(M, n, S, t, const,) \ - MOCK_METHOD_HELPER(S, t,) -#define MOCK_CONST_METHOD_EXT(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t, const,) \ - MOCK_METHOD_HELPER(S, t,) -#define MOCK_NON_CONST_METHOD_EXT(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t,,) \ - MOCK_METHOD_HELPER(S, t,) - -#define MOCK_METHOD_EXT_TPL(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t,, typename) \ - MOCK_METHOD_AUX(M, n, S, t, const, typename) \ - MOCK_METHOD_HELPER(S, t, typename) -#define MOCK_CONST_METHOD_EXT_TPL(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t, const, typename) \ - MOCK_METHOD_HELPER(S, t, typename) -#define MOCK_NON_CONST_METHOD_EXT_TPL(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t,, typename) \ - MOCK_METHOD_HELPER(S, t, typename) - -#define MOCK_CONVERSION_OPERATOR(M, T, t) \ - M T() const { return MOCK_ANONYMOUS_HELPER(t)(); } \ - M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ - MOCK_METHOD_HELPER(T(), t,) -#define MOCK_CONST_CONVERSION_OPERATOR(M, T, t) \ - M T() const { return MOCK_ANONYMOUS_HELPER(t)(); } \ - MOCK_METHOD_HELPER(T(), t,) -#define MOCK_NON_CONST_CONVERSION_OPERATOR(M, T, t) \ - M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ - MOCK_METHOD_HELPER(T(), t,) - -#define MOCK_CONVERSION_OPERATOR_TPL(M, T, t) \ - M T() const { return MOCK_ANONYMOUS_HELPER(t)(); } \ - M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ - MOCK_METHOD_HELPER(T(), t, typename) -#define MOCK_CONST_CONVERSION_OPERATOR_TPL(M, T, t) \ - M T() const { return MOCK_ANONYMOUS_HELPER(t)(); } \ - MOCK_METHOD_HELPER(T(), t, typename) -#define MOCK_NON_CONST_CONVERSION_OPERATOR_TPL(M, T, t) \ - M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ - MOCK_METHOD_HELPER(T(), t, typename) - -#define MOCK_FUNCTION_HELPER(S, t, s, tpn) \ - s mock::detail::function< MOCK_FUNCTION_TYPE(S, tpn) >& t##_mock( \ - mock::detail::context& context, \ - boost::unit_test::const_string instance ) \ - { \ - static mock::detail::function< MOCK_FUNCTION_TYPE(S, tpn) > f; \ - return f( context, instance ); \ - } - -#define MOCK_CONSTRUCTOR_AUX(T, n, A, t, tpn) \ - T( MOCK_PARAMS(n, void A, tpn) ) \ - { \ - MOCK_HELPER(t)( BOOST_PP_ENUM_PARAMS(n, p) ); \ - } \ - MOCK_FUNCTION_HELPER(void A, t, static, tpn) - -#define MOCK_CONSTRUCTOR(T, n, A, t) \ - MOCK_CONSTRUCTOR_AUX(T, n, A, t,) -#define MOCK_CONSTRUCTOR_TPL(T, n, A, t) \ - MOCK_CONSTRUCTOR_AUX(T, n, A, t, typename) - -#define MOCK_DESTRUCTOR(T, t) \ - T() { try { MOCK_ANONYMOUS_HELPER(t)(); } catch( ... ) {} } \ - MOCK_METHOD_HELPER(void(), t,) - -#define MOCK_FUNCTION_AUX(F, n, S, t, s, tpn) \ - MOCK_FUNCTION_HELPER(S, t, s, tpn) \ - s MOCK_DECL(F, n, S,,tpn) \ - { \ - BOOST_MPL_ASSERT_RELATION( n, ==, \ - boost::function_types::function_arity< \ - MOCK_FUNCTION_TYPE(S, tpn) >::value ); \ - return MOCK_HELPER(t)( BOOST_PP_ENUM_PARAMS(n, p) ); \ - } - -#ifdef MOCK_VARIADIC_MACROS - -#define MOCK_VARIADIC_ELEM_0(e0, ...) e0 -#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, \ - 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, ... ) \ - 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, ... ) \ - 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, ... ) \ - 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, ... ) \ - 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, ... ) \ - MOCK_NON_CONST_METHOD_EXT_TPL(M, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M)) - -#define MOCK_FUNCTION(F, n, ...) \ - MOCK_FUNCTION_AUX(F, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F),,) - -#define MOCK_STATIC_METHOD(F, n, ...) \ - MOCK_FUNCTION_AUX(F, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F), static,) - -#define MOCK_STATIC_METHOD_TPL(F, n, ...) \ - MOCK_FUNCTION_AUX(F, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F), \ - static, typename) - -#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, 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__ ) -#define MOCK_VERIFY(t) MOCK_HELPER(t).verify( __FILE__, __LINE__ ) - -#endif // MOCK_MOCK_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_MOCK_HPP_INCLUDED +#define MOCK_MOCK_HPP_INCLUDED + +#include "config.hpp" +#include "object.hpp" +#include "reset.hpp" +#include "verify.hpp" +#include "detail/functor.hpp" +#include "detail/function.hpp" +#include "detail/type_name.hpp" +#include "detail/signature.hpp" +#include "detail/parameter.hpp" +#include "detail/cleanup.hpp" +#include +#include +#include +#include + +#define MOCK_CLASS(T) \ + struct T : mock::object + +#define MOCK_FUNCTION_TYPE(S, tpn) \ + tpn boost::remove_pointer< tpn BOOST_IDENTITY_TYPE((S)) >::type + +#ifdef MOCK_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__), typename) > f, f##_mock + +#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, typename) > f, f##_mock + +#endif // MOCK_VARIADIC_MACROS + +#define MOCK_HELPER(t) \ + t##_mock( mock::detail::root, BOOST_PP_STRINGIZE(t) ) +#define MOCK_ANONYMOUS_HELPER(t) \ + t##_mock( mock::detail::root, "?." ) + +#define MOCK_METHOD_HELPER(S, t, tpn) \ + mutable mock::detail::function< MOCK_FUNCTION_TYPE(S, tpn) > t##_mock_; \ + mock::detail::function< MOCK_FUNCTION_TYPE(S, tpn) >& t##_mock( \ + const mock::detail::context&, \ + boost::unit_test::const_string instance ) const \ + { \ + mock::detail::configure( *this, t##_mock_, \ + instance.substr( 0, instance.rfind( BOOST_PP_STRINGIZE(t) ) ), \ + MOCK_TYPE_NAME(*this), \ + BOOST_PP_STRINGIZE(t) ); \ + return t##_mock_; \ + } + +#define MOCK_PARAM(z, n, d) \ + BOOST_PP_COMMA_IF(n) d, n >::type p##n +#define MOCK_PARAMS(n, S, tpn) \ + BOOST_PP_REPEAT(n, MOCK_PARAM, \ + tpn mock::detail::parameter< MOCK_FUNCTION_TYPE(S, tpn)) +#define MOCK_DECL(M, n, S, c, tpn) \ + tpn boost::function_types::result_type< \ + MOCK_FUNCTION_TYPE(S, tpn) >::type M( \ + MOCK_PARAMS(n, S, tpn) ) c + +#define MOCK_METHOD_AUX(M, n, S, t, c, tpn) \ + MOCK_DECL(M, n, S, c, tpn) \ + { \ + BOOST_MPL_ASSERT_RELATION( n, ==, \ + boost::function_types::function_arity< \ + MOCK_FUNCTION_TYPE(S, tpn) >::value ); \ + return MOCK_ANONYMOUS_HELPER(t)( \ + BOOST_PP_ENUM_PARAMS(n, p) ); \ + } + +#define MOCK_METHOD_EXT(M, n, S, t) \ + MOCK_METHOD_AUX(M, n, S, t,,) \ + MOCK_METHOD_AUX(M, n, S, t, const,) \ + MOCK_METHOD_HELPER(S, t,) +#define MOCK_CONST_METHOD_EXT(M, n, S, t) \ + MOCK_METHOD_AUX(M, n, S, t, const,) \ + MOCK_METHOD_HELPER(S, t,) +#define MOCK_NON_CONST_METHOD_EXT(M, n, S, t) \ + MOCK_METHOD_AUX(M, n, S, t,,) \ + MOCK_METHOD_HELPER(S, t,) + +#define MOCK_METHOD_EXT_TPL(M, n, S, t) \ + MOCK_METHOD_AUX(M, n, S, t,, typename) \ + MOCK_METHOD_AUX(M, n, S, t, const, typename) \ + MOCK_METHOD_HELPER(S, t, typename) +#define MOCK_CONST_METHOD_EXT_TPL(M, n, S, t) \ + MOCK_METHOD_AUX(M, n, S, t, const, typename) \ + MOCK_METHOD_HELPER(S, t, typename) +#define MOCK_NON_CONST_METHOD_EXT_TPL(M, n, S, t) \ + MOCK_METHOD_AUX(M, n, S, t,, typename) \ + MOCK_METHOD_HELPER(S, t, typename) + +#define MOCK_CONVERSION_OPERATOR(M, T, t) \ + M T() const { return MOCK_ANONYMOUS_HELPER(t)(); } \ + M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ + MOCK_METHOD_HELPER(T(), t,) +#define MOCK_CONST_CONVERSION_OPERATOR(M, T, t) \ + M T() const { return MOCK_ANONYMOUS_HELPER(t)(); } \ + MOCK_METHOD_HELPER(T(), t,) +#define MOCK_NON_CONST_CONVERSION_OPERATOR(M, T, t) \ + M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ + MOCK_METHOD_HELPER(T(), t,) + +#define MOCK_CONVERSION_OPERATOR_TPL(M, T, t) \ + M T() const { return MOCK_ANONYMOUS_HELPER(t)(); } \ + M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ + MOCK_METHOD_HELPER(T(), t, typename) +#define MOCK_CONST_CONVERSION_OPERATOR_TPL(M, T, t) \ + M T() const { return MOCK_ANONYMOUS_HELPER(t)(); } \ + MOCK_METHOD_HELPER(T(), t, typename) +#define MOCK_NON_CONST_CONVERSION_OPERATOR_TPL(M, T, t) \ + M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ + MOCK_METHOD_HELPER(T(), t, typename) + +#define MOCK_FUNCTION_HELPER(S, t, s, tpn) \ + s mock::detail::function< MOCK_FUNCTION_TYPE(S, tpn) >& t##_mock( \ + mock::detail::context& context, \ + boost::unit_test::const_string instance ) \ + { \ + static mock::detail::function< MOCK_FUNCTION_TYPE(S, tpn) > f; \ + return f( context, instance ); \ + } + +#define MOCK_CONSTRUCTOR_AUX(T, n, A, t, tpn) \ + T( MOCK_PARAMS(n, void A, tpn) ) \ + { \ + MOCK_HELPER(t)( BOOST_PP_ENUM_PARAMS(n, p) ); \ + } \ + MOCK_FUNCTION_HELPER(void A, t, static, tpn) + +#define MOCK_CONSTRUCTOR(T, n, A, t) \ + MOCK_CONSTRUCTOR_AUX(T, n, A, t,) +#define MOCK_CONSTRUCTOR_TPL(T, n, A, t) \ + MOCK_CONSTRUCTOR_AUX(T, n, A, t, typename) + +#define MOCK_DESTRUCTOR(T, t) \ + T() { try { MOCK_ANONYMOUS_HELPER(t)(); } catch( ... ) {} } \ + MOCK_METHOD_HELPER(void(), t,) + +#define MOCK_FUNCTION_AUX(F, n, S, t, s, tpn) \ + MOCK_FUNCTION_HELPER(S, t, s, tpn) \ + s MOCK_DECL(F, n, S,,tpn) \ + { \ + BOOST_MPL_ASSERT_RELATION( n, ==, \ + boost::function_types::function_arity< \ + MOCK_FUNCTION_TYPE(S, tpn) >::value ); \ + return MOCK_HELPER(t)( BOOST_PP_ENUM_PARAMS(n, p) ); \ + } + +#ifdef MOCK_VARIADIC_MACROS + +#define MOCK_VARIADIC_ELEM_0(e0, ...) e0 +#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, \ + 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, ... ) \ + 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, ... ) \ + 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, ... ) \ + 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, ... ) \ + 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, ... ) \ + MOCK_NON_CONST_METHOD_EXT_TPL(M, n, \ + MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M)) + +#define MOCK_FUNCTION(F, n, ...) \ + MOCK_FUNCTION_AUX(F, n, \ + MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F),,) + +#define MOCK_STATIC_METHOD(F, n, ...) \ + MOCK_FUNCTION_AUX(F, n, \ + MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F), static,) + +#define MOCK_STATIC_METHOD_TPL(F, n, ...) \ + MOCK_FUNCTION_AUX(F, n, \ + MOCK_VARIADIC_ELEM_0(__VA_ARGS__), \ + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F), \ + static, typename) + +#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, 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__ ) +#define MOCK_VERIFY(t) MOCK_HELPER(t).verify( __FILE__, __LINE__ ) + +#endif // MOCK_MOCK_HPP_INCLUDED diff --git a/turtle/object.hpp b/include/turtle/object.hpp similarity index 96% rename from turtle/object.hpp rename to include/turtle/object.hpp index 609637e..d201757 100644 --- a/turtle/object.hpp +++ b/include/turtle/object.hpp @@ -1,74 +1,74 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_OBJECT_HPP_INCLUDED -#define MOCK_OBJECT_HPP_INCLUDED - -#include "config.hpp" -#include "detail/root.hpp" -#include "detail/type_name.hpp" -#include "detail/object_impl.hpp" -#include -#include -#include -#include -#include - -namespace mock -{ - class object; - -namespace detail -{ - template< typename E > - E& configure( const object& o, E& e, - boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ); - - template< typename T, typename E > - E& configure( const T& t, E& e, - boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name, - typename boost::disable_if< - typename boost::is_base_of< object, T > - >::type* = 0 ) - { - e.configure( detail::root, &t, instance, type, name ); - return e; - } -} - class object - { - public: - object() - : impl_( boost::make_shared< detail::object_impl >() ) - {} - protected: - ~object() - {} - public: - boost::shared_ptr< detail::object_impl > impl_; - }; - -namespace detail -{ - template< typename E > - E& configure( const object& o, E& e, - boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ) - { - e.configure( *o.impl_, o.impl_.get(), instance, type, name ); - return e; - } -} -} // mock - -#endif // MOCK_OBJECT_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_OBJECT_HPP_INCLUDED +#define MOCK_OBJECT_HPP_INCLUDED + +#include "config.hpp" +#include "detail/root.hpp" +#include "detail/type_name.hpp" +#include "detail/object_impl.hpp" +#include +#include +#include +#include +#include + +namespace mock +{ + class object; + +namespace detail +{ + template< typename E > + E& configure( const object& o, E& e, + boost::unit_test::const_string instance, + boost::optional< type_name > type, + boost::unit_test::const_string name ); + + template< typename T, typename E > + E& configure( const T& t, E& e, + boost::unit_test::const_string instance, + boost::optional< type_name > type, + boost::unit_test::const_string name, + typename boost::disable_if< + typename boost::is_base_of< object, T > + >::type* = 0 ) + { + e.configure( detail::root, &t, instance, type, name ); + return e; + } +} + class object + { + public: + object() + : impl_( boost::make_shared< detail::object_impl >() ) + {} + protected: + ~object() + {} + public: + boost::shared_ptr< detail::object_impl > impl_; + }; + +namespace detail +{ + template< typename E > + E& configure( const object& o, E& e, + boost::unit_test::const_string instance, + boost::optional< type_name > type, + boost::unit_test::const_string name ) + { + e.configure( *o.impl_, o.impl_.get(), instance, type, name ); + return e; + } +} +} // mock + +#endif // MOCK_OBJECT_HPP_INCLUDED diff --git a/turtle/reset.hpp b/include/turtle/reset.hpp similarity index 95% rename from turtle/reset.hpp rename to include/turtle/reset.hpp index 30f5d2c..20237b9 100644 --- a/turtle/reset.hpp +++ b/include/turtle/reset.hpp @@ -1,34 +1,34 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_RESET_HPP_INCLUDED -#define MOCK_RESET_HPP_INCLUDED - -#include "config.hpp" -#include "object.hpp" -#include "detail/root.hpp" -#include "detail/functor.hpp" - -namespace mock -{ - inline void reset() - { - detail::root.reset(); - } - inline void reset( const object& o ) - { - o.impl_->reset(); - } - template< typename Signature > - void reset( detail::functor< Signature >& f ) - { - f.reset(); - } -} // mock - -#endif // MOCK_RESET_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2012 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_RESET_HPP_INCLUDED +#define MOCK_RESET_HPP_INCLUDED + +#include "config.hpp" +#include "object.hpp" +#include "detail/root.hpp" +#include "detail/functor.hpp" + +namespace mock +{ + inline void reset() + { + detail::root.reset(); + } + inline void reset( const object& o ) + { + o.impl_->reset(); + } + template< typename Signature > + void reset( detail::functor< Signature >& f ) + { + f.reset(); + } +} // mock + +#endif // MOCK_RESET_HPP_INCLUDED diff --git a/turtle/sequence.hpp b/include/turtle/sequence.hpp similarity index 95% rename from turtle/sequence.hpp rename to include/turtle/sequence.hpp index 9ba933b..f3009ca 100644 --- a/turtle/sequence.hpp +++ b/include/turtle/sequence.hpp @@ -1,29 +1,29 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_SEQUENCE_HPP_INCLUDED -#define MOCK_SEQUENCE_HPP_INCLUDED - -#include "config.hpp" -#include "detail/sequence_impl.hpp" -#include - -namespace mock -{ - class sequence - { - public: - sequence() - : impl_( boost::make_shared< detail::sequence_impl >() ) - {} - - boost::shared_ptr< detail::sequence_impl > impl_; - }; -} // mock - -#endif // MOCK_SEQUENCE_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_SEQUENCE_HPP_INCLUDED +#define MOCK_SEQUENCE_HPP_INCLUDED + +#include "config.hpp" +#include "detail/sequence_impl.hpp" +#include + +namespace mock +{ + class sequence + { + public: + sequence() + : impl_( boost::make_shared< detail::sequence_impl >() ) + {} + + boost::shared_ptr< detail::sequence_impl > impl_; + }; +} // mock + +#endif // MOCK_SEQUENCE_HPP_INCLUDED diff --git a/turtle/stream.hpp b/include/turtle/stream.hpp similarity index 95% rename from turtle/stream.hpp rename to include/turtle/stream.hpp index 077507a..d8f3707 100644 --- a/turtle/stream.hpp +++ b/include/turtle/stream.hpp @@ -1,142 +1,142 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_STREAM_HPP_INCLUDED -#define MOCK_STREAM_HPP_INCLUDED - -#include "config.hpp" -#include -#include - -namespace mock -{ - struct stream - { - explicit stream( std::ostream& s ) - : s_( &s ) - {} - std::ostream* s_; - }; - -#ifdef MOCK_USE_CONVERSIONS - -namespace detail -{ -namespace conversion -{ - struct sink - { - template< typename T > - sink( const T& ) - {} - }; - - inline std::ostream& operator<<( std::ostream& s, const sink& ) - { - return s << '?'; - } - - struct holder : boost::noncopyable - { - virtual ~holder() - {} - virtual void serialize( std::ostream& s ) const = 0; - }; - - template< typename T > - struct holder_imp : holder - { - explicit holder_imp( const T& t ) - : t_( t ) - {} - virtual void serialize( std::ostream& s ) const - { - // if an error about an ambiguous conversion is generated by the - // line below the solution is to add a serialization operator to a - // mock::stream for T - s << t_; - } - const T& t_; - }; - - struct any : boost::noncopyable - { - template< typename T > - any( const T& t ) - : h_( new holder_imp< T >( t ) ) - {} - ~any() - { - delete h_; - } - holder* h_; - }; -} -} - - inline stream& operator<<( stream& s, const detail::conversion::any& d ) - { - d.h_->serialize( *s.s_ ); - return s; - } - -#else // MOCK_USE_CONVERSIONS - -namespace detail -{ -namespace conversion -{ - template< typename S, typename T > - S& operator<<( S &s, const T& ) - { - return s << '?'; - } -} -} - - template< typename T > - stream& operator<<( stream& s, const T& t ) - { - using namespace detail::conversion; - *s.s_ << t; - return s; - } - -#endif // MOCK_USE_CONVERSIONS - -namespace detail -{ - template< typename T > - void serialize( stream& s, const T& t ) - { - // if an error about an ambiguous conversion is generated by the - // line below the solution is to add a serialization operator to a - // mock::stream for T - s << t; - } - inline void serialize( stream& s, bool b ) - { - s << (b ? "true" : "false"); - } - template< typename C, typename T, typename A > - void serialize( stream& s, const std::basic_string< C, T, A >& str ) - { - s << '"' << str << '"'; - } - inline void serialize( stream& s, const char* const str ) - { - s << '"' << str << '"'; - } - inline void serialize( stream& s, unsigned char c ) - { - s << static_cast< int >( c ); - } -} -} // mock - -#endif // MOCK_STREAM_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_STREAM_HPP_INCLUDED +#define MOCK_STREAM_HPP_INCLUDED + +#include "config.hpp" +#include +#include + +namespace mock +{ + struct stream + { + explicit stream( std::ostream& s ) + : s_( &s ) + {} + std::ostream* s_; + }; + +#ifdef MOCK_USE_CONVERSIONS + +namespace detail +{ +namespace conversion +{ + struct sink + { + template< typename T > + sink( const T& ) + {} + }; + + inline std::ostream& operator<<( std::ostream& s, const sink& ) + { + return s << '?'; + } + + struct holder : boost::noncopyable + { + virtual ~holder() + {} + virtual void serialize( std::ostream& s ) const = 0; + }; + + template< typename T > + struct holder_imp : holder + { + explicit holder_imp( const T& t ) + : t_( t ) + {} + virtual void serialize( std::ostream& s ) const + { + // if an error about an ambiguous conversion is generated by the + // line below the solution is to add a serialization operator to a + // mock::stream for T + s << t_; + } + const T& t_; + }; + + struct any : boost::noncopyable + { + template< typename T > + any( const T& t ) + : h_( new holder_imp< T >( t ) ) + {} + ~any() + { + delete h_; + } + holder* h_; + }; +} +} + + inline stream& operator<<( stream& s, const detail::conversion::any& d ) + { + d.h_->serialize( *s.s_ ); + return s; + } + +#else // MOCK_USE_CONVERSIONS + +namespace detail +{ +namespace conversion +{ + template< typename S, typename T > + S& operator<<( S &s, const T& ) + { + return s << '?'; + } +} +} + + template< typename T > + stream& operator<<( stream& s, const T& t ) + { + using namespace detail::conversion; + *s.s_ << t; + return s; + } + +#endif // MOCK_USE_CONVERSIONS + +namespace detail +{ + template< typename T > + void serialize( stream& s, const T& t ) + { + // if an error about an ambiguous conversion is generated by the + // line below the solution is to add a serialization operator to a + // mock::stream for T + s << t; + } + inline void serialize( stream& s, bool b ) + { + s << (b ? "true" : "false"); + } + template< typename C, typename T, typename A > + void serialize( stream& s, const std::basic_string< C, T, A >& str ) + { + s << '"' << str << '"'; + } + inline void serialize( stream& s, const char* const str ) + { + s << '"' << str << '"'; + } + inline void serialize( stream& s, unsigned char c ) + { + s << static_cast< int >( c ); + } +} +} // mock + +#endif // MOCK_STREAM_HPP_INCLUDED diff --git a/turtle/verify.hpp b/include/turtle/verify.hpp similarity index 95% rename from turtle/verify.hpp rename to include/turtle/verify.hpp index 55745b8..61df6df 100644 --- a/turtle/verify.hpp +++ b/include/turtle/verify.hpp @@ -1,34 +1,34 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_VERIFY_HPP_INCLUDED -#define MOCK_VERIFY_HPP_INCLUDED - -#include "config.hpp" -#include "object.hpp" -#include "detail/root.hpp" -#include "detail/functor.hpp" - -namespace mock -{ - inline bool verify() - { - return detail::root.verify(); - } - inline bool verify( const object& o ) - { - return o.impl_->verify(); - } - template< typename Signature > - bool verify( const detail::functor< Signature >& f ) - { - return f.verify(); - } -} // mock - -#endif // MOCK_VERIFY_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2012 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_VERIFY_HPP_INCLUDED +#define MOCK_VERIFY_HPP_INCLUDED + +#include "config.hpp" +#include "object.hpp" +#include "detail/root.hpp" +#include "detail/functor.hpp" + +namespace mock +{ + inline bool verify() + { + return detail::root.verify(); + } + inline bool verify( const object& o ) + { + return o.impl_->verify(); + } + template< typename Signature > + bool verify( const detail::functor< Signature >& f ) + { + return f.verify(); + } +} // mock + +#endif // MOCK_VERIFY_HPP_INCLUDED diff --git a/build/boost/index.html b/index.html similarity index 94% rename from build/boost/index.html rename to index.html index c23a85c..cfecfa2 100644 --- a/build/boost/index.html +++ b/index.html @@ -1,3 +1,4 @@ + diff --git a/build/boost/test/Jamfile.jam b/test/Jamfile.jam similarity index 89% rename from build/boost/test/Jamfile.jam rename to test/Jamfile.jam index 2a4b494..274f689 100644 --- a/build/boost/test/Jamfile.jam +++ b/test/Jamfile.jam @@ -30,7 +30,7 @@ rule run-test ( name ) run $(name) undefined.cpp /boost//unit_test_framework : : : MOCK_USE_CONVERSIONS : $(name)_use_conversions ; run $(name) undefined.cpp /boost//unit_test_framework : : : MOCK_NO_DECLTYPE : $(name)_no_decltype ; run $(name) undefined.cpp /boost//unit_test_framework : : : MOCK_NO_VARIADIC_MACROS : $(name)_no_variadic_macros ; - run $(name) undefined.cpp /boost//unit_test_framework : : : MOCK_THREAD_SAFE : $(name)_thread_safe ; + run $(name) undefined.cpp /boost//unit_test_framework /boost//thread : : : MOCK_THREAD_SAFE BOOST_THREAD_USES_MOVE : $(name)_thread_safe ; } rule run-tests diff --git a/test/bench_0_class.cpp b/test/bench_0_class.cpp index 88ea541..1eb2d15 100644 --- a/test/bench_0_class.cpp +++ b/test/bench_0_class.cpp @@ -1,14 +1,14 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include - -int main() -{ - return 0; -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +int main() +{ + return 0; +} diff --git a/test/bench_0_class_10_max_args.cpp b/test/bench_0_class_10_max_args.cpp index 1f4c699..0772e7d 100644 --- a/test/bench_0_class_10_max_args.cpp +++ b/test/bench_0_class_10_max_args.cpp @@ -1,10 +1,10 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define MOCK_MAX_ARGS 10 -#include +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define MOCK_MAX_ARGS 10 +#include diff --git a/test/bench_0_class_20_max_args.cpp b/test/bench_0_class_20_max_args.cpp index 6070b61..b236e09 100644 --- a/test/bench_0_class_20_max_args.cpp +++ b/test/bench_0_class_20_max_args.cpp @@ -1,10 +1,10 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define MOCK_MAX_ARGS 20 -#include +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define MOCK_MAX_ARGS 20 +#include diff --git a/test/bench_0_class_30_max_args.cpp b/test/bench_0_class_30_max_args.cpp index 3536d2e..d87d02f 100644 --- a/test/bench_0_class_30_max_args.cpp +++ b/test/bench_0_class_30_max_args.cpp @@ -1,10 +1,10 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define MOCK_MAX_ARGS 30 -#include +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define MOCK_MAX_ARGS 30 +#include diff --git a/test/bench_30_classes_30_methods_30_args_30_max_args.cpp b/test/bench_30_classes_30_methods_30_args_30_max_args.cpp index 8b66908..7872dc2 100644 --- a/test/bench_30_classes_30_methods_30_args_30_max_args.cpp +++ b/test/bench_30_classes_30_methods_30_args_30_max_args.cpp @@ -1,1134 +1,1134 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define MOCK_MAX_ARGS 30 -#include -#ifdef _MSC_VER -#pragma warning( disable: 4505 ) -#endif - -namespace -{ - class base_class - { - public: - virtual ~base_class() {} - virtual void f1( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f2( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f3( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f4( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f5( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f6( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f7( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f8( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f9( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f10( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f11( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f12( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f13( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f14( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f15( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f16( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f17( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f18( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f19( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f20( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f21( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f22( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f23( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f24( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f25( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f26( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f27( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f28( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f29( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f30( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - }; - - MOCK_BASE_CLASS( mock_class_1, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_2, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_3, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_4, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_5, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_6, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_7, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_8, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_9, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_10, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_11, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_12, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_13, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_14, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_15, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_16, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_17, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_18, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_19, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_20, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_21, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_22, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_23, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_24, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_25, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_26, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_27, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_28, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_29, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_30, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - - mock_class_1 c_1; - mock_class_2 c_2; - mock_class_3 c_3; - mock_class_4 c_4; - mock_class_5 c_5; - mock_class_6 c_6; - mock_class_7 c_7; - mock_class_8 c_8; - mock_class_9 c_9; - mock_class_10 c_10; - mock_class_11 c_11; - mock_class_12 c_12; - mock_class_13 c_13; - mock_class_14 c_14; - mock_class_15 c_15; - mock_class_16 c_16; - mock_class_17 c_17; - mock_class_18 c_18; - mock_class_19 c_19; - mock_class_20 c_20; - mock_class_21 c_21; - mock_class_22 c_22; - mock_class_23 c_23; - mock_class_24 c_24; - mock_class_25 c_25; - mock_class_26 c_26; - mock_class_27 c_27; - mock_class_28 c_28; - mock_class_29 c_29; - mock_class_30 c_30; -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define MOCK_MAX_ARGS 30 +#include +#ifdef _MSC_VER +#pragma warning( disable: 4505 ) +#endif + +namespace +{ + class base_class + { + public: + virtual ~base_class() {} + virtual void f1( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f2( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f3( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f4( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f5( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f6( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f7( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f8( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f9( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f10( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f11( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f12( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f13( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f14( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f15( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f16( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f17( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f18( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f19( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f20( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f21( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f22( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f23( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f24( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f25( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f26( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f27( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f28( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f29( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + virtual void f30( int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int, + int, int, int, int, int, int, int, int, int, int ) = 0; + }; + + MOCK_BASE_CLASS( mock_class_1, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_2, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_3, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_4, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_5, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_6, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_7, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_8, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_9, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_10, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_11, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_12, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_13, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_14, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_15, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_16, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_17, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_18, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_19, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_20, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_21, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_22, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_23, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_24, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_25, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_26, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_27, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_28, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_29, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + MOCK_BASE_CLASS( mock_class_30, base_class ) + { + MOCK_METHOD( f1, 30 ) + MOCK_METHOD( f2, 30 ) + MOCK_METHOD( f3, 30 ) + MOCK_METHOD( f4, 30 ) + MOCK_METHOD( f5, 30 ) + MOCK_METHOD( f6, 30 ) + MOCK_METHOD( f7, 30 ) + MOCK_METHOD( f8, 30 ) + MOCK_METHOD( f9, 30 ) + MOCK_METHOD( f10, 30 ) + MOCK_METHOD( f11, 30 ) + MOCK_METHOD( f12, 30 ) + MOCK_METHOD( f13, 30 ) + MOCK_METHOD( f14, 30 ) + MOCK_METHOD( f15, 30 ) + MOCK_METHOD( f16, 30 ) + MOCK_METHOD( f17, 30 ) + MOCK_METHOD( f18, 30 ) + MOCK_METHOD( f19, 30 ) + MOCK_METHOD( f20, 30 ) + MOCK_METHOD( f21, 30 ) + MOCK_METHOD( f22, 30 ) + MOCK_METHOD( f23, 30 ) + MOCK_METHOD( f24, 30 ) + MOCK_METHOD( f25, 30 ) + MOCK_METHOD( f26, 30 ) + MOCK_METHOD( f27, 30 ) + MOCK_METHOD( f28, 30 ) + MOCK_METHOD( f29, 30 ) + MOCK_METHOD( f30, 30 ) + }; + + mock_class_1 c_1; + mock_class_2 c_2; + mock_class_3 c_3; + mock_class_4 c_4; + mock_class_5 c_5; + mock_class_6 c_6; + mock_class_7 c_7; + mock_class_8 c_8; + mock_class_9 c_9; + mock_class_10 c_10; + mock_class_11 c_11; + mock_class_12 c_12; + mock_class_13 c_13; + mock_class_14 c_14; + mock_class_15 c_15; + mock_class_16 c_16; + mock_class_17 c_17; + mock_class_18 c_18; + mock_class_19 c_19; + mock_class_20 c_20; + mock_class_21 c_21; + mock_class_22 c_22; + mock_class_23 c_23; + mock_class_24 c_24; + mock_class_25 c_25; + mock_class_26 c_26; + mock_class_27 c_27; + mock_class_28 c_28; + mock_class_29 c_29; + mock_class_30 c_30; +} diff --git a/test/bench_30_classes_30_methods_9_args.cpp b/test/bench_30_classes_30_methods_9_args.cpp index 20f430e..67d1b65 100644 --- a/test/bench_30_classes_30_methods_9_args.cpp +++ b/test/bench_30_classes_30_methods_9_args.cpp @@ -1,1073 +1,1073 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#ifdef _MSC_VER -#pragma warning( disable: 4505 ) -#endif - -namespace -{ - class base_class - { - public: - virtual ~base_class() {} - virtual void f1( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f2( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f3( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f4( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f5( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f6( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f7( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f8( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f9( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f10( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f11( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f12( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f13( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f14( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f15( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f16( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f17( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f18( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f19( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f20( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f21( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f22( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f23( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f24( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f25( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f26( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f27( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f28( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f29( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f30( int, int, int, int, int, int, int, int, int ) = 0; - }; - - MOCK_BASE_CLASS( mock_class_1, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_2, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_3, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_4, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_5, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_6, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_7, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_8, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_9, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_10, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_11, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_12, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_13, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_14, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_15, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_16, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_17, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_18, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_19, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_20, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_21, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_22, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_23, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_24, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_25, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_26, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_27, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_28, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_29, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_30, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - - mock_class_1 c_1; - mock_class_2 c_2; - mock_class_3 c_3; - mock_class_4 c_4; - mock_class_5 c_5; - mock_class_6 c_6; - mock_class_7 c_7; - mock_class_8 c_8; - mock_class_9 c_9; - mock_class_10 c_10; - mock_class_11 c_11; - mock_class_12 c_12; - mock_class_13 c_13; - mock_class_14 c_14; - mock_class_15 c_15; - mock_class_16 c_16; - mock_class_17 c_17; - mock_class_18 c_18; - mock_class_19 c_19; - mock_class_20 c_20; - mock_class_21 c_21; - mock_class_22 c_22; - mock_class_23 c_23; - mock_class_24 c_24; - mock_class_25 c_25; - mock_class_26 c_26; - mock_class_27 c_27; - mock_class_28 c_28; - mock_class_29 c_29; - mock_class_30 c_30; -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#ifdef _MSC_VER +#pragma warning( disable: 4505 ) +#endif + +namespace +{ + class base_class + { + public: + virtual ~base_class() {} + virtual void f1( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f2( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f3( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f4( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f5( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f6( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f7( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f8( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f9( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f10( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f11( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f12( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f13( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f14( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f15( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f16( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f17( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f18( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f19( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f20( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f21( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f22( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f23( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f24( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f25( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f26( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f27( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f28( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f29( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f30( int, int, int, int, int, int, int, int, int ) = 0; + }; + + MOCK_BASE_CLASS( mock_class_1, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_2, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_3, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_4, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_5, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_6, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_7, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_8, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_9, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_10, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_11, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_12, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_13, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_14, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_15, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_16, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_17, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_18, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_19, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_20, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_21, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_22, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_23, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_24, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_25, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_26, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_27, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_28, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_29, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_30, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + + mock_class_1 c_1; + mock_class_2 c_2; + mock_class_3 c_3; + mock_class_4 c_4; + mock_class_5 c_5; + mock_class_6 c_6; + mock_class_7 c_7; + mock_class_8 c_8; + mock_class_9 c_9; + mock_class_10 c_10; + mock_class_11 c_11; + mock_class_12 c_12; + mock_class_13 c_13; + mock_class_14 c_14; + mock_class_15 c_15; + mock_class_16 c_16; + mock_class_17 c_17; + mock_class_18 c_18; + mock_class_19 c_19; + mock_class_20 c_20; + mock_class_21 c_21; + mock_class_22 c_22; + mock_class_23 c_23; + mock_class_24 c_24; + mock_class_25 c_25; + mock_class_26 c_26; + mock_class_27 c_27; + mock_class_28 c_28; + mock_class_29 c_29; + mock_class_30 c_30; +} diff --git a/test/bench_30_classes_30_methods_9_args_10_max_args.cpp b/test/bench_30_classes_30_methods_9_args_10_max_args.cpp index 4b13596..61a553c 100644 --- a/test/bench_30_classes_30_methods_9_args_10_max_args.cpp +++ b/test/bench_30_classes_30_methods_9_args_10_max_args.cpp @@ -1,1074 +1,1074 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define MOCK_MAX_ARGS 10 -#include -#ifdef _MSC_VER -#pragma warning( disable: 4505 ) -#endif - -namespace -{ - class base_class - { - public: - virtual ~base_class() {} - virtual void f1( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f2( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f3( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f4( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f5( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f6( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f7( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f8( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f9( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f10( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f11( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f12( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f13( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f14( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f15( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f16( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f17( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f18( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f19( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f20( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f21( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f22( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f23( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f24( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f25( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f26( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f27( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f28( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f29( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f30( int, int, int, int, int, int, int, int, int ) = 0; - }; - - MOCK_BASE_CLASS( mock_class_1, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_2, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_3, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_4, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_5, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_6, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_7, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_8, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_9, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_10, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_11, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_12, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_13, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_14, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_15, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_16, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_17, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_18, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_19, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_20, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_21, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_22, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_23, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_24, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_25, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_26, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_27, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_28, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_29, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_30, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - - mock_class_1 c_1; - mock_class_2 c_2; - mock_class_3 c_3; - mock_class_4 c_4; - mock_class_5 c_5; - mock_class_6 c_6; - mock_class_7 c_7; - mock_class_8 c_8; - mock_class_9 c_9; - mock_class_10 c_10; - mock_class_11 c_11; - mock_class_12 c_12; - mock_class_13 c_13; - mock_class_14 c_14; - mock_class_15 c_15; - mock_class_16 c_16; - mock_class_17 c_17; - mock_class_18 c_18; - mock_class_19 c_19; - mock_class_20 c_20; - mock_class_21 c_21; - mock_class_22 c_22; - mock_class_23 c_23; - mock_class_24 c_24; - mock_class_25 c_25; - mock_class_26 c_26; - mock_class_27 c_27; - mock_class_28 c_28; - mock_class_29 c_29; - mock_class_30 c_30; -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define MOCK_MAX_ARGS 10 +#include +#ifdef _MSC_VER +#pragma warning( disable: 4505 ) +#endif + +namespace +{ + class base_class + { + public: + virtual ~base_class() {} + virtual void f1( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f2( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f3( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f4( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f5( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f6( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f7( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f8( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f9( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f10( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f11( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f12( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f13( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f14( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f15( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f16( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f17( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f18( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f19( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f20( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f21( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f22( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f23( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f24( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f25( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f26( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f27( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f28( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f29( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f30( int, int, int, int, int, int, int, int, int ) = 0; + }; + + MOCK_BASE_CLASS( mock_class_1, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_2, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_3, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_4, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_5, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_6, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_7, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_8, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_9, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_10, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_11, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_12, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_13, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_14, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_15, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_16, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_17, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_18, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_19, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_20, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_21, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_22, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_23, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_24, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_25, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_26, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_27, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_28, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_29, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_30, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + + mock_class_1 c_1; + mock_class_2 c_2; + mock_class_3 c_3; + mock_class_4 c_4; + mock_class_5 c_5; + mock_class_6 c_6; + mock_class_7 c_7; + mock_class_8 c_8; + mock_class_9 c_9; + mock_class_10 c_10; + mock_class_11 c_11; + mock_class_12 c_12; + mock_class_13 c_13; + mock_class_14 c_14; + mock_class_15 c_15; + mock_class_16 c_16; + mock_class_17 c_17; + mock_class_18 c_18; + mock_class_19 c_19; + mock_class_20 c_20; + mock_class_21 c_21; + mock_class_22 c_22; + mock_class_23 c_23; + mock_class_24 c_24; + mock_class_25 c_25; + mock_class_26 c_26; + mock_class_27 c_27; + mock_class_28 c_28; + mock_class_29 c_29; + mock_class_30 c_30; +} diff --git a/test/bench_30_classes_30_methods_9_args_20_max_args.cpp b/test/bench_30_classes_30_methods_9_args_20_max_args.cpp index a3f00d9..fe442fa 100644 --- a/test/bench_30_classes_30_methods_9_args_20_max_args.cpp +++ b/test/bench_30_classes_30_methods_9_args_20_max_args.cpp @@ -1,1074 +1,1074 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define MOCK_MAX_ARGS 20 -#include -#ifdef _MSC_VER -#pragma warning( disable: 4505 ) -#endif - -namespace -{ - class base_class - { - public: - virtual ~base_class() {} - virtual void f1( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f2( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f3( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f4( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f5( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f6( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f7( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f8( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f9( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f10( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f11( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f12( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f13( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f14( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f15( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f16( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f17( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f18( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f19( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f20( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f21( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f22( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f23( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f24( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f25( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f26( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f27( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f28( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f29( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f30( int, int, int, int, int, int, int, int, int ) = 0; - }; - - MOCK_BASE_CLASS( mock_class_1, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_2, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_3, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_4, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_5, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_6, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_7, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_8, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_9, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_10, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_11, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_12, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_13, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_14, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_15, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_16, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_17, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_18, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_19, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_20, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_21, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_22, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_23, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_24, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_25, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_26, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_27, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_28, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_29, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_30, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - - mock_class_1 c_1; - mock_class_2 c_2; - mock_class_3 c_3; - mock_class_4 c_4; - mock_class_5 c_5; - mock_class_6 c_6; - mock_class_7 c_7; - mock_class_8 c_8; - mock_class_9 c_9; - mock_class_10 c_10; - mock_class_11 c_11; - mock_class_12 c_12; - mock_class_13 c_13; - mock_class_14 c_14; - mock_class_15 c_15; - mock_class_16 c_16; - mock_class_17 c_17; - mock_class_18 c_18; - mock_class_19 c_19; - mock_class_20 c_20; - mock_class_21 c_21; - mock_class_22 c_22; - mock_class_23 c_23; - mock_class_24 c_24; - mock_class_25 c_25; - mock_class_26 c_26; - mock_class_27 c_27; - mock_class_28 c_28; - mock_class_29 c_29; - mock_class_30 c_30; -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define MOCK_MAX_ARGS 20 +#include +#ifdef _MSC_VER +#pragma warning( disable: 4505 ) +#endif + +namespace +{ + class base_class + { + public: + virtual ~base_class() {} + virtual void f1( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f2( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f3( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f4( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f5( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f6( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f7( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f8( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f9( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f10( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f11( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f12( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f13( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f14( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f15( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f16( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f17( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f18( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f19( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f20( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f21( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f22( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f23( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f24( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f25( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f26( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f27( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f28( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f29( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f30( int, int, int, int, int, int, int, int, int ) = 0; + }; + + MOCK_BASE_CLASS( mock_class_1, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_2, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_3, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_4, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_5, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_6, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_7, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_8, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_9, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_10, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_11, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_12, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_13, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_14, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_15, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_16, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_17, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_18, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_19, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_20, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_21, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_22, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_23, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_24, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_25, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_26, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_27, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_28, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_29, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_30, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + + mock_class_1 c_1; + mock_class_2 c_2; + mock_class_3 c_3; + mock_class_4 c_4; + mock_class_5 c_5; + mock_class_6 c_6; + mock_class_7 c_7; + mock_class_8 c_8; + mock_class_9 c_9; + mock_class_10 c_10; + mock_class_11 c_11; + mock_class_12 c_12; + mock_class_13 c_13; + mock_class_14 c_14; + mock_class_15 c_15; + mock_class_16 c_16; + mock_class_17 c_17; + mock_class_18 c_18; + mock_class_19 c_19; + mock_class_20 c_20; + mock_class_21 c_21; + mock_class_22 c_22; + mock_class_23 c_23; + mock_class_24 c_24; + mock_class_25 c_25; + mock_class_26 c_26; + mock_class_27 c_27; + mock_class_28 c_28; + mock_class_29 c_29; + mock_class_30 c_30; +} diff --git a/test/bench_30_classes_30_methods_9_args_30_max_args.cpp b/test/bench_30_classes_30_methods_9_args_30_max_args.cpp index a9f10c2..3f6e0af 100644 --- a/test/bench_30_classes_30_methods_9_args_30_max_args.cpp +++ b/test/bench_30_classes_30_methods_9_args_30_max_args.cpp @@ -1,1074 +1,1074 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define MOCK_MAX_ARGS 30 -#include -#ifdef _MSC_VER -#pragma warning( disable: 4505 ) -#endif - -namespace -{ - class base_class - { - public: - virtual ~base_class() {} - virtual void f1( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f2( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f3( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f4( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f5( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f6( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f7( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f8( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f9( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f10( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f11( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f12( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f13( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f14( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f15( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f16( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f17( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f18( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f19( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f20( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f21( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f22( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f23( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f24( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f25( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f26( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f27( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f28( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f29( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f30( int, int, int, int, int, int, int, int, int ) = 0; - }; - - MOCK_BASE_CLASS( mock_class_1, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_2, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_3, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_4, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_5, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_6, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_7, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_8, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_9, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_10, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_11, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_12, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_13, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_14, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_15, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_16, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_17, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_18, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_19, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_20, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_21, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_22, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_23, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_24, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_25, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_26, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_27, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_28, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_29, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_30, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - - mock_class_1 c_1; - mock_class_2 c_2; - mock_class_3 c_3; - mock_class_4 c_4; - mock_class_5 c_5; - mock_class_6 c_6; - mock_class_7 c_7; - mock_class_8 c_8; - mock_class_9 c_9; - mock_class_10 c_10; - mock_class_11 c_11; - mock_class_12 c_12; - mock_class_13 c_13; - mock_class_14 c_14; - mock_class_15 c_15; - mock_class_16 c_16; - mock_class_17 c_17; - mock_class_18 c_18; - mock_class_19 c_19; - mock_class_20 c_20; - mock_class_21 c_21; - mock_class_22 c_22; - mock_class_23 c_23; - mock_class_24 c_24; - mock_class_25 c_25; - mock_class_26 c_26; - mock_class_27 c_27; - mock_class_28 c_28; - mock_class_29 c_29; - mock_class_30 c_30; -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define MOCK_MAX_ARGS 30 +#include +#ifdef _MSC_VER +#pragma warning( disable: 4505 ) +#endif + +namespace +{ + class base_class + { + public: + virtual ~base_class() {} + virtual void f1( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f2( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f3( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f4( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f5( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f6( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f7( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f8( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f9( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f10( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f11( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f12( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f13( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f14( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f15( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f16( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f17( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f18( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f19( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f20( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f21( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f22( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f23( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f24( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f25( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f26( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f27( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f28( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f29( int, int, int, int, int, int, int, int, int ) = 0; + virtual void f30( int, int, int, int, int, int, int, int, int ) = 0; + }; + + MOCK_BASE_CLASS( mock_class_1, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_2, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_3, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_4, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_5, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_6, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_7, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_8, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_9, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_10, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_11, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_12, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_13, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_14, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_15, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_16, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_17, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_18, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_19, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_20, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_21, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_22, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_23, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_24, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_25, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_26, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_27, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_28, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_29, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + MOCK_BASE_CLASS( mock_class_30, base_class ) + { + MOCK_METHOD( f1, 9 ) + MOCK_METHOD( f2, 9 ) + MOCK_METHOD( f3, 9 ) + MOCK_METHOD( f4, 9 ) + MOCK_METHOD( f5, 9 ) + MOCK_METHOD( f6, 9 ) + MOCK_METHOD( f7, 9 ) + MOCK_METHOD( f8, 9 ) + MOCK_METHOD( f9, 9 ) + MOCK_METHOD( f10, 9 ) + MOCK_METHOD( f11, 9 ) + MOCK_METHOD( f12, 9 ) + MOCK_METHOD( f13, 9 ) + MOCK_METHOD( f14, 9 ) + MOCK_METHOD( f15, 9 ) + MOCK_METHOD( f16, 9 ) + MOCK_METHOD( f17, 9 ) + MOCK_METHOD( f18, 9 ) + MOCK_METHOD( f19, 9 ) + MOCK_METHOD( f20, 9 ) + MOCK_METHOD( f21, 9 ) + MOCK_METHOD( f22, 9 ) + MOCK_METHOD( f23, 9 ) + MOCK_METHOD( f24, 9 ) + MOCK_METHOD( f25, 9 ) + MOCK_METHOD( f26, 9 ) + MOCK_METHOD( f27, 9 ) + MOCK_METHOD( f28, 9 ) + MOCK_METHOD( f29, 9 ) + MOCK_METHOD( f30, 9 ) + }; + + mock_class_1 c_1; + mock_class_2 c_2; + mock_class_3 c_3; + mock_class_4 c_4; + mock_class_5 c_5; + mock_class_6 c_6; + mock_class_7 c_7; + mock_class_8 c_8; + mock_class_9 c_9; + mock_class_10 c_10; + mock_class_11 c_11; + mock_class_12 c_12; + mock_class_13 c_13; + mock_class_14 c_14; + mock_class_15 c_15; + mock_class_16 c_16; + mock_class_17 c_17; + mock_class_18 c_18; + mock_class_19 c_19; + mock_class_20 c_20; + mock_class_21 c_21; + mock_class_22 c_22; + mock_class_23 c_23; + mock_class_24 c_24; + mock_class_25 c_25; + mock_class_26 c_26; + mock_class_27 c_27; + mock_class_28 c_28; + mock_class_29 c_29; + mock_class_30 c_30; +} diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index 3210dbe..d1e9808 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -1,903 +1,902 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define BOOST_AUTO_TEST_MAIN -#include "../mock_error.hpp" -#include "../undefined.hpp" -#include -#include -#include -#include -#include -#include -#include - -// static - -namespace -{ - boost::function< void() > static_f; - - BOOST_MPL_ASSERT(( - boost::is_same< void, boost::result_of< mock::detail::function< void() >() >::type > )); - BOOST_MPL_ASSERT(( - boost::is_same< int, boost::result_of< mock::detail::function< int() >() >::type > )); - BOOST_MPL_ASSERT(( - boost::is_same< void, boost::result_of< mock::detail::function< void( float ) >( float ) >::type > )); - BOOST_MPL_ASSERT(( - boost::is_same< int, boost::result_of< mock::detail::function< int( float ) >( float ) >::type > )); -} - -// functor - -BOOST_FIXTURE_TEST_CASE( a_function_can_be_passed_as_functor, mock_error_fixture ) -{ - mock::detail::function< void() > f; - boost::function< void() > functor = f; -} - -BOOST_FIXTURE_TEST_CASE( a_function_can_be_passed_as_functor_using_boost_bind_and_boost_ref, mock_error_fixture ) -{ - mock::detail::function< void() > f; - boost::function< void() > functor = boost::bind( boost::ref( f ) ); -} - -// invocations - -BOOST_FIXTURE_TEST_CASE( triggering_an_unconfigured_function_calls_unexpected_call_error, mock_error_fixture ) -{ - { - mock::detail::function< void() > f; - CHECK_ERROR( f(), "unexpected call", 0, "?()" ); - } - { - mock::detail::function< int( int, const std::string& ) > f; - CHECK_ERROR( f( 1, "s" ), "unexpected call", 0, "?( 1, \"s\" )" ); - } -} - -BOOST_FIXTURE_TEST_CASE( triggering_a_never_expectation_calls_unexpected_call_error, mock_error_fixture ) -{ - { - mock::detail::function< void() > f; - f.expect().never(); - CHECK_ERROR( f(), "unexpected call", 0, "?()\nv never()" ); - } - { - mock::detail::function< int( int, const std::string& ) > f; - f.expect().never(); - CHECK_ERROR( f( 1, "s" ), "unexpected call", 0, "?( 1, \"s\" )\nv never().with( any, any )" ); - } -} - -BOOST_FIXTURE_TEST_CASE( triggering_an_unlimited_expectation_is_valid, mock_error_fixture ) -{ - { - mock::detail::function< void() > f; - f.expect(); - f(); - f(); - CHECK_CALLS( 2 ); - } - { - mock::detail::function< void( int, const std::string& ) > f; - f.expect(); - f( 1, "s" ); - f( 1, "s" ); - CHECK_CALLS( 2 ); - } -} - -BOOST_FIXTURE_TEST_CASE( triggering_a_once_expectation_calls_unexpected_call_error_after_one_call, mock_error_fixture ) -{ - { - mock::detail::function< void() > f; - f.expect().once(); - f(); - CHECK_ERROR( f(), "unexpected call", 1, "?()\nv once()" ); - } - { - mock::detail::function< void( int, const std::string& ) > f; - f.expect().once(); - f( 1, "s" ); - CHECK_ERROR( f( 1, "s" ), "unexpected call", 1, "?( 1, \"s\" )\nv once().with( any, any )" ); - } -} - -BOOST_FIXTURE_TEST_CASE( literal_zero_can_be_used_in_function_call_as_pointers, mock_error_fixture ) -{ - mock::detail::function< void( int* ) > f; - f.expect().once(); - f( 0 ); - CHECK_CALLS( 1 ); -} - -// verify - -BOOST_FIXTURE_TEST_CASE( verifying_an_unconfigured_function_succeeds, mock_error_fixture ) -{ - { - mock::detail::function< void() > f; - BOOST_CHECK( f.verify() ); - } - { - mock::detail::function< int( int, const std::string& ) > f; - BOOST_CHECK( f.verify() ); - } -} - -BOOST_FIXTURE_TEST_CASE( verifying_an_unlimited_expectation_succeeds, mock_error_fixture ) -{ - { - mock::detail::function< void() > f; - f.expect(); - BOOST_CHECK( f.verify() ); - CHECK_CALLS( 0 ); - } - { - mock::detail::function< int( int, const std::string& ) > f; - f.expect(); - BOOST_CHECK( f.verify() ); - CHECK_CALLS( 0 ); - } -} - -BOOST_FIXTURE_TEST_CASE( verifying_a_once_expectation_after_one_call_succeeds, mock_error_fixture ) -{ - { - mock::detail::function< void() > f; - f.expect().once(); - f(); - BOOST_CHECK( f.verify() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< void( int, const std::string& ) > f; - f.expect().once(); - f( 1, "s" ); - BOOST_CHECK( f.verify() ); - CHECK_CALLS( 1 ); - } -} - -BOOST_FIXTURE_TEST_CASE( verifying_a_once_expectation_before_the_call_fails, mock_error_fixture ) -{ - { - mock::detail::function< void() > f; - f.expect().once(); - CHECK_ERROR( BOOST_CHECK( ! f.verify() ), "verification failed", 0, "?\n. once()" ); - } - { - mock::detail::function< int( int, const std::string& ) > f; - f.expect().once(); - CHECK_ERROR( BOOST_CHECK( ! f.verify() ), "verification failed", 0, "?\n. once().with( any, any )" ); - } -} - -BOOST_FIXTURE_TEST_CASE( verifying_a_once_expectation_after_a_verify_and_one_call_succeeds, mock_error_fixture ) -{ - mock::detail::function< void() > f; - f.expect().once(); - CHECK_ERROR( BOOST_CHECK( ! f.verify() ), "verification failed", 0, "?\n. once()" ); - f(); - BOOST_CHECK( f.verify() ); - CHECK_CALLS( 1 ); -} - -// reset - -BOOST_FIXTURE_TEST_CASE( triggering_a_reset_function_calls_unexpected_call_error, mock_error_fixture ) -{ - { - mock::detail::function< void() > f; - f.expect(); - f.reset(); - CHECK_ERROR( f(), "unexpected call", 0, "?()" ); - } - { - mock::detail::function< int( int, const std::string& ) > f; - f.expect(); - f.reset(); - CHECK_ERROR( f( 1, "s" ), "unexpected call", 0, "?( 1, \"s\" )" ); - } -} - -BOOST_FIXTURE_TEST_CASE( verifying_a_reset_function_succeeds, mock_error_fixture ) -{ - { - mock::detail::function< void() > f; - f.expect(); - f.reset(); - BOOST_CHECK( f.verify() ); - } - { - mock::detail::function< int( int, const std::string& ) > f; - f.expect(); - f.reset(); - BOOST_CHECK( f.verify() ); - } -} - -// constraints - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_wrong_parameter_value_in_equal_constraint_calls_unexpected_call_error, mock_error_fixture ) -{ - { - mock::detail::function< void( int ) > f; - f.expect().with( 42 ); - CHECK_ERROR( f( 43 ), "unexpected call", 0, "?( 43 )\n. unlimited().with( 42 )" ); - } - { - mock::detail::function< int( int, const std::string& ) > f; - f.expect().with( 42, "expected" ); - CHECK_ERROR( f( 42, "actual" ), "unexpected call", 0, "?( 42, \"actual\" )\n. unlimited().with( 42, \"expected\" )" ); - } -} - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_wrong_parameter_value_in_equal_or_less_constraint_calls_unexpected_call_error, mock_error_fixture ) -{ - mock::detail::function< void( int ) > f; - f.expect().with( mock::equal( 42 ) || mock::less( 42 ) ); - f( 41 ); - f( 42 ); - CHECK_ERROR( f( 43 ), "unexpected call", 2, "?( 43 )\n. unlimited().with( ( equal( 42 ) || less( 42 ) ) )" ); -} - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_wrong_parameter_value_in_equal_and_not_less_constraint_calls_unexpected_call_error, mock_error_fixture ) -{ - mock::detail::function< void( int ) > f; - f.expect().with( mock::equal( 42 ) && ! mock::less( 41 ) ); - f( 42 ); - CHECK_ERROR( f( 43 ), "unexpected call", 1, "?( 43 )\n. unlimited().with( ( equal( 42 ) && ! less( 41 ) ) )" ); -} - -namespace -{ - class my_interface : boost::noncopyable - { - public: - virtual ~my_interface() {} - private: - virtual void my_method() = 0; - }; - class my_implementation : public my_interface - { - virtual void my_method() {} - }; -} - -BOOST_FIXTURE_TEST_CASE( passing_call_values_by_reference_is_transparent, mock_error_fixture ) -{ - { - mock::detail::function< void( my_interface& ) > f; - my_implementation imp; - f.expect().with( mock::same( imp ) ); - f( imp ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< void( const my_interface& ) > f; - my_implementation imp; - f.expect().with( mock::same( imp ) ); - f( imp ); - CHECK_CALLS( 1 ); - } -} - -namespace -{ - bool custom_constraint( int ) - { - return false; - } -} - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_failing_custom_constraint_calls_unexpected_call_error, mock_error_fixture ) -{ - { - mock::detail::function< void( int ) > f; - f.expect().with( &custom_constraint ); - CHECK_ERROR( f( 42 ), "unexpected call", 0, "?( 42 )\n. unlimited().with( ? )" ); - } - { - mock::detail::function< int( int, const std::string& ) > f; - f.expect().with( &custom_constraint, "actual" ); - CHECK_ERROR( f( 42, "actual" ), "unexpected call", 0, "?( 42, \"actual\" )\n. unlimited().with( ?, \"actual\" )" ); - } -} - -//BOOST_FIXTURE_TEST_CASE( literal_zero_can_be_used_in_place_of_null_pointers_in_constraints, mock_error_fixture ) -//{ -// mock::detail::function< void( int* ) > f; -// f.expect().with( 0 ); -// f.reset(); -// CHECK_CALLS( 1 ); -//} - -#ifdef MOCK_NULLPTR - -BOOST_FIXTURE_TEST_CASE( nullptr_can_be_used_in_place_of_null_pointers_in_constraints, mock_error_fixture ) -{ - mock::detail::function< void( int* ) > f; - f.expect().with( nullptr ); - f( 0 ); - CHECK_CALLS( 1 ); -} - -#endif - -#ifdef MOCK_SMART_PTR - -BOOST_FIXTURE_TEST_CASE( unique_ptr_is_supported_as_parameter, mock_error_fixture ) -{ - mock::detail::function< void( std::unique_ptr< int > ) > f; - f.expect(); - std::unique_ptr< int > p( new int ); - f( std::move( p ) ); - CHECK_CALLS( 1 ); -} - -#endif // MOCK_SMART_PTR - -// result handling - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_no_return_set_calls_missing_action, mock_error_fixture ) -{ - { - mock::detail::function< int() > f; - f.expect(); - CHECK_ERROR( f(), "missing action", 0, "?()\n. unlimited()" ); - } - { - mock::detail::function< int&() > f; - f.expect(); - CHECK_ERROR( f(), "missing action", 0, "?()\n. unlimited()" ); - } - { - mock::detail::function< const std::string&() > f; - f.expect(); - CHECK_ERROR( f(), "missing action", 0, "?()\n. unlimited()" ); - } -} - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_the_set_value, mock_error_fixture ) -{ - { - mock::detail::function< int() > f; - f.expect().returns( 42 ); - BOOST_CHECK_EQUAL( 42, f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< int() > f; - const int i = 42; - f.expect().returns( i ); - BOOST_CHECK_EQUAL( i, f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< int() > f; - int i = 42; - f.expect().returns( boost::ref( i ) ); - i = 43; - BOOST_CHECK_EQUAL( 43, f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< int&() > f; - f.expect().returns( 42 ); - BOOST_CHECK_EQUAL( 42, f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< int&() > f; - const int result = 42; - f.expect().returns( result ); - BOOST_CHECK_EQUAL( result, f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< int&() > f; - int i = 42; - f.expect().returns( i ); - i = 43; - BOOST_CHECK_EQUAL( 42, f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< int&() > f; - int i = 42; - f.expect().returns( boost::ref( i ) ); - i = 43; - BOOST_CHECK_EQUAL( 43, f() ); - BOOST_CHECK_EQUAL( 12, f() = 12 ); - BOOST_CHECK_EQUAL( 12, i ); - CHECK_CALLS( 2 ); - } - { - mock::detail::function< std::string() > f; - f.expect().returns( "result" ); - BOOST_CHECK_EQUAL( "result", f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< const std::string&() > f; - f.expect().returns( "result" ); - BOOST_CHECK_EQUAL( "result", f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< int*() > f; - f.expect().returns( 0 ); - BOOST_CHECK( ! f() ); - CHECK_CALLS( 1 ); - } -#ifdef BOOST_MSVC // this produces a warning with gcc - { - mock::detail::function< int* const() > f; - int i = 0; - f.expect().returns( &i ); - BOOST_CHECK_EQUAL( &i, f() ); - CHECK_CALLS( 1 ); - } -#endif - { - mock::detail::function< int() > f; - f.expect().returns( 0 ); - BOOST_CHECK_EQUAL( 0, f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< int&() > f; - f.expect().returns( 0 ); - BOOST_CHECK_EQUAL( 0, f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< unsigned int() > f; - f.expect().returns( 0 ); - BOOST_CHECK_EQUAL( 0u, f() ); - CHECK_CALLS( 1 ); - } -} - -namespace -{ - struct base - { - virtual ~base() - {} - virtual void f() = 0; - }; - struct derived : base - { - virtual void f() - {} - }; -} - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_the_set_auto_ptr_value, mock_error_fixture ) -{ - { - mock::detail::function< std::auto_ptr< int >() > f; - std::auto_ptr< int > ptr( new int( 3 ) ); - f.expect().returns( boost::ref( ptr ) ); - BOOST_CHECK_EQUAL( 3, *ptr ); - BOOST_CHECK_EQUAL( 3, *f() ); - BOOST_CHECK( ! ptr.get() ); - BOOST_CHECK( ! f().get() ); - CHECK_CALLS( 2 ); - } - { - mock::detail::function< std::auto_ptr< int >() > f; - std::auto_ptr< int > ptr( new int( 3 ) ); - f.expect().returns( ptr ); - BOOST_CHECK( ! ptr.get() ); - BOOST_CHECK_EQUAL( 3, *f() ); - BOOST_CHECK( ! f().get() ); - CHECK_CALLS( 2 ); - } - { - mock::detail::function< std::auto_ptr< int >() > f; - f.expect().returns( new int( 3 ) ); - BOOST_CHECK_EQUAL( 3, *f() ); - BOOST_CHECK( ! f().get() ); - CHECK_CALLS( 2 ); - } - { - mock::detail::function< std::auto_ptr< int >() > f; - f.expect().returns( std::auto_ptr< int >( new int( 3 ) ) ); - BOOST_CHECK_EQUAL( 3, *f() ); - BOOST_CHECK( ! f().get() ); - CHECK_CALLS( 2 ); - } - { - mock::detail::function< std::auto_ptr< base >() > f; - f.expect().returns( new derived ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< std::auto_ptr< base >() > f; - f.expect().returns( std::auto_ptr< base >( new derived ) ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< std::auto_ptr< base >() > f; - f.expect().returns( std::auto_ptr< derived >( new derived ) ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); - } -} - -#ifdef MOCK_RVALUE_REFERENCES - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_lvalue, mock_error_fixture ) -{ - mock::detail::function< int() > f; - int i = 3; - f.expect().moves( i ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); -} - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_const_lvalue, mock_error_fixture ) -{ - mock::detail::function< int() > f; - const int i = 3; - f.expect().moves( i ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); -} - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_rvalue, mock_error_fixture ) -{ - mock::detail::function< int() > f; - f.expect().moves( 3 ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); -} - -#endif - -#ifdef MOCK_SMART_PTR - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_unique_ptr_lvalue, mock_error_fixture ) -{ - mock::detail::function< std::unique_ptr< int >() > f; - std::unique_ptr< int > p( new int ); - f.expect().moves( std::move( p ) ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); -} - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_unique_ptr_rvalue, mock_error_fixture ) -{ - { - mock::detail::function< std::unique_ptr< int >() > f; - f.expect().moves( std::unique_ptr< int >( new int ) ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); - } -} - -#endif // MOCK_SMART_PTR - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_the_set_shared_ptr_value, mock_error_fixture ) -{ - { - mock::detail::function< boost::shared_ptr< base >() > f; - f.expect().returns( new derived ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< const boost::shared_ptr< base >&() > f; - f.expect().returns( new derived ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< boost::shared_ptr< base >&() > f; - f.expect().returns( new derived ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); - } -} - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_by_reference, mock_error_fixture ) -{ - { - mock::detail::function< base&() > f; - derived b; - f.expect().returns( boost::ref( b ) ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< base&() > f; - derived b; - f.expect().returns( b ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< undefined&() > f; - f.expect().returns( boost::ref( get_undefined() ) ); - f.reset(); - } -} - -namespace -{ - int custom_result() - { - return 42; - } -} - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_calls_the_custom_functor, mock_error_fixture ) -{ - mock::detail::function< int() > f; - f.expect().calls( &custom_result ); - BOOST_CHECK_EQUAL( 42, f() ); - CHECK_CALLS( 1 ); -} - -namespace -{ - int custom_result_with_parameter( int i ) - { - return i; - } -} - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_calls_the_custom_functor_with_parameters, mock_error_fixture ) -{ - mock::detail::function< int( int ) > f; - f.expect().calls( &custom_result_with_parameter ); - BOOST_CHECK_EQUAL( 42, f( 42 ) ); - CHECK_CALLS( 1 ); -} - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_calls_the_custom_functor_without_parameters_thanks_to_boost_bind, mock_error_fixture ) -{ - mock::detail::function< int( int ) > f; - f.expect().calls( boost::bind( &custom_result ) ); - BOOST_CHECK_EQUAL( 42, f( 17 ) ); - CHECK_CALLS( 1 ); -} - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_throws_the_set_exception, mock_error_fixture ) -{ - mock::detail::function< int() > f; - f.expect().throws( std::runtime_error( "some exception" ) ); - try - { - f(); - } - catch( std::runtime_error& f ) - { - BOOST_CHECK_EQUAL( "some exception", f.what() ); - CHECK_CALLS( 1 ); - return; - } - BOOST_FAIL( "should have thrown" ); -} - -// multiple expectations - -BOOST_FIXTURE_TEST_CASE( expecting_twice_a_single_expectation_makes_it_callable_twice, mock_error_fixture ) -{ - { - mock::detail::function< void() > f; - f.expect().once(); - f.expect().once(); - f(); - f(); - CHECK_ERROR( f(), "unexpected call", 2, "?()\nv once()\nv once()" ); - } - { - mock::detail::function< void( const std::string& ) > f; - f.expect().once().with( "first" ); - f.expect().once().with( "second" ); - f( "first" ); - f( "second" ); - CHECK_ERROR( f( "third"), "unexpected call", 2, "?( \"third\" )\nv once().with( \"first\" )\nv once().with( \"second\" )" ); - } -} - -BOOST_FIXTURE_TEST_CASE( best_expectation_is_selected_first, mock_error_fixture ) -{ - { - mock::detail::function< void( int ) > f; - f.expect().once().with( 1 ); - f.expect().once().with( 2 ); - f( 2 ); - f( 1 ); - CHECK_ERROR( f( 3 ), "unexpected call", 2, "?( 3 )\nv once().with( 1 )\nv once().with( 2 )" ); - } - { - mock::detail::function< void( const std::string& ) > f; - f.expect().once().with( "first" ); - f.expect().once().with( "second" ); - f( "second" ); - f( "first" ); - CHECK_ERROR( f( "third"), "unexpected call", 2, "?( \"third\" )\nv once().with( \"first\" )\nv once().with( \"second\" )" ); - } -} - -// error report - -namespace -{ - template< typename T > - std::string to_string( const T& t ) - { - std::stringstream s; - s << t; - return s.str(); - } -} - -BOOST_FIXTURE_TEST_CASE( expectation_can_be_serialized_to_be_human_readable, mock_error_fixture ) -{ - { - mock::detail::function< void( int ) > f; - f.expect().once().with( 1 ); - f.expect().once().with( 2 ); - BOOST_CHECK_NO_THROW( f( 2 ) ); - const std::string expected = "?\n" - ". once().with( 1 )\n" - "v once().with( 2 )"; - BOOST_CHECK_EQUAL( expected, to_string( f ) ); - CHECK_CALLS( 1 ); - f.reset(); - } - { - mock::detail::function< void( int ) > f; - f.expect().never().with( 1 ); - const std::string expected = "?\n" - "v never().with( 1 )"; - BOOST_CHECK_EQUAL( expected, to_string( f ) ); - f.reset(); - } - { - mock::detail::function< void( const std::string& ) > f; - f.expect().never().with( mock::less( "first" ) ); - f.expect().exactly( 2 ).with( "second" ); - BOOST_CHECK_NO_THROW( f( "second" ) ); - { - const std::string expected = "?\n" - "v never().with( less( \"first\" ) )\n" - ". exactly( 1/2 ).with( \"second\" )"; - BOOST_CHECK_EQUAL( expected, to_string( f ) ); - } - BOOST_CHECK_NO_THROW( f( "second" ) ); - { - const std::string expected = "?\n" - "v never().with( less( \"first\" ) )\n" - "v exactly( 2/2 ).with( \"second\" )"; - BOOST_CHECK_EQUAL( expected, to_string( f ) ); - CHECK_CALLS( 2 ); - } - f.reset(); - } - { - mock::detail::function< void( int ) > f; - f.expect().once(); - const std::string expected = "?\n" - ". once().with( any )"; - BOOST_CHECK_EQUAL( expected, to_string( f ) ); - f.reset(); - } - { - mock::detail::function< void( int ) > f; - f.expect().once().with( mock::any ); - const std::string expected = "?\n" - ". once().with( any )"; - BOOST_CHECK_EQUAL( expected, to_string( f ) ); - f.reset(); - } - { - mock::detail::function< void( int ) > f; - f.expect().once(); - const std::string expected = "?\n" - ". once().with( any )"; - BOOST_CHECK_EQUAL( expected, to_string( f ) ); - f.reset(); - } - { - mock::detail::function< void( int ) > f; - f.expect().once().with( &custom_constraint ); - const std::string expected = "?\n" - ". once().with( ? )"; - BOOST_CHECK_EQUAL( expected, to_string( f ) ); - f.reset(); - } -} - -BOOST_FIXTURE_TEST_CASE( expectation_with_remaining_untriggered_matches_upon_destruction_calls_untriggered_expectation, mock_error_fixture ) -{ - std::auto_ptr< mock::detail::function< void() > > f( new mock::detail::function< void() > ); - f->expect().once(); - CHECK_ERROR( f.reset(), "untriggered expectation", 0, "?\n. once()" ); -} - -BOOST_FIXTURE_TEST_CASE( verifying_expectation_with_remaining_matches_disables_the_automatic_verification_upon_destruction, mock_error_fixture ) -{ - mock::detail::function< void() > f; - f.expect().once(); - CHECK_ERROR( f.verify(), "verification failed", 0, "?\n. once()" ); -} - -BOOST_FIXTURE_TEST_CASE( triggering_unexpected_call_call_disables_the_automatic_verification_upon_destruction, mock_error_fixture ) -{ - mock::detail::function< void() > f; - CHECK_ERROR( f(), "unexpected call", 0, "?()" ); -} - -BOOST_FIXTURE_TEST_CASE( adding_an_expectation_reactivates_the_verification_upon_destruction, mock_error_fixture ) -{ - std::auto_ptr< mock::detail::function< void() > > f( new mock::detail::function< void() > ); - CHECK_ERROR( (*f)(), "unexpected call", 0, "?()" ); - f->expect().once(); - CHECK_ERROR( f.reset(), "untriggered expectation", 0, "?\n. once()" ); -} - -BOOST_FIXTURE_TEST_CASE( throwing_an_exception_disables_the_automatic_verification_upon_destruction, mock_error_fixture ) -{ - try - { - mock::detail::function< void() > f; - f.expect().once(); - throw std::exception(); - } - catch( std::exception& ) - {} -} - -BOOST_FIXTURE_TEST_CASE( adding_file_and_line_number_information, mock_error_fixture ) -{ - mock::detail::function< void() > f; - f.expect( "file name", 42 ).once(); - CHECK_ERROR( f.verify(), "verification failed", 0, "?\n. once()" ); - BOOST_CHECK_EQUAL( "file name", mock_error_data.last_file ); - BOOST_CHECK_EQUAL( 42, mock_error_data.last_line ); -} - -#ifdef MOCK_THREAD_SAFE - -#include - -namespace -{ - void iterate( mock::detail::function< int() >& f ) - { - f.expect().once().returns( 0 ); - try - { - f(); - } - catch( ... ) - {} - } -} - -BOOST_FIXTURE_TEST_CASE( function_is_thread_safe, mock_error_fixture ) -{ - mock::detail::function< int() > f; - boost::thread_group group; - for( int i = 0; i < 100; ++i ) - group.create_thread( boost::bind( &iterate, boost::ref( f ) ) ); - group.join_all(); - CHECK_CALLS( 100 ); -} - -#endif // MOCK_THREAD_SAFE +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include "../mock_error.hpp" +#include "../undefined.hpp" +#include +#include +#include +#include +#include +#include +#include + +// static + +namespace +{ + boost::function< void() > static_f; + + BOOST_MPL_ASSERT(( + boost::is_same< void, boost::result_of< mock::detail::function< void() >() >::type > )); + BOOST_MPL_ASSERT(( + boost::is_same< int, boost::result_of< mock::detail::function< int() >() >::type > )); + BOOST_MPL_ASSERT(( + boost::is_same< void, boost::result_of< mock::detail::function< void( float ) >( float ) >::type > )); + BOOST_MPL_ASSERT(( + boost::is_same< int, boost::result_of< mock::detail::function< int( float ) >( float ) >::type > )); +} + +// functor + +BOOST_FIXTURE_TEST_CASE( a_function_can_be_passed_as_functor, mock_error_fixture ) +{ + mock::detail::function< void() > f; + boost::function< void() > functor = f; +} + +BOOST_FIXTURE_TEST_CASE( a_function_can_be_passed_as_functor_using_boost_bind_and_boost_ref, mock_error_fixture ) +{ + mock::detail::function< void() > f; + boost::function< void() > functor = boost::bind( boost::ref( f ) ); +} + +// invocations + +BOOST_FIXTURE_TEST_CASE( triggering_an_unconfigured_function_calls_unexpected_call_error, mock_error_fixture ) +{ + { + mock::detail::function< void() > f; + CHECK_ERROR( f(), "unexpected call", 0, "?()" ); + } + { + mock::detail::function< int( int, const std::string& ) > f; + CHECK_ERROR( f( 1, "s" ), "unexpected call", 0, "?( 1, \"s\" )" ); + } +} + +BOOST_FIXTURE_TEST_CASE( triggering_a_never_expectation_calls_unexpected_call_error, mock_error_fixture ) +{ + { + mock::detail::function< void() > f; + f.expect().never(); + CHECK_ERROR( f(), "unexpected call", 0, "?()\nv never()" ); + } + { + mock::detail::function< int( int, const std::string& ) > f; + f.expect().never(); + CHECK_ERROR( f( 1, "s" ), "unexpected call", 0, "?( 1, \"s\" )\nv never().with( any, any )" ); + } +} + +BOOST_FIXTURE_TEST_CASE( triggering_an_unlimited_expectation_is_valid, mock_error_fixture ) +{ + { + mock::detail::function< void() > f; + f.expect(); + f(); + f(); + CHECK_CALLS( 2 ); + } + { + mock::detail::function< void( int, const std::string& ) > f; + f.expect(); + f( 1, "s" ); + f( 1, "s" ); + CHECK_CALLS( 2 ); + } +} + +BOOST_FIXTURE_TEST_CASE( triggering_a_once_expectation_calls_unexpected_call_error_after_one_call, mock_error_fixture ) +{ + { + mock::detail::function< void() > f; + f.expect().once(); + f(); + CHECK_ERROR( f(), "unexpected call", 1, "?()\nv once()" ); + } + { + mock::detail::function< void( int, const std::string& ) > f; + f.expect().once(); + f( 1, "s" ); + CHECK_ERROR( f( 1, "s" ), "unexpected call", 1, "?( 1, \"s\" )\nv once().with( any, any )" ); + } +} + +BOOST_FIXTURE_TEST_CASE( literal_zero_can_be_used_in_function_call_as_pointers, mock_error_fixture ) +{ + mock::detail::function< void( int* ) > f; + f.expect().once(); + f( 0 ); + CHECK_CALLS( 1 ); +} + +// verify + +BOOST_FIXTURE_TEST_CASE( verifying_an_unconfigured_function_succeeds, mock_error_fixture ) +{ + { + mock::detail::function< void() > f; + BOOST_CHECK( f.verify() ); + } + { + mock::detail::function< int( int, const std::string& ) > f; + BOOST_CHECK( f.verify() ); + } +} + +BOOST_FIXTURE_TEST_CASE( verifying_an_unlimited_expectation_succeeds, mock_error_fixture ) +{ + { + mock::detail::function< void() > f; + f.expect(); + BOOST_CHECK( f.verify() ); + CHECK_CALLS( 0 ); + } + { + mock::detail::function< int( int, const std::string& ) > f; + f.expect(); + BOOST_CHECK( f.verify() ); + CHECK_CALLS( 0 ); + } +} + +BOOST_FIXTURE_TEST_CASE( verifying_a_once_expectation_after_one_call_succeeds, mock_error_fixture ) +{ + { + mock::detail::function< void() > f; + f.expect().once(); + f(); + BOOST_CHECK( f.verify() ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< void( int, const std::string& ) > f; + f.expect().once(); + f( 1, "s" ); + BOOST_CHECK( f.verify() ); + CHECK_CALLS( 1 ); + } +} + +BOOST_FIXTURE_TEST_CASE( verifying_a_once_expectation_before_the_call_fails, mock_error_fixture ) +{ + { + mock::detail::function< void() > f; + f.expect().once(); + CHECK_ERROR( BOOST_CHECK( ! f.verify() ), "verification failed", 0, "?\n. once()" ); + } + { + mock::detail::function< int( int, const std::string& ) > f; + f.expect().once(); + CHECK_ERROR( BOOST_CHECK( ! f.verify() ), "verification failed", 0, "?\n. once().with( any, any )" ); + } +} + +BOOST_FIXTURE_TEST_CASE( verifying_a_once_expectation_after_a_verify_and_one_call_succeeds, mock_error_fixture ) +{ + mock::detail::function< void() > f; + f.expect().once(); + CHECK_ERROR( BOOST_CHECK( ! f.verify() ), "verification failed", 0, "?\n. once()" ); + f(); + BOOST_CHECK( f.verify() ); + CHECK_CALLS( 1 ); +} + +// reset + +BOOST_FIXTURE_TEST_CASE( triggering_a_reset_function_calls_unexpected_call_error, mock_error_fixture ) +{ + { + mock::detail::function< void() > f; + f.expect(); + f.reset(); + CHECK_ERROR( f(), "unexpected call", 0, "?()" ); + } + { + mock::detail::function< int( int, const std::string& ) > f; + f.expect(); + f.reset(); + CHECK_ERROR( f( 1, "s" ), "unexpected call", 0, "?( 1, \"s\" )" ); + } +} + +BOOST_FIXTURE_TEST_CASE( verifying_a_reset_function_succeeds, mock_error_fixture ) +{ + { + mock::detail::function< void() > f; + f.expect(); + f.reset(); + BOOST_CHECK( f.verify() ); + } + { + mock::detail::function< int( int, const std::string& ) > f; + f.expect(); + f.reset(); + BOOST_CHECK( f.verify() ); + } +} + +// constraints + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_wrong_parameter_value_in_equal_constraint_calls_unexpected_call_error, mock_error_fixture ) +{ + { + mock::detail::function< void( int ) > f; + f.expect().with( 42 ); + CHECK_ERROR( f( 43 ), "unexpected call", 0, "?( 43 )\n. unlimited().with( 42 )" ); + } + { + mock::detail::function< int( int, const std::string& ) > f; + f.expect().with( 42, "expected" ); + CHECK_ERROR( f( 42, "actual" ), "unexpected call", 0, "?( 42, \"actual\" )\n. unlimited().with( 42, \"expected\" )" ); + } +} + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_wrong_parameter_value_in_equal_or_less_constraint_calls_unexpected_call_error, mock_error_fixture ) +{ + mock::detail::function< void( int ) > f; + f.expect().with( mock::equal( 42 ) || mock::less( 42 ) ); + f( 41 ); + f( 42 ); + CHECK_ERROR( f( 43 ), "unexpected call", 2, "?( 43 )\n. unlimited().with( ( equal( 42 ) || less( 42 ) ) )" ); +} + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_wrong_parameter_value_in_equal_and_not_less_constraint_calls_unexpected_call_error, mock_error_fixture ) +{ + mock::detail::function< void( int ) > f; + f.expect().with( mock::equal( 42 ) && ! mock::less( 41 ) ); + f( 42 ); + CHECK_ERROR( f( 43 ), "unexpected call", 1, "?( 43 )\n. unlimited().with( ( equal( 42 ) && ! less( 41 ) ) )" ); +} + +namespace +{ + class my_interface : boost::noncopyable + { + public: + virtual ~my_interface() {} + private: + virtual void my_method() = 0; + }; + class my_implementation : public my_interface + { + virtual void my_method() {} + }; +} + +BOOST_FIXTURE_TEST_CASE( passing_call_values_by_reference_is_transparent, mock_error_fixture ) +{ + { + mock::detail::function< void( my_interface& ) > f; + my_implementation imp; + f.expect().with( mock::same( imp ) ); + f( imp ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< void( const my_interface& ) > f; + my_implementation imp; + f.expect().with( mock::same( imp ) ); + f( imp ); + CHECK_CALLS( 1 ); + } +} + +namespace +{ + bool custom_constraint( int ) + { + return false; + } +} + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_failing_custom_constraint_calls_unexpected_call_error, mock_error_fixture ) +{ + { + mock::detail::function< void( int ) > f; + f.expect().with( &custom_constraint ); + CHECK_ERROR( f( 42 ), "unexpected call", 0, "?( 42 )\n. unlimited().with( ? )" ); + } + { + mock::detail::function< int( int, const std::string& ) > f; + f.expect().with( &custom_constraint, "actual" ); + CHECK_ERROR( f( 42, "actual" ), "unexpected call", 0, "?( 42, \"actual\" )\n. unlimited().with( ?, \"actual\" )" ); + } +} + +//BOOST_FIXTURE_TEST_CASE( literal_zero_can_be_used_in_place_of_null_pointers_in_constraints, mock_error_fixture ) +//{ +// mock::detail::function< void( int* ) > f; +// f.expect().with( 0 ); +// f.reset(); +// CHECK_CALLS( 1 ); +//} + +#ifdef MOCK_NULLPTR + +BOOST_FIXTURE_TEST_CASE( nullptr_can_be_used_in_place_of_null_pointers_in_constraints, mock_error_fixture ) +{ + mock::detail::function< void( int* ) > f; + f.expect().with( nullptr ); + f( 0 ); + CHECK_CALLS( 1 ); +} + +#endif + +#ifdef MOCK_SMART_PTR + +BOOST_FIXTURE_TEST_CASE( unique_ptr_is_supported_as_parameter, mock_error_fixture ) +{ + mock::detail::function< void( std::unique_ptr< int > ) > f; + f.expect(); + std::unique_ptr< int > p( new int ); + f( std::move( p ) ); + CHECK_CALLS( 1 ); +} + +#endif // MOCK_SMART_PTR + +// result handling + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_no_return_set_calls_missing_action, mock_error_fixture ) +{ + { + mock::detail::function< int() > f; + f.expect(); + CHECK_ERROR( f(), "missing action", 0, "?()\n. unlimited()" ); + } + { + mock::detail::function< int&() > f; + f.expect(); + CHECK_ERROR( f(), "missing action", 0, "?()\n. unlimited()" ); + } + { + mock::detail::function< const std::string&() > f; + f.expect(); + CHECK_ERROR( f(), "missing action", 0, "?()\n. unlimited()" ); + } +} + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_the_set_value, mock_error_fixture ) +{ + { + mock::detail::function< int() > f; + f.expect().returns( 42 ); + BOOST_CHECK_EQUAL( 42, f() ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< int() > f; + const int i = 42; + f.expect().returns( i ); + BOOST_CHECK_EQUAL( i, f() ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< int() > f; + int i = 42; + f.expect().returns( boost::ref( i ) ); + i = 43; + BOOST_CHECK_EQUAL( 43, f() ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< int&() > f; + f.expect().returns( 42 ); + BOOST_CHECK_EQUAL( 42, f() ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< int&() > f; + const int result = 42; + f.expect().returns( result ); + BOOST_CHECK_EQUAL( result, f() ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< int&() > f; + int i = 42; + f.expect().returns( i ); + i = 43; + BOOST_CHECK_EQUAL( 42, f() ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< int&() > f; + int i = 42; + f.expect().returns( boost::ref( i ) ); + i = 43; + BOOST_CHECK_EQUAL( 43, f() ); + BOOST_CHECK_EQUAL( 12, f() = 12 ); + BOOST_CHECK_EQUAL( 12, i ); + CHECK_CALLS( 2 ); + } + { + mock::detail::function< std::string() > f; + f.expect().returns( "result" ); + BOOST_CHECK_EQUAL( "result", f() ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< const std::string&() > f; + f.expect().returns( "result" ); + BOOST_CHECK_EQUAL( "result", f() ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< int*() > f; + f.expect().returns( 0 ); + BOOST_CHECK( ! f() ); + CHECK_CALLS( 1 ); + } +#ifdef BOOST_MSVC // this produces a warning with gcc + { + mock::detail::function< int* const() > f; + int i = 0; + f.expect().returns( &i ); + BOOST_CHECK_EQUAL( &i, f() ); + CHECK_CALLS( 1 ); + } +#endif + { + mock::detail::function< int() > f; + f.expect().returns( 0 ); + BOOST_CHECK_EQUAL( 0, f() ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< int&() > f; + f.expect().returns( 0 ); + BOOST_CHECK_EQUAL( 0, f() ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< unsigned int() > f; + f.expect().returns( 0 ); + BOOST_CHECK_EQUAL( 0u, f() ); + CHECK_CALLS( 1 ); + } +} + +namespace +{ + struct base + { + virtual ~base() + {} + virtual void f() = 0; + }; + struct derived : base + { + virtual void f() + {} + }; +} + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_the_set_auto_ptr_value, mock_error_fixture ) +{ + { + mock::detail::function< std::auto_ptr< int >() > f; + std::auto_ptr< int > ptr( new int( 3 ) ); + f.expect().returns( boost::ref( ptr ) ); + BOOST_CHECK_EQUAL( 3, *ptr ); + BOOST_CHECK_EQUAL( 3, *f() ); + BOOST_CHECK( ! ptr.get() ); + BOOST_CHECK( ! f().get() ); + CHECK_CALLS( 2 ); + } + { + mock::detail::function< std::auto_ptr< int >() > f; + std::auto_ptr< int > ptr( new int( 3 ) ); + f.expect().returns( ptr ); + BOOST_CHECK( ! ptr.get() ); + BOOST_CHECK_EQUAL( 3, *f() ); + BOOST_CHECK( ! f().get() ); + CHECK_CALLS( 2 ); + } + { + mock::detail::function< std::auto_ptr< int >() > f; + f.expect().returns( new int( 3 ) ); + BOOST_CHECK_EQUAL( 3, *f() ); + BOOST_CHECK( ! f().get() ); + CHECK_CALLS( 2 ); + } + { + mock::detail::function< std::auto_ptr< int >() > f; + f.expect().returns( std::auto_ptr< int >( new int( 3 ) ) ); + BOOST_CHECK_EQUAL( 3, *f() ); + BOOST_CHECK( ! f().get() ); + CHECK_CALLS( 2 ); + } + { + mock::detail::function< std::auto_ptr< base >() > f; + f.expect().returns( new derived ); + BOOST_CHECK_NO_THROW( f() ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< std::auto_ptr< base >() > f; + f.expect().returns( std::auto_ptr< base >( new derived ) ); + BOOST_CHECK_NO_THROW( f() ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< std::auto_ptr< base >() > f; + f.expect().returns( std::auto_ptr< derived >( new derived ) ); + BOOST_CHECK_NO_THROW( f() ); + CHECK_CALLS( 1 ); + } +} + +#ifdef MOCK_RVALUE_REFERENCES + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_lvalue, mock_error_fixture ) +{ + mock::detail::function< int() > f; + int i = 3; + f.expect().moves( i ); + BOOST_CHECK_NO_THROW( f() ); + CHECK_CALLS( 1 ); +} + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_const_lvalue, mock_error_fixture ) +{ + mock::detail::function< int() > f; + const int i = 3; + f.expect().moves( i ); + BOOST_CHECK_NO_THROW( f() ); + CHECK_CALLS( 1 ); +} + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_rvalue, mock_error_fixture ) +{ + mock::detail::function< int() > f; + f.expect().moves( 3 ); + BOOST_CHECK_NO_THROW( f() ); + CHECK_CALLS( 1 ); +} + +#endif + +#ifdef MOCK_SMART_PTR + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_unique_ptr_lvalue, mock_error_fixture ) +{ + mock::detail::function< std::unique_ptr< int >() > f; + std::unique_ptr< int > p( new int ); + f.expect().moves( std::move( p ) ); + BOOST_CHECK_NO_THROW( f() ); + CHECK_CALLS( 1 ); +} + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_unique_ptr_rvalue, mock_error_fixture ) +{ + { + mock::detail::function< std::unique_ptr< int >() > f; + f.expect().moves( std::unique_ptr< int >( new int ) ); + BOOST_CHECK_NO_THROW( f() ); + CHECK_CALLS( 1 ); + } +} + +#endif // MOCK_SMART_PTR + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_the_set_shared_ptr_value, mock_error_fixture ) +{ + { + mock::detail::function< boost::shared_ptr< base >() > f; + f.expect().returns( new derived ); + BOOST_CHECK_NO_THROW( f() ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< const boost::shared_ptr< base >&() > f; + f.expect().returns( new derived ); + BOOST_CHECK_NO_THROW( f() ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< boost::shared_ptr< base >&() > f; + f.expect().returns( new derived ); + BOOST_CHECK_NO_THROW( f() ); + CHECK_CALLS( 1 ); + } +} + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_by_reference, mock_error_fixture ) +{ + { + mock::detail::function< base&() > f; + derived b; + f.expect().returns( boost::ref( b ) ); + BOOST_CHECK_NO_THROW( f() ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< base&() > f; + derived b; + f.expect().returns( b ); + BOOST_CHECK_NO_THROW( f() ); + CHECK_CALLS( 1 ); + } + { + mock::detail::function< undefined&() > f; + f.expect().returns( boost::ref( get_undefined() ) ); + f.reset(); + } +} + +namespace +{ + int custom_result() + { + return 42; + } +} + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_calls_the_custom_functor, mock_error_fixture ) +{ + mock::detail::function< int() > f; + f.expect().calls( &custom_result ); + BOOST_CHECK_EQUAL( 42, f() ); + CHECK_CALLS( 1 ); +} + +namespace +{ + int custom_result_with_parameter( int i ) + { + return i; + } +} + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_calls_the_custom_functor_with_parameters, mock_error_fixture ) +{ + mock::detail::function< int( int ) > f; + f.expect().calls( &custom_result_with_parameter ); + BOOST_CHECK_EQUAL( 42, f( 42 ) ); + CHECK_CALLS( 1 ); +} + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_calls_the_custom_functor_without_parameters_thanks_to_boost_bind, mock_error_fixture ) +{ + mock::detail::function< int( int ) > f; + f.expect().calls( boost::bind( &custom_result ) ); + BOOST_CHECK_EQUAL( 42, f( 17 ) ); + CHECK_CALLS( 1 ); +} + +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_throws_the_set_exception, mock_error_fixture ) +{ + mock::detail::function< int() > f; + f.expect().throws( std::runtime_error( "some exception" ) ); + try + { + f(); + } + catch( std::runtime_error& f ) + { + BOOST_CHECK_EQUAL( "some exception", f.what() ); + CHECK_CALLS( 1 ); + return; + } + BOOST_FAIL( "should have thrown" ); +} + +// multiple expectations + +BOOST_FIXTURE_TEST_CASE( expecting_twice_a_single_expectation_makes_it_callable_twice, mock_error_fixture ) +{ + { + mock::detail::function< void() > f; + f.expect().once(); + f.expect().once(); + f(); + f(); + CHECK_ERROR( f(), "unexpected call", 2, "?()\nv once()\nv once()" ); + } + { + mock::detail::function< void( const std::string& ) > f; + f.expect().once().with( "first" ); + f.expect().once().with( "second" ); + f( "first" ); + f( "second" ); + CHECK_ERROR( f( "third"), "unexpected call", 2, "?( \"third\" )\nv once().with( \"first\" )\nv once().with( \"second\" )" ); + } +} + +BOOST_FIXTURE_TEST_CASE( best_expectation_is_selected_first, mock_error_fixture ) +{ + { + mock::detail::function< void( int ) > f; + f.expect().once().with( 1 ); + f.expect().once().with( 2 ); + f( 2 ); + f( 1 ); + CHECK_ERROR( f( 3 ), "unexpected call", 2, "?( 3 )\nv once().with( 1 )\nv once().with( 2 )" ); + } + { + mock::detail::function< void( const std::string& ) > f; + f.expect().once().with( "first" ); + f.expect().once().with( "second" ); + f( "second" ); + f( "first" ); + CHECK_ERROR( f( "third"), "unexpected call", 2, "?( \"third\" )\nv once().with( \"first\" )\nv once().with( \"second\" )" ); + } +} + +// error report + +namespace +{ + template< typename T > + std::string to_string( const T& t ) + { + std::stringstream s; + s << t; + return s.str(); + } +} + +BOOST_FIXTURE_TEST_CASE( expectation_can_be_serialized_to_be_human_readable, mock_error_fixture ) +{ + { + mock::detail::function< void( int ) > f; + f.expect().once().with( 1 ); + f.expect().once().with( 2 ); + BOOST_CHECK_NO_THROW( f( 2 ) ); + const std::string expected = "?\n" + ". once().with( 1 )\n" + "v once().with( 2 )"; + BOOST_CHECK_EQUAL( expected, to_string( f ) ); + CHECK_CALLS( 1 ); + f.reset(); + } + { + mock::detail::function< void( int ) > f; + f.expect().never().with( 1 ); + const std::string expected = "?\n" + "v never().with( 1 )"; + BOOST_CHECK_EQUAL( expected, to_string( f ) ); + f.reset(); + } + { + mock::detail::function< void( const std::string& ) > f; + f.expect().never().with( mock::less( "first" ) ); + f.expect().exactly( 2 ).with( "second" ); + BOOST_CHECK_NO_THROW( f( "second" ) ); + { + const std::string expected = "?\n" + "v never().with( less( \"first\" ) )\n" + ". exactly( 1/2 ).with( \"second\" )"; + BOOST_CHECK_EQUAL( expected, to_string( f ) ); + } + BOOST_CHECK_NO_THROW( f( "second" ) ); + { + const std::string expected = "?\n" + "v never().with( less( \"first\" ) )\n" + "v exactly( 2/2 ).with( \"second\" )"; + BOOST_CHECK_EQUAL( expected, to_string( f ) ); + CHECK_CALLS( 2 ); + } + f.reset(); + } + { + mock::detail::function< void( int ) > f; + f.expect().once(); + const std::string expected = "?\n" + ". once().with( any )"; + BOOST_CHECK_EQUAL( expected, to_string( f ) ); + f.reset(); + } + { + mock::detail::function< void( int ) > f; + f.expect().once().with( mock::any ); + const std::string expected = "?\n" + ". once().with( any )"; + BOOST_CHECK_EQUAL( expected, to_string( f ) ); + f.reset(); + } + { + mock::detail::function< void( int ) > f; + f.expect().once(); + const std::string expected = "?\n" + ". once().with( any )"; + BOOST_CHECK_EQUAL( expected, to_string( f ) ); + f.reset(); + } + { + mock::detail::function< void( int ) > f; + f.expect().once().with( &custom_constraint ); + const std::string expected = "?\n" + ". once().with( ? )"; + BOOST_CHECK_EQUAL( expected, to_string( f ) ); + f.reset(); + } +} + +BOOST_FIXTURE_TEST_CASE( expectation_with_remaining_untriggered_matches_upon_destruction_calls_untriggered_expectation, mock_error_fixture ) +{ + std::auto_ptr< mock::detail::function< void() > > f( new mock::detail::function< void() > ); + f->expect().once(); + CHECK_ERROR( f.reset(), "untriggered expectation", 0, "?\n. once()" ); +} + +BOOST_FIXTURE_TEST_CASE( verifying_expectation_with_remaining_matches_disables_the_automatic_verification_upon_destruction, mock_error_fixture ) +{ + mock::detail::function< void() > f; + f.expect().once(); + CHECK_ERROR( f.verify(), "verification failed", 0, "?\n. once()" ); +} + +BOOST_FIXTURE_TEST_CASE( triggering_unexpected_call_call_disables_the_automatic_verification_upon_destruction, mock_error_fixture ) +{ + mock::detail::function< void() > f; + CHECK_ERROR( f(), "unexpected call", 0, "?()" ); +} + +BOOST_FIXTURE_TEST_CASE( adding_an_expectation_reactivates_the_verification_upon_destruction, mock_error_fixture ) +{ + std::auto_ptr< mock::detail::function< void() > > f( new mock::detail::function< void() > ); + CHECK_ERROR( (*f)(), "unexpected call", 0, "?()" ); + f->expect().once(); + CHECK_ERROR( f.reset(), "untriggered expectation", 0, "?\n. once()" ); +} + +BOOST_FIXTURE_TEST_CASE( throwing_an_exception_disables_the_automatic_verification_upon_destruction, mock_error_fixture ) +{ + try + { + mock::detail::function< void() > f; + f.expect().once(); + throw std::exception(); + } + catch( std::exception& ) + {} +} + +BOOST_FIXTURE_TEST_CASE( adding_file_and_line_number_information, mock_error_fixture ) +{ + mock::detail::function< void() > f; + f.expect( "file name", 42 ).once(); + CHECK_ERROR( f.verify(), "verification failed", 0, "?\n. once()" ); + BOOST_CHECK_EQUAL( "file name", mock_error_data.last_file ); + BOOST_CHECK_EQUAL( 42, mock_error_data.last_line ); +} + +#ifdef MOCK_THREAD_SAFE + +#include + +namespace +{ + void iterate( mock::detail::function< int() >& f ) + { + f.expect().once().returns( 0 ); + try + { + f(); + } + catch( ... ) + {} + } +} + +BOOST_FIXTURE_TEST_CASE( function_is_thread_safe, mock_error_fixture ) +{ + mock::detail::function< int() > f; + boost::thread_group group; + for( int i = 0; i < 100; ++i ) + group.create_thread( boost::bind( &iterate, boost::ref( f ) ) ); + group.join_all(); + CHECK_CALLS( 100 ); +} + +#endif // MOCK_THREAD_SAFE diff --git a/test/detail/test_invocation.cpp b/test/detail/test_invocation.cpp index f302c1c..7bec6f8 100644 --- a/test/detail/test_invocation.cpp +++ b/test/detail/test_invocation.cpp @@ -1,76 +1,76 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include - -BOOST_AUTO_TEST_CASE( unlimited ) -{ - mock::detail::unlimited invocation; - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( ! invocation.exhausted() ); - BOOST_CHECK( invocation.invoke() ); - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( ! invocation.exhausted() ); - BOOST_CHECK( invocation.invoke() ); -} - -BOOST_AUTO_TEST_CASE( once ) -{ - mock::detail::once invocation; - BOOST_CHECK( ! invocation.verify() ); - BOOST_CHECK( ! invocation.exhausted() ); - BOOST_CHECK( invocation.invoke() ); - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( invocation.exhausted() ); - BOOST_CHECK( ! invocation.invoke() ); -} - -BOOST_AUTO_TEST_CASE( never ) -{ - mock::detail::never invocation; - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( invocation.exhausted() ); - BOOST_CHECK( ! invocation.invoke() ); -} - -BOOST_AUTO_TEST_CASE( at_most ) -{ - mock::detail::at_most invocation( 1 ); - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( ! invocation.exhausted() ); - BOOST_CHECK( invocation.invoke() ); - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( invocation.exhausted() ); - BOOST_CHECK( ! invocation.invoke() ); -} - -BOOST_AUTO_TEST_CASE( at_least ) -{ - mock::detail::at_least invocation( 1 ); - BOOST_CHECK( ! invocation.verify() ); - BOOST_CHECK( ! invocation.exhausted() ); - BOOST_CHECK( invocation.invoke() ); - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( ! invocation.exhausted() ); - BOOST_CHECK( invocation.invoke() ); -} - -BOOST_AUTO_TEST_CASE( between ) -{ - mock::detail::between invocation( 1, 2 ); - BOOST_CHECK( ! invocation.verify() ); - BOOST_CHECK( ! invocation.exhausted() ); - BOOST_CHECK( invocation.invoke() ); - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( ! invocation.exhausted() ); - BOOST_CHECK( invocation.invoke() ); - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( invocation.exhausted() ); - BOOST_CHECK( ! invocation.invoke() ); -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include + +BOOST_AUTO_TEST_CASE( unlimited ) +{ + mock::detail::unlimited invocation; + BOOST_CHECK( invocation.verify() ); + BOOST_CHECK( ! invocation.exhausted() ); + BOOST_CHECK( invocation.invoke() ); + BOOST_CHECK( invocation.verify() ); + BOOST_CHECK( ! invocation.exhausted() ); + BOOST_CHECK( invocation.invoke() ); +} + +BOOST_AUTO_TEST_CASE( once ) +{ + mock::detail::once invocation; + BOOST_CHECK( ! invocation.verify() ); + BOOST_CHECK( ! invocation.exhausted() ); + BOOST_CHECK( invocation.invoke() ); + BOOST_CHECK( invocation.verify() ); + BOOST_CHECK( invocation.exhausted() ); + BOOST_CHECK( ! invocation.invoke() ); +} + +BOOST_AUTO_TEST_CASE( never ) +{ + mock::detail::never invocation; + BOOST_CHECK( invocation.verify() ); + BOOST_CHECK( invocation.exhausted() ); + BOOST_CHECK( ! invocation.invoke() ); +} + +BOOST_AUTO_TEST_CASE( at_most ) +{ + mock::detail::at_most invocation( 1 ); + BOOST_CHECK( invocation.verify() ); + BOOST_CHECK( ! invocation.exhausted() ); + BOOST_CHECK( invocation.invoke() ); + BOOST_CHECK( invocation.verify() ); + BOOST_CHECK( invocation.exhausted() ); + BOOST_CHECK( ! invocation.invoke() ); +} + +BOOST_AUTO_TEST_CASE( at_least ) +{ + mock::detail::at_least invocation( 1 ); + BOOST_CHECK( ! invocation.verify() ); + BOOST_CHECK( ! invocation.exhausted() ); + BOOST_CHECK( invocation.invoke() ); + BOOST_CHECK( invocation.verify() ); + BOOST_CHECK( ! invocation.exhausted() ); + BOOST_CHECK( invocation.invoke() ); +} + +BOOST_AUTO_TEST_CASE( between ) +{ + mock::detail::between invocation( 1, 2 ); + BOOST_CHECK( ! invocation.verify() ); + BOOST_CHECK( ! invocation.exhausted() ); + BOOST_CHECK( invocation.invoke() ); + BOOST_CHECK( invocation.verify() ); + BOOST_CHECK( ! invocation.exhausted() ); + BOOST_CHECK( invocation.invoke() ); + BOOST_CHECK( invocation.verify() ); + BOOST_CHECK( invocation.exhausted() ); + BOOST_CHECK( ! invocation.invoke() ); +} diff --git a/test/detail/test_is_functor.cpp b/test/detail/test_is_functor.cpp index 597cf0c..a6a0f38 100644 --- a/test/detail/test_is_functor.cpp +++ b/test/detail/test_is_functor.cpp @@ -1,155 +1,155 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2009 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include -#ifdef BOOST_MSVC -#pragma warning( push, 0 ) -#endif -#include -#include -#ifdef BOOST_MSVC -#pragma warning( pop ) -#endif -#include -#include - -namespace -{ - struct declared_but_not_defined; - BOOST_MPL_ASSERT_NOT(( - mock::detail::is_functor< declared_but_not_defined, int > )); - - template< typename T > - void is_functor( T ) - { - BOOST_MPL_ASSERT(( mock::detail::is_functor< T, int > )); - } - template< typename T > - void is_not_functor( T ) - { - BOOST_MPL_ASSERT_NOT(( mock::detail::is_functor< T, int > )); - } - - void f0() {} - bool f1( int ) { return false; } - bool f2( std::string, int ) { return false; } -} - -BOOST_AUTO_TEST_CASE( data_is_not_functor ) -{ - is_not_functor( 42 ); -} - -BOOST_AUTO_TEST_CASE( function_is_functor ) -{ - is_functor( f0 ); - is_functor( f1 ); - is_functor( f2 ); -} - -BOOST_AUTO_TEST_CASE( function_pointer_is_functor ) -{ - is_functor( &f0 ); - is_functor( &f1 ); - is_functor( &f2 ); -} - -BOOST_AUTO_TEST_CASE( std_ptr_fun_is_functor ) -{ - is_functor( std::ptr_fun( &f1 ) ); - is_functor( std::ptr_fun( &f2 ) ); -} - -BOOST_AUTO_TEST_CASE( std_bind_first_is_functor ) -{ - is_functor( std::bind1st( std::ptr_fun( &f2 ), "" ) ); -} - -namespace -{ - struct unary_functor0 : public std::unary_function< void, void > - {}; - struct unary_functor1 : public std::unary_function< int, void > - {}; -} - -BOOST_AUTO_TEST_CASE( std_unary_functor_is_functor ) -{ - is_functor( unary_functor0() ); - is_functor( unary_functor1() ); -} - -BOOST_AUTO_TEST_CASE( boost_bind_is_functor ) -{ - is_functor( boost::bind( &f0 ) ); - is_functor( boost::bind( &f1, _1 ) ); - is_functor( boost::bind( &f2, "", _1 ) ); -} - -BOOST_AUTO_TEST_CASE( boost_lambda_is_functor ) -{ - is_functor( boost::lambda::_1 < 42 ); -} - -BOOST_AUTO_TEST_CASE( boost_phoenix_is_functor ) -{ - is_functor( boost::phoenix::arg_names::arg1 < 42 ); - is_functor( boost::phoenix::arg_names::_1 < 42 ); -} - -BOOST_AUTO_TEST_CASE( boost_function_is_functor ) -{ - is_functor( boost::function< void() >() ); -} - -namespace -{ - struct result_type_functor - { - typedef void result_type; - }; -} - -BOOST_AUTO_TEST_CASE( class_with_result_type_is_functor ) -{ - is_functor( result_type_functor() ); -} - -namespace -{ - struct sig_functor - { - template< typename Args > - struct sig - { - typedef void type; - }; - }; -} - -BOOST_AUTO_TEST_CASE( class_with_sig_is_functor ) -{ - is_functor( sig_functor() ); -} - -#ifdef MOCK_LAMBDAS - -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& ) {} ); -} - -#endif +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2009 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#ifdef BOOST_MSVC +#pragma warning( push, 0 ) +#endif +#include +#include +#ifdef BOOST_MSVC +#pragma warning( pop ) +#endif +#include +#include + +namespace +{ + struct declared_but_not_defined; + BOOST_MPL_ASSERT_NOT(( + mock::detail::is_functor< declared_but_not_defined, int > )); + + template< typename T > + void is_functor( T ) + { + BOOST_MPL_ASSERT(( mock::detail::is_functor< T, int > )); + } + template< typename T > + void is_not_functor( T ) + { + BOOST_MPL_ASSERT_NOT(( mock::detail::is_functor< T, int > )); + } + + void f0() {} + bool f1( int ) { return false; } + bool f2( std::string, int ) { return false; } +} + +BOOST_AUTO_TEST_CASE( data_is_not_functor ) +{ + is_not_functor( 42 ); +} + +BOOST_AUTO_TEST_CASE( function_is_functor ) +{ + is_functor( f0 ); + is_functor( f1 ); + is_functor( f2 ); +} + +BOOST_AUTO_TEST_CASE( function_pointer_is_functor ) +{ + is_functor( &f0 ); + is_functor( &f1 ); + is_functor( &f2 ); +} + +BOOST_AUTO_TEST_CASE( std_ptr_fun_is_functor ) +{ + is_functor( std::ptr_fun( &f1 ) ); + is_functor( std::ptr_fun( &f2 ) ); +} + +BOOST_AUTO_TEST_CASE( std_bind_first_is_functor ) +{ + is_functor( std::bind1st( std::ptr_fun( &f2 ), "" ) ); +} + +namespace +{ + struct unary_functor0 : public std::unary_function< void, void > + {}; + struct unary_functor1 : public std::unary_function< int, void > + {}; +} + +BOOST_AUTO_TEST_CASE( std_unary_functor_is_functor ) +{ + is_functor( unary_functor0() ); + is_functor( unary_functor1() ); +} + +BOOST_AUTO_TEST_CASE( boost_bind_is_functor ) +{ + is_functor( boost::bind( &f0 ) ); + is_functor( boost::bind( &f1, _1 ) ); + is_functor( boost::bind( &f2, "", _1 ) ); +} + +BOOST_AUTO_TEST_CASE( boost_lambda_is_functor ) +{ + is_functor( boost::lambda::_1 < 42 ); +} + +BOOST_AUTO_TEST_CASE( boost_phoenix_is_functor ) +{ + is_functor( boost::phoenix::arg_names::arg1 < 42 ); + is_functor( boost::phoenix::arg_names::_1 < 42 ); +} + +BOOST_AUTO_TEST_CASE( boost_function_is_functor ) +{ + is_functor( boost::function< void() >() ); +} + +namespace +{ + struct result_type_functor + { + typedef void result_type; + }; +} + +BOOST_AUTO_TEST_CASE( class_with_result_type_is_functor ) +{ + is_functor( result_type_functor() ); +} + +namespace +{ + struct sig_functor + { + template< typename Args > + struct sig + { + typedef void type; + }; + }; +} + +BOOST_AUTO_TEST_CASE( class_with_sig_is_functor ) +{ + is_functor( sig_functor() ); +} + +#ifdef MOCK_LAMBDAS + +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& ) {} ); +} + +#endif diff --git a/test/detail/test_signature.cpp b/test/detail/test_signature.cpp index 8f6920a..afe9ba4 100644 --- a/test/detail/test_signature.cpp +++ b/test/detail/test_signature.cpp @@ -1,29 +1,29 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include -#include - -namespace -{ - struct base - { - void method_1(); - float method_2( int ) const; - }; - typedef base base_type; -} - -BOOST_AUTO_TEST_CASE( mock_signature_generates_signature ) -{ - BOOST_MPL_ASSERT(( - boost::is_same< void(), MOCK_SIGNATURE( method_1 ) > )); - BOOST_MPL_ASSERT(( - boost::is_same< float( int ), MOCK_SIGNATURE( method_2 ) > )); -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2012 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +namespace +{ + struct base + { + void method_1(); + float method_2( int ) const; + }; + typedef base base_type; +} + +BOOST_AUTO_TEST_CASE( mock_signature_generates_signature ) +{ + BOOST_MPL_ASSERT(( + boost::is_same< void(), MOCK_SIGNATURE( method_1 ) > )); + BOOST_MPL_ASSERT(( + boost::is_same< float( int ), MOCK_SIGNATURE( method_2 ) > )); +} diff --git a/test/detail/test_type_name.cpp b/test/detail/test_type_name.cpp index 6344338..292414a 100644 --- a/test/detail/test_type_name.cpp +++ b/test/detail/test_type_name.cpp @@ -1,225 +1,225 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include -#include - -namespace -{ - template< typename T > - std::string to_string( const T& ) - { - return boost::lexical_cast< std::string >( MOCK_TYPE_NAME(T) ); - } -} - -BOOST_AUTO_TEST_CASE( name_of_base_type_is_extracted ) -{ - BOOST_CHECK_EQUAL( "char", to_string( 'a' ) ); - BOOST_CHECK_EQUAL( "bool", to_string( true ) ); - BOOST_CHECK_EQUAL( "int", to_string< int >( 0 ) ); - BOOST_CHECK_EQUAL( "short", to_string< short >( 0 ) ); - BOOST_CHECK_EQUAL( "long", to_string< long >( 0 ) ); - BOOST_CHECK_EQUAL( "unsigned int", to_string< unsigned int >( 0 ) ); - BOOST_CHECK_EQUAL( "unsigned short", to_string< unsigned short >( 0 ) ); - BOOST_CHECK_EQUAL( "unsigned long", to_string< unsigned long >( 0 ) ); -} - -struct my_type_in_default_namespace -{ - struct inner {}; -}; - -BOOST_AUTO_TEST_CASE( name_of_type_in_default_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "my_type_in_default_namespace", to_string( my_type_in_default_namespace() ) ); -} - -BOOST_AUTO_TEST_CASE( name_of_inner_type_from_type_in_default_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "inner", to_string( my_type_in_default_namespace::inner() ) ); -} - -template< typename T > -struct my_template_type_in_default_namespace -{ - struct inner {}; -}; - -BOOST_AUTO_TEST_CASE( name_of_template_type_in_default_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "my_template_type_in_default_namespace", to_string( my_template_type_in_default_namespace() ) ); -} - -BOOST_AUTO_TEST_CASE( name_of_inner_type_from_template_type_in_default_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type_in_default_namespace::inner() ) ); -} - -namespace -{ - struct my_type_in_anonymous_namespace {}; -} - -BOOST_AUTO_TEST_CASE( name_of_type_in_anonymous_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "my_type_in_anonymous_namespace", to_string( my_type_in_anonymous_namespace() ) ); -} - -namespace nm -{ - struct my_type_from_named_namespace {}; -} - -BOOST_AUTO_TEST_CASE( name_of_type_from_named_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "my_type_from_named_namespace", to_string( nm::my_type_from_named_namespace() ) ); -} - -namespace nm -{ -namespace inner -{ - struct my_type_in_named_inner_namespace {}; -} -} - -BOOST_AUTO_TEST_CASE( name_of_type_in_named_inner_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "my_type_in_named_inner_namespace", to_string( nm::inner::my_type_in_named_inner_namespace() ) ); -} - -namespace -{ -namespace inner -{ - struct my_type_in_unnamed_inner_namespace {}; -} -} - -BOOST_AUTO_TEST_CASE( name_of_type_in_unnamed_inner_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "my_type_in_unnamed_inner_namespace", to_string( inner::my_type_in_unnamed_inner_namespace() ) ); -} - -BOOST_AUTO_TEST_CASE( name_of_local_type_is_extracted ) -{ - struct my_local_type {}; - BOOST_CHECK_EQUAL( "my_local_type", boost::lexical_cast< std::string >( MOCK_TYPE_NAME(my_local_type) ) ); -} - -namespace -{ - template< typename T > - struct my_template_type - { - struct inner {}; - }; -} - -BOOST_AUTO_TEST_CASE( name_of_template_type_in_anonymous_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< int >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< std::exception >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< int const& >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< std::exception const& >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< int const* >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< std::exception const* >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< int const*& >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< std::exception const*& >() ) ); -} - -BOOST_AUTO_TEST_CASE( name_of_inner_type_from_template_type_in_anonymous_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< int >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< std::exception >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< int const& >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< std::exception const& >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< int const* >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< std::exception const* >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< int const*& >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< std::exception const*& >::inner() ) ); -} - -namespace nm -{ - template< typename T > - struct my_template_type - { - struct inner {}; - }; -} - -BOOST_AUTO_TEST_CASE( name_of_template_type_in_named_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< int >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< std::exception >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< int const& >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< std::exception const& >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< int const* >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< std::exception const* >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< int const*& >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< std::exception const*& >() ) ); -} - -BOOST_AUTO_TEST_CASE( name_of_inner_type_from_template_type_in_named_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< int >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< std::exception >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< int const& >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< std::exception const& >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< int const* >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< std::exception const* >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< int const*& >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< std::exception const*& >::inner() ) ); -} - -namespace nm2 -{ - template< typename T > - struct my_template_type - { - template< typename U > - struct inner {}; - }; -} - -BOOST_AUTO_TEST_CASE( name_of_template_inner_type_from_template_type_in_named_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int >::inner< int >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception >::inner< int >() ) ); - - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int const& >::inner< int >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception const& >::inner< int >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int const* >::inner< int >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception const* >::inner< int >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int const*& >::inner< int >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception const*& >::inner< int >() ) ); - - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int >::inner< int const& >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception >::inner< int const& >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int >::inner< int const* >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception >::inner< int const* >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int >::inner< int const*& >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception >::inner< int const*& >() ) ); -} - -namespace -{ - template< typename T1, typename T2, typename T3 > - struct my_tpl - {}; -} - -BOOST_AUTO_TEST_CASE( name_of_nested_template_with_multiple_arguments_is_extracted ) -{ - BOOST_CHECK_EQUAL( "vector>", to_string( std::vector< int >() ) ); - BOOST_CHECK_EQUAL( "vector>, allocator>>>", to_string( std::vector< std::vector< int > >() ) ); - BOOST_CHECK_EQUAL( "my_tpl, my_tpl, my_tpl>", to_string( my_tpl< my_tpl< int, int, int >, my_tpl< int, int, int >, my_tpl< int, int, int > >() ) ); -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +namespace +{ + template< typename T > + std::string to_string( const T& ) + { + return boost::lexical_cast< std::string >( MOCK_TYPE_NAME(T) ); + } +} + +BOOST_AUTO_TEST_CASE( name_of_base_type_is_extracted ) +{ + BOOST_CHECK_EQUAL( "char", to_string( 'a' ) ); + BOOST_CHECK_EQUAL( "bool", to_string( true ) ); + BOOST_CHECK_EQUAL( "int", to_string< int >( 0 ) ); + BOOST_CHECK_EQUAL( "short", to_string< short >( 0 ) ); + BOOST_CHECK_EQUAL( "long", to_string< long >( 0 ) ); + BOOST_CHECK_EQUAL( "unsigned int", to_string< unsigned int >( 0 ) ); + BOOST_CHECK_EQUAL( "unsigned short", to_string< unsigned short >( 0 ) ); + BOOST_CHECK_EQUAL( "unsigned long", to_string< unsigned long >( 0 ) ); +} + +struct my_type_in_default_namespace +{ + struct inner {}; +}; + +BOOST_AUTO_TEST_CASE( name_of_type_in_default_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "my_type_in_default_namespace", to_string( my_type_in_default_namespace() ) ); +} + +BOOST_AUTO_TEST_CASE( name_of_inner_type_from_type_in_default_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "inner", to_string( my_type_in_default_namespace::inner() ) ); +} + +template< typename T > +struct my_template_type_in_default_namespace +{ + struct inner {}; +}; + +BOOST_AUTO_TEST_CASE( name_of_template_type_in_default_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "my_template_type_in_default_namespace", to_string( my_template_type_in_default_namespace() ) ); +} + +BOOST_AUTO_TEST_CASE( name_of_inner_type_from_template_type_in_default_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "inner", to_string( my_template_type_in_default_namespace::inner() ) ); +} + +namespace +{ + struct my_type_in_anonymous_namespace {}; +} + +BOOST_AUTO_TEST_CASE( name_of_type_in_anonymous_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "my_type_in_anonymous_namespace", to_string( my_type_in_anonymous_namespace() ) ); +} + +namespace nm +{ + struct my_type_from_named_namespace {}; +} + +BOOST_AUTO_TEST_CASE( name_of_type_from_named_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "my_type_from_named_namespace", to_string( nm::my_type_from_named_namespace() ) ); +} + +namespace nm +{ +namespace inner +{ + struct my_type_in_named_inner_namespace {}; +} +} + +BOOST_AUTO_TEST_CASE( name_of_type_in_named_inner_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "my_type_in_named_inner_namespace", to_string( nm::inner::my_type_in_named_inner_namespace() ) ); +} + +namespace +{ +namespace inner +{ + struct my_type_in_unnamed_inner_namespace {}; +} +} + +BOOST_AUTO_TEST_CASE( name_of_type_in_unnamed_inner_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "my_type_in_unnamed_inner_namespace", to_string( inner::my_type_in_unnamed_inner_namespace() ) ); +} + +BOOST_AUTO_TEST_CASE( name_of_local_type_is_extracted ) +{ + struct my_local_type {}; + BOOST_CHECK_EQUAL( "my_local_type", boost::lexical_cast< std::string >( MOCK_TYPE_NAME(my_local_type) ) ); +} + +namespace +{ + template< typename T > + struct my_template_type + { + struct inner {}; + }; +} + +BOOST_AUTO_TEST_CASE( name_of_template_type_in_anonymous_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< int >() ) ); + BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< std::exception >() ) ); + BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< int const& >() ) ); + BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< std::exception const& >() ) ); + BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< int const* >() ) ); + BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< std::exception const* >() ) ); + BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< int const*& >() ) ); + BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< std::exception const*& >() ) ); +} + +BOOST_AUTO_TEST_CASE( name_of_inner_type_from_template_type_in_anonymous_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< int >::inner() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< std::exception >::inner() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< int const& >::inner() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< std::exception const& >::inner() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< int const* >::inner() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< std::exception const* >::inner() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< int const*& >::inner() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< std::exception const*& >::inner() ) ); +} + +namespace nm +{ + template< typename T > + struct my_template_type + { + struct inner {}; + }; +} + +BOOST_AUTO_TEST_CASE( name_of_template_type_in_named_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< int >() ) ); + BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< std::exception >() ) ); + BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< int const& >() ) ); + BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< std::exception const& >() ) ); + BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< int const* >() ) ); + BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< std::exception const* >() ) ); + BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< int const*& >() ) ); + BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< std::exception const*& >() ) ); +} + +BOOST_AUTO_TEST_CASE( name_of_inner_type_from_template_type_in_named_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< int >::inner() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< std::exception >::inner() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< int const& >::inner() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< std::exception const& >::inner() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< int const* >::inner() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< std::exception const* >::inner() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< int const*& >::inner() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< std::exception const*& >::inner() ) ); +} + +namespace nm2 +{ + template< typename T > + struct my_template_type + { + template< typename U > + struct inner {}; + }; +} + +BOOST_AUTO_TEST_CASE( name_of_template_inner_type_from_template_type_in_named_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int >::inner< int >() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception >::inner< int >() ) ); + + BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int const& >::inner< int >() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception const& >::inner< int >() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int const* >::inner< int >() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception const* >::inner< int >() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int const*& >::inner< int >() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception const*& >::inner< int >() ) ); + + BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int >::inner< int const& >() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception >::inner< int const& >() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int >::inner< int const* >() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception >::inner< int const* >() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int >::inner< int const*& >() ) ); + BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception >::inner< int const*& >() ) ); +} + +namespace +{ + template< typename T1, typename T2, typename T3 > + struct my_tpl + {}; +} + +BOOST_AUTO_TEST_CASE( name_of_nested_template_with_multiple_arguments_is_extracted ) +{ + BOOST_CHECK_EQUAL( "vector>", to_string( std::vector< int >() ) ); + BOOST_CHECK_EQUAL( "vector>, allocator>>>", to_string( std::vector< std::vector< int > >() ) ); + BOOST_CHECK_EQUAL( "my_tpl, my_tpl, my_tpl>", to_string( my_tpl< my_tpl< int, int, int >, my_tpl< int, int, int >, my_tpl< int, int, int > >() ) ); +} diff --git a/test/fail_ambiguous_mock_method.cpp b/test/fail_ambiguous_mock_method.cpp index 8d1e0c8..08148ce 100644 --- a/test/fail_ambiguous_mock_method.cpp +++ b/test/fail_ambiguous_mock_method.cpp @@ -1,24 +1,24 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include - -namespace -{ - struct my_base - { - virtual ~my_base() {} - virtual void my_method() = 0; - virtual void my_method( int ) = 0; - }; - - MOCK_BASE_CLASS( my_class, my_base ) - { - MOCK_METHOD( my_method, 0 ) - }; -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +namespace +{ + struct my_base + { + virtual ~my_base() {} + virtual void my_method() = 0; + virtual void my_method( int ) = 0; + }; + + MOCK_BASE_CLASS( my_class, my_base ) + { + MOCK_METHOD( my_method, 0 ) + }; +} diff --git a/test/fail_constraint_functor_not_compatible.cpp b/test/fail_constraint_functor_not_compatible.cpp index 7659017..51558eb 100644 --- a/test/fail_constraint_functor_not_compatible.cpp +++ b/test/fail_constraint_functor_not_compatible.cpp @@ -1,24 +1,24 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include - -namespace -{ - MOCK_CLASS( my_class ) - { - MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) - }; - bool constraint( int, int ); - - void test_case() - { - my_class c; - MOCK_EXPECT( c.my_method ).with( &constraint ); - } -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +namespace +{ + MOCK_CLASS( my_class ) + { + MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) + }; + bool constraint( int, int ); + + void test_case() + { + my_class c; + MOCK_EXPECT( c.my_method ).with( &constraint ); + } +} diff --git a/test/fail_constraint_value_not_comparable.cpp b/test/fail_constraint_value_not_comparable.cpp index a2bc612..0d0ef8c 100644 --- a/test/fail_constraint_value_not_comparable.cpp +++ b/test/fail_constraint_value_not_comparable.cpp @@ -1,22 +1,22 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include - -namespace -{ - MOCK_CLASS( my_class ) - { - MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) - }; - void test_case() - { - my_class c; - MOCK_EXPECT( c.my_method ).with( "42" ); - } -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +namespace +{ + MOCK_CLASS( my_class ) + { + MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) + }; + void test_case() + { + my_class c; + MOCK_EXPECT( c.my_method ).with( "42" ); + } +} diff --git a/test/fail_constraint_value_of_wrong_type_in_builtin_constraint.cpp b/test/fail_constraint_value_of_wrong_type_in_builtin_constraint.cpp index ee47647..f54013c 100644 --- a/test/fail_constraint_value_of_wrong_type_in_builtin_constraint.cpp +++ b/test/fail_constraint_value_of_wrong_type_in_builtin_constraint.cpp @@ -1,22 +1,22 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include - -namespace -{ - MOCK_CLASS( my_class ) - { - MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) - }; - void test_case() - { - my_class c; - MOCK_EXPECT( c.my_method ).with( mock::equal( "42" ) ); - } -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +namespace +{ + MOCK_CLASS( my_class ) + { + MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) + }; + void test_case() + { + my_class c; + MOCK_EXPECT( c.my_method ).with( mock::equal( "42" ) ); + } +} diff --git a/test/fail_mismatch_type_in_returns_int_action.cpp b/test/fail_mismatch_type_in_returns_int_action.cpp index ebc3df7..1147857 100644 --- a/test/fail_mismatch_type_in_returns_int_action.cpp +++ b/test/fail_mismatch_type_in_returns_int_action.cpp @@ -1,22 +1,22 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include - -namespace -{ - MOCK_CLASS( my_class ) - { - MOCK_METHOD_EXT( my_method, 0, int(), my_method ) - }; - void test_case() - { - my_class c; - MOCK_EXPECT( c.my_method ).returns( std::string() ); - } -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +namespace +{ + MOCK_CLASS( my_class ) + { + MOCK_METHOD_EXT( my_method, 0, int(), my_method ) + }; + void test_case() + { + my_class c; + MOCK_EXPECT( c.my_method ).returns( std::string() ); + } +} diff --git a/test/fail_mismatch_type_in_returns_string_action.cpp b/test/fail_mismatch_type_in_returns_string_action.cpp index 38c675f..103613f 100644 --- a/test/fail_mismatch_type_in_returns_string_action.cpp +++ b/test/fail_mismatch_type_in_returns_string_action.cpp @@ -1,22 +1,22 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include - -namespace -{ - MOCK_CLASS( my_class ) - { - MOCK_METHOD_EXT( my_method, 0, std::string(), my_method ) - }; - void test_case() - { - my_class c; - MOCK_EXPECT( c.my_method ).returns( 42 ); - } -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +namespace +{ + MOCK_CLASS( my_class ) + { + MOCK_METHOD_EXT( my_method, 0, std::string(), my_method ) + }; + void test_case() + { + my_class c; + MOCK_EXPECT( c.my_method ).returns( 42 ); + } +} diff --git a/test/fail_mismatch_type_in_returns_void_action.cpp b/test/fail_mismatch_type_in_returns_void_action.cpp index fd518ad..68b774c 100644 --- a/test/fail_mismatch_type_in_returns_void_action.cpp +++ b/test/fail_mismatch_type_in_returns_void_action.cpp @@ -1,22 +1,22 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include - -namespace -{ - MOCK_CLASS( my_class ) - { - MOCK_METHOD_EXT( my_method, 0, void(), my_method ) - }; - void test_case() - { - my_class c; - MOCK_EXPECT( c.my_method ).returns( "42" ); - } -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +namespace +{ + MOCK_CLASS( my_class ) + { + MOCK_METHOD_EXT( my_method, 0, void(), my_method ) + }; + void test_case() + { + my_class c; + MOCK_EXPECT( c.my_method ).returns( "42" ); + } +} diff --git a/test/fail_non_existing_base_class_method_in_mock_method.cpp b/test/fail_non_existing_base_class_method_in_mock_method.cpp index 484bad1..0e50e73 100644 --- a/test/fail_non_existing_base_class_method_in_mock_method.cpp +++ b/test/fail_non_existing_base_class_method_in_mock_method.cpp @@ -1,22 +1,22 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include - -namespace -{ - struct my_base - { - virtual ~my_base() {} - }; - - MOCK_BASE_CLASS( my_class, my_base ) - { - MOCK_METHOD( my_method, 0 ) - }; -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +namespace +{ + struct my_base + { + virtual ~my_base() {} + }; + + MOCK_BASE_CLASS( my_class, my_base ) + { + MOCK_METHOD( my_method, 0 ) + }; +} diff --git a/test/fail_number_of_arguments_greater_than_max_constant.cpp b/test/fail_number_of_arguments_greater_than_max_constant.cpp index 5b7b45b..7a71272 100644 --- a/test/fail_number_of_arguments_greater_than_max_constant.cpp +++ b/test/fail_number_of_arguments_greater_than_max_constant.cpp @@ -1,25 +1,25 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include - -BOOST_STATIC_ASSERT( MOCK_MAX_ARGS == 9 ); - -namespace -{ - struct my_base - { - virtual ~my_base() {} - virtual void my_method( int, int, int, int, int, int, int, int, int, int ) = 0; - }; - - MOCK_BASE_CLASS( my_class, my_base ) - { - MOCK_METHOD( my_method, 10 ) - }; -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +BOOST_STATIC_ASSERT( MOCK_MAX_ARGS == 9 ); + +namespace +{ + struct my_base + { + virtual ~my_base() {} + virtual void my_method( int, int, int, int, int, int, int, int, int, int ) = 0; + }; + + MOCK_BASE_CLASS( my_class, my_base ) + { + MOCK_METHOD( my_method, 10 ) + }; +} diff --git a/test/fail_template_argument_without_tpl_macro.cpp b/test/fail_template_argument_without_tpl_macro.cpp index fd1c4b7..a0e700e 100644 --- a/test/fail_template_argument_without_tpl_macro.cpp +++ b/test/fail_template_argument_without_tpl_macro.cpp @@ -1,18 +1,18 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include - -namespace -{ - template< typename T > - MOCK_CLASS( my_class ) - { - MOCK_METHOD_EXT( my_method, 1, void( T ), my_method ) - }; -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +namespace +{ + template< typename T > + MOCK_CLASS( my_class ) + { + MOCK_METHOD_EXT( my_method, 1, void( T ), my_method ) + }; +} diff --git a/test/fail_too_many_arguments_in_mock_method.cpp b/test/fail_too_many_arguments_in_mock_method.cpp index 9456f45..fa4ca01 100644 --- a/test/fail_too_many_arguments_in_mock_method.cpp +++ b/test/fail_too_many_arguments_in_mock_method.cpp @@ -1,23 +1,23 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include - -namespace -{ - struct my_base - { - virtual ~my_base() {} - virtual void my_method( int ) = 0; - }; - - MOCK_BASE_CLASS( my_class, my_base ) - { - MOCK_METHOD( my_method, 2 ) - }; -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +namespace +{ + struct my_base + { + virtual ~my_base() {} + virtual void my_method( int ) = 0; + }; + + MOCK_BASE_CLASS( my_class, my_base ) + { + MOCK_METHOD( my_method, 2 ) + }; +} diff --git a/test/fail_wrong_number_of_arguments_in_with.cpp b/test/fail_wrong_number_of_arguments_in_with.cpp index 8d9b12f..dc3420f 100644 --- a/test/fail_wrong_number_of_arguments_in_with.cpp +++ b/test/fail_wrong_number_of_arguments_in_with.cpp @@ -1,22 +1,22 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include - -namespace -{ - MOCK_CLASS( my_class ) - { - MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) - }; - void test_case() - { - my_class c; - MOCK_EXPECT( c.my_method ).with( 42, 42 ); - } -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2011 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +namespace +{ + MOCK_CLASS( my_class ) + { + MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) + }; + void test_case() + { + my_class c; + MOCK_EXPECT( c.my_method ).with( 42, 42 ); + } +} diff --git a/test/mock_error.hpp b/test/mock_error.hpp index dc64c0d..ae95ca8 100644 --- a/test/mock_error.hpp +++ b/test/mock_error.hpp @@ -1,112 +1,112 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_TEST_MOCK_ERROR_HPP_INCLUDED -#define MOCK_TEST_MOCK_ERROR_HPP_INCLUDED - -#define MOCK_ERROR_POLICY mock_error -#include -#include -#include -#include - -struct mock_error_data_t : boost::unit_test::singleton< mock_error_data_t > -{ - void reset() - { - call_count = 0; - error_count = 0; - last_message.clear(); - last_context.clear(); - } - bool verify() - { - return error_count == 0; - } - - void call() - { - last_context.clear(); - last_message.clear(); - ++call_count; - } - void fail( const std::string& message, - const std::string& context, - const char* file, int line ) - { - last_context = context; - last_message = message; - last_file = file; - last_line = line; - ++error_count; - } - - int error_count; - int call_count; - std::string last_message; - std::string last_context; - std::string last_file; - int last_line; -private: - BOOST_TEST_SINGLETON_CONS( mock_error_data_t ); -}; -BOOST_TEST_SINGLETON_INST( mock_error_data ) - -template< typename Result > -struct mock_error -{ - static Result abort() - { - throw std::runtime_error( "aborted" ); - } - - static void pass( const char* /*file*/, int /*line*/ ) - {} - - template< typename Context > - static void call( const Context& /*context*/, - const char* /*file*/, int /*line*/ ) - { - mock_error_data.call(); - } - - template< typename Context > - static void fail( const std::string& message, const Context& context, - const char* file = "", int line = 0 ) - { - mock_error_data.fail( message, - boost::lexical_cast< std::string >( context ), file, line ); - } -}; - -struct mock_error_fixture -{ - mock_error_fixture() - { - mock_error_data.reset(); - } - ~mock_error_fixture() - { - BOOST_CHECK( mock_error_data.verify() ); - BOOST_CHECK_EQUAL( 0, mock_error_data.call_count ); - } -}; - -#define CHECK_CALLS( calls ) \ - BOOST_CHECK_EQUAL( calls, mock_error_data.call_count ); \ - mock_error_data.call_count = 0; -#define CHECK_ERROR( expr, error, calls, context ) \ - BOOST_CHECK( mock_error_data.verify() ); \ - try { expr; } catch( ... ) {} \ - BOOST_CHECK_EQUAL( 1, mock_error_data.error_count ); \ - BOOST_CHECK_EQUAL( error, mock_error_data.last_message ); \ - BOOST_CHECK_EQUAL( context, mock_error_data.last_context ); \ - CHECK_CALLS( calls ); \ - mock_error_data.reset(); - -#endif // MOCK_TEST_MOCK_ERROR_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_TEST_MOCK_ERROR_HPP_INCLUDED +#define MOCK_TEST_MOCK_ERROR_HPP_INCLUDED + +#define MOCK_ERROR_POLICY mock_error +#include +#include +#include +#include + +struct mock_error_data_t : boost::unit_test::singleton< mock_error_data_t > +{ + void reset() + { + call_count = 0; + error_count = 0; + last_message.clear(); + last_context.clear(); + } + bool verify() + { + return error_count == 0; + } + + void call() + { + last_context.clear(); + last_message.clear(); + ++call_count; + } + void fail( const std::string& message, + const std::string& context, + const char* file, int line ) + { + last_context = context; + last_message = message; + last_file = file; + last_line = line; + ++error_count; + } + + int error_count; + int call_count; + std::string last_message; + std::string last_context; + std::string last_file; + int last_line; +private: + BOOST_TEST_SINGLETON_CONS( mock_error_data_t ); +}; +BOOST_TEST_SINGLETON_INST( mock_error_data ) + +template< typename Result > +struct mock_error +{ + static Result abort() + { + throw std::runtime_error( "aborted" ); + } + + static void pass( const char* /*file*/, int /*line*/ ) + {} + + template< typename Context > + static void call( const Context& /*context*/, + const char* /*file*/, int /*line*/ ) + { + mock_error_data.call(); + } + + template< typename Context > + static void fail( const std::string& message, const Context& context, + const char* file = "", int line = 0 ) + { + mock_error_data.fail( message, + boost::lexical_cast< std::string >( context ), file, line ); + } +}; + +struct mock_error_fixture +{ + mock_error_fixture() + { + mock_error_data.reset(); + } + ~mock_error_fixture() + { + BOOST_CHECK( mock_error_data.verify() ); + BOOST_CHECK_EQUAL( 0, mock_error_data.call_count ); + } +}; + +#define CHECK_CALLS( calls ) \ + BOOST_CHECK_EQUAL( calls, mock_error_data.call_count ); \ + mock_error_data.call_count = 0; +#define CHECK_ERROR( expr, error, calls, context ) \ + BOOST_CHECK( mock_error_data.verify() ); \ + try { expr; } catch( ... ) {} \ + BOOST_CHECK_EQUAL( 1, mock_error_data.error_count ); \ + BOOST_CHECK_EQUAL( error, mock_error_data.last_message ); \ + BOOST_CHECK_EQUAL( context, mock_error_data.last_context ); \ + CHECK_CALLS( calls ); \ + mock_error_data.reset(); + +#endif // MOCK_TEST_MOCK_ERROR_HPP_INCLUDED diff --git a/test/test_constraint.cpp b/test/test_constraint.cpp index bcc55a1..c690d07 100644 --- a/test/test_constraint.cpp +++ b/test/test_constraint.cpp @@ -1,28 +1,42 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2013 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include - -#ifdef MOCK_VARIADIC_MACROS - -namespace -{ - MOCK_CONSTRAINT( constraint_0, actual == 0 ) - MOCK_CONSTRAINT( constraint_1, expected, actual == expected ) - MOCK_CONSTRAINT( constraint_2, expected_0, expected_1, actual == expected_0 || actual == expected_1 ) -} - -BOOST_AUTO_TEST_CASE( mock_constraint_is_supported_by_compilers_with_variadic_macros ) -{ - BOOST_CHECK( constraint_0.c_( 0 ) ); - BOOST_CHECK( constraint_1( 0 ).c_( 0 ) ); - BOOST_CHECK( constraint_2( 0, 0 ).c_( 0 ) ); -} - -#endif // MOCK_VARIADIC_MACROS +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2013 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include + +#ifdef MOCK_VARIADIC_MACROS + +namespace +{ + MOCK_CONSTRAINT( constraint_0, actual == 0 ) + MOCK_CONSTRAINT( constraint_1, expected, actual == expected ) + MOCK_CONSTRAINT( constraint_2, expected_0, expected_1, actual == expected_0 || actual == expected_1 ) +} + +BOOST_AUTO_TEST_CASE( mock_constraint_is_supported_by_compilers_with_variadic_macros ) +{ + BOOST_CHECK( constraint_0.c_( 0 ) ); + BOOST_CHECK( constraint_1( 0 ).c_( 0 ) ); + BOOST_CHECK( constraint_2( 0, 0 ).c_( 0 ) ); +} + +#endif // MOCK_VARIADIC_MACROS + +namespace +{ + MOCK_CONSTRAINT_EXT( constraint_0_ext, 0,, actual == 0 ) + MOCK_CONSTRAINT_EXT( constraint_1_ext, 1, ( expected ), actual == expected ) + MOCK_CONSTRAINT_EXT( constraint_2_ext, 2, ( expected_0, expected_1 ), actual == expected_0 || actual == expected_1 ) +} + +BOOST_AUTO_TEST_CASE( mock_constraint_ext_is_supported_by_all_compilers ) +{ + BOOST_CHECK( constraint_0_ext.c_( 0 ) ); + BOOST_CHECK( constraint_1_ext( 0 ).c_( 0 ) ); + BOOST_CHECK( constraint_2_ext( 0, 0 ).c_( 0 ) ); +} diff --git a/test/test_constraints.cpp b/test/test_constraints.cpp index f9d5fad..60e3128 100644 --- a/test/test_constraints.cpp +++ b/test/test_constraints.cpp @@ -1,369 +1,369 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include - -BOOST_AUTO_TEST_CASE( all_comparison_constraints_can_be_instanciated ) -{ - mock::equal( 0 ); - mock::less( 0 ); - mock::greater( 0 ); - mock::less_equal( 0 ); - mock::greater_equal( 0 ); -} - -BOOST_AUTO_TEST_CASE( constraints_can_be_negated_using_the_not_operator ) -{ - ! mock::any; - ! mock::affirm; - ! mock::negate; - ! mock::evaluate; - ! mock::equal( 0 ); - ! mock::less( 0 ); - ! mock::greater( 0 ); - ! mock::less_equal( 0 ); - ! mock::greater_equal( 0 ); -} - -BOOST_AUTO_TEST_CASE( constraints_can_be_combined_using_the_or_operator ) -{ - mock::less( 0 ) || mock::greater( 0 ); -} - -BOOST_AUTO_TEST_CASE( constraints_can_be_combined_using_the_and_operator ) -{ - mock::less( 0 ) && mock::greater( 0 ); -} - -BOOST_AUTO_TEST_CASE( equal_constraint ) -{ - BOOST_CHECK( mock::equal( std::string( "string" ) ).c_( "string" ) ); - BOOST_CHECK( ! mock::equal( std::string( "string" ) ).c_( "not string" ) ); - { - std::string s; - mock::constraint< - mock::detail::equal< - boost::reference_wrapper< const std::string > - > - > c = mock::equal( boost::cref( s ) ); - s = "string"; - BOOST_CHECK( c.c_( "string" ) ); - } -} - -BOOST_AUTO_TEST_CASE( same_constraint ) -{ - { - int i = 0; - int j = 0; - BOOST_CHECK_EQUAL( i, j ); - BOOST_CHECK( ! mock::same( i ).c_( j ) ); - BOOST_CHECK( mock::same( i ).c_( i ) ); - } - { - int i = 0; - int j = 0; - BOOST_CHECK_EQUAL( i, j ); - mock::constraint< - mock::detail::same< - const boost::reference_wrapper< const int > - > - > c = mock::same( boost::cref( i ) ); - BOOST_CHECK( ! c.c_( j ) ); - BOOST_CHECK( c.c_( i ) ); - } -#ifdef MOCK_NULLPTR - { - std::nullptr_t p; - BOOST_CHECK( mock::same( p ).c_( p ) ); - } -#endif -} - -BOOST_AUTO_TEST_CASE( assign_constraint ) -{ - { - int i = 0; - BOOST_CHECK( mock::assign( 3 ).c_( i ) ); - BOOST_CHECK_EQUAL( 3, i ); - } - { - int i = 0; - BOOST_CHECK( mock::assign( 3 ).c_( &i ) ); - BOOST_CHECK_EQUAL( 3, i ); - } - { - const int* i = 0; - const int j = 1; - BOOST_CHECK( mock::assign( &j ).c_( i ) ); - BOOST_CHECK_EQUAL( &j, i ); - } - { - int i = 0; - int j = 1; - mock::constraint< - mock::detail::assign< - boost::reference_wrapper< const int > - > - > c = mock::assign( boost::cref( j ) ); - BOOST_CHECK( c.c_( i ) ); - BOOST_CHECK_EQUAL( 1, i ); - j = 3; - BOOST_CHECK( c.c_( i ) ); - BOOST_CHECK_EQUAL( 3, i ); - } - { - int i = 0; - int j = 1; - mock::constraint< - mock::detail::assign< - boost::reference_wrapper< const int > - > - > c = mock::assign( boost::cref( j ) ); - BOOST_CHECK( c.c_( &i ) ); - BOOST_CHECK_EQUAL( 1, i ); - j = 3; - BOOST_CHECK( c.c_( &i ) ); - BOOST_CHECK_EQUAL( 3, i ); - } - { - const int* i = 0; - int k = 1; - int* j = &k; - mock::constraint< - mock::detail::assign< - boost::reference_wrapper< int* const > - > - > c = mock::assign( boost::cref( j ) ); - BOOST_CHECK( c.c_( i ) ); - BOOST_CHECK_EQUAL( j, i ); - j = 0; - BOOST_CHECK( c.c_( i ) ); - BOOST_CHECK_EQUAL( j, i ); - } -} - -BOOST_AUTO_TEST_CASE( retrieve_constraint ) -{ - { - int i = 0; - const int j = 1; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, j ); - } - { - int* i = 0; - int j = 1; - BOOST_CHECK( mock::retrieve( i ).c_( &j ) ); - BOOST_CHECK_EQUAL( i, &j ); - } - { - const int* i = 0; - const int j = 1; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, &j ); - } - { - const int* i = 0; - int j = 1; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, &j ); - } - { - int* i = 0; - int j = 1; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, &j ); - } - { - const int* i = 0; - const int j = 1; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, &j ); - } - { - int** i = 0; - int* j = 0; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, &j ); - } - { - const int** i = 0; - const int* j = 0; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, &j ); - } - { - int i = 0; - const int j = 1; - BOOST_CHECK( mock::retrieve( boost::ref( i ) ).c_( j ) ); - BOOST_CHECK_EQUAL( i, j ); - } - { - const int* i = 0; - const int j = 1; - BOOST_CHECK( mock::retrieve( boost::ref( i ) ).c_( j ) ); - BOOST_CHECK_EQUAL( i, &j ); - } -#ifdef MOCK_NULLPTR - { - std::nullptr_t* i = 0; - std::nullptr_t j; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, &j ); - } -#endif -} - -namespace -{ - struct A - { - }; - struct B - { - B& operator=( const A& ) - { - return *this; - } - }; -} - -BOOST_AUTO_TEST_CASE( retrieve_constraint_uses_assignment_operator ) -{ - B b; - const A a = A(); - mock::retrieve( b ).c_( a ); -} - -BOOST_AUTO_TEST_CASE( affirm_constraint ) -{ - int* i = 0; - int j; - BOOST_CHECK( ! mock::affirm.c_( i ) ); - BOOST_CHECK( mock::affirm.c_( &j ) ); -} - -BOOST_AUTO_TEST_CASE( negate_constraint ) -{ - int* i = 0; - int j; - BOOST_CHECK( mock::negate.c_( i ) ); - BOOST_CHECK( ! mock::negate.c_( &j ) ); -} - -namespace -{ - bool return_true() - { - return true; - } - bool return_false() - { - return false; - } -} - -BOOST_AUTO_TEST_CASE( call_constraint ) -{ - BOOST_CHECK( mock::call( &return_true ).c_() ); - BOOST_CHECK( ! mock::call( &return_false ).c_() ); -} - -BOOST_AUTO_TEST_CASE( evaluate_constraint ) -{ - BOOST_CHECK( mock::evaluate.c_( &return_true ) ); - BOOST_CHECK( ! mock::evaluate.c_( &return_false ) ); -} - -BOOST_AUTO_TEST_CASE( contain_constraint_with_const_char_ptr ) -{ - BOOST_CHECK( mock::contain( "string" ).c_( "this is a string" ) ); - BOOST_CHECK( mock::contain( "string" ).c_( std::string( "this is a string" ) ) ); - BOOST_CHECK( ! mock::contain( "not found" ).c_( "this is a string" ) ); - BOOST_CHECK( ! mock::contain( "not found" ).c_( std::string( "this is a string" ) ) ); - { - const char* s = 0; - mock::constraint< - mock::detail::contain< - boost::reference_wrapper< const char* const > - > - > c = mock::contain( boost::cref( s ) ); - s = "string"; - BOOST_CHECK( c.c_( "this is a string" ) ); - BOOST_CHECK( c.c_( std::string( "this is a string" ) ) ); - s = "not found"; - BOOST_CHECK( ! c.c_( "this is a string" ) ); - BOOST_CHECK( ! c.c_( std::string( "this is a string" ) ) ); - } -} - -BOOST_AUTO_TEST_CASE( contain_constraint_with_strings ) -{ - BOOST_CHECK( mock::contain( std::string( "string" ) ).c_( "this is a string" ) ); - BOOST_CHECK( mock::contain( std::string( "string" ) ).c_( std::string( "this is a string" ) ) ); - BOOST_CHECK( ! mock::contain( std::string( "not found" ) ).c_( "this is a string" ) ); - BOOST_CHECK( ! mock::contain( std::string( "not found" ) ).c_( std::string( "this is a string" ) ) ); - { - std::string s; - mock::constraint< - mock::detail::contain< - boost::reference_wrapper< const std::string > - > - > c = mock::contain( boost::cref( s ) ); - s = "string"; - BOOST_CHECK( c.c_( "this is a string" ) ); - BOOST_CHECK( c.c_( std::string( "this is a string" ) ) ); - s = "not found"; - BOOST_CHECK( ! c.c_( "this is a string" ) ); - BOOST_CHECK( ! c.c_( std::string( "this is a string" ) ) ); - } -} - -namespace -{ - struct type_with_overloaded_address_operator - { - void operator&() {} - void operator&() const {} - }; -} - -BOOST_AUTO_TEST_CASE( type_with_overloaded_address_operator_can_be_used_in_constraints ) -{ - type_with_overloaded_address_operator t; - mock::same( t ).c_( t ); - mock::retrieve( t ).c_( t ); - type_with_overloaded_address_operator* pt; - mock::retrieve( pt ).c_( t ); -} - -BOOST_AUTO_TEST_CASE( close_constraint ) -{ - BOOST_CHECK( mock::close( 12.0, 0.0001 ).c_( 12 ) ); - BOOST_CHECK( ! mock::close( 12.0, 0.0001 ).c_( 13 ) ); -} - -BOOST_AUTO_TEST_CASE( close_fraction_constraint ) -{ - BOOST_CHECK( mock::close_fraction( 12.0, 0.0001 ).c_( 12 ) ); - BOOST_CHECK( ! mock::close_fraction( 12.0, 0.0001 ).c_( 13 ) ); -} - -BOOST_AUTO_TEST_CASE( small_constraint ) -{ - BOOST_CHECK( mock::small( 0.0001 ).c_( 0. ) ); - BOOST_CHECK( ! mock::small( 0.0001 ).c_( 12. ) ); -} - -BOOST_AUTO_TEST_CASE( near_constraint ) -{ - BOOST_CHECK( mock::near( 12.0, 0.0001 ).c_( 12 ) ); - BOOST_CHECK( ! mock::near( 12.0, 0.0001 ).c_( 13 ) ); -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include + +BOOST_AUTO_TEST_CASE( all_comparison_constraints_can_be_instanciated ) +{ + mock::equal( 0 ); + mock::less( 0 ); + mock::greater( 0 ); + mock::less_equal( 0 ); + mock::greater_equal( 0 ); +} + +BOOST_AUTO_TEST_CASE( constraints_can_be_negated_using_the_not_operator ) +{ + ! mock::any; + ! mock::affirm; + ! mock::negate; + ! mock::evaluate; + ! mock::equal( 0 ); + ! mock::less( 0 ); + ! mock::greater( 0 ); + ! mock::less_equal( 0 ); + ! mock::greater_equal( 0 ); +} + +BOOST_AUTO_TEST_CASE( constraints_can_be_combined_using_the_or_operator ) +{ + mock::less( 0 ) || mock::greater( 0 ); +} + +BOOST_AUTO_TEST_CASE( constraints_can_be_combined_using_the_and_operator ) +{ + mock::less( 0 ) && mock::greater( 0 ); +} + +BOOST_AUTO_TEST_CASE( equal_constraint ) +{ + BOOST_CHECK( mock::equal( std::string( "string" ) ).c_( "string" ) ); + BOOST_CHECK( ! mock::equal( std::string( "string" ) ).c_( "not string" ) ); + { + std::string s; + mock::constraint< + mock::detail::equal< + boost::reference_wrapper< const std::string > + > + > c = mock::equal( boost::cref( s ) ); + s = "string"; + BOOST_CHECK( c.c_( "string" ) ); + } +} + +BOOST_AUTO_TEST_CASE( same_constraint ) +{ + { + int i = 0; + int j = 0; + BOOST_CHECK_EQUAL( i, j ); + BOOST_CHECK( ! mock::same( i ).c_( j ) ); + BOOST_CHECK( mock::same( i ).c_( i ) ); + } + { + int i = 0; + int j = 0; + BOOST_CHECK_EQUAL( i, j ); + mock::constraint< + mock::detail::same< + const boost::reference_wrapper< const int > + > + > c = mock::same( boost::cref( i ) ); + BOOST_CHECK( ! c.c_( j ) ); + BOOST_CHECK( c.c_( i ) ); + } +#ifdef MOCK_NULLPTR + { + std::nullptr_t p; + BOOST_CHECK( mock::same( p ).c_( p ) ); + } +#endif +} + +BOOST_AUTO_TEST_CASE( assign_constraint ) +{ + { + int i = 0; + BOOST_CHECK( mock::assign( 3 ).c_( i ) ); + BOOST_CHECK_EQUAL( 3, i ); + } + { + int i = 0; + BOOST_CHECK( mock::assign( 3 ).c_( &i ) ); + BOOST_CHECK_EQUAL( 3, i ); + } + { + const int* i = 0; + const int j = 1; + BOOST_CHECK( mock::assign( &j ).c_( i ) ); + BOOST_CHECK_EQUAL( &j, i ); + } + { + int i = 0; + int j = 1; + mock::constraint< + mock::detail::assign< + boost::reference_wrapper< const int > + > + > c = mock::assign( boost::cref( j ) ); + BOOST_CHECK( c.c_( i ) ); + BOOST_CHECK_EQUAL( 1, i ); + j = 3; + BOOST_CHECK( c.c_( i ) ); + BOOST_CHECK_EQUAL( 3, i ); + } + { + int i = 0; + int j = 1; + mock::constraint< + mock::detail::assign< + boost::reference_wrapper< const int > + > + > c = mock::assign( boost::cref( j ) ); + BOOST_CHECK( c.c_( &i ) ); + BOOST_CHECK_EQUAL( 1, i ); + j = 3; + BOOST_CHECK( c.c_( &i ) ); + BOOST_CHECK_EQUAL( 3, i ); + } + { + const int* i = 0; + int k = 1; + int* j = &k; + mock::constraint< + mock::detail::assign< + boost::reference_wrapper< int* const > + > + > c = mock::assign( boost::cref( j ) ); + BOOST_CHECK( c.c_( i ) ); + BOOST_CHECK_EQUAL( j, i ); + j = 0; + BOOST_CHECK( c.c_( i ) ); + BOOST_CHECK_EQUAL( j, i ); + } +} + +BOOST_AUTO_TEST_CASE( retrieve_constraint ) +{ + { + int i = 0; + const int j = 1; + BOOST_CHECK( mock::retrieve( i ).c_( j ) ); + BOOST_CHECK_EQUAL( i, j ); + } + { + int* i = 0; + int j = 1; + BOOST_CHECK( mock::retrieve( i ).c_( &j ) ); + BOOST_CHECK_EQUAL( i, &j ); + } + { + const int* i = 0; + const int j = 1; + BOOST_CHECK( mock::retrieve( i ).c_( j ) ); + BOOST_CHECK_EQUAL( i, &j ); + } + { + const int* i = 0; + int j = 1; + BOOST_CHECK( mock::retrieve( i ).c_( j ) ); + BOOST_CHECK_EQUAL( i, &j ); + } + { + int* i = 0; + int j = 1; + BOOST_CHECK( mock::retrieve( i ).c_( j ) ); + BOOST_CHECK_EQUAL( i, &j ); + } + { + const int* i = 0; + const int j = 1; + BOOST_CHECK( mock::retrieve( i ).c_( j ) ); + BOOST_CHECK_EQUAL( i, &j ); + } + { + int** i = 0; + int* j = 0; + BOOST_CHECK( mock::retrieve( i ).c_( j ) ); + BOOST_CHECK_EQUAL( i, &j ); + } + { + const int** i = 0; + const int* j = 0; + BOOST_CHECK( mock::retrieve( i ).c_( j ) ); + BOOST_CHECK_EQUAL( i, &j ); + } + { + int i = 0; + const int j = 1; + BOOST_CHECK( mock::retrieve( boost::ref( i ) ).c_( j ) ); + BOOST_CHECK_EQUAL( i, j ); + } + { + const int* i = 0; + const int j = 1; + BOOST_CHECK( mock::retrieve( boost::ref( i ) ).c_( j ) ); + BOOST_CHECK_EQUAL( i, &j ); + } +#ifdef MOCK_NULLPTR + { + std::nullptr_t* i = 0; + std::nullptr_t j; + BOOST_CHECK( mock::retrieve( i ).c_( j ) ); + BOOST_CHECK_EQUAL( i, &j ); + } +#endif +} + +namespace +{ + struct A + { + }; + struct B + { + B& operator=( const A& ) + { + return *this; + } + }; +} + +BOOST_AUTO_TEST_CASE( retrieve_constraint_uses_assignment_operator ) +{ + B b; + const A a = A(); + mock::retrieve( b ).c_( a ); +} + +BOOST_AUTO_TEST_CASE( affirm_constraint ) +{ + int* i = 0; + int j; + BOOST_CHECK( ! mock::affirm.c_( i ) ); + BOOST_CHECK( mock::affirm.c_( &j ) ); +} + +BOOST_AUTO_TEST_CASE( negate_constraint ) +{ + int* i = 0; + int j; + BOOST_CHECK( mock::negate.c_( i ) ); + BOOST_CHECK( ! mock::negate.c_( &j ) ); +} + +namespace +{ + bool return_true() + { + return true; + } + bool return_false() + { + return false; + } +} + +BOOST_AUTO_TEST_CASE( call_constraint ) +{ + BOOST_CHECK( mock::call( &return_true ).c_() ); + BOOST_CHECK( ! mock::call( &return_false ).c_() ); +} + +BOOST_AUTO_TEST_CASE( evaluate_constraint ) +{ + BOOST_CHECK( mock::evaluate.c_( &return_true ) ); + BOOST_CHECK( ! mock::evaluate.c_( &return_false ) ); +} + +BOOST_AUTO_TEST_CASE( contain_constraint_with_const_char_ptr ) +{ + BOOST_CHECK( mock::contain( "string" ).c_( "this is a string" ) ); + BOOST_CHECK( mock::contain( "string" ).c_( std::string( "this is a string" ) ) ); + BOOST_CHECK( ! mock::contain( "not found" ).c_( "this is a string" ) ); + BOOST_CHECK( ! mock::contain( "not found" ).c_( std::string( "this is a string" ) ) ); + { + const char* s = 0; + mock::constraint< + mock::detail::contain< + boost::reference_wrapper< const char* const > + > + > c = mock::contain( boost::cref( s ) ); + s = "string"; + BOOST_CHECK( c.c_( "this is a string" ) ); + BOOST_CHECK( c.c_( std::string( "this is a string" ) ) ); + s = "not found"; + BOOST_CHECK( ! c.c_( "this is a string" ) ); + BOOST_CHECK( ! c.c_( std::string( "this is a string" ) ) ); + } +} + +BOOST_AUTO_TEST_CASE( contain_constraint_with_strings ) +{ + BOOST_CHECK( mock::contain( std::string( "string" ) ).c_( "this is a string" ) ); + BOOST_CHECK( mock::contain( std::string( "string" ) ).c_( std::string( "this is a string" ) ) ); + BOOST_CHECK( ! mock::contain( std::string( "not found" ) ).c_( "this is a string" ) ); + BOOST_CHECK( ! mock::contain( std::string( "not found" ) ).c_( std::string( "this is a string" ) ) ); + { + std::string s; + mock::constraint< + mock::detail::contain< + boost::reference_wrapper< const std::string > + > + > c = mock::contain( boost::cref( s ) ); + s = "string"; + BOOST_CHECK( c.c_( "this is a string" ) ); + BOOST_CHECK( c.c_( std::string( "this is a string" ) ) ); + s = "not found"; + BOOST_CHECK( ! c.c_( "this is a string" ) ); + BOOST_CHECK( ! c.c_( std::string( "this is a string" ) ) ); + } +} + +namespace +{ + struct type_with_overloaded_address_operator + { + void operator&() {} + void operator&() const {} + }; +} + +BOOST_AUTO_TEST_CASE( type_with_overloaded_address_operator_can_be_used_in_constraints ) +{ + type_with_overloaded_address_operator t; + mock::same( t ).c_( t ); + mock::retrieve( t ).c_( t ); + type_with_overloaded_address_operator* pt; + mock::retrieve( pt ).c_( t ); +} + +BOOST_AUTO_TEST_CASE( close_constraint ) +{ + BOOST_CHECK( mock::close( 12.0, 0.0001 ).c_( 12 ) ); + BOOST_CHECK( ! mock::close( 12.0, 0.0001 ).c_( 13 ) ); +} + +BOOST_AUTO_TEST_CASE( close_fraction_constraint ) +{ + BOOST_CHECK( mock::close_fraction( 12.0, 0.0001 ).c_( 12 ) ); + BOOST_CHECK( ! mock::close_fraction( 12.0, 0.0001 ).c_( 13 ) ); +} + +BOOST_AUTO_TEST_CASE( small_constraint ) +{ + BOOST_CHECK( mock::small( 0.0001 ).c_( 0. ) ); + BOOST_CHECK( ! mock::small( 0.0001 ).c_( 12. ) ); +} + +BOOST_AUTO_TEST_CASE( near_constraint ) +{ + BOOST_CHECK( mock::near( 12.0, 0.0001 ).c_( 12 ) ); + BOOST_CHECK( ! mock::near( 12.0, 0.0001 ).c_( 13 ) ); +} diff --git a/test/test_exception.cpp b/test/test_exception.cpp index 52c9772..818ddeb 100644 --- a/test/test_exception.cpp +++ b/test/test_exception.cpp @@ -1,25 +1,25 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define MOCK_USE_BOOST_TEST -#include -#include - -BOOST_AUTO_TEST_CASE( a_mock_exception_is_not_an_std_exception_to_not_mess_with_user_exceptions ) -{ - try - { - throw mock::exception(); - } - catch( std::exception& ) - { - BOOST_FAIL( "mock::exception must not be an std::exception" ); - } - catch( mock::exception& ) - {} -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define MOCK_USE_BOOST_TEST +#include +#include + +BOOST_AUTO_TEST_CASE( a_mock_exception_is_not_an_std_exception_to_not_mess_with_user_exceptions ) +{ + try + { + throw mock::exception(); + } + catch( std::exception& ) + { + BOOST_FAIL( "mock::exception must not be an std::exception" ); + } + catch( mock::exception& ) + {} +} diff --git a/test/test_integration.cpp b/test/test_integration.cpp index aefe03e..71ed0c6 100644 --- a/test/test_integration.cpp +++ b/test/test_integration.cpp @@ -1,692 +1,692 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include "mock_error.hpp" -#include "undefined.hpp" -#include -#include -#include -#include -#include -#include - -namespace -{ - struct my_custom_mock - { - MOCK_METHOD_EXT( my_method, 0, void(), my_tag ) - }; -} - -BOOST_FIXTURE_TEST_CASE( custom_mock_object_without_macros_and_without_inheriting_from_object, mock_error_fixture ) -{ - my_custom_mock m; - MOCK_EXPECT( m.my_tag ).once(); - m.my_method(); - CHECK_CALLS( 1 ); -} - -namespace -{ - struct my_custom_mock_object - { - MOCK_METHOD_EXT( my_method, 0, void(), my_tag ) - }; -} - -BOOST_FIXTURE_TEST_CASE( custom_mock_object_without_macros, mock_error_fixture ) -{ - my_custom_mock_object m; - MOCK_EXPECT( m.my_tag ).once(); - m.my_method(); - CHECK_CALLS( 1 ); -} - -namespace -{ - MOCK_CLASS( my_mock ) - { - MOCK_METHOD_EXT( my_method, 1, int( int ), my_tag ) - }; -} - -BOOST_FIXTURE_TEST_CASE( basic_mock_object_usage, mock_error_fixture ) -{ - my_mock m; - { - MOCK_EXPECT( m.my_tag ).once().returns( 0 ); - BOOST_CHECK_EQUAL( 0, m.my_method( 13 ) ); - CHECK_CALLS( 1 ); - } - mock::verify(); - mock::reset(); - { - MOCK_EXPECT( m.my_tag ).once().with( 42 ).returns( 7 ); - BOOST_CHECK_EQUAL( 7, m.my_method( 42 ) ); - CHECK_CALLS( 1 ); - } - mock::verify(); - mock::reset(); - { - MOCK_EXPECT( m.my_tag ).once().returns( 51 ); - BOOST_CHECK_EQUAL( 51, m.my_method( 27 ) ); - CHECK_CALLS( 1 ); - } -} - -namespace -{ - class my_ambiguited_interface : boost::noncopyable - { - public: - virtual ~my_ambiguited_interface() {} - - virtual void my_method() = 0; - virtual void my_method( int ) = 0; - }; - - MOCK_BASE_CLASS( my_ambiguited_mock, my_ambiguited_interface ) - { - MOCK_METHOD_EXT( my_method, 0, void(), my_tag1 ) - MOCK_METHOD_EXT( my_method, 1, void( int ), my_tag_2 ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mock_object_method_disambiguation, mock_error_fixture ) -{ - my_ambiguited_mock m; - MOCK_EXPECT( m.my_tag1 ); - m.my_method(); - CHECK_ERROR( m.my_method( 12 ), "unexpected call", 1, "?.my_ambiguited_mock::my_tag_2( 12 )" ); -} - -namespace -{ - class my_const_ambiguited_interface : boost::noncopyable - { - public: - virtual ~my_const_ambiguited_interface() {} - - virtual void my_method() = 0; - virtual void my_method() const = 0; - }; - - MOCK_BASE_CLASS( my_const_ambiguited_mock, my_const_ambiguited_interface ) - { - MOCK_NON_CONST_METHOD_EXT( my_method, 0, void(), tag1 ) - MOCK_CONST_METHOD_EXT( my_method, 0, void(), tag_2 ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mock_object_method_const_disambiguation, mock_error_fixture ) -{ - my_const_ambiguited_mock mock; - MOCK_EXPECT( mock.tag1 ); - BOOST_CHECK_NO_THROW( mock.my_method() ); - const my_const_ambiguited_mock const_mock; - CHECK_ERROR( const_mock.my_method(), "unexpected call", 1, "?.my_const_ambiguited_mock::tag_2()" ); -} - -namespace -{ - MOCK_CLASS( my_undefined_mock ) - { - MOCK_METHOD_EXT( m, 1, void( undefined& ), t ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mock_object_method_with_declared_but_not_defined_parameter_is_valid, mock_error_fixture ) -{ - my_undefined_mock mock; - MOCK_EXPECT( mock.t ); -} - -BOOST_FIXTURE_TEST_CASE( mock_functor_in_function_is_supported, mock_error_fixture ) -{ - boost::function< int( float, const std::string& ) > func; - { - MOCK_FUNCTOR( f, int( float, const std::string& ) ); - MOCK_EXPECT( f ).once().with( 3, "op" ).returns( 42 ); - func = f; - } - BOOST_CHECK_EQUAL( 42, func( 3, "op" ) ); - CHECK_CALLS( 1 ); -} - -namespace -{ - struct functor_fixture : mock_error_fixture - { - MOCK_FUNCTOR( f, int( float, const std::string& ) ); - }; -} - -BOOST_FIXTURE_TEST_CASE( mock_functor_in_fixture_is_supported, functor_fixture ) -{ - MOCK_EXPECT( f ).once().with( 3, "op" ).returns( 42 ); - BOOST_CHECK_EQUAL( 42, f( 3.f, "op" ) ); - CHECK_CALLS( 1 ); -} - -namespace -{ - template< typename T > - struct my_template_mock - { - MOCK_METHOD_EXT( my_method, 0, void(), my_tag ) - MOCK_METHOD_EXT_TPL( my_method, 2, void( T, std::string ), my_tpl_tag ) - MOCK_METHOD_EXT_TPL( my_other_method, 0, void(), my_other_tag ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mocking_a_template_class_method_is_supported, mock_error_fixture ) -{ - my_template_mock< int > m; - MOCK_EXPECT( m.my_tpl_tag ).with( 3, "" ); - m.my_method( 3, "" ); - BOOST_CHECK( MOCK_VERIFY( m.my_tpl_tag ) ); - CHECK_CALLS( 1 ); -} - -namespace -{ - template< typename T > - struct my_template_base_class - { - virtual ~my_template_base_class() - {} - virtual void my_method( T ) = 0; - virtual void my_other_method() = 0; - }; - template< typename T > - MOCK_BASE_CLASS( my_template_base_class_mock, my_template_base_class< T > ) - { - MOCK_METHOD_EXT_TPL( my_method, 1, void( T ), my_method ) - MOCK_METHOD_EXT_TPL( my_other_method, 0, void(), my_other_method ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mocking_a_template_base_class_method_is_supported, mock_error_fixture ) -{ - my_template_base_class_mock< int > m; - MOCK_EXPECT( m.my_method ).once().with( 3 ); - m.my_method( 3 ); - BOOST_CHECK( MOCK_VERIFY( m.my_method ) ); - CHECK_CALLS( 1 ); -} - -namespace -{ - class my_observer : boost::noncopyable - { - public: - virtual ~my_observer() - {} - virtual void notify( int value ) = 0; - }; - - class my_manager : boost::noncopyable - { - public: - virtual ~my_manager() - {} - virtual my_observer& get_observer() const = 0; - }; - - class my_subject : boost::noncopyable - { - public: - explicit my_subject( my_manager& f ) - : o_( f.get_observer() ) - , value_( 0 ) - {} - void increment() - { - o_.notify( ++value_ ); - } - private: - my_observer& o_; - int value_; - }; - - MOCK_BASE_CLASS( my_mock_observer, my_observer ) - { - MOCK_METHOD( notify, 1 ) - }; - - MOCK_BASE_CLASS( my_mock_manager, my_manager ) - { - MOCK_METHOD( get_observer, 0 ) - }; - - struct fixture : mock_error_fixture - { - my_mock_manager manager; - my_mock_observer observer; - }; -} - -BOOST_FIXTURE_TEST_CASE( basic_mock_object_collaboration_usage, fixture ) -{ - MOCK_EXPECT( manager.get_observer ).returns( boost::ref( observer ) ); - my_subject subject( manager ); - MOCK_EXPECT( observer.notify ).once().with( 1 ); - subject.increment(); - MOCK_EXPECT( observer.notify ).once().with( 2 ); - subject.increment(); - MOCK_EXPECT( observer.notify ).once().with( 3 ); - subject.increment(); - CHECK_CALLS( 4 ); -} - -namespace -{ - MOCK_CLASS( my_constructed_class ) - { - MOCK_CONSTRUCTOR( my_constructed_class, 2, ( int, const std::string& ), constructor ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mocking_a_constructor, mock_error_fixture ) -{ - MOCK_EXPECT( my_constructed_class::constructor ).with( 42, "some text" ).once(); - my_constructed_class( 42, "some text" ); - BOOST_CHECK( MOCK_VERIFY( my_constructed_class::constructor ) ); - CHECK_CALLS( 1 ); -} - -namespace -{ - template< typename T > - MOCK_CLASS( my_constructed_template_class ) - { - MOCK_CONSTRUCTOR_TPL( my_constructed_template_class, 2, ( T, const std::string& ), constructor ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mocking_a_template_class_constructor, mock_error_fixture ) -{ - MOCK_EXPECT( my_constructed_template_class< int >::constructor ).with( 42, "some text" ).once(); - my_constructed_template_class< int >( 42, "some text" ); - BOOST_CHECK( MOCK_VERIFY( my_constructed_template_class< int >::constructor ) ); - CHECK_CALLS( 1 ); -} - -namespace -{ - MOCK_CLASS( my_destroyed_class ) - { - MOCK_DESTRUCTOR( ~my_destroyed_class, destructor ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mocking_a_destructor, mock_error_fixture ) -{ - { - my_destroyed_class c; - MOCK_EXPECT( c.destructor ).once(); - } - CHECK_CALLS( 1 ); -} - -BOOST_FIXTURE_TEST_CASE( failed_expectation_in_mocked_destructor_does_not_throw, mock_error_fixture ) -{ - CHECK_ERROR( - try - { - my_destroyed_class c; - throw std::runtime_error( "should not crash" ); - } - catch( std::runtime_error& ) - { - }, - "unexpected call", 0, "?.my_destroyed_class::destructor()" ); -} - -BOOST_FIXTURE_TEST_CASE( failed_sequence_in_mocked_destructor_does_not_throw, mock_error_fixture ) -{ - mock::sequence s; - my_custom_mock m; - CHECK_ERROR( - { - my_destroyed_class c; - MOCK_EXPECT( c.destructor ).once().in( s ); - MOCK_EXPECT( m.my_tag ).once().in( s ); - m.my_method(); - }, - "sequence failed", 1, "c.my_destroyed_class::destructor()\n. once()" ); -} - -namespace -{ - MOCK_CLASS( boost_optional ) - { - MOCK_METHOD_EXT( method, 0, boost::optional< my_observer& >(), tag ) - }; -} - -BOOST_FIXTURE_TEST_CASE( boost_optional_on_base_class_reference_as_return_type_is_supported, mock_error_fixture ) -{ - boost_optional b; - my_mock_observer o; - MOCK_EXPECT( b.tag ).once().returns( boost::ref( o ) ); - b.method(); - CHECK_CALLS( 1 ); -} - -namespace -{ - bool serialized = false; - - struct custom_argument - { - friend std::ostream& operator<<( std::ostream& s, custom_argument ) - { - serialized = true; - return s; - } - }; - struct custom_constraint - { - template< typename Actual > - friend bool operator==( Actual, custom_constraint ) - { - return true; - } - friend std::ostream& operator<<( std::ostream& s, custom_constraint ) - { - serialized = true; - return s; - } - }; -} - -BOOST_FIXTURE_TEST_CASE( constraints_and_arguments_are_serialized_lazily, mock_error_fixture ) -{ - MOCK_FUNCTOR( f, void( const custom_argument& ) ); - MOCK_EXPECT( f ).with( custom_constraint() ); - f( custom_argument() ); - BOOST_CHECK( ! serialized ); - CHECK_CALLS( 1 ); -} - -namespace -{ - struct custom_constraint_with_non_const_operator - { - template< typename Actual > - bool operator()( Actual actual ) - { - return actual == 42; - } - }; -} - -BOOST_FIXTURE_TEST_CASE( custom_constraint_function_operator_does_not_need_to_be_const, mock_error_fixture ) -{ - MOCK_FUNCTOR( f, void( float ) ); - MOCK_EXPECT( f ).with( mock::constraint< custom_constraint_with_non_const_operator >( custom_constraint_with_non_const_operator() ) ); - f( 42 ); - CHECK_CALLS( 1 ); -} - -BOOST_FIXTURE_TEST_CASE( boost_reference_wrapper_is_supported_in_value_constraint, mock_error_fixture ) -{ - MOCK_FUNCTOR( f, void( const std::string& ) ); - std::string s; - MOCK_EXPECT( f ).once().with( boost::cref( s ) ); - s = "string"; - f( "string" ); - CHECK_CALLS( 1 ); -} - -namespace -{ - template< typename T > - void nothing( T ) - {} - - struct member_pointer_mock_class - { - MOCK_CONST_METHOD_EXT( my_method, 0, void(), my_method ) - }; -} - -BOOST_FIXTURE_TEST_CASE( member_pointer_on_mock_method_is_valid, mock_error_fixture ) -{ - nothing( &member_pointer_mock_class::my_method ); -} - -namespace -{ - MOCK_FUNCTION( free_function, 1, void( int ), free_function ) -} - -BOOST_FIXTURE_TEST_CASE( a_free_function_can_be_mocked, mock_error_fixture ) -{ - MOCK_EXPECT( free_function ).once(); - CHECK_ERROR( - BOOST_CHECK( ! MOCK_VERIFY( free_function ) ), - "verification failed", 0, "free_function\n. once().with( any )" ); - free_function( 42 ); - CHECK_CALLS( 1 ); - BOOST_CHECK( MOCK_VERIFY( free_function ) ); - MOCK_RESET( free_function ); -} - -namespace -{ - struct some_class : mock::object - { - MOCK_STATIC_METHOD( some_static_method, 1, void( int ), some_static_method ) - }; -} - -BOOST_FIXTURE_TEST_CASE( a_static_method_can_be_mocked, mock_error_fixture ) -{ - MOCK_EXPECT( some_class::some_static_method ).once(); - CHECK_ERROR( - BOOST_CHECK( ! MOCK_VERIFY( some_class::some_static_method ) ), - "verification failed", 0, "some_class::some_static_method\n. once().with( any )" ); - some_class::some_static_method( 42 ); - CHECK_CALLS( 1 ); - BOOST_CHECK( MOCK_VERIFY( some_class::some_static_method ) ); - MOCK_RESET( some_class::some_static_method ); -} - -BOOST_FIXTURE_TEST_CASE( a_static_method_is_not_reset_when_resetting_an_instance_of_the_class, mock_error_fixture ) -{ - MOCK_EXPECT( some_class::some_static_method ).once(); - some_class c; - mock::reset( c ); - CHECK_ERROR( - BOOST_CHECK( ! MOCK_VERIFY( some_class::some_static_method ) ), - "verification failed", 0, "some_class::some_static_method\n. once().with( any )" ); - MOCK_RESET( some_class::some_static_method ); -} - -namespace -{ - template< typename T > - struct some_template_class - { - MOCK_STATIC_METHOD_TPL( some_static_method, 1, void( T ), some_static_method ) - }; -} - -BOOST_FIXTURE_TEST_CASE( a_static_method_in_a_template_class_can_be_mocked, mock_error_fixture ) -{ - MOCK_EXPECT( some_template_class< int >::some_static_method ).once(); - CHECK_ERROR( - BOOST_CHECK( ! MOCK_VERIFY( some_template_class< int >::some_static_method ) ), - "verification failed", 0, "some_template_class< int >::some_static_method\n. once().with( any )" ); - some_template_class< int >::some_static_method( 42 ); - BOOST_CHECK( mock::verify() ); - BOOST_CHECK( MOCK_VERIFY( some_template_class< int >::some_static_method ) ); - MOCK_RESET( some_template_class< int >::some_static_method ); - CHECK_CALLS( 1 ); -} - -namespace -{ - MOCK_CLASS( mock_class ) - { - MOCK_METHOD_EXT( m, 0, void(), t ); - }; -} - -BOOST_FIXTURE_TEST_CASE( resetting_referenced_mock_class_does_not_crash, mock_error_fixture ) -{ - MOCK_FUNCTOR( f, mock_class() ); - { - mock_class c; - MOCK_EXPECT( f ).returns( c ); - MOCK_EXPECT( c.t ); - } - mock::reset(); -} - -namespace -{ - MOCK_CLASS( mock_class2 ) - { - MOCK_METHOD_EXT( m, 0, mock_class2(), t ); - }; -} - -BOOST_FIXTURE_TEST_CASE( resetting_self_referenced_mock_class_does_not_crash, mock_error_fixture ) -{ - { - mock_class2 c; - MOCK_EXPECT( c.t ).returns( c ); - } - mock::reset(); -} - -namespace -{ - template< typename T1, typename T2 > - struct my_base - {}; - MOCK_BASE_CLASS( my_comma_mock, my_base< int BOOST_PP_COMMA() int > ) - {}; -} - -#ifdef MOCK_THREAD_SAFE - -#include - -namespace -{ - void create_class() - { - my_mock m; - MOCK_EXPECT( m.my_tag ).once().with( 3 ).returns( 42 ); - try - { - m.my_method( 3 ); - } - catch( ... ) - {} - } -} - -BOOST_FIXTURE_TEST_CASE( mock_class_creation_is_thread_safe, mock_error_fixture ) -{ - boost::thread_group group; - for( int i = 0; i < 100; ++i ) - group.create_thread( &create_class ); - group.join_all(); - CHECK_CALLS( 100 ); -} - -namespace -{ - void create_functor( int i ) - { - mock::detail::functor< void( int ) > f; - boost::this_thread::sleep( boost::posix_time::milliseconds( 100 ) ); - mock::detail::functor< void( int ) > f_mock; - MOCK_EXPECT( f ).once().with( i ); - try - { - f( i ); - } - catch( ... ) - {} - } -} - -BOOST_FIXTURE_TEST_CASE( mock_functor_creation_is_thread_safe, mock_error_fixture ) -{ - boost::thread_group group; - for( int i = 0; i < 100; ++i ) - group.create_thread( boost::bind( &create_functor, i ) ); - group.join_all(); - CHECK_CALLS( 100 ); -} - -namespace -{ - void iterate( my_mock& m ) - { - MOCK_EXPECT( m.my_tag ).once().with( 3 ).returns( 42 ); - BOOST_CHECK_EQUAL( 42, m.my_method( 3 ) ); - } -} - -BOOST_FIXTURE_TEST_CASE( mock_class_is_thread_safe, mock_error_fixture ) -{ - my_mock m; - boost::thread_group group; - for( int i = 0; i < 100; ++i ) - group.create_thread( boost::bind( &iterate, boost::ref( m ) ) ); - group.join_all(); - CHECK_CALLS( 100 ); -} - -#endif // MOCK_THREAD_SAFE - -namespace -{ - MOCK_CLASS( my_multi_mock ) - { - MOCK_METHOD_EXT( m1, 1, void( int ), m1 ); - MOCK_METHOD_EXT( m2, 2, void( int, int ), m2 ); - }; -} - -BOOST_FIXTURE_TEST_CASE( mock_method_accepts_multi_constraint, mock_error_fixture ) -{ - my_multi_mock m; - MOCK_FUNCTOR( f, bool( int, int ) ); - MOCK_EXPECT( m.m2 ).once().with( f ); - MOCK_EXPECT( f ).once().with( 1, 2 ).returns( true ); - m.m2( 1, 2 ); - CHECK_CALLS( 2 ); -} - -namespace -{ - struct my_polymorphic_constraint - { - template< typename T1, typename T2 > - bool operator()( T1, T2 ) const - { - return true; - } - }; -} - -BOOST_FIXTURE_TEST_CASE( mock_method_accepts_polymorphic_multi_constraint, mock_error_fixture ) -{ - my_multi_mock m; - MOCK_EXPECT( m.m2 ).once().with( my_polymorphic_constraint() ); - m.m2( 1, 2 ); - CHECK_CALLS( 1 ); -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include "mock_error.hpp" +#include "undefined.hpp" +#include +#include +#include +#include +#include +#include + +namespace +{ + struct my_custom_mock + { + MOCK_METHOD_EXT( my_method, 0, void(), my_tag ) + }; +} + +BOOST_FIXTURE_TEST_CASE( custom_mock_object_without_macros_and_without_inheriting_from_object, mock_error_fixture ) +{ + my_custom_mock m; + MOCK_EXPECT( m.my_tag ).once(); + m.my_method(); + CHECK_CALLS( 1 ); +} + +namespace +{ + struct my_custom_mock_object + { + MOCK_METHOD_EXT( my_method, 0, void(), my_tag ) + }; +} + +BOOST_FIXTURE_TEST_CASE( custom_mock_object_without_macros, mock_error_fixture ) +{ + my_custom_mock_object m; + MOCK_EXPECT( m.my_tag ).once(); + m.my_method(); + CHECK_CALLS( 1 ); +} + +namespace +{ + MOCK_CLASS( my_mock ) + { + MOCK_METHOD_EXT( my_method, 1, int( int ), my_tag ) + }; +} + +BOOST_FIXTURE_TEST_CASE( basic_mock_object_usage, mock_error_fixture ) +{ + my_mock m; + { + MOCK_EXPECT( m.my_tag ).once().returns( 0 ); + BOOST_CHECK_EQUAL( 0, m.my_method( 13 ) ); + CHECK_CALLS( 1 ); + } + mock::verify(); + mock::reset(); + { + MOCK_EXPECT( m.my_tag ).once().with( 42 ).returns( 7 ); + BOOST_CHECK_EQUAL( 7, m.my_method( 42 ) ); + CHECK_CALLS( 1 ); + } + mock::verify(); + mock::reset(); + { + MOCK_EXPECT( m.my_tag ).once().returns( 51 ); + BOOST_CHECK_EQUAL( 51, m.my_method( 27 ) ); + CHECK_CALLS( 1 ); + } +} + +namespace +{ + class my_ambiguited_interface : boost::noncopyable + { + public: + virtual ~my_ambiguited_interface() {} + + virtual void my_method() = 0; + virtual void my_method( int ) = 0; + }; + + MOCK_BASE_CLASS( my_ambiguited_mock, my_ambiguited_interface ) + { + MOCK_METHOD_EXT( my_method, 0, void(), my_tag1 ) + MOCK_METHOD_EXT( my_method, 1, void( int ), my_tag_2 ) + }; +} + +BOOST_FIXTURE_TEST_CASE( mock_object_method_disambiguation, mock_error_fixture ) +{ + my_ambiguited_mock m; + MOCK_EXPECT( m.my_tag1 ); + m.my_method(); + CHECK_ERROR( m.my_method( 12 ), "unexpected call", 1, "?.my_ambiguited_mock::my_tag_2( 12 )" ); +} + +namespace +{ + class my_const_ambiguited_interface : boost::noncopyable + { + public: + virtual ~my_const_ambiguited_interface() {} + + virtual void my_method() = 0; + virtual void my_method() const = 0; + }; + + MOCK_BASE_CLASS( my_const_ambiguited_mock, my_const_ambiguited_interface ) + { + MOCK_NON_CONST_METHOD_EXT( my_method, 0, void(), tag1 ) + MOCK_CONST_METHOD_EXT( my_method, 0, void(), tag_2 ) + }; +} + +BOOST_FIXTURE_TEST_CASE( mock_object_method_const_disambiguation, mock_error_fixture ) +{ + my_const_ambiguited_mock mock; + MOCK_EXPECT( mock.tag1 ); + BOOST_CHECK_NO_THROW( mock.my_method() ); + const my_const_ambiguited_mock const_mock; + CHECK_ERROR( const_mock.my_method(), "unexpected call", 1, "?.my_const_ambiguited_mock::tag_2()" ); +} + +namespace +{ + MOCK_CLASS( my_undefined_mock ) + { + MOCK_METHOD_EXT( m, 1, void( undefined& ), t ) + }; +} + +BOOST_FIXTURE_TEST_CASE( mock_object_method_with_declared_but_not_defined_parameter_is_valid, mock_error_fixture ) +{ + my_undefined_mock mock; + MOCK_EXPECT( mock.t ); +} + +BOOST_FIXTURE_TEST_CASE( mock_functor_in_function_is_supported, mock_error_fixture ) +{ + boost::function< int( float, const std::string& ) > func; + { + MOCK_FUNCTOR( f, int( float, const std::string& ) ); + MOCK_EXPECT( f ).once().with( 3, "op" ).returns( 42 ); + func = f; + } + BOOST_CHECK_EQUAL( 42, func( 3, "op" ) ); + CHECK_CALLS( 1 ); +} + +namespace +{ + struct functor_fixture : mock_error_fixture + { + MOCK_FUNCTOR( f, int( float, const std::string& ) ); + }; +} + +BOOST_FIXTURE_TEST_CASE( mock_functor_in_fixture_is_supported, functor_fixture ) +{ + MOCK_EXPECT( f ).once().with( 3, "op" ).returns( 42 ); + BOOST_CHECK_EQUAL( 42, f( 3.f, "op" ) ); + CHECK_CALLS( 1 ); +} + +namespace +{ + template< typename T > + struct my_template_mock + { + MOCK_METHOD_EXT( my_method, 0, void(), my_tag ) + MOCK_METHOD_EXT_TPL( my_method, 2, void( T, std::string ), my_tpl_tag ) + MOCK_METHOD_EXT_TPL( my_other_method, 0, void(), my_other_tag ) + }; +} + +BOOST_FIXTURE_TEST_CASE( mocking_a_template_class_method_is_supported, mock_error_fixture ) +{ + my_template_mock< int > m; + MOCK_EXPECT( m.my_tpl_tag ).with( 3, "" ); + m.my_method( 3, "" ); + BOOST_CHECK( MOCK_VERIFY( m.my_tpl_tag ) ); + CHECK_CALLS( 1 ); +} + +namespace +{ + template< typename T > + struct my_template_base_class + { + virtual ~my_template_base_class() + {} + virtual void my_method( T ) = 0; + virtual void my_other_method() = 0; + }; + template< typename T > + MOCK_BASE_CLASS( my_template_base_class_mock, my_template_base_class< T > ) + { + MOCK_METHOD_EXT_TPL( my_method, 1, void( T ), my_method ) + MOCK_METHOD_EXT_TPL( my_other_method, 0, void(), my_other_method ) + }; +} + +BOOST_FIXTURE_TEST_CASE( mocking_a_template_base_class_method_is_supported, mock_error_fixture ) +{ + my_template_base_class_mock< int > m; + MOCK_EXPECT( m.my_method ).once().with( 3 ); + m.my_method( 3 ); + BOOST_CHECK( MOCK_VERIFY( m.my_method ) ); + CHECK_CALLS( 1 ); +} + +namespace +{ + class my_observer : boost::noncopyable + { + public: + virtual ~my_observer() + {} + virtual void notify( int value ) = 0; + }; + + class my_manager : boost::noncopyable + { + public: + virtual ~my_manager() + {} + virtual my_observer& get_observer() const = 0; + }; + + class my_subject : boost::noncopyable + { + public: + explicit my_subject( my_manager& f ) + : o_( f.get_observer() ) + , value_( 0 ) + {} + void increment() + { + o_.notify( ++value_ ); + } + private: + my_observer& o_; + int value_; + }; + + MOCK_BASE_CLASS( my_mock_observer, my_observer ) + { + MOCK_METHOD( notify, 1 ) + }; + + MOCK_BASE_CLASS( my_mock_manager, my_manager ) + { + MOCK_METHOD( get_observer, 0 ) + }; + + struct fixture : mock_error_fixture + { + my_mock_manager manager; + my_mock_observer observer; + }; +} + +BOOST_FIXTURE_TEST_CASE( basic_mock_object_collaboration_usage, fixture ) +{ + MOCK_EXPECT( manager.get_observer ).returns( boost::ref( observer ) ); + my_subject subject( manager ); + MOCK_EXPECT( observer.notify ).once().with( 1 ); + subject.increment(); + MOCK_EXPECT( observer.notify ).once().with( 2 ); + subject.increment(); + MOCK_EXPECT( observer.notify ).once().with( 3 ); + subject.increment(); + CHECK_CALLS( 4 ); +} + +namespace +{ + MOCK_CLASS( my_constructed_class ) + { + MOCK_CONSTRUCTOR( my_constructed_class, 2, ( int, const std::string& ), constructor ) + }; +} + +BOOST_FIXTURE_TEST_CASE( mocking_a_constructor, mock_error_fixture ) +{ + MOCK_EXPECT( my_constructed_class::constructor ).with( 42, "some text" ).once(); + my_constructed_class( 42, "some text" ); + BOOST_CHECK( MOCK_VERIFY( my_constructed_class::constructor ) ); + CHECK_CALLS( 1 ); +} + +namespace +{ + template< typename T > + MOCK_CLASS( my_constructed_template_class ) + { + MOCK_CONSTRUCTOR_TPL( my_constructed_template_class, 2, ( T, const std::string& ), constructor ) + }; +} + +BOOST_FIXTURE_TEST_CASE( mocking_a_template_class_constructor, mock_error_fixture ) +{ + MOCK_EXPECT( my_constructed_template_class< int >::constructor ).with( 42, "some text" ).once(); + my_constructed_template_class< int >( 42, "some text" ); + BOOST_CHECK( MOCK_VERIFY( my_constructed_template_class< int >::constructor ) ); + CHECK_CALLS( 1 ); +} + +namespace +{ + MOCK_CLASS( my_destroyed_class ) + { + MOCK_DESTRUCTOR( ~my_destroyed_class, destructor ) + }; +} + +BOOST_FIXTURE_TEST_CASE( mocking_a_destructor, mock_error_fixture ) +{ + { + my_destroyed_class c; + MOCK_EXPECT( c.destructor ).once(); + } + CHECK_CALLS( 1 ); +} + +BOOST_FIXTURE_TEST_CASE( failed_expectation_in_mocked_destructor_does_not_throw, mock_error_fixture ) +{ + CHECK_ERROR( + try + { + my_destroyed_class c; + throw std::runtime_error( "should not crash" ); + } + catch( std::runtime_error& ) + { + }, + "unexpected call", 0, "?.my_destroyed_class::destructor()" ); +} + +BOOST_FIXTURE_TEST_CASE( failed_sequence_in_mocked_destructor_does_not_throw, mock_error_fixture ) +{ + mock::sequence s; + my_custom_mock m; + CHECK_ERROR( + { + my_destroyed_class c; + MOCK_EXPECT( c.destructor ).once().in( s ); + MOCK_EXPECT( m.my_tag ).once().in( s ); + m.my_method(); + }, + "sequence failed", 1, "c.my_destroyed_class::destructor()\n. once()" ); +} + +namespace +{ + MOCK_CLASS( boost_optional ) + { + MOCK_METHOD_EXT( method, 0, boost::optional< my_observer& >(), tag ) + }; +} + +BOOST_FIXTURE_TEST_CASE( boost_optional_on_base_class_reference_as_return_type_is_supported, mock_error_fixture ) +{ + boost_optional b; + my_mock_observer o; + MOCK_EXPECT( b.tag ).once().returns( boost::ref( o ) ); + b.method(); + CHECK_CALLS( 1 ); +} + +namespace +{ + bool serialized = false; + + struct custom_argument + { + friend std::ostream& operator<<( std::ostream& s, custom_argument ) + { + serialized = true; + return s; + } + }; + struct custom_constraint + { + template< typename Actual > + friend bool operator==( Actual, custom_constraint ) + { + return true; + } + friend std::ostream& operator<<( std::ostream& s, custom_constraint ) + { + serialized = true; + return s; + } + }; +} + +BOOST_FIXTURE_TEST_CASE( constraints_and_arguments_are_serialized_lazily, mock_error_fixture ) +{ + MOCK_FUNCTOR( f, void( const custom_argument& ) ); + MOCK_EXPECT( f ).with( custom_constraint() ); + f( custom_argument() ); + BOOST_CHECK( ! serialized ); + CHECK_CALLS( 1 ); +} + +namespace +{ + struct custom_constraint_with_non_const_operator + { + template< typename Actual > + bool operator()( Actual actual ) + { + return actual == 42; + } + }; +} + +BOOST_FIXTURE_TEST_CASE( custom_constraint_function_operator_does_not_need_to_be_const, mock_error_fixture ) +{ + MOCK_FUNCTOR( f, void( float ) ); + MOCK_EXPECT( f ).with( mock::constraint< custom_constraint_with_non_const_operator >( custom_constraint_with_non_const_operator() ) ); + f( 42 ); + CHECK_CALLS( 1 ); +} + +BOOST_FIXTURE_TEST_CASE( boost_reference_wrapper_is_supported_in_value_constraint, mock_error_fixture ) +{ + MOCK_FUNCTOR( f, void( const std::string& ) ); + std::string s; + MOCK_EXPECT( f ).once().with( boost::cref( s ) ); + s = "string"; + f( "string" ); + CHECK_CALLS( 1 ); +} + +namespace +{ + template< typename T > + void nothing( T ) + {} + + struct member_pointer_mock_class + { + MOCK_CONST_METHOD_EXT( my_method, 0, void(), my_method ) + }; +} + +BOOST_FIXTURE_TEST_CASE( member_pointer_on_mock_method_is_valid, mock_error_fixture ) +{ + nothing( &member_pointer_mock_class::my_method ); +} + +namespace +{ + MOCK_FUNCTION( free_function, 1, void( int ), free_function ) +} + +BOOST_FIXTURE_TEST_CASE( a_free_function_can_be_mocked, mock_error_fixture ) +{ + MOCK_EXPECT( free_function ).once(); + CHECK_ERROR( + BOOST_CHECK( ! MOCK_VERIFY( free_function ) ), + "verification failed", 0, "free_function\n. once().with( any )" ); + free_function( 42 ); + CHECK_CALLS( 1 ); + BOOST_CHECK( MOCK_VERIFY( free_function ) ); + MOCK_RESET( free_function ); +} + +namespace +{ + struct some_class : mock::object + { + MOCK_STATIC_METHOD( some_static_method, 1, void( int ), some_static_method ) + }; +} + +BOOST_FIXTURE_TEST_CASE( a_static_method_can_be_mocked, mock_error_fixture ) +{ + MOCK_EXPECT( some_class::some_static_method ).once(); + CHECK_ERROR( + BOOST_CHECK( ! MOCK_VERIFY( some_class::some_static_method ) ), + "verification failed", 0, "some_class::some_static_method\n. once().with( any )" ); + some_class::some_static_method( 42 ); + CHECK_CALLS( 1 ); + BOOST_CHECK( MOCK_VERIFY( some_class::some_static_method ) ); + MOCK_RESET( some_class::some_static_method ); +} + +BOOST_FIXTURE_TEST_CASE( a_static_method_is_not_reset_when_resetting_an_instance_of_the_class, mock_error_fixture ) +{ + MOCK_EXPECT( some_class::some_static_method ).once(); + some_class c; + mock::reset( c ); + CHECK_ERROR( + BOOST_CHECK( ! MOCK_VERIFY( some_class::some_static_method ) ), + "verification failed", 0, "some_class::some_static_method\n. once().with( any )" ); + MOCK_RESET( some_class::some_static_method ); +} + +namespace +{ + template< typename T > + struct some_template_class + { + MOCK_STATIC_METHOD_TPL( some_static_method, 1, void( T ), some_static_method ) + }; +} + +BOOST_FIXTURE_TEST_CASE( a_static_method_in_a_template_class_can_be_mocked, mock_error_fixture ) +{ + MOCK_EXPECT( some_template_class< int >::some_static_method ).once(); + CHECK_ERROR( + BOOST_CHECK( ! MOCK_VERIFY( some_template_class< int >::some_static_method ) ), + "verification failed", 0, "some_template_class< int >::some_static_method\n. once().with( any )" ); + some_template_class< int >::some_static_method( 42 ); + BOOST_CHECK( mock::verify() ); + BOOST_CHECK( MOCK_VERIFY( some_template_class< int >::some_static_method ) ); + MOCK_RESET( some_template_class< int >::some_static_method ); + CHECK_CALLS( 1 ); +} + +namespace +{ + MOCK_CLASS( mock_class ) + { + MOCK_METHOD_EXT( m, 0, void(), t ); + }; +} + +BOOST_FIXTURE_TEST_CASE( resetting_referenced_mock_class_does_not_crash, mock_error_fixture ) +{ + MOCK_FUNCTOR( f, mock_class() ); + { + mock_class c; + MOCK_EXPECT( f ).returns( c ); + MOCK_EXPECT( c.t ); + } + mock::reset(); +} + +namespace +{ + MOCK_CLASS( mock_class2 ) + { + MOCK_METHOD_EXT( m, 0, mock_class2(), t ); + }; +} + +BOOST_FIXTURE_TEST_CASE( resetting_self_referenced_mock_class_does_not_crash, mock_error_fixture ) +{ + { + mock_class2 c; + MOCK_EXPECT( c.t ).returns( c ); + } + mock::reset(); +} + +namespace +{ + template< typename T1, typename T2 > + struct my_base + {}; + MOCK_BASE_CLASS( my_comma_mock, my_base< int BOOST_PP_COMMA() int > ) + {}; +} + +#ifdef MOCK_THREAD_SAFE + +#include + +namespace +{ + void create_class() + { + my_mock m; + MOCK_EXPECT( m.my_tag ).once().with( 3 ).returns( 42 ); + try + { + m.my_method( 3 ); + } + catch( ... ) + {} + } +} + +BOOST_FIXTURE_TEST_CASE( mock_class_creation_is_thread_safe, mock_error_fixture ) +{ + boost::thread_group group; + for( int i = 0; i < 100; ++i ) + group.create_thread( &create_class ); + group.join_all(); + CHECK_CALLS( 100 ); +} + +namespace +{ + void create_functor( int i ) + { + mock::detail::functor< void( int ) > f; + boost::this_thread::sleep( boost::posix_time::milliseconds( 100 ) ); + mock::detail::functor< void( int ) > f_mock; + MOCK_EXPECT( f ).once().with( i ); + try + { + f( i ); + } + catch( ... ) + {} + } +} + +BOOST_FIXTURE_TEST_CASE( mock_functor_creation_is_thread_safe, mock_error_fixture ) +{ + boost::thread_group group; + for( int i = 0; i < 100; ++i ) + group.create_thread( boost::bind( &create_functor, i ) ); + group.join_all(); + CHECK_CALLS( 100 ); +} + +namespace +{ + void iterate( my_mock& m ) + { + MOCK_EXPECT( m.my_tag ).once().with( 3 ).returns( 42 ); + BOOST_CHECK_EQUAL( 42, m.my_method( 3 ) ); + } +} + +BOOST_FIXTURE_TEST_CASE( mock_class_is_thread_safe, mock_error_fixture ) +{ + my_mock m; + boost::thread_group group; + for( int i = 0; i < 100; ++i ) + group.create_thread( boost::bind( &iterate, boost::ref( m ) ) ); + group.join_all(); + CHECK_CALLS( 100 ); +} + +#endif // MOCK_THREAD_SAFE + +namespace +{ + MOCK_CLASS( my_multi_mock ) + { + MOCK_METHOD_EXT( m1, 1, void( int ), m1 ); + MOCK_METHOD_EXT( m2, 2, void( int, int ), m2 ); + }; +} + +BOOST_FIXTURE_TEST_CASE( mock_method_accepts_multi_constraint, mock_error_fixture ) +{ + my_multi_mock m; + MOCK_FUNCTOR( f, bool( int, int ) ); + MOCK_EXPECT( m.m2 ).once().with( f ); + MOCK_EXPECT( f ).once().with( 1, 2 ).returns( true ); + m.m2( 1, 2 ); + CHECK_CALLS( 2 ); +} + +namespace +{ + struct my_polymorphic_constraint + { + template< typename T1, typename T2 > + bool operator()( T1, T2 ) const + { + return true; + } + }; +} + +BOOST_FIXTURE_TEST_CASE( mock_method_accepts_polymorphic_multi_constraint, mock_error_fixture ) +{ + my_multi_mock m; + MOCK_EXPECT( m.m2 ).once().with( my_polymorphic_constraint() ); + m.m2( 1, 2 ); + CHECK_CALLS( 1 ); +} diff --git a/test/test_log.cpp b/test/test_log.cpp index 436a62d..cee6ca8 100644 --- a/test/test_log.cpp +++ b/test/test_log.cpp @@ -1,670 +1,670 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include -#include -#include -#include -#include -#ifdef BOOST_MSVC -#pragma warning( push, 0 ) -#endif -#include -#include -#ifdef BOOST_MSVC -#pragma warning( pop ) -#endif -#ifndef BOOST_MSVC // this produces an ICE with all versions of MSVC -#include -#include -#endif -#include -#include -#include -#include -#include -#include - -namespace -{ - template< typename T > - std::string to_string( const T& t ) - { - std::stringstream s; - s << mock::format( t ); - return s.str(); - } - template< typename T > - std::string to_string( T* t ) - { - std::stringstream s; - s << mock::format( t ); - return s.str(); - } -} - -BOOST_AUTO_TEST_CASE( pointer_yields_its_value_when_serialized ) -{ - { - int i = 0; - BOOST_CHECK_NE( "?", to_string( &i ) ); - BOOST_CHECK_EQUAL( boost::lexical_cast< std::string >( &i ), to_string( &i ) ); - } - { - const int i = 0; - BOOST_CHECK_NE( "?", to_string( &i ) ); - BOOST_CHECK_EQUAL( boost::lexical_cast< std::string >( &i ), to_string( &i ) ); - } -} - -BOOST_AUTO_TEST_CASE( base_type_yields_its_value_when_serialized ) -{ - BOOST_CHECK_EQUAL( "42", to_string( 42 ) ); -} - -BOOST_AUTO_TEST_CASE( booleans_are_serialized_as_bool_alpha ) -{ - BOOST_CHECK_EQUAL( "true", to_string( true ) ); - BOOST_CHECK_EQUAL( "false", to_string( false ) ); -} - -BOOST_AUTO_TEST_CASE( strings_are_serialized_with_double_quotes ) -{ - BOOST_CHECK_EQUAL( "\"string\"", to_string( "string" ) ); - BOOST_CHECK_EQUAL( "\"string\"", to_string( std::string( "string" ) ) ); -} - -namespace -{ - struct non_serializable - {}; -} - -BOOST_AUTO_TEST_CASE( non_serializable_type_yields_an_question_mark_when_serialized ) -{ - BOOST_CHECK_EQUAL( "?", to_string( non_serializable() ) ); -} - -namespace -{ - struct serializable - {}; - std::ostream& operator<<( std::ostream& s, const serializable& ) - { - return s << "serializable"; - } -} - -BOOST_AUTO_TEST_CASE( serializable_type_yields_its_value_when_serialized ) -{ - BOOST_CHECK_EQUAL( "serializable", to_string( serializable() ) ); -} - -namespace -{ - struct streamable - {}; - std::ostream& operator<<( std::ostream& s, const streamable& ) - { - BOOST_FAIL( "should not have been called" ); - return s; - } - mock::stream& operator<<( mock::stream& s, const streamable& ) - { - return s << "streamable"; - } -} - -BOOST_AUTO_TEST_CASE( streamable_type_yields_its_value_when_serialized ) -{ - BOOST_CHECK_EQUAL( "streamable", to_string( streamable() ) ); -} - -namespace -{ - struct mock_streamable - {}; - std::ostream& operator<<( std::ostream& s, const mock_streamable& ) - { - BOOST_FAIL( "should not have been called" ); - return s; - } -} -namespace mock -{ - stream& operator<<( stream& s, const mock_streamable& ) - { - return s << "mock_streamable"; - } -} // mock - -BOOST_AUTO_TEST_CASE( mock_streamable_type_yields_its_value_when_serialized ) -{ - BOOST_CHECK_EQUAL( "mock_streamable", to_string( mock_streamable() ) ); -} - -namespace -{ - struct derived_from_serializable : serializable - {}; -} - -BOOST_AUTO_TEST_CASE( type_derived_from_serializable_yields_an_question_mark_when_serialized ) -{ -#ifdef MOCK_USE_CONVERSIONS - BOOST_CHECK_EQUAL( "serializable", to_string( derived_from_serializable() ) ); -#else - BOOST_CHECK_EQUAL( "?", to_string( derived_from_serializable() ) ); -#endif -} - -namespace -{ - struct derived_from_streamable : streamable - {}; -} - -BOOST_AUTO_TEST_CASE( type_derived_from_streamable_yields_an_question_mark_when_serialized ) -{ -#ifdef MOCK_USE_CONVERSIONS - BOOST_CHECK_EQUAL( "streamable", to_string( derived_from_streamable() ) ); -#else - BOOST_CHECK_EQUAL( "?", to_string( derived_from_streamable() ) ); -#endif -} - -#ifndef MOCK_USE_CONVERSIONS // all this does not compile with conversions activated, which is precisely the purpose of having this compilation flag - -namespace -{ - struct convertible_to_base - { - operator int() const; - }; -} - -BOOST_AUTO_TEST_CASE( type_convertible_to_base_yields_an_question_mark_when_serialized ) -{ - BOOST_CHECK_EQUAL( "?", to_string( convertible_to_base() ) ); -} - -namespace -{ - struct convertible_to_serializable - { - operator serializable() const; - }; -} - -BOOST_AUTO_TEST_CASE( type_convertible_to_serializable_yields_an_question_mark_when_serialized ) -{ - BOOST_CHECK_EQUAL( "?", to_string( convertible_to_serializable() ) ); -} - -namespace -{ - struct convertible_to_streamable - { - operator streamable() const; - }; -} - -BOOST_AUTO_TEST_CASE( type_convertible_to_streamable_yields_an_question_mark_when_serialized ) -{ - BOOST_CHECK_EQUAL( "?", to_string( convertible_to_streamable() ) ); -} - -namespace -{ - struct ambiguous_convertible - { - operator float() const; - operator int() const; - operator serializable() const; - operator streamable() const; - template< typename T > operator T() const; - }; -} - -BOOST_AUTO_TEST_CASE( type_ambiguous_convertible_yields_an_question_mark_when_serialized ) -{ - BOOST_CHECK_EQUAL( "?", to_string( ambiguous_convertible() ) ); -} - -namespace -{ - struct ambiguous_convertible_serializable - { - operator float() const; - operator int() const; - operator serializable() const; - operator streamable() const; - template< typename T > operator T() const; - }; - std::ostream& operator<<( std::ostream& s, const ambiguous_convertible_serializable& ) - { - return s << "ambiguous_convertible_serializable"; - } -} - -BOOST_AUTO_TEST_CASE( type_convertible_serializable_yields_its_value_when_serialized ) -{ - BOOST_CHECK_EQUAL( "ambiguous_convertible_serializable", to_string( ambiguous_convertible_serializable() ) ); -} - -#endif // MOCK_USE_CONVERSIONS - -namespace -{ - struct ambiguous_convertible_streamable - { - operator float() const; - operator int() const; - operator serializable() const; - operator streamable() const; - template< typename T > operator T() const; - }; - std::ostream& operator<<( std::ostream& s, const ambiguous_convertible_streamable& ) - { - BOOST_FAIL( "should not have been called" ); - return s; - } - mock::stream& operator<<( mock::stream& s, const ambiguous_convertible_streamable& ) - { - return s << "ambiguous_convertible_streamable"; - } -} - -BOOST_AUTO_TEST_CASE( type_ambiguous_convertible_streamable_yields_its_value_when_serialized ) -{ - BOOST_CHECK_EQUAL( "ambiguous_convertible_streamable", to_string( ambiguous_convertible_streamable() ) ); -} - -namespace -{ - struct ambiguous_convertible_mock_streamable - { - operator float() const; - operator int() const; - operator serializable() const; - operator streamable() const; - template< typename T > operator T() const; - }; - std::ostream& operator<<( std::ostream& s, const ambiguous_convertible_mock_streamable& ) - { - BOOST_FAIL( "should not have been called" ); - return s; - } -} -namespace mock -{ - stream& operator<<( stream& s, const ambiguous_convertible_mock_streamable& ) - { - return s << "ambiguous_convertible_mock_streamable"; - } -} // mock - -BOOST_AUTO_TEST_CASE( type_ambiguous_convertible_mock_streamable_yields_its_value_when_serialized ) -{ - BOOST_CHECK_EQUAL( "ambiguous_convertible_mock_streamable", to_string( ambiguous_convertible_mock_streamable() ) ); -} - -namespace -{ - template< typename T > - struct template_serializable - {}; - template< typename T > - std::ostream& operator<<( std::ostream& s, const template_serializable< T >& ) - { - return s << "template_serializable"; - } -} - -BOOST_AUTO_TEST_CASE( template_type_serializable_yields_its_value_when_serialized ) -{ - BOOST_CHECK_EQUAL( "template_serializable", to_string( template_serializable< int >() ) ); -} - -namespace -{ - template< typename T > - struct template_streamable - {}; - template< typename T > - std::ostream& operator<<( std::ostream& s, const template_streamable< T >& ) - { - BOOST_FAIL( "should not have been called" ); - return s; - } - template< typename T > - mock::stream& operator<<( mock::stream& s, const template_streamable< T >& ) - { - return s << "template_streamable"; - } -} - -BOOST_AUTO_TEST_CASE( template_template_streamable_yields_its_value_when_serialized ) -{ - BOOST_CHECK_EQUAL( "template_streamable", to_string( template_streamable< int >() ) ); -} - -namespace -{ - template< typename T > - struct template_mock_streamable - {}; - template< typename T > - std::ostream& operator<<( std::ostream& s, const template_mock_streamable< T >& ) - { - BOOST_FAIL( "should not have been called" ); - return s; - } -} -namespace mock -{ - template< typename T > - stream& operator<<( stream& s, const template_mock_streamable< T >& ) - { - return s << "template_mock_streamable"; - } -} // mock - -BOOST_AUTO_TEST_CASE( template_mock_streamable_yields_its_value_when_serialized ) -{ - BOOST_CHECK_EQUAL( "template_mock_streamable", to_string( template_mock_streamable< int >() ) ); -} - -BOOST_AUTO_TEST_CASE( std_pairs_are_serialized ) -{ - BOOST_CHECK_EQUAL( "(3,42)", to_string( std::make_pair( 3, 42.f ) ) ); -} - -BOOST_AUTO_TEST_CASE( std_auto_ptr_are_serialized ) -{ - BOOST_CHECK_NE( "?", to_string( std::auto_ptr< int >() ) ); - BOOST_CHECK_NE( "?", to_string( std::auto_ptr< int >( new int( 42 ) ) ) ); -} - -BOOST_AUTO_TEST_CASE( boost_shared_ptr_are_serialized ) -{ - BOOST_CHECK_NE( "?", to_string( boost::shared_ptr< int >() ) ); - BOOST_CHECK_NE( "?", to_string( boost::shared_ptr< int >( new int( 42 ) ) ) ); -} - -BOOST_AUTO_TEST_CASE( boost_weak_ptr_are_serialized ) -{ - BOOST_CHECK_NE( "?", to_string( boost::weak_ptr< int >( boost::shared_ptr< int >() ) ) ); - BOOST_CHECK_NE( "?", to_string( boost::weak_ptr< int >( boost::shared_ptr< int >( new int( 42 ) ) ) ) ); -} - -#ifdef MOCK_SMART_PTR - -BOOST_AUTO_TEST_CASE( std_shared_ptr_are_serialized ) -{ - BOOST_CHECK_NE( "?", to_string( std::shared_ptr< int >() ) ); - BOOST_CHECK_NE( "?", to_string( std::shared_ptr< int >( new int( 42 ) ) ) ); -} - -BOOST_AUTO_TEST_CASE( std_weak_ptr_are_serialized ) -{ - BOOST_CHECK_NE( "?", to_string( std::weak_ptr< int >( std::shared_ptr< int >() ) ) ); - BOOST_CHECK_NE( "?", to_string( std::weak_ptr< int >( std::shared_ptr< int >( new int( 42 ) ) ) ) ); -} - -BOOST_AUTO_TEST_CASE( std_unique_ptr_are_serialized ) -{ - BOOST_CHECK_NE( "?", to_string( std::unique_ptr< int >() ) ); - BOOST_CHECK_NE( "?", to_string( std::unique_ptr< int >( new int( 42 ) ) ) ); -} - -#endif - -BOOST_AUTO_TEST_CASE( std_deques_are_serialized ) -{ - std::deque< int > d; - d.push_back( 12 ); - d.push_back( 42 ); - BOOST_CHECK_EQUAL( "(12,42)", to_string( d ) ); -} - -BOOST_AUTO_TEST_CASE( std_lists_are_serialized ) -{ - std::list< int > l; - l.push_back( 12 ); - l.push_back( 42 ); - BOOST_CHECK_EQUAL( "(12,42)", to_string( l ) ); -} - -BOOST_AUTO_TEST_CASE( std_vectors_are_serialized ) -{ - std::vector< int > v; - v.push_back( 12 ); - v.push_back( 42 ); - BOOST_CHECK_EQUAL( "(12,42)", to_string( v ) ); -} - -BOOST_AUTO_TEST_CASE( std_maps_are_serialized ) -{ - std::map< int, std::string > m; - m[ 12 ] = "12"; - m[ 42 ] = "42"; - BOOST_CHECK_EQUAL( "((12,\"12\"),(42,\"42\"))", to_string( m ) ); -} - -BOOST_AUTO_TEST_CASE( std_multimaps_are_serialized ) -{ - std::multimap< int, std::string > m; - m.insert( std::make_pair( 12, "12" )); - m.insert( std::make_pair( 42, "42" )); - BOOST_CHECK_EQUAL( "((12,\"12\"),(42,\"42\"))", to_string( m ) ); -} - -BOOST_AUTO_TEST_CASE( std_sets_are_serialized ) -{ - std::set< int > s; - s.insert( 12 ); - s.insert( 42 ); - BOOST_CHECK_EQUAL( "(12,42)", to_string( s ) ); -} - -BOOST_AUTO_TEST_CASE( std_multisets_are_serialized ) -{ - std::multiset< int > s; - s.insert( 12 ); - s.insert( 42 ); - BOOST_CHECK_EQUAL( "(12,42)", to_string( s ) ); -} - -BOOST_AUTO_TEST_CASE( std_deques_of_vectors_are_serialized ) -{ - std::deque< std::vector< int > > v; - std::vector< int > v1, v2; - v1.push_back( 12 ); - v2.push_back( 42 ); - v2.push_back( 77 ); - v.push_back( v1 ); - v.push_back( v2 ); - BOOST_CHECK_EQUAL( "((12),(42,77))", to_string( v ) ); -} - -BOOST_AUTO_TEST_CASE( std_vectors_of_deques_are_serialized ) -{ - std::vector< std::deque< int > > v; - std::deque< int > v1, v2; - v1.push_back( 12 ); - v2.push_back( 42 ); - v2.push_back( 77 ); - v.push_back( v1 ); - v.push_back( v2 ); - BOOST_CHECK_EQUAL( "((12),(42,77))", to_string( v ) ); -} - -BOOST_AUTO_TEST_CASE( boost_assign_list_of_are_serialized ) -{ - BOOST_CHECK_EQUAL( "(12,42)", to_string( boost::assign::list_of( 12 )( 42 ) ) ); -} - -BOOST_AUTO_TEST_CASE( boost_assign_map_list_of_are_serialized ) -{ - BOOST_CHECK_EQUAL( "((12,\"12\"),(42,\"42\"))", to_string( boost::assign::map_list_of( 12, "12" )( 42, "42" ) ) ); -} - -BOOST_AUTO_TEST_CASE( boost_reference_wrappers_are_serialized ) -{ - const int i = 3; - BOOST_CHECK_EQUAL( "3", to_string( boost::cref( i ) ) ); - BOOST_CHECK_EQUAL( "\"string\"", to_string( boost::cref( "string" ) ) ); -} - -namespace -{ - void callable_builtin() - {} -} - -BOOST_AUTO_TEST_CASE( callable_builtin_yields_an_question_mark_when_serialized ) -{ - BOOST_CHECK_EQUAL( "?", to_string( callable_builtin ) ); - BOOST_CHECK_EQUAL( "?", to_string( &callable_builtin ) ); -} - -namespace -{ - struct serialized_using_format - {}; - std::ostream& operator<<( std::ostream& s, const serialized_using_format& ) - { - return s << mock::format( "string" ); - } -} - -BOOST_AUTO_TEST_CASE( type_can_use_format_when_serialized ) -{ - BOOST_CHECK_EQUAL( "\"string\"", to_string( serialized_using_format() ) ); -} - -namespace -{ - struct streamed_using_format - {}; - mock::stream& operator<<( mock::stream& s, const streamed_using_format& ) - { - return s << mock::format( "string" ); - } -} - -BOOST_AUTO_TEST_CASE( type_can_use_format_when_streamed ) -{ - BOOST_CHECK_EQUAL( "\"string\"", to_string( streamed_using_format() ) ); -} - -namespace -{ - struct std_string_streamed - {}; - mock::stream& operator<<( mock::stream& s, const std_string_streamed& ) - { - return s << std::string( "string" ); - } -} - -BOOST_AUTO_TEST_CASE( std_string_streamed_is_not_a_container ) -{ - BOOST_CHECK_EQUAL( "string", to_string( std_string_streamed() ) ); -} - -namespace mock -{ -namespace detail -{ - template< typename T > - struct template_serializable - {}; - template< typename T > - std::ostream& operator<<( std::ostream& s, const template_serializable< T >& ) - { - return s << "mock::detail::template_serializable"; - } -} -} // mock - -BOOST_AUTO_TEST_CASE( mock_detail_template_type_serializable_yields_its_value_when_serialized ) -{ - BOOST_CHECK_EQUAL( "mock::detail::template_serializable", to_string( mock::detail::template_serializable< int >() ) ); -} - -namespace mock -{ -namespace detail -{ - template< typename T > - struct template_streamable - {}; - template< typename T > - std::ostream& operator<<( std::ostream& s, const template_streamable< T >& ) - { - BOOST_FAIL( "should not have been called" ); - return s; - } - template< typename T > - mock::stream& operator<<( mock::stream& s, const template_streamable< T >& ) - { - return s << "mock::detail::template_streamable"; - } -} -} // mock - -BOOST_AUTO_TEST_CASE( mock_detail_template_template_streamable_yields_its_value_when_serialized ) -{ - BOOST_CHECK_EQUAL( "mock::detail::template_streamable", to_string( mock::detail::template_streamable< int >() ) ); -} - -BOOST_AUTO_TEST_CASE( unsigned_char_is_serialized_as_int ) -{ - BOOST_CHECK_EQUAL( boost::lexical_cast< std::string >( static_cast< int >( 'a' ) ), to_string< unsigned char >( 'a' ) ); -} - -namespace -{ - bool some_function() - { - return false; - } -} - -BOOST_AUTO_TEST_CASE( boost_phoenix_functor_yields_question_mark_when_serialized ) -{ - BOOST_CHECK_EQUAL( "?", to_string( boost::phoenix::bind( &some_function ) ) ); - BOOST_CHECK_EQUAL( "?", to_string( boost::phoenix::arg_names::_1 < 42 ) ); -} - -BOOST_AUTO_TEST_CASE( boost_bind_functor_yields_question_mark_when_serialized ) -{ - BOOST_CHECK_EQUAL( "?", to_string( boost::bind( &some_function ) ) ); -} - -#ifndef BOOST_MSVC // this produces an ICE with all versions of MSVC - -BOOST_AUTO_TEST_CASE( boost_lambda_functor_yields_question_mark_when_serialized ) -{ - BOOST_CHECK_EQUAL( "?", to_string( boost::lambda::bind( &some_function ) ) ); - BOOST_CHECK_EQUAL( "?", to_string( boost::lambda::_1 < 42 ) ); -} - -#endif - -#ifdef MOCK_NULLPTR - -BOOST_AUTO_TEST_CASE( nullptr_is_serialized ) -{ - BOOST_CHECK_EQUAL( "nullptr", to_string( nullptr ) ); -} - -#endif +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include +#include +#ifdef BOOST_MSVC +#pragma warning( push, 0 ) +#endif +#include +#include +#ifdef BOOST_MSVC +#pragma warning( pop ) +#endif +#ifndef BOOST_MSVC // this produces an ICE with all versions of MSVC +#include +#include +#endif +#include +#include +#include +#include +#include +#include + +namespace +{ + template< typename T > + std::string to_string( const T& t ) + { + std::stringstream s; + s << mock::format( t ); + return s.str(); + } + template< typename T > + std::string to_string( T* t ) + { + std::stringstream s; + s << mock::format( t ); + return s.str(); + } +} + +BOOST_AUTO_TEST_CASE( pointer_yields_its_value_when_serialized ) +{ + { + int i = 0; + BOOST_CHECK_NE( "?", to_string( &i ) ); + BOOST_CHECK_EQUAL( boost::lexical_cast< std::string >( &i ), to_string( &i ) ); + } + { + const int i = 0; + BOOST_CHECK_NE( "?", to_string( &i ) ); + BOOST_CHECK_EQUAL( boost::lexical_cast< std::string >( &i ), to_string( &i ) ); + } +} + +BOOST_AUTO_TEST_CASE( base_type_yields_its_value_when_serialized ) +{ + BOOST_CHECK_EQUAL( "42", to_string( 42 ) ); +} + +BOOST_AUTO_TEST_CASE( booleans_are_serialized_as_bool_alpha ) +{ + BOOST_CHECK_EQUAL( "true", to_string( true ) ); + BOOST_CHECK_EQUAL( "false", to_string( false ) ); +} + +BOOST_AUTO_TEST_CASE( strings_are_serialized_with_double_quotes ) +{ + BOOST_CHECK_EQUAL( "\"string\"", to_string( "string" ) ); + BOOST_CHECK_EQUAL( "\"string\"", to_string( std::string( "string" ) ) ); +} + +namespace +{ + struct non_serializable + {}; +} + +BOOST_AUTO_TEST_CASE( non_serializable_type_yields_an_question_mark_when_serialized ) +{ + BOOST_CHECK_EQUAL( "?", to_string( non_serializable() ) ); +} + +namespace +{ + struct serializable + {}; + std::ostream& operator<<( std::ostream& s, const serializable& ) + { + return s << "serializable"; + } +} + +BOOST_AUTO_TEST_CASE( serializable_type_yields_its_value_when_serialized ) +{ + BOOST_CHECK_EQUAL( "serializable", to_string( serializable() ) ); +} + +namespace +{ + struct streamable + {}; + std::ostream& operator<<( std::ostream& s, const streamable& ) + { + BOOST_FAIL( "should not have been called" ); + return s; + } + mock::stream& operator<<( mock::stream& s, const streamable& ) + { + return s << "streamable"; + } +} + +BOOST_AUTO_TEST_CASE( streamable_type_yields_its_value_when_serialized ) +{ + BOOST_CHECK_EQUAL( "streamable", to_string( streamable() ) ); +} + +namespace +{ + struct mock_streamable + {}; + std::ostream& operator<<( std::ostream& s, const mock_streamable& ) + { + BOOST_FAIL( "should not have been called" ); + return s; + } +} +namespace mock +{ + stream& operator<<( stream& s, const mock_streamable& ) + { + return s << "mock_streamable"; + } +} // mock + +BOOST_AUTO_TEST_CASE( mock_streamable_type_yields_its_value_when_serialized ) +{ + BOOST_CHECK_EQUAL( "mock_streamable", to_string( mock_streamable() ) ); +} + +namespace +{ + struct derived_from_serializable : serializable + {}; +} + +BOOST_AUTO_TEST_CASE( type_derived_from_serializable_yields_an_question_mark_when_serialized ) +{ +#ifdef MOCK_USE_CONVERSIONS + BOOST_CHECK_EQUAL( "serializable", to_string( derived_from_serializable() ) ); +#else + BOOST_CHECK_EQUAL( "?", to_string( derived_from_serializable() ) ); +#endif +} + +namespace +{ + struct derived_from_streamable : streamable + {}; +} + +BOOST_AUTO_TEST_CASE( type_derived_from_streamable_yields_an_question_mark_when_serialized ) +{ +#ifdef MOCK_USE_CONVERSIONS + BOOST_CHECK_EQUAL( "streamable", to_string( derived_from_streamable() ) ); +#else + BOOST_CHECK_EQUAL( "?", to_string( derived_from_streamable() ) ); +#endif +} + +#ifndef MOCK_USE_CONVERSIONS // all this does not compile with conversions activated, which is precisely the purpose of having this compilation flag + +namespace +{ + struct convertible_to_base + { + operator int() const; + }; +} + +BOOST_AUTO_TEST_CASE( type_convertible_to_base_yields_an_question_mark_when_serialized ) +{ + BOOST_CHECK_EQUAL( "?", to_string( convertible_to_base() ) ); +} + +namespace +{ + struct convertible_to_serializable + { + operator serializable() const; + }; +} + +BOOST_AUTO_TEST_CASE( type_convertible_to_serializable_yields_an_question_mark_when_serialized ) +{ + BOOST_CHECK_EQUAL( "?", to_string( convertible_to_serializable() ) ); +} + +namespace +{ + struct convertible_to_streamable + { + operator streamable() const; + }; +} + +BOOST_AUTO_TEST_CASE( type_convertible_to_streamable_yields_an_question_mark_when_serialized ) +{ + BOOST_CHECK_EQUAL( "?", to_string( convertible_to_streamable() ) ); +} + +namespace +{ + struct ambiguous_convertible + { + operator float() const; + operator int() const; + operator serializable() const; + operator streamable() const; + template< typename T > operator T() const; + }; +} + +BOOST_AUTO_TEST_CASE( type_ambiguous_convertible_yields_an_question_mark_when_serialized ) +{ + BOOST_CHECK_EQUAL( "?", to_string( ambiguous_convertible() ) ); +} + +namespace +{ + struct ambiguous_convertible_serializable + { + operator float() const; + operator int() const; + operator serializable() const; + operator streamable() const; + template< typename T > operator T() const; + }; + std::ostream& operator<<( std::ostream& s, const ambiguous_convertible_serializable& ) + { + return s << "ambiguous_convertible_serializable"; + } +} + +BOOST_AUTO_TEST_CASE( type_convertible_serializable_yields_its_value_when_serialized ) +{ + BOOST_CHECK_EQUAL( "ambiguous_convertible_serializable", to_string( ambiguous_convertible_serializable() ) ); +} + +#endif // MOCK_USE_CONVERSIONS + +namespace +{ + struct ambiguous_convertible_streamable + { + operator float() const; + operator int() const; + operator serializable() const; + operator streamable() const; + template< typename T > operator T() const; + }; + std::ostream& operator<<( std::ostream& s, const ambiguous_convertible_streamable& ) + { + BOOST_FAIL( "should not have been called" ); + return s; + } + mock::stream& operator<<( mock::stream& s, const ambiguous_convertible_streamable& ) + { + return s << "ambiguous_convertible_streamable"; + } +} + +BOOST_AUTO_TEST_CASE( type_ambiguous_convertible_streamable_yields_its_value_when_serialized ) +{ + BOOST_CHECK_EQUAL( "ambiguous_convertible_streamable", to_string( ambiguous_convertible_streamable() ) ); +} + +namespace +{ + struct ambiguous_convertible_mock_streamable + { + operator float() const; + operator int() const; + operator serializable() const; + operator streamable() const; + template< typename T > operator T() const; + }; + std::ostream& operator<<( std::ostream& s, const ambiguous_convertible_mock_streamable& ) + { + BOOST_FAIL( "should not have been called" ); + return s; + } +} +namespace mock +{ + stream& operator<<( stream& s, const ambiguous_convertible_mock_streamable& ) + { + return s << "ambiguous_convertible_mock_streamable"; + } +} // mock + +BOOST_AUTO_TEST_CASE( type_ambiguous_convertible_mock_streamable_yields_its_value_when_serialized ) +{ + BOOST_CHECK_EQUAL( "ambiguous_convertible_mock_streamable", to_string( ambiguous_convertible_mock_streamable() ) ); +} + +namespace +{ + template< typename T > + struct template_serializable + {}; + template< typename T > + std::ostream& operator<<( std::ostream& s, const template_serializable< T >& ) + { + return s << "template_serializable"; + } +} + +BOOST_AUTO_TEST_CASE( template_type_serializable_yields_its_value_when_serialized ) +{ + BOOST_CHECK_EQUAL( "template_serializable", to_string( template_serializable< int >() ) ); +} + +namespace +{ + template< typename T > + struct template_streamable + {}; + template< typename T > + std::ostream& operator<<( std::ostream& s, const template_streamable< T >& ) + { + BOOST_FAIL( "should not have been called" ); + return s; + } + template< typename T > + mock::stream& operator<<( mock::stream& s, const template_streamable< T >& ) + { + return s << "template_streamable"; + } +} + +BOOST_AUTO_TEST_CASE( template_template_streamable_yields_its_value_when_serialized ) +{ + BOOST_CHECK_EQUAL( "template_streamable", to_string( template_streamable< int >() ) ); +} + +namespace +{ + template< typename T > + struct template_mock_streamable + {}; + template< typename T > + std::ostream& operator<<( std::ostream& s, const template_mock_streamable< T >& ) + { + BOOST_FAIL( "should not have been called" ); + return s; + } +} +namespace mock +{ + template< typename T > + stream& operator<<( stream& s, const template_mock_streamable< T >& ) + { + return s << "template_mock_streamable"; + } +} // mock + +BOOST_AUTO_TEST_CASE( template_mock_streamable_yields_its_value_when_serialized ) +{ + BOOST_CHECK_EQUAL( "template_mock_streamable", to_string( template_mock_streamable< int >() ) ); +} + +BOOST_AUTO_TEST_CASE( std_pairs_are_serialized ) +{ + BOOST_CHECK_EQUAL( "(3,42)", to_string( std::make_pair( 3, 42.f ) ) ); +} + +BOOST_AUTO_TEST_CASE( std_auto_ptr_are_serialized ) +{ + BOOST_CHECK_NE( "?", to_string( std::auto_ptr< int >() ) ); + BOOST_CHECK_NE( "?", to_string( std::auto_ptr< int >( new int( 42 ) ) ) ); +} + +BOOST_AUTO_TEST_CASE( boost_shared_ptr_are_serialized ) +{ + BOOST_CHECK_NE( "?", to_string( boost::shared_ptr< int >() ) ); + BOOST_CHECK_NE( "?", to_string( boost::shared_ptr< int >( new int( 42 ) ) ) ); +} + +BOOST_AUTO_TEST_CASE( boost_weak_ptr_are_serialized ) +{ + BOOST_CHECK_NE( "?", to_string( boost::weak_ptr< int >( boost::shared_ptr< int >() ) ) ); + BOOST_CHECK_NE( "?", to_string( boost::weak_ptr< int >( boost::shared_ptr< int >( new int( 42 ) ) ) ) ); +} + +#ifdef MOCK_SMART_PTR + +BOOST_AUTO_TEST_CASE( std_shared_ptr_are_serialized ) +{ + BOOST_CHECK_NE( "?", to_string( std::shared_ptr< int >() ) ); + BOOST_CHECK_NE( "?", to_string( std::shared_ptr< int >( new int( 42 ) ) ) ); +} + +BOOST_AUTO_TEST_CASE( std_weak_ptr_are_serialized ) +{ + BOOST_CHECK_NE( "?", to_string( std::weak_ptr< int >( std::shared_ptr< int >() ) ) ); + BOOST_CHECK_NE( "?", to_string( std::weak_ptr< int >( std::shared_ptr< int >( new int( 42 ) ) ) ) ); +} + +BOOST_AUTO_TEST_CASE( std_unique_ptr_are_serialized ) +{ + BOOST_CHECK_NE( "?", to_string( std::unique_ptr< int >() ) ); + BOOST_CHECK_NE( "?", to_string( std::unique_ptr< int >( new int( 42 ) ) ) ); +} + +#endif + +BOOST_AUTO_TEST_CASE( std_deques_are_serialized ) +{ + std::deque< int > d; + d.push_back( 12 ); + d.push_back( 42 ); + BOOST_CHECK_EQUAL( "(12,42)", to_string( d ) ); +} + +BOOST_AUTO_TEST_CASE( std_lists_are_serialized ) +{ + std::list< int > l; + l.push_back( 12 ); + l.push_back( 42 ); + BOOST_CHECK_EQUAL( "(12,42)", to_string( l ) ); +} + +BOOST_AUTO_TEST_CASE( std_vectors_are_serialized ) +{ + std::vector< int > v; + v.push_back( 12 ); + v.push_back( 42 ); + BOOST_CHECK_EQUAL( "(12,42)", to_string( v ) ); +} + +BOOST_AUTO_TEST_CASE( std_maps_are_serialized ) +{ + std::map< int, std::string > m; + m[ 12 ] = "12"; + m[ 42 ] = "42"; + BOOST_CHECK_EQUAL( "((12,\"12\"),(42,\"42\"))", to_string( m ) ); +} + +BOOST_AUTO_TEST_CASE( std_multimaps_are_serialized ) +{ + std::multimap< int, std::string > m; + m.insert( std::make_pair( 12, "12" )); + m.insert( std::make_pair( 42, "42" )); + BOOST_CHECK_EQUAL( "((12,\"12\"),(42,\"42\"))", to_string( m ) ); +} + +BOOST_AUTO_TEST_CASE( std_sets_are_serialized ) +{ + std::set< int > s; + s.insert( 12 ); + s.insert( 42 ); + BOOST_CHECK_EQUAL( "(12,42)", to_string( s ) ); +} + +BOOST_AUTO_TEST_CASE( std_multisets_are_serialized ) +{ + std::multiset< int > s; + s.insert( 12 ); + s.insert( 42 ); + BOOST_CHECK_EQUAL( "(12,42)", to_string( s ) ); +} + +BOOST_AUTO_TEST_CASE( std_deques_of_vectors_are_serialized ) +{ + std::deque< std::vector< int > > v; + std::vector< int > v1, v2; + v1.push_back( 12 ); + v2.push_back( 42 ); + v2.push_back( 77 ); + v.push_back( v1 ); + v.push_back( v2 ); + BOOST_CHECK_EQUAL( "((12),(42,77))", to_string( v ) ); +} + +BOOST_AUTO_TEST_CASE( std_vectors_of_deques_are_serialized ) +{ + std::vector< std::deque< int > > v; + std::deque< int > v1, v2; + v1.push_back( 12 ); + v2.push_back( 42 ); + v2.push_back( 77 ); + v.push_back( v1 ); + v.push_back( v2 ); + BOOST_CHECK_EQUAL( "((12),(42,77))", to_string( v ) ); +} + +BOOST_AUTO_TEST_CASE( boost_assign_list_of_are_serialized ) +{ + BOOST_CHECK_EQUAL( "(12,42)", to_string( boost::assign::list_of( 12 )( 42 ) ) ); +} + +BOOST_AUTO_TEST_CASE( boost_assign_map_list_of_are_serialized ) +{ + BOOST_CHECK_EQUAL( "((12,\"12\"),(42,\"42\"))", to_string( boost::assign::map_list_of( 12, "12" )( 42, "42" ) ) ); +} + +BOOST_AUTO_TEST_CASE( boost_reference_wrappers_are_serialized ) +{ + const int i = 3; + BOOST_CHECK_EQUAL( "3", to_string( boost::cref( i ) ) ); + BOOST_CHECK_EQUAL( "\"string\"", to_string( boost::cref( "string" ) ) ); +} + +namespace +{ + void callable_builtin() + {} +} + +BOOST_AUTO_TEST_CASE( callable_builtin_yields_an_question_mark_when_serialized ) +{ + BOOST_CHECK_EQUAL( "?", to_string( callable_builtin ) ); + BOOST_CHECK_EQUAL( "?", to_string( &callable_builtin ) ); +} + +namespace +{ + struct serialized_using_format + {}; + std::ostream& operator<<( std::ostream& s, const serialized_using_format& ) + { + return s << mock::format( "string" ); + } +} + +BOOST_AUTO_TEST_CASE( type_can_use_format_when_serialized ) +{ + BOOST_CHECK_EQUAL( "\"string\"", to_string( serialized_using_format() ) ); +} + +namespace +{ + struct streamed_using_format + {}; + mock::stream& operator<<( mock::stream& s, const streamed_using_format& ) + { + return s << mock::format( "string" ); + } +} + +BOOST_AUTO_TEST_CASE( type_can_use_format_when_streamed ) +{ + BOOST_CHECK_EQUAL( "\"string\"", to_string( streamed_using_format() ) ); +} + +namespace +{ + struct std_string_streamed + {}; + mock::stream& operator<<( mock::stream& s, const std_string_streamed& ) + { + return s << std::string( "string" ); + } +} + +BOOST_AUTO_TEST_CASE( std_string_streamed_is_not_a_container ) +{ + BOOST_CHECK_EQUAL( "string", to_string( std_string_streamed() ) ); +} + +namespace mock +{ +namespace detail +{ + template< typename T > + struct template_serializable + {}; + template< typename T > + std::ostream& operator<<( std::ostream& s, const template_serializable< T >& ) + { + return s << "mock::detail::template_serializable"; + } +} +} // mock + +BOOST_AUTO_TEST_CASE( mock_detail_template_type_serializable_yields_its_value_when_serialized ) +{ + BOOST_CHECK_EQUAL( "mock::detail::template_serializable", to_string( mock::detail::template_serializable< int >() ) ); +} + +namespace mock +{ +namespace detail +{ + template< typename T > + struct template_streamable + {}; + template< typename T > + std::ostream& operator<<( std::ostream& s, const template_streamable< T >& ) + { + BOOST_FAIL( "should not have been called" ); + return s; + } + template< typename T > + mock::stream& operator<<( mock::stream& s, const template_streamable< T >& ) + { + return s << "mock::detail::template_streamable"; + } +} +} // mock + +BOOST_AUTO_TEST_CASE( mock_detail_template_template_streamable_yields_its_value_when_serialized ) +{ + BOOST_CHECK_EQUAL( "mock::detail::template_streamable", to_string( mock::detail::template_streamable< int >() ) ); +} + +BOOST_AUTO_TEST_CASE( unsigned_char_is_serialized_as_int ) +{ + BOOST_CHECK_EQUAL( boost::lexical_cast< std::string >( static_cast< int >( 'a' ) ), to_string< unsigned char >( 'a' ) ); +} + +namespace +{ + bool some_function() + { + return false; + } +} + +BOOST_AUTO_TEST_CASE( boost_phoenix_functor_yields_question_mark_when_serialized ) +{ + BOOST_CHECK_EQUAL( "?", to_string( boost::phoenix::bind( &some_function ) ) ); + BOOST_CHECK_EQUAL( "?", to_string( boost::phoenix::arg_names::_1 < 42 ) ); +} + +BOOST_AUTO_TEST_CASE( boost_bind_functor_yields_question_mark_when_serialized ) +{ + BOOST_CHECK_EQUAL( "?", to_string( boost::bind( &some_function ) ) ); +} + +#ifndef BOOST_MSVC // this produces an ICE with all versions of MSVC + +BOOST_AUTO_TEST_CASE( boost_lambda_functor_yields_question_mark_when_serialized ) +{ + BOOST_CHECK_EQUAL( "?", to_string( boost::lambda::bind( &some_function ) ) ); + BOOST_CHECK_EQUAL( "?", to_string( boost::lambda::_1 < 42 ) ); +} + +#endif + +#ifdef MOCK_NULLPTR + +BOOST_AUTO_TEST_CASE( nullptr_is_serialized ) +{ + BOOST_CHECK_EQUAL( "nullptr", to_string( nullptr ) ); +} + +#endif diff --git a/test/test_matcher.cpp b/test/test_matcher.cpp index 69ea301..c28648e 100644 --- a/test/test_matcher.cpp +++ b/test/test_matcher.cpp @@ -1,78 +1,78 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include - -namespace -{ - template< typename Expected, typename Actual > - bool match( Expected expected, Actual actual ) - { - return mock::matcher< Actual, Expected >( expected )( actual ); - } -} - -BOOST_AUTO_TEST_CASE( int_and_int_can_be_compared ) -{ - BOOST_CHECK( match( 3, 3 ) ); - BOOST_CHECK( ! match( 3, 4 ) ); - BOOST_CHECK( ! match( 4, 3 ) ); -} - -BOOST_AUTO_TEST_CASE( ref_to_int_and_int_can_be_compared ) -{ - const int i = 3; - BOOST_CHECK( match( 3, boost::cref( i ) ) ); - BOOST_CHECK( ! match( 4, boost::cref( i ) ) ); -} - -namespace -{ - struct fixture - { - fixture() - : text( "same text" ) - , actual( text.c_str() ) - { - const char* static_string = "same text"; - BOOST_REQUIRE( actual != static_string ); - BOOST_REQUIRE( actual == std::string( static_string ) ); - } - std::string text; - const char* actual; - }; -} - -BOOST_FIXTURE_TEST_CASE( const_char_pointer_and_const_char_pointer_can_be_compared, fixture ) -{ - const char* expected = "same text"; - BOOST_CHECK( match( expected, actual ) ); - const char* unexpected = "different text"; - BOOST_CHECK( ! match( actual, unexpected ) ); -} - -BOOST_FIXTURE_TEST_CASE( const_char_pointer_and_string_literal_can_be_compared, fixture ) -{ - BOOST_CHECK( match( "same text", actual ) ); - BOOST_CHECK( ! match( "different text", actual ) ); -} - -BOOST_FIXTURE_TEST_CASE( const_char_pointer_and_const_char_array_can_be_compared, fixture ) -{ - const char expected[10] = "same text"; - BOOST_CHECK( match( expected, actual ) ); - const char unexpected[15] = "different text"; - BOOST_CHECK( ! match( unexpected, actual ) ); -} - -BOOST_FIXTURE_TEST_CASE( const_char_pointer_and_std_string_can_be_compared, fixture ) -{ - BOOST_CHECK( match( std::string( "same text" ), actual ) ); - BOOST_CHECK( ! match( std::string( "different text" ), actual ) ); -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2012 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include + +namespace +{ + template< typename Expected, typename Actual > + bool match( Expected expected, Actual actual ) + { + return mock::matcher< Actual, Expected >( expected )( actual ); + } +} + +BOOST_AUTO_TEST_CASE( int_and_int_can_be_compared ) +{ + BOOST_CHECK( match( 3, 3 ) ); + BOOST_CHECK( ! match( 3, 4 ) ); + BOOST_CHECK( ! match( 4, 3 ) ); +} + +BOOST_AUTO_TEST_CASE( ref_to_int_and_int_can_be_compared ) +{ + const int i = 3; + BOOST_CHECK( match( 3, boost::cref( i ) ) ); + BOOST_CHECK( ! match( 4, boost::cref( i ) ) ); +} + +namespace +{ + struct fixture + { + fixture() + : text( "same text" ) + , actual( text.c_str() ) + { + const char* static_string = "same text"; + BOOST_REQUIRE( actual != static_string ); + BOOST_REQUIRE( actual == std::string( static_string ) ); + } + std::string text; + const char* actual; + }; +} + +BOOST_FIXTURE_TEST_CASE( const_char_pointer_and_const_char_pointer_can_be_compared, fixture ) +{ + const char* expected = "same text"; + BOOST_CHECK( match( expected, actual ) ); + const char* unexpected = "different text"; + BOOST_CHECK( ! match( actual, unexpected ) ); +} + +BOOST_FIXTURE_TEST_CASE( const_char_pointer_and_string_literal_can_be_compared, fixture ) +{ + BOOST_CHECK( match( "same text", actual ) ); + BOOST_CHECK( ! match( "different text", actual ) ); +} + +BOOST_FIXTURE_TEST_CASE( const_char_pointer_and_const_char_array_can_be_compared, fixture ) +{ + const char expected[10] = "same text"; + BOOST_CHECK( match( expected, actual ) ); + const char unexpected[15] = "different text"; + BOOST_CHECK( ! match( unexpected, actual ) ); +} + +BOOST_FIXTURE_TEST_CASE( const_char_pointer_and_std_string_can_be_compared, fixture ) +{ + BOOST_CHECK( match( std::string( "same text" ), actual ) ); + BOOST_CHECK( ! match( std::string( "different text" ), actual ) ); +} diff --git a/test/test_max_args.cpp b/test/test_max_args.cpp index 89d5ce3..970a25f 100644 --- a/test/test_max_args.cpp +++ b/test/test_max_args.cpp @@ -1,39 +1,39 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include "mock_error.hpp" -#include -#include -#include - -#define IDENTITY(z, n, d) d - -namespace -{ - struct my_custom_mock - { - MOCK_METHOD_EXT( method, MOCK_MAX_ARGS, void( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, int) ), tag ) - MOCK_METHOD_EXT( method2, MOCK_MAX_ARGS, int( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, int) ), tag_2 ) - }; -} - -BOOST_FIXTURE_TEST_CASE( call_mock_method_with_max_number_of_args, mock_error_fixture ) -{ - my_custom_mock m; - MOCK_EXPECT( m.tag ).once().with( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0) ); - m.method( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0) ); - CHECK_CALLS( 1 ); -} - -BOOST_FIXTURE_TEST_CASE( call_mock_method_with_max_number_of_args_and_a_return_value, mock_error_fixture ) -{ - my_custom_mock m; - MOCK_EXPECT( m.tag_2 ).once().with( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0) ).returns( 42 ); - BOOST_CHECK_EQUAL( 42, m.method2( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0) ) ); - CHECK_CALLS( 1 ); -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include "mock_error.hpp" +#include +#include +#include + +#define IDENTITY(z, n, d) d + +namespace +{ + struct my_custom_mock + { + MOCK_METHOD_EXT( method, MOCK_MAX_ARGS, void( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, int) ), tag ) + MOCK_METHOD_EXT( method2, MOCK_MAX_ARGS, int( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, int) ), tag_2 ) + }; +} + +BOOST_FIXTURE_TEST_CASE( call_mock_method_with_max_number_of_args, mock_error_fixture ) +{ + my_custom_mock m; + MOCK_EXPECT( m.tag ).once().with( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0) ); + m.method( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0) ); + CHECK_CALLS( 1 ); +} + +BOOST_FIXTURE_TEST_CASE( call_mock_method_with_max_number_of_args_and_a_return_value, mock_error_fixture ) +{ + my_custom_mock m; + MOCK_EXPECT( m.tag_2 ).once().with( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0) ).returns( 42 ); + BOOST_CHECK_EQUAL( 42, m.method2( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0) ) ); + CHECK_CALLS( 1 ); +} diff --git a/test/test_mock.cpp b/test/test_mock.cpp index 549a13a..8a15879 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -1,434 +1,434 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2009 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include "mock_error.hpp" -#include -#include -#include -#include -#include - -namespace -{ - template< typename T > - void my_function( T& t ) - { - t.my_method( "some parameter" ); - } - MOCK_CLASS( mock_class ) - { - MOCK_METHOD_EXT( my_method, 1, void( const std::string& ), my_tag ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mock_object_for_static_polymorphism, mock_error_fixture ) -{ - const mock_class m; - MOCK_EXPECT( m.my_tag ).once().with( "some parameter" ); - my_function( m ); - CHECK_CALLS( 1 ); -} - -namespace -{ - MOCK_CLASS( mock_class_with_operator ) - { - MOCK_CONST_METHOD_EXT( operator+=, 1, mock_class_with_operator&( int ), addition ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mock_addition_operator, mock_error_fixture ) -{ - mock_class_with_operator m; - MOCK_EXPECT( m.addition ).once().returns( boost::ref( m ) ); - m += 1; - CHECK_CALLS( 1 ); -} - -namespace -{ - MOCK_CLASS( mock_class_with_conversion_operator ) - { - MOCK_CONVERSION_OPERATOR( operator, int, conversion ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mock_conversion_operator, mock_error_fixture ) -{ - mock_class_with_conversion_operator m; - MOCK_EXPECT( m.conversion ).once().returns( 42 ); - BOOST_CHECK_EQUAL( 42, static_cast< int >( m ) ); - CHECK_CALLS( 1 ); -} - -namespace -{ - template< typename T > - MOCK_CLASS( mock_template_class_with_conversion_operator ) - { - MOCK_CONVERSION_OPERATOR_TPL( operator, T, conversion ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mock_template_conversion_operator, mock_error_fixture ) -{ - mock_template_class_with_conversion_operator< int > m; - MOCK_EXPECT( m.conversion ).once().returns( 42 ); - BOOST_CHECK_EQUAL( 42, static_cast< int >( m ) ); - CHECK_CALLS( 1 ); -} - -namespace -{ - MOCK_CLASS( mock_class_with_const_conversion_operator ) - { - MOCK_CONST_CONVERSION_OPERATOR( operator, int, conversion ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mock_const_conversion_operator, mock_error_fixture ) -{ - mock_class_with_const_conversion_operator m; - MOCK_EXPECT( m.conversion ).once().returns( 42 ); - int i = m; - BOOST_CHECK_EQUAL( 42, i ); - CHECK_CALLS( 1 ); -} - -namespace -{ - MOCK_CLASS( mock_class_with_non_const_conversion_operator ) - { - MOCK_CONST_CONVERSION_OPERATOR( operator, int, conversion ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mock_non_const_conversion_operator, mock_error_fixture ) -{ - mock_class_with_non_const_conversion_operator m; - MOCK_EXPECT( m.conversion ).once().returns( 42 ); - int i = m; - BOOST_CHECK_EQUAL( 42, i ); - CHECK_CALLS( 1 ); -} - -namespace -{ - template< typename T > - MOCK_CLASS( mock_template_class_with_const_conversion_operator ) - { - MOCK_CONST_CONVERSION_OPERATOR_TPL( operator, T, conversion ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mock_template_const_conversion_operator, mock_error_fixture ) -{ - mock_template_class_with_const_conversion_operator< int > m; - MOCK_EXPECT( m.conversion ).once().returns( 42 ); - BOOST_CHECK_EQUAL( 42, static_cast< int >( m ) ); - CHECK_CALLS( 1 ); -} - -namespace -{ - template< typename T > - MOCK_CLASS( mock_template_class_with_non_const_conversion_operator ) - { - MOCK_NON_CONST_CONVERSION_OPERATOR_TPL( operator, T, conversion ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mock_template_non_const_conversion_operator, mock_error_fixture ) -{ - mock_template_class_with_non_const_conversion_operator< int > m; - MOCK_EXPECT( m.conversion ).once().returns( 42 ); - BOOST_CHECK_EQUAL( 42, static_cast< int >( m ) ); - CHECK_CALLS( 1 ); -} - -namespace -{ - MOCK_CLASS( my_mock ) - { - MOCK_CONST_METHOD_EXT( my_method, 1, void( int ), my_method ) - MOCK_CONST_METHOD_EXT( my_method_2, 1, void( int ), my_method_2 ) - }; -} - -BOOST_FIXTURE_TEST_CASE( MOCK_CONST_METHOD_EXT_macro_defines_a_bindable_method, mock_error_fixture ) -{ - my_mock m; - boost::bind( &my_mock::my_method, &m, 42 ); -} - -BOOST_FIXTURE_TEST_CASE( MOCK_VERIFY_macro, mock_error_fixture ) -{ - my_mock m; - MOCK_VERIFY( m.my_method ); -} - -BOOST_FIXTURE_TEST_CASE( MOCK_RESET_macro, mock_error_fixture ) -{ - my_mock m; - MOCK_RESET( m.my_method ); -} - -BOOST_FIXTURE_TEST_CASE( MOCK_EXPECT_macro, mock_error_fixture ) -{ - my_mock m; - MOCK_EXPECT( m.my_method ).once().with( 42 ); - m.my_method( 42 ); - CHECK_CALLS( 1 ); -} - -namespace -{ - template< typename T > - std::string to_string( const T& t ) - { - std::stringstream s; - s << t; - return s.str(); - } -} - -BOOST_FIXTURE_TEST_CASE( mock_object_is_named, mock_error_fixture ) -{ - my_mock m; - BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m.my_method ) ) ); - BOOST_CHECK_EQUAL( "?.my_mock::my_method_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_method_2 ) ) ); - BOOST_CHECK_EQUAL( "m.my_mock::my_method", to_string( MOCK_HELPER( m.my_method ) ) ); - BOOST_CHECK_EQUAL( "m.my_mock::my_method_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_method_2 ) ) ); - BOOST_CHECK_EQUAL( "m.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m.my_method ) ) ); - BOOST_CHECK_EQUAL( "m.my_mock::my_method", to_string( MOCK_HELPER( m.my_method ) ) ); -} - -BOOST_FIXTURE_TEST_CASE( mock_object_auto_pointer_is_named, mock_error_fixture ) -{ - std::auto_ptr< my_mock > m( new my_mock ); - BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); -} - -BOOST_FIXTURE_TEST_CASE( mock_object_const_auto_pointer_is_named, mock_error_fixture ) -{ - const std::auto_ptr< my_mock > m( new my_mock ); - BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); -} - -BOOST_FIXTURE_TEST_CASE( mock_object_shared_pointer_is_named, mock_error_fixture ) -{ - boost::shared_ptr< my_mock > m( new my_mock ); - BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); -} - -BOOST_FIXTURE_TEST_CASE( mock_object_const_shared_pointer_is_named, mock_error_fixture ) -{ - const boost::shared_ptr< my_mock > m( new my_mock ); - BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); -} - -namespace -{ - struct my_custom_mock - { - MOCK_METHOD_EXT( my_method, 0, void(), my_tag ) - MOCK_METHOD_EXT( my_method_2, 0, void(), my_tag_2 ) - }; -} - -BOOST_FIXTURE_TEST_CASE( custom_mock_object_without_macros_and_without_inheriting_from_object_is_named, mock_error_fixture ) -{ - my_custom_mock m; - BOOST_CHECK_EQUAL( "?.my_custom_mock::my_tag", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag ) ) ); - BOOST_CHECK_EQUAL( "?.my_custom_mock::my_tag_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag_2 ) ) ); - BOOST_CHECK_EQUAL( "m.my_custom_mock::my_tag", to_string( MOCK_HELPER( m.my_tag ) ) ); - BOOST_CHECK_EQUAL( "m.my_custom_mock::my_tag_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag_2 ) ) ); - BOOST_CHECK_EQUAL( "m.my_custom_mock::my_tag", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag ) ) ); - BOOST_CHECK_EQUAL( "m.my_custom_mock::my_tag", to_string( MOCK_HELPER( m.my_tag ) ) ); -} - -namespace -{ - struct my_custom_mock_object : mock::object - { - MOCK_METHOD_EXT( my_method, 0, void(), my_tag ) - MOCK_METHOD_EXT( my_method_2, 0, void(), my_tag_2 ) - }; -} - -BOOST_FIXTURE_TEST_CASE( custom_mock_object_without_macros_is_named, mock_error_fixture ) -{ - my_custom_mock_object m; - BOOST_CHECK_EQUAL( "?.my_custom_mock_object::my_tag", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag ) ) ); - BOOST_CHECK_EQUAL( "?.my_custom_mock_object::my_tag_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag_2 ) ) ); - BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_tag", to_string( MOCK_HELPER( m.my_tag ) ) ); - BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_tag_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag_2 ) ) ); - BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_tag", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag ) ) ); - BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_tag", to_string( MOCK_HELPER( m.my_tag ) ) ); -} - -BOOST_FIXTURE_TEST_CASE( mock_functor, mock_error_fixture ) -{ - MOCK_FUNCTOR( f1, void() ); - MOCK_FUNCTOR( f2, int( const std::string& ) ); -} - -namespace -{ - template< typename T > - struct tpl_functor_class - { - MOCK_FUNCTOR_TPL( f, void( T ) ); - }; -} - -BOOST_FIXTURE_TEST_CASE( mock_functor_reset, mock_error_fixture ) -{ - MOCK_FUNCTOR( f, void() ); - MOCK_RESET( f ); - mock::reset( f ); -} - -BOOST_FIXTURE_TEST_CASE( mock_functor_verify, mock_error_fixture ) -{ - MOCK_FUNCTOR( f, void() ); - MOCK_VERIFY( f ); - mock::verify( f ); -} - -BOOST_FIXTURE_TEST_CASE( mock_functor_is_named, mock_error_fixture ) -{ - MOCK_FUNCTOR( f, void() ); - BOOST_CHECK_EQUAL( "f", to_string( MOCK_HELPER( f ) ) ); -} - -namespace -{ - MOCK_FUNCTION( mock_function, 1, float( int ), mock_function ) -} - -BOOST_FIXTURE_TEST_CASE( mock_function_is_named, mock_error_fixture ) -{ - BOOST_CHECK_EQUAL( "mock_function", to_string( MOCK_HELPER( mock_function ) ) ); -} - -namespace -{ - MOCK_CLASS( static_function_class ) - { - MOCK_STATIC_METHOD( f, 1, float( int ), f ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mock_static_function_is_named, mock_error_fixture ) -{ - BOOST_CHECK_EQUAL( "static_function_class::f", to_string( MOCK_HELPER( static_function_class::f ) ) ); -} - -namespace -{ - MOCK_CLASS( round_parenthesized_signature ) - { - MOCK_METHOD_EXT( m0, 0, (std::map< int, int >()), m0 ) - MOCK_STATIC_METHOD( m1, 0, (std::map< int, int >()), m1 ) - MOCK_FUNCTOR( f0, (std::map< int, int >()) ); - }; - MOCK_FUNCTION( fun0, 0, (std::map< int, int >()), fun0 ) -} - -#ifdef MOCK_VARIADIC_MACROS - -namespace -{ - struct base - { - virtual ~base() - {} - virtual void m1() = 0; - }; - - MOCK_BASE_CLASS( variadic, base ) - { - MOCK_METHOD( m1, 0 ) - MOCK_METHOD( m2, 0, void() ) - MOCK_METHOD( m3, 0, void(), m3 ) - MOCK_CONST_METHOD( m4, 0, void() ) - MOCK_CONST_METHOD( m5, 0, void(), m5 ) - MOCK_NON_CONST_METHOD( m6, 0, void() ) - MOCK_NON_CONST_METHOD( m7, 0, void(), m7 ) - MOCK_STATIC_METHOD( m8, 0, void() ) - MOCK_STATIC_METHOD( m9, 0, void(), m9 ) - }; - - template< typename T > - MOCK_CLASS( variadic_tpl ) - { - MOCK_METHOD_TPL( m2, 0, T() ) - MOCK_METHOD_TPL( m3, 0, T(), m3 ) - MOCK_CONST_METHOD_TPL( m4, 0, T() ) - MOCK_CONST_METHOD_TPL( m5, 0, T(), m5 ) - MOCK_NON_CONST_METHOD_TPL( m6, 0, T() ) - MOCK_NON_CONST_METHOD_TPL( m7, 0, T(), m7 ) - MOCK_STATIC_METHOD_TPL( m8, 0, T() ) - MOCK_STATIC_METHOD_TPL( m9, 0, T(), m9 ) - }; - - MOCK_BASE_CLASS( comma_base, std::map< int, int > ) - {}; - - MOCK_FUNCTION( fun1, 0, void() ) - MOCK_FUNCTION( fun2, 0, void(), fun2 ) - MOCK_FUNCTION( fun3, 0, (std::map< int, int >()) ) - - MOCK_FUNCTOR( f_variadic, std::map< int, int >() ); -} - -#endif // MOCK_VARIADIC_MACROS - -#ifdef BOOST_MSVC -# define MOCK_STDCALL __stdcall -#elif defined( BOOST_GCC ) -# define MOCK_STDCALL __attribute((stdcall)) -#else -# define MOCK_STDCALL -#endif // BOOST_GCC - -namespace stdcall -{ - struct base - { - virtual void MOCK_STDCALL m1() = 0; - }; - - MOCK_BASE_CLASS( derived, base ) - { - MOCK_CONSTRUCTOR( MOCK_STDCALL derived, 0, (), derived ) - MOCK_DESTRUCTOR( MOCK_STDCALL ~derived, derived ) - MOCK_CONVERSION_OPERATOR( MOCK_STDCALL operator, int, to_int ) - MOCK_METHOD_EXT( MOCK_STDCALL m1, 0, void(), m1 ) - MOCK_METHOD_EXT( MOCK_STDCALL m2, 0, void(), m2 ) -#ifdef MOCK_VARIADIC_MACROS - MOCK_METHOD( MOCK_STDCALL m3, 0, void(), m3 ) -#endif - MOCK_STATIC_METHOD( MOCK_STDCALL m4, 0, void(), m4 ) - }; - - MOCK_FUNCTION( MOCK_STDCALL f, 0, void(), f ) -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2009 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include "mock_error.hpp" +#include +#include +#include +#include +#include + +namespace +{ + template< typename T > + void my_function( T& t ) + { + t.my_method( "some parameter" ); + } + MOCK_CLASS( mock_class ) + { + MOCK_METHOD_EXT( my_method, 1, void( const std::string& ), my_tag ) + }; +} + +BOOST_FIXTURE_TEST_CASE( mock_object_for_static_polymorphism, mock_error_fixture ) +{ + const mock_class m; + MOCK_EXPECT( m.my_tag ).once().with( "some parameter" ); + my_function( m ); + CHECK_CALLS( 1 ); +} + +namespace +{ + MOCK_CLASS( mock_class_with_operator ) + { + MOCK_CONST_METHOD_EXT( operator+=, 1, mock_class_with_operator&( int ), addition ) + }; +} + +BOOST_FIXTURE_TEST_CASE( mock_addition_operator, mock_error_fixture ) +{ + mock_class_with_operator m; + MOCK_EXPECT( m.addition ).once().returns( boost::ref( m ) ); + m += 1; + CHECK_CALLS( 1 ); +} + +namespace +{ + MOCK_CLASS( mock_class_with_conversion_operator ) + { + MOCK_CONVERSION_OPERATOR( operator, int, conversion ) + }; +} + +BOOST_FIXTURE_TEST_CASE( mock_conversion_operator, mock_error_fixture ) +{ + mock_class_with_conversion_operator m; + MOCK_EXPECT( m.conversion ).once().returns( 42 ); + BOOST_CHECK_EQUAL( 42, static_cast< int >( m ) ); + CHECK_CALLS( 1 ); +} + +namespace +{ + template< typename T > + MOCK_CLASS( mock_template_class_with_conversion_operator ) + { + MOCK_CONVERSION_OPERATOR_TPL( operator, T, conversion ) + }; +} + +BOOST_FIXTURE_TEST_CASE( mock_template_conversion_operator, mock_error_fixture ) +{ + mock_template_class_with_conversion_operator< int > m; + MOCK_EXPECT( m.conversion ).once().returns( 42 ); + BOOST_CHECK_EQUAL( 42, static_cast< int >( m ) ); + CHECK_CALLS( 1 ); +} + +namespace +{ + MOCK_CLASS( mock_class_with_const_conversion_operator ) + { + MOCK_CONST_CONVERSION_OPERATOR( operator, int, conversion ) + }; +} + +BOOST_FIXTURE_TEST_CASE( mock_const_conversion_operator, mock_error_fixture ) +{ + mock_class_with_const_conversion_operator m; + MOCK_EXPECT( m.conversion ).once().returns( 42 ); + int i = m; + BOOST_CHECK_EQUAL( 42, i ); + CHECK_CALLS( 1 ); +} + +namespace +{ + MOCK_CLASS( mock_class_with_non_const_conversion_operator ) + { + MOCK_CONST_CONVERSION_OPERATOR( operator, int, conversion ) + }; +} + +BOOST_FIXTURE_TEST_CASE( mock_non_const_conversion_operator, mock_error_fixture ) +{ + mock_class_with_non_const_conversion_operator m; + MOCK_EXPECT( m.conversion ).once().returns( 42 ); + int i = m; + BOOST_CHECK_EQUAL( 42, i ); + CHECK_CALLS( 1 ); +} + +namespace +{ + template< typename T > + MOCK_CLASS( mock_template_class_with_const_conversion_operator ) + { + MOCK_CONST_CONVERSION_OPERATOR_TPL( operator, T, conversion ) + }; +} + +BOOST_FIXTURE_TEST_CASE( mock_template_const_conversion_operator, mock_error_fixture ) +{ + mock_template_class_with_const_conversion_operator< int > m; + MOCK_EXPECT( m.conversion ).once().returns( 42 ); + BOOST_CHECK_EQUAL( 42, static_cast< int >( m ) ); + CHECK_CALLS( 1 ); +} + +namespace +{ + template< typename T > + MOCK_CLASS( mock_template_class_with_non_const_conversion_operator ) + { + MOCK_NON_CONST_CONVERSION_OPERATOR_TPL( operator, T, conversion ) + }; +} + +BOOST_FIXTURE_TEST_CASE( mock_template_non_const_conversion_operator, mock_error_fixture ) +{ + mock_template_class_with_non_const_conversion_operator< int > m; + MOCK_EXPECT( m.conversion ).once().returns( 42 ); + BOOST_CHECK_EQUAL( 42, static_cast< int >( m ) ); + CHECK_CALLS( 1 ); +} + +namespace +{ + MOCK_CLASS( my_mock ) + { + MOCK_CONST_METHOD_EXT( my_method, 1, void( int ), my_method ) + MOCK_CONST_METHOD_EXT( my_method_2, 1, void( int ), my_method_2 ) + }; +} + +BOOST_FIXTURE_TEST_CASE( MOCK_CONST_METHOD_EXT_macro_defines_a_bindable_method, mock_error_fixture ) +{ + my_mock m; + boost::bind( &my_mock::my_method, &m, 42 ); +} + +BOOST_FIXTURE_TEST_CASE( MOCK_VERIFY_macro, mock_error_fixture ) +{ + my_mock m; + MOCK_VERIFY( m.my_method ); +} + +BOOST_FIXTURE_TEST_CASE( MOCK_RESET_macro, mock_error_fixture ) +{ + my_mock m; + MOCK_RESET( m.my_method ); +} + +BOOST_FIXTURE_TEST_CASE( MOCK_EXPECT_macro, mock_error_fixture ) +{ + my_mock m; + MOCK_EXPECT( m.my_method ).once().with( 42 ); + m.my_method( 42 ); + CHECK_CALLS( 1 ); +} + +namespace +{ + template< typename T > + std::string to_string( const T& t ) + { + std::stringstream s; + s << t; + return s.str(); + } +} + +BOOST_FIXTURE_TEST_CASE( mock_object_is_named, mock_error_fixture ) +{ + my_mock m; + BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m.my_method ) ) ); + BOOST_CHECK_EQUAL( "?.my_mock::my_method_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_method_2 ) ) ); + BOOST_CHECK_EQUAL( "m.my_mock::my_method", to_string( MOCK_HELPER( m.my_method ) ) ); + BOOST_CHECK_EQUAL( "m.my_mock::my_method_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_method_2 ) ) ); + BOOST_CHECK_EQUAL( "m.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m.my_method ) ) ); + BOOST_CHECK_EQUAL( "m.my_mock::my_method", to_string( MOCK_HELPER( m.my_method ) ) ); +} + +BOOST_FIXTURE_TEST_CASE( mock_object_auto_pointer_is_named, mock_error_fixture ) +{ + std::auto_ptr< my_mock > m( new my_mock ); + BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); + BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); + BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); + BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); +} + +BOOST_FIXTURE_TEST_CASE( mock_object_const_auto_pointer_is_named, mock_error_fixture ) +{ + const std::auto_ptr< my_mock > m( new my_mock ); + BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); + BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); + BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); + BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); +} + +BOOST_FIXTURE_TEST_CASE( mock_object_shared_pointer_is_named, mock_error_fixture ) +{ + boost::shared_ptr< my_mock > m( new my_mock ); + BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); + BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); + BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); + BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); +} + +BOOST_FIXTURE_TEST_CASE( mock_object_const_shared_pointer_is_named, mock_error_fixture ) +{ + const boost::shared_ptr< my_mock > m( new my_mock ); + BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); + BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); + BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); + BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); +} + +namespace +{ + struct my_custom_mock + { + MOCK_METHOD_EXT( my_method, 0, void(), my_tag ) + MOCK_METHOD_EXT( my_method_2, 0, void(), my_tag_2 ) + }; +} + +BOOST_FIXTURE_TEST_CASE( custom_mock_object_without_macros_and_without_inheriting_from_object_is_named, mock_error_fixture ) +{ + my_custom_mock m; + BOOST_CHECK_EQUAL( "?.my_custom_mock::my_tag", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag ) ) ); + BOOST_CHECK_EQUAL( "?.my_custom_mock::my_tag_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag_2 ) ) ); + BOOST_CHECK_EQUAL( "m.my_custom_mock::my_tag", to_string( MOCK_HELPER( m.my_tag ) ) ); + BOOST_CHECK_EQUAL( "m.my_custom_mock::my_tag_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag_2 ) ) ); + BOOST_CHECK_EQUAL( "m.my_custom_mock::my_tag", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag ) ) ); + BOOST_CHECK_EQUAL( "m.my_custom_mock::my_tag", to_string( MOCK_HELPER( m.my_tag ) ) ); +} + +namespace +{ + struct my_custom_mock_object : mock::object + { + MOCK_METHOD_EXT( my_method, 0, void(), my_tag ) + MOCK_METHOD_EXT( my_method_2, 0, void(), my_tag_2 ) + }; +} + +BOOST_FIXTURE_TEST_CASE( custom_mock_object_without_macros_is_named, mock_error_fixture ) +{ + my_custom_mock_object m; + BOOST_CHECK_EQUAL( "?.my_custom_mock_object::my_tag", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag ) ) ); + BOOST_CHECK_EQUAL( "?.my_custom_mock_object::my_tag_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag_2 ) ) ); + BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_tag", to_string( MOCK_HELPER( m.my_tag ) ) ); + BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_tag_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag_2 ) ) ); + BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_tag", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag ) ) ); + BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_tag", to_string( MOCK_HELPER( m.my_tag ) ) ); +} + +BOOST_FIXTURE_TEST_CASE( mock_functor, mock_error_fixture ) +{ + MOCK_FUNCTOR( f1, void() ); + MOCK_FUNCTOR( f2, int( const std::string& ) ); +} + +namespace +{ + template< typename T > + struct tpl_functor_class + { + MOCK_FUNCTOR_TPL( f, void( T ) ); + }; +} + +BOOST_FIXTURE_TEST_CASE( mock_functor_reset, mock_error_fixture ) +{ + MOCK_FUNCTOR( f, void() ); + MOCK_RESET( f ); + mock::reset( f ); +} + +BOOST_FIXTURE_TEST_CASE( mock_functor_verify, mock_error_fixture ) +{ + MOCK_FUNCTOR( f, void() ); + MOCK_VERIFY( f ); + mock::verify( f ); +} + +BOOST_FIXTURE_TEST_CASE( mock_functor_is_named, mock_error_fixture ) +{ + MOCK_FUNCTOR( f, void() ); + BOOST_CHECK_EQUAL( "f", to_string( MOCK_HELPER( f ) ) ); +} + +namespace +{ + MOCK_FUNCTION( mock_function, 1, float( int ), mock_function ) +} + +BOOST_FIXTURE_TEST_CASE( mock_function_is_named, mock_error_fixture ) +{ + BOOST_CHECK_EQUAL( "mock_function", to_string( MOCK_HELPER( mock_function ) ) ); +} + +namespace +{ + MOCK_CLASS( static_function_class ) + { + MOCK_STATIC_METHOD( f, 1, float( int ), f ) + }; +} + +BOOST_FIXTURE_TEST_CASE( mock_static_function_is_named, mock_error_fixture ) +{ + BOOST_CHECK_EQUAL( "static_function_class::f", to_string( MOCK_HELPER( static_function_class::f ) ) ); +} + +namespace +{ + MOCK_CLASS( round_parenthesized_signature ) + { + MOCK_METHOD_EXT( m0, 0, (std::map< int, int >()), m0 ) + MOCK_STATIC_METHOD( m1, 0, (std::map< int, int >()), m1 ) + MOCK_FUNCTOR( f0, (std::map< int, int >()) ); + }; + MOCK_FUNCTION( fun0, 0, (std::map< int, int >()), fun0 ) +} + +#ifdef MOCK_VARIADIC_MACROS + +namespace +{ + struct base + { + virtual ~base() + {} + virtual void m1() = 0; + }; + + MOCK_BASE_CLASS( variadic, base ) + { + MOCK_METHOD( m1, 0 ) + MOCK_METHOD( m2, 0, void() ) + MOCK_METHOD( m3, 0, void(), m3 ) + MOCK_CONST_METHOD( m4, 0, void() ) + MOCK_CONST_METHOD( m5, 0, void(), m5 ) + MOCK_NON_CONST_METHOD( m6, 0, void() ) + MOCK_NON_CONST_METHOD( m7, 0, void(), m7 ) + MOCK_STATIC_METHOD( m8, 0, void() ) + MOCK_STATIC_METHOD( m9, 0, void(), m9 ) + }; + + template< typename T > + MOCK_CLASS( variadic_tpl ) + { + MOCK_METHOD_TPL( m2, 0, T() ) + MOCK_METHOD_TPL( m3, 0, T(), m3 ) + MOCK_CONST_METHOD_TPL( m4, 0, T() ) + MOCK_CONST_METHOD_TPL( m5, 0, T(), m5 ) + MOCK_NON_CONST_METHOD_TPL( m6, 0, T() ) + MOCK_NON_CONST_METHOD_TPL( m7, 0, T(), m7 ) + MOCK_STATIC_METHOD_TPL( m8, 0, T() ) + MOCK_STATIC_METHOD_TPL( m9, 0, T(), m9 ) + }; + + MOCK_BASE_CLASS( comma_base, std::map< int, int > ) + {}; + + MOCK_FUNCTION( fun1, 0, void() ) + MOCK_FUNCTION( fun2, 0, void(), fun2 ) + MOCK_FUNCTION( fun3, 0, (std::map< int, int >()) ) + + MOCK_FUNCTOR( f_variadic, std::map< int, int >() ); +} + +#endif // MOCK_VARIADIC_MACROS + +#ifdef BOOST_MSVC +# define MOCK_STDCALL __stdcall +#elif defined( BOOST_GCC ) +# define MOCK_STDCALL __attribute((stdcall)) +#else +# define MOCK_STDCALL +#endif // BOOST_GCC + +namespace stdcall +{ + struct base + { + virtual void MOCK_STDCALL m1() = 0; + }; + + MOCK_BASE_CLASS( derived, base ) + { + MOCK_CONSTRUCTOR( MOCK_STDCALL derived, 0, (), derived ) + MOCK_DESTRUCTOR( MOCK_STDCALL ~derived, derived ) + MOCK_CONVERSION_OPERATOR( MOCK_STDCALL operator, int, to_int ) + MOCK_METHOD_EXT( MOCK_STDCALL m1, 0, void(), m1 ) + MOCK_METHOD_EXT( MOCK_STDCALL m2, 0, void(), m2 ) +#ifdef MOCK_VARIADIC_MACROS + MOCK_METHOD( MOCK_STDCALL m3, 0, void(), m3 ) +#endif + MOCK_STATIC_METHOD( MOCK_STDCALL m4, 0, void(), m4 ) + }; + + MOCK_FUNCTION( MOCK_STDCALL f, 0, void(), f ) +} diff --git a/test/test_object.cpp b/test/test_object.cpp index 4f86a12..e33da4b 100644 --- a/test/test_object.cpp +++ b/test/test_object.cpp @@ -1,107 +1,107 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include "mock_error.hpp" -#include -#include -#include -#include - -namespace -{ - struct object : mock::object - {}; - - object static_o; -} - -BOOST_FIXTURE_TEST_CASE( verifying_an_empty_object_succeeds, mock_error_fixture ) -{ - object o; - BOOST_CHECK( mock::verify( o ) ); -} - -namespace -{ - struct fixture : mock_error_fixture - { - fixture() - { - mock::detail::configure( o, e, "instance", MOCK_TYPE_NAME(o), "name" ); - } - object o; - mock::detail::function< void() > e; - }; -} - -BOOST_FIXTURE_TEST_CASE( verifying_an_object_containing_a_failing_expectation_fails, fixture ) -{ - e.expect().once(); - CHECK_ERROR( - BOOST_CHECK( ! mock::verify( o ) ), - "verification failed", 0, "instanceobject::name\n. once()" ); - mock::reset( o ); - BOOST_CHECK( mock::verify( o ) ); -} - -BOOST_FIXTURE_TEST_CASE( verifying_all_objects_with_one_of_them_containing_a_failing_expectation_fails, fixture ) -{ - e.expect().once(); - CHECK_ERROR( - BOOST_CHECK( ! mock::verify() ), - "verification failed", 0, "instanceobject::name\n. once()" ); - mock::reset(); - BOOST_CHECK( mock::verify() ); -} - -BOOST_FIXTURE_TEST_CASE( resetting_an_object_containing_a_failing_expectation_and_verifying_it_succeeds, fixture ) -{ - e.expect().once(); - mock::reset( o ); - BOOST_CHECK( mock::verify( o ) ); -} - -BOOST_FIXTURE_TEST_CASE( an_object_is_assignable_by_sharing_its_state, mock_error_fixture ) -{ - object o1; - mock::detail::function< void() > e; - { - object o2; - mock::detail::configure( o2, e, "instance", MOCK_TYPE_NAME(o2), "name" ); - e.expect().once(); - o1 = o2; - CHECK_ERROR( - BOOST_CHECK( ! mock::verify( o1 ) ), - "verification failed", 0, "instanceobject::name\n. once()" ); - CHECK_ERROR( - BOOST_CHECK( ! mock::verify( o2 ) ), - "verification failed", 0, "instanceobject::name\n. once()" ); - } - CHECK_ERROR( - BOOST_CHECK( ! mock::verify( o1 ) ), - "verification failed", 0, "instanceobject::name\n. once()" ); -} - -BOOST_FIXTURE_TEST_CASE( an_object_is_copiable_by_sharing_its_state, mock_error_fixture ) -{ - std::auto_ptr< object > o2( new object ); - const object o1( *o2 ); - mock::detail::function< void() > e; - mock::detail::configure( *o2, e, "instance", MOCK_TYPE_NAME(*o2), "name" ); - e.expect().once(); - CHECK_ERROR( - BOOST_CHECK( ! mock::verify( *o2 ) ), - "verification failed", 0, "instanceobject::name\n. once()" ); - CHECK_ERROR( - BOOST_CHECK( ! mock::verify( o1 ) ), - "verification failed", 0, "instanceobject::name\n. once()" ); - o2.reset(); - CHECK_ERROR( - BOOST_CHECK( ! mock::verify( o1 ) ), - "verification failed", 0, "instanceobject::name\n. once()" ); -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include "mock_error.hpp" +#include +#include +#include +#include + +namespace +{ + struct object : mock::object + {}; + + object static_o; +} + +BOOST_FIXTURE_TEST_CASE( verifying_an_empty_object_succeeds, mock_error_fixture ) +{ + object o; + BOOST_CHECK( mock::verify( o ) ); +} + +namespace +{ + struct fixture : mock_error_fixture + { + fixture() + { + mock::detail::configure( o, e, "instance", MOCK_TYPE_NAME(o), "name" ); + } + object o; + mock::detail::function< void() > e; + }; +} + +BOOST_FIXTURE_TEST_CASE( verifying_an_object_containing_a_failing_expectation_fails, fixture ) +{ + e.expect().once(); + CHECK_ERROR( + BOOST_CHECK( ! mock::verify( o ) ), + "verification failed", 0, "instanceobject::name\n. once()" ); + mock::reset( o ); + BOOST_CHECK( mock::verify( o ) ); +} + +BOOST_FIXTURE_TEST_CASE( verifying_all_objects_with_one_of_them_containing_a_failing_expectation_fails, fixture ) +{ + e.expect().once(); + CHECK_ERROR( + BOOST_CHECK( ! mock::verify() ), + "verification failed", 0, "instanceobject::name\n. once()" ); + mock::reset(); + BOOST_CHECK( mock::verify() ); +} + +BOOST_FIXTURE_TEST_CASE( resetting_an_object_containing_a_failing_expectation_and_verifying_it_succeeds, fixture ) +{ + e.expect().once(); + mock::reset( o ); + BOOST_CHECK( mock::verify( o ) ); +} + +BOOST_FIXTURE_TEST_CASE( an_object_is_assignable_by_sharing_its_state, mock_error_fixture ) +{ + object o1; + mock::detail::function< void() > e; + { + object o2; + mock::detail::configure( o2, e, "instance", MOCK_TYPE_NAME(o2), "name" ); + e.expect().once(); + o1 = o2; + CHECK_ERROR( + BOOST_CHECK( ! mock::verify( o1 ) ), + "verification failed", 0, "instanceobject::name\n. once()" ); + CHECK_ERROR( + BOOST_CHECK( ! mock::verify( o2 ) ), + "verification failed", 0, "instanceobject::name\n. once()" ); + } + CHECK_ERROR( + BOOST_CHECK( ! mock::verify( o1 ) ), + "verification failed", 0, "instanceobject::name\n. once()" ); +} + +BOOST_FIXTURE_TEST_CASE( an_object_is_copiable_by_sharing_its_state, mock_error_fixture ) +{ + std::auto_ptr< object > o2( new object ); + const object o1( *o2 ); + mock::detail::function< void() > e; + mock::detail::configure( *o2, e, "instance", MOCK_TYPE_NAME(*o2), "name" ); + e.expect().once(); + CHECK_ERROR( + BOOST_CHECK( ! mock::verify( *o2 ) ), + "verification failed", 0, "instanceobject::name\n. once()" ); + CHECK_ERROR( + BOOST_CHECK( ! mock::verify( o1 ) ), + "verification failed", 0, "instanceobject::name\n. once()" ); + o2.reset(); + CHECK_ERROR( + BOOST_CHECK( ! mock::verify( o1 ) ), + "verification failed", 0, "instanceobject::name\n. once()" ); +} diff --git a/test/test_sequence.cpp b/test/test_sequence.cpp index 3e5885c..d14de02 100644 --- a/test/test_sequence.cpp +++ b/test/test_sequence.cpp @@ -1,114 +1,114 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include "mock_error.hpp" -#include -#include -#include - -BOOST_FIXTURE_TEST_CASE( registering_to_a_sequence_and_calling_out_of_order_throws, mock_error_fixture ) -{ - mock::sequence s; - mock::detail::function< void( int ) > e; - e.expect().once().with( 1 ).in( s ); - e.expect().once().with( 2 ).in( s ); - BOOST_CHECK_NO_THROW( e( 2 ) ); - CHECK_ERROR( e( 1 ), "sequence failed", 1, "?( 1 )\n. once().with( 1 )\nv once().with( 2 )" ); -} - -BOOST_FIXTURE_TEST_CASE( registering_to_a_sequence_and_calling_out_of_order_multiple_invocations_throws, mock_error_fixture ) -{ - mock::sequence s; - mock::detail::function< void( int ) > e; - e.expect().with( 1 ).in( s ); - e.expect().once().with( 2 ).in( s ); - BOOST_CHECK_NO_THROW( e( 1 ) ); - BOOST_CHECK_NO_THROW( e( 2 ) ); - CHECK_ERROR( e( 1 ), "sequence failed", 2, "?( 1 )\n. unlimited().with( 1 )\nv once().with( 2 )" ); -} - -BOOST_FIXTURE_TEST_CASE( registering_to_a_sequence_and_calling_in_order_is_valid, mock_error_fixture ) -{ - mock::sequence s; - mock::detail::function< void( int ) > e; - e.expect().once().with( 1 ).in( s ); - e.expect().once().with( 2 ).in( s ); - BOOST_CHECK_NO_THROW( e( 1 ) ); - BOOST_CHECK_NO_THROW( e( 2 ) ); - BOOST_CHECK( e.verify() ); - CHECK_CALLS( 2 ); -} - -BOOST_FIXTURE_TEST_CASE( registering_to_a_sequence_and_multiply_calling_in_order_is_valid, mock_error_fixture ) -{ - mock::sequence s; - mock::detail::function< void( int ) > e; - e.expect().exactly( 2 ).with( 1 ).in( s ); - e.expect().exactly( 2 ).with( 2 ).in( s ); - BOOST_CHECK_NO_THROW( e( 1 ) ); - BOOST_CHECK_NO_THROW( e( 1 ) ); - BOOST_CHECK_NO_THROW( e( 2 ) ); - BOOST_CHECK_NO_THROW( e( 2 ) ); - BOOST_CHECK( e.verify() ); - CHECK_CALLS( 4 ); -} - -BOOST_FIXTURE_TEST_CASE( registering_to_a_sequence_enforces_call_order_verification_between_two_different_expectations, mock_error_fixture ) -{ - mock::sequence s; - mock::detail::function< void() > e1, e2; - e1.expect().once().in( s ); - e2.expect().once().in( s ); - BOOST_CHECK_NO_THROW( e2() ); - CHECK_ERROR( e1(), "sequence failed", 1, "?()\n. once()" ); -} - -BOOST_FIXTURE_TEST_CASE( destroying_a_sequence_does_not_remove_order_call_enforcement, mock_error_fixture ) -{ - mock::detail::function< void() > e1, e2; - { - mock::sequence s; - e1.expect().once().in( s ); - e2.expect().once().in( s ); - } - BOOST_CHECK_NO_THROW( e2() ); - CHECK_ERROR( e1(), "sequence failed", 1, "?()\n. once()" ); -} - -BOOST_FIXTURE_TEST_CASE( resetting_an_expectation_removes_it_from_order_call_enforcement, mock_error_fixture ) -{ - mock::sequence s; - mock::detail::function< void() > e1, e2; - e1.expect().once().in( s ); - e2.expect().once().in( s ); - e1.reset(); - BOOST_CHECK_NO_THROW( e2() ); - BOOST_CHECK( e1.verify() ); - BOOST_CHECK( e2.verify() ); - CHECK_CALLS( 1 ); -} - -BOOST_FIXTURE_TEST_CASE( an_expectation_can_be_used_in_several_sequences, mock_error_fixture ) -{ - mock::sequence s1, s2; - mock::detail::function< void() > e; - e.expect().once().in( s1, s2 ); - BOOST_CHECK_NO_THROW( e() ); - BOOST_CHECK( e.verify() ); - CHECK_CALLS( 1 ); -} - -BOOST_FIXTURE_TEST_CASE( a_result_specification_is_set_after_a_sequence, mock_error_fixture ) -{ - mock::sequence s; - mock::detail::function< int() > e; - e.expect().once().in( s ).returns( 3 ); - BOOST_CHECK_EQUAL( 3, e() ); - BOOST_CHECK( e.verify() ); - CHECK_CALLS( 1 ); -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include "mock_error.hpp" +#include +#include +#include + +BOOST_FIXTURE_TEST_CASE( registering_to_a_sequence_and_calling_out_of_order_throws, mock_error_fixture ) +{ + mock::sequence s; + mock::detail::function< void( int ) > e; + e.expect().once().with( 1 ).in( s ); + e.expect().once().with( 2 ).in( s ); + BOOST_CHECK_NO_THROW( e( 2 ) ); + CHECK_ERROR( e( 1 ), "sequence failed", 1, "?( 1 )\n. once().with( 1 )\nv once().with( 2 )" ); +} + +BOOST_FIXTURE_TEST_CASE( registering_to_a_sequence_and_calling_out_of_order_multiple_invocations_throws, mock_error_fixture ) +{ + mock::sequence s; + mock::detail::function< void( int ) > e; + e.expect().with( 1 ).in( s ); + e.expect().once().with( 2 ).in( s ); + BOOST_CHECK_NO_THROW( e( 1 ) ); + BOOST_CHECK_NO_THROW( e( 2 ) ); + CHECK_ERROR( e( 1 ), "sequence failed", 2, "?( 1 )\n. unlimited().with( 1 )\nv once().with( 2 )" ); +} + +BOOST_FIXTURE_TEST_CASE( registering_to_a_sequence_and_calling_in_order_is_valid, mock_error_fixture ) +{ + mock::sequence s; + mock::detail::function< void( int ) > e; + e.expect().once().with( 1 ).in( s ); + e.expect().once().with( 2 ).in( s ); + BOOST_CHECK_NO_THROW( e( 1 ) ); + BOOST_CHECK_NO_THROW( e( 2 ) ); + BOOST_CHECK( e.verify() ); + CHECK_CALLS( 2 ); +} + +BOOST_FIXTURE_TEST_CASE( registering_to_a_sequence_and_multiply_calling_in_order_is_valid, mock_error_fixture ) +{ + mock::sequence s; + mock::detail::function< void( int ) > e; + e.expect().exactly( 2 ).with( 1 ).in( s ); + e.expect().exactly( 2 ).with( 2 ).in( s ); + BOOST_CHECK_NO_THROW( e( 1 ) ); + BOOST_CHECK_NO_THROW( e( 1 ) ); + BOOST_CHECK_NO_THROW( e( 2 ) ); + BOOST_CHECK_NO_THROW( e( 2 ) ); + BOOST_CHECK( e.verify() ); + CHECK_CALLS( 4 ); +} + +BOOST_FIXTURE_TEST_CASE( registering_to_a_sequence_enforces_call_order_verification_between_two_different_expectations, mock_error_fixture ) +{ + mock::sequence s; + mock::detail::function< void() > e1, e2; + e1.expect().once().in( s ); + e2.expect().once().in( s ); + BOOST_CHECK_NO_THROW( e2() ); + CHECK_ERROR( e1(), "sequence failed", 1, "?()\n. once()" ); +} + +BOOST_FIXTURE_TEST_CASE( destroying_a_sequence_does_not_remove_order_call_enforcement, mock_error_fixture ) +{ + mock::detail::function< void() > e1, e2; + { + mock::sequence s; + e1.expect().once().in( s ); + e2.expect().once().in( s ); + } + BOOST_CHECK_NO_THROW( e2() ); + CHECK_ERROR( e1(), "sequence failed", 1, "?()\n. once()" ); +} + +BOOST_FIXTURE_TEST_CASE( resetting_an_expectation_removes_it_from_order_call_enforcement, mock_error_fixture ) +{ + mock::sequence s; + mock::detail::function< void() > e1, e2; + e1.expect().once().in( s ); + e2.expect().once().in( s ); + e1.reset(); + BOOST_CHECK_NO_THROW( e2() ); + BOOST_CHECK( e1.verify() ); + BOOST_CHECK( e2.verify() ); + CHECK_CALLS( 1 ); +} + +BOOST_FIXTURE_TEST_CASE( an_expectation_can_be_used_in_several_sequences, mock_error_fixture ) +{ + mock::sequence s1, s2; + mock::detail::function< void() > e; + e.expect().once().in( s1, s2 ); + BOOST_CHECK_NO_THROW( e() ); + BOOST_CHECK( e.verify() ); + CHECK_CALLS( 1 ); +} + +BOOST_FIXTURE_TEST_CASE( a_result_specification_is_set_after_a_sequence, mock_error_fixture ) +{ + mock::sequence s; + mock::detail::function< int() > e; + e.expect().once().in( s ).returns( 3 ); + BOOST_CHECK_EQUAL( 3, e() ); + BOOST_CHECK( e.verify() ); + CHECK_CALLS( 1 ); +} diff --git a/test/undefined.cpp b/test/undefined.cpp index 9855cbb..bacadd7 100644 --- a/test/undefined.cpp +++ b/test/undefined.cpp @@ -1,18 +1,18 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2013 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include "undefined.hpp" - -struct undefined -{}; - -undefined& get_undefined() -{ - static undefined u; - return u; -} +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2013 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include "undefined.hpp" + +struct undefined +{}; + +undefined& get_undefined() +{ + static undefined u; + return u; +} diff --git a/test/undefined.hpp b/test/undefined.hpp index f2418c0..49fd313 100644 --- a/test/undefined.hpp +++ b/test/undefined.hpp @@ -1,16 +1,16 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2013 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_TEST_UNDEFINED_HPP_INCLUDED -#define MOCK_TEST_UNDEFINED_HPP_INCLUDED - -struct undefined; - -undefined& get_undefined(); - -#endif // MOCK_TEST_UNDEFINED_HPP_INCLUDED +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2013 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_TEST_UNDEFINED_HPP_INCLUDED +#define MOCK_TEST_UNDEFINED_HPP_INCLUDED + +struct undefined; + +undefined& get_undefined(); + +#endif // MOCK_TEST_UNDEFINED_HPP_INCLUDED