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