blob: fced46bef849ddbc7720b70418703a02a8dcc93b [file] [log] [blame]
/*=============================================================================
Copyright (c) 2014 Joel de Guzman
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)
==============================================================================*/
#if !defined(BOOST_SPIRIT_X3_TESTING_JUNE_05_2014_00422PM)
#define BOOST_SPIRIT_X3_TESTING_JUNE_05_2014_00422PM
namespace boost { namespace spirit { namespace x3 { namespace testing
{
////////////////////////////////////////////////////////////////////////////
//
// Test utility
//
// The test function accepts a file loaded in memory. The 'test_file'
// range param points to the data contained in the file. This file
// contains two parts.
//
// 1) The source input for testing
// 2) The expected result.
//
// The first part of the file is sent to the generator function
// 'gen' which returns a string. This generated string is then compared
// to the contents of the second (expected result) part.
//
// The second part is demarcated by the string parameter 'demarcation'
// which defaults to "<**expected**>". The expected template may include
// embedded regular expressions marked-up within re_prefix and re_suffix
// parameter tags. For example, given the default RE markup ("<%" and
// "%>"), this template:
//
// <%[0-9]+%>
//
// will match any integer in the source input being tested. The function
// will return the first non-matching position. The flag full_match
// indicates a full match. It is possible for returned pos to be
// at the end of in (in.end()) while still returning full_match ==
// false. In that case, we have a partial match.
//
// Here's an example of a test file:
//
// Hello World, I am Joel. This is a test.
//
// <**expected**>
// Hello World, I am <%[a-zA-Z]+%>. This is a test.
//
////////////////////////////////////////////////////////////////////////////
template <typename Iterator>
struct test_result
{
Iterator pos;
bool full_match;
};
template <typename Range, typename F>
test_result<typename Range::const_iterator>
test(
Range test_file
, F gen
, char const* demarcation = "<**expected**>"
, char const* re_prefix = "<%"
, char const* re_suffix = "%>"
);
}}}}
#endif