1 | /*============================================================================= |
2 | Copyright (c) 2001-2011 Joel de Guzman |
3 | http://spirit.sourceforge.net/ |
4 | |
5 | Distributed under the Boost Software License, Version 1.0. (See accompanying |
6 | file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
7 | =============================================================================*/ |
8 | #include <boost/spirit/include/qi_no_case.hpp> |
9 | |
10 | #include <boost/spirit/include/qi_char.hpp> |
11 | #include <boost/spirit/include/qi_string.hpp> |
12 | #include <boost/spirit/include/qi_action.hpp> |
13 | #include <boost/phoenix/core.hpp> |
14 | #include <boost/phoenix/operator.hpp> |
15 | |
16 | #include <iostream> |
17 | #include "test.hpp" |
18 | |
19 | int |
20 | main() |
21 | { |
22 | using spirit_test::test; |
23 | using spirit_test::test_attr; |
24 | using boost::spirit::qi::lit; |
25 | |
26 | { |
27 | using namespace boost::spirit::ascii; |
28 | BOOST_TEST(test("x" , no_case[char_])); |
29 | BOOST_TEST(test("X" , no_case[char_('x')])); |
30 | BOOST_TEST(test("X" , no_case[char_('X')])); |
31 | BOOST_TEST(test("x" , no_case[char_('X')])); |
32 | BOOST_TEST(test("x" , no_case[char_('x')])); |
33 | BOOST_TEST(!test("z" , no_case[char_('X')])); |
34 | BOOST_TEST(!test("z" , no_case[char_('x')])); |
35 | BOOST_TEST(test("x" , no_case[char_('a', 'z')])); |
36 | BOOST_TEST(test("X" , no_case[char_('a', 'z')])); |
37 | BOOST_TEST(!test("a" , no_case[char_('b', 'z')])); |
38 | BOOST_TEST(!test("z" , no_case[char_('a', 'y')])); |
39 | } |
40 | |
41 | { |
42 | using namespace boost::spirit::ascii; |
43 | BOOST_TEST(test("X" , no_case['x'])); |
44 | BOOST_TEST(test("X" , no_case['X'])); |
45 | BOOST_TEST(test("x" , no_case['X'])); |
46 | BOOST_TEST(test("x" , no_case['x'])); |
47 | BOOST_TEST(!test("z" , no_case['X'])); |
48 | BOOST_TEST(!test("z" , no_case['x'])); |
49 | } |
50 | |
51 | { |
52 | using namespace boost::spirit::iso8859_1; |
53 | BOOST_TEST(test("X" , no_case[char_("a-z" )])); |
54 | BOOST_TEST(!test("1" , no_case[char_("a-z" )])); |
55 | } |
56 | |
57 | { // test extended ASCII characters |
58 | using namespace boost::spirit::iso8859_1; |
59 | BOOST_TEST(test("\xC1" , no_case[char_('\xE1')])); |
60 | |
61 | BOOST_TEST(test("\xC9" , no_case[char_("\xE5-\xEF" )])); |
62 | BOOST_TEST(!test("\xFF" , no_case[char_("\xE5-\xEF" )])); |
63 | |
64 | BOOST_TEST(test("\xC1\xE1" , no_case[lit("\xE1\xC1" )])); |
65 | BOOST_TEST(test("\xE1\xE1" , no_case[no_case[lit("\xE1\xC1" )]])); |
66 | } |
67 | |
68 | { |
69 | using namespace boost::spirit::ascii; |
70 | BOOST_TEST(test("Bochi Bochi" , no_case[lit("bochi bochi" )])); |
71 | BOOST_TEST(test("BOCHI BOCHI" , no_case[lit("bochi bochi" )])); |
72 | BOOST_TEST(!test("Vavoo" , no_case[lit("bochi bochi" )])); |
73 | } |
74 | |
75 | { |
76 | // should work! |
77 | using namespace boost::spirit::ascii; |
78 | BOOST_TEST(test("x" , no_case[no_case[char_]])); |
79 | BOOST_TEST(test("x" , no_case[no_case[char_('x')]])); |
80 | BOOST_TEST(test("yabadabadoo" , no_case[no_case[lit("Yabadabadoo" )]])); |
81 | } |
82 | |
83 | { |
84 | using namespace boost::spirit::ascii; |
85 | BOOST_TEST(test("X" , no_case[alnum])); |
86 | BOOST_TEST(test("6" , no_case[alnum])); |
87 | BOOST_TEST(!test(":" , no_case[alnum])); |
88 | |
89 | BOOST_TEST(test("X" , no_case[lower])); |
90 | BOOST_TEST(test("x" , no_case[lower])); |
91 | BOOST_TEST(test("X" , no_case[upper])); |
92 | BOOST_TEST(test("x" , no_case[upper])); |
93 | BOOST_TEST(!test(":" , no_case[lower])); |
94 | BOOST_TEST(!test(":" , no_case[upper])); |
95 | } |
96 | |
97 | { |
98 | using namespace boost::spirit::iso8859_1; |
99 | BOOST_TEST(test("X" , no_case[alnum])); |
100 | BOOST_TEST(test("6" , no_case[alnum])); |
101 | BOOST_TEST(!test(":" , no_case[alnum])); |
102 | |
103 | BOOST_TEST(test("X" , no_case[lower])); |
104 | BOOST_TEST(test("x" , no_case[lower])); |
105 | BOOST_TEST(test("X" , no_case[upper])); |
106 | BOOST_TEST(test("x" , no_case[upper])); |
107 | BOOST_TEST(!test(":" , no_case[lower])); |
108 | BOOST_TEST(!test(":" , no_case[upper])); |
109 | } |
110 | |
111 | { |
112 | using namespace boost::spirit::standard; |
113 | BOOST_TEST(test("X" , no_case[alnum])); |
114 | BOOST_TEST(test("6" , no_case[alnum])); |
115 | BOOST_TEST(!test(":" , no_case[alnum])); |
116 | |
117 | BOOST_TEST(test("X" , no_case[lower])); |
118 | BOOST_TEST(test("x" , no_case[lower])); |
119 | BOOST_TEST(test("X" , no_case[upper])); |
120 | BOOST_TEST(test("x" , no_case[upper])); |
121 | BOOST_TEST(!test(":" , no_case[lower])); |
122 | BOOST_TEST(!test(":" , no_case[upper])); |
123 | } |
124 | |
125 | { |
126 | // chsets |
127 | namespace standard = boost::spirit::standard; |
128 | namespace standard_wide = boost::spirit::standard_wide; |
129 | |
130 | BOOST_TEST(test("x" , standard::no_case[standard::char_("a-z" )])); |
131 | BOOST_TEST(test("X" , standard::no_case[standard::char_("a-z" )])); |
132 | BOOST_TEST(test(L"X" , standard_wide::no_case[standard_wide::char_(L"a-z" )])); |
133 | BOOST_TEST(test(L"X" , standard_wide::no_case[standard_wide::char_(L"X" )])); |
134 | } |
135 | |
136 | { |
137 | using namespace boost::spirit::standard; |
138 | std::string s("bochi bochi" ); |
139 | BOOST_TEST(test("Bochi Bochi" , no_case[lit(s.c_str())])); |
140 | BOOST_TEST(test("Bochi Bochi" , no_case[lit(s)])); |
141 | BOOST_TEST(test("Bochi Bochi" , no_case[s.c_str()])); |
142 | BOOST_TEST(test("Bochi Bochi" , no_case[s])); |
143 | } |
144 | |
145 | { // lazy no_case chars |
146 | |
147 | using namespace boost::spirit::ascii; |
148 | |
149 | using boost::phoenix::val; |
150 | using boost::phoenix::ref; |
151 | using boost::spirit::_1; |
152 | |
153 | BOOST_TEST((test("X" , no_case[val('x')]))); |
154 | BOOST_TEST((test("h" , no_case[char_(val('a'), val('n'))]))); |
155 | BOOST_TEST(test("0" , no_case[char_(val("a-z0-9" ))])); |
156 | |
157 | char ch; // make sure lazy chars have an attribute |
158 | BOOST_TEST(test("x" , no_case[char_(val('x'))][ref(ch) = _1])); |
159 | BOOST_TEST(ch == 'x'); |
160 | } |
161 | |
162 | { // lazy no_case lits |
163 | |
164 | using namespace boost::spirit::ascii; |
165 | using boost::phoenix::val; |
166 | |
167 | BOOST_TEST(test("Bochi Bochi" , no_case[val("bochi bochi" )])); |
168 | BOOST_TEST(test("BOCHI BOCHI" , no_case[val("bochi bochi" )])); |
169 | BOOST_TEST(!test("Vavoo" , no_case[val("bochi bochi" )])); |
170 | } |
171 | |
172 | return boost::report_errors(); |
173 | } |
174 | |