diff --git a/src/libraries/turtle/mock.hpp b/src/libraries/turtle/mock.hpp index f3fcafd..c179bbd 100644 --- a/src/libraries/turtle/mock.hpp +++ b/src/libraries/turtle/mock.hpp @@ -232,6 +232,17 @@ namespace detail ~T() { MOCK_ANONYMOUS_MOCKER_EXT(this, ~T, t).test(); } \ MOCK_METHOD_EXPECTATION(void(), t) +#define MOCK_CONST_CONVERSION_OPERATOR(T, t) \ + operator T() const { return MOCK_ANONYMOUS_MOCKER_EXT(this, operator T, t)(); } \ + MOCK_METHOD_EXPECTATION(T(), t) +#define MOCK_NON_CONST_CONVERSION_OPERATOR(T, t) \ + operator T() { return MOCK_ANONYMOUS_MOCKER_EXT(this, operator T, t)(); } \ + MOCK_METHOD_EXPECTATION(T(), t) +#define MOCK_CONVERSION_OPERATOR(T, t) \ + operator T() const { return MOCK_ANONYMOUS_MOCKER_EXT(this, operator T, t)(); } \ + operator T() { return MOCK_ANONYMOUS_MOCKER_EXT(this, operator T, t)(); } \ + MOCK_METHOD_EXPECTATION(T(), t) + #define MOCK_EXPECT(o,t) MOCK_MOCKER(o,t).expect( __FILE__, __LINE__ ) #define MOCK_RESET(o,t) MOCK_MOCKER(o,t).reset() #define MOCK_VERIFY(o,t) MOCK_MOCKER(o,t).verify() diff --git a/src/tests/turtle_test/mock_test.cpp b/src/tests/turtle_test/mock_test.cpp index e206771..a6bf1f9 100644 --- a/src/tests/turtle_test/mock_test.cpp +++ b/src/tests/turtle_test/mock_test.cpp @@ -103,6 +103,54 @@ BOOST_AUTO_TEST_CASE( mock_addition_operator ) mock += 1; } +namespace +{ + MOCK_CLASS( mock_class_with_conversion_operator ) + { + MOCK_CONVERSION_OPERATOR( int, conversion ) + }; +} + +BOOST_AUTO_TEST_CASE( mock_conversion_operator ) +{ + mock_class_with_conversion_operator mock; + MOCK_EXPECT( mock, conversion ).once().returns( 42 ); + int i = mock; + BOOST_CHECK_EQUAL( 42, i ); +} + +namespace +{ + MOCK_CLASS( mock_class_with_const_conversion_operator ) + { + MOCK_CONST_CONVERSION_OPERATOR( int, conversion ) + }; +} + +BOOST_AUTO_TEST_CASE( mock_const_conversion_operator ) +{ + mock_class_with_const_conversion_operator mock; + MOCK_EXPECT( mock, conversion ).once().returns( 42 ); + int i = mock; + BOOST_CHECK_EQUAL( 42, i ); +} + +namespace +{ + MOCK_CLASS( mock_class_with_non_const_conversion_operator ) + { + MOCK_CONST_CONVERSION_OPERATOR( int, conversion ) + }; +} + +BOOST_AUTO_TEST_CASE( mock_non_const_conversion_operator ) +{ + mock_class_with_non_const_conversion_operator mock; + MOCK_EXPECT( mock, conversion ).once().returns( 42 ); + int i = mock; + BOOST_CHECK_EQUAL( 42, i ); +} + namespace { MOCK_CLASS( my_mock )