From 14a788557bc45065544fd9b5128fe6c6e2b18464 Mon Sep 17 00:00:00 2001 From: mat007 Date: Thu, 11 Mar 2010 11:26:48 +0000 Subject: [PATCH] Added support for mocking conversion operators git-svn-id: https://svn.code.sf.net/p/turtle/code/trunk@141 860be788-9bd5-4423-9f1e-828f051e677b --- src/libraries/turtle/mock.hpp | 11 +++++++ src/tests/turtle_test/mock_test.cpp | 48 +++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) 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 )