]>
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 | ||
7c673cae | 6 | #include <boost/spirit/include/karma_char.hpp> |
1e59de90 | 7 | |
7c673cae FG |
8 | #include <boost/spirit/include/karma_generate.hpp> |
9 | #include <boost/spirit/include/karma_action.hpp> | |
10 | #include <boost/spirit/include/karma_phoenix_attributes.hpp> | |
11 | ||
1e59de90 TL |
12 | #include <boost/phoenix/core.hpp> |
13 | #include <boost/phoenix/operator.hpp> | |
14 | #include <boost/phoenix/statement.hpp> | |
7c673cae FG |
15 | |
16 | #include "test.hpp" | |
17 | ||
18 | using namespace spirit_test; | |
19 | ||
20 | /////////////////////////////////////////////////////////////////////////////// | |
21 | int | |
22 | main() | |
23 | { | |
24 | using namespace boost::spirit; | |
25 | using namespace boost::phoenix; | |
26 | ||
27 | { | |
28 | using namespace boost::spirit::ascii; | |
29 | ||
30 | BOOST_TEST(test(" ", space)); | |
31 | BOOST_TEST(test(L" ", space)); | |
32 | BOOST_TEST(!test("\t", space)); | |
33 | BOOST_TEST(!test(L"\t", space)); | |
34 | ||
35 | BOOST_TEST(test(" ", space, ' ')); | |
36 | BOOST_TEST(test(L" ", space, L' ')); | |
37 | BOOST_TEST(test("\t", space, '\t')); | |
38 | BOOST_TEST(test(L"\t", space, L'\t')); | |
39 | ||
40 | BOOST_TEST(!test("", space, 'x')); | |
41 | BOOST_TEST(!test(L"", space, L'x')); | |
42 | ||
43 | BOOST_TEST(!test(" ", ~space, ' ')); | |
44 | BOOST_TEST(!test(L" ", ~space, L' ')); | |
45 | ||
46 | BOOST_TEST(test("x", ~space, 'x')); | |
47 | BOOST_TEST(test(L"x", ~space, L'x')); | |
48 | } | |
49 | ||
50 | { | |
51 | using namespace boost::spirit::standard_wide; | |
52 | ||
53 | BOOST_TEST(test(" ", space)); | |
54 | BOOST_TEST(test(L" ", space)); | |
55 | BOOST_TEST(!test("\t", space)); | |
56 | BOOST_TEST(!test(L"\t", space)); | |
57 | ||
58 | BOOST_TEST(test(" ", space, ' ')); | |
59 | BOOST_TEST(test(L" ", space, L' ')); | |
60 | BOOST_TEST(test("\t", space, '\t')); | |
61 | BOOST_TEST(test(L"\t", space, L'\t')); | |
62 | ||
63 | BOOST_TEST(!test("", space, 'x')); | |
64 | BOOST_TEST(!test(L"", space, L'x')); | |
65 | } | |
66 | ||
67 | { | |
68 | using namespace boost::spirit::ascii; | |
69 | ||
70 | BOOST_TEST(test_delimited("x ", 'x', ' ')); | |
71 | BOOST_TEST(test_delimited(L"x ", L'x', L' ')); | |
72 | BOOST_TEST(!test_delimited("x ", 'y', ' ')); | |
73 | BOOST_TEST(!test_delimited(L"x ", L'y', L' ')); | |
74 | ||
75 | BOOST_TEST(test_delimited("x ", 'x', ' ')); | |
76 | BOOST_TEST(test_delimited(L"x ", L'x', L' ')); | |
77 | BOOST_TEST(!test_delimited("x ", 'y', ' ')); | |
78 | BOOST_TEST(!test_delimited(L"x ", L'y', L' ')); | |
79 | ||
80 | BOOST_TEST(test_delimited("x ", char_, 'x', ' ')); | |
81 | BOOST_TEST(test_delimited(L"x ", char_, L'x', L' ')); | |
82 | BOOST_TEST(!test_delimited("x ", char_, 'y', ' ')); | |
83 | BOOST_TEST(!test_delimited(L"x ", char_, L'y', L' ')); | |
84 | ||
85 | BOOST_TEST(test_delimited("x ", char_('x'), ' ')); | |
86 | BOOST_TEST(!test_delimited("x ", char_('y'), ' ')); | |
87 | ||
88 | BOOST_TEST(test_delimited("x ", char_('x'), 'x', ' ')); | |
89 | BOOST_TEST(!test_delimited("", char_('y'), 'x', ' ')); | |
90 | ||
91 | BOOST_TEST(test_delimited("x ", char_("x"), ' ')); | |
92 | ||
93 | #if defined(KARMA_FAIL_COMPILATION) | |
94 | BOOST_TEST(test_delimited("x ", char_, ' ')); // anychar without a parameter doesn't make any sense | |
95 | #endif | |
96 | } | |
97 | ||
98 | { // pre-delimiting | |
99 | { | |
100 | std::string generated; | |
101 | std::back_insert_iterator<std::string> it(generated); | |
102 | BOOST_TEST(karma::generate_delimited(it, '_', '^' | |
103 | , karma::delimit_flag::predelimit)); | |
104 | BOOST_TEST(generated == "^_^"); | |
105 | } | |
106 | { | |
107 | using namespace boost::spirit::standard_wide; | |
108 | std::basic_string<wchar_t> generated; | |
109 | std::back_insert_iterator<std::basic_string<wchar_t> > it(generated); | |
110 | BOOST_TEST(karma::generate_delimited(it, char_, L'.' | |
111 | , karma::delimit_flag::predelimit, L'x')); | |
112 | BOOST_TEST(generated == L".x."); | |
113 | } | |
114 | } | |
115 | ||
116 | // action tests | |
117 | { | |
118 | using namespace boost::spirit::ascii; | |
119 | ||
120 | BOOST_TEST(test("x", char_[_1 = val('x')])); | |
121 | BOOST_TEST(!test("x", char_[_1 = val('y')])); | |
122 | } | |
123 | ||
7c673cae FG |
124 | // yes, we can use phoenix expressions as attributes as well |
125 | // but only if we include karma_phoenix_attributes.hpp | |
126 | { | |
127 | namespace ascii = boost::spirit::ascii; | |
128 | namespace phoenix = boost::phoenix; | |
129 | ||
130 | BOOST_TEST(test("x", ascii::char_, phoenix::val('x'))); | |
131 | ||
132 | char c = 'x'; | |
133 | BOOST_TEST(test("x", ascii::char_, phoenix::ref(c))); | |
134 | BOOST_TEST(test("y", ascii::char_, ++phoenix::ref(c))); | |
135 | } | |
7c673cae FG |
136 | |
137 | { | |
138 | namespace ascii = boost::spirit::ascii; | |
139 | namespace wide = boost::spirit::standard_wide; | |
140 | ||
141 | boost::optional<char> v ('x'); | |
142 | boost::optional<wchar_t> w (L'x'); | |
143 | ||
144 | BOOST_TEST(test("x", ascii::char_, v)); | |
145 | BOOST_TEST(test(L"x", wide::char_, w)); | |
146 | BOOST_TEST(test("x", ascii::char_('x'), v)); | |
147 | BOOST_TEST(test(L"x", wide::char_(L'x'), w)); | |
148 | BOOST_TEST(!test("", ascii::char_('y'), v)); | |
149 | BOOST_TEST(!test(L"", wide::char_(L'y'), w)); | |
150 | } | |
151 | ||
152 | return boost::report_errors(); | |
153 | } |