• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 ///////////////////////////////////////////////////////////////////////////////
2 // misc2.hpp
3 //
4 //  Copyright 2008 Eric Niebler. Distributed under the Boost
5 //  Software License, Version 1.0. (See accompanying file
6 //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 
8 #include <map>
9 #include <string>
10 #include <boost/xpressive/xpressive.hpp>
11 #include <boost/xpressive/regex_actions.hpp>
12 #include <boost/test/unit_test.hpp>
13 
14 namespace xpr = boost::xpressive;
15 using namespace xpr;
16 
17 ///////////////////////////////////////////////////////////////////////////////
18 //
test_complement()19 void test_complement()
20 {
21     sregex rx1 = ~_n >> ~(set='a') >> ~(set='a','b') >> ~set['a'] >> ~_ln
22         >> ~before('a') >> ~after('a') >> ~alpha >> ~range('a','b') >> ~_b >> ~as_xpr('a');
23 
24 #ifndef BOOST_XPRESSIVE_NO_WREGEX
25     wsregex rx2 = ~_n >> ~(set=L'a') >> ~(set=L'a',L'b') >> ~set[L'a'] >> ~_ln
26         >> ~before(L'a') >> ~after(L'a') >> ~alpha >> ~range(L'a',L'b') >> ~_b >> ~as_xpr(L'a');
27 #endif
28 }
29 
30 ///////////////////////////////////////////////////////////////////////////////
31 //
test_static_actions_in_dynamic_keep()32 void test_static_actions_in_dynamic_keep()
33 {
34     std::string result;
35     std::string str("foo");
36 
37     sregex_compiler compiler;
38     compiler["rx0"] = (s1="foo")[ xpr::ref(result) = s1 ];
39     sregex rx = compiler.compile("(?>(?$rx0))");
40 
41     bool ok = regex_match(str, rx);
42     BOOST_CHECK(ok);
43     BOOST_CHECK_EQUAL(result, "foo");
44 }
45 
46 ///////////////////////////////////////////////////////////////////////////////
47 //
test_static_actions_in_static_keep()48 void test_static_actions_in_static_keep()
49 {
50     std::string result;
51     std::string str("foo");
52 
53     sregex rx0 = (s1="foo")[ xpr::ref(result) = s1 ];
54     sregex rx = keep(rx0);
55 
56     bool ok = regex_match(str, rx);
57     BOOST_CHECK(ok);
58     BOOST_CHECK_EQUAL(result, "foo");
59 }
60 
61 ///////////////////////////////////////////////////////////////////////////////
62 //
test_replace_with_lambda()63 void test_replace_with_lambda()
64 {
65     std::map<std::string, std::string> replacements;
66     replacements["X"] = "this";
67     replacements["Y"] = "that";
68 
69     std::string input("\"$(X)\" has the value \"$(Y)\""), output;
70     std::string expected("\"this\" has the value \"that\"");
71     sregex rx = "$(" >> (s1= +~as_xpr(')')) >> ')';
72 
73     output = regex_replace(input, rx, xpr::ref(replacements)[s1]);
74     BOOST_CHECK_EQUAL(output, expected);
75 }
76 
77 using namespace boost::unit_test;
78 ///////////////////////////////////////////////////////////////////////////////
79 // init_unit_test_suite
80 //
init_unit_test_suite(int argc,char * argv[])81 test_suite* init_unit_test_suite( int argc, char* argv[] )
82 {
83     test_suite *test = BOOST_TEST_SUITE("miscelaneous tests");
84 
85     test->add(BOOST_TEST_CASE(&test_complement));
86     test->add(BOOST_TEST_CASE(&test_static_actions_in_dynamic_keep));
87     test->add(BOOST_TEST_CASE(&test_static_actions_in_static_keep));
88     test->add(BOOST_TEST_CASE(&test_replace_with_lambda));
89 
90     return test;
91 }
92