annotate DEPENDENCIES/generic/include/boost/test/impl/unit_test_parameters.ipp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
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