1 // (C) Copyright Gennadiy Rozental 2001-2015.
2 // Distributed under the Boost Software License, Version 1.0.
3 // (See accompanying file LICENSE_1_0.txt or copy at
4 // http://www.boost.org/LICENSE_1_0.txt)
5
6 // See http://www.boost.org/libs/test for the library home page.
7 //
8 // File : $RCSfile$
9 //
10 // Version : $Revision$
11 //
12 // Description : config_file_iterator unit test
13 // *****************************************************************************
14
15 // Boost.Test
16 #define BOOST_TEST_MODULE config_file_iterator unit test
17 #include <boost/test/unit_test.hpp>
18 namespace utf = boost::unit_test;
19
20 // Boost.Runtime.Parameter
21 #include <boost/test/utils/runtime/file/config_file_iterator.hpp>
22 #include <boost/test/utils/runtime/env/variable.hpp>
23
24 namespace rt = boost::runtime;
25 namespace file = boost::runtime::file;
26 namespace env = boost::runtime::environment;
27
28 BOOST_TEST_DONT_PRINT_LOG_VALUE(file::config_file_iterator)
29
30 //____________________________________________________________________________//
31
BOOST_AUTO_TEST_CASE(test_constructor)32 BOOST_AUTO_TEST_CASE( test_constructor )
33 {
34 {
35 file::config_file_iterator cfi( NULL );
36
37 BOOST_TEST( cfi == file::config_file_iterator() );
38 }
39
40 {
41 file::config_file_iterator cfi( "" );
42
43 BOOST_TEST( cfi == file::config_file_iterator() );
44 }
45
46 {
47 rt::cstring cs( "" );
48 file::config_file_iterator cfi( cs );
49
50 BOOST_TEST( cfi == file::config_file_iterator() );
51 }
52
53 {
54 std::string ds;
55 file::config_file_iterator cfi( ds );
56
57 BOOST_TEST( cfi == file::config_file_iterator() );
58 }
59
60 {
61 BOOST_CHECK_THROW( file::config_file_iterator( "!@#%#$%#$^#$^" ), rt::logic_error );
62 }
63
64 {
65 file::config_file_iterator cfi( "test_files/test_constructor.cfg" );
66
67 BOOST_TEST( cfi != file::config_file_iterator() );
68 BOOST_TEST( *cfi == "{ abc d }" );
69
70 cfi = cfi;
71
72 BOOST_TEST( cfi != file::config_file_iterator() );
73 BOOST_TEST( *cfi == "{ abc d }" );
74
75 file::config_file_iterator cfi1( cfi );
76
77 BOOST_TEST( cfi == file::config_file_iterator() );
78 BOOST_TEST( *cfi1 == "{ abc d }" );
79
80 ++cfi1;
81 BOOST_TEST( *cfi1 == "{ d" );
82
83 cfi = cfi1;
84 BOOST_TEST( cfi != file::config_file_iterator() );
85 BOOST_TEST( *cfi == "{ d" );
86
87 ++cfi;
88 BOOST_TEST( *cfi == " dsfg" );
89 }
90 }
91
92 //____________________________________________________________________________//
93
BOOST_AUTO_TEST_CASE(test_comments_and_blanks)94 BOOST_AUTO_TEST_CASE( test_comments_and_blanks )
95 {
96 file::config_file_iterator cfi( "test_files/test_comments_and_blanks.cfg" );
97
98 BOOST_TEST( cfi != file::config_file_iterator() );
99 BOOST_TEST( *cfi == "1" ); ++cfi;
100 BOOST_TEST( *cfi == "2" ); ++cfi;
101 BOOST_TEST( *cfi == "4" ); ++cfi;
102 BOOST_TEST( *cfi == "3" ); ++cfi;
103 BOOST_TEST( cfi == file::config_file_iterator() );
104 }
105
106 //____________________________________________________________________________//
107
BOOST_AUTO_TEST_CASE(test_broken_line)108 BOOST_AUTO_TEST_CASE( test_broken_line )
109 {
110 BOOST_CHECK_THROW( file::config_file_iterator( "test_files/test_incomplete_broken_line.cfg" ), rt::logic_error );
111
112 {
113 file::config_file_iterator cfi( "test_files/test_broken_line.cfg" );
114
115 BOOST_TEST( cfi != file::config_file_iterator() );
116 BOOST_TEST( *cfi == "qwerty" ); ++cfi;
117 BOOST_TEST( *cfi == "123 \\11" ); ++cfi;
118 BOOST_TEST( *cfi == " 23" ); ++cfi;
119 BOOST_TEST( *cfi == "xcv \\ dfgsd" ); ++cfi;
120 BOOST_TEST( *cfi == "qwe" ); ++cfi;
121 BOOST_TEST( cfi != file::config_file_iterator() );
122 BOOST_TEST( *cfi == "1 \t23" ); ++cfi;
123 BOOST_TEST( *cfi == "34 34" ); ++cfi;
124 BOOST_TEST( *cfi == "a b c d e f" ); ++cfi;
125 BOOST_TEST( *cfi == "as sa" ); ++cfi;
126 BOOST_TEST( *cfi == "aswe" ); ++cfi;
127 BOOST_TEST( cfi == file::config_file_iterator() );
128 }
129
130 {
131 file::config_file_iterator cfi( "test_files/test_broken_line.cfg", file::trim_leading_spaces );
132
133 BOOST_TEST( cfi != file::config_file_iterator() );
134 BOOST_TEST( *cfi == "qwerty" ); ++cfi;
135 BOOST_TEST( *cfi == "123 \\11" ); ++cfi;
136 BOOST_TEST( *cfi == "23" ); ++cfi;
137 BOOST_TEST( *cfi == "xcv \\ dfgsd" ); ++cfi;
138 BOOST_TEST( *cfi == "qwe" ); ++cfi;
139 BOOST_TEST( cfi != file::config_file_iterator() );
140 BOOST_TEST( *cfi == "1 \t23" ); ++cfi;
141 BOOST_TEST( *cfi == "34 34" ); ++cfi;
142 BOOST_TEST( *cfi == "a b c d e f" ); ++cfi;
143 BOOST_TEST( *cfi == "as sa" ); ++cfi;
144 BOOST_TEST( *cfi == "aswe" ); ++cfi;
145 BOOST_TEST( cfi == file::config_file_iterator() );
146 }
147
148 {
149 file::config_file_iterator cfi( "test_files/test_broken_line.cfg", (!file::trim_leading_spaces,!file::trim_trailing_spaces));
150
151 BOOST_TEST( cfi != file::config_file_iterator() );
152 BOOST_TEST( *cfi == "qwerty" ); ++cfi;
153 BOOST_TEST( *cfi == "123 \\11" ); ++cfi;
154 BOOST_TEST( *cfi == " 23" ); ++cfi;
155 BOOST_TEST( *cfi == "xcv \\ dfgsd" ); ++cfi;
156 BOOST_TEST( *cfi == "qwe" ); ++cfi;
157 BOOST_TEST( cfi != file::config_file_iterator() );
158 BOOST_TEST( *cfi == "1 " ); ++cfi;
159 BOOST_TEST( *cfi == "\t23" ); ++cfi;
160 BOOST_TEST( *cfi == "34 \\ " ); ++cfi;
161 BOOST_TEST( *cfi == "34" ); ++cfi;
162 BOOST_TEST( *cfi == "a b c d e f " ); ++cfi;
163 BOOST_TEST( *cfi == "as \\ " ); ++cfi;
164 BOOST_TEST( *cfi == "sa" ); ++cfi;
165 BOOST_TEST( *cfi == "aswe" ); ++cfi;
166 BOOST_TEST( cfi == file::config_file_iterator() );
167 }
168
169 {
170 file::config_file_iterator cfi( "test_files/test_broken_line.cfg", !file::skip_empty_lines );
171
172 BOOST_TEST( cfi != file::config_file_iterator() );
173 BOOST_TEST( *cfi == "qwerty" ); ++cfi;
174 BOOST_TEST( *cfi == "" ); ++cfi;
175 BOOST_TEST( *cfi == "123 \\11" ); ++cfi;
176 BOOST_TEST( *cfi == "" ); ++cfi;
177 BOOST_TEST( *cfi == "" ); ++cfi;
178 BOOST_TEST( *cfi == " 23" ); ++cfi;
179 BOOST_TEST( *cfi == "" ); ++cfi;
180 BOOST_TEST( *cfi == "xcv \\ dfgsd" ); ++cfi;
181 BOOST_TEST( *cfi == "qwe" ); ++cfi;
182 BOOST_TEST( cfi != file::config_file_iterator() );
183 BOOST_TEST( *cfi == "" ); ++cfi;
184 BOOST_TEST( *cfi == "1 " ); ++cfi;
185 BOOST_TEST( *cfi == "\t23" ); ++cfi;
186 BOOST_TEST( *cfi == "" ); ++cfi;
187 BOOST_TEST( *cfi == "34 34" ); ++cfi;
188 BOOST_TEST( *cfi == "" ); ++cfi;
189 BOOST_TEST( *cfi == "a b c d e f" ); ++cfi;
190 BOOST_TEST( *cfi == "" ); ++cfi;
191 BOOST_TEST( *cfi == "as " ); ++cfi;
192 BOOST_TEST( *cfi == "sa" ); ++cfi;
193 BOOST_TEST( *cfi == "" ); ++cfi;
194 BOOST_TEST( *cfi == "as" ); ++cfi;
195 BOOST_TEST( *cfi == "we" ); ++cfi;
196 BOOST_TEST( *cfi == "" ); ++cfi;
197 BOOST_TEST( cfi == file::config_file_iterator() );
198 }
199 }
200
201 //____________________________________________________________________________//
202
BOOST_AUTO_TEST_CASE(test_include)203 BOOST_AUTO_TEST_CASE( test_include )
204 {
205 {
206 file::config_file_iterator cfi( "test_files/test_include1.cfg" );
207 BOOST_TEST( cfi != file::config_file_iterator() );
208 BOOST_TEST( *cfi == "a" ); ++cfi;
209 BOOST_TEST( *cfi == "c" ); ++cfi;
210 BOOST_TEST( *cfi == "b" ); ++cfi;
211 BOOST_TEST( cfi == file::config_file_iterator() );
212 }
213
214 {
215 file::config_file_iterator cfi( "test_files/test_include2.cfg" );
216 BOOST_TEST( cfi != file::config_file_iterator() );
217 BOOST_TEST( *cfi == "1" ); ++cfi;
218 BOOST_TEST( *cfi == "a" ); ++cfi;
219 BOOST_TEST( *cfi == "c" ); ++cfi;
220 BOOST_TEST( *cfi == "b" ); ++cfi;
221 BOOST_TEST( *cfi == "2" ); ++cfi;
222 BOOST_TEST( cfi == file::config_file_iterator() );
223 }
224
225 {
226 file::config_file_iterator cfi( "test_files/test_include3.cfg" );
227 BOOST_TEST( cfi != file::config_file_iterator() );
228 BOOST_TEST( *cfi == "c" ); ++cfi;
229 BOOST_TEST( *cfi == "c" ); ++cfi;
230 BOOST_TEST( cfi == file::config_file_iterator() );
231 }
232 }
233
234 //____________________________________________________________________________//
235
236 env::variable<> TEST_MACRO( "TEST_MACRO", env::default_value = "test_value" );
237
BOOST_AUTO_TEST_CASE(test_define)238 BOOST_AUTO_TEST_CASE( test_define )
239 {
240 file::config_file_iterator cfi( "test_files/test_define.cfg" );
241 BOOST_TEST( cfi != file::config_file_iterator() );
242 BOOST_TEST( *cfi == "a123123" ); ++cfi;
243 BOOST_TEST( *cfi == "11232" ); ++cfi;
244 BOOST_TEST( *cfi == "a test_value=11" ); ++cfi;
245 BOOST_TEST( *cfi == "1abc2" ); ++cfi;
246 BOOST_TEST( cfi == file::config_file_iterator() );
247 }
248
249 //____________________________________________________________________________//
250
BOOST_AUTO_TEST_CASE(test_macro_subst)251 BOOST_AUTO_TEST_CASE( test_macro_subst )
252 {
253 BOOST_CHECK_THROW( file::config_file_iterator( "test_files/test_macro_subst1.cfg" ), rt::logic_error );
254 BOOST_CHECK_THROW( file::config_file_iterator( "test_files/test_macro_subst3.cfg" ), rt::logic_error );
255
256 {
257 file::config_file_iterator cfi( "test_files/test_macro_subst1.cfg", !file::detect_missing_macro );
258 BOOST_TEST( cfi != file::config_file_iterator() );
259 BOOST_TEST( *cfi == "a" ); ++cfi;
260 BOOST_TEST( cfi == file::config_file_iterator() );
261 }
262
263 {
264 file::config_file_iterator cfi( "test_files/test_macro_subst2.cfg" );
265 BOOST_TEST( cfi != file::config_file_iterator() );
266 BOOST_TEST( *cfi == "atest_value" ); ++cfi;
267 BOOST_TEST( cfi == file::config_file_iterator() );
268 }
269
270 {
271 file::config_file_iterator cfi( "test_files/test_macro_subst4.cfg" );
272 BOOST_TEST( cfi != file::config_file_iterator() );
273 BOOST_TEST( *cfi == "abb" ); ++cfi;
274 BOOST_TEST( cfi == file::config_file_iterator() );
275 }
276 }
277
278 //____________________________________________________________________________//
279
BOOST_AUTO_TEST_CASE(test_undef)280 BOOST_AUTO_TEST_CASE( test_undef )
281 {
282 {
283 file::config_file_iterator cfi( "test_files/test_undef.cfg", !file::detect_missing_macro );
284 BOOST_TEST( cfi != file::config_file_iterator() );
285 BOOST_TEST( *cfi == "1123" ); ++cfi;
286 BOOST_TEST( *cfi == "1" ); ++cfi;
287 BOOST_TEST( cfi == file::config_file_iterator() );
288 }
289 }
290
291 //____________________________________________________________________________//
292
BOOST_AUTO_TEST_CASE(test_ifdef)293 BOOST_AUTO_TEST_CASE( test_ifdef )
294 {
295 {
296 file::config_file_iterator cfi( "test_files/test_ifdef.cfg" );
297 BOOST_TEST( cfi != file::config_file_iterator() );
298 BOOST_TEST( *cfi == "1" ); ++cfi;
299 BOOST_TEST( *cfi == "2" ); ++cfi;
300 BOOST_TEST( *cfi == "1" ); ++cfi;
301 BOOST_TEST( *cfi == "1abc" ); ++cfi;
302 BOOST_TEST( *cfi == "a" ); ++cfi;
303 BOOST_TEST( cfi == file::config_file_iterator() );
304 }
305
306 BOOST_CHECK_THROW( file::config_file_iterator( "test_files/test_ifdef1.cfg" ), rt::logic_error );
307 BOOST_CHECK_THROW( file::config_file_iterator( "test_files/test_ifdef2.cfg" ), rt::logic_error );
308 BOOST_CHECK_THROW( file::config_file_iterator( "test_files/test_ifdef3.cfg" ), rt::logic_error );
309 BOOST_CHECK_THROW( file::config_file_iterator( "test_files/test_ifdef4.cfg" ), rt::logic_error );
310 }
311
312 //____________________________________________________________________________//
313
314 // EOF
315