mirror of
https://github.com/mat007/turtle.git
synced 2026-06-22 12:13:43 +00:00
Merge pull request #35 from mat007/support-move-only-types-as-arguments
Support move only types as arguments
This commit is contained in:
commit
176b9bdc01
16 changed files with 250 additions and 62 deletions
|
|
@ -47,14 +47,41 @@ BOOST_AUTO_TEST_CASE( equal_constraint )
|
|||
BOOST_CHECK( ! mock::equal( std::string( "string" ) ).c_( "not string" ) );
|
||||
{
|
||||
std::string s;
|
||||
mock::constraint<
|
||||
mock::detail::equal<
|
||||
boost::reference_wrapper< const std::string >
|
||||
>
|
||||
> c = mock::equal( boost::cref( s ) );
|
||||
auto c = mock::equal( boost::cref( s ) );
|
||||
s = "string";
|
||||
BOOST_CHECK( c.c_( "string" ) );
|
||||
}
|
||||
#ifdef MOCK_SMART_PTR
|
||||
{
|
||||
std::unique_ptr< int > i;
|
||||
std::unique_ptr< int > j( new int( 3 ) );
|
||||
BOOST_CHECK( ! mock::equal( i ).c_( j ) );
|
||||
BOOST_CHECK( ! mock::equal( j ).c_( i ) );
|
||||
BOOST_CHECK( mock::equal( i ).c_( i ) );
|
||||
BOOST_CHECK( mock::equal( j ).c_( j ) );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE( equal_constraint_deref )
|
||||
{
|
||||
{
|
||||
int i = 3;
|
||||
BOOST_CHECK( mock::equal( 3 ).c_( &i ) );
|
||||
BOOST_CHECK( ! mock::equal( 7 ).c_( &i ) );
|
||||
}
|
||||
{
|
||||
int* i = 0;
|
||||
BOOST_CHECK( ! mock::equal( 3 ).c_( i ) );
|
||||
}
|
||||
#ifdef MOCK_SMART_PTR
|
||||
{
|
||||
std::unique_ptr< int > j( new int( 3 ) );
|
||||
BOOST_CHECK( mock::equal( 3 ).c_( j ) );
|
||||
std::unique_ptr< int > i;
|
||||
BOOST_CHECK( ! mock::equal( 3 ).c_( i ) );
|
||||
}
|
||||
#endif // MOCK_SMART_PTR
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE( same_constraint )
|
||||
|
|
@ -104,6 +131,12 @@ BOOST_AUTO_TEST_CASE( assign_constraint )
|
|||
BOOST_CHECK( mock::assign( &j ).c_( i ) );
|
||||
BOOST_CHECK_EQUAL( &j, i );
|
||||
}
|
||||
{
|
||||
int* i = 0;
|
||||
const int j = 1;
|
||||
BOOST_CHECK( ! mock::assign( j ).c_( i ) );
|
||||
BOOST_CHECK( ! i );
|
||||
}
|
||||
{
|
||||
int i = 0;
|
||||
int j = 1;
|
||||
|
|
@ -219,6 +252,16 @@ BOOST_AUTO_TEST_CASE( retrieve_constraint )
|
|||
BOOST_CHECK_EQUAL( i, &j );
|
||||
}
|
||||
#endif
|
||||
#ifdef MOCK_SMART_PTR
|
||||
{
|
||||
std::unique_ptr< int > i;
|
||||
std::unique_ptr< int > j( new int( 3 ) );
|
||||
BOOST_CHECK( mock::retrieve( i ).c_( boost::move( j ) ) );
|
||||
BOOST_REQUIRE( i );
|
||||
BOOST_CHECK_EQUAL( 3, *i );
|
||||
BOOST_CHECK( !j );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
namespace
|
||||
|
|
@ -244,10 +287,20 @@ BOOST_AUTO_TEST_CASE( retrieve_constraint_uses_assignment_operator )
|
|||
|
||||
BOOST_AUTO_TEST_CASE( affirm_constraint )
|
||||
{
|
||||
int* i = 0;
|
||||
int j;
|
||||
BOOST_CHECK( ! mock::affirm.c_( i ) );
|
||||
BOOST_CHECK( mock::affirm.c_( &j ) );
|
||||
{
|
||||
int* i = 0;
|
||||
int j;
|
||||
BOOST_CHECK( ! mock::affirm.c_( i ) );
|
||||
BOOST_CHECK( mock::affirm.c_( &j ) );
|
||||
}
|
||||
{
|
||||
#ifdef MOCK_SMART_PTR
|
||||
std::unique_ptr< int > i;
|
||||
std::unique_ptr< int > j( new int( 3 ) );
|
||||
BOOST_CHECK( ! mock::affirm.c_( i ) );
|
||||
BOOST_CHECK( mock::affirm.c_( j ) );
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE( negate_constraint )
|
||||
|
|
|
|||
|
|
@ -704,3 +704,56 @@ BOOST_FIXTURE_TEST_CASE( mock_method_accepts_polymorphic_multi_constraint, mock_
|
|||
m.m2( 1, 2 );
|
||||
CHECK_CALLS( 1 );
|
||||
}
|
||||
|
||||
#ifdef MOCK_SMART_PTR
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE( std_unique_ptr_argument_is_supported_in_action, mock_error_fixture )
|
||||
{
|
||||
MOCK_FUNCTOR( f, void( std::unique_ptr< int > ) );
|
||||
std::unique_ptr< int > p;
|
||||
MOCK_EXPECT( f ).once().calls(
|
||||
[]( std::unique_ptr< int > )
|
||||
{
|
||||
} );
|
||||
f( std::unique_ptr< int >( new int( 7 ) ) );
|
||||
CHECK_CALLS( 1 );
|
||||
}
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE( std_unique_ptr_argument_is_supported_in_equal_constraint, mock_error_fixture )
|
||||
{
|
||||
{
|
||||
MOCK_FUNCTOR( f, void( std::unique_ptr< int > ) );
|
||||
MOCK_EXPECT( f ).once().with( mock::equal( 7 ) );
|
||||
f( std::unique_ptr< int >( new int( 7 ) ) );
|
||||
CHECK_CALLS( 1 );
|
||||
}
|
||||
{
|
||||
MOCK_FUNCTOR( f, void( std::unique_ptr< int > ) );
|
||||
MOCK_EXPECT( f ).once().with( 7 );
|
||||
f( std::unique_ptr< int >( new int( 7 ) ) );
|
||||
CHECK_CALLS( 1 );
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE( std_unique_ptr_argument_is_supported_in_retrieve_constraint, mock_error_fixture )
|
||||
{
|
||||
{
|
||||
MOCK_FUNCTOR( f, void( std::unique_ptr< int > ) );
|
||||
MOCK_EXPECT( f ).once().with( nullptr );
|
||||
f( 0 );
|
||||
CHECK_CALLS( 1 );
|
||||
}
|
||||
{
|
||||
std::unique_ptr< int > i;
|
||||
MOCK_FUNCTOR( f, void( std::unique_ptr< int > ) );
|
||||
MOCK_EXPECT( f ).once().with( mock::retrieve( i ) );
|
||||
std::unique_ptr< int > j( new int( 7 ) );
|
||||
f( std::move( j ) );
|
||||
BOOST_CHECK( !j );
|
||||
BOOST_REQUIRE( i );
|
||||
BOOST_CHECK_EQUAL( 7, *i );
|
||||
CHECK_CALLS( 1 );
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue