diff --git a/build/boost/doc/Jamfile.jam b/build/boost/doc/Jamfile.jam index aa9762c..ab71f8d 100644 --- a/build/boost/doc/Jamfile.jam +++ b/build/boost/doc/Jamfile.jam @@ -50,3 +50,4 @@ compile example/customisation.cpp ; compile example/async_call.cpp ; compile example/retrieve_cref.cpp ; compile example/invoke_functor.cpp ; +compile example/quick_constraint.cpp ; diff --git a/build/boost/doc/example/quick_constraint.cpp b/build/boost/doc/example/quick_constraint.cpp new file mode 100644 index 0000000..7cfccc3 --- /dev/null +++ b/build/boost/doc/example/quick_constraint.cpp @@ -0,0 +1,46 @@ +//[ 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 trick is to compare to a string + { + return boost::lexical_cast< std::string >( actual ) == expected; + } +} + +BOOST_AUTO_TEST_CASE( method_is_called ) +{ + my_mock mock; + MOCK_EXPECT( mock.method ).once().with( "my_class( 42 )" ); // the constraint is given as a string + mock.method( my_class( 42 ) ); +} +//] diff --git a/build/boost/doc/patterns.qbk b/build/boost/doc/patterns.qbk index c95bbfd..e87a27b 100644 --- a/build/boost/doc/patterns.qbk +++ b/build/boost/doc/patterns.qbk @@ -2,6 +2,7 @@ [import example/async_call.cpp] [import example/retrieve_cref.cpp] [import example/invoke_functor.cpp] +[import example/quick_constraint.cpp] This section highlights not-so-obvious features of the library gathered from real use cases. @@ -41,4 +42,16 @@ Solution : [endsect] +[section Quickly writing a custom constraint for a serializable type] + +Problem : + +[quick_constraint_problem] + +Solution : + +[quick_constraint_solution] + +[endsect] + [endsect]