| // Copyright (c) 2001-2010 Hartmut Kaiser |
| // |
| // 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) |
| |
| //#define KARMA_FAIL_COMPILATION |
| |
| #include <boost/config/warning_disable.hpp> |
| #include <boost/detail/lightweight_test.hpp> |
| |
| #include <boost/spirit/include/karma_char.hpp> |
| #include <boost/spirit/include/karma_generate.hpp> |
| #include <boost/spirit/include/karma_directive.hpp> |
| #include <boost/spirit/include/karma_operator.hpp> |
| #include <boost/spirit/include/karma_nonterminal.hpp> |
| #include <boost/spirit/include/karma_string.hpp> |
| |
| #include "test.hpp" |
| |
| using namespace spirit_test; |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| int |
| main() |
| { |
| using namespace boost::spirit; |
| using namespace boost::spirit::ascii; |
| |
| { |
| BOOST_TEST(test("a b ", delimit[char_('a') << 'b'])); |
| BOOST_TEST(test("a*b*", delimit('*')[char_('a') << 'b'])); |
| |
| BOOST_TEST(test("ab c d", |
| char_('a') << delimit[char_('b') << 'c'] << 'd')); |
| BOOST_TEST(test("ab*c*d", |
| char_('a') << delimit('*')[char_('b') << 'c'] << 'd')); |
| |
| BOOST_TEST(test_delimited("a b ", delimit[char_('a') << 'b'], char_(' '))); |
| BOOST_TEST(test_delimited("a*b*", delimit('*')[char_('a') << 'b'], char_(' '))); |
| |
| BOOST_TEST(test_delimited("a b c d ", |
| char_('a') << delimit[char_('b') << 'c'] << 'd', char_(' '))); |
| BOOST_TEST(test_delimited("a b*c*d ", |
| char_('a') << delimit('*')[char_('b') << 'c'] << 'd', char_(' '))); |
| } |
| |
| { |
| BOOST_TEST(test("ab", verbatim[char_('a') << 'b'])); |
| BOOST_TEST(test("abcd", |
| char_('a') << verbatim[char_('b') << 'c'] << 'd')); |
| |
| BOOST_TEST(test_delimited("ab ", |
| verbatim[char_('a') << 'b'], char_(' '))); |
| BOOST_TEST(test_delimited("a bc d ", |
| char_('a') << verbatim[char_('b') << 'c'] << 'd', char_(' '))); |
| } |
| |
| { |
| BOOST_TEST(test("ab", no_delimit[char_('a') << 'b'])); |
| BOOST_TEST(test("abcd", |
| char_('a') << no_delimit[char_('b') << 'c'] << 'd')); |
| |
| BOOST_TEST(test_delimited("ab", |
| no_delimit[char_('a') << 'b'], char_(' '))); |
| BOOST_TEST(test_delimited("a bcd ", |
| char_('a') << no_delimit[char_('b') << 'c'] << 'd', char_(' '))); |
| } |
| |
| { |
| // The doubled delimiters at the end are generated by the 'b' generator |
| // and the verbatim[] directive. Currently, there is no easy way to |
| // avoid this. |
| BOOST_TEST(test("a b ", delimit[verbatim[delimit[char_('a') << 'b']]])); |
| BOOST_TEST(test_delimited("a*b**", |
| verbatim[delimit[char_('a') << 'b']], char_('*'))); |
| } |
| |
| { |
| karma::rule<output_iterator<char>::type, BOOST_TYPEOF(", ")> r = "abc"; |
| BOOST_TEST(test("abc, ", delimit(", ")[r])); |
| } |
| |
| return boost::report_errors(); |
| } |
| |