mirror of
https://github.com/mat007/turtle.git
synced 2026-06-22 12:13:43 +00:00
Refactoring
git-svn-id: https://svn.code.sf.net/p/turtle/code/trunk@721 860be788-9bd5-4423-9f1e-828f051e677b
This commit is contained in:
parent
598ce50405
commit
c91d425d87
5 changed files with 83 additions and 121 deletions
|
|
@ -27,7 +27,6 @@
|
||||||
<ClInclude Include="..\..\turtle\detail\child.hpp" />
|
<ClInclude Include="..\..\turtle\detail\child.hpp" />
|
||||||
<ClInclude Include="..\..\turtle\detail\cleanup.hpp" />
|
<ClInclude Include="..\..\turtle\detail\cleanup.hpp" />
|
||||||
<ClInclude Include="..\..\turtle\detail\context.hpp" />
|
<ClInclude Include="..\..\turtle\detail\context.hpp" />
|
||||||
<ClInclude Include="..\..\turtle\detail\expectation_base.hpp" />
|
|
||||||
<ClInclude Include="..\..\turtle\detail\expectation_template.hpp" />
|
<ClInclude Include="..\..\turtle\detail\expectation_template.hpp" />
|
||||||
<ClInclude Include="..\..\turtle\detail\formatter.hpp" />
|
<ClInclude Include="..\..\turtle\detail\formatter.hpp" />
|
||||||
<ClInclude Include="..\..\turtle\detail\function.hpp" />
|
<ClInclude Include="..\..\turtle\detail\function.hpp" />
|
||||||
|
|
|
||||||
|
|
@ -76,9 +76,6 @@
|
||||||
<ClInclude Include="..\..\turtle\detail\function_template.hpp">
|
<ClInclude Include="..\..\turtle\detail\function_template.hpp">
|
||||||
<Filter>Source Files\detail</Filter>
|
<Filter>Source Files\detail</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\turtle\detail\expectation_base.hpp">
|
|
||||||
<Filter>Source Files\detail</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\turtle\detail\invocation.hpp">
|
<ClInclude Include="..\..\turtle\detail\invocation.hpp">
|
||||||
<Filter>Source Files\detail</Filter>
|
<Filter>Source Files\detail</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
|
||||||
|
|
@ -1,92 +0,0 @@
|
||||||
// http://turtle.sourceforge.net
|
|
||||||
//
|
|
||||||
// Copyright Mathieu Champlon 2012
|
|
||||||
//
|
|
||||||
// Distributed under the Boost Software License, Version 1.0.
|
|
||||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
#ifndef MOCK_EXPECTATION_BASE_HPP_INCLUDED
|
|
||||||
#define MOCK_EXPECTATION_BASE_HPP_INCLUDED
|
|
||||||
|
|
||||||
#include "../config.hpp"
|
|
||||||
#include "../sequence.hpp"
|
|
||||||
#include "invocation.hpp"
|
|
||||||
#include <boost/make_shared.hpp>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace mock
|
|
||||||
{
|
|
||||||
namespace detail
|
|
||||||
{
|
|
||||||
class expectation_base
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
void set_location( const char* file, int line )
|
|
||||||
{
|
|
||||||
file_ = file;
|
|
||||||
line_ = line;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool verify() const
|
|
||||||
{
|
|
||||||
return i_->verify();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool invoke() const
|
|
||||||
{
|
|
||||||
for( sequences_cit it = sequences_.begin();
|
|
||||||
it != sequences_.end(); ++it )
|
|
||||||
if( ! (*it)->is_valid( this ) )
|
|
||||||
return false;
|
|
||||||
bool result = i_->invoke();
|
|
||||||
for( sequences_cit it = sequences_.begin();
|
|
||||||
it != sequences_.end(); ++it )
|
|
||||||
(*it)->invalidate( this );
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* file() const
|
|
||||||
{
|
|
||||||
return file_;
|
|
||||||
}
|
|
||||||
int line() const
|
|
||||||
{
|
|
||||||
return line_;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
expectation_base()
|
|
||||||
: i_( boost::make_shared< unlimited >() )
|
|
||||||
, file_( "unknown location" )
|
|
||||||
, line_( 0 )
|
|
||||||
{}
|
|
||||||
~expectation_base()
|
|
||||||
{
|
|
||||||
for( sequences_cit it = sequences_.begin();
|
|
||||||
it != sequences_.end(); ++it )
|
|
||||||
(*it)->remove( this );
|
|
||||||
}
|
|
||||||
|
|
||||||
void add( const boost::shared_ptr< sequence_impl >& s )
|
|
||||||
{
|
|
||||||
s->add( this );
|
|
||||||
sequences_.push_back( s );
|
|
||||||
}
|
|
||||||
|
|
||||||
boost::shared_ptr< invocation > i_;
|
|
||||||
|
|
||||||
private:
|
|
||||||
typedef std::vector<
|
|
||||||
boost::shared_ptr< sequence_impl >
|
|
||||||
> sequences_type;
|
|
||||||
typedef sequences_type::const_iterator sequences_cit;
|
|
||||||
|
|
||||||
sequences_type sequences_;
|
|
||||||
const char* file_;
|
|
||||||
int line_;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
} // mock
|
|
||||||
|
|
||||||
#endif // MOCK_EXPECTATION_BASE_HPP_INCLUDED
|
|
||||||
|
|
@ -31,7 +31,7 @@
|
||||||
BOOST_PP_IF(n, << ", " <<,) *m.c##n##_
|
BOOST_PP_IF(n, << ", " <<,) *m.c##n##_
|
||||||
|
|
||||||
#define MOCK_EXPECTATION_IN_ADD(z, n, d ) \
|
#define MOCK_EXPECTATION_IN_ADD(z, n, d ) \
|
||||||
add( s##n.impl_ );
|
s##n.impl_->add( this ); sequences_.push_back( s##n.impl_ );
|
||||||
|
|
||||||
#define MOCK_EXPECTATION_IN(z, n, d) \
|
#define MOCK_EXPECTATION_IN(z, n, d) \
|
||||||
expectation& in( BOOST_PP_ENUM_PARAMS(n, sequence& s) ) \
|
expectation& in( BOOST_PP_ENUM_PARAMS(n, sequence& s) ) \
|
||||||
|
|
@ -49,37 +49,26 @@ namespace detail
|
||||||
template< typename R
|
template< typename R
|
||||||
BOOST_PP_ENUM_TRAILING_PARAMS(MOCK_NUM_ARGS, typename T) >
|
BOOST_PP_ENUM_TRAILING_PARAMS(MOCK_NUM_ARGS, typename T) >
|
||||||
class expectation< R (BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS,T)) >
|
class expectation< R (BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS,T)) >
|
||||||
: public expectation_base
|
: public action< R, R (BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS,T)) >
|
||||||
, public action< R, R (BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS,T)) >
|
|
||||||
{
|
{
|
||||||
BOOST_PP_REPEAT(MOCK_NUM_ARGS,
|
BOOST_PP_REPEAT(MOCK_NUM_ARGS,
|
||||||
MOCK_EXPECTATION_TYPEDEF, _)
|
MOCK_EXPECTATION_TYPEDEF, _)
|
||||||
public:
|
public:
|
||||||
#ifndef MOCK_NUM_ARGS_0
|
|
||||||
expectation()
|
expectation()
|
||||||
: BOOST_PP_REPEAT(MOCK_NUM_ARGS,
|
: BOOST_PP_REPEAT(MOCK_NUM_ARGS,
|
||||||
MOCK_EXPECTATION_INITIALIZE, _)
|
MOCK_EXPECTATION_INITIALIZE, _)
|
||||||
|
BOOST_PP_COMMA_IF(MOCK_NUM_ARGS)
|
||||||
|
i_( boost::make_shared< unlimited >() )
|
||||||
|
, file_( "unknown location" )
|
||||||
|
, line_( 0 )
|
||||||
{}
|
{}
|
||||||
template< BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename Constraint_) >
|
|
||||||
expectation& with(
|
|
||||||
BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c) )
|
|
||||||
{
|
|
||||||
BOOST_PP_REPEAT(MOCK_NUM_ARGS,
|
|
||||||
MOCK_EXPECTATION_WITH, _)
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
bool is_valid(
|
|
||||||
BOOST_PP_REPEAT(MOCK_NUM_ARGS,
|
|
||||||
MOCK_EXPECTATION_ARGS, _) ) const
|
|
||||||
{
|
|
||||||
return ! i_->exhausted()
|
|
||||||
BOOST_PP_REPEAT(MOCK_NUM_ARGS,
|
|
||||||
MOCK_EXPECTATION_IS_VALID, _);
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOST_PP_REPEAT(MOCK_MAX_SEQUENCES,
|
~expectation()
|
||||||
MOCK_EXPECTATION_IN, _)
|
{
|
||||||
|
for( sequences_cit it = sequences_.begin();
|
||||||
|
it != sequences_.end(); ++it )
|
||||||
|
(*it)->remove( this );
|
||||||
|
}
|
||||||
|
|
||||||
expectation& once()
|
expectation& once()
|
||||||
{
|
{
|
||||||
|
|
@ -112,6 +101,64 @@ namespace detail
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef MOCK_NUM_ARGS_0
|
||||||
|
template<
|
||||||
|
BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename Constraint_)
|
||||||
|
>
|
||||||
|
expectation& with(
|
||||||
|
BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c) )
|
||||||
|
{
|
||||||
|
BOOST_PP_REPEAT(MOCK_NUM_ARGS,
|
||||||
|
MOCK_EXPECTATION_WITH, _)
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
BOOST_PP_REPEAT(MOCK_MAX_SEQUENCES,
|
||||||
|
MOCK_EXPECTATION_IN, _)
|
||||||
|
|
||||||
|
void set_location( const char* file, int line )
|
||||||
|
{
|
||||||
|
file_ = file;
|
||||||
|
line_ = line;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool verify() const
|
||||||
|
{
|
||||||
|
return i_->verify();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool is_valid(
|
||||||
|
BOOST_PP_REPEAT(MOCK_NUM_ARGS,
|
||||||
|
MOCK_EXPECTATION_ARGS, _) ) const
|
||||||
|
{
|
||||||
|
return ! i_->exhausted()
|
||||||
|
BOOST_PP_REPEAT(MOCK_NUM_ARGS,
|
||||||
|
MOCK_EXPECTATION_IS_VALID, _);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool invoke() const
|
||||||
|
{
|
||||||
|
for( sequences_cit it = sequences_.begin();
|
||||||
|
it != sequences_.end(); ++it )
|
||||||
|
if( ! (*it)->is_valid( this ) )
|
||||||
|
return false;
|
||||||
|
bool result = i_->invoke();
|
||||||
|
for( sequences_cit it = sequences_.begin();
|
||||||
|
it != sequences_.end(); ++it )
|
||||||
|
(*it)->invalidate( this );
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* file() const
|
||||||
|
{
|
||||||
|
return file_;
|
||||||
|
}
|
||||||
|
int line() const
|
||||||
|
{
|
||||||
|
return line_;
|
||||||
|
}
|
||||||
|
|
||||||
friend std::ostream& operator<<(
|
friend std::ostream& operator<<(
|
||||||
std::ostream& s, const expectation& m )
|
std::ostream& s, const expectation& m )
|
||||||
{
|
{
|
||||||
|
|
@ -125,9 +172,19 @@ namespace detail
|
||||||
#endif
|
#endif
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
typedef std::vector<
|
||||||
|
boost::shared_ptr< sequence_impl >
|
||||||
|
> sequences_type;
|
||||||
|
typedef sequences_type::const_iterator sequences_cit;
|
||||||
|
|
||||||
BOOST_PP_REPEAT(
|
BOOST_PP_REPEAT(
|
||||||
MOCK_NUM_ARGS, MOCK_EXPECTATION_MEMBER, _)
|
MOCK_NUM_ARGS, MOCK_EXPECTATION_MEMBER, _)
|
||||||
|
boost::shared_ptr< invocation > i_;
|
||||||
|
sequences_type sequences_;
|
||||||
|
const char* file_;
|
||||||
|
int line_;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
} // mock
|
} // mock
|
||||||
|
|
|
||||||
|
|
@ -13,13 +13,13 @@
|
||||||
#include "../error.hpp"
|
#include "../error.hpp"
|
||||||
#include "../log.hpp"
|
#include "../log.hpp"
|
||||||
#include "../constraints.hpp"
|
#include "../constraints.hpp"
|
||||||
|
#include "../sequence.hpp"
|
||||||
#include "../matcher.hpp"
|
#include "../matcher.hpp"
|
||||||
#include "action.hpp"
|
#include "action.hpp"
|
||||||
#include "verifiable.hpp"
|
#include "verifiable.hpp"
|
||||||
|
#include "invocation.hpp"
|
||||||
#include "type_name.hpp"
|
#include "type_name.hpp"
|
||||||
#include "context.hpp"
|
#include "context.hpp"
|
||||||
#include "invocation.hpp"
|
|
||||||
#include "expectation_base.hpp"
|
|
||||||
#include <boost/preprocessor/iteration/iterate.hpp>
|
#include <boost/preprocessor/iteration/iterate.hpp>
|
||||||
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
|
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
|
||||||
#include <boost/preprocessor/repetition/enum_params.hpp>
|
#include <boost/preprocessor/repetition/enum_params.hpp>
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
|
#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
|
||||||
#include <boost/test/utils/lazy_ostream.hpp>
|
#include <boost/test/utils/lazy_ostream.hpp>
|
||||||
#include <boost/enable_shared_from_this.hpp>
|
#include <boost/enable_shared_from_this.hpp>
|
||||||
|
#include <boost/make_shared.hpp>
|
||||||
#include <boost/call_traits.hpp>
|
#include <boost/call_traits.hpp>
|
||||||
#include <boost/optional.hpp>
|
#include <boost/optional.hpp>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue