diff --git a/src/libraries/turtle/format.hpp b/src/libraries/turtle/format.hpp index 72743f8..3c6eb75 100644 --- a/src/libraries/turtle/format.hpp +++ b/src/libraries/turtle/format.hpp @@ -10,9 +10,8 @@ #define MOCK_FORMAT_HPP_INCLUDED #include -#include #include -#include +#include #ifndef MOCK_NO_STL_FORMAT #include #endif // MOCK_NO_STL_FORMAT @@ -23,55 +22,28 @@ namespace mock { namespace detail { -namespace protect -{ - struct eater - { - template< typename T > - eater( const T& ) {} - }; - - struct eaten - {}; - - template< typename S > - eaten operator<<( S&, const eater& ); - - template< typename T > - struct is_serializable_impl - { - static std::ostream* s; - static T* t; - enum { value = sizeof( *s << *t ) == sizeof( std::ostream& ) }; - }; - - template< typename T > - struct is_serializable : boost::integral_constant< bool, is_serializable_impl< T >::value > - {}; - template< typename T > std::string serialize( const T& t, BOOST_DEDUCED_TYPENAME boost::enable_if< - BOOST_DEDUCED_TYPENAME protect::is_serializable< T > >::type* = 0 ) + BOOST_DEDUCED_TYPENAME boost::is_output_streamable< T > >::type* = 0 ) { std::stringstream s; - static_cast< std::ostream& >( s ) << std::boolalpha << t; + s << std::boolalpha << t; return s.str(); } template< typename T > std::string serialize( const T&, BOOST_DEDUCED_TYPENAME boost::disable_if< - BOOST_DEDUCED_TYPENAME protect::is_serializable< T > >::type* = 0 ) + BOOST_DEDUCED_TYPENAME boost::is_output_streamable< T > >::type* = 0 ) { return "?"; } -} } template< typename T > std::string format( const T& t ) { - return detail::protect::serialize( t ); + return detail::serialize( t ); } inline std::string format( const char* s ) diff --git a/src/tests/turtle_test/format_test.cpp b/src/tests/turtle_test/format_test.cpp index 908c9e2..fda1689 100644 --- a/src/tests/turtle_test/format_test.cpp +++ b/src/tests/turtle_test/format_test.cpp @@ -57,9 +57,9 @@ namespace }; } -BOOST_AUTO_TEST_CASE( custom_type_convertible_to_base_type_yields_its_value_when_serialized ) +BOOST_AUTO_TEST_CASE( custom_type_convertible_to_base_type_yields_an_interrogation_mark_when_serialized ) { - BOOST_CHECK_EQUAL( "12", mock::format( convertible_to_int() ) ); + BOOST_CHECK_EQUAL( "?", mock::format( convertible_to_int() ) ); } namespace @@ -77,9 +77,9 @@ namespace }; } -BOOST_AUTO_TEST_CASE( custom_type_convertible_to_another_type_serializable_in_standard_stream_yields_its_value_when_serialized ) +BOOST_AUTO_TEST_CASE( custom_type_convertible_to_another_type_serializable_in_standard_stream_yields_an_interrogation_mark_when_serialized ) { - BOOST_CHECK_EQUAL( "serializable", mock::format( convertible_to_serializable() ) ); + BOOST_CHECK_EQUAL( "?", mock::format( convertible_to_serializable() ) ); } BOOST_AUTO_TEST_CASE( booleans_are_serialized_as_booleans )