1 // Copyright (c) 2001-2010 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 #include <boost/detail/workaround.hpp>
9
10 #include <boost/spirit/include/karma_char.hpp>
11 #include <boost/spirit/include/karma_string.hpp>
12 #include <boost/spirit/include/karma_generate.hpp>
13 #include <boost/spirit/include/karma_directive.hpp>
14
15 #include <boost/phoenix/core/value.hpp>
16
17 #include "test.hpp"
18
19 using namespace spirit_test;
20
21 ///////////////////////////////////////////////////////////////////////////////
22 int
main()23 main()
24 {
25 using namespace boost::spirit;
26
27 {
28 using namespace boost::spirit::standard_wide;
29
30 BOOST_TEST(test(L"x", lower[L'X']));
31 BOOST_TEST(test(L"x", lower[L'x']));
32
33 BOOST_TEST(test(L"x", lower[char_], L'X'));
34 BOOST_TEST(test(L"x", lower[char_], L'x'));
35 BOOST_TEST(test(L"x", lower[char_(L'X')]));
36 BOOST_TEST(test(L"x", lower[char_(L'x')]));
37
38 BOOST_TEST(test(L" ", lower[space]));
39 BOOST_TEST(test(L"\t", lower[space], L'\t'));
40
41 BOOST_TEST(test(L"x", lower[lower[L'X']]));
42 BOOST_TEST(test(L"x", lower[lower[L'x']]));
43
44 BOOST_TEST(test(L"x", lower[lower[char_]], L'X'));
45 BOOST_TEST(test(L"x", lower[lower[char_]], L'x'));
46 BOOST_TEST(test(L"x", lower[lower[char_(L'X')]]));
47 BOOST_TEST(test(L"x", lower[lower[char_(L'x')]]));
48
49 BOOST_TEST(test(L" ", lower[lower[space]]));
50 BOOST_TEST(test(L"\t", lower[lower[space]], L'\t'));
51
52 BOOST_TEST(test(L"X", upper[lower[L'X']]));
53 BOOST_TEST(test(L"X", upper[lower[L'x']]));
54
55 BOOST_TEST(test(L"X", upper[lower[char_]], L'X'));
56 BOOST_TEST(test(L"X", upper[lower[char_]], L'x'));
57 BOOST_TEST(test(L"X", upper[lower[char_(L'X')]]));
58 BOOST_TEST(test(L"X", upper[lower[char_(L'x')]]));
59
60 BOOST_TEST(test(L" ", upper[lower[space]]));
61 BOOST_TEST(test(L"\t", upper[lower[space]], L'\t'));
62
63 BOOST_TEST(test(L"X", upper[L'X']));
64 BOOST_TEST(test(L"X", upper[L'x']));
65
66 BOOST_TEST(test(L"X", upper[char_], L'X'));
67 BOOST_TEST(test(L"X", upper[char_], L'x'));
68 BOOST_TEST(test(L"X", upper[char_(L'X')]));
69 BOOST_TEST(test(L"X", upper[char_(L'x')]));
70
71 BOOST_TEST(test(L" ", upper[space]));
72 BOOST_TEST(test(L"\t", upper[space], L'\t'));
73
74 BOOST_TEST(test(L"x", lower[upper[L'X']]));
75 BOOST_TEST(test(L"x", lower[upper[L'x']]));
76
77 BOOST_TEST(test(L"x", lower[upper[char_]], L'X'));
78 BOOST_TEST(test(L"x", lower[upper[char_]], L'x'));
79 BOOST_TEST(test(L"x", lower[upper[char_(L'X')]]));
80 BOOST_TEST(test(L"x", lower[upper[char_(L'x')]]));
81
82 BOOST_TEST(test(L" ", lower[upper[space]]));
83 BOOST_TEST(test(L"\t", lower[upper[space]], L'\t'));
84
85 BOOST_TEST(test(L"X", upper[upper[L'X']]));
86 BOOST_TEST(test(L"X", upper[upper[L'x']]));
87
88 BOOST_TEST(test(L"X", upper[upper[char_]], L'X'));
89 BOOST_TEST(test(L"X", upper[upper[char_]], L'x'));
90 BOOST_TEST(test(L"X", upper[upper[char_(L'X')]]));
91 BOOST_TEST(test(L"X", upper[upper[char_(L'x')]]));
92
93 BOOST_TEST(test(L" ", upper[upper[space]]));
94 BOOST_TEST(test(L"\t", upper[upper[space]], L'\t'));
95 }
96
97 { // test extended ASCII characters
98 using namespace boost::spirit::iso8859_1;
99
100 BOOST_TEST(test("\xE4\xE4", lower["\xC4\xE4"]));
101 BOOST_TEST(test("\xE4\xE4", lower["\xC4\xE4"]));
102
103 BOOST_TEST(test("\xC4\xC4", upper["\xC4\xE4"]));
104 BOOST_TEST(test("\xC4\xC4", upper["\xC4\xE4"]));
105 }
106
107 {
108 using namespace boost::spirit::ascii;
109 using boost::phoenix::val;
110
111 BOOST_TEST(test("x", lower[val('X')]));
112 BOOST_TEST(test("x", lower[val('x')]));
113 }
114
115 return boost::report_errors();
116 }
117