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: 49312 $ 11// 12// Description : plain report formatter definition 13// *************************************************************************** 14 15#ifndef BOOST_TEST_PLAIN_REPORT_FORMATTER_IPP_020105GER 16#define BOOST_TEST_PLAIN_REPORT_FORMATTER_IPP_020105GER 17 18// Boost.Test 19#include <boost/test/output/plain_report_formatter.hpp> 20#include <boost/test/utils/custom_manip.hpp> 21#include <boost/test/results_collector.hpp> 22#include <boost/test/unit_test_suite_impl.hpp> 23 24#include <boost/test/utils/basic_cstring/io.hpp> 25 26// STL 27#include <iomanip> 28#include <boost/config/no_tr1/cmath.hpp> 29#include <iostream> 30 31#include <boost/test/detail/suppress_warnings.hpp> 32 33# ifdef BOOST_NO_STDC_NAMESPACE 34namespace std { using ::log10; } 35# endif 36 37//____________________________________________________________________________// 38 39namespace boost { 40 41namespace unit_test { 42 43namespace output { 44 45namespace { 46 47typedef custom_manip<struct quote_t> quote; 48 49template<typename T> 50inline std::ostream& 51operator<<( custom_printer<quote> const& p, T const& value ) 52{ 53 *p << '"' << value << '"'; 54 55 return *p; 56} 57 58//____________________________________________________________________________// 59 60void 61print_stat_value( std::ostream& ostr, counter_t v, counter_t indent, counter_t total, 62 const_string name, const_string res ) 63{ 64 if( v > 0 ) { 65 ostr << std::setw( indent ) << "" 66 << v << ' ' << name << ( v != 1 ? "s" : "" ); 67 if( total > 0 ) 68 ostr << " out of " << total; 69 70 ostr << ' ' << res << '\n'; 71 } 72} 73 74//____________________________________________________________________________// 75 76} // local namespace 77 78// ************************************************************************** // 79// ************** plain_report_formatter ************** // 80// ************************************************************************** // 81 82void 83plain_report_formatter::results_report_start( std::ostream& ostr ) 84{ 85 m_indent = 0; 86 ostr << '\n'; 87} 88 89//____________________________________________________________________________// 90 91void 92plain_report_formatter::results_report_finish( std::ostream& ostr ) 93{ 94 ostr.flush(); 95} 96 97//____________________________________________________________________________// 98 99void 100plain_report_formatter::test_unit_report_start( test_unit const& tu, std::ostream& ostr ) 101{ 102 test_results const& tr = results_collector.results( tu.p_id ); 103 104 const_string descr; 105 106 if( tr.passed() ) 107 descr = "passed"; 108 else if( tr.p_skipped ) 109 descr = "skipped"; 110 else if( tr.p_aborted ) 111 descr = "aborted"; 112 else 113 descr = "failed"; 114 115 ostr << std::setw( m_indent ) << "" 116 << "Test " << (tu.p_type == tut_case ? "case " : "suite " ) << quote() << tu.p_name << ' ' << descr; 117 118 if( tr.p_skipped ) { 119 ostr << " due to " << (tu.check_dependencies() ? "test aborting\n" : "failed dependancy\n" ); 120 m_indent += 2; 121 return; 122 } 123 124 counter_t total_assertions = tr.p_assertions_passed + tr.p_assertions_failed; 125 counter_t total_tc = tr.p_test_cases_passed + tr.p_test_cases_failed + tr.p_test_cases_skipped; 126 127 if( total_assertions > 0 || total_tc > 0 ) 128 ostr << " with:"; 129 130 ostr << '\n'; 131 m_indent += 2; 132 133 print_stat_value( ostr, tr.p_assertions_passed, m_indent, total_assertions, "assertion", "passed" ); 134 print_stat_value( ostr, tr.p_assertions_failed, m_indent, total_assertions, "assertion", "failed" ); 135 print_stat_value( ostr, tr.p_expected_failures, m_indent, 0 , "failure" , "expected" ); 136 print_stat_value( ostr, tr.p_test_cases_passed, m_indent, total_tc , "test case", "passed" ); 137 print_stat_value( ostr, tr.p_test_cases_failed, m_indent, total_tc , "test case", "failed" ); 138 print_stat_value( ostr, tr.p_test_cases_skipped, m_indent, total_tc , "test case", "skipped" ); 139 print_stat_value( ostr, tr.p_test_cases_aborted, m_indent, total_tc , "test case", "aborted" ); 140 141 ostr << '\n'; 142} 143 144//____________________________________________________________________________// 145 146void 147plain_report_formatter::test_unit_report_finish( test_unit const&, std::ostream& ) 148{ 149 m_indent -= 2; 150} 151 152//____________________________________________________________________________// 153 154void 155plain_report_formatter::do_confirmation_report( test_unit const& tu, std::ostream& ostr ) 156{ 157 test_results const& tr = results_collector.results( tu.p_id ); 158 159 if( tr.passed() ) { 160 ostr << "*** No errors detected\n"; 161 return; 162 } 163 164 if( tr.p_skipped ) { 165 ostr << "*** Test " << tu.p_type_name << " skipped due to " 166 << (tu.check_dependencies() ? "test aborting\n" : "failed dependancy\n" ); 167 return; 168 } 169 170 if( tr.p_assertions_failed == 0 ) { 171 ostr << "*** errors detected in test " << tu.p_type_name << " " << quote() << tu.p_name 172 << "; see standard output for details\n"; 173 return; 174 } 175 176 counter_t num_failures = tr.p_assertions_failed; 177 178 ostr << "*** " << num_failures << " failure" << ( num_failures != 1 ? "s" : "" ) << " detected"; 179 180 if( tr.p_expected_failures > 0 ) 181 ostr << " (" << tr.p_expected_failures << " failure" << ( tr.p_expected_failures != 1 ? "s" : "" ) << " expected)"; 182 183 ostr << " in test " << tu.p_type_name << " " << quote() << tu.p_name << "\n"; 184} 185 186//____________________________________________________________________________// 187 188} // namespace output 189 190} // namespace unit_test 191 192} // namespace boost 193 194//____________________________________________________________________________// 195 196#include <boost/test/detail/enable_warnings.hpp> 197 198#endif // BOOST_TEST_PLAIN_REPORT_FORMATTER_IPP_020105GER 199