Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-15 10:09:21

0001 //  (C) Copyright Gennadiy Rozental 2001.
0002 //  Distributed under the Boost Software License, Version 1.0.
0003 //  (See accompanying file LICENSE_1_0.txt or copy at
0004 //  http://www.boost.org/LICENSE_1_0.txt)
0005 
0006 //  See http://www.boost.org/libs/test for the library home page.
0007 //
0008 /// @file
0009 /// @brief Provides access to various Unit Test Framework runtime parameters
0010 ///
0011 /// Primarily for use by the framework itself
0012 // ***************************************************************************
0013 
0014 #ifndef BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER
0015 #define BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER
0016 
0017 // Boost.Test
0018 #include <boost/test/detail/global_typedef.hpp>
0019 #include <boost/test/utils/runtime/argument.hpp>
0020 #include <boost/make_shared.hpp>
0021 
0022 // Boost
0023 #include <boost/function/function0.hpp>
0024 
0025 // STL
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 // **************                 runtime_config               ************** //
0039 // ************************************************************************** //
0040 
0041 // UTF parameters
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 // **************              runtime_param::get              ************** //
0075 // ************************************************************************** //
0076 
0077 /// Access to arguments
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 /// For public access
0093 BOOST_TEST_DECL bool save_pattern();
0094 
0095 // ************************************************************************** //
0096 // **************                  stream_holder               ************** //
0097 // ************************************************************************** //
0098 
0099 class stream_holder {
0100 public:
0101     // Constructor
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     // Access methods
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     // Data members
0156     boost::shared_ptr<callback_cleaner>   m_cleaner;
0157     std::ostream*                         m_stream;
0158 };
0159 
0160 } // namespace runtime_config
0161 } // namespace unit_test
0162 } // namespace boost
0163 
0164 //____________________________________________________________________________//
0165 
0166 #include <boost/test/detail/enable_warnings.hpp>
0167 
0168 #endif // BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER