File indexing completed on 2025-12-15 10:09:21
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER
0015 #define BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER
0016
0017
0018 #include <boost/test/detail/global_typedef.hpp>
0019 #include <boost/test/utils/runtime/argument.hpp>
0020 #include <boost/make_shared.hpp>
0021
0022
0023 #include <boost/function/function0.hpp>
0024
0025
0026 #include <iostream>
0027 #include <fstream>
0028
0029 #include <boost/test/detail/suppress_warnings.hpp>
0030
0031
0032
0033 namespace boost {
0034 namespace unit_test {
0035 namespace runtime_config {
0036
0037
0038
0039
0040
0041
0042 BOOST_TEST_DECL extern std::string btrt_auto_start_dbg;
0043 BOOST_TEST_DECL extern std::string btrt_break_exec_path;
0044 BOOST_TEST_DECL extern std::string btrt_build_info;
0045 BOOST_TEST_DECL extern std::string btrt_catch_sys_errors;
0046 BOOST_TEST_DECL extern std::string btrt_color_output;
0047 BOOST_TEST_DECL extern std::string btrt_detect_fp_except;
0048 BOOST_TEST_DECL extern std::string btrt_detect_mem_leaks;
0049 BOOST_TEST_DECL extern std::string btrt_list_content;
0050 BOOST_TEST_DECL extern std::string btrt_list_labels;
0051 BOOST_TEST_DECL extern std::string btrt_log_format;
0052 BOOST_TEST_DECL extern std::string btrt_log_level;
0053 BOOST_TEST_DECL extern std::string btrt_log_sink;
0054 BOOST_TEST_DECL extern std::string btrt_combined_logger;
0055 BOOST_TEST_DECL extern std::string btrt_output_format;
0056 BOOST_TEST_DECL extern std::string btrt_random_seed;
0057 BOOST_TEST_DECL extern std::string btrt_report_format;
0058 BOOST_TEST_DECL extern std::string btrt_report_level;
0059 BOOST_TEST_DECL extern std::string btrt_report_mem_leaks;
0060 BOOST_TEST_DECL extern std::string btrt_report_sink;
0061 BOOST_TEST_DECL extern std::string btrt_result_code;
0062 BOOST_TEST_DECL extern std::string btrt_run_filters;
0063 BOOST_TEST_DECL extern std::string btrt_save_test_pattern;
0064 BOOST_TEST_DECL extern std::string btrt_show_progress;
0065 BOOST_TEST_DECL extern std::string btrt_use_alt_stack;
0066 BOOST_TEST_DECL extern std::string btrt_wait_for_debugger;
0067 BOOST_TEST_DECL extern std::string btrt_help;
0068 BOOST_TEST_DECL extern std::string btrt_usage;
0069 BOOST_TEST_DECL extern std::string btrt_version;
0070
0071 BOOST_TEST_DECL void init( int& argc, char** argv );
0072
0073
0074
0075
0076
0077
0078 BOOST_TEST_DECL runtime::arguments_store const& argument_store();
0079
0080 template<typename T>
0081 inline T const&
0082 get( runtime::cstring parameter_name )
0083 {
0084 return argument_store().get<T>( parameter_name );
0085 }
0086
0087 inline bool has( runtime::cstring parameter_name )
0088 {
0089 return argument_store().has( parameter_name );
0090 }
0091
0092
0093 BOOST_TEST_DECL bool save_pattern();
0094
0095
0096
0097
0098
0099 class stream_holder {
0100 public:
0101
0102 explicit stream_holder( std::ostream& default_stream = std::cout )
0103 : m_stream( &default_stream )
0104 {
0105 }
0106
0107 void setup( const const_string& stream_name,
0108 boost::function<void ()> const &cleaner_callback = boost::function<void ()>() )
0109 {
0110 if(stream_name.empty())
0111 return;
0112
0113 if( stream_name == "stderr" ) {
0114 m_stream = &std::cerr;
0115 if(cleaner_callback) {
0116 m_cleaner = boost::make_shared<callback_cleaner>(cleaner_callback);
0117 }
0118 else {
0119 m_cleaner.reset();
0120 }
0121 }
0122 else if( stream_name == "stdout" ) {
0123 m_stream = &std::cout;
0124 if (cleaner_callback) {
0125 m_cleaner = boost::make_shared<callback_cleaner>(cleaner_callback);
0126 }
0127 else {
0128 m_cleaner.reset();
0129 }
0130 }
0131 else {
0132 m_cleaner = boost::make_shared<callback_cleaner>(cleaner_callback);
0133 m_cleaner->m_file.open( std::string(stream_name.begin(), stream_name.end()).c_str() );
0134 m_stream = &m_cleaner->m_file;
0135 }
0136 }
0137
0138
0139 std::ostream& ref() const { return *m_stream; }
0140
0141 private:
0142 struct callback_cleaner {
0143 callback_cleaner(boost::function<void ()> cleaner_callback)
0144 : m_cleaner_callback(cleaner_callback)
0145 , m_file() {
0146 }
0147 ~callback_cleaner() {
0148 if( m_cleaner_callback )
0149 m_cleaner_callback();
0150 }
0151 boost::function<void ()> m_cleaner_callback;
0152 std::ofstream m_file;
0153 };
0154
0155
0156 boost::shared_ptr<callback_cleaner> m_cleaner;
0157 std::ostream* m_stream;
0158 };
0159
0160 }
0161 }
0162 }
0163
0164
0165
0166 #include <boost/test/detail/enable_warnings.hpp>
0167
0168 #endif