2
0
mirror of https://github.com/boostorg/test.git synced 2026-01-26 19:12:10 +00:00

JUnit: refactoring for handling the different phases in an easier way

- adding the global messages as a global sysout/syserr
- detecting/parsing better the skipped tests
This commit is contained in:
Raffi Enficiaud
2017-03-02 16:32:40 +01:00
parent e02d6b6758
commit 88b3854513
3 changed files with 718 additions and 238 deletions

View File

@@ -101,10 +101,12 @@ public:
std::ostream& stream,
test_unit const& ts,
junit_log_formatter::map_trace_t const& mt,
junit_impl::junit_log_helper const& runner_log_,
bool display_build_info )
: m_stream(stream)
, m_ts( ts )
, m_map_test( mt )
, runner_log( runner_log_ )
, m_id( 0 )
, m_display_build_info(display_build_info)
{ }
@@ -126,51 +128,71 @@ public:
m_stream << "</" << entry_type << ">";
}
void visit( test_case const& tc )
{
test_results const& tr = results_collector.results( tc.p_id );
struct conditional_cdata_helper {
std::ostream &ostr;
std::string const field;
bool empty;
junit_impl::junit_log_helper detailed_log;
bool need_skipping_reason = false;
bool skipped = false;
conditional_cdata_helper(std::ostream &ostr_, std::string field_)
: ostr(ostr_)
, field(field_)
, empty(true)
{}
junit_log_formatter::map_trace_t::const_iterator it_element(m_map_test.find(tc.p_id));
if( it_element != m_map_test.end() )
{
detailed_log = it_element->second;
}
else
{
need_skipping_reason = true;
~conditional_cdata_helper() {
if(!empty) {
ostr << BOOST_TEST_L( "]]>" ) << "</" << field << '>' << std::endl;
}
}
std::string classname;
test_unit_id id(tc.p_parent_id);
while( id != m_ts.p_id ) {
test_unit const& tu = boost::unit_test::framework::get( id, TUT_ANY );
if(need_skipping_reason)
{
test_results const& tr_parent = results_collector.results( id );
if( tr_parent.p_skipped )
{
skipped = true;
detailed_log.system_out.push_back("- disabled: " + tu.full_name() + "\n");
}
junit_log_formatter::map_trace_t::const_iterator it_element_stack(m_map_test.find(id));
if( it_element_stack != m_map_test.end() )
{
detailed_log.system_out.push_back("- skipping decision: '");
detailed_log.system_out.insert(
detailed_log.system_out.end(),
it_element_stack->second.system_out.begin(),
it_element_stack->second.system_out.end());
detailed_log.system_out.push_back("'");
detailed_log.system_out.push_front("SKIPPING decision stack:\n");
need_skipping_reason = false;
void operator()(const std::string& s) {
bool current_empty = s.empty();
if(empty) {
if(!current_empty) {
empty = false;
ostr << '<' << field << '>' << BOOST_TEST_L( "<![CDATA[" );
}
}
if(!current_empty) {
ostr << s;
}
}
};
std::list<std::string> build_skipping_chain(test_case const & tc) const
{
// we enter here because we know that the tc has been skipped.
// either junit has not seen this tc, or it is indicated as disabled
assert(m_map_test.count(tc.p_id) == 0 || results_collector.results( tc.p_id ).p_skipped);
std::list<std::string> out;
test_unit_id id(tc.p_id);
while( id != m_ts.p_id && id != INV_TEST_UNIT_ID) {
test_unit const& tu = boost::unit_test::framework::get( id, TUT_ANY );
out.push_back("- disabled test unit: '" + tu.full_name() + "'\n");
if(m_map_test.count(id) > 0)
{
// junit has seen the reason: this is enough for constructing the chain
break;
}
id = tu.p_parent_id;
}
junit_log_formatter::map_trace_t::const_iterator it_element_stack(m_map_test.find(id));
if( it_element_stack != m_map_test.end() )
{
out.push_back("- reason: '" + it_element_stack->second.skipping_reason + "'");
out.push_front("Test case disabled because of the following chain of decision:\n");
}
return out;
}
std::string get_class_name(test_case const & tc) const {
std::string classname;
test_unit_id id(tc.p_parent_id);
while( id != m_ts.p_id && id != INV_TEST_UNIT_ID ) {
test_unit const& tu = boost::unit_test::framework::get( id, TUT_ANY );
classname = tu_name_normalize(tu.p_name) + "." + classname;
id = tu.p_parent_id;
}
@@ -180,23 +202,118 @@ public:
classname.erase(classname.size()-1);
}
return classname;
}
void write_testcase_header(test_case const & tc,
test_results const *tr = 0) const
{
//
// test case header
// total number of assertions
m_stream << "<testcase assertions" << utils::attr_value() << tr.p_assertions_passed + tr.p_assertions_failed;
m_stream << "<testcase assertions" << utils::attr_value() << tr->p_assertions_passed + tr->p_assertions_failed;
// class name
const std::string classname = get_class_name(tc);
if(!classname.empty())
m_stream << " classname" << utils::attr_value() << classname;
// test case name and time taken
m_stream
<< " name" << utils::attr_value() << tu_name_normalize(tc.p_name)
<< " time" << utils::attr_value() << double(tr.p_duration_microseconds) * 1E-6
<< " time" << utils::attr_value() << double(tr->p_duration_microseconds) * 1E-6
<< ">" << std::endl;
}
if( tr.p_skipped || skipped ) {
void write_testcase_system_out(junit_impl::junit_log_helper const &detailed_log,
test_case const * tc,
bool skipped,
test_results const *tr = 0) const
{
// system-out + all info/messages, the object skips the empty entries
conditional_cdata_helper system_out_helper(m_stream, "system-out");
// indicate why the test has been skipped first
if( skipped ) {
std::list<std::string> skipping_decision_chain = build_skipping_chain(*tc);
for(std::list<std::string>::const_iterator it(skipping_decision_chain.begin()), ite(skipping_decision_chain.end());
it != ite;
++it)
{
system_out_helper(*it);
}
}
// stdout
for(std::list<std::string>::const_iterator it(detailed_log.system_out.begin()), ite(detailed_log.system_out.end());
it != ite;
++it)
{
system_out_helper(*it);
}
// warning/info message last
for(std::vector< junit_impl::junit_log_helper::assertion_entry >::const_iterator it(detailed_log.assertion_entries.begin());
it != detailed_log.assertion_entries.end();
++it)
{
if(it->log_entry != junit_impl::junit_log_helper::assertion_entry::log_entry_info)
continue;
system_out_helper(it->output);
}
}
void write_testcase_system_err(junit_impl::junit_log_helper const &detailed_log,
test_case const * tc,
test_results const *tr = 0) const
{
// system-err output + test case informations
bool has_failed = (tr != 0) ? !tr->passed() : false;
if(!detailed_log.system_err.empty() || has_failed)
{
conditional_cdata_helper system_err_helper(m_stream, "system-err");
std::ostringstream o;
if(has_failed) {
o << "Failures detected in:" << std::endl;
}
else {
o << "ERROR STREAM:" << std::endl;
}
o << "- test case: " << tc->full_name() << std::endl;
if(!tc->p_description.value.empty())
o << " '" << tc->p_description << "'";
o << std::endl
<< "- file: " << file_basename(tc->p_file_name) << std::endl
<< "- line: " << tc->p_line_num << std::endl
;
if(!detailed_log.system_err.empty())
o << std::endl << "STDERR BEGIN: ------------" << std::endl;
system_err_helper(o.str());
for(std::list<std::string>::const_iterator it(detailed_log.system_err.begin()), ite(detailed_log.system_err.end());
it != ite;
++it)
{
system_err_helper(*it);
}
if(!detailed_log.system_err.empty())
o << std::endl << "STDERR END ------------" << std::endl;
}
}
void output_detailed_logs(junit_impl::junit_log_helper const &detailed_log,
test_case const & tc,
bool skipped,
test_results const *tr = 0) const
{
write_testcase_header(tc, tr);
if( skipped ) {
m_stream << "<skipped/>" << std::endl;
}
else {
@@ -214,80 +331,26 @@ public:
}
}
struct conditional_cdata_helper {
std::ostream &ostr;
std::string const field;
bool empty;
conditional_cdata_helper(std::ostream &ostr_, std::string field_)
: ostr(ostr_)
, field(field_)
, empty(true)
{}
~conditional_cdata_helper() {
if(!empty) {
ostr << BOOST_TEST_L( "]]>" ) << "</" << field << '>' << std::endl;
}
}
void operator()(const std::string& s) {
bool current_empty = s.empty();
if(empty) {
if(!current_empty) {
empty = false;
ostr << '<' << field << '>' << BOOST_TEST_L( "<![CDATA[" );
}
}
if(!current_empty) {
ostr << s;
}
}
};
// system-out + all info/messages
{
conditional_cdata_helper system_out_helper(m_stream, "system-out");
for(std::list<std::string>::const_iterator it(detailed_log.system_out.begin()), ite(detailed_log.system_out.end());
it != ite;
++it)
{
system_out_helper(*it);
}
for(std::vector< junit_impl::junit_log_helper::assertion_entry >::const_iterator it(detailed_log.assertion_entries.begin());
it != detailed_log.assertion_entries.end();
++it)
{
if(it->log_entry != junit_impl::junit_log_helper::assertion_entry::log_entry_info)
continue;
system_out_helper(it->output);
}
}
// system-err output + test case informations
{
conditional_cdata_helper system_err_helper(m_stream, "system-err");
std::ostringstream o;
o << "Test case:" << std::endl
<< "- name: " << tc.full_name() << std::endl
<< "- description: '" << tc.p_description << "'" << std::endl
<< "- file: " << file_basename(tc.p_file_name) << std::endl
<< "- line: " << tc.p_line_num << std::endl
;
system_err_helper(o.str());
for(std::list<std::string>::const_iterator it(detailed_log.system_err.begin()), ite(detailed_log.system_err.end());
it != ite;
++it)
{
system_err_helper(*it);
}
}
write_testcase_system_out(detailed_log, &tc, skipped, tr);
write_testcase_system_err(detailed_log, &tc, tr);
m_stream << "</testcase>" << std::endl;
}
void visit( test_case const& tc )
{
test_results const& tr = results_collector.results( tc.p_id );
junit_log_formatter::map_trace_t::const_iterator it_find = m_map_test.find(tc.p_id);
if(it_find == m_map_test.end())
{
// test has been skipped and not seen by the logger
output_detailed_logs(junit_impl::junit_log_helper(), tc, true, &tr);
}
else {
output_detailed_logs(it_find->second, tc, tr.p_skipped, &tr);
}
}
bool test_suite_start( test_suite const& ts )
{
// unique test suite, without s, nesting not supported in CI
@@ -328,6 +391,10 @@ public:
{
if( m_ts.p_id != ts.p_id )
return;
write_testcase_system_out(runner_log, 0, false, 0);
write_testcase_system_err(runner_log, 0, 0);
m_stream << "</testsuite>";
}
@@ -336,6 +403,7 @@ private:
std::ostream& m_stream;
test_unit const& m_ts;
junit_log_formatter::map_trace_t const& m_map_test;
junit_impl::junit_log_helper const& runner_log;
size_t m_id;
bool m_display_build_info;
};
@@ -355,7 +423,7 @@ junit_log_formatter::log_finish( std::ostream& ostr )
while(root->p_parent_id != INV_TEST_UNIT_ID && map_tests.count(root->p_parent_id) > 0) {
root = &boost::unit_test::framework::get( root->p_parent_id, TUT_ANY );
}
junit_result_helper ch( ostr, *root, map_tests, m_display_build_info );
junit_result_helper ch( ostr, *root, map_tests, this->runner_log_entry, m_display_build_info );
traverse_test_tree( root->p_id, ch, true ); // last is to ignore disabled suite special handling
}
else {
@@ -413,7 +481,7 @@ junit_log_formatter::test_unit_skipped( std::ostream& ostr, test_unit const& tu,
// we cannot use get_current_log_entry here, but the TU id should appear in the map.
// The "skip" boolean is given by the boost.test framework
junit_impl::junit_log_helper& v = map_tests[tu.p_id]; // not sure if we can use get_current_log_entry()
v.system_out.push_back(std::string(reason.begin(), reason.end()));
v.skipping_reason.assign(reason.begin(), reason.end());
}
//____________________________________________________________________________//
@@ -506,7 +574,7 @@ junit_log_formatter::log_entry_start( std::ostream& ostr, log_entry_data const&
{
case unit_test_log_formatter::BOOST_UTL_ET_INFO:
{
if(m_log_level_internal > log_level::log_successful_tests) {
if(m_log_level_internal > log_successful_tests) {
last_entry.skipping = true;
break;
}
@@ -514,7 +582,7 @@ junit_log_formatter::log_entry_start( std::ostream& ostr, log_entry_data const&
}
case unit_test_log_formatter::BOOST_UTL_ET_MESSAGE:
{
if(m_log_level_internal > log_level::log_messages) {
if(m_log_level_internal > log_messages) {
last_entry.skipping = true;
break;
}
@@ -522,7 +590,7 @@ junit_log_formatter::log_entry_start( std::ostream& ostr, log_entry_data const&
}
case unit_test_log_formatter::BOOST_UTL_ET_WARNING:
{
if(m_log_level_internal > log_level::log_warnings) {
if(m_log_level_internal > log_warnings) {
last_entry.skipping = true;
break;
}
@@ -565,13 +633,8 @@ junit_log_formatter::log_entry_start( std::ostream& ostr, log_entry_data const&
break;
}
}
}
//____________________________________________________________________________//
//____________________________________________________________________________//
void
@@ -602,19 +665,21 @@ void
junit_log_formatter::log_entry_finish( std::ostream& ostr )
{
junit_impl::junit_log_helper& last_entry = get_current_log_entry();
if(last_entry.skipping)
return;
if(!last_entry.skipping)
{
assert(last_entry.assertion_entries.empty() || !last_entry.assertion_entries.back().sealed);
assert(last_entry.assertion_entries.empty() || !last_entry.assertion_entries.back().sealed);
if(!last_entry.assertion_entries.empty()) {
junit_impl::junit_log_helper::assertion_entry& log_entry = last_entry.assertion_entries.back();
log_entry.output += "\n\n"; // quote end, CR
log_entry.sealed = true;
}
else {
last_entry.system_out.push_back("\n\n"); // quote end, CR
}
}
if(!last_entry.assertion_entries.empty()) {
junit_impl::junit_log_helper::assertion_entry& log_entry = last_entry.assertion_entries.back();
log_entry.output += "\n\n"; // quote end, CR
log_entry.sealed = true;
}
else {
last_entry.system_out.push_back("\n\n"); // quote end, CR
}
last_entry.skipping = false;
}
//____________________________________________________________________________//
@@ -646,6 +711,9 @@ void
junit_log_formatter::entry_context_finish( std::ostream& ostr )
{
// no op, may be removed
junit_impl::junit_log_helper& last_entry = get_current_log_entry();
if(last_entry.skipping)
return;
assert(!get_current_log_entry().assertion_entries.back().sealed);
}

View File

@@ -60,6 +60,7 @@ namespace output {
std::list<std::string> system_out; // sysout: additional information
std::list<std::string> system_err; // syserr: additional information
std::string skipping_reason;
// list of failure, errors and messages (assertions message and the full log)
std::vector< assertion_entry > assertion_entries;
@@ -73,6 +74,7 @@ namespace output {
assertion_entries.clear();
system_out.clear();
system_err.clear();
skipping_reason.clear();
skipping = false;
}
@@ -144,7 +146,8 @@ private:
junit_impl::junit_log_helper& get_current_log_entry() {
if(list_path_to_root.empty())
return runner_log_entry;
return map_tests.at(list_path_to_root.back());
map_trace_t::iterator it = map_tests.find(list_path_to_root.back());
return (it == map_tests.end() ? runner_log_entry : it->second);
}
std::list<test_unit_id> list_path_to_root;

View File

@@ -18,12 +18,12 @@ xxx/log-formatter-test.cpp:209: Leaving test suite "1 test cases inside"
- message: Test case Fake Test Suite Hierarchy/1 test cases inside/good_foo did not check any assertions
]]></system-out>
<system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/1 test cases inside/good_foo
- description: ''
- file: log-formatter-test.cpp
- line: 210
]]></system-err>
</testcase>
</testsuite>
* 3-format *******************************************************************
<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="1" skipped="0" errors="0" failures="0" id="0" name="1_test_cases_inside" time="0.1234">
<testcase assertions="0" name="good_foo" time="0.1234">
</testcase>
</testsuite>
* 1-format *******************************************************************
@@ -80,9 +80,43 @@ INFO:
- message: check true has passed
]]></system-out>
<system-err><![CDATA[Test case:
- name: 1 bad test case inside/bad_foo
- description: ''
<system-err><![CDATA[Failures detected in:
- test case: 1 bad test case inside/bad_foo
- file: log-formatter-test.cpp
- line: 213
]]></system-err>
</testcase>
</testsuite>
* 3-format *******************************************************************
<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="0" skipped="0" errors="0" failures="1" id="0" name="1_bad_test_case_inside" time="0.1234">
<testcase assertions="4" name="bad_foo" time="0.1234">
<failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 47
- message:
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 54
- message: with some message
- context:
- 'Context value=something'
- 'Context value2=something different'
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 56
- message: non sense
]]></failure><system-err><![CDATA[Failures detected in:
- test case: 1 bad test case inside/bad_foo
- file: log-formatter-test.cpp
- line: 213
]]></system-err>
@@ -114,12 +148,12 @@ MESSAGE:
- message: Test case 1 almost good test case inside/almost_good_foo did not check any assertions
]]></system-out>
<system-err><![CDATA[Test case:
- name: 1 almost good test case inside/almost_good_foo
- description: ''
- file: log-formatter-test.cpp
- line: 216
]]></system-err>
</testcase>
</testsuite>
* 3-format *******************************************************************
<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="0" skipped="0" errors="0" failures="0" id="0" name="1_almost_good_test_case_inside" time="0.1234">
<testcase assertions="0" name="almost_good_foo" time="0.1234">
</testcase>
</testsuite>
* 1-format *******************************************************************
@@ -152,12 +186,6 @@ xxx/log-formatter-test.cpp:218: Leaving test suite "2 test cases inside"
- message: Test case Fake Test Suite Hierarchy/2 test cases inside/good_foo did not check any assertions
]]></system-out>
<system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/2 test cases inside/good_foo
- description: ''
- file: log-formatter-test.cpp
- line: 219
]]></system-err>
</testcase>
<testcase assertions="4" name="bad_foo" time="0.1234">
<failure message="failure" type="assertion error"><![CDATA[
@@ -193,9 +221,45 @@ INFO:
- message: check true has passed
]]></system-out>
<system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/2 test cases inside/bad_foo
- description: ''
<system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/2 test cases inside/bad_foo
- file: log-formatter-test.cpp
- line: 220
]]></system-err>
</testcase>
</testsuite>
* 3-format *******************************************************************
<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="1" skipped="0" errors="0" failures="1" id="0" name="2_test_cases_inside" time="0.1234">
<testcase assertions="0" name="good_foo" time="0.1234">
</testcase>
<testcase assertions="4" name="bad_foo" time="0.1234">
<failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 47
- message:
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 54
- message: with some message
- context:
- 'Context value=something'
- 'Context value2=something different'
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 56
- message: non sense
]]></failure><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/2 test cases inside/bad_foo
- file: log-formatter-test.cpp
- line: 220
]]></system-err>
@@ -261,9 +325,9 @@ INFO:
- message: check true has passed
]]></system-out>
<system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/3 test cases inside/bad_foo
- description: ''
<system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/3 test cases inside/bad_foo
- file: log-formatter-test.cpp
- line: 223
]]></system-err>
@@ -278,23 +342,76 @@ ASSERTION FAILURE:
- 'some context'
]]></failure><system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/3 test cases inside/very_bad_foo
- description: ''
]]></failure><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/3 test cases inside/very_bad_foo
- file: log-formatter-test.cpp
- line: 224
]]></system-err>
</testcase>
<testcase assertions="0" name="bad_foo" time="0.1234">
<skipped/>
<system-out><![CDATA[dependency test case "Fake Test Suite Hierarchy/3 test cases inside/very_bad_foo" has failed]]></system-out>
<system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/3 test cases inside/bad_foo
- description: ''
<system-out><![CDATA[Test case disabled because of the following chain of decision:
- disabled test unit: 'Fake Test Suite Hierarchy/3 test cases inside/bad_foo'
- reason: 'dependency test case "Fake Test Suite Hierarchy/3 test cases inside/very_bad_foo" has failed']]></system-out>
</testcase>
</testsuite>
* 3-format *******************************************************************
<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="0" skipped="1" errors="1" failures="2" id="0" name="3_test_cases_inside" time="0.1234">
<testcase assertions="4" name="bad_foo" time="0.1234">
<failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 47
- message:
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 54
- message: with some message
- context:
- 'Context value=something'
- 'Context value2=something different'
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 56
- message: non sense
]]></failure><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/3 test cases inside/bad_foo
- file: log-formatter-test.cpp
- line: 226
- line: 223
]]></system-err>
</testcase>
<testcase assertions="1" name="very_bad_foo" time="0.1234">
<failure message="failure" type="fatal error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 68
- message: very_bad_foo is fatal
- context:
- 'some context'
]]></failure><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/3 test cases inside/very_bad_foo
- file: log-formatter-test.cpp
- line: 224
]]></system-err>
</testcase>
<testcase assertions="0" name="bad_foo" time="0.1234">
<skipped/>
<system-out><![CDATA[Test case disabled because of the following chain of decision:
- disabled test unit: 'Fake Test Suite Hierarchy/3 test cases inside/bad_foo'
- reason: 'dependency test case "Fake Test Suite Hierarchy/3 test cases inside/very_bad_foo" has failed']]></system-out>
</testcase>
</testsuite>
* 1-format *******************************************************************
Running 4 test cases...
@@ -375,9 +492,9 @@ INFO:
- message: check true has passed
]]></system-out>
<system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/4 test cases inside/bad_foo
- description: ''
<system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/4 test cases inside/bad_foo
- file: log-formatter-test.cpp
- line: 231
]]></system-err>
@@ -392,9 +509,9 @@ ASSERTION FAILURE:
- 'some context'
]]></failure><system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/4 test cases inside/very_bad_foo
- description: ''
]]></failure><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/4 test cases inside/very_bad_foo
- file: log-formatter-test.cpp
- line: 232
]]></system-err>
@@ -428,9 +545,9 @@ Last checkpoint:
CONTEXT:
- 'exception context should be shown'
]]></error><system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/4 test cases inside/very_bad_exception
- description: ''
]]></error><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/4 test cases inside/very_bad_exception
- file: log-formatter-test.cpp
- line: 233
]]></system-err>
@@ -469,9 +586,126 @@ INFO:
- message: check true has passed
]]></system-out>
<system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/4 test cases inside/bad_foo
- description: ''
<system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/4 test cases inside/bad_foo
- file: log-formatter-test.cpp
- line: 234
]]></system-err>
</testcase>
</testsuite>
* 3-format *******************************************************************
<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="0" skipped="0" errors="2" failures="4" id="0" name="4_test_cases_inside" time="0.1234">
<testcase assertions="4" name="bad_foo" time="0.1234">
<failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 47
- message:
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 54
- message: with some message
- context:
- 'Context value=something'
- 'Context value2=something different'
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 56
- message: non sense
]]></failure><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/4 test cases inside/bad_foo
- file: log-formatter-test.cpp
- line: 231
]]></system-err>
</testcase>
<testcase assertions="1" name="very_bad_foo" time="0.1234">
<failure message="failure" type="fatal error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 68
- message: very_bad_foo is fatal
- context:
- 'some context'
]]></failure><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/4 test cases inside/very_bad_foo
- file: log-formatter-test.cpp
- line: 232
]]></system-err>
</testcase>
<testcase assertions="2" name="very_bad_exception" time="0.1234">
<failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 77
- message: with some message
- context:
- 'Context value=something'
- 'Context value2=something different'
]]></failure><error message="unexpected exception" type="uncaught exception"><![CDATA[
UNCAUGHT EXCEPTION:
- file: unknown location
- line: 0
EXCEPTION STACK TRACE: --------------
unknown type
-------------------------------------
Last checkpoint:
- message: ""
- file: log-formatter-test.cpp
- line: 77
CONTEXT:
- 'exception context should be shown'
]]></error><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/4 test cases inside/very_bad_exception
- file: log-formatter-test.cpp
- line: 233
]]></system-err>
</testcase>
<testcase assertions="4" name="bad_foo" time="0.1234">
<failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 47
- message:
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 54
- message: with some message
- context:
- 'Context value=something'
- 'Context value2=something different'
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 56
- message: non sense
]]></failure><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/4 test cases inside/bad_foo
- file: log-formatter-test.cpp
- line: 234
]]></system-err>
@@ -562,12 +796,6 @@ xxx/log-formatter-test.cpp:236: Leaving test suite "Fake Test Suite Hierarchy"
- message: Test case Fake Test Suite Hierarchy/1 test cases inside/good_foo did not check any assertions
]]></system-out>
<system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/1 test cases inside/good_foo
- description: ''
- file: log-formatter-test.cpp
- line: 210
]]></system-err>
</testcase>
<testcase assertions="4" classname="1_test_cases_inside" name="bad_foo" time="0.1234">
<failure message="failure" type="assertion error"><![CDATA[
@@ -603,9 +831,9 @@ INFO:
- message: check true has passed
]]></system-out>
<system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/1 test cases inside/bad_foo
- description: ''
<system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/1 test cases inside/bad_foo
- file: log-formatter-test.cpp
- line: 255
]]></system-err>
@@ -617,12 +845,6 @@ INFO:
- message: Test case Fake Test Suite Hierarchy/2 test cases inside/good_foo did not check any assertions
]]></system-out>
<system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/2 test cases inside/good_foo
- description: ''
- file: log-formatter-test.cpp
- line: 219
]]></system-err>
</testcase>
<testcase assertions="4" classname="2_test_cases_inside" name="bad_foo" time="0.1234">
<failure message="failure" type="assertion error"><![CDATA[
@@ -658,48 +880,33 @@ INFO:
- message: check true has passed
]]></system-out>
<system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/2 test cases inside/bad_foo
- description: ''
<system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/2 test cases inside/bad_foo
- file: log-formatter-test.cpp
- line: 220
]]></system-err>
</testcase>
<testcase assertions="0" classname="3_test_cases_inside" name="bad_foo" time="0.1234">
<skipped/>
<system-out><![CDATA[SKIPPING decision stack:
- disabled: Fake Test Suite Hierarchy/3 test cases inside
- skipping decision: 'dependency test suite "Fake Test Suite Hierarchy/1 test cases inside" has failed']]></system-out>
<system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/3 test cases inside/bad_foo
- description: ''
- file: log-formatter-test.cpp
- line: 223
]]></system-err>
<system-out><![CDATA[Test case disabled because of the following chain of decision:
- disabled test unit: 'Fake Test Suite Hierarchy/3 test cases inside/bad_foo'
- disabled test unit: 'Fake Test Suite Hierarchy/3 test cases inside'
- reason: 'dependency test suite "Fake Test Suite Hierarchy/1 test cases inside" has failed']]></system-out>
</testcase>
<testcase assertions="0" classname="3_test_cases_inside" name="very_bad_foo" time="0.1234">
<skipped/>
<system-out><![CDATA[SKIPPING decision stack:
- disabled: Fake Test Suite Hierarchy/3 test cases inside
- skipping decision: 'dependency test suite "Fake Test Suite Hierarchy/1 test cases inside" has failed']]></system-out>
<system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/3 test cases inside/very_bad_foo
- description: ''
- file: log-formatter-test.cpp
- line: 224
]]></system-err>
<system-out><![CDATA[Test case disabled because of the following chain of decision:
- disabled test unit: 'Fake Test Suite Hierarchy/3 test cases inside/very_bad_foo'
- disabled test unit: 'Fake Test Suite Hierarchy/3 test cases inside'
- reason: 'dependency test suite "Fake Test Suite Hierarchy/1 test cases inside" has failed']]></system-out>
</testcase>
<testcase assertions="0" classname="3_test_cases_inside" name="bad_foo" time="0.1234">
<skipped/>
<system-out><![CDATA[SKIPPING decision stack:
- disabled: Fake Test Suite Hierarchy/3 test cases inside
- skipping decision: 'dependency test suite "Fake Test Suite Hierarchy/1 test cases inside" has failed']]></system-out>
<system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/3 test cases inside/bad_foo
- description: ''
- file: log-formatter-test.cpp
- line: 226
]]></system-err>
<system-out><![CDATA[Test case disabled because of the following chain of decision:
- disabled test unit: 'Fake Test Suite Hierarchy/3 test cases inside/bad_foo'
- disabled test unit: 'Fake Test Suite Hierarchy/3 test cases inside'
- reason: 'dependency test suite "Fake Test Suite Hierarchy/1 test cases inside" has failed']]></system-out>
</testcase>
<testcase assertions="4" classname="4_test_cases_inside" name="bad_foo" time="0.1234">
<failure message="failure" type="assertion error"><![CDATA[
@@ -735,9 +942,9 @@ INFO:
- message: check true has passed
]]></system-out>
<system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/4 test cases inside/bad_foo
- description: ''
<system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/4 test cases inside/bad_foo
- file: log-formatter-test.cpp
- line: 231
]]></system-err>
@@ -752,9 +959,9 @@ ASSERTION FAILURE:
- 'some context'
]]></failure><system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/4 test cases inside/very_bad_foo
- description: ''
]]></failure><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/4 test cases inside/very_bad_foo
- file: log-formatter-test.cpp
- line: 232
]]></system-err>
@@ -788,9 +995,9 @@ Last checkpoint:
CONTEXT:
- 'exception context should be shown'
]]></error><system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/4 test cases inside/very_bad_exception
- description: ''
]]></error><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/4 test cases inside/very_bad_exception
- file: log-formatter-test.cpp
- line: 233
]]></system-err>
@@ -829,9 +1036,211 @@ INFO:
- message: check true has passed
]]></system-out>
<system-err><![CDATA[Test case:
- name: Fake Test Suite Hierarchy/4 test cases inside/bad_foo
- description: ''
<system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/4 test cases inside/bad_foo
- file: log-formatter-test.cpp
- line: 234
]]></system-err>
</testcase>
</testsuite>
* 3-format *******************************************************************
<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="2" skipped="3" errors="2" failures="6" id="0" name="Fake_Test_Suite_Hierarchy" time="0.1234">
<testcase assertions="0" classname="1_test_cases_inside" name="good_foo" time="0.1234">
</testcase>
<testcase assertions="4" classname="1_test_cases_inside" name="bad_foo" time="0.1234">
<failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 47
- message:
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 54
- message: with some message
- context:
- 'Context value=something'
- 'Context value2=something different'
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 56
- message: non sense
]]></failure><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/1 test cases inside/bad_foo
- file: log-formatter-test.cpp
- line: 255
]]></system-err>
</testcase>
<testcase assertions="0" classname="2_test_cases_inside" name="good_foo" time="0.1234">
</testcase>
<testcase assertions="4" classname="2_test_cases_inside" name="bad_foo" time="0.1234">
<failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 47
- message:
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 54
- message: with some message
- context:
- 'Context value=something'
- 'Context value2=something different'
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 56
- message: non sense
]]></failure><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/2 test cases inside/bad_foo
- file: log-formatter-test.cpp
- line: 220
]]></system-err>
</testcase>
<testcase assertions="0" classname="3_test_cases_inside" name="bad_foo" time="0.1234">
<skipped/>
<system-out><![CDATA[Test case disabled because of the following chain of decision:
- disabled test unit: 'Fake Test Suite Hierarchy/3 test cases inside/bad_foo'
- disabled test unit: 'Fake Test Suite Hierarchy/3 test cases inside'
- reason: 'dependency test suite "Fake Test Suite Hierarchy/1 test cases inside" has failed']]></system-out>
</testcase>
<testcase assertions="0" classname="3_test_cases_inside" name="very_bad_foo" time="0.1234">
<skipped/>
<system-out><![CDATA[Test case disabled because of the following chain of decision:
- disabled test unit: 'Fake Test Suite Hierarchy/3 test cases inside/very_bad_foo'
- disabled test unit: 'Fake Test Suite Hierarchy/3 test cases inside'
- reason: 'dependency test suite "Fake Test Suite Hierarchy/1 test cases inside" has failed']]></system-out>
</testcase>
<testcase assertions="0" classname="3_test_cases_inside" name="bad_foo" time="0.1234">
<skipped/>
<system-out><![CDATA[Test case disabled because of the following chain of decision:
- disabled test unit: 'Fake Test Suite Hierarchy/3 test cases inside/bad_foo'
- disabled test unit: 'Fake Test Suite Hierarchy/3 test cases inside'
- reason: 'dependency test suite "Fake Test Suite Hierarchy/1 test cases inside" has failed']]></system-out>
</testcase>
<testcase assertions="4" classname="4_test_cases_inside" name="bad_foo" time="0.1234">
<failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 47
- message:
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 54
- message: with some message
- context:
- 'Context value=something'
- 'Context value2=something different'
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 56
- message: non sense
]]></failure><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/4 test cases inside/bad_foo
- file: log-formatter-test.cpp
- line: 231
]]></system-err>
</testcase>
<testcase assertions="1" classname="4_test_cases_inside" name="very_bad_foo" time="0.1234">
<failure message="failure" type="fatal error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 68
- message: very_bad_foo is fatal
- context:
- 'some context'
]]></failure><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/4 test cases inside/very_bad_foo
- file: log-formatter-test.cpp
- line: 232
]]></system-err>
</testcase>
<testcase assertions="2" classname="4_test_cases_inside" name="very_bad_exception" time="0.1234">
<failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 77
- message: with some message
- context:
- 'Context value=something'
- 'Context value2=something different'
]]></failure><error message="unexpected exception" type="uncaught exception"><![CDATA[
UNCAUGHT EXCEPTION:
- file: unknown location
- line: 0
EXCEPTION STACK TRACE: --------------
unknown type
-------------------------------------
Last checkpoint:
- message: ""
- file: log-formatter-test.cpp
- line: 77
CONTEXT:
- 'exception context should be shown'
]]></error><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/4 test cases inside/very_bad_exception
- file: log-formatter-test.cpp
- line: 233
]]></system-err>
</testcase>
<testcase assertions="4" classname="4_test_cases_inside" name="bad_foo" time="0.1234">
<failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 47
- message:
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 54
- message: with some message
- context:
- 'Context value=something'
- 'Context value2=something different'
]]></failure><failure message="failure" type="assertion error"><![CDATA[
ASSERTION FAILURE:
- file : log-formatter-test.cpp
- line : 56
- message: non sense
]]></failure><system-err><![CDATA[Failures detected in:
- test case: Fake Test Suite Hierarchy/4 test cases inside/bad_foo
- file: log-formatter-test.cpp
- line: 234
]]></system-err>