Jeff Thompson | ef2d5a4 | 2013-08-22 19:09:24 -0700 | [diff] [blame] | 1 | // (C) Copyright Gennadiy Rozental 2005-2008. |
| 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$ |
| 9 | // |
| 10 | // Version : $Revision: 57992 $ |
| 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 <ndnboost/test/results_reporter.hpp> |
| 20 | #include <ndnboost/test/unit_test_suite_impl.hpp> |
| 21 | #include <ndnboost/test/results_collector.hpp> |
| 22 | #include <ndnboost/test/framework.hpp> |
| 23 | #include <ndnboost/test/output/plain_report_formatter.hpp> |
| 24 | #include <ndnboost/test/output/xml_report_formatter.hpp> |
| 25 | |
| 26 | #include <ndnboost/test/detail/unit_test_parameters.hpp> |
| 27 | |
| 28 | // Boost |
| 29 | #include <ndnboost/scoped_ptr.hpp> |
| 30 | #include <ndnboost/io/ios_state.hpp> |
| 31 | typedef ::ndnboost::io::ios_base_all_saver io_saver_type; |
| 32 | |
| 33 | // STL |
| 34 | #include <iostream> |
| 35 | |
| 36 | #include <ndnboost/test/detail/suppress_warnings.hpp> |
| 37 | |
| 38 | //____________________________________________________________________________// |
| 39 | |
| 40 | namespace ndnboost { |
| 41 | |
| 42 | namespace unit_test { |
| 43 | |
| 44 | namespace results_reporter { |
| 45 | |
| 46 | // ************************************************************************** // |
| 47 | // ************** result reporter implementation ************** // |
| 48 | // ************************************************************************** // |
| 49 | |
| 50 | namespace { |
| 51 | |
| 52 | struct results_reporter_impl : test_tree_visitor { |
| 53 | // Constructor |
| 54 | results_reporter_impl() |
| 55 | : m_output( runtime_config::report_sink() ) |
| 56 | , m_stream_state_saver( new io_saver_type( *m_output ) ) |
| 57 | , m_report_level( CONFIRMATION_REPORT ) |
| 58 | , m_formatter( new output::plain_report_formatter ) |
| 59 | {} |
| 60 | |
| 61 | // test tree visitor interface implementation |
| 62 | void visit( test_case const& tc ) |
| 63 | { |
| 64 | m_formatter->test_unit_report_start( tc, *m_output ); |
| 65 | m_formatter->test_unit_report_finish( tc, *m_output ); |
| 66 | } |
| 67 | bool test_suite_start( test_suite const& ts ) |
| 68 | { |
| 69 | m_formatter->test_unit_report_start( ts, *m_output ); |
| 70 | |
| 71 | if( m_report_level == DETAILED_REPORT && !results_collector.results( ts.p_id ).p_skipped ) |
| 72 | return true; |
| 73 | |
| 74 | m_formatter->test_unit_report_finish( ts, *m_output ); |
| 75 | return false; |
| 76 | } |
| 77 | void test_suite_finish( test_suite const& ts ) |
| 78 | { |
| 79 | m_formatter->test_unit_report_finish( ts, *m_output ); |
| 80 | } |
| 81 | |
| 82 | typedef scoped_ptr<io_saver_type> saver_ptr; |
| 83 | |
| 84 | // Data members |
| 85 | std::ostream* m_output; |
| 86 | saver_ptr m_stream_state_saver; |
| 87 | report_level m_report_level; |
| 88 | scoped_ptr<format> m_formatter; |
| 89 | }; |
| 90 | |
| 91 | results_reporter_impl& s_rr_impl() { static results_reporter_impl the_inst; return the_inst; } |
| 92 | |
| 93 | } // local namespace |
| 94 | |
| 95 | // ************************************************************************** // |
| 96 | // ************** report configuration ************** // |
| 97 | // ************************************************************************** // |
| 98 | |
| 99 | void |
| 100 | set_level( report_level l ) |
| 101 | { |
| 102 | if( l != INV_REPORT_LEVEL ) |
| 103 | s_rr_impl().m_report_level = l; |
| 104 | } |
| 105 | |
| 106 | //____________________________________________________________________________// |
| 107 | |
| 108 | void |
| 109 | set_stream( std::ostream& ostr ) |
| 110 | { |
| 111 | s_rr_impl().m_output = &ostr; |
| 112 | s_rr_impl().m_stream_state_saver.reset( new io_saver_type( ostr ) ); |
| 113 | } |
| 114 | |
| 115 | //____________________________________________________________________________// |
| 116 | |
| 117 | std::ostream& |
| 118 | get_stream() |
| 119 | { |
| 120 | return *s_rr_impl().m_output; |
| 121 | } |
| 122 | |
| 123 | //____________________________________________________________________________// |
| 124 | |
| 125 | void |
| 126 | set_format( output_format rf ) |
| 127 | { |
| 128 | switch( rf ) { |
| 129 | case CLF: |
| 130 | set_format( new output::plain_report_formatter ); |
| 131 | break; |
| 132 | case XML: |
| 133 | set_format( new output::xml_report_formatter ); |
| 134 | break; |
| 135 | default: |
| 136 | break; |
| 137 | } |
| 138 | } |
| 139 | |
| 140 | //____________________________________________________________________________// |
| 141 | |
| 142 | void |
| 143 | set_format( results_reporter::format* f ) |
| 144 | { |
| 145 | if( f ) |
| 146 | s_rr_impl().m_formatter.reset( f ); |
| 147 | } |
| 148 | |
| 149 | //____________________________________________________________________________// |
| 150 | |
| 151 | // ************************************************************************** // |
| 152 | // ************** report initiation ************** // |
| 153 | // ************************************************************************** // |
| 154 | |
| 155 | void |
| 156 | make_report( report_level l, test_unit_id id ) |
| 157 | { |
| 158 | if( l == INV_REPORT_LEVEL ) |
| 159 | l = s_rr_impl().m_report_level; |
| 160 | |
| 161 | if( l == NO_REPORT ) |
| 162 | return; |
| 163 | |
| 164 | if( id == INV_TEST_UNIT_ID ) |
| 165 | id = framework::master_test_suite().p_id; |
| 166 | |
| 167 | s_rr_impl().m_stream_state_saver->restore(); |
| 168 | |
| 169 | report_level bkup = s_rr_impl().m_report_level; |
| 170 | s_rr_impl().m_report_level = l; |
| 171 | |
| 172 | s_rr_impl().m_formatter->results_report_start( *s_rr_impl().m_output ); |
| 173 | |
| 174 | switch( l ) { |
| 175 | case CONFIRMATION_REPORT: |
| 176 | s_rr_impl().m_formatter->do_confirmation_report( framework::get<test_unit>( id ), *s_rr_impl().m_output ); |
| 177 | break; |
| 178 | case SHORT_REPORT: |
| 179 | case DETAILED_REPORT: |
| 180 | traverse_test_tree( id, s_rr_impl() ); |
| 181 | break; |
| 182 | default: |
| 183 | break; |
| 184 | } |
| 185 | |
| 186 | s_rr_impl().m_formatter->results_report_finish( *s_rr_impl().m_output ); |
| 187 | s_rr_impl().m_report_level = bkup; |
| 188 | } |
| 189 | |
| 190 | //____________________________________________________________________________// |
| 191 | |
| 192 | } // namespace results_reporter |
| 193 | |
| 194 | } // namespace unit_test |
| 195 | |
| 196 | } // namespace ndnboost |
| 197 | |
| 198 | //____________________________________________________________________________// |
| 199 | |
| 200 | #include <ndnboost/test/detail/enable_warnings.hpp> |
| 201 | |
| 202 | #endif // BOOST_TEST_RESULTS_REPORTER_IPP_020105GER |