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
6#include <boost/spirit/include/qi_parse_attr.hpp>
7
8#include <boost/spirit/include/qi_char.hpp>
9#include <boost/spirit/include/qi_operator.hpp>
10
11#include "test_attr.hpp"
12
13#if SPIRIT_ARGUMENTS_LIMIT < 10
14# error SPIRIT_ARGUMENTS_LIMIT must be at least 10 to run the test
15#endif
16
17using namespace spirit_test;
18
19///////////////////////////////////////////////////////////////////////////////
20int main()
21{
22 using namespace boost::spirit;
23
24 {
25 using namespace boost::spirit::ascii;
26
27 BOOST_TEST(test("1", char_, '1'));
28 BOOST_TEST(test("12", char_ >> char_, '1', '2'));
29 BOOST_TEST(test("123", char_ >> char_ >> char_, '1', '2', '3'));
30 BOOST_TEST(test("1234"
31 , char_ >> char_ >> char_ >> char_
32 , '1', '2', '3', '4'));
33 BOOST_TEST(test("12345"
34 , char_ >> char_ >> char_ >> char_ >> char_
35 , '1', '2', '3', '4', '5'));
36 BOOST_TEST(test("123456"
37 , char_ >> char_ >> char_ >> char_ >> char_ >> char_
38 , '1', '2', '3', '4', '5', '6'));
39 BOOST_TEST(test("1234567"
40 , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
41 , '1', '2', '3', '4', '5', '6', '7'));
42 BOOST_TEST(test("12345678"
43 , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
44 , '1', '2', '3', '4', '5', '6', '7', '8'));
45 BOOST_TEST(test("123456789"
46 , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
47 , '1', '2', '3', '4', '5', '6', '7', '8', '9'));
48 BOOST_TEST(test("1234567890"
49 , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
50 , '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'));
51 }
52
53 {
54 using namespace boost::spirit::ascii;
55
56 BOOST_TEST(test_skipped(" 1 ", char_, space, '1'));
57 BOOST_TEST(test_skipped(" 1 2 "
58 , char_ >> char_, space, '1', '2'));
59 BOOST_TEST(test_skipped(" 1 2 3 "
60 , char_ >> char_ >> char_, space, '1', '2', '3'));
61 BOOST_TEST(test_skipped(" 1 2 3 4 "
62 , char_ >> char_ >> char_ >> char_
63 , space, '1', '2', '3', '4'));
64 BOOST_TEST(test_skipped(" 1 2 3 4 5 "
65 , char_ >> char_ >> char_ >> char_ >> char_
66 , space, '1', '2', '3', '4', '5'));
67 BOOST_TEST(test_skipped(" 1 2 3 4 5 6 "
68 , char_ >> char_ >> char_ >> char_ >> char_ >> char_
69 , space, '1', '2', '3', '4', '5', '6'));
70 BOOST_TEST(test_skipped(" 1 2 3 4 5 6 7 "
71 , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
72 , space, '1', '2', '3', '4', '5', '6', '7'));
73 BOOST_TEST(test_skipped(" 1 2 3 4 5 6 7 8 "
74 , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
75 , space, '1', '2', '3', '4', '5', '6', '7', '8'));
76 BOOST_TEST(test_skipped(" 1 2 3 4 5 6 7 8 9 "
77 , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
78 , space, '1', '2', '3', '4', '5', '6', '7', '8', '9'));
79 BOOST_TEST(test_skipped(" 1 2 3 4 5 6 7 8 9 0 "
80 , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
81 , space, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'));
82 }
83
84 {
85 using namespace boost::spirit::ascii;
86 using boost::spirit::qi::skip_flag;
87
88 BOOST_TEST(test_postskipped(" 1 ", char_, space
89 , skip_flag::postskip, '1'));
90 BOOST_TEST(test_postskipped(" 1 2 "
91 , char_ >> char_, space, skip_flag::postskip
92 , '1', '2'));
93 BOOST_TEST(test_postskipped(" 1 2 3 "
94 , char_ >> char_ >> char_, space
95 , skip_flag::postskip, '1', '2', '3'));
96 BOOST_TEST(test_postskipped(" 1 2 3 4 "
97 , char_ >> char_ >> char_ >> char_
98 , space, skip_flag::postskip, '1', '2', '3', '4'));
99 BOOST_TEST(test_postskipped(" 1 2 3 4 5 "
100 , char_ >> char_ >> char_ >> char_ >> char_
101 , space, skip_flag::postskip, '1', '2', '3', '4', '5'));
102 BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 "
103 , char_ >> char_ >> char_ >> char_ >> char_ >> char_
104 , space, skip_flag::postskip
105 , '1', '2', '3', '4', '5', '6'));
106 BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 7 "
107 , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
108 , space, skip_flag::postskip
109 , '1', '2', '3', '4', '5', '6', '7'));
110 BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 7 8 "
111 , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
112 , space, skip_flag::postskip
113 , '1', '2', '3', '4', '5', '6', '7', '8'));
114 BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 7 8 9 "
115 , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
116 , space, skip_flag::postskip
117 , '1', '2', '3', '4', '5', '6', '7', '8', '9'));
118 BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 7 8 9 0 "
119 , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
120 , space, skip_flag::postskip
121 , '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'));
122 }
123
124 {
125 using namespace boost::spirit::ascii;
126 using boost::spirit::qi::skip_flag;
127
128 BOOST_TEST(test_postskipped(" 1", char_, space
129 , skip_flag::dont_postskip, '1'));
130 BOOST_TEST(test_postskipped(" 1 2"
131 , char_ >> char_, space, skip_flag::dont_postskip
132 , '1', '2'));
133 BOOST_TEST(test_postskipped(" 1 2 3"
134 , char_ >> char_ >> char_, space
135 , skip_flag::dont_postskip, '1', '2', '3'));
136 BOOST_TEST(test_postskipped(" 1 2 3 4"
137 , char_ >> char_ >> char_ >> char_
138 , space, skip_flag::dont_postskip, '1', '2', '3', '4'));
139 BOOST_TEST(test_postskipped(" 1 2 3 4 5"
140 , char_ >> char_ >> char_ >> char_ >> char_
141 , space, skip_flag::dont_postskip, '1', '2', '3', '4', '5'));
142 BOOST_TEST(test_postskipped(" 1 2 3 4 5 6"
143 , char_ >> char_ >> char_ >> char_ >> char_ >> char_
144 , space, skip_flag::dont_postskip
145 , '1', '2', '3', '4', '5', '6'));
146 BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 7"
147 , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
148 , space, skip_flag::dont_postskip
149 , '1', '2', '3', '4', '5', '6', '7'));
150 BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 7 8"
151 , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
152 , space, skip_flag::dont_postskip
153 , '1', '2', '3', '4', '5', '6', '7', '8'));
154 BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 7 8 9"
155 , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
156 , space, skip_flag::dont_postskip
157 , '1', '2', '3', '4', '5', '6', '7', '8', '9'));
158 BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 7 8 9 0"
159 , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
160 , space, skip_flag::dont_postskip
161 , '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'));
162 }
163
164 return boost::report_errors();
165}
166
167

source code of boost/libs/spirit/test/qi/parse_attr.cpp