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 
6 #include <boost/config/warning_disable.hpp>
7 #include <boost/detail/lightweight_test.hpp>
8 
9 #include <boost/spirit/include/karma_char.hpp>
10 #include <boost/spirit/include/karma_generate.hpp>
11 #include <boost/spirit/include/karma_directive.hpp>
12 #include <boost/spirit/include/karma_operator.hpp>
13 #include <boost/spirit/include/karma_nonterminal.hpp>
14 #include <boost/spirit/include/karma_string.hpp>
15 
16 #include "test.hpp"
17 
18 using namespace spirit_test;
19 
20 ///////////////////////////////////////////////////////////////////////////////
21 int
main()22 main()
23 {
24     using namespace boost::spirit;
25     using namespace boost::spirit::ascii;
26 
27     {
28         BOOST_TEST(test("a b ", delimit[char_('a') << 'b']));
29         BOOST_TEST(test("a*b*", delimit('*')[char_('a') << 'b']));
30 
31         BOOST_TEST(test("ab c d",
32             char_('a') << delimit[char_('b') << 'c'] << 'd'));
33         BOOST_TEST(test("ab*c*d",
34             char_('a') << delimit('*')[char_('b') << 'c'] << 'd'));
35 
36         BOOST_TEST(test_delimited("a b ", delimit[char_('a') << 'b'], char_(' ')));
37         BOOST_TEST(test_delimited("a*b*", delimit('*')[char_('a') << 'b'], char_(' ')));
38 
39         BOOST_TEST(test_delimited("a b c d ",
40             char_('a') << delimit[char_('b') << 'c'] << 'd', char_(' ')));
41         BOOST_TEST(test_delimited("a b*c*d ",
42             char_('a') << delimit('*')[char_('b') << 'c'] << 'd', char_(' ')));
43     }
44 
45     {
46         BOOST_TEST(test("ab", verbatim[char_('a') << 'b']));
47         BOOST_TEST(test("abcd",
48             char_('a') << verbatim[char_('b') << 'c'] << 'd'));
49 
50         BOOST_TEST(test_delimited("ab ",
51             verbatim[char_('a') << 'b'], char_(' ')));
52         BOOST_TEST(test_delimited("a bc d ",
53             char_('a') << verbatim[char_('b') << 'c'] << 'd', char_(' ')));
54     }
55 
56     {
57         BOOST_TEST(test("ab", no_delimit[char_('a') << 'b']));
58         BOOST_TEST(test("abcd",
59             char_('a') << no_delimit[char_('b') << 'c'] << 'd'));
60 
61         BOOST_TEST(test_delimited("ab",
62             no_delimit[char_('a') << 'b'], char_(' ')));
63         BOOST_TEST(test_delimited("a bcd ",
64             char_('a') << no_delimit[char_('b') << 'c'] << 'd', char_(' ')));
65     }
66 
67     {
68         // The doubled delimiters at the end are generated by the 'b' generator
69         // and the verbatim[] directive. Currently, there is no easy way to
70         // avoid this.
71         BOOST_TEST(test("a b  ", delimit[verbatim[delimit[char_('a') << 'b']]]));
72         BOOST_TEST(test_delimited("a*b**",
73             verbatim[delimit[char_('a') << 'b']], char_('*')));
74     }
75 
76     {
77         karma::rule<output_iterator<char>::type, BOOST_TYPEOF(", ")> r = "abc";
78         BOOST_TEST(test("abc, ", delimit(", ")[r]));
79     }
80 
81     return boost::report_errors();
82 }
83 
84