diff --git a/test/detail/test_check.cpp b/test/detail/test_check.cpp index fe30012..a2d8eb6 100644 --- a/test/detail/test_check.cpp +++ b/test/detail/test_check.cpp @@ -30,3 +30,38 @@ BOOST_AUTO_TEST_CASE( ref_to_int_and_int_can_be_compared ) BOOST_CHECK( check( 3, boost::cref( 3 ) ) ); BOOST_CHECK( ! check( 4, boost::cref( 3 ) ) ); } + +namespace +{ + struct fixture + { + fixture() + : actual( "!same text" + 1 ) + { + const char* static_string = "same text"; + BOOST_REQUIRE( actual != static_string ); + BOOST_REQUIRE( actual == std::string( static_string ) ); + } + 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( check( expected, actual ) ); + const char* unexpected = "different text"; + BOOST_CHECK( ! check( actual, unexpected ) ); +} + +BOOST_FIXTURE_TEST_CASE( const_char_pointer_and_string_literal_can_be_compared, fixture ) +{ + BOOST_CHECK( check( "same text", actual ) ); + BOOST_CHECK( ! check( "different text", actual ) ); +} + +BOOST_FIXTURE_TEST_CASE( const_char_pointer_and_std_string_can_be_compared, fixture ) +{ + BOOST_CHECK( check( std::string( "same text" ), actual ) ); + BOOST_CHECK( ! check( std::string( "different text" ), actual ) ); +} diff --git a/turtle/detail/check.hpp b/turtle/detail/check.hpp index 55f6054..a7ec0ce 100644 --- a/turtle/detail/check.hpp +++ b/turtle/detail/check.hpp @@ -57,6 +57,26 @@ namespace detail Expected expected_; }; + template<> + class check< const char*, const char* > : public check_base< const char* > + { + public: + explicit check( const char* expected ) + : expected_( expected ) + {} + virtual bool operator()( const char* actual ) + { + return strcmp( actual, expected_ ) == 0; + } + private: + virtual void serialize( std::ostream& s ) const + { + s << mock::format( expected_ ); + } + private: + const char* expected_; + }; + template< typename Actual, typename Constraint > class check< Actual, mock::constraint< Constraint > > : public check_base< Actual >