Skip to content

Commit

Permalink
Fix test to catch inconsistencies
Browse files Browse the repository at this point in the history
  • Loading branch information
d-frey committed Jun 27, 2017
1 parent a92f99a commit bc72f91
Showing 1 changed file with 25 additions and 19 deletions.
44 changes: 25 additions & 19 deletions src/test/pegtl/contrib_raw_string.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@ namespace tao
using qstring = raw_string< '[', '=', ']', alpha, digit >;

template< typename Rule >
struct rqaction
struct raction
: nothing< Rule >
{
};

template<>
struct rqaction< rstring::content >
struct raction< rstring::content >
{
template< typename Input, typename... States >
static void apply( const Input& in, const States&... /*unused*/ )
Expand All @@ -30,8 +30,14 @@ namespace tao
}
};

template< typename Rule >
struct qaction
: nothing< Rule >
{
};

template<>
struct rqaction< qstring::content >
struct qaction< qstring::content >
{
template< typename Input, typename... States >
static void apply( const Input& in, const States&... /*unused*/ )
Expand All @@ -50,38 +56,38 @@ namespace tao
{
};

template< typename Rule, unsigned M, unsigned N >
template< typename Rule, template< typename Rule > class Action, unsigned M, unsigned N >
void verify_data( const std::size_t line, const char* file, const char ( &m )[ M ], const char ( &n )[ N ] )
{
content.clear();
memory_input<> in( m, m + M - 1, file, 0, line, 0 );
const auto r = parse< Rule, rqaction >( in );
const auto r = parse< Rule, Action >( in );
if( ( !r ) || ( content != std::string( n, N - 1 ) ) ) {
TAOCPP_PEGTL_TEST_FAILED( "input data [ '" << m << "' ] expected success with [ '" << n << "' ] but got [ '" << content << "' ] result [ " << r << " ]" );
}
content.clear();
memory_input< tracking_mode::LAZY > in2( m, m + M - 1, file, 0, line, 0 );
const auto r2 = parse< Rule, rqaction >( in2 );
const auto r2 = parse< Rule, Action >( in2 );
if( ( !r2 ) || ( content != std::string( n, N - 1 ) ) ) {
TAOCPP_PEGTL_TEST_FAILED( "input data [ '" << m << "' ] with tracking_mode::LAZY expected success with [ '" << n << "' ] but got [ '" << content << "' ] result [ " << r2 << " ]" );
}
}

void unit_test()
{
verify_data< rgrammar >( __LINE__, __FILE__, "[[]]", "" );
verify_data< rgrammar >( __LINE__, __FILE__, "[[foo]]", "foo" );
verify_data< rgrammar >( __LINE__, __FILE__, "[===[foo]===]", "foo" );
verify_data< rgrammar >( __LINE__, __FILE__, "[===[\nfoo]===]", "foo" );
verify_data< rgrammar >( __LINE__, __FILE__, "[===[\r\nfoo]===]", "foo" );
verify_data< rgrammar >( __LINE__, __FILE__, "[===[\0\0\0]===]", "\0\0\0" );

verify_data< qgrammar >( __LINE__, __FILE__, "[[]]", "" );
verify_data< qgrammar >( __LINE__, __FILE__, "[[a1]]", "a1" );
verify_data< qgrammar >( __LINE__, __FILE__, "[===[a1]===]", "a1" );
verify_data< qgrammar >( __LINE__, __FILE__, "[===[\na1]===]", "a1" );
verify_data< qgrammar >( __LINE__, __FILE__, "[===[\r\na1]===]", "a1" );
verify_data< qgrammar >( __LINE__, __FILE__, "[===[a0a1a2a3]===]", "a0a1a2a3" );
verify_data< rgrammar, raction >( __LINE__, __FILE__, "[[]]", "" );
verify_data< rgrammar, raction >( __LINE__, __FILE__, "[[foo]]", "foo" );
verify_data< rgrammar, raction >( __LINE__, __FILE__, "[===[foo]===]", "foo" );
verify_data< rgrammar, raction >( __LINE__, __FILE__, "[===[\nfoo]===]", "foo" );
verify_data< rgrammar, raction >( __LINE__, __FILE__, "[===[\r\nfoo]===]", "foo" );
verify_data< rgrammar, raction >( __LINE__, __FILE__, "[===[\0\0\0]===]", "\0\0\0" );

verify_data< qgrammar, qaction >( __LINE__, __FILE__, "[[]]", "" );
verify_data< qgrammar, qaction >( __LINE__, __FILE__, "[[a1]]", "a1" );
verify_data< qgrammar, qaction >( __LINE__, __FILE__, "[===[a1]===]", "a1" );
verify_data< qgrammar, qaction >( __LINE__, __FILE__, "[===[\na1]===]", "a1" );
verify_data< qgrammar, qaction >( __LINE__, __FILE__, "[===[\r\na1]===]", "a1" );
verify_data< qgrammar, qaction >( __LINE__, __FILE__, "[===[a0a1a2a3]===]", "a0a1a2a3" );

verify_fail< rgrammar >( __LINE__, __FILE__, "" );
verify_fail< rgrammar >( __LINE__, __FILE__, "[" );
Expand Down

0 comments on commit bc72f91

Please sign in to comment.