1 // (C) Copyright Gennadiy Rozental 2003-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: 62023 $
11 //
12 // Description : unit test for class properties facility
13 // ***************************************************************************
14
15 // Boost.Test
16 #define BOOST_TEST_MODULE Boost.Test run by name/label implementation test
17 #include <boost/test/unit_test.hpp>
18 #include <boost/test/unit_test_parameters.hpp>
19 #include <boost/test/tree/test_case_counter.hpp>
20 #include <boost/test/tree/traverse.hpp>
21
22 namespace utf = boost::unit_test;
23
A()24 void A() {}
B()25 void B() {}
C()26 void C() {}
D()27 void D() {}
E()28 void E() {}
F()29 void F() {}
longnameA()30 void longnameA() {}
Blongname()31 void Blongname() {}
32
33 //____________________________________________________________________________//
34
35 void
test_count(utf::test_suite * master_ts,char const ** argv,int argc,unsigned expected)36 test_count( utf::test_suite* master_ts, char const** argv, int argc, unsigned expected )
37 {
38 argc /= sizeof(char*);
39
40 BOOST_TEST_INFO( argv[1] );
41 if( argc > 2 )
42 BOOST_TEST_INFO( argv[2] );
43
44 utf::runtime_config::init( argc, (char**)argv );
45 utf::framework::impl::setup_for_execution( *master_ts );
46
47 utf::test_case_counter tcc;
48 utf::traverse_test_tree( master_ts->p_id, tcc );
49 BOOST_TEST( tcc.p_count == expected );
50 }
51
BOOST_AUTO_TEST_CASE(test_run_by_name)52 BOOST_AUTO_TEST_CASE( test_run_by_name )
53 {
54 utf::test_suite* master_ts = BOOST_TEST_SUITE("local master");
55
56 utf::test_suite* ts1 = BOOST_TEST_SUITE("ts1");
57 ts1->add( BOOST_TEST_CASE( &C ) );
58 ts1->add( BOOST_TEST_CASE( &D ) );
59
60 utf::test_suite* ts2 = BOOST_TEST_SUITE("ts2");
61 ts2->add( BOOST_TEST_CASE( &A ) );
62 ts2->add( BOOST_TEST_CASE( &C ) );
63 ts2->add( BOOST_TEST_CASE( &longnameA ) );
64 ts2->add( ts1 );
65
66 master_ts->add( BOOST_TEST_CASE( &A ) );
67 master_ts->add( BOOST_TEST_CASE( &B ) );
68 master_ts->add( BOOST_TEST_CASE( &longnameA ) );
69 master_ts->add( BOOST_TEST_CASE( &Blongname ) );
70 master_ts->add( ts2 );
71
72 master_ts->p_default_status.value = utf::test_unit::RS_ENABLED;
73 utf::framework::finalize_setup_phase( master_ts->p_id );
74 {
75 utf::framework::impl::setup_for_execution( *master_ts );
76 utf::test_case_counter tcc;
77 utf::traverse_test_tree( master_ts->p_id, tcc );
78 BOOST_TEST( tcc.p_count == 9U );
79 }
80
81 {
82 char const* argv[] = { "a.exe", "--run=*" };
83 test_count( master_ts, argv, sizeof(argv), 9 );
84 }
85
86 {
87 char const* argv[] = { "a.exe", "--run=!*" };
88 test_count( master_ts, argv, sizeof(argv), 0 );
89 }
90
91 {
92 char const* argv[] = { "a.exe", "--run=*/*" };
93 test_count( master_ts, argv, sizeof(argv), 5 );
94 }
95
96 {
97 char const* argv[] = { "a.exe", "--run=!*/*" };
98 test_count( master_ts, argv, sizeof(argv), 4 );
99 }
100
101 {
102 char const* argv[] = { "a.exe", "--run=*/*/*" };
103 test_count( master_ts, argv, sizeof(argv), 2 );
104 }
105 {
106 char const* argv[] = { "a.exe", "--run=!*/*/*" };
107 test_count( master_ts, argv, sizeof(argv), 7 );
108 }
109
110 {
111 char const* argv[] = { "a.exe", "--run=klmn" };
112 test_count( master_ts, argv, sizeof(argv), 0 );
113 }
114
115 {
116 char const* argv[] = { "a.exe", "--run=!klmn" };
117 test_count( master_ts, argv, sizeof(argv), 9 );
118 }
119
120 {
121 char const* argv[] = { "a.exe", "--run=A" };
122 test_count( master_ts, argv, sizeof(argv), 1 );
123 }
124
125 {
126 char const* argv[] = { "a.exe", "--run=!A" };
127 test_count( master_ts, argv, sizeof(argv), 8 );
128 }
129
130 {
131 char const* argv[] = { "a.exe", "--run=*A" };
132 test_count( master_ts, argv, sizeof(argv), 2 );
133 }
134
135 {
136 char const* argv[] = { "a.exe", "--run=!*A" };
137 test_count( master_ts, argv, sizeof(argv), 7 );
138 }
139
140 {
141 char const* argv[] = { "a.exe", "--run=B*" };
142 test_count( master_ts, argv, sizeof(argv), 2 );
143 }
144
145 {
146 char const* argv[] = { "a.exe", "--run=!B*" };
147 test_count( master_ts, argv, sizeof(argv), 7 );
148 }
149
150 {
151 char const* argv[] = { "a.exe", "--run=*ngn*" };
152 test_count( master_ts, argv, sizeof(argv), 2 );
153 }
154
155 {
156 char const* argv[] = { "a.exe", "--run=ts2" };
157 test_count( master_ts, argv, sizeof(argv), 5 );
158 }
159
160 {
161 char const* argv[] = { "a.exe", "--run=!ts2" };
162 test_count( master_ts, argv, sizeof(argv), 4 );
163 }
164
165 {
166 char const* argv[] = { "a.exe", "--run=ts2/*" };
167 test_count( master_ts, argv, sizeof(argv), 5 );
168 }
169
170 {
171 char const* argv[] = { "a.exe", "--run=!ts2/*" };
172 test_count( master_ts, argv, sizeof(argv), 4 );
173 }
174
175 {
176 char const* argv[] = { "a.exe", "--run=ts2/C" };
177 test_count( master_ts, argv, sizeof(argv), 1 );
178 }
179
180 {
181 char const* argv[] = { "a.exe", "--run=!ts2/C" };
182 test_count( master_ts, argv, sizeof(argv), 8 );
183 }
184
185 {
186 char const* argv[] = { "a.exe", "--run=ts2/*A" };
187 test_count( master_ts, argv, sizeof(argv), 2 );
188 }
189
190 {
191 char const* argv[] = { "a.exe", "--run=!ts2/*A" };
192 test_count( master_ts, argv, sizeof(argv), 7 );
193 }
194
195 {
196 char const* argv[] = { "a.exe", "--run=ts2/ts1" };
197 test_count( master_ts, argv, sizeof(argv), 2 );
198 }
199
200 {
201 char const* argv[] = { "a.exe", "--run=!ts2/ts1" };
202 test_count( master_ts, argv, sizeof(argv), 7 );
203 }
204
205 {
206 char const* argv[] = { "a.exe", "--run=ts2/ts1/C" };
207 test_count( master_ts, argv, sizeof(argv), 1 );
208 }
209
210 {
211 char const* argv[] = { "a.exe", "--run=!ts2/ts1/C" };
212 test_count( master_ts, argv, sizeof(argv), 8 );
213 }
214
215 {
216 char const* argv[] = { "a.exe", "--run=ts2/ts1/*D*" };
217 test_count( master_ts, argv, sizeof(argv), 1 );
218 }
219
220 {
221 char const* argv[] = { "a.exe", "--run=!ts2/ts1/*D*" };
222 test_count( master_ts, argv, sizeof(argv), 8 );
223 }
224
225 {
226 char const* argv[] = { "a.exe", "--run=A,B" };
227 test_count( master_ts, argv, sizeof(argv), 2 );
228 }
229
230 {
231 char const* argv[] = { "a.exe", "--run=!A,B" };
232 test_count( master_ts, argv, sizeof(argv), 7 );
233 }
234
235 {
236 char const* argv[] = { "a.exe", "--run=*A,B" };
237 test_count( master_ts, argv, sizeof(argv), 3 );
238 }
239
240 {
241 char const* argv[] = { "a.exe", "--run=!*A,B" };
242 test_count( master_ts, argv, sizeof(argv), 6 );
243 }
244
245 {
246 char const* argv[] = { "a.exe", "--run=ts2/C,ts1" };
247 test_count( master_ts, argv, sizeof(argv), 3 );
248 }
249
250 {
251 char const* argv[] = { "a.exe", "--run=!ts2/C,ts1" };
252 test_count( master_ts, argv, sizeof(argv), 6 );
253 }
254
255 {
256 char const* argv[] = { "a.exe", "--run=ts2/C,ts1/D" };
257 test_count( master_ts, argv, sizeof(argv), 1 );
258 }
259
260 {
261 char const* argv[] = { "a.exe", "--run=!ts2/C,ts1/D" };
262 test_count( master_ts, argv, sizeof(argv), 8 );
263 }
264
265 {
266 char const* argv[] = { "a.exe", "--run=A", "--run=B" };
267 test_count( master_ts, argv, sizeof(argv), 2 );
268 }
269
270 {
271 char const* argv[] = { "a.exe", "--run=!A", "--run=!B" };
272 test_count( master_ts, argv, sizeof(argv), 7 );
273 }
274
275 {
276 char const* argv[] = { "a.exe", "--run=A", "--run=ts2/ts1/C" };
277 test_count( master_ts, argv, sizeof(argv), 2 );
278 }
279
280 {
281 char const* argv[] = { "a.exe", "--run=ts2", "--run=!ts2/*A" };
282 test_count( master_ts, argv, sizeof(argv), 3 );
283 }
284 }
285
286 //____________________________________________________________________________//
287
BOOST_AUTO_TEST_CASE(test_run_by_label)288 BOOST_AUTO_TEST_CASE( test_run_by_label )
289 {
290 utf::test_case* tc;
291
292 utf::test_suite* master_ts = BOOST_TEST_SUITE("local master");
293
294 utf::test_suite* ts1 = BOOST_TEST_SUITE("ts1");
295 ts1->add_label( "f2" );
296 ts1->add( tc=BOOST_TEST_CASE( &C ) );
297 tc->add_label( "L1" );
298 ts1->add( tc=BOOST_TEST_CASE( &D ) );
299 tc->add_label( "L1" );
300 tc->add_label( "l2" );
301
302 utf::test_suite* ts2 = BOOST_TEST_SUITE("ts2");
303 ts2->add_label( "FAST" );
304 ts2->add( tc=BOOST_TEST_CASE( &A ) );
305 tc->add_label( "L1" );
306 ts2->add( BOOST_TEST_CASE( &C ) );
307 ts2->add( BOOST_TEST_CASE( &longnameA ) );
308 ts2->add( ts1 );
309
310 master_ts->add( BOOST_TEST_CASE( &A ) );
311 master_ts->add( BOOST_TEST_CASE( &B ) );
312 master_ts->add( tc=BOOST_TEST_CASE( &longnameA ) );
313 tc->add_label( "f2" );
314 master_ts->add( BOOST_TEST_CASE( &Blongname ) );
315 master_ts->add( ts2 );
316
317
318 master_ts->p_default_status.value = utf::test_unit::RS_ENABLED;
319 utf::framework::finalize_setup_phase( master_ts->p_id );
320
321 {
322 char const* argv[] = { "a.exe", "--run=@L1" };
323 test_count( master_ts, argv, sizeof(argv), 3 );
324 }
325
326 {
327 char const* argv[] = { "a.exe", "--run=!@INV" };
328 test_count( master_ts, argv, sizeof(argv), 9 );
329 }
330
331 {
332 char const* argv[] = { "a.exe", "--run=!@L1" };
333 test_count( master_ts, argv, sizeof(argv), 6 );
334 }
335
336 {
337 char const* argv[] = { "a.exe", "--run=@l2" };
338 test_count( master_ts, argv, sizeof(argv), 1 );
339 }
340
341 {
342 char const* argv[] = { "a.exe", "--run=@inval" };
343 test_count( master_ts, argv, sizeof(argv), 0 );
344 }
345
346 {
347 char const* argv[] = { "a.exe", "--run=@FAST" };
348 test_count( master_ts, argv, sizeof(argv), 5 );
349 }
350
351 {
352 char const* argv[] = { "a.exe", "--run=@f2" };
353 test_count( master_ts, argv, sizeof(argv), 3 );
354 }
355
356 {
357 char const* argv[] = { "a.exe", "--run=@L1", "--run=@l2" };
358 test_count( master_ts, argv, sizeof(argv), 3 );
359 }
360
361 {
362 char const* argv[] = { "a.exe", "--run=@L1", "--run=!@l2" };
363 test_count( master_ts, argv, sizeof(argv), 2 );
364 }
365 }
366
367 //____________________________________________________________________________//
368
BOOST_AUTO_TEST_CASE(test_dependency_handling)369 BOOST_AUTO_TEST_CASE( test_dependency_handling )
370 {
371 utf::test_case* tc;
372 utf::test_case* tcB;
373
374 // M |
375 // / | \ |
376 // / | \ |
377 // TS2 TS4 TS3 |
378 // / \ | / \ |
379 // C D TS1 E F |
380 // / \ |
381 // A B |
382 //
383 // D => TS1
384 // B => F
385
386 utf::test_suite* master_ts = BOOST_TEST_SUITE("local master");
387
388 utf::test_suite* ts1 = BOOST_TEST_SUITE("ts1");
389 ts1->add( BOOST_TEST_CASE( &A ) );
390 ts1->add( tcB=BOOST_TEST_CASE( &B ) );
391
392 utf::test_suite* ts2 = BOOST_TEST_SUITE("ts2");
393 ts2->add( BOOST_TEST_CASE( &C ) );
394 ts2->add( tc=BOOST_TEST_CASE( &D ) );
395 tc->depends_on( ts1 );
396
397 utf::test_suite* ts3 = BOOST_TEST_SUITE("ts3");
398 ts3->add( BOOST_TEST_CASE( &E ) );
399 ts3->add( tc=BOOST_TEST_CASE( &F ) );
400 tcB->depends_on( tc );
401
402 utf::test_suite* ts4 = BOOST_TEST_SUITE("ts4");
403 ts4->add( ts1 );
404
405 master_ts->add( ts2 );
406 master_ts->add( ts3 );
407 master_ts->add( ts4 );
408
409 master_ts->p_default_status.value = utf::test_unit::RS_ENABLED;
410 utf::framework::finalize_setup_phase( master_ts->p_id );
411
412 {
413 char const* argv[] = { "a.exe", "--run=ts2/C" };
414 test_count( master_ts, argv, sizeof(argv), 1 );
415 }
416
417 {
418 char const* argv[] = { "a.exe", "--run=ts3" };
419 test_count( master_ts, argv, sizeof(argv), 2 );
420 }
421
422 {
423 char const* argv[] = { "a.exe", "--run=ts2/C" };
424 test_count( master_ts, argv, sizeof(argv), 1 );
425 }
426
427 {
428 char const* argv[] = { "a.exe", "--run=ts4/ts1/B" };
429 test_count( master_ts, argv, sizeof(argv), 2 );
430 }
431
432 {
433 char const* argv[] = { "a.exe", "--run=ts4/ts1" };
434 test_count( master_ts, argv, sizeof(argv), 3 );
435 }
436
437 {
438 char const* argv[] = { "a.exe", "--run=ts2" };
439 test_count( master_ts, argv, sizeof(argv), 5 );
440 }
441
442 {
443 char const* argv[] = { "a.exe", "--run=!ts3/F" };
444 test_count( master_ts, argv, sizeof(argv), 5 );
445 }
446
447 {
448 char const* argv[] = { "a.exe", "--run=!*/ts1" };
449 test_count( master_ts, argv, sizeof(argv), 4 );
450 }
451 }
452
453 //____________________________________________________________________________//
454
455 // EOF
456
457