]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // Copyright (c) 2001-2011 Hartmut Kaiser |
2 | // | |
3 | // Distributed under the Boost Software License, Version 1.0. (See accompanying | |
4 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
5 | ||
1e59de90 | 6 | #include <boost/spirit/include/karma_delimit.hpp> |
7c673cae FG |
7 | |
8 | #include <boost/spirit/include/karma_char.hpp> | |
9 | #include <boost/spirit/include/karma_generate.hpp> | |
10 | #include <boost/spirit/include/karma_directive.hpp> | |
11 | #include <boost/spirit/include/karma_operator.hpp> | |
12 | #include <boost/spirit/include/karma_nonterminal.hpp> | |
13 | #include <boost/spirit/include/karma_string.hpp> | |
14 | ||
15 | #include "test.hpp" | |
16 | ||
17 | using namespace spirit_test; | |
18 | ||
19 | /////////////////////////////////////////////////////////////////////////////// | |
20 | int | |
21 | main() | |
22 | { | |
23 | using namespace boost::spirit; | |
24 | using namespace boost::spirit::ascii; | |
25 | ||
26 | { | |
27 | BOOST_TEST(test("a b ", delimit[char_('a') << 'b'])); | |
28 | BOOST_TEST(test("a*b*", delimit('*')[char_('a') << 'b'])); | |
29 | ||
30 | BOOST_TEST(test("ab c d", | |
31 | char_('a') << delimit[char_('b') << 'c'] << 'd')); | |
32 | BOOST_TEST(test("ab*c*d", | |
33 | char_('a') << delimit('*')[char_('b') << 'c'] << 'd')); | |
34 | ||
35 | BOOST_TEST(test_delimited("a b ", delimit[char_('a') << 'b'], char_(' '))); | |
36 | BOOST_TEST(test_delimited("a*b*", delimit('*')[char_('a') << 'b'], char_(' '))); | |
37 | ||
38 | BOOST_TEST(test_delimited("a b c d ", | |
39 | char_('a') << delimit[char_('b') << 'c'] << 'd', char_(' '))); | |
40 | BOOST_TEST(test_delimited("a b*c*d ", | |
41 | char_('a') << delimit('*')[char_('b') << 'c'] << 'd', char_(' '))); | |
42 | } | |
43 | ||
44 | { | |
45 | BOOST_TEST(test("ab", verbatim[char_('a') << 'b'])); | |
46 | BOOST_TEST(test("abcd", | |
47 | char_('a') << verbatim[char_('b') << 'c'] << 'd')); | |
48 | ||
49 | BOOST_TEST(test_delimited("ab ", | |
50 | verbatim[char_('a') << 'b'], char_(' '))); | |
51 | BOOST_TEST(test_delimited("a bc d ", | |
52 | char_('a') << verbatim[char_('b') << 'c'] << 'd', char_(' '))); | |
53 | } | |
54 | ||
55 | { | |
56 | BOOST_TEST(test("ab", no_delimit[char_('a') << 'b'])); | |
57 | BOOST_TEST(test("abcd", | |
58 | char_('a') << no_delimit[char_('b') << 'c'] << 'd')); | |
59 | ||
60 | BOOST_TEST(test_delimited("ab", | |
61 | no_delimit[char_('a') << 'b'], char_(' '))); | |
62 | BOOST_TEST(test_delimited("a bcd ", | |
63 | char_('a') << no_delimit[char_('b') << 'c'] << 'd', char_(' '))); | |
64 | } | |
65 | ||
66 | { | |
67 | // The doubled delimiters at the end are generated by the 'b' generator | |
68 | // and the verbatim[] directive. Currently, there is no easy way to | |
69 | // avoid this. | |
70 | BOOST_TEST(test("a b ", delimit[verbatim[delimit[char_('a') << 'b']]])); | |
71 | BOOST_TEST(test_delimited("a*b**", | |
72 | verbatim[delimit[char_('a') << 'b']], char_('*'))); | |
73 | } | |
74 | ||
75 | { | |
76 | karma::rule<output_iterator<char>::type, BOOST_TYPEOF(", ")> r = "abc"; | |
77 | BOOST_TEST(test("abc, ", delimit(", ")[r])); | |
78 | } | |
79 | ||
80 | return boost::report_errors(); | |
81 | } | |
82 |