js8call/.svn/pristine/7d/7d90f495d30ac14c561f8b5802d39f3324fe5d6f.svn-base
2018-02-08 21:28:33 -05:00

136 lines
4.5 KiB
Plaintext

// (C) Copyright 2016 Raffi Enficiaud.
// 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
///@brief Contains the definition of the Junit log formatter (OF_JUNIT)
// ***************************************************************************
#ifndef BOOST_TEST_JUNIT_LOG_FORMATTER__
#define BOOST_TEST_JUNIT_LOG_FORMATTER__
// Boost.Test
#include <boost/test/detail/global_typedef.hpp>
#include <boost/test/unit_test_log_formatter.hpp>
#include <boost/test/tree/test_unit.hpp>
//#include <boost/test/results_collector.hpp>
// STL
#include <cstddef> // std::size_t
#include <map>
#include <list>
#include <boost/test/detail/suppress_warnings.hpp>
//____________________________________________________________________________//
namespace boost {
namespace unit_test {
namespace output {
namespace junit_impl {
// helper for the JUnit logger
struct junit_log_helper
{
struct assertion_entry {
enum log_entry_t {
log_entry_info,
log_entry_error,
log_entry_failure
};
assertion_entry() : sealed(false)
{}
std::string logentry_message;
std::string logentry_type; // the one that will get expanded in the final junit (failure, error)
std::string output; // additional information/message generated by the assertion
log_entry_t log_entry; // the type associated to the assertion (or error)
bool sealed; // indicates if the entry can accept additional information
};
std::string system_out; // sysout: additional information
std::string system_err; // syserr: additional information
// list of failure, errors and messages (assertions message and the full log)
std::vector< assertion_entry > assertion_entries;
};
}
// ************************************************************************** //
// ************** junit_log_formatter ************** //
// ************************************************************************** //
/// JUnit logger class
class junit_log_formatter : public unit_test_log_formatter {
public:
junit_log_formatter() : m_display_build_info(false)
{
this->m_log_level = log_successful_tests;
}
// Formatter interface
void log_start( std::ostream&, counter_t test_cases_amount );
void log_finish( std::ostream& );
void log_build_info( std::ostream& );
void test_unit_start( std::ostream&, test_unit const& tu );
void test_unit_finish( std::ostream&, test_unit const& tu, unsigned long elapsed );
void test_unit_skipped( std::ostream&, test_unit const& tu, const_string reason );
void test_unit_aborted( std::ostream& os, test_unit const& tu );
void log_exception_start( std::ostream&, log_checkpoint_data const&, execution_exception const& ex );
void log_exception_finish( std::ostream& );
void log_entry_start( std::ostream&, log_entry_data const&, log_entry_types let );
using unit_test_log_formatter::log_entry_value; // bring base class functions into overload set
void log_entry_value( std::ostream&, const_string value );
void log_entry_finish( std::ostream& );
void entry_context_start( std::ostream&, log_level );
void log_entry_context( std::ostream&, const_string );
void entry_context_finish( std::ostream& );
//! Discards changes in the log level
virtual void set_log_level(log_level )
{
}
//! Instead of a regular stream, returns a file name corresponding to
//! the current master test suite. If the file already exists, adds an index
//! to it.
virtual std::string get_default_stream_description() const;
private:
typedef std::map<test_unit_id, junit_impl::junit_log_helper> map_trace_t;
map_trace_t map_tests;
std::list<test_unit_id> list_path_to_root;
test_unit_id root_id;
bool m_display_build_info;
bool m_is_last_assertion_or_error; // true if failure, false if error
friend class junit_result_helper;
};
} // namespace output
} // namespace unit_test
} // namespace boost
#include <boost/test/detail/enable_warnings.hpp>
#endif // BOOST_TEST_JUNIT_LOG_FORMATTER__