From 3faa41285594950a26a34ffd40360a1a44b6c285 Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Thu, 15 Aug 2013 19:09:07 +0100 Subject: [PATCH] Removed basic reporter --- include/internal/catch_impl.hpp | 3 - .../internal/catch_reporter_registrars.hpp | 1 - include/reporters/catch_reporter_basic.hpp | 353 ------------------ .../SelfTest/Baselines/approvedResults.txt | 4 +- projects/SelfTest/TestMain.cpp | 2 +- .../CatchSelfTest.xcodeproj/project.pbxproj | 2 - single_include/catch.hpp | 349 +---------------- 7 files changed, 6 insertions(+), 708 deletions(-) delete mode 100644 include/reporters/catch_reporter_basic.hpp diff --git a/include/internal/catch_impl.hpp b/include/internal/catch_impl.hpp index 3ec0e1c1..30ac219d 100644 --- a/include/internal/catch_impl.hpp +++ b/include/internal/catch_impl.hpp @@ -32,7 +32,6 @@ #include "catch_legacy_reporter_adapter.hpp" #include "catch_timer.hpp" -#include "../reporters/catch_reporter_basic.hpp" #include "../reporters/catch_reporter_xml.hpp" #include "../reporters/catch_reporter_junit.hpp" #include "../reporters/catch_reporter_console.hpp" @@ -61,7 +60,6 @@ namespace Catch { CumulativeReporterBase::SectionNode::~SectionNode() {} CumulativeReporterBase::~CumulativeReporterBase() {} - BasicReporter::~BasicReporter() {} StreamingReporterBase::~StreamingReporterBase() {} ConsoleReporter::~ConsoleReporter() {} IRunner::~IRunner() {} @@ -84,7 +82,6 @@ namespace Catch { void Config::dummy() {} - INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( "basic", BasicReporter ) INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( "xml", XmlReporter ) } diff --git a/include/internal/catch_reporter_registrars.hpp b/include/internal/catch_reporter_registrars.hpp index aa60b49e..fecbfa91 100644 --- a/include/internal/catch_reporter_registrars.hpp +++ b/include/internal/catch_reporter_registrars.hpp @@ -17,7 +17,6 @@ namespace Catch { class LegacyReporterRegistrar { class ReporterFactory : public IReporterFactory { - virtual IStreamingReporter* create( ReporterConfig const& config ) const { return new LegacyReporterAdapter( new T( config ) ); } diff --git a/include/reporters/catch_reporter_basic.hpp b/include/reporters/catch_reporter_basic.hpp deleted file mode 100644 index 261092ec..00000000 --- a/include/reporters/catch_reporter_basic.hpp +++ /dev/null @@ -1,353 +0,0 @@ -/* - * Created by Phil on 28/10/2010. - * Copyright 2010 Two Blue Cubes Ltd. All rights reserved. - * - * 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) - */ -#ifndef TWOBLUECUBES_CATCH_REPORTER_BASIC_HPP_INCLUDED -#define TWOBLUECUBES_CATCH_REPORTER_BASIC_HPP_INCLUDED - -#include "../internal/catch_capture.hpp" -#include "../internal/catch_interfaces_reporter.h" -#include "../internal/catch_reporter_registrars.hpp" -#include "../internal/catch_console_colour.hpp" - -namespace Catch { - - class BasicReporter : public SharedImpl { - - struct SpanInfo { - - SpanInfo() - : emitted( false ) - {} - - SpanInfo( const std::string& spanName ) - : name( spanName ), - emitted( false ) - {} - - SpanInfo( const SpanInfo& other ) - : name( other.name ), - emitted( other.emitted ) - {} - - std::string name; - bool emitted; - }; - - public: - BasicReporter( const ReporterConfig& config ) - : m_config( config ), - m_firstSectionInTestCase( true ), - m_aborted( false ) - {} - - virtual ~BasicReporter(); - - static std::string getDescription() { - return "Reports test results as lines of text"; - } - - private: - - void ReportCounts( const std::string& label, const Counts& counts, const std::string& allPrefix = "All " ) { - if( counts.passed ) - m_config.stream() << counts.failed << " of " << counts.total() << " " << label << "s failed"; - else - m_config.stream() << ( counts.failed > 1 ? allPrefix : "" ) << pluralise( counts.failed, label ) << " failed"; - } - - void ReportCounts( const Totals& totals, const std::string& allPrefix = "All " ) { - if( totals.assertions.total() == 0 ) { - m_config.stream() << "No tests ran"; - } - else if( totals.assertions.failed ) { - Colour colour( Colour::ResultError ); - ReportCounts( "test case", totals.testCases, allPrefix ); - if( totals.testCases.failed > 0 ) { - m_config.stream() << " ("; - ReportCounts( "assertion", totals.assertions, allPrefix ); - m_config.stream() << ")"; - } - } - else { - Colour colour( Colour::ResultSuccess ); - m_config.stream() << allPrefix << "tests passed (" - << pluralise( totals.assertions.passed, "assertion" ) << " in " - << pluralise( totals.testCases.passed, "test case" ) << ")"; - } - } - - private: // IReporter - - virtual bool shouldRedirectStdout() const { - return false; - } - - virtual void StartTesting() { - m_testingSpan = SpanInfo(); - } - - virtual void Aborted() { - m_aborted = true; - } - - virtual void EndTesting( const Totals& totals ) { - // Output the overall test results even if "Started Testing" was not emitted - if( m_aborted ) { - m_config.stream() << "\n[Testing aborted. "; - ReportCounts( totals, "The first " ); - } - else { - m_config.stream() << "\n[Testing completed. "; - ReportCounts( totals ); - } - m_config.stream() << "]\n" << std::endl; - } - - virtual void StartGroup( const std::string& groupName ) { - m_groupSpan = groupName; - } - - virtual void EndGroup( const std::string& groupName, const Totals& totals ) { - if( m_groupSpan.emitted && !groupName.empty() ) { - m_config.stream() << "[End of group: '" << groupName << "'. "; - ReportCounts( totals ); - m_config.stream() << "]\n" << std::endl; - m_groupSpan = SpanInfo(); - } - } - - virtual void StartTestCase( const TestCaseInfo& testInfo ) { - m_testSpan = testInfo.name; - } - - virtual void StartSection( const std::string& sectionName, const std::string& ) { - m_sectionSpans.push_back( SpanInfo( sectionName ) ); - } - - virtual void NoAssertionsInSection( const std::string& sectionName ) { - startSpansLazily(); - Colour colour( Colour::ResultError ); - m_config.stream() << "\nNo assertions in section, '" << sectionName << "'\n" << std::endl; - } - virtual void NoAssertionsInTestCase( const std::string& testName ) { - startSpansLazily(); - Colour colour( Colour::ResultError ); - m_config.stream() << "\nNo assertions in test case, '" << testName << "'\n" << std::endl; - } - - virtual void EndSection( const std::string& sectionName, const Counts& assertions ) { - - SpanInfo& sectionSpan = m_sectionSpans.back(); - if( sectionSpan.emitted && !sectionSpan.name.empty() ) { - m_config.stream() << "[End of section: '" << sectionName << "' "; - - if( assertions.failed ) { - Colour colour( Colour::ResultError ); - ReportCounts( "assertion", assertions); - } - else { - Colour colour( Colour::ResultSuccess ); - m_config.stream() << ( assertions.passed > 1 ? "All " : "" ) - << pluralise( assertions.passed, "assertion" ) << " passed" ; - } - m_config.stream() << "]\n" << std::endl; - } - m_sectionSpans.pop_back(); - } - - virtual void Result( const AssertionResult& assertionResult ) { - if( !m_config.fullConfig()->includeSuccessfulResults() && assertionResult.getResultType() == ResultWas::Ok ) - return; - - startSpansLazily(); - - if( !assertionResult.getSourceInfo().empty() ) { - Colour colour( Colour::FileName ); - m_config.stream() << assertionResult.getSourceInfo() << ": "; - } - - if( assertionResult.hasExpression() ) { - Colour colour( Colour::OriginalExpression ); - m_config.stream() << assertionResult.getExpression(); - if( assertionResult.succeeded() ) { - Colour successColour( Colour::Success ); - m_config.stream() << " succeeded"; - } - else { - Colour errorColour( Colour::Error ); - m_config.stream() << " failed"; - if( assertionResult.isOk() ) { - Colour okAnywayColour( Colour::Success ); - m_config.stream() << " - but was ok"; - } - } - } - switch( assertionResult.getResultType() ) { - case ResultWas::ThrewException: - { - Colour colour( Colour::Error ); - if( assertionResult.hasExpression() ) - m_config.stream() << " with unexpected"; - else - m_config.stream() << "Unexpected"; - m_config.stream() << " exception with message: '" << assertionResult.getMessage() << "'"; - } - break; - case ResultWas::DidntThrowException: - { - Colour colour( Colour::Error ); - if( assertionResult.hasExpression() ) - m_config.stream() << " because no exception was thrown where one was expected"; - else - m_config.stream() << "No exception thrown where one was expected"; - } - break; - case ResultWas::Info: - { - Colour colour( Colour::ReconstructedExpression ); - streamVariableLengthText( "info", assertionResult.getMessage() ); - } - break; - case ResultWas::Warning: - { - Colour colour( Colour::ReconstructedExpression ); - streamVariableLengthText( "warning", assertionResult.getMessage() ); - } - break; - case ResultWas::ExplicitFailure: - { - Colour colour( Colour::Error ); - m_config.stream() << "failed with message: '" << assertionResult.getMessage() << "'"; - } - break; - case ResultWas::Unknown: // These cases are here to prevent compiler warnings - case ResultWas::Ok: - case ResultWas::FailureBit: - case ResultWas::ExpressionFailed: - case ResultWas::Exception: - if( !assertionResult.hasExpression() ) { - if( assertionResult.succeeded() ) { - Colour colour( Colour::Success ); - m_config.stream() << " succeeded"; - } - else { - Colour colour( Colour::Error ); - m_config.stream() << " failed"; - if( assertionResult.isOk() ) { - Colour okAnywayColour( Colour::Success ); - m_config.stream() << " - but was ok"; - } - } - } - if( assertionResult.hasMessage() ) { - m_config.stream() << "\n"; - Colour colour( Colour::ReconstructedExpression ); - streamVariableLengthText( "with message", assertionResult.getMessage() ); - } - break; - } - - if( assertionResult.hasExpandedExpression() ) { - m_config.stream() << " for: "; - if( assertionResult.getExpandedExpression().size() > 40 ) { - m_config.stream() << "\n"; - if( assertionResult.getExpandedExpression().size() < 70 ) - m_config.stream() << "\t"; - } - Colour colour( Colour::ReconstructedExpression ); - m_config.stream() << assertionResult.getExpandedExpression(); - } - m_config.stream() << std::endl; - } - - virtual void EndTestCase( const TestCaseInfo& testInfo, - const Totals& totals, - const std::string& stdOut, - const std::string& stdErr ) { - if( !stdOut.empty() ) { - startSpansLazily(); - streamVariableLengthText( "stdout", stdOut ); - } - - if( !stdErr.empty() ) { - startSpansLazily(); - streamVariableLengthText( "stderr", stdErr ); - } - - if( m_testSpan.emitted ) { - m_config.stream() << "[Finished: '" << testInfo.name << "' "; - ReportCounts( totals ); - m_config.stream() << "]" << std::endl; - } - } - - private: // helpers - - void startSpansLazily() { - if( !m_testingSpan.emitted ) { - if( m_config.fullConfig()->name().empty() ) - m_config.stream() << "[Started testing]" << std::endl; - else - m_config.stream() << "[Started testing: " << m_config.fullConfig()->name() << "]" << std::endl; - m_testingSpan.emitted = true; - } - - if( !m_groupSpan.emitted && !m_groupSpan.name.empty() ) { - m_config.stream() << "[Started group: '" << m_groupSpan.name << "']" << std::endl; - m_groupSpan.emitted = true; - } - - if( !m_testSpan.emitted ) { - m_config.stream() << std::endl << "[Running: " << m_testSpan.name << "]" << std::endl; - m_testSpan.emitted = true; - } - - if( !m_sectionSpans.empty() ) { - SpanInfo& sectionSpan = m_sectionSpans.back(); - if( !sectionSpan.emitted && !sectionSpan.name.empty() ) { - if( m_firstSectionInTestCase ) { - m_config.stream() << "\n"; - m_firstSectionInTestCase = false; - } - std::vector::iterator it = m_sectionSpans.begin(); - std::vector::iterator itEnd = m_sectionSpans.end(); - for(; it != itEnd; ++it ) { - SpanInfo& prevSpan = *it; - if( !prevSpan.emitted && !prevSpan.name.empty() ) { - m_config.stream() << "[Started section: '" << prevSpan.name << "']" << std::endl; - prevSpan.emitted = true; - } - } - } - } - } - - void streamVariableLengthText( const std::string& prefix, const std::string& text ) { - std::string trimmed = trim( text ); - if( trimmed.find_first_of( "\r\n" ) == std::string::npos ) { - m_config.stream() << "[" << prefix << ": " << trimmed << "]"; - } - else { - m_config.stream() << "\n[" << prefix << "] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n" << trimmed - << "\n[end of " << prefix << "] <<<<<<<<<<<<<<<<<<<<<<<<\n"; - } - } - - private: - ReporterConfig m_config; - bool m_firstSectionInTestCase; - - SpanInfo m_testingSpan; - SpanInfo m_groupSpan; - SpanInfo m_testSpan; - std::vector m_sectionSpans; - bool m_aborted; - }; - -} // end namespace Catch - -#endif // TWOBLUECUBES_CATCH_REPORTER_BASIC_HPP_INCLUDED diff --git a/projects/SelfTest/Baselines/approvedResults.txt b/projects/SelfTest/Baselines/approvedResults.txt index 04f9505f..ea078563 100644 --- a/projects/SelfTest/Baselines/approvedResults.txt +++ b/projects/SelfTest/Baselines/approvedResults.txt @@ -1,6 +1,6 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -CatchSelfTest is a Catch v1.0 b6 host application. +CatchSelfTest is a Catch v1.0 b7 host application. Run with -? for options ------------------------------------------------------------------------------- @@ -712,7 +712,7 @@ with expansion: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -CatchSelfTest is a Catch v1.0 b6 host application. +CatchSelfTest is a Catch v1.0 b7 host application. Run with -? for options ------------------------------------------------------------------------------- diff --git a/projects/SelfTest/TestMain.cpp b/projects/SelfTest/TestMain.cpp index bfaec8e2..6ee07fb7 100644 --- a/projects/SelfTest/TestMain.cpp +++ b/projects/SelfTest/TestMain.cpp @@ -11,6 +11,7 @@ #include "catch_self_test.hpp" #include "internal/catch_text.h" +#include "internal/catch_console_colour.hpp" TEST_CASE( "selftest/main", "Runs all Catch self tests and checks their results" ) { using namespace Catch; @@ -65,7 +66,6 @@ TEST_CASE( "meta/Misc/Sections", "looped tests" ) { #include "../../include/internal/catch_commandline.hpp" #include "../../include/internal/catch_test_spec.h" -#include "../../include/reporters/catch_reporter_basic.hpp" #include "../../include/reporters/catch_reporter_xml.hpp" template diff --git a/projects/XCode4/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj b/projects/XCode4/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj index f3d06d75..c189a78e 100644 --- a/projects/XCode4/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj +++ b/projects/XCode4/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj @@ -137,7 +137,6 @@ 4A6D0C62149B3E3D00DB3EAA /* catch_test_case_registry_impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_test_case_registry_impl.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; 4A6D0C63149B3E3D00DB3EAA /* catch_test_registry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_test_registry.hpp; sourceTree = ""; }; 4A6D0C64149B3E3D00DB3EAA /* catch_xmlwriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_xmlwriter.hpp; sourceTree = ""; }; - 4A6D0C66149B3E3D00DB3EAA /* catch_reporter_basic.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_basic.hpp; sourceTree = ""; }; 4A6D0C67149B3E3D00DB3EAA /* catch_reporter_junit.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_junit.hpp; sourceTree = ""; }; 4A6D0C68149B3E3D00DB3EAA /* catch_reporter_xml.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_xml.hpp; sourceTree = ""; }; 4A7ADB4314F631E10094FE10 /* catch_totals.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_totals.hpp; sourceTree = ""; }; @@ -282,7 +281,6 @@ 4A6D0C65149B3E3D00DB3EAA /* reporters */ = { isa = PBXGroup; children = ( - 4A6D0C66149B3E3D00DB3EAA /* catch_reporter_basic.hpp */, 4A6D0C67149B3E3D00DB3EAA /* catch_reporter_junit.hpp */, 4A6D0C68149B3E3D00DB3EAA /* catch_reporter_xml.hpp */, 4AB42F84166F3E1A0099F2C8 /* catch_reporter_console.hpp */, diff --git a/single_include/catch.hpp b/single_include/catch.hpp index 3d66de79..d27d620d 100644 --- a/single_include/catch.hpp +++ b/single_include/catch.hpp @@ -1,6 +1,6 @@ /* * CATCH v1.0 build 7 (master branch) - * Generated: 2013-08-15 18:59:14.088519 + * Generated: 2013-08-15 19:08:20.526513 * ---------------------------------------------------------- * This file has been merged from multiple headers. Please don't edit it directly * Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved. @@ -6620,8 +6620,8 @@ namespace Catch { #ifdef __clang__ #pragma clang diagnostic pop #endif -// #included from: ../reporters/catch_reporter_basic.hpp -#define TWOBLUECUBES_CATCH_REPORTER_BASIC_HPP_INCLUDED +// #included from: ../reporters/catch_reporter_xml.hpp +#define TWOBLUECUBES_CATCH_REPORTER_XML_HPP_INCLUDED // #included from: ../internal/catch_reporter_registrars.hpp #define TWOBLUECUBES_CATCH_REPORTER_REGISTRARS_HPP_INCLUDED @@ -6632,7 +6632,6 @@ namespace Catch { class LegacyReporterRegistrar { class ReporterFactory : public IReporterFactory { - virtual IStreamingReporter* create( ReporterConfig const& config ) const { return new LegacyReporterAdapter( new T( config ) ); } @@ -6687,346 +6686,6 @@ namespace Catch { #define INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType ) \ Catch::ReporterRegistrar catch_internal_RegistrarFor##reporterType( name ); -namespace Catch { - - class BasicReporter : public SharedImpl { - - struct SpanInfo { - - SpanInfo() - : emitted( false ) - {} - - SpanInfo( const std::string& spanName ) - : name( spanName ), - emitted( false ) - {} - - SpanInfo( const SpanInfo& other ) - : name( other.name ), - emitted( other.emitted ) - {} - - std::string name; - bool emitted; - }; - - public: - BasicReporter( const ReporterConfig& config ) - : m_config( config ), - m_firstSectionInTestCase( true ), - m_aborted( false ) - {} - - virtual ~BasicReporter(); - - static std::string getDescription() { - return "Reports test results as lines of text"; - } - - private: - - void ReportCounts( const std::string& label, const Counts& counts, const std::string& allPrefix = "All " ) { - if( counts.passed ) - m_config.stream() << counts.failed << " of " << counts.total() << " " << label << "s failed"; - else - m_config.stream() << ( counts.failed > 1 ? allPrefix : "" ) << pluralise( counts.failed, label ) << " failed"; - } - - void ReportCounts( const Totals& totals, const std::string& allPrefix = "All " ) { - if( totals.assertions.total() == 0 ) { - m_config.stream() << "No tests ran"; - } - else if( totals.assertions.failed ) { - Colour colour( Colour::ResultError ); - ReportCounts( "test case", totals.testCases, allPrefix ); - if( totals.testCases.failed > 0 ) { - m_config.stream() << " ("; - ReportCounts( "assertion", totals.assertions, allPrefix ); - m_config.stream() << ")"; - } - } - else { - Colour colour( Colour::ResultSuccess ); - m_config.stream() << allPrefix << "tests passed (" - << pluralise( totals.assertions.passed, "assertion" ) << " in " - << pluralise( totals.testCases.passed, "test case" ) << ")"; - } - } - - private: // IReporter - - virtual bool shouldRedirectStdout() const { - return false; - } - - virtual void StartTesting() { - m_testingSpan = SpanInfo(); - } - - virtual void Aborted() { - m_aborted = true; - } - - virtual void EndTesting( const Totals& totals ) { - // Output the overall test results even if "Started Testing" was not emitted - if( m_aborted ) { - m_config.stream() << "\n[Testing aborted. "; - ReportCounts( totals, "The first " ); - } - else { - m_config.stream() << "\n[Testing completed. "; - ReportCounts( totals ); - } - m_config.stream() << "]\n" << std::endl; - } - - virtual void StartGroup( const std::string& groupName ) { - m_groupSpan = groupName; - } - - virtual void EndGroup( const std::string& groupName, const Totals& totals ) { - if( m_groupSpan.emitted && !groupName.empty() ) { - m_config.stream() << "[End of group: '" << groupName << "'. "; - ReportCounts( totals ); - m_config.stream() << "]\n" << std::endl; - m_groupSpan = SpanInfo(); - } - } - - virtual void StartTestCase( const TestCaseInfo& testInfo ) { - m_testSpan = testInfo.name; - } - - virtual void StartSection( const std::string& sectionName, const std::string& ) { - m_sectionSpans.push_back( SpanInfo( sectionName ) ); - } - - virtual void NoAssertionsInSection( const std::string& sectionName ) { - startSpansLazily(); - Colour colour( Colour::ResultError ); - m_config.stream() << "\nNo assertions in section, '" << sectionName << "'\n" << std::endl; - } - virtual void NoAssertionsInTestCase( const std::string& testName ) { - startSpansLazily(); - Colour colour( Colour::ResultError ); - m_config.stream() << "\nNo assertions in test case, '" << testName << "'\n" << std::endl; - } - - virtual void EndSection( const std::string& sectionName, const Counts& assertions ) { - - SpanInfo& sectionSpan = m_sectionSpans.back(); - if( sectionSpan.emitted && !sectionSpan.name.empty() ) { - m_config.stream() << "[End of section: '" << sectionName << "' "; - - if( assertions.failed ) { - Colour colour( Colour::ResultError ); - ReportCounts( "assertion", assertions); - } - else { - Colour colour( Colour::ResultSuccess ); - m_config.stream() << ( assertions.passed > 1 ? "All " : "" ) - << pluralise( assertions.passed, "assertion" ) << " passed" ; - } - m_config.stream() << "]\n" << std::endl; - } - m_sectionSpans.pop_back(); - } - - virtual void Result( const AssertionResult& assertionResult ) { - if( !m_config.fullConfig()->includeSuccessfulResults() && assertionResult.getResultType() == ResultWas::Ok ) - return; - - startSpansLazily(); - - if( !assertionResult.getSourceInfo().empty() ) { - Colour colour( Colour::FileName ); - m_config.stream() << assertionResult.getSourceInfo() << ": "; - } - - if( assertionResult.hasExpression() ) { - Colour colour( Colour::OriginalExpression ); - m_config.stream() << assertionResult.getExpression(); - if( assertionResult.succeeded() ) { - Colour successColour( Colour::Success ); - m_config.stream() << " succeeded"; - } - else { - Colour errorColour( Colour::Error ); - m_config.stream() << " failed"; - if( assertionResult.isOk() ) { - Colour okAnywayColour( Colour::Success ); - m_config.stream() << " - but was ok"; - } - } - } - switch( assertionResult.getResultType() ) { - case ResultWas::ThrewException: - { - Colour colour( Colour::Error ); - if( assertionResult.hasExpression() ) - m_config.stream() << " with unexpected"; - else - m_config.stream() << "Unexpected"; - m_config.stream() << " exception with message: '" << assertionResult.getMessage() << "'"; - } - break; - case ResultWas::DidntThrowException: - { - Colour colour( Colour::Error ); - if( assertionResult.hasExpression() ) - m_config.stream() << " because no exception was thrown where one was expected"; - else - m_config.stream() << "No exception thrown where one was expected"; - } - break; - case ResultWas::Info: - { - Colour colour( Colour::ReconstructedExpression ); - streamVariableLengthText( "info", assertionResult.getMessage() ); - } - break; - case ResultWas::Warning: - { - Colour colour( Colour::ReconstructedExpression ); - streamVariableLengthText( "warning", assertionResult.getMessage() ); - } - break; - case ResultWas::ExplicitFailure: - { - Colour colour( Colour::Error ); - m_config.stream() << "failed with message: '" << assertionResult.getMessage() << "'"; - } - break; - case ResultWas::Unknown: // These cases are here to prevent compiler warnings - case ResultWas::Ok: - case ResultWas::FailureBit: - case ResultWas::ExpressionFailed: - case ResultWas::Exception: - if( !assertionResult.hasExpression() ) { - if( assertionResult.succeeded() ) { - Colour colour( Colour::Success ); - m_config.stream() << " succeeded"; - } - else { - Colour colour( Colour::Error ); - m_config.stream() << " failed"; - if( assertionResult.isOk() ) { - Colour okAnywayColour( Colour::Success ); - m_config.stream() << " - but was ok"; - } - } - } - if( assertionResult.hasMessage() ) { - m_config.stream() << "\n"; - Colour colour( Colour::ReconstructedExpression ); - streamVariableLengthText( "with message", assertionResult.getMessage() ); - } - break; - } - - if( assertionResult.hasExpandedExpression() ) { - m_config.stream() << " for: "; - if( assertionResult.getExpandedExpression().size() > 40 ) { - m_config.stream() << "\n"; - if( assertionResult.getExpandedExpression().size() < 70 ) - m_config.stream() << "\t"; - } - Colour colour( Colour::ReconstructedExpression ); - m_config.stream() << assertionResult.getExpandedExpression(); - } - m_config.stream() << std::endl; - } - - virtual void EndTestCase( const TestCaseInfo& testInfo, - const Totals& totals, - const std::string& stdOut, - const std::string& stdErr ) { - if( !stdOut.empty() ) { - startSpansLazily(); - streamVariableLengthText( "stdout", stdOut ); - } - - if( !stdErr.empty() ) { - startSpansLazily(); - streamVariableLengthText( "stderr", stdErr ); - } - - if( m_testSpan.emitted ) { - m_config.stream() << "[Finished: '" << testInfo.name << "' "; - ReportCounts( totals ); - m_config.stream() << "]" << std::endl; - } - } - - private: // helpers - - void startSpansLazily() { - if( !m_testingSpan.emitted ) { - if( m_config.fullConfig()->name().empty() ) - m_config.stream() << "[Started testing]" << std::endl; - else - m_config.stream() << "[Started testing: " << m_config.fullConfig()->name() << "]" << std::endl; - m_testingSpan.emitted = true; - } - - if( !m_groupSpan.emitted && !m_groupSpan.name.empty() ) { - m_config.stream() << "[Started group: '" << m_groupSpan.name << "']" << std::endl; - m_groupSpan.emitted = true; - } - - if( !m_testSpan.emitted ) { - m_config.stream() << std::endl << "[Running: " << m_testSpan.name << "]" << std::endl; - m_testSpan.emitted = true; - } - - if( !m_sectionSpans.empty() ) { - SpanInfo& sectionSpan = m_sectionSpans.back(); - if( !sectionSpan.emitted && !sectionSpan.name.empty() ) { - if( m_firstSectionInTestCase ) { - m_config.stream() << "\n"; - m_firstSectionInTestCase = false; - } - std::vector::iterator it = m_sectionSpans.begin(); - std::vector::iterator itEnd = m_sectionSpans.end(); - for(; it != itEnd; ++it ) { - SpanInfo& prevSpan = *it; - if( !prevSpan.emitted && !prevSpan.name.empty() ) { - m_config.stream() << "[Started section: '" << prevSpan.name << "']" << std::endl; - prevSpan.emitted = true; - } - } - } - } - } - - void streamVariableLengthText( const std::string& prefix, const std::string& text ) { - std::string trimmed = trim( text ); - if( trimmed.find_first_of( "\r\n" ) == std::string::npos ) { - m_config.stream() << "[" << prefix << ": " << trimmed << "]"; - } - else { - m_config.stream() << "\n[" << prefix << "] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n" << trimmed - << "\n[end of " << prefix << "] <<<<<<<<<<<<<<<<<<<<<<<<\n"; - } - } - - private: - ReporterConfig m_config; - bool m_firstSectionInTestCase; - - SpanInfo m_testingSpan; - SpanInfo m_groupSpan; - SpanInfo m_testSpan; - std::vector m_sectionSpans; - bool m_aborted; - }; - -} // end namespace Catch - -// #included from: ../reporters/catch_reporter_xml.hpp -#define TWOBLUECUBES_CATCH_REPORTER_XML_HPP_INCLUDED - // #included from: ../internal/catch_xmlwriter.hpp #define TWOBLUECUBES_CATCH_XMLWRITER_HPP_INCLUDED @@ -7978,7 +7637,6 @@ namespace Catch { CumulativeReporterBase::SectionNode::~SectionNode() {} CumulativeReporterBase::~CumulativeReporterBase() {} - BasicReporter::~BasicReporter() {} StreamingReporterBase::~StreamingReporterBase() {} ConsoleReporter::~ConsoleReporter() {} IRunner::~IRunner() {} @@ -8001,7 +7659,6 @@ namespace Catch { void Config::dummy() {} - INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( "basic", BasicReporter ) INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( "xml", XmlReporter ) }