31
|
1 |
// (C) Copyright Gennadiy Rozental 2005.
|
|
2 |
// Distributed under the Boost Software License, Version 1.0.
|
|
3 |
// (See accompanying file LICENSE_1_0.txt or copy at
|
|
4 |
// http://www.boost.org/LICENSE_1_0.txt)
|
|
5 |
|
|
6 |
// See http://www.boost.org/libs/test for the library home page.
|
|
7 |
//
|
|
8 |
// File : $RCSfile: results_reporter.ipp,v $
|
|
9 |
//
|
|
10 |
// Version : $Revision: 1.5 $
|
|
11 |
//
|
|
12 |
// Description : result reporting facilties
|
|
13 |
// ***************************************************************************
|
|
14 |
|
|
15 |
#ifndef BOOST_TEST_RESULTS_REPORTER_IPP_020105GER
|
|
16 |
#define BOOST_TEST_RESULTS_REPORTER_IPP_020105GER
|
|
17 |
|
|
18 |
// Boost.Test
|
|
19 |
#include <boost/test/results_reporter.hpp>
|
|
20 |
#include <boost/test/unit_test_suite_impl.hpp>
|
|
21 |
#include <boost/test/results_collector.hpp>
|
|
22 |
#include <boost/test/framework.hpp>
|
|
23 |
#include <boost/test/output/plain_report_formatter.hpp>
|
|
24 |
#include <boost/test/output/xml_report_formatter.hpp>
|
|
25 |
|
|
26 |
#include <boost/test/detail/wrap_io_saver.hpp>
|
|
27 |
|
|
28 |
// Boost
|
|
29 |
#include <boost/scoped_ptr.hpp>
|
|
30 |
|
|
31 |
// STL
|
|
32 |
#include <iostream>
|
|
33 |
|
|
34 |
#include <boost/test/detail/suppress_warnings.hpp>
|
|
35 |
|
|
36 |
//____________________________________________________________________________//
|
|
37 |
|
|
38 |
namespace boost {
|
|
39 |
|
|
40 |
namespace unit_test {
|
|
41 |
|
|
42 |
namespace results_reporter {
|
|
43 |
|
|
44 |
// ************************************************************************** //
|
|
45 |
// ************** result reporter implementation ************** //
|
|
46 |
// ************************************************************************** //
|
|
47 |
|
|
48 |
namespace {
|
|
49 |
|
|
50 |
struct results_reporter_impl : test_tree_visitor {
|
|
51 |
// Constructor
|
|
52 |
results_reporter_impl()
|
|
53 |
: m_output( &std::cerr )
|
|
54 |
, m_stream_state_saver( new io_saver_type( std::cerr ) )
|
|
55 |
, m_report_level( CONFIRMATION_REPORT )
|
|
56 |
, m_formatter( new output::plain_report_formatter )
|
|
57 |
{}
|
|
58 |
|
|
59 |
// test tree visitor interface implementation
|
|
60 |
void visit( test_case const& tc )
|
|
61 |
{
|
|
62 |
m_formatter->test_unit_report_start( tc, *m_output );
|
|
63 |
m_formatter->test_unit_report_finish( tc, *m_output );
|
|
64 |
}
|
|
65 |
bool test_suite_start( test_suite const& ts )
|
|
66 |
{
|
|
67 |
m_formatter->test_unit_report_start( ts, *m_output );
|
|
68 |
|
|
69 |
if( m_report_level == DETAILED_REPORT && !results_collector.results( ts.p_id ).p_skipped )
|
|
70 |
return true;
|
|
71 |
|
|
72 |
m_formatter->test_unit_report_finish( ts, *m_output );
|
|
73 |
return false;
|
|
74 |
}
|
|
75 |
void test_suite_finish( test_suite const& ts )
|
|
76 |
{
|
|
77 |
m_formatter->test_unit_report_finish( ts, *m_output );
|
|
78 |
}
|
|
79 |
|
|
80 |
typedef scoped_ptr<io_saver_type> saver_ptr;
|
|
81 |
|
|
82 |
// Data members
|
|
83 |
std::ostream* m_output;
|
|
84 |
saver_ptr m_stream_state_saver;
|
|
85 |
report_level m_report_level;
|
|
86 |
scoped_ptr<format> m_formatter;
|
|
87 |
};
|
|
88 |
|
|
89 |
results_reporter_impl& s_rr_impl() { static results_reporter_impl the_inst; return the_inst; }
|
|
90 |
|
|
91 |
} // local namespace
|
|
92 |
|
|
93 |
// ************************************************************************** //
|
|
94 |
// ************** report configuration ************** //
|
|
95 |
// ************************************************************************** //
|
|
96 |
|
|
97 |
void
|
|
98 |
set_level( report_level l )
|
|
99 |
{
|
|
100 |
if( l != INV_REPORT_LEVEL )
|
|
101 |
s_rr_impl().m_report_level = l;
|
|
102 |
}
|
|
103 |
|
|
104 |
//____________________________________________________________________________//
|
|
105 |
|
|
106 |
void
|
|
107 |
set_stream( std::ostream& ostr )
|
|
108 |
{
|
|
109 |
s_rr_impl().m_output = &ostr;
|
|
110 |
s_rr_impl().m_stream_state_saver.reset( new io_saver_type( ostr ) );
|
|
111 |
}
|
|
112 |
|
|
113 |
//____________________________________________________________________________//
|
|
114 |
|
|
115 |
void
|
|
116 |
set_format( output_format rf )
|
|
117 |
{
|
|
118 |
switch( rf ) {
|
|
119 |
case CLF:
|
|
120 |
set_format( new output::plain_report_formatter );
|
|
121 |
break;
|
|
122 |
case XML:
|
|
123 |
set_format( new output::xml_report_formatter );
|
|
124 |
break;
|
|
125 |
}
|
|
126 |
}
|
|
127 |
|
|
128 |
//____________________________________________________________________________//
|
|
129 |
|
|
130 |
void
|
|
131 |
set_format( results_reporter::format* f )
|
|
132 |
{
|
|
133 |
if( f )
|
|
134 |
s_rr_impl().m_formatter.reset( f );
|
|
135 |
}
|
|
136 |
|
|
137 |
//____________________________________________________________________________//
|
|
138 |
|
|
139 |
// ************************************************************************** //
|
|
140 |
// ************** report initiation ************** //
|
|
141 |
// ************************************************************************** //
|
|
142 |
|
|
143 |
EXPORT_C void
|
|
144 |
make_report( report_level l, test_unit_id id )
|
|
145 |
{
|
|
146 |
if( l == INV_REPORT_LEVEL )
|
|
147 |
l = s_rr_impl().m_report_level;
|
|
148 |
|
|
149 |
if( l == NO_REPORT )
|
|
150 |
return;
|
|
151 |
|
|
152 |
if( id == INV_TEST_UNIT_ID )
|
|
153 |
id = framework::master_test_suite().p_id;
|
|
154 |
|
|
155 |
s_rr_impl().m_stream_state_saver->restore();
|
|
156 |
|
|
157 |
report_level bkup = s_rr_impl().m_report_level;
|
|
158 |
s_rr_impl().m_report_level = l;
|
|
159 |
|
|
160 |
s_rr_impl().m_formatter->results_report_start( *s_rr_impl().m_output );
|
|
161 |
|
|
162 |
switch( l ) {
|
|
163 |
case CONFIRMATION_REPORT:
|
|
164 |
s_rr_impl().m_formatter->do_confirmation_report( framework::get<test_unit>( id ), *s_rr_impl().m_output );
|
|
165 |
break;
|
|
166 |
case SHORT_REPORT:
|
|
167 |
case DETAILED_REPORT:
|
|
168 |
traverse_test_tree( id, s_rr_impl() );
|
|
169 |
break;
|
|
170 |
default:
|
|
171 |
break;
|
|
172 |
}
|
|
173 |
|
|
174 |
s_rr_impl().m_formatter->results_report_finish( *s_rr_impl().m_output );
|
|
175 |
s_rr_impl().m_report_level = bkup;
|
|
176 |
}
|
|
177 |
|
|
178 |
//____________________________________________________________________________//
|
|
179 |
|
|
180 |
} // namespace results_reporter
|
|
181 |
|
|
182 |
} // namespace unit_test
|
|
183 |
|
|
184 |
} // namespace boost
|
|
185 |
|
|
186 |
//____________________________________________________________________________//
|
|
187 |
|
|
188 |
#include <boost/test/detail/enable_warnings.hpp>
|
|
189 |
|
|
190 |
// ***************************************************************************
|
|
191 |
// Revision History :
|
|
192 |
//
|
|
193 |
// $Log: results_reporter.ipp,v $
|
|
194 |
// Revision 1.5 2005/12/14 05:57:32 rogeeff
|
|
195 |
// *** empty log message ***
|
|
196 |
//
|
|
197 |
// Revision 1.4 2005/04/30 16:48:51 rogeeff
|
|
198 |
// io saver warkaround for classic io is shared
|
|
199 |
//
|
|
200 |
// Revision 1.3 2005/04/29 06:27:45 rogeeff
|
|
201 |
// bug fix for manipulator nandling
|
|
202 |
// bug fix for invalid output stream
|
|
203 |
// bug fix for set_format function implementation
|
|
204 |
//
|
|
205 |
// Revision 1.2 2005/02/21 10:12:20 rogeeff
|
|
206 |
// Support for random order of test cases implemented
|
|
207 |
//
|
|
208 |
// Revision 1.1 2005/02/20 08:27:07 rogeeff
|
|
209 |
// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
|
|
210 |
//
|
|
211 |
// ***************************************************************************
|
|
212 |
|
|
213 |
#endif // BOOST_TEST_RESULTS_REPORTER_IPP_020105GER
|