summaryrefslogtreecommitdiff
path: root/boost/test/unit_test_parameters.hpp
blob: 0b77f3719756667e0936f5fa1c4ddbe43ee4d2e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
//  (C) Copyright Gennadiy Rozental 2001.
//  Distributed under the Boost Software License, Version 1.0.
//  (See accompanying file LICENSE_1_0.txt or copy at
//  http://www.boost.org/LICENSE_1_0.txt)

//  See http://www.boost.org/libs/test for the library home page.
//
/// @file
/// @brief Provides access to various Unit Test Framework runtime parameters
///
/// Primarily for use by the framework itself
// ***************************************************************************

#ifndef BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER
#define BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER

// Boost.Test
#include <boost/test/detail/global_typedef.hpp>
#include <boost/test/utils/runtime/argument.hpp>
#include <boost/make_shared.hpp>

// STL
#include <iostream>
#include <fstream>

#include <boost/test/detail/suppress_warnings.hpp>

//____________________________________________________________________________//

namespace boost {
namespace unit_test {
namespace runtime_config {

// ************************************************************************** //
// **************                 runtime_config               ************** //
// ************************************************************************** //

// UTF parameters
BOOST_TEST_DECL extern std::string btrt_auto_start_dbg;
BOOST_TEST_DECL extern std::string btrt_break_exec_path;
BOOST_TEST_DECL extern std::string btrt_build_info;
BOOST_TEST_DECL extern std::string btrt_catch_sys_errors;
BOOST_TEST_DECL extern std::string btrt_color_output;
BOOST_TEST_DECL extern std::string btrt_detect_fp_except;
BOOST_TEST_DECL extern std::string btrt_detect_mem_leaks;
BOOST_TEST_DECL extern std::string btrt_list_content;
BOOST_TEST_DECL extern std::string btrt_list_labels;
BOOST_TEST_DECL extern std::string btrt_log_format;
BOOST_TEST_DECL extern std::string btrt_log_level;
BOOST_TEST_DECL extern std::string btrt_log_sink;
BOOST_TEST_DECL extern std::string btrt_combined_logger;
BOOST_TEST_DECL extern std::string btrt_output_format;
BOOST_TEST_DECL extern std::string btrt_random_seed;
BOOST_TEST_DECL extern std::string btrt_report_format;
BOOST_TEST_DECL extern std::string btrt_report_level;
BOOST_TEST_DECL extern std::string btrt_report_mem_leaks;
BOOST_TEST_DECL extern std::string btrt_report_sink;
BOOST_TEST_DECL extern std::string btrt_result_code;
BOOST_TEST_DECL extern std::string btrt_run_filters;
BOOST_TEST_DECL extern std::string btrt_save_test_pattern;
BOOST_TEST_DECL extern std::string btrt_show_progress;
BOOST_TEST_DECL extern std::string btrt_use_alt_stack;
BOOST_TEST_DECL extern std::string btrt_wait_for_debugger;
BOOST_TEST_DECL extern std::string btrt_help;
BOOST_TEST_DECL extern std::string btrt_usage;
BOOST_TEST_DECL extern std::string btrt_version;

BOOST_TEST_DECL void init( int& argc, char** argv );

// ************************************************************************** //
// **************              runtime_param::get              ************** //
// ************************************************************************** //

/// Access to arguments
BOOST_TEST_DECL runtime::arguments_store const& argument_store();

template<typename T>
inline T const&
get( runtime::cstring parameter_name )
{
    return argument_store().get<T>( parameter_name );
}

inline bool has( runtime::cstring parameter_name )
{
    return argument_store().has( parameter_name );
}

/// For public access
BOOST_TEST_DECL bool save_pattern();

// ************************************************************************** //
// **************                  stream_holder               ************** //
// ************************************************************************** //

class stream_holder {
public:
    // Constructor
    explicit        stream_holder( std::ostream& default_stream = std::cout)
    : m_stream( &default_stream )
    {
    }

    void            setup( const const_string& stream_name )
    {
        if(stream_name.empty())
            return;

        if( stream_name == "stderr" )
            m_stream = &std::cerr;
        else if( stream_name == "stdout" )
            m_stream = &std::cout;
        else {
            m_file = boost::make_shared<std::ofstream>();
            m_file->open( std::string(stream_name.begin(), stream_name.end()).c_str() );
            m_stream = m_file.get();
        }
    }

    // Access methods
    std::ostream&   ref() const { return *m_stream; }

private:
    // Data members
    boost::shared_ptr<std::ofstream>   m_file;
    std::ostream*   m_stream;
};

} // namespace runtime_config
} // namespace unit_test
} // namespace boost

//____________________________________________________________________________//

#include <boost/test/detail/enable_warnings.hpp>

#endif // BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER