annotate DEPENDENCIES/generic/include/boost/test/impl/compiler_log_formatter.ipp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 // (C) Copyright Gennadiy Rozental 2005-2008.
Chris@16 2 // Distributed under the Boost Software License, Version 1.0.
Chris@16 3 // (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 4 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 5
Chris@16 6 // See http://www.boost.org/libs/test for the library home page.
Chris@16 7 //
Chris@16 8 // File : $RCSfile$
Chris@16 9 //
Chris@101 10 // Version : $Revision$
Chris@16 11 //
Chris@16 12 // Description : implements compiler like Log formatter
Chris@16 13 // ***************************************************************************
Chris@16 14
Chris@16 15 #ifndef BOOST_TEST_COMPILER_LOG_FORMATTER_IPP_020105GER
Chris@16 16 #define BOOST_TEST_COMPILER_LOG_FORMATTER_IPP_020105GER
Chris@16 17
Chris@16 18 // Boost.Test
Chris@16 19 #include <boost/test/output/compiler_log_formatter.hpp>
Chris@16 20 #include <boost/test/unit_test_suite_impl.hpp>
Chris@16 21 #include <boost/test/framework.hpp>
Chris@16 22 #include <boost/test/utils/basic_cstring/io.hpp>
Chris@16 23 #include <boost/test/utils/lazy_ostream.hpp>
Chris@16 24
Chris@16 25 // Boost
Chris@16 26 #include <boost/version.hpp>
Chris@16 27
Chris@16 28 // STL
Chris@16 29 #include <iostream>
Chris@16 30
Chris@16 31 #include <boost/test/detail/suppress_warnings.hpp>
Chris@16 32
Chris@16 33 //____________________________________________________________________________//
Chris@16 34
Chris@16 35 namespace boost {
Chris@16 36
Chris@16 37 namespace unit_test {
Chris@16 38
Chris@16 39 namespace output {
Chris@16 40
Chris@16 41 // ************************************************************************** //
Chris@16 42 // ************** compiler_log_formatter ************** //
Chris@16 43 // ************************************************************************** //
Chris@16 44
Chris@16 45 namespace {
Chris@16 46
Chris@16 47 const_string
Chris@16 48 test_phase_identifier()
Chris@16 49 {
Chris@16 50 return framework::is_initialized()
Chris@16 51 ? const_string( framework::current_test_case().p_name.get() )
Chris@16 52 : BOOST_TEST_L( "Test setup" );
Chris@16 53 }
Chris@16 54
Chris@16 55 } // local namespace
Chris@16 56
Chris@16 57 //____________________________________________________________________________//
Chris@16 58
Chris@16 59 void
Chris@16 60 compiler_log_formatter::log_start( std::ostream& output, counter_t test_cases_amount )
Chris@16 61 {
Chris@16 62 if( test_cases_amount > 0 )
Chris@16 63 output << "Running " << test_cases_amount << " test "
Chris@16 64 << (test_cases_amount > 1 ? "cases" : "case") << "...\n";
Chris@16 65 }
Chris@16 66
Chris@16 67 //____________________________________________________________________________//
Chris@16 68
Chris@16 69 void
Chris@16 70 compiler_log_formatter::log_finish( std::ostream& ostr )
Chris@16 71 {
Chris@16 72 ostr.flush();
Chris@16 73 }
Chris@16 74
Chris@16 75 //____________________________________________________________________________//
Chris@16 76
Chris@16 77 void
Chris@16 78 compiler_log_formatter::log_build_info( std::ostream& output )
Chris@16 79 {
Chris@16 80 output << "Platform: " << BOOST_PLATFORM << '\n'
Chris@16 81 << "Compiler: " << BOOST_COMPILER << '\n'
Chris@16 82 << "STL : " << BOOST_STDLIB << '\n'
Chris@16 83 << "Boost : " << BOOST_VERSION/100000 << "."
Chris@16 84 << BOOST_VERSION/100 % 1000 << "."
Chris@16 85 << BOOST_VERSION % 100 << std::endl;
Chris@16 86 }
Chris@16 87
Chris@16 88 //____________________________________________________________________________//
Chris@16 89
Chris@16 90 void
Chris@16 91 compiler_log_formatter::test_unit_start( std::ostream& output, test_unit const& tu )
Chris@16 92 {
Chris@16 93 output << "Entering test " << tu.p_type_name << " \"" << tu.p_name << "\"" << std::endl;
Chris@16 94 }
Chris@16 95
Chris@16 96 //____________________________________________________________________________//
Chris@16 97
Chris@16 98 void
Chris@16 99 compiler_log_formatter::test_unit_finish( std::ostream& output, test_unit const& tu, unsigned long elapsed )
Chris@16 100 {
Chris@16 101 output << "Leaving test " << tu.p_type_name << " \"" << tu.p_name << "\"";
Chris@16 102
Chris@16 103 if( elapsed > 0 ) {
Chris@16 104 output << "; testing time: ";
Chris@16 105 if( elapsed % 1000 == 0 )
Chris@16 106 output << elapsed/1000 << "ms";
Chris@16 107 else
Chris@16 108 output << elapsed << "mks";
Chris@16 109 }
Chris@16 110
Chris@16 111 output << std::endl;
Chris@16 112 }
Chris@16 113
Chris@16 114 //____________________________________________________________________________//
Chris@16 115
Chris@16 116 void
Chris@16 117 compiler_log_formatter::test_unit_skipped( std::ostream& output, test_unit const& tu )
Chris@16 118 {
Chris@16 119 output << "Test " << tu.p_type_name << " \"" << tu.p_name << "\"" << "is skipped" << std::endl;
Chris@16 120 }
Chris@16 121
Chris@16 122 //____________________________________________________________________________//
Chris@16 123
Chris@16 124 void
Chris@16 125 compiler_log_formatter::log_exception( std::ostream& output, log_checkpoint_data const& checkpoint_data, execution_exception const& ex )
Chris@16 126 {
Chris@16 127 execution_exception::location const& loc = ex.where();
Chris@16 128 print_prefix( output, loc.m_file_name, loc.m_line_num );
Chris@16 129
Chris@16 130 output << "fatal error in \"" << (loc.m_function.is_empty() ? test_phase_identifier() : loc.m_function ) << "\": ";
Chris@16 131
Chris@16 132 output << ex.what();
Chris@16 133
Chris@16 134 if( !checkpoint_data.m_file_name.is_empty() ) {
Chris@16 135 output << '\n';
Chris@16 136 print_prefix( output, checkpoint_data.m_file_name, checkpoint_data.m_line_num );
Chris@16 137 output << "last checkpoint";
Chris@16 138 if( !checkpoint_data.m_message.empty() )
Chris@16 139 output << ": " << checkpoint_data.m_message;
Chris@16 140 }
Chris@16 141
Chris@16 142 output << std::endl;
Chris@16 143 }
Chris@16 144
Chris@16 145 //____________________________________________________________________________//
Chris@16 146
Chris@16 147 void
Chris@16 148 compiler_log_formatter::log_entry_start( std::ostream& output, log_entry_data const& entry_data, log_entry_types let )
Chris@16 149 {
Chris@16 150 switch( let ) {
Chris@16 151 case BOOST_UTL_ET_INFO:
Chris@16 152 print_prefix( output, entry_data.m_file_name, entry_data.m_line_num );
Chris@16 153 output << "info: ";
Chris@16 154 break;
Chris@16 155 case BOOST_UTL_ET_MESSAGE:
Chris@16 156 break;
Chris@16 157 case BOOST_UTL_ET_WARNING:
Chris@16 158 print_prefix( output, entry_data.m_file_name, entry_data.m_line_num );
Chris@16 159 output << "warning in \"" << test_phase_identifier() << "\": ";
Chris@16 160 break;
Chris@16 161 case BOOST_UTL_ET_ERROR:
Chris@16 162 print_prefix( output, entry_data.m_file_name, entry_data.m_line_num );
Chris@16 163 output << "error in \"" << test_phase_identifier() << "\": ";
Chris@16 164 break;
Chris@16 165 case BOOST_UTL_ET_FATAL_ERROR:
Chris@16 166 print_prefix( output, entry_data.m_file_name, entry_data.m_line_num );
Chris@16 167 output << "fatal error in \"" << test_phase_identifier() << "\": ";
Chris@16 168 break;
Chris@16 169 }
Chris@16 170 }
Chris@16 171
Chris@16 172 //____________________________________________________________________________//
Chris@16 173
Chris@16 174 void
Chris@16 175 compiler_log_formatter::log_entry_value( std::ostream& output, const_string value )
Chris@16 176 {
Chris@16 177 output << value;
Chris@16 178 }
Chris@16 179
Chris@16 180 //____________________________________________________________________________//
Chris@16 181
Chris@16 182 void
Chris@16 183 compiler_log_formatter::log_entry_value( std::ostream& output, lazy_ostream const& value )
Chris@16 184 {
Chris@16 185 output << value;
Chris@16 186 }
Chris@16 187
Chris@16 188 //____________________________________________________________________________//
Chris@16 189
Chris@16 190 void
Chris@16 191 compiler_log_formatter::log_entry_finish( std::ostream& output )
Chris@16 192 {
Chris@16 193 output << std::endl;
Chris@16 194 }
Chris@16 195
Chris@16 196 //____________________________________________________________________________//
Chris@16 197
Chris@16 198 void
Chris@16 199 compiler_log_formatter::print_prefix( std::ostream& output, const_string file, std::size_t line )
Chris@16 200 {
Chris@16 201 #ifdef __APPLE_CC__
Chris@16 202 // Xcode-compatible logging format, idea by Richard Dingwall at
Chris@16 203 // <http://richarddingwall.name/2008/06/01/using-the-boost-unit-test-framework-with-xcode-3/>.
Chris@16 204 output << file << ':' << line << ": ";
Chris@16 205 #else
Chris@16 206 output << file << '(' << line << "): ";
Chris@16 207 #endif
Chris@16 208 }
Chris@16 209
Chris@16 210 //____________________________________________________________________________//
Chris@16 211
Chris@16 212 } // namespace output
Chris@16 213
Chris@16 214 } // namespace unit_test
Chris@16 215
Chris@16 216 } // namespace boost
Chris@16 217
Chris@16 218 //____________________________________________________________________________//
Chris@16 219
Chris@16 220 #include <boost/test/detail/enable_warnings.hpp>
Chris@16 221
Chris@16 222 #endif // BOOST_TEST_COMPILER_LOG_FORMATTER_IPP_020105GER