]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/x3/expect.cpp
1 /*=============================================================================
2 Copyright (c) 2001-2013 Joel de Guzman
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 =============================================================================*/
7 #include <boost/detail/lightweight_test.hpp>
8 #include <boost/spirit/home/x3.hpp>
9 #include <boost/fusion/include/vector.hpp>
10 #include <boost/fusion/include/at.hpp>
19 using namespace boost::spirit
;
20 using namespace boost::spirit::x3::ascii
;
21 using boost::spirit::x3::lit
;
22 using boost::spirit::x3::expect
;
23 using spirit_test::test
;
24 using spirit_test::test_attr
;
25 using boost::spirit::x3::expectation_failure
;
30 BOOST_TEST((test("aa", char_
>> expect
[char_
])));
31 BOOST_TEST((test("aaa", char_
>> expect
[char_
>> char_('a')])));
32 BOOST_TEST((test("xi", char_('x') >> expect
[char_('i')])));
33 BOOST_TEST((!test("xi", char_('y') >> expect
[char_('o')]))); // should not throw!
34 BOOST_TEST((test("xin", char_('x') >> expect
[char_('i') >> char_('n')])));
35 BOOST_TEST((!test("xi", char_('x') >> expect
[char_('o')])));
37 catch (expectation_failure
<char const*> const& x
)
39 std::cout
<< "expected: " << x
.which();
40 std::cout
<< " got: \"" << x
.where() << '"' << std::endl
;
47 BOOST_TEST((test("aa", char_
> char_
)));
48 BOOST_TEST((test("aaa", char_
> char_
> char_('a'))));
49 BOOST_TEST((test("xi", char_('x') > char_('i'))));
50 BOOST_TEST((!test("xi", char_('y') > char_('o')))); // should not throw!
51 BOOST_TEST((test("xin", char_('x') > char_('i') > char_('n'))));
52 BOOST_TEST((!test("xi", char_('x') > char_('o'))));
54 catch (expectation_failure
<char const*> const& x
)
56 std::cout
<< "expected: " << x
.which();
57 std::cout
<< " got: \"" << x
.where() << '"' << std::endl
;
64 BOOST_TEST((!test("ay:a", char_
> char_('x') >> ':' > 'a')));
66 catch (expectation_failure
<char const*> const& x
)
68 std::cout
<< "expected: " << x
.which();
69 std::cout
<< " got: \"" << x
.where() << '"' << std::endl
;
73 #if defined(BOOST_CLANG)
74 #pragma clang diagnostic push
75 #pragma clang diagnostic ignored "-Woverloaded-shift-op-parentheses"
77 { // Test that attributes with > (sequences) work just like >> (sequences)
79 using boost::fusion::vector
;
80 using boost::fusion::at_c
;
83 vector
<char, char, char> attr
;
84 BOOST_TEST((test_attr(" a\n b\n c",
85 char_
> char_
> char_
, attr
, space
)));
86 BOOST_TEST((at_c
<0>(attr
) == 'a'));
87 BOOST_TEST((at_c
<1>(attr
) == 'b'));
88 BOOST_TEST((at_c
<2>(attr
) == 'c'));
92 vector
<char, char, char> attr
;
93 BOOST_TEST((test_attr(" a\n b\n c",
94 char_
> char_
>> char_
, attr
, space
)));
95 BOOST_TEST((at_c
<0>(attr
) == 'a'));
96 BOOST_TEST((at_c
<1>(attr
) == 'b'));
97 BOOST_TEST((at_c
<2>(attr
) == 'c'));
101 vector
<char, char, char> attr
;
102 BOOST_TEST((test_attr(" a, b, c",
103 char_
>> ',' > char_
>> ',' > char_
, attr
, space
)));
104 BOOST_TEST((at_c
<0>(attr
) == 'a'));
105 BOOST_TEST((at_c
<1>(attr
) == 'b'));
106 BOOST_TEST((at_c
<2>(attr
) == 'c'));
111 BOOST_TEST((test_attr("'azaaz'",
112 "'" > *(char_("a") | char_("z")) > "'", attr
, space
)));
113 BOOST_TEST(attr
== "azaaz");
116 #if defined(BOOST_CLANG)
117 #pragma clang diagnostic pop
123 BOOST_TEST((test(" a a", char_
> char_
, space
)));
124 BOOST_TEST((test(" x i", char_('x') > char_('i'), space
)));
125 BOOST_TEST((!test(" x i", char_('x') > char_('o'), space
)));
127 catch (expectation_failure
<char const*> const& x
)
129 std::cout
<< "expected: " << x
.which();
130 std::cout
<< " got: \"" << x
.where() << '"' << std::endl
;
137 BOOST_TEST((test("bar", expect
[lit("foo")])));
139 catch (expectation_failure
<char const*> const& x
)
141 std::cout
<< "expected: " << x
.which();
142 std::cout
<< " got: \"" << x
.where() << '"' << std::endl
;
146 return boost::report_errors();