Added support for movable objects in mock::retrieve

This commit is contained in:
Mathieu Champlon 2017-12-11 22:04:11 +01:00
parent afffdb470a
commit f872785e26
3 changed files with 18 additions and 0 deletions

View file

@ -13,6 +13,7 @@ Not yet released
* Fixed mocking of a function returning a reference for gcc 4.1 * Fixed mocking of a function returning a reference for gcc 4.1
* Added MOCK_NO_AUTO_PTR to deactivate std::auto_ptr support * Added MOCK_NO_AUTO_PTR to deactivate std::auto_ptr support
* Added [@https://github.com/philsquared/Catch Catch] integration * Added [@https://github.com/philsquared/Catch Catch] integration
* Added support for movable objects in mock::retrieve
[endsect] [endsect]

View file

@ -14,6 +14,7 @@
#include "detail/addressof.hpp" #include "detail/addressof.hpp"
#include <boost/ref.hpp> #include <boost/ref.hpp>
#include <boost/version.hpp> #include <boost/version.hpp>
#include <boost/move/move.hpp>
#include <boost/utility/enable_if.hpp> #include <boost/utility/enable_if.hpp>
#include <boost/type_traits/common_type.hpp> #include <boost/type_traits/common_type.hpp>
#include <boost/type_traits/is_convertible.hpp> #include <boost/type_traits/is_convertible.hpp>
@ -157,6 +158,12 @@ namespace detail
*expected_ = detail::addressof( actual ); *expected_ = detail::addressof( actual );
return true; return true;
} }
template< typename Actual >
bool operator()( BOOST_RV_REF( Actual ) actual ) const
{
*expected_ = boost::move( actual );
return true;
}
friend std::ostream& operator<<( std::ostream& s, const retrieve& r ) friend std::ostream& operator<<( std::ostream& s, const retrieve& r )
{ {
return s << "retrieve( " << mock::format( *r.expected_ ) << " )"; return s << "retrieve( " << mock::format( *r.expected_ ) << " )";

View file

@ -219,6 +219,16 @@ BOOST_AUTO_TEST_CASE( retrieve_constraint )
BOOST_CHECK_EQUAL( i, &j ); BOOST_CHECK_EQUAL( i, &j );
} }
#endif #endif
#ifdef MOCK_SMART_PTR
{
std::unique_ptr< int > i;
std::unique_ptr< int > j( new int( 3 ) );
BOOST_CHECK( mock::retrieve( i ).c_( j ) );
BOOST_REQUIRE( i );
BOOST_CHECK_EQUAL( 3, *i );
BOOST_CHECK( !j );
}
#endif
} }
namespace namespace