Chris@16
|
1 // (C) Copyright Gennadiy Rozental 2001-2008.
|
Chris@16
|
2 // Distributed under the Boost Software License, Version 1.0.
|
Chris@16
|
3 // (See accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
4 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
5
|
Chris@16
|
6 // See http://www.boost.org/libs/test for the library home page.
|
Chris@16
|
7 //
|
Chris@16
|
8 // File : $RCSfile$
|
Chris@16
|
9 //
|
Chris@101
|
10 // Version : $Revision$
|
Chris@16
|
11 //
|
Chris@16
|
12 // Description : simple implementation for Unit Test Framework parameter
|
Chris@16
|
13 // handling routines. May be rewritten in future to use some kind of
|
Chris@16
|
14 // command-line arguments parsing facility and environment variable handling
|
Chris@16
|
15 // facility
|
Chris@16
|
16 // ***************************************************************************
|
Chris@16
|
17
|
Chris@16
|
18 #ifndef BOOST_TEST_UNIT_TEST_PARAMETERS_IPP_012205GER
|
Chris@16
|
19 #define BOOST_TEST_UNIT_TEST_PARAMETERS_IPP_012205GER
|
Chris@16
|
20
|
Chris@16
|
21 // Boost.Test
|
Chris@16
|
22 #include <boost/test/detail/unit_test_parameters.hpp>
|
Chris@16
|
23 #include <boost/test/utils/basic_cstring/basic_cstring.hpp>
|
Chris@16
|
24 #include <boost/test/utils/basic_cstring/compare.hpp>
|
Chris@16
|
25 #include <boost/test/utils/basic_cstring/io.hpp>
|
Chris@16
|
26 #include <boost/test/utils/fixed_mapping.hpp>
|
Chris@16
|
27 #include <boost/test/debug.hpp>
|
Chris@16
|
28 #include <boost/test/framework.hpp>
|
Chris@16
|
29
|
Chris@16
|
30 // Boost.Runtime.Param
|
Chris@16
|
31 #include <boost/test/utils/runtime/cla/dual_name_parameter.hpp>
|
Chris@16
|
32 #include <boost/test/utils/runtime/cla/parser.hpp>
|
Chris@16
|
33
|
Chris@16
|
34 namespace rt = boost::runtime;
|
Chris@16
|
35 namespace cla = rt::cla;
|
Chris@16
|
36
|
Chris@16
|
37
|
Chris@16
|
38 #ifndef UNDER_CE
|
Chris@16
|
39 #include <boost/test/utils/runtime/env/variable.hpp>
|
Chris@16
|
40
|
Chris@16
|
41 namespace env = rt::env;
|
Chris@16
|
42 #endif
|
Chris@16
|
43
|
Chris@16
|
44
|
Chris@16
|
45 // Boost
|
Chris@16
|
46 #include <boost/config.hpp>
|
Chris@16
|
47 #include <boost/test/detail/suppress_warnings.hpp>
|
Chris@16
|
48 #include <boost/lexical_cast.hpp>
|
Chris@16
|
49 #include <boost/test/detail/enable_warnings.hpp>
|
Chris@16
|
50
|
Chris@16
|
51 // STL
|
Chris@16
|
52 #include <map>
|
Chris@16
|
53 #include <cstdlib>
|
Chris@16
|
54 #include <iostream>
|
Chris@16
|
55 #include <fstream>
|
Chris@16
|
56
|
Chris@16
|
57 #include <boost/test/detail/suppress_warnings.hpp>
|
Chris@16
|
58
|
Chris@16
|
59 //____________________________________________________________________________//
|
Chris@16
|
60
|
Chris@16
|
61 # ifdef BOOST_NO_STDC_NAMESPACE
|
Chris@16
|
62 namespace std { using ::getenv; using ::strncmp; using ::strcmp; }
|
Chris@16
|
63 # endif
|
Chris@16
|
64
|
Chris@16
|
65 namespace boost {
|
Chris@16
|
66
|
Chris@16
|
67 namespace unit_test {
|
Chris@16
|
68
|
Chris@16
|
69 // ************************************************************************** //
|
Chris@16
|
70 // ************** input operations for unit_test's enums ************** //
|
Chris@16
|
71 // ************************************************************************** //
|
Chris@16
|
72
|
Chris@16
|
73 std::istream&
|
Chris@16
|
74 operator>>( std::istream& in, unit_test::log_level& ll )
|
Chris@16
|
75 {
|
Chris@16
|
76 static fixed_mapping<const_string,unit_test::log_level,case_ins_less<char const> > log_level_name(
|
Chris@16
|
77 "all" , log_successful_tests,
|
Chris@16
|
78 "success" , log_successful_tests,
|
Chris@16
|
79 "test_suite" , log_test_units,
|
Chris@16
|
80 "unit_scope" , log_test_units,
|
Chris@16
|
81 "message" , log_messages,
|
Chris@16
|
82 "warning" , log_warnings,
|
Chris@16
|
83 "error" , log_all_errors,
|
Chris@16
|
84 "cpp_exception" , log_cpp_exception_errors,
|
Chris@16
|
85 "system_error" , log_system_errors,
|
Chris@16
|
86 "fatal_error" , log_fatal_errors,
|
Chris@16
|
87 "nothing" , log_nothing,
|
Chris@16
|
88
|
Chris@16
|
89 invalid_log_level
|
Chris@16
|
90 );
|
Chris@16
|
91
|
Chris@16
|
92 std::string val;
|
Chris@16
|
93 in >> val;
|
Chris@16
|
94
|
Chris@16
|
95 ll = log_level_name[val];
|
Chris@16
|
96 BOOST_TEST_SETUP_ASSERT( ll != unit_test::invalid_log_level, "invalid log level " + val );
|
Chris@16
|
97
|
Chris@16
|
98 return in;
|
Chris@16
|
99 }
|
Chris@16
|
100
|
Chris@16
|
101 //____________________________________________________________________________//
|
Chris@16
|
102
|
Chris@16
|
103 std::istream&
|
Chris@16
|
104 operator>>( std::istream& in, unit_test::report_level& rl )
|
Chris@16
|
105 {
|
Chris@16
|
106 fixed_mapping<const_string,unit_test::report_level,case_ins_less<char const> > report_level_name (
|
Chris@16
|
107 "confirm", CONFIRMATION_REPORT,
|
Chris@16
|
108 "short", SHORT_REPORT,
|
Chris@16
|
109 "detailed", DETAILED_REPORT,
|
Chris@16
|
110 "no", NO_REPORT,
|
Chris@16
|
111
|
Chris@16
|
112 INV_REPORT_LEVEL
|
Chris@16
|
113 );
|
Chris@16
|
114
|
Chris@16
|
115 std::string val;
|
Chris@16
|
116 in >> val;
|
Chris@16
|
117
|
Chris@16
|
118 rl = report_level_name[val];
|
Chris@16
|
119 BOOST_TEST_SETUP_ASSERT( rl != INV_REPORT_LEVEL, "invalid report level " + val );
|
Chris@16
|
120
|
Chris@16
|
121 return in;
|
Chris@16
|
122 }
|
Chris@16
|
123
|
Chris@16
|
124 //____________________________________________________________________________//
|
Chris@16
|
125
|
Chris@16
|
126 std::istream&
|
Chris@16
|
127 operator>>( std::istream& in, unit_test::output_format& of )
|
Chris@16
|
128 {
|
Chris@16
|
129 fixed_mapping<const_string,unit_test::output_format,case_ins_less<char const> > output_format_name (
|
Chris@16
|
130 "HRF", unit_test::CLF,
|
Chris@16
|
131 "CLF", unit_test::CLF,
|
Chris@16
|
132 "XML", unit_test::XML,
|
Chris@16
|
133
|
Chris@16
|
134 unit_test::INV_OF
|
Chris@16
|
135 );
|
Chris@16
|
136
|
Chris@16
|
137 std::string val;
|
Chris@16
|
138 in >> val;
|
Chris@16
|
139
|
Chris@16
|
140 of = output_format_name[val];
|
Chris@16
|
141 BOOST_TEST_SETUP_ASSERT( of != unit_test::INV_OF, "invalid output format " + val );
|
Chris@16
|
142
|
Chris@16
|
143 return in;
|
Chris@16
|
144 }
|
Chris@16
|
145
|
Chris@16
|
146 //____________________________________________________________________________//
|
Chris@16
|
147
|
Chris@16
|
148 // ************************************************************************** //
|
Chris@16
|
149 // ************** runtime_config ************** //
|
Chris@16
|
150 // ************************************************************************** //
|
Chris@16
|
151
|
Chris@16
|
152 namespace runtime_config {
|
Chris@16
|
153
|
Chris@16
|
154 namespace {
|
Chris@16
|
155
|
Chris@16
|
156 // framework parameters and corresponding command-line arguments
|
Chris@16
|
157 std::string AUTO_START_DBG = "auto_start_dbg";
|
Chris@16
|
158 std::string BREAK_EXEC_PATH = "break_exec_path";
|
Chris@16
|
159 std::string BUILD_INFO = "build_info";
|
Chris@16
|
160 std::string CATCH_SYS_ERRORS = "catch_system_errors";
|
Chris@16
|
161 std::string DETECT_FP_EXCEPT = "detect_fp_exceptions";
|
Chris@16
|
162 std::string DETECT_MEM_LEAKS = "detect_memory_leaks";
|
Chris@16
|
163 std::string LOG_FORMAT = "log_format";
|
Chris@16
|
164 std::string LOG_LEVEL = "log_level";
|
Chris@16
|
165 std::string LOG_SINK = "log_sink";
|
Chris@16
|
166 std::string OUTPUT_FORMAT = "output_format";
|
Chris@16
|
167 std::string RANDOM_SEED = "random";
|
Chris@16
|
168 std::string REPORT_FORMAT = "report_format";
|
Chris@16
|
169 std::string REPORT_LEVEL = "report_level";
|
Chris@16
|
170 std::string REPORT_SINK = "report_sink";
|
Chris@16
|
171 std::string RESULT_CODE = "result_code";
|
Chris@16
|
172 std::string TESTS_TO_RUN = "run_test";
|
Chris@16
|
173 std::string SAVE_TEST_PATTERN = "save_pattern";
|
Chris@16
|
174 std::string SHOW_PROGRESS = "show_progress";
|
Chris@16
|
175 std::string USE_ALT_STACK = "use_alt_stack";
|
Chris@16
|
176
|
Chris@16
|
177 fixed_mapping<const_string,const_string> parameter_2_env_var(
|
Chris@16
|
178 AUTO_START_DBG , "BOOST_TEST_AUTO_START_DBG",
|
Chris@16
|
179 BREAK_EXEC_PATH , "BOOST_TEST_BREAK_EXEC_PATH",
|
Chris@16
|
180 BUILD_INFO , "BOOST_TEST_BUILD_INFO",
|
Chris@16
|
181 CATCH_SYS_ERRORS , "BOOST_TEST_CATCH_SYSTEM_ERRORS",
|
Chris@16
|
182 DETECT_FP_EXCEPT , "BOOST_TEST_DETECT_FP_EXCEPTIONS",
|
Chris@16
|
183 DETECT_MEM_LEAKS , "BOOST_TEST_DETECT_MEMORY_LEAK",
|
Chris@16
|
184 LOG_FORMAT , "BOOST_TEST_LOG_FORMAT",
|
Chris@16
|
185 LOG_LEVEL , "BOOST_TEST_LOG_LEVEL",
|
Chris@16
|
186 LOG_SINK , "BOOST_TEST_LOG_SINK",
|
Chris@16
|
187 OUTPUT_FORMAT , "BOOST_TEST_OUTPUT_FORMAT",
|
Chris@16
|
188 RANDOM_SEED , "BOOST_TEST_RANDOM",
|
Chris@16
|
189 REPORT_FORMAT , "BOOST_TEST_REPORT_FORMAT",
|
Chris@16
|
190 REPORT_LEVEL , "BOOST_TEST_REPORT_LEVEL",
|
Chris@16
|
191 REPORT_SINK , "BOOST_TEST_REPORT_SINK",
|
Chris@16
|
192 RESULT_CODE , "BOOST_TEST_RESULT_CODE",
|
Chris@16
|
193 TESTS_TO_RUN , "BOOST_TESTS_TO_RUN",
|
Chris@16
|
194 SAVE_TEST_PATTERN , "BOOST_TEST_SAVE_PATTERN",
|
Chris@16
|
195 SHOW_PROGRESS , "BOOST_TEST_SHOW_PROGRESS",
|
Chris@16
|
196 USE_ALT_STACK , "BOOST_TEST_USE_ALT_STACK",
|
Chris@16
|
197
|
Chris@16
|
198 ""
|
Chris@16
|
199 );
|
Chris@16
|
200
|
Chris@16
|
201 //____________________________________________________________________________//
|
Chris@16
|
202
|
Chris@16
|
203 // storage for the CLAs
|
Chris@16
|
204 cla::parser s_cla_parser;
|
Chris@16
|
205 std::string s_empty;
|
Chris@16
|
206
|
Chris@16
|
207 output_format s_report_format;
|
Chris@16
|
208 output_format s_log_format;
|
Chris@16
|
209
|
Chris@16
|
210 //____________________________________________________________________________//
|
Chris@16
|
211
|
Chris@16
|
212 template<typename T>
|
Chris@16
|
213 T
|
Chris@16
|
214 retrieve_parameter( const_string parameter_name, cla::parser const& s_cla_parser, T const& default_value = T(), T const& optional_value = T() )
|
Chris@16
|
215 {
|
Chris@16
|
216 rt::const_argument_ptr arg = s_cla_parser[parameter_name];
|
Chris@16
|
217 if( arg ) {
|
Chris@16
|
218 if( rtti::type_id<T>() == rtti::type_id<bool>() ||
|
Chris@16
|
219 !static_cast<cla::parameter const&>( arg->p_formal_parameter.get() ).p_optional_value )
|
Chris@16
|
220 return s_cla_parser.get<T>( parameter_name );
|
Chris@16
|
221
|
Chris@16
|
222 optional<T> val = s_cla_parser.get<optional<T> >( parameter_name );
|
Chris@16
|
223 if( val )
|
Chris@16
|
224 return *val;
|
Chris@16
|
225 else
|
Chris@16
|
226 return optional_value;
|
Chris@16
|
227 }
|
Chris@16
|
228
|
Chris@16
|
229 boost::optional<T> v;
|
Chris@16
|
230
|
Chris@16
|
231 #ifndef UNDER_CE
|
Chris@16
|
232 env::get( parameter_2_env_var[parameter_name], v );
|
Chris@16
|
233 #endif
|
Chris@16
|
234
|
Chris@16
|
235 if( v )
|
Chris@16
|
236 return *v;
|
Chris@16
|
237 else
|
Chris@16
|
238 return default_value;
|
Chris@16
|
239 }
|
Chris@16
|
240
|
Chris@16
|
241 //____________________________________________________________________________//
|
Chris@16
|
242
|
Chris@16
|
243 } // local namespace
|
Chris@16
|
244
|
Chris@16
|
245 void
|
Chris@16
|
246 init( int& argc, char** argv )
|
Chris@16
|
247 {
|
Chris@16
|
248 using namespace cla;
|
Chris@16
|
249
|
Chris@16
|
250 try {
|
Chris@16
|
251 s_cla_parser - cla::ignore_mismatch
|
Chris@16
|
252 << cla::dual_name_parameter<bool>( AUTO_START_DBG + "|d" )
|
Chris@16
|
253 - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
|
Chris@16
|
254 cla::description = "Automatically starts debugger if system level error (signal) occurs")
|
Chris@16
|
255 << cla::named_parameter<std::string>( BREAK_EXEC_PATH )
|
Chris@16
|
256 - (cla::prefix = "--",cla::separator = "=",cla::guess_name,cla::optional,
|
Chris@16
|
257 cla::description = "For the exception safety testing allows to break at specific execution path")
|
Chris@16
|
258 << cla::dual_name_parameter<bool>( BUILD_INFO + "|i" )
|
Chris@16
|
259 - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
|
Chris@16
|
260 cla::description = "Shows library build information" )
|
Chris@16
|
261 << cla::dual_name_parameter<bool>( CATCH_SYS_ERRORS + "|s" )
|
Chris@16
|
262 - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
|
Chris@16
|
263 cla::description = "Allows to switch between catching and ignoring system errors (signals)")
|
Chris@16
|
264 << cla::named_parameter<bool>( DETECT_FP_EXCEPT )
|
Chris@16
|
265 - (cla::prefix = "--",cla::separator = "=",cla::guess_name,cla::optional,
|
Chris@16
|
266 cla::description = "Allows to switch between catching and ignoring floating point exceptions")
|
Chris@16
|
267 << cla::named_parameter<long>( DETECT_MEM_LEAKS )
|
Chris@16
|
268 - (cla::prefix = "--",cla::separator = "=",cla::guess_name,cla::optional,
|
Chris@16
|
269 cla::description = "Allows to switch between catching and ignoring memory leaks")
|
Chris@16
|
270 << cla::dual_name_parameter<unit_test::output_format>( LOG_FORMAT + "|f" )
|
Chris@16
|
271 - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
|
Chris@16
|
272 cla::description = "Specifies log format")
|
Chris@16
|
273 << cla::dual_name_parameter<unit_test::log_level>( LOG_LEVEL + "|l" )
|
Chris@16
|
274 - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
|
Chris@16
|
275 cla::description = "Specifies log level")
|
Chris@16
|
276 << cla::dual_name_parameter<std::string>( LOG_SINK + "|k" )
|
Chris@16
|
277 - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
|
Chris@16
|
278 cla::description = "Specifies log sink:stdout(default),stderr or file name")
|
Chris@16
|
279 << cla::dual_name_parameter<unit_test::output_format>( OUTPUT_FORMAT + "|o" )
|
Chris@16
|
280 - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
|
Chris@16
|
281 cla::description = "Specifies output format (both log and report)")
|
Chris@16
|
282 << cla::dual_name_parameter<int>( RANDOM_SEED + "|a" )
|
Chris@16
|
283 - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,cla::optional_value,
|
Chris@16
|
284 cla::description = "Allows to switch between sequential and random order of test units execution.\n"
|
Chris@16
|
285 "Optionally allows to specify concrete seed for random number generator")
|
Chris@16
|
286 << cla::dual_name_parameter<unit_test::output_format>( REPORT_FORMAT + "|m" )
|
Chris@16
|
287 - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
|
Chris@16
|
288 cla::description = "Specifies report format")
|
Chris@16
|
289 << cla::dual_name_parameter<unit_test::report_level>(REPORT_LEVEL + "|r")
|
Chris@16
|
290 - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
|
Chris@16
|
291 cla::description = "Specifies report level")
|
Chris@16
|
292 << cla::dual_name_parameter<std::string>( REPORT_SINK + "|e" )
|
Chris@16
|
293 - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
|
Chris@16
|
294 cla::description = "Specifies report sink:stderr(default),stdout or file name")
|
Chris@16
|
295 << cla::dual_name_parameter<bool>( RESULT_CODE + "|c" )
|
Chris@16
|
296 - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
|
Chris@16
|
297 cla::description = "Allows to disable test modules's result code generation")
|
Chris@16
|
298 << cla::dual_name_parameter<std::string>( TESTS_TO_RUN + "|t" )
|
Chris@16
|
299 - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
|
Chris@16
|
300 cla::description = "Allows to filter which test units to run")
|
Chris@16
|
301 << cla::named_parameter<bool>( SAVE_TEST_PATTERN )
|
Chris@16
|
302 - (cla::prefix = "--",cla::separator = "=",cla::guess_name,cla::optional,
|
Chris@16
|
303 cla::description = "Allows to switch between saving and matching against test pattern file")
|
Chris@16
|
304 << cla::dual_name_parameter<bool>( SHOW_PROGRESS + "|p" )
|
Chris@16
|
305 - (cla::prefix = "--|-",cla::separator = "=| ",cla::guess_name,cla::optional,
|
Chris@16
|
306 cla::description = "Turns on progress display")
|
Chris@16
|
307 << cla::named_parameter<bool>( USE_ALT_STACK )
|
Chris@16
|
308 - (cla::prefix = "--",cla::separator = "=",cla::guess_name,cla::optional,
|
Chris@16
|
309 cla::description = "Turns on/off usage of an alternative stack for signal handling")
|
Chris@16
|
310
|
Chris@16
|
311 << cla::dual_name_parameter<bool>( "help|?" )
|
Chris@16
|
312 - (cla::prefix = "--|-",cla::separator = "=",cla::guess_name,cla::optional,
|
Chris@16
|
313 cla::description = "this help message")
|
Chris@16
|
314 ;
|
Chris@16
|
315
|
Chris@16
|
316 s_cla_parser.parse( argc, argv );
|
Chris@16
|
317
|
Chris@16
|
318 if( s_cla_parser["help"] ) {
|
Chris@16
|
319 s_cla_parser.help( std::cout );
|
Chris@16
|
320 throw framework::nothing_to_test();
|
Chris@16
|
321 }
|
Chris@16
|
322
|
Chris@16
|
323 s_report_format = retrieve_parameter( REPORT_FORMAT, s_cla_parser, unit_test::CLF );
|
Chris@16
|
324 s_log_format = retrieve_parameter( LOG_FORMAT, s_cla_parser, unit_test::CLF );
|
Chris@16
|
325
|
Chris@16
|
326 unit_test::output_format of = retrieve_parameter( OUTPUT_FORMAT, s_cla_parser, unit_test::INV_OF );
|
Chris@16
|
327
|
Chris@16
|
328 if( of != unit_test::INV_OF )
|
Chris@16
|
329 s_report_format = s_log_format = of;
|
Chris@16
|
330 }
|
Chris@16
|
331 catch( rt::logic_error const& ex ) {
|
Chris@16
|
332 std::ostringstream err;
|
Chris@16
|
333
|
Chris@16
|
334 err << "Fail to process runtime parameters: " << ex.msg() << std::endl;
|
Chris@16
|
335 s_cla_parser.usage( err );
|
Chris@16
|
336
|
Chris@16
|
337 throw framework::setup_error( err.str() );
|
Chris@16
|
338 }
|
Chris@16
|
339 }
|
Chris@16
|
340
|
Chris@16
|
341 //____________________________________________________________________________//
|
Chris@16
|
342
|
Chris@16
|
343 unit_test::log_level
|
Chris@16
|
344 log_level()
|
Chris@16
|
345 {
|
Chris@16
|
346 return retrieve_parameter( LOG_LEVEL, s_cla_parser, unit_test::log_all_errors );
|
Chris@16
|
347 }
|
Chris@16
|
348
|
Chris@16
|
349 //____________________________________________________________________________//
|
Chris@16
|
350
|
Chris@16
|
351 bool
|
Chris@16
|
352 no_result_code()
|
Chris@16
|
353 {
|
Chris@16
|
354 return !retrieve_parameter( RESULT_CODE, s_cla_parser, true );
|
Chris@16
|
355 }
|
Chris@16
|
356
|
Chris@16
|
357 //____________________________________________________________________________//
|
Chris@16
|
358
|
Chris@16
|
359 unit_test::report_level
|
Chris@16
|
360 report_level()
|
Chris@16
|
361 {
|
Chris@16
|
362 return retrieve_parameter( REPORT_LEVEL, s_cla_parser, unit_test::CONFIRMATION_REPORT );
|
Chris@16
|
363 }
|
Chris@16
|
364
|
Chris@16
|
365 //____________________________________________________________________________//
|
Chris@16
|
366
|
Chris@16
|
367 const_string
|
Chris@16
|
368 test_to_run()
|
Chris@16
|
369 {
|
Chris@16
|
370 static std::string s_test_to_run = retrieve_parameter( TESTS_TO_RUN, s_cla_parser, s_empty );
|
Chris@16
|
371
|
Chris@16
|
372 return s_test_to_run;
|
Chris@16
|
373 }
|
Chris@16
|
374
|
Chris@16
|
375 //____________________________________________________________________________//
|
Chris@16
|
376
|
Chris@16
|
377 const_string
|
Chris@16
|
378 break_exec_path()
|
Chris@16
|
379 {
|
Chris@16
|
380 static std::string s_break_exec_path = retrieve_parameter( BREAK_EXEC_PATH, s_cla_parser, s_empty );
|
Chris@16
|
381
|
Chris@16
|
382 return s_break_exec_path;
|
Chris@16
|
383 }
|
Chris@16
|
384
|
Chris@16
|
385 //____________________________________________________________________________//
|
Chris@16
|
386
|
Chris@16
|
387 bool
|
Chris@16
|
388 save_pattern()
|
Chris@16
|
389 {
|
Chris@16
|
390 return retrieve_parameter( SAVE_TEST_PATTERN, s_cla_parser, false );
|
Chris@16
|
391 }
|
Chris@16
|
392
|
Chris@16
|
393 //____________________________________________________________________________//
|
Chris@16
|
394
|
Chris@16
|
395 bool
|
Chris@16
|
396 show_progress()
|
Chris@16
|
397 {
|
Chris@16
|
398 return retrieve_parameter( SHOW_PROGRESS, s_cla_parser, false );
|
Chris@16
|
399 }
|
Chris@16
|
400
|
Chris@16
|
401 //____________________________________________________________________________//
|
Chris@16
|
402
|
Chris@16
|
403 bool
|
Chris@16
|
404 show_build_info()
|
Chris@16
|
405 {
|
Chris@16
|
406 return retrieve_parameter( BUILD_INFO, s_cla_parser, false );
|
Chris@16
|
407 }
|
Chris@16
|
408
|
Chris@16
|
409 //____________________________________________________________________________//
|
Chris@16
|
410
|
Chris@16
|
411 bool
|
Chris@16
|
412 catch_sys_errors()
|
Chris@16
|
413 {
|
Chris@16
|
414 return retrieve_parameter( CATCH_SYS_ERRORS, s_cla_parser,
|
Chris@16
|
415 #ifdef BOOST_TEST_DEFAULTS_TO_CORE_DUMP
|
Chris@16
|
416 false
|
Chris@16
|
417 #else
|
Chris@16
|
418 true
|
Chris@16
|
419 #endif
|
Chris@16
|
420 );
|
Chris@16
|
421 }
|
Chris@16
|
422
|
Chris@16
|
423 //____________________________________________________________________________//
|
Chris@16
|
424
|
Chris@16
|
425 bool
|
Chris@16
|
426 auto_start_dbg()
|
Chris@16
|
427 {
|
Chris@16
|
428 // !! set debugger as an option
|
Chris@16
|
429 return retrieve_parameter( AUTO_START_DBG, s_cla_parser, false );
|
Chris@16
|
430 ;
|
Chris@16
|
431 }
|
Chris@16
|
432
|
Chris@16
|
433 //____________________________________________________________________________//
|
Chris@16
|
434
|
Chris@16
|
435 bool
|
Chris@16
|
436 use_alt_stack()
|
Chris@16
|
437 {
|
Chris@16
|
438 return retrieve_parameter( USE_ALT_STACK, s_cla_parser, true );
|
Chris@16
|
439 }
|
Chris@16
|
440
|
Chris@16
|
441 //____________________________________________________________________________//
|
Chris@16
|
442
|
Chris@16
|
443 bool
|
Chris@16
|
444 detect_fp_exceptions()
|
Chris@16
|
445 {
|
Chris@16
|
446 return retrieve_parameter( DETECT_FP_EXCEPT, s_cla_parser, false );
|
Chris@16
|
447 }
|
Chris@16
|
448
|
Chris@16
|
449 //____________________________________________________________________________//
|
Chris@16
|
450
|
Chris@16
|
451 output_format
|
Chris@16
|
452 report_format()
|
Chris@16
|
453 {
|
Chris@16
|
454 return s_report_format;
|
Chris@16
|
455 }
|
Chris@16
|
456
|
Chris@16
|
457 //____________________________________________________________________________//
|
Chris@16
|
458
|
Chris@16
|
459 output_format
|
Chris@16
|
460 log_format()
|
Chris@16
|
461 {
|
Chris@16
|
462 return s_log_format;
|
Chris@16
|
463 }
|
Chris@16
|
464
|
Chris@16
|
465 //____________________________________________________________________________//
|
Chris@16
|
466
|
Chris@16
|
467 std::ostream*
|
Chris@16
|
468 report_sink()
|
Chris@16
|
469 {
|
Chris@16
|
470 std::string sink_name = retrieve_parameter( REPORT_SINK, s_cla_parser, s_empty );
|
Chris@16
|
471
|
Chris@16
|
472 if( sink_name.empty() || sink_name == "stderr" )
|
Chris@16
|
473 return &std::cerr;
|
Chris@16
|
474
|
Chris@16
|
475 if( sink_name == "stdout" )
|
Chris@16
|
476 return &std::cout;
|
Chris@16
|
477
|
Chris@16
|
478 static std::ofstream log_file( sink_name.c_str() );
|
Chris@16
|
479 return &log_file;
|
Chris@16
|
480 }
|
Chris@16
|
481
|
Chris@16
|
482 //____________________________________________________________________________//
|
Chris@16
|
483
|
Chris@16
|
484 std::ostream*
|
Chris@16
|
485 log_sink()
|
Chris@16
|
486 {
|
Chris@16
|
487 std::string sink_name = retrieve_parameter( LOG_SINK, s_cla_parser, s_empty );
|
Chris@16
|
488
|
Chris@16
|
489 if( sink_name.empty() || sink_name == "stdout" )
|
Chris@16
|
490 return &std::cout;
|
Chris@16
|
491
|
Chris@16
|
492 if( sink_name == "stderr" )
|
Chris@16
|
493 return &std::cerr;
|
Chris@16
|
494
|
Chris@16
|
495 static std::ofstream report_file( sink_name.c_str() );
|
Chris@16
|
496 return &report_file;
|
Chris@16
|
497 }
|
Chris@16
|
498
|
Chris@16
|
499 //____________________________________________________________________________//
|
Chris@16
|
500
|
Chris@16
|
501 long
|
Chris@16
|
502 detect_memory_leaks()
|
Chris@16
|
503 {
|
Chris@16
|
504 return retrieve_parameter( DETECT_MEM_LEAKS, s_cla_parser, static_cast<long>(1) );
|
Chris@16
|
505 }
|
Chris@16
|
506
|
Chris@16
|
507 //____________________________________________________________________________//
|
Chris@16
|
508
|
Chris@16
|
509 int
|
Chris@16
|
510 random_seed()
|
Chris@16
|
511 {
|
Chris@16
|
512 return retrieve_parameter( RANDOM_SEED, s_cla_parser, 0, 1 );
|
Chris@16
|
513 }
|
Chris@16
|
514
|
Chris@16
|
515 //____________________________________________________________________________//
|
Chris@16
|
516
|
Chris@16
|
517 } // namespace runtime_config
|
Chris@16
|
518
|
Chris@16
|
519 } // namespace unit_test
|
Chris@16
|
520
|
Chris@16
|
521 } // namespace boost
|
Chris@16
|
522
|
Chris@16
|
523 //____________________________________________________________________________//
|
Chris@16
|
524
|
Chris@16
|
525 #include <boost/test/detail/enable_warnings.hpp>
|
Chris@16
|
526
|
Chris@16
|
527 #endif // BOOST_TEST_UNIT_TEST_PARAMETERS_IPP_012205GER
|