mirror of
https://github.com/mat007/turtle.git
synced 2026-06-22 12:13:43 +00:00
Shared parent names among their expectations when a mock::object is used as a base class
git-svn-id: https://svn.code.sf.net/p/turtle/code/trunk@124 860be788-9bd5-4423-9f1e-828f051e677b
This commit is contained in:
parent
8a2030ce5f
commit
c40535dc91
5 changed files with 49 additions and 24 deletions
|
|
@ -282,7 +282,7 @@ namespace mock
|
||||||
std::string context() const
|
std::string context() const
|
||||||
{
|
{
|
||||||
std::stringstream s;
|
std::stringstream s;
|
||||||
s << name_;
|
s << parent_->tag() << name_;
|
||||||
serialize( s );
|
serialize( s );
|
||||||
return s.str();
|
return s.str();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -87,17 +87,39 @@ namespace detail
|
||||||
};
|
};
|
||||||
|
|
||||||
template< typename E >
|
template< typename E >
|
||||||
E& set_parent( E& e, const object& o )
|
void set_parent( E& e, const std::string& prefix,
|
||||||
|
const std::string& name, const object& o )
|
||||||
{
|
{
|
||||||
o.set_parent( e );
|
o.set_parent( e );
|
||||||
return e;
|
o.tag( prefix );
|
||||||
|
e.tag( name );
|
||||||
}
|
}
|
||||||
template< typename E, typename T >
|
template< typename E, typename T >
|
||||||
E& set_parent( E& e, const T&,
|
void set_parent( E& e, const std::string& prefix,
|
||||||
|
const std::string& name, const T&,
|
||||||
BOOST_DEDUCED_TYPENAME boost::disable_if<
|
BOOST_DEDUCED_TYPENAME boost::disable_if<
|
||||||
BOOST_DEDUCED_TYPENAME boost::is_base_of< object, T >::type
|
BOOST_DEDUCED_TYPENAME boost::is_base_of< object, T >::type
|
||||||
>::type* = 0 )
|
>::type* = 0 )
|
||||||
{
|
{
|
||||||
|
e.tag( prefix + name );
|
||||||
|
}
|
||||||
|
|
||||||
|
template< typename E >
|
||||||
|
E& configure( BOOST_DEDUCED_TYPENAME E::expectation_tag,
|
||||||
|
const std::string& parent, const std::string& /*op*/,
|
||||||
|
const std::string& /*name*/, E& e )
|
||||||
|
{
|
||||||
|
if( parent != "?" || e.tag() == "?" )
|
||||||
|
e.tag( parent );
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
template< typename E, typename T >
|
||||||
|
E& configure( E& e, const std::string& parent, const std::string& op,
|
||||||
|
const std::string& name, const T& t )
|
||||||
|
{
|
||||||
|
if( parent != "?" || e.tag() == "?" )
|
||||||
|
set_parent( e, parent + op + type_name( typeid( T ) ) + "::",
|
||||||
|
name, t );
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -122,25 +144,6 @@ namespace detail
|
||||||
return "->";
|
return "->";
|
||||||
}
|
}
|
||||||
|
|
||||||
template< typename E >
|
|
||||||
E& configure( BOOST_DEDUCED_TYPENAME E::expectation_tag,
|
|
||||||
const std::string& parent, const std::string& /*op*/,
|
|
||||||
const std::string& /*name*/, E& e )
|
|
||||||
{
|
|
||||||
if( parent != "?" || e.tag() == "?" )
|
|
||||||
e.tag( parent );
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
template< typename E, typename T >
|
|
||||||
E& configure( E& e, const std::string& parent, const std::string& op,
|
|
||||||
const std::string& name, const T& t )
|
|
||||||
{
|
|
||||||
set_parent( e, t );
|
|
||||||
if( parent != "?" || e.tag() == "?" )
|
|
||||||
e.tag( parent + op + type_name( typeid( T ) ) + "::" + name );
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
|
|
||||||
template< typename T >
|
template< typename T >
|
||||||
struct base
|
struct base
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@
|
||||||
#include "verifiable.hpp"
|
#include "verifiable.hpp"
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <ostream>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|
@ -44,6 +43,15 @@ namespace mock
|
||||||
std::mem_fun( &verifiable::reset ) );
|
std::mem_fun( &verifiable::reset ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tag( const std::string& name )
|
||||||
|
{
|
||||||
|
name_ = name;
|
||||||
|
}
|
||||||
|
const std::string& tag() const
|
||||||
|
{
|
||||||
|
return name_;
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual ~node()
|
virtual ~node()
|
||||||
{}
|
{}
|
||||||
|
|
@ -53,6 +61,7 @@ namespace mock
|
||||||
typedef verifiables_type::const_iterator verifiables_cit;
|
typedef verifiables_type::const_iterator verifiables_cit;
|
||||||
|
|
||||||
std::vector< verifiable* > v_;
|
std::vector< verifiable* > v_;
|
||||||
|
std::string name_;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,10 @@ namespace mock
|
||||||
{
|
{
|
||||||
t.set_parent( *impl_ );
|
t.set_parent( *impl_ );
|
||||||
}
|
}
|
||||||
|
void tag( const std::string& name ) const
|
||||||
|
{
|
||||||
|
impl_->tag( name );
|
||||||
|
}
|
||||||
|
|
||||||
bool verify() const
|
bool verify() const
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -108,6 +108,7 @@ namespace
|
||||||
MOCK_CLASS( my_mock )
|
MOCK_CLASS( my_mock )
|
||||||
{
|
{
|
||||||
MOCK_CONST_METHOD_EXT( my_method, 1, void( int ), my_method )
|
MOCK_CONST_METHOD_EXT( my_method, 1, void( int ), my_method )
|
||||||
|
MOCK_CONST_METHOD_EXT( my_method_2, 1, void( int ), my_method_2 )
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -151,7 +152,9 @@ BOOST_AUTO_TEST_CASE( mock_object_is_named )
|
||||||
{
|
{
|
||||||
my_mock m;
|
my_mock m;
|
||||||
BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method ) ) );
|
BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method ) ) );
|
||||||
|
BOOST_CHECK_EQUAL( "?.my_mock::my_method_2", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method_2 ) ) );
|
||||||
BOOST_CHECK_EQUAL( "m.my_mock::my_method", to_string( MOCK_MOCKER( m, my_method ) ) );
|
BOOST_CHECK_EQUAL( "m.my_mock::my_method", to_string( MOCK_MOCKER( m, my_method ) ) );
|
||||||
|
BOOST_CHECK_EQUAL( "m.my_mock::my_method_2", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method_2 ) ) );
|
||||||
BOOST_CHECK_EQUAL( "m.my_mock::my_method", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method ) ) );
|
BOOST_CHECK_EQUAL( "m.my_mock::my_method", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method ) ) );
|
||||||
BOOST_CHECK_EQUAL( "m.my_mock::my_method", to_string( MOCK_MOCKER( m, my_method ) ) );
|
BOOST_CHECK_EQUAL( "m.my_mock::my_method", to_string( MOCK_MOCKER( m, my_method ) ) );
|
||||||
}
|
}
|
||||||
|
|
@ -170,6 +173,7 @@ namespace
|
||||||
struct my_custom_mock
|
struct my_custom_mock
|
||||||
{
|
{
|
||||||
MOCK_METHOD_EXT( my_method, 0, void(), my_method )
|
MOCK_METHOD_EXT( my_method, 0, void(), my_method )
|
||||||
|
MOCK_METHOD_EXT( my_method_2, 0, void(), my_method_2 )
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -177,7 +181,9 @@ BOOST_AUTO_TEST_CASE( custom_mock_object_without_macros_and_without_inheriting_f
|
||||||
{
|
{
|
||||||
my_custom_mock m;
|
my_custom_mock m;
|
||||||
BOOST_CHECK_EQUAL( "?.my_custom_mock::my_method", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method ) ) );
|
BOOST_CHECK_EQUAL( "?.my_custom_mock::my_method", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method ) ) );
|
||||||
|
BOOST_CHECK_EQUAL( "?.my_custom_mock::my_method_2", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method_2 ) ) );
|
||||||
BOOST_CHECK_EQUAL( "m.my_custom_mock::my_method", to_string( MOCK_MOCKER( m, my_method ) ) );
|
BOOST_CHECK_EQUAL( "m.my_custom_mock::my_method", to_string( MOCK_MOCKER( m, my_method ) ) );
|
||||||
|
BOOST_CHECK_EQUAL( "?.my_custom_mock::my_method_2", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method_2 ) ) );
|
||||||
BOOST_CHECK_EQUAL( "m.my_custom_mock::my_method", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method ) ) );
|
BOOST_CHECK_EQUAL( "m.my_custom_mock::my_method", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method ) ) );
|
||||||
BOOST_CHECK_EQUAL( "m.my_custom_mock::my_method", to_string( MOCK_MOCKER( m, my_method ) ) );
|
BOOST_CHECK_EQUAL( "m.my_custom_mock::my_method", to_string( MOCK_MOCKER( m, my_method ) ) );
|
||||||
}
|
}
|
||||||
|
|
@ -187,6 +193,7 @@ namespace
|
||||||
struct my_custom_mock_object : mock::object
|
struct my_custom_mock_object : mock::object
|
||||||
{
|
{
|
||||||
MOCK_METHOD_EXT( my_method, 0, void(), my_method )
|
MOCK_METHOD_EXT( my_method, 0, void(), my_method )
|
||||||
|
MOCK_METHOD_EXT( my_method_2, 0, void(), my_method_2 )
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -194,7 +201,9 @@ BOOST_AUTO_TEST_CASE( custom_mock_object_without_macros_is_named )
|
||||||
{
|
{
|
||||||
my_custom_mock_object m;
|
my_custom_mock_object m;
|
||||||
BOOST_CHECK_EQUAL( "?.my_custom_mock_object::my_method", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method ) ) );
|
BOOST_CHECK_EQUAL( "?.my_custom_mock_object::my_method", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method ) ) );
|
||||||
|
BOOST_CHECK_EQUAL( "?.my_custom_mock_object::my_method_2", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method_2 ) ) );
|
||||||
BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_method", to_string( MOCK_MOCKER( m, my_method ) ) );
|
BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_method", to_string( MOCK_MOCKER( m, my_method ) ) );
|
||||||
|
BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_method_2", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method_2 ) ) );
|
||||||
BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_method", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method ) ) );
|
BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_method", to_string( MOCK_ANONYMOUS_MOCKER( m, my_method ) ) );
|
||||||
BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_method", to_string( MOCK_MOCKER( m, my_method ) ) );
|
BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_method", to_string( MOCK_MOCKER( m, my_method ) ) );
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue