d4ba38f74c
[SVN r46917]
92 lines
2.8 KiB
C++
92 lines
2.8 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// misc2.hpp
|
|
//
|
|
// Copyright 2008 Eric Niebler. 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)
|
|
|
|
#include <map>
|
|
#include <string>
|
|
#include <boost/xpressive/xpressive.hpp>
|
|
#include <boost/xpressive/regex_actions.hpp>
|
|
#include <boost/test/unit_test.hpp>
|
|
|
|
namespace xpr = boost::xpressive;
|
|
using namespace xpr;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
void test_complement()
|
|
{
|
|
sregex rx1 = ~_n >> ~(set='a') >> ~(set='a','b') >> ~set['a'] >> ~_ln
|
|
>> ~before('a') >> ~after('a') >> ~alpha >> ~range('a','b') >> ~_b >> ~as_xpr('a');
|
|
|
|
#ifndef BOOST_XPRESSIVE_NO_WREGEX
|
|
wsregex rx2 = ~_n >> ~(set=L'a') >> ~(set=L'a',L'b') >> ~set[L'a'] >> ~_ln
|
|
>> ~before(L'a') >> ~after(L'a') >> ~alpha >> ~range(L'a',L'b') >> ~_b >> ~as_xpr(L'a');
|
|
#endif
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
void test_static_actions_in_dynamic_keep()
|
|
{
|
|
std::string result;
|
|
std::string str("foo");
|
|
|
|
sregex_compiler compiler;
|
|
compiler["rx0"] = (s1="foo")[ xpr::ref(result) = s1 ];
|
|
sregex rx = compiler.compile("(?>(?$rx0))");
|
|
|
|
bool ok = regex_match(str, rx);
|
|
BOOST_CHECK(ok);
|
|
BOOST_CHECK_EQUAL(result, "foo");
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
void test_static_actions_in_static_keep()
|
|
{
|
|
std::string result;
|
|
std::string str("foo");
|
|
|
|
sregex rx0 = (s1="foo")[ xpr::ref(result) = s1 ];
|
|
sregex rx = keep(rx0);
|
|
|
|
bool ok = regex_match(str, rx);
|
|
BOOST_CHECK(ok);
|
|
BOOST_CHECK_EQUAL(result, "foo");
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
void test_replace_with_lambda()
|
|
{
|
|
std::map<std::string, std::string> replacements;
|
|
replacements["X"] = "this";
|
|
replacements["Y"] = "that";
|
|
|
|
std::string input("\"$(X)\" has the value \"$(Y)\""), output;
|
|
std::string expected("\"this\" has the value \"that\"");
|
|
sregex rx = "$(" >> (s1= +~as_xpr(')')) >> ')';
|
|
|
|
output = regex_replace(input, rx, xpr::ref(replacements)[s1]);
|
|
BOOST_CHECK_EQUAL(output, expected);
|
|
}
|
|
|
|
using namespace boost::unit_test;
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// init_unit_test_suite
|
|
//
|
|
test_suite* init_unit_test_suite( int argc, char* argv[] )
|
|
{
|
|
test_suite *test = BOOST_TEST_SUITE("miscelaneous tests");
|
|
|
|
test->add(BOOST_TEST_CASE(&test_complement));
|
|
test->add(BOOST_TEST_CASE(&test_static_actions_in_dynamic_keep));
|
|
test->add(BOOST_TEST_CASE(&test_static_actions_in_static_keep));
|
|
test->add(BOOST_TEST_CASE(&test_replace_with_lambda));
|
|
|
|
return test;
|
|
}
|