git-svn-id: https://svn.code.sf.net/p/turtle/code/trunk@300 860be788-9bd5-4423-9f1e-828f051e677b
This commit is contained in:
mat007 2011-04-19 22:01:49 +00:00
parent 817334e069
commit c7169dd8c4
4 changed files with 29 additions and 42 deletions

View file

@ -19,8 +19,6 @@ namespace mock
{} {}
Constraint f_; Constraint f_;
}; };
template< typename T, typename Constraint >
bool operator==( const T&, const constraint< Constraint >& );
} }
#endif // #ifndef MOCK_CONSTRAINT_HPP_INCLUDED #endif // #ifndef MOCK_CONSTRAINT_HPP_INCLUDED

View file

@ -36,13 +36,6 @@ namespace detail
, file_( "unknown location" ) , file_( "unknown location" )
, line_( 0 ) , line_( 0 )
{} {}
virtual ~expectation_base()
{
for( sequences_cit it = sequences_.begin();
it != sequences_.end(); ++it )
(*it)->remove( this );
}
void set_location( const std::string& file, int line ) void set_location( const std::string& file, int line )
{ {
file_ = file; file_ = file;
@ -82,7 +75,12 @@ namespace detail
} }
protected: protected:
boost::shared_ptr< detail::invocation > i_; ~expectation_base()
{
for( sequences_cit it = sequences_.begin();
it != sequences_.end(); ++it )
(*it)->remove( this );
}
void expect( detail::invocation* i ) void expect( detail::invocation* i )
{ {
@ -95,6 +93,8 @@ namespace detail
sequences_.push_back( s ); sequences_.push_back( s );
} }
boost::shared_ptr< detail::invocation > i_;
private: private:
typedef std::vector< boost::shared_ptr< detail::sequence_impl > > sequences_type; typedef std::vector< boost::shared_ptr< detail::sequence_impl > > sequences_type;
typedef sequences_type::const_iterator sequences_cit; typedef sequences_type::const_iterator sequences_cit;
@ -155,14 +155,14 @@ namespace detail
public: public:
bool is_valid() const bool is_valid() const
{ {
return i_->is_valid(); return ! i_->exhausted();
} }
MOCK_EXPECTATION_METHODS MOCK_EXPECTATION_METHODS
friend std::ostream& operator<<( std::ostream& s, const expectation& m ) friend std::ostream& operator<<( std::ostream& s, const expectation& m )
{ {
return s << (m.i_->is_valid() ? '.' : 'v') << ' ' << *m.i_; return s << (m.i_->exhausted() ? 'v' : '.') << ' ' << *m.i_;
} }
}; };
@ -199,13 +199,13 @@ namespace detail
} \ } \
bool is_valid( BOOST_PP_REPEAT_FROM_TO(0, n, MOCK_EXPECTATION_ARGS, BOOST_PP_EMPTY) ) const \ bool is_valid( BOOST_PP_REPEAT_FROM_TO(0, n, MOCK_EXPECTATION_ARGS, BOOST_PP_EMPTY) ) const \
{ \ { \
return i_->is_valid() \ return ! i_->exhausted() \
BOOST_PP_REPEAT_FROM_TO(0, n, MOCK_EXPECTATION_IS_VALID, BOOST_PP_EMPTY); \ BOOST_PP_REPEAT_FROM_TO(0, n, MOCK_EXPECTATION_IS_VALID, BOOST_PP_EMPTY); \
} \ } \
MOCK_EXPECTATION_METHODS \ MOCK_EXPECTATION_METHODS \
friend std::ostream& operator<<( std::ostream& s, const expectation& m ) \ friend std::ostream& operator<<( std::ostream& s, const expectation& m ) \
{ \ { \
return s << (m.i_->is_valid() ? '.' : 'v') << ' ' << *m.i_ << ".with( " \ return s << (m.i_->exhausted() ? 'v' : '.') << ' ' << *m.i_ << ".with( " \
<< \ << \
BOOST_PP_REPEAT_FROM_TO(0, n, MOCK_EXPECTATION_SERIALIZE, BOOST_PP_EMPTY) \ BOOST_PP_REPEAT_FROM_TO(0, n, MOCK_EXPECTATION_SERIALIZE, BOOST_PP_EMPTY) \
<< " )"; \ << " )"; \

View file

@ -22,25 +22,14 @@ namespace detail
{ {
public: public:
invocation() {} invocation() {}
virtual ~invocation() {} virtual ~invocation() {}
// Trigger invocation
// returns false if the invocation has failed
virtual bool invoke() = 0; virtual bool invoke() = 0;
// Test whether the invocation has been invoked or not
// returns true if the invocation has been invoked
virtual bool invoked() const = 0;
// Test whether the invocation is exhausted or not
// returns false if the invocation is exhausted
virtual bool is_valid() const = 0;
// Verify invocation
// returns false if the verification fails
virtual bool verify() const = 0; virtual bool verify() const = 0;
virtual bool invoked() const = 0;
virtual bool exhausted() const = 0;
friend inline std::ostream& operator<<( std::ostream& s, const invocation& i ) friend inline std::ostream& operator<<( std::ostream& s, const invocation& i )
{ {
return i.serialize( s ); return i.serialize( s );
@ -75,9 +64,9 @@ namespace detail
return count_ > 0; return count_ > 0;
} }
virtual bool is_valid() const virtual bool exhausted() const
{ {
return count_ < max_; return count_ >= max_;
} }
virtual bool verify() const virtual bool verify() const

View file

@ -16,10 +16,10 @@ BOOST_AUTO_TEST_CASE( unlimited )
{ {
mock::detail::unlimited invocation; mock::detail::unlimited invocation;
BOOST_CHECK( invocation.verify() ); BOOST_CHECK( invocation.verify() );
BOOST_CHECK( invocation.is_valid() ); BOOST_CHECK( ! invocation.exhausted() );
BOOST_CHECK( invocation.invoke() ); BOOST_CHECK( invocation.invoke() );
BOOST_CHECK( invocation.verify() ); BOOST_CHECK( invocation.verify() );
BOOST_CHECK( invocation.is_valid() ); BOOST_CHECK( ! invocation.exhausted() );
BOOST_CHECK( invocation.invoke() ); BOOST_CHECK( invocation.invoke() );
} }
@ -27,10 +27,10 @@ BOOST_AUTO_TEST_CASE( once )
{ {
mock::detail::once invocation; mock::detail::once invocation;
BOOST_CHECK( ! invocation.verify() ); BOOST_CHECK( ! invocation.verify() );
BOOST_CHECK( invocation.is_valid() ); BOOST_CHECK( ! invocation.exhausted() );
BOOST_CHECK( invocation.invoke() ); BOOST_CHECK( invocation.invoke() );
BOOST_CHECK( invocation.verify() ); BOOST_CHECK( invocation.verify() );
BOOST_CHECK( ! invocation.is_valid() ); BOOST_CHECK( invocation.exhausted() );
BOOST_CHECK( ! invocation.invoke() ); BOOST_CHECK( ! invocation.invoke() );
} }
@ -38,7 +38,7 @@ BOOST_AUTO_TEST_CASE( never )
{ {
mock::detail::never invocation; mock::detail::never invocation;
BOOST_CHECK( invocation.verify() ); BOOST_CHECK( invocation.verify() );
BOOST_CHECK( ! invocation.is_valid() ); BOOST_CHECK( invocation.exhausted() );
BOOST_CHECK( ! invocation.invoke() ); BOOST_CHECK( ! invocation.invoke() );
} }
@ -46,10 +46,10 @@ BOOST_AUTO_TEST_CASE( at_most )
{ {
mock::detail::at_most invocation( 1 ); mock::detail::at_most invocation( 1 );
BOOST_CHECK( invocation.verify() ); BOOST_CHECK( invocation.verify() );
BOOST_CHECK( invocation.is_valid() ); BOOST_CHECK( ! invocation.exhausted() );
BOOST_CHECK( invocation.invoke() ); BOOST_CHECK( invocation.invoke() );
BOOST_CHECK( invocation.verify() ); BOOST_CHECK( invocation.verify() );
BOOST_CHECK( ! invocation.is_valid() ); BOOST_CHECK( invocation.exhausted() );
BOOST_CHECK( ! invocation.invoke() ); BOOST_CHECK( ! invocation.invoke() );
} }
@ -57,10 +57,10 @@ BOOST_AUTO_TEST_CASE( at_least )
{ {
mock::detail::at_least invocation( 1 ); mock::detail::at_least invocation( 1 );
BOOST_CHECK( ! invocation.verify() ); BOOST_CHECK( ! invocation.verify() );
BOOST_CHECK( invocation.is_valid() ); BOOST_CHECK( ! invocation.exhausted() );
BOOST_CHECK( invocation.invoke() ); BOOST_CHECK( invocation.invoke() );
BOOST_CHECK( invocation.verify() ); BOOST_CHECK( invocation.verify() );
BOOST_CHECK( invocation.is_valid() ); BOOST_CHECK( ! invocation.exhausted() );
BOOST_CHECK( invocation.invoke() ); BOOST_CHECK( invocation.invoke() );
} }
@ -68,12 +68,12 @@ BOOST_AUTO_TEST_CASE( between )
{ {
mock::detail::between invocation( 1, 2 ); mock::detail::between invocation( 1, 2 );
BOOST_CHECK( ! invocation.verify() ); BOOST_CHECK( ! invocation.verify() );
BOOST_CHECK( invocation.is_valid() ); BOOST_CHECK( ! invocation.exhausted() );
BOOST_CHECK( invocation.invoke() ); BOOST_CHECK( invocation.invoke() );
BOOST_CHECK( invocation.verify() ); BOOST_CHECK( invocation.verify() );
BOOST_CHECK( invocation.is_valid() ); BOOST_CHECK( ! invocation.exhausted() );
BOOST_CHECK( invocation.invoke() ); BOOST_CHECK( invocation.invoke() );
BOOST_CHECK( invocation.verify() ); BOOST_CHECK( invocation.verify() );
BOOST_CHECK( ! invocation.is_valid() ); BOOST_CHECK( invocation.exhausted() );
BOOST_CHECK( ! invocation.invoke() ); BOOST_CHECK( ! invocation.invoke() );
} }