224 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			224 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //  (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        : $RCSfile$
 | |
| //
 | |
| //  Version     : $Revision$
 | |
| //
 | |
| //  Description : implements OF_XML Log formatter
 | |
| // ***************************************************************************
 | |
| 
 | |
| #ifndef BOOST_TEST_XML_LOG_FORMATTER_IPP_020105GER
 | |
| #define BOOST_TEST_XML_LOG_FORMATTER_IPP_020105GER
 | |
| 
 | |
| // Boost.Test
 | |
| #include <boost/test/output/xml_log_formatter.hpp>
 | |
| #include <boost/test/execution_monitor.hpp>
 | |
| #include <boost/test/framework.hpp>
 | |
| #include <boost/test/tree/test_unit.hpp>
 | |
| #include <boost/test/utils/basic_cstring/io.hpp>
 | |
| #include <boost/test/utils/xml_printer.hpp>
 | |
| 
 | |
| // Boost
 | |
| #include <boost/version.hpp>
 | |
| 
 | |
| // STL
 | |
| #include <iostream>
 | |
| 
 | |
| #include <boost/test/detail/suppress_warnings.hpp>
 | |
| 
 | |
| //____________________________________________________________________________//
 | |
| 
 | |
| namespace boost {
 | |
| namespace unit_test {
 | |
| namespace output {
 | |
| 
 | |
| static const_string tu_type_name( test_unit const& tu )
 | |
| {
 | |
|     return tu.p_type == TUT_CASE ? "TestCase" : "TestSuite";
 | |
| }
 | |
| 
 | |
| // ************************************************************************** //
 | |
| // **************               xml_log_formatter              ************** //
 | |
| // ************************************************************************** //
 | |
| 
 | |
| void
 | |
| xml_log_formatter::log_start( std::ostream& ostr, counter_t )
 | |
| {
 | |
|     ostr  << "<TestLog>";
 | |
| }
 | |
| 
 | |
| //____________________________________________________________________________//
 | |
| 
 | |
| void
 | |
| xml_log_formatter::log_finish( std::ostream& ostr )
 | |
| {
 | |
|     ostr  << "</TestLog>";
 | |
| }
 | |
| 
 | |
| //____________________________________________________________________________//
 | |
| 
 | |
| void
 | |
| xml_log_formatter::log_build_info( std::ostream& ostr )
 | |
| {
 | |
|     ostr  << "<BuildInfo"
 | |
|             << " platform"  << utils::attr_value() << BOOST_PLATFORM
 | |
|             << " compiler"  << utils::attr_value() << BOOST_COMPILER
 | |
|             << " stl"       << utils::attr_value() << BOOST_STDLIB
 | |
|             << " boost=\""  << BOOST_VERSION/100000     << "."
 | |
|                             << BOOST_VERSION/100 % 1000 << "."
 | |
|                             << BOOST_VERSION % 100      << '\"'
 | |
|             << "/>";
 | |
| }
 | |
| 
 | |
| //____________________________________________________________________________//
 | |
| 
 | |
| void
 | |
| xml_log_formatter::test_unit_start( std::ostream& ostr, test_unit const& tu )
 | |
| {
 | |
|     ostr << "<" << tu_type_name( tu ) << " name" << utils::attr_value() << tu.p_name.get();
 | |
| 
 | |
|     if( !tu.p_file_name.empty() )
 | |
|         ostr << BOOST_TEST_L( " file" ) << utils::attr_value() << tu.p_file_name
 | |
|              << BOOST_TEST_L( " line" ) << utils::attr_value() << tu.p_line_num;
 | |
| 
 | |
|     ostr << ">";
 | |
| }
 | |
| 
 | |
| //____________________________________________________________________________//
 | |
| 
 | |
| void
 | |
| xml_log_formatter::test_unit_finish( std::ostream& ostr, test_unit const& tu, unsigned long elapsed )
 | |
| {
 | |
|     if( tu.p_type == TUT_CASE )
 | |
|         ostr << "<TestingTime>" << elapsed << "</TestingTime>";
 | |
| 
 | |
|     ostr << "</" << tu_type_name( tu ) << ">";
 | |
| }
 | |
| 
 | |
| //____________________________________________________________________________//
 | |
| 
 | |
| void
 | |
| xml_log_formatter::test_unit_skipped( std::ostream& ostr, test_unit const& tu, const_string reason )
 | |
| {
 | |
|     ostr << "<" << tu_type_name( tu )
 | |
|          << " name"    << utils::attr_value() << tu.p_name
 | |
|          << " skipped" << utils::attr_value() << "yes"
 | |
|          << " reason"  << utils::attr_value() << reason
 | |
|          << "/>";
 | |
| }
 | |
| 
 | |
| //____________________________________________________________________________//
 | |
| 
 | |
| void
 | |
| xml_log_formatter::log_exception_start( std::ostream& ostr, log_checkpoint_data const& checkpoint_data, execution_exception const& ex )
 | |
| {
 | |
|     execution_exception::location const& loc = ex.where();
 | |
| 
 | |
|     ostr << "<Exception file" << utils::attr_value() << loc.m_file_name
 | |
|          << " line"           << utils::attr_value() << loc.m_line_num;
 | |
| 
 | |
|     if( !loc.m_function.is_empty() )
 | |
|         ostr << " function"   << utils::attr_value() << loc.m_function;
 | |
| 
 | |
|     ostr << ">" << utils::cdata() << ex.what();
 | |
| 
 | |
|     if( !checkpoint_data.m_file_name.is_empty() ) {
 | |
|         ostr << "<LastCheckpoint file" << utils::attr_value() << checkpoint_data.m_file_name
 | |
|              << " line"                << utils::attr_value() << checkpoint_data.m_line_num
 | |
|              << ">"
 | |
|              << utils::cdata() << checkpoint_data.m_message
 | |
|              << "</LastCheckpoint>";
 | |
|     }
 | |
| }
 | |
| 
 | |
| //____________________________________________________________________________//
 | |
| 
 | |
| void
 | |
| xml_log_formatter::log_exception_finish( std::ostream& ostr )
 | |
| {
 | |
|     ostr << "</Exception>";
 | |
| }
 | |
| 
 | |
| //____________________________________________________________________________//
 | |
| 
 | |
| void
 | |
| xml_log_formatter::log_entry_start( std::ostream& ostr, log_entry_data const& entry_data, log_entry_types let )
 | |
| {
 | |
|     static literal_string xml_tags[] = { "Info", "Message", "Warning", "Error", "FatalError" };
 | |
| 
 | |
|     m_curr_tag = xml_tags[let];
 | |
|     ostr << '<' << m_curr_tag
 | |
|          << BOOST_TEST_L( " file" ) << utils::attr_value() << entry_data.m_file_name
 | |
|          << BOOST_TEST_L( " line" ) << utils::attr_value() << entry_data.m_line_num
 | |
|          << BOOST_TEST_L( "><![CDATA[" );
 | |
| 
 | |
|     m_value_closed = false;
 | |
| }
 | |
| 
 | |
| //____________________________________________________________________________//
 | |
| 
 | |
| void
 | |
| xml_log_formatter::log_entry_value( std::ostream& ostr, const_string value )
 | |
| {
 | |
|     utils::print_escaped_cdata( ostr, value );
 | |
| }
 | |
| 
 | |
| //____________________________________________________________________________//
 | |
| 
 | |
| void
 | |
| xml_log_formatter::log_entry_finish( std::ostream& ostr )
 | |
| {
 | |
|     if( !m_value_closed ) {
 | |
|         ostr << BOOST_TEST_L( "]]>" );
 | |
|         m_value_closed = true;
 | |
|     }
 | |
| 
 | |
|     ostr << BOOST_TEST_L( "</" ) << m_curr_tag << BOOST_TEST_L( ">" );
 | |
| 
 | |
|     m_curr_tag.clear();
 | |
| }
 | |
| 
 | |
| //____________________________________________________________________________//
 | |
| 
 | |
| void
 | |
| xml_log_formatter::entry_context_start( std::ostream& ostr, log_level )
 | |
| {
 | |
|     if( !m_value_closed ) {
 | |
|         ostr << BOOST_TEST_L( "]]>" );
 | |
|         m_value_closed = true;
 | |
|     }
 | |
| 
 | |
|     ostr << BOOST_TEST_L( "<Context>" );
 | |
| }
 | |
| 
 | |
| //____________________________________________________________________________//
 | |
| 
 | |
| void
 | |
| xml_log_formatter::entry_context_finish( std::ostream& ostr )
 | |
| {
 | |
|     ostr << BOOST_TEST_L( "</Context>" );
 | |
| }
 | |
| 
 | |
| //____________________________________________________________________________//
 | |
| 
 | |
| void
 | |
| xml_log_formatter::log_entry_context( std::ostream& ostr, const_string context_descr )
 | |
| {
 | |
|     ostr << BOOST_TEST_L( "<Frame>" ) << utils::cdata() << context_descr << BOOST_TEST_L( "</Frame>" );
 | |
| }
 | |
| 
 | |
| //____________________________________________________________________________//
 | |
| 
 | |
| } // namespace output
 | |
| } // namespace unit_test
 | |
| } // namespace boost
 | |
| 
 | |
| #include <boost/test/detail/enable_warnings.hpp>
 | |
| 
 | |
| #endif // BOOST_TEST_XML_LOG_FORMATTER_IPP_020105GER
 | 
