]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/support/regression_multi_pass_error_handler.cpp
1 // Copyright (c) 2001-2010 Hartmut Kaiser
2 // Copyright (c) 2011 Laurent Gomila
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)
7 #include <boost/spirit/include/qi.hpp>
8 #include <boost/phoenix/operator.hpp>
9 #include <boost/spirit/include/support_multi_pass.hpp>
10 #include <boost/core/lightweight_test.hpp>
16 using namespace boost::spirit
;
17 using namespace boost
;
22 std::string
input("5x");
23 std::istringstream
iss(input
);
25 typedef std::istreambuf_iterator
<char> base_iterator_type
;
26 typedef multi_pass
<base_iterator_type
> iterator_type
;
28 iterator_type first
= make_default_multi_pass(base_iterator_type(iss
));
29 iterator_type last
= make_default_multi_pass(base_iterator_type());
31 std::ostringstream oss
;
33 qi::rule
<iterator_type
> r
= qi::int_
> qi::int_
;
34 qi::on_error
<qi::fail
>(r
, phoenix::ref(oss
) << phoenix::val("error"));
36 BOOST_TEST(!qi::parse(first
, last
, r
));
37 BOOST_TEST(oss
.str() == "error");
41 std::string
input("5x");
42 std::istringstream
iss(input
);
44 typedef std::istreambuf_iterator
<char> base_iterator_type
;
45 typedef multi_pass
<base_iterator_type
> iterator_type
;
47 iterator_type first
= make_default_multi_pass(base_iterator_type(iss
));
48 iterator_type last
= make_default_multi_pass(base_iterator_type());
50 std::ostringstream oss
;
52 qi::rule
<iterator_type
> r1
= qi::int_
> qi::int_
;
53 qi::rule
<iterator_type
> r2
= qi::int_
> qi::char_
;
54 qi::on_error
<qi::fail
>(r1
, phoenix::ref(oss
) << phoenix::val("error in r1"));
55 qi::on_error
<qi::fail
>(r2
, phoenix::ref(oss
) << phoenix::val("error in r2"));
57 BOOST_TEST(qi::parse(first
, last
, r1
| r2
));
58 BOOST_TEST(oss
.str() == "error in r1");
61 return boost::report_errors();