Added Listeners (programatically provided extra reporters)

This commit is contained in:
Phil Nash 2015-08-07 08:20:56 +01:00
parent 4cb74761d9
commit 368714e7aa
19 changed files with 256 additions and 129 deletions

View File

@ -43,6 +43,14 @@ namespace Catch {
reporter = addReporter( reporter, createReporter( *it, config ) ); reporter = addReporter( reporter, createReporter( *it, config ) );
return reporter; return reporter;
} }
Ptr<IStreamingReporter> addListeners( Ptr<IConfig> const& config, Ptr<IStreamingReporter> reporters ) {
IReporterRegistry::Listeners listeners = getRegistryHub().getReporterRegistry().getListeners();
for( IReporterRegistry::Listeners::const_iterator it = listeners.begin(), itEnd = listeners.end();
it != itEnd;
++it )
reporters = addReporter(reporters, (*it)->create( ReporterConfig( config ) ) );
return reporters;
}
void openStreamInto( Ptr<Config> const& config, std::ofstream& ofs ) { void openStreamInto( Ptr<Config> const& config, std::ofstream& ofs ) {
// Open output file, if specified // Open output file, if specified
@ -62,6 +70,7 @@ namespace Catch {
std::ofstream ofs; std::ofstream ofs;
openStreamInto( config, ofs ); openStreamInto( config, ofs );
Ptr<IStreamingReporter> reporter = makeReporter( config ); Ptr<IStreamingReporter> reporter = makeReporter( config );
reporter = addListeners( config.get(), reporter );
RunContext context( config.get(), reporter ); RunContext context( config.get(), reporter );
@ -208,7 +217,6 @@ namespace Catch {
m_config = new Config( m_configData ); m_config = new Config( m_configData );
return *m_config; return *m_config;
} }
private: private:
Clara::CommandLine<ConfigData> m_cli; Clara::CommandLine<ConfigData> m_cli;
std::vector<Clara::Parser::Token> m_unusedTokens; std::vector<Clara::Parser::Token> m_unusedTokens;

View File

@ -8,6 +8,8 @@
#ifndef TWOBLUECUBES_CATCH_INTERFACES_REGISTRY_HUB_H_INCLUDED #ifndef TWOBLUECUBES_CATCH_INTERFACES_REGISTRY_HUB_H_INCLUDED
#define TWOBLUECUBES_CATCH_INTERFACES_REGISTRY_HUB_H_INCLUDED #define TWOBLUECUBES_CATCH_INTERFACES_REGISTRY_HUB_H_INCLUDED
#include <catch_ptr.hpp>
#include <string> #include <string>
namespace Catch { namespace Catch {
@ -29,7 +31,8 @@ namespace Catch {
struct IMutableRegistryHub { struct IMutableRegistryHub {
virtual ~IMutableRegistryHub(); virtual ~IMutableRegistryHub();
virtual void registerReporter( std::string const& name, IReporterFactory* factory ) = 0; virtual void registerReporter( std::string const& name, Ptr<IReporterFactory> const& factory ) = 0;
virtual void registerListener( Ptr<IReporterFactory> const& factory ) = 0;
virtual void registerTest( TestCase const& testInfo ) = 0; virtual void registerTest( TestCase const& testInfo ) = 0;
virtual void registerTranslator( const IExceptionTranslator* translator ) = 0; virtual void registerTranslator( const IExceptionTranslator* translator ) = 0;
}; };

View File

@ -240,6 +240,7 @@ namespace Catch
// The return value indicates if the messages buffer should be cleared: // The return value indicates if the messages buffer should be cleared:
virtual bool assertionEnded( AssertionStats const& assertionStats ) = 0; virtual bool assertionEnded( AssertionStats const& assertionStats ) = 0;
virtual void sectionEnded( SectionStats const& sectionStats ) = 0; virtual void sectionEnded( SectionStats const& sectionStats ) = 0;
virtual void testCaseEnded( TestCaseStats const& testCaseStats ) = 0; virtual void testCaseEnded( TestCaseStats const& testCaseStats ) = 0;
virtual void testGroupEnded( TestGroupStats const& testGroupStats ) = 0; virtual void testGroupEnded( TestGroupStats const& testGroupStats ) = 0;
@ -249,18 +250,20 @@ namespace Catch
}; };
struct IReporterFactory { struct IReporterFactory : IShared {
virtual ~IReporterFactory(); virtual ~IReporterFactory();
virtual IStreamingReporter* create( ReporterConfig const& config ) const = 0; virtual IStreamingReporter* create( ReporterConfig const& config ) const = 0;
virtual std::string getDescription() const = 0; virtual std::string getDescription() const = 0;
}; };
struct IReporterRegistry { struct IReporterRegistry {
typedef std::map<std::string, IReporterFactory*> FactoryMap; typedef std::map<std::string, Ptr<IReporterFactory> > FactoryMap;
typedef std::vector<Ptr<IReporterFactory> > Listeners;
virtual ~IReporterRegistry(); virtual ~IReporterRegistry();
virtual IStreamingReporter* create( std::string const& name, Ptr<IConfig> const& config ) const = 0; virtual IStreamingReporter* create( std::string const& name, Ptr<IConfig> const& config ) const = 0;
virtual FactoryMap const& getFactories() const = 0; virtual FactoryMap const& getFactories() const = 0;
virtual Listeners const& getListeners() const = 0;
}; };
Ptr<IStreamingReporter> addReporter( Ptr<IStreamingReporter> const& existingReporter, Ptr<IStreamingReporter> const& additionalReporter ); Ptr<IStreamingReporter> addReporter( Ptr<IStreamingReporter> const& existingReporter, Ptr<IStreamingReporter> const& additionalReporter );

View File

@ -26,24 +26,27 @@ namespace Catch {
public: // IRegistryHub public: // IRegistryHub
RegistryHub() { RegistryHub() {
} }
virtual IReporterRegistry const& getReporterRegistry() const { virtual IReporterRegistry const& getReporterRegistry() const override {
return m_reporterRegistry; return m_reporterRegistry;
} }
virtual ITestCaseRegistry const& getTestCaseRegistry() const { virtual ITestCaseRegistry const& getTestCaseRegistry() const override {
return m_testCaseRegistry; return m_testCaseRegistry;
} }
virtual IExceptionTranslatorRegistry& getExceptionTranslatorRegistry() { virtual IExceptionTranslatorRegistry& getExceptionTranslatorRegistry() override {
return m_exceptionTranslatorRegistry; return m_exceptionTranslatorRegistry;
} }
public: // IMutableRegistryHub public: // IMutableRegistryHub
virtual void registerReporter( std::string const& name, IReporterFactory* factory ) { virtual void registerReporter( std::string const& name, Ptr<IReporterFactory> const& factory ) override {
m_reporterRegistry.registerReporter( name, factory ); m_reporterRegistry.registerReporter( name, factory );
} }
virtual void registerTest( TestCase const& testInfo ) { virtual void registerListener( Ptr<IReporterFactory> const& factory ) override {
m_reporterRegistry.registerListener( factory );
}
virtual void registerTest( TestCase const& testInfo ) override {
m_testCaseRegistry.registerTest( testInfo ); m_testCaseRegistry.registerTest( testInfo );
} }
virtual void registerTranslator( const IExceptionTranslator* translator ) { virtual void registerTranslator( const IExceptionTranslator* translator ) override {
m_exceptionTranslatorRegistry.registerTranslator( translator ); m_exceptionTranslatorRegistry.registerTranslator( translator );
} }

View File

@ -36,7 +36,7 @@ namespace Catch {
template<typename T> template<typename T>
class ReporterRegistrar { class ReporterRegistrar {
class ReporterFactory : public IReporterFactory { class ReporterFactory : public SharedImpl<IReporterFactory> {
// *** Please Note ***: // *** Please Note ***:
// - If you end up here looking at a compiler error because it's trying to register // - If you end up here looking at a compiler error because it's trying to register
@ -64,11 +64,35 @@ namespace Catch {
getMutableRegistryHub().registerReporter( name, new ReporterFactory() ); getMutableRegistryHub().registerReporter( name, new ReporterFactory() );
} }
}; };
template<typename T>
class ListenerRegistrar {
class ListenerFactory : public SharedImpl<IReporterFactory> {
virtual IStreamingReporter* create( ReporterConfig const& config ) const {
return new T( config );
}
virtual std::string getDescription() const {
return "";
}
};
public:
ListenerRegistrar() {
getMutableRegistryHub().registerListener( new ListenerFactory() );
}
};
} }
#define INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) \ #define INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) \
namespace{ Catch::LegacyReporterRegistrar<reporterType> catch_internal_RegistrarFor##reporterType( name ); } namespace{ Catch::LegacyReporterRegistrar<reporterType> catch_internal_RegistrarFor##reporterType( name ); }
#define INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType ) \ #define INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType ) \
namespace{ Catch::ReporterRegistrar<reporterType> catch_internal_RegistrarFor##reporterType( name ); } namespace{ Catch::ReporterRegistrar<reporterType> catch_internal_RegistrarFor##reporterType( name ); }
#define INTERNAL_CATCH_REGISTER_LISTENER( listenerType ) \
namespace{ Catch::ListenerRegistrar<listenerType> catch_internal_RegistrarFor##listenerType; }
#endif // TWOBLUECUBES_CATCH_REPORTER_REGISTRARS_HPP_INCLUDED #endif // TWOBLUECUBES_CATCH_REPORTER_REGISTRARS_HPP_INCLUDED

View File

@ -18,27 +18,32 @@ namespace Catch {
public: public:
virtual ~ReporterRegistry() { virtual ~ReporterRegistry() override {}
deleteAllValues( m_factories );
}
virtual IStreamingReporter* create( std::string const& name, Ptr<IConfig> const& config ) const { virtual IStreamingReporter* create( std::string const& name, Ptr<IConfig> const& config ) const override {
FactoryMap::const_iterator it = m_factories.find( name ); FactoryMap::const_iterator it = m_factories.find( name );
if( it == m_factories.end() ) if( it == m_factories.end() )
return CATCH_NULL; return CATCH_NULL;
return it->second->create( ReporterConfig( config ) ); return it->second->create( ReporterConfig( config ) );
} }
void registerReporter( std::string const& name, IReporterFactory* factory ) { void registerReporter( std::string const& name, Ptr<IReporterFactory> const& factory ) {
m_factories.insert( std::make_pair( name, factory ) ); m_factories.insert( std::make_pair( name, factory ) );
} }
void registerListener( Ptr<IReporterFactory> const& factory ) {
m_listeners.push_back( factory );
}
FactoryMap const& getFactories() const { virtual FactoryMap const& getFactories() const override {
return m_factories; return m_factories;
} }
virtual Listeners const& getListeners() const override {
return m_listeners;
}
private: private:
FactoryMap m_factories; FactoryMap m_factories;
Listeners m_listeners;
}; };
} }

View File

@ -5,9 +5,6 @@
* file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
*/ */
#ifndef TWOBLUECUBES_CATCH_SUPPRESS_WARNINGS_H_INCLUDED
#define TWOBLUECUBES_CATCH_SUPPRESS_WARNINGS_H_INCLUDED
#ifdef __clang__ #ifdef __clang__
# ifdef __ICC // icpc defines the __clang__ macro # ifdef __ICC // icpc defines the __clang__ macro
# pragma warning(push) # pragma warning(push)
@ -29,5 +26,3 @@
# pragma GCC diagnostic push # pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wpadded" # pragma GCC diagnostic ignored "-Wpadded"
#endif #endif
#endif // TWOBLUECUBES_CATCH_SUPPRESS_WARNINGS_H_INCLUDED

View File

@ -19,42 +19,48 @@ namespace Catch {
StreamingReporterBase( ReporterConfig const& _config ) StreamingReporterBase( ReporterConfig const& _config )
: m_config( _config.fullConfig() ), : m_config( _config.fullConfig() ),
stream( _config.stream() ) stream( _config.stream() )
{} {
m_reporterPrefs.shouldRedirectStdOut = false;
}
virtual ~StreamingReporterBase(); virtual ReporterPreferences getPreferences() const CATCH_OVERRIDE {
return m_reporterPrefs;
}
virtual void noMatchingTestCases( std::string const& ) {} virtual ~StreamingReporterBase() CATCH_OVERRIDE;
virtual void testRunStarting( TestRunInfo const& _testRunInfo ) { virtual void noMatchingTestCases( std::string const& ) CATCH_OVERRIDE {}
virtual void testRunStarting( TestRunInfo const& _testRunInfo ) CATCH_OVERRIDE {
currentTestRunInfo = _testRunInfo; currentTestRunInfo = _testRunInfo;
} }
virtual void testGroupStarting( GroupInfo const& _groupInfo ) { virtual void testGroupStarting( GroupInfo const& _groupInfo ) CATCH_OVERRIDE {
currentGroupInfo = _groupInfo; currentGroupInfo = _groupInfo;
} }
virtual void testCaseStarting( TestCaseInfo const& _testInfo ) { virtual void testCaseStarting( TestCaseInfo const& _testInfo ) CATCH_OVERRIDE {
currentTestCaseInfo = _testInfo; currentTestCaseInfo = _testInfo;
} }
virtual void sectionStarting( SectionInfo const& _sectionInfo ) { virtual void sectionStarting( SectionInfo const& _sectionInfo ) CATCH_OVERRIDE {
m_sectionStack.push_back( _sectionInfo ); m_sectionStack.push_back( _sectionInfo );
} }
virtual void sectionEnded( SectionStats const& /* _sectionStats */ ) { virtual void sectionEnded( SectionStats const& /* _sectionStats */ ) CATCH_OVERRIDE {
m_sectionStack.pop_back(); m_sectionStack.pop_back();
} }
virtual void testCaseEnded( TestCaseStats const& /* _testCaseStats */ ) { virtual void testCaseEnded( TestCaseStats const& /* _testCaseStats */ ) CATCH_OVERRIDE {
currentTestCaseInfo.reset(); currentTestCaseInfo.reset();
} }
virtual void testGroupEnded( TestGroupStats const& /* _testGroupStats */ ) { virtual void testGroupEnded( TestGroupStats const& /* _testGroupStats */ ) CATCH_OVERRIDE {
currentGroupInfo.reset(); currentGroupInfo.reset();
} }
virtual void testRunEnded( TestRunStats const& /* _testRunStats */ ) { virtual void testRunEnded( TestRunStats const& /* _testRunStats */ ) CATCH_OVERRIDE {
currentTestCaseInfo.reset(); currentTestCaseInfo.reset();
currentGroupInfo.reset(); currentGroupInfo.reset();
currentTestRunInfo.reset(); currentTestRunInfo.reset();
} }
virtual void skipTest( TestCaseInfo const& ) { virtual void skipTest( TestCaseInfo const& ) CATCH_OVERRIDE {
// Don't do anything with this by default. // Don't do anything with this by default.
// It can optionally be overridden in the derived class. // It can optionally be overridden in the derived class.
} }
@ -67,6 +73,7 @@ namespace Catch {
LazyStat<TestCaseInfo> currentTestCaseInfo; LazyStat<TestCaseInfo> currentTestCaseInfo;
std::vector<SectionInfo> m_sectionStack; std::vector<SectionInfo> m_sectionStack;
ReporterPreferences m_reporterPrefs;
}; };
struct CumulativeReporterBase : SharedImpl<IStreamingReporter> { struct CumulativeReporterBase : SharedImpl<IStreamingReporter> {
@ -118,15 +125,21 @@ namespace Catch {
CumulativeReporterBase( ReporterConfig const& _config ) CumulativeReporterBase( ReporterConfig const& _config )
: m_config( _config.fullConfig() ), : m_config( _config.fullConfig() ),
stream( _config.stream() ) stream( _config.stream() )
{} {
m_reporterPrefs.shouldRedirectStdOut = false;
}
~CumulativeReporterBase(); ~CumulativeReporterBase();
virtual void testRunStarting( TestRunInfo const& ) {} virtual ReporterPreferences getPreferences() const CATCH_OVERRIDE {
virtual void testGroupStarting( GroupInfo const& ) {} return m_reporterPrefs;
}
virtual void testCaseStarting( TestCaseInfo const& ) {} virtual void testRunStarting( TestRunInfo const& ) CATCH_OVERRIDE {}
virtual void testGroupStarting( GroupInfo const& ) CATCH_OVERRIDE {}
virtual void sectionStarting( SectionInfo const& sectionInfo ) { virtual void testCaseStarting( TestCaseInfo const& ) CATCH_OVERRIDE {}
virtual void sectionStarting( SectionInfo const& sectionInfo ) CATCH_OVERRIDE {
SectionStats incompleteStats( sectionInfo, Counts(), 0, false ); SectionStats incompleteStats( sectionInfo, Counts(), 0, false );
Ptr<SectionNode> node; Ptr<SectionNode> node;
if( m_sectionStack.empty() ) { if( m_sectionStack.empty() ) {
@ -151,7 +164,7 @@ namespace Catch {
m_deepestSection = node; m_deepestSection = node;
} }
virtual void assertionStarting( AssertionInfo const& ) {} virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE {}
virtual bool assertionEnded( AssertionStats const& assertionStats ) { virtual bool assertionEnded( AssertionStats const& assertionStats ) {
assert( !m_sectionStack.empty() ); assert( !m_sectionStack.empty() );
@ -159,13 +172,13 @@ namespace Catch {
sectionNode.assertions.push_back( assertionStats ); sectionNode.assertions.push_back( assertionStats );
return true; return true;
} }
virtual void sectionEnded( SectionStats const& sectionStats ) { virtual void sectionEnded( SectionStats const& sectionStats ) CATCH_OVERRIDE {
assert( !m_sectionStack.empty() ); assert( !m_sectionStack.empty() );
SectionNode& node = *m_sectionStack.back(); SectionNode& node = *m_sectionStack.back();
node.stats = sectionStats; node.stats = sectionStats;
m_sectionStack.pop_back(); m_sectionStack.pop_back();
} }
virtual void testCaseEnded( TestCaseStats const& testCaseStats ) { virtual void testCaseEnded( TestCaseStats const& testCaseStats ) CATCH_OVERRIDE {
Ptr<TestCaseNode> node = new TestCaseNode( testCaseStats ); Ptr<TestCaseNode> node = new TestCaseNode( testCaseStats );
assert( m_sectionStack.size() == 0 ); assert( m_sectionStack.size() == 0 );
node->children.push_back( m_rootSection ); node->children.push_back( m_rootSection );
@ -176,12 +189,12 @@ namespace Catch {
m_deepestSection->stdOut = testCaseStats.stdOut; m_deepestSection->stdOut = testCaseStats.stdOut;
m_deepestSection->stdErr = testCaseStats.stdErr; m_deepestSection->stdErr = testCaseStats.stdErr;
} }
virtual void testGroupEnded( TestGroupStats const& testGroupStats ) { virtual void testGroupEnded( TestGroupStats const& testGroupStats ) CATCH_OVERRIDE {
Ptr<TestGroupNode> node = new TestGroupNode( testGroupStats ); Ptr<TestGroupNode> node = new TestGroupNode( testGroupStats );
node->children.swap( m_testCases ); node->children.swap( m_testCases );
m_testGroups.push_back( node ); m_testGroups.push_back( node );
} }
virtual void testRunEnded( TestRunStats const& testRunStats ) { virtual void testRunEnded( TestRunStats const& testRunStats ) CATCH_OVERRIDE {
Ptr<TestRunNode> node = new TestRunNode( testRunStats ); Ptr<TestRunNode> node = new TestRunNode( testRunStats );
node->children.swap( m_testGroups ); node->children.swap( m_testGroups );
m_testRuns.push_back( node ); m_testRuns.push_back( node );
@ -189,7 +202,7 @@ namespace Catch {
} }
virtual void testRunEndedCumulative() = 0; virtual void testRunEndedCumulative() = 0;
virtual void skipTest( TestCaseInfo const& ) {} virtual void skipTest( TestCaseInfo const& ) CATCH_OVERRIDE {}
Ptr<IConfig> m_config; Ptr<IConfig> m_config;
std::ostream& stream; std::ostream& stream;
@ -203,6 +216,7 @@ namespace Catch {
Ptr<SectionNode> m_rootSection; Ptr<SectionNode> m_rootSection;
Ptr<SectionNode> m_deepestSection; Ptr<SectionNode> m_deepestSection;
std::vector<Ptr<SectionNode> > m_sectionStack; std::vector<Ptr<SectionNode> > m_sectionStack;
ReporterPreferences m_reporterPrefs;
}; };
@ -216,6 +230,18 @@ namespace Catch {
return line; return line;
} }
struct TestEventListenerBase : StreamingReporterBase {
TestEventListenerBase( ReporterConfig const& _config )
: StreamingReporterBase( _config )
{}
virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE {}
virtual bool assertionEnded( AssertionStats const& _assertionStats ) CATCH_OVERRIDE {
return false;
}
};
} // end namespace Catch } // end namespace Catch
#endif // TWOBLUECUBES_CATCH_REPORTER_BASES_HPP_INCLUDED #endif // TWOBLUECUBES_CATCH_REPORTER_BASES_HPP_INCLUDED

View File

@ -21,24 +21,19 @@ namespace Catch {
m_headerPrinted( false ) m_headerPrinted( false )
{} {}
virtual ~ConsoleReporter(); virtual ~ConsoleReporter() CATCH_OVERRIDE;
static std::string getDescription() { static std::string getDescription() {
return "Reports test results as plain lines of text"; return "Reports test results as plain lines of text";
} }
virtual ReporterPreferences getPreferences() const {
ReporterPreferences prefs;
prefs.shouldRedirectStdOut = false;
return prefs;
}
virtual void noMatchingTestCases( std::string const& spec ) { virtual void noMatchingTestCases( std::string const& spec ) CATCH_OVERRIDE {
stream << "No test cases matched '" << spec << "'" << std::endl; stream << "No test cases matched '" << spec << "'" << std::endl;
} }
virtual void assertionStarting( AssertionInfo const& ) { virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE {
} }
virtual bool assertionEnded( AssertionStats const& _assertionStats ) { virtual bool assertionEnded( AssertionStats const& _assertionStats ) CATCH_OVERRIDE {
AssertionResult const& result = _assertionStats.assertionResult; AssertionResult const& result = _assertionStats.assertionResult;
bool printInfoMessages = true; bool printInfoMessages = true;
@ -58,11 +53,11 @@ namespace Catch {
return true; return true;
} }
virtual void sectionStarting( SectionInfo const& _sectionInfo ) { virtual void sectionStarting( SectionInfo const& _sectionInfo ) CATCH_OVERRIDE {
m_headerPrinted = false; m_headerPrinted = false;
StreamingReporterBase::sectionStarting( _sectionInfo ); StreamingReporterBase::sectionStarting( _sectionInfo );
} }
virtual void sectionEnded( SectionStats const& _sectionStats ) { virtual void sectionEnded( SectionStats const& _sectionStats ) CATCH_OVERRIDE {
if( _sectionStats.missingAssertions ) { if( _sectionStats.missingAssertions ) {
lazyPrint(); lazyPrint();
Colour colour( Colour::ResultError ); Colour colour( Colour::ResultError );
@ -84,11 +79,11 @@ namespace Catch {
StreamingReporterBase::sectionEnded( _sectionStats ); StreamingReporterBase::sectionEnded( _sectionStats );
} }
virtual void testCaseEnded( TestCaseStats const& _testCaseStats ) { virtual void testCaseEnded( TestCaseStats const& _testCaseStats ) CATCH_OVERRIDE {
StreamingReporterBase::testCaseEnded( _testCaseStats ); StreamingReporterBase::testCaseEnded( _testCaseStats );
m_headerPrinted = false; m_headerPrinted = false;
} }
virtual void testGroupEnded( TestGroupStats const& _testGroupStats ) { virtual void testGroupEnded( TestGroupStats const& _testGroupStats ) CATCH_OVERRIDE {
if( currentGroupInfo.used ) { if( currentGroupInfo.used ) {
printSummaryDivider(); printSummaryDivider();
stream << "Summary for group '" << _testGroupStats.groupInfo.name << "':\n"; stream << "Summary for group '" << _testGroupStats.groupInfo.name << "':\n";
@ -97,7 +92,7 @@ namespace Catch {
} }
StreamingReporterBase::testGroupEnded( _testGroupStats ); StreamingReporterBase::testGroupEnded( _testGroupStats );
} }
virtual void testRunEnded( TestRunStats const& _testRunStats ) { virtual void testRunEnded( TestRunStats const& _testRunStats ) CATCH_OVERRIDE {
printTotalsDivider( _testRunStats.totals ); printTotalsDivider( _testRunStats.totals );
printTotals( _testRunStats.totals ); printTotals( _testRunStats.totals );
stream << std::endl; stream << std::endl;

View File

@ -23,28 +23,24 @@ namespace Catch {
JunitReporter( ReporterConfig const& _config ) JunitReporter( ReporterConfig const& _config )
: CumulativeReporterBase( _config ), : CumulativeReporterBase( _config ),
xml( _config.stream() ) xml( _config.stream() )
{} {
m_reporterPrefs.shouldRedirectStdOut = true;
}
~JunitReporter(); virtual ~JunitReporter() CATCH_OVERRIDE;
static std::string getDescription() { static std::string getDescription() {
return "Reports test results in an XML format that looks like Ant's junitreport target"; return "Reports test results in an XML format that looks like Ant's junitreport target";
} }
virtual void noMatchingTestCases( std::string const& /*spec*/ ) {} virtual void noMatchingTestCases( std::string const& /*spec*/ ) CATCH_OVERRIDE {}
virtual ReporterPreferences getPreferences() const { virtual void testRunStarting( TestRunInfo const& runInfo ) CATCH_OVERRIDE {
ReporterPreferences prefs;
prefs.shouldRedirectStdOut = true;
return prefs;
}
virtual void testRunStarting( TestRunInfo const& runInfo ) {
CumulativeReporterBase::testRunStarting( runInfo ); CumulativeReporterBase::testRunStarting( runInfo );
xml.startElement( "testsuites" ); xml.startElement( "testsuites" );
} }
virtual void testGroupStarting( GroupInfo const& groupInfo ) { virtual void testGroupStarting( GroupInfo const& groupInfo ) CATCH_OVERRIDE {
suiteTimer.start(); suiteTimer.start();
stdOutForSuite.str(""); stdOutForSuite.str("");
stdErrForSuite.str(""); stdErrForSuite.str("");
@ -52,25 +48,25 @@ namespace Catch {
CumulativeReporterBase::testGroupStarting( groupInfo ); CumulativeReporterBase::testGroupStarting( groupInfo );
} }
virtual bool assertionEnded( AssertionStats const& assertionStats ) { virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE {
if( assertionStats.assertionResult.getResultType() == ResultWas::ThrewException ) if( assertionStats.assertionResult.getResultType() == ResultWas::ThrewException )
unexpectedExceptions++; unexpectedExceptions++;
return CumulativeReporterBase::assertionEnded( assertionStats ); return CumulativeReporterBase::assertionEnded( assertionStats );
} }
virtual void testCaseEnded( TestCaseStats const& testCaseStats ) { virtual void testCaseEnded( TestCaseStats const& testCaseStats ) CATCH_OVERRIDE {
stdOutForSuite << testCaseStats.stdOut; stdOutForSuite << testCaseStats.stdOut;
stdErrForSuite << testCaseStats.stdErr; stdErrForSuite << testCaseStats.stdErr;
CumulativeReporterBase::testCaseEnded( testCaseStats ); CumulativeReporterBase::testCaseEnded( testCaseStats );
} }
virtual void testGroupEnded( TestGroupStats const& testGroupStats ) { virtual void testGroupEnded( TestGroupStats const& testGroupStats ) CATCH_OVERRIDE {
double suiteTime = suiteTimer.getElapsedSeconds(); double suiteTime = suiteTimer.getElapsedSeconds();
CumulativeReporterBase::testGroupEnded( testGroupStats ); CumulativeReporterBase::testGroupEnded( testGroupStats );
writeGroup( *m_testGroups.back(), suiteTime ); writeGroup( *m_testGroups.back(), suiteTime );
} }
virtual void testRunEndedCumulative() { virtual void testRunEndedCumulative() CATCH_OVERRIDE {
xml.endElement(); xml.endElement();
} }

View File

@ -19,6 +19,8 @@
#ifdef __clang__ #ifdef __clang__
# pragma clang diagnostic push # pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wpadded" # pragma clang diagnostic ignored "-Wpadded"
# pragma clang diagnostic ignored "-Wc++98-compat"
# pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
#endif #endif
namespace Catch { namespace Catch {
@ -27,7 +29,9 @@ namespace Catch {
TeamCityReporter( ReporterConfig const& _config ) TeamCityReporter( ReporterConfig const& _config )
: StreamingReporterBase( _config ), : StreamingReporterBase( _config ),
m_headerPrintedForThisSection( false ) m_headerPrintedForThisSection( false )
{} {
m_reporterPrefs.shouldRedirectStdOut = true;
}
static std::string escape( std::string const& str ) { static std::string escape( std::string const& str ) {
std::string escaped = str; std::string escaped = str;
@ -39,18 +43,13 @@ namespace Catch {
replaceInPlace( escaped, "]", "|]" ); replaceInPlace( escaped, "]", "|]" );
return escaped; return escaped;
} }
virtual ~TeamCityReporter(); virtual ~TeamCityReporter() CATCH_OVERRIDE;
static std::string getDescription() { static std::string getDescription() {
return "Reports test results as TeamCity service messages"; return "Reports test results as TeamCity service messages";
} }
virtual ReporterPreferences getPreferences() const {
ReporterPreferences prefs;
prefs.shouldRedirectStdOut = true;
return prefs;
}
virtual void skipTest( TestCaseInfo const& testInfo ) { virtual void skipTest( TestCaseInfo const& testInfo ) CATCH_OVERRIDE {
stream << "##teamcity[testIgnored name='" stream << "##teamcity[testIgnored name='"
<< escape( testInfo.name ) << "'"; << escape( testInfo.name ) << "'";
if( testInfo.isHidden() ) if( testInfo.isHidden() )
@ -60,24 +59,24 @@ namespace Catch {
stream << "]\n"; stream << "]\n";
} }
virtual void noMatchingTestCases( std::string const& /* spec */ ) {} virtual void noMatchingTestCases( std::string const& /* spec */ ) CATCH_OVERRIDE {}
virtual void testGroupStarting( GroupInfo const& groupInfo ) { virtual void testGroupStarting( GroupInfo const& groupInfo ) CATCH_OVERRIDE {
StreamingReporterBase::testGroupStarting( groupInfo ); StreamingReporterBase::testGroupStarting( groupInfo );
stream << "##teamcity[testSuiteStarted name='" stream << "##teamcity[testSuiteStarted name='"
<< escape( groupInfo.name ) << "']\n"; << escape( groupInfo.name ) << "']\n";
} }
virtual void testGroupEnded( TestGroupStats const& testGroupStats ) { virtual void testGroupEnded( TestGroupStats const& testGroupStats ) CATCH_OVERRIDE {
StreamingReporterBase::testGroupEnded( testGroupStats ); StreamingReporterBase::testGroupEnded( testGroupStats );
stream << "##teamcity[testSuiteFinished name='" stream << "##teamcity[testSuiteFinished name='"
<< escape( testGroupStats.groupInfo.name ) << "']\n"; << escape( testGroupStats.groupInfo.name ) << "']\n";
} }
virtual void assertionStarting( AssertionInfo const& ) { virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE {
} }
virtual bool assertionEnded( AssertionStats const& assertionStats ) { virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE {
AssertionResult const& result = assertionStats.assertionResult; AssertionResult const& result = assertionStats.assertionResult;
if( !result.isOk() ) { if( !result.isOk() ) {
@ -143,18 +142,18 @@ namespace Catch {
return true; return true;
} }
virtual void sectionStarting( SectionInfo const& sectionInfo ) { virtual void sectionStarting( SectionInfo const& sectionInfo ) CATCH_OVERRIDE {
m_headerPrintedForThisSection = false; m_headerPrintedForThisSection = false;
StreamingReporterBase::sectionStarting( sectionInfo ); StreamingReporterBase::sectionStarting( sectionInfo );
} }
virtual void testCaseStarting( TestCaseInfo const& testInfo ) { virtual void testCaseStarting( TestCaseInfo const& testInfo ) CATCH_OVERRIDE {
StreamingReporterBase::testCaseStarting( testInfo ); StreamingReporterBase::testCaseStarting( testInfo );
stream << "##teamcity[testStarted name='" stream << "##teamcity[testStarted name='"
<< escape( testInfo.name ) << "']\n"; << escape( testInfo.name ) << "']\n";
} }
virtual void testCaseEnded( TestCaseStats const& testCaseStats ) { virtual void testCaseEnded( TestCaseStats const& testCaseStats ) CATCH_OVERRIDE {
StreamingReporterBase::testCaseEnded( testCaseStats ); StreamingReporterBase::testCaseEnded( testCaseStats );
if( !testCaseStats.stdOut.empty() ) if( !testCaseStats.stdOut.empty() )
stream << "##teamcity[testStdOut name='" stream << "##teamcity[testStdOut name='"

View File

@ -21,26 +21,23 @@ namespace Catch {
XmlReporter( ReporterConfig const& _config ) XmlReporter( ReporterConfig const& _config )
: StreamingReporterBase( _config ), : StreamingReporterBase( _config ),
m_sectionDepth( 0 ) m_sectionDepth( 0 )
{} {
m_reporterPrefs.shouldRedirectStdOut = true;
}
virtual ~XmlReporter(); virtual ~XmlReporter() CATCH_OVERRIDE;
static std::string getDescription() { static std::string getDescription() {
return "Reports test results as an XML document"; return "Reports test results as an XML document";
} }
public: // StreamingReporterBase public: // StreamingReporterBase
virtual ReporterPreferences getPreferences() const {
ReporterPreferences prefs;
prefs.shouldRedirectStdOut = true;
return prefs;
}
virtual void noMatchingTestCases( std::string const& s ) { virtual void noMatchingTestCases( std::string const& s ) CATCH_OVERRIDE {
StreamingReporterBase::noMatchingTestCases( s ); StreamingReporterBase::noMatchingTestCases( s );
} }
virtual void testRunStarting( TestRunInfo const& testInfo ) { virtual void testRunStarting( TestRunInfo const& testInfo ) CATCH_OVERRIDE {
StreamingReporterBase::testRunStarting( testInfo ); StreamingReporterBase::testRunStarting( testInfo );
m_xml.setStream( stream ); m_xml.setStream( stream );
m_xml.startElement( "Catch" ); m_xml.startElement( "Catch" );
@ -48,13 +45,13 @@ namespace Catch {
m_xml.writeAttribute( "name", m_config->name() ); m_xml.writeAttribute( "name", m_config->name() );
} }
virtual void testGroupStarting( GroupInfo const& groupInfo ) { virtual void testGroupStarting( GroupInfo const& groupInfo ) CATCH_OVERRIDE {
StreamingReporterBase::testGroupStarting( groupInfo ); StreamingReporterBase::testGroupStarting( groupInfo );
m_xml.startElement( "Group" ) m_xml.startElement( "Group" )
.writeAttribute( "name", groupInfo.name ); .writeAttribute( "name", groupInfo.name );
} }
virtual void testCaseStarting( TestCaseInfo const& testInfo ) { virtual void testCaseStarting( TestCaseInfo const& testInfo ) CATCH_OVERRIDE {
StreamingReporterBase::testCaseStarting(testInfo); StreamingReporterBase::testCaseStarting(testInfo);
m_xml.startElement( "TestCase" ).writeAttribute( "name", trim( testInfo.name ) ); m_xml.startElement( "TestCase" ).writeAttribute( "name", trim( testInfo.name ) );
@ -62,7 +59,7 @@ namespace Catch {
m_testCaseTimer.start(); m_testCaseTimer.start();
} }
virtual void sectionStarting( SectionInfo const& sectionInfo ) { virtual void sectionStarting( SectionInfo const& sectionInfo ) CATCH_OVERRIDE {
StreamingReporterBase::sectionStarting( sectionInfo ); StreamingReporterBase::sectionStarting( sectionInfo );
if( m_sectionDepth++ > 0 ) { if( m_sectionDepth++ > 0 ) {
m_xml.startElement( "Section" ) m_xml.startElement( "Section" )
@ -71,9 +68,9 @@ namespace Catch {
} }
} }
virtual void assertionStarting( AssertionInfo const& ) { } virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE { }
virtual bool assertionEnded( AssertionStats const& assertionStats ) { virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE {
const AssertionResult& assertionResult = assertionStats.assertionResult; const AssertionResult& assertionResult = assertionStats.assertionResult;
// Print any info messages in <Info> tags. // Print any info messages in <Info> tags.
@ -144,7 +141,7 @@ namespace Catch {
return true; return true;
} }
virtual void sectionEnded( SectionStats const& sectionStats ) { virtual void sectionEnded( SectionStats const& sectionStats ) CATCH_OVERRIDE {
StreamingReporterBase::sectionEnded( sectionStats ); StreamingReporterBase::sectionEnded( sectionStats );
if( --m_sectionDepth > 0 ) { if( --m_sectionDepth > 0 ) {
XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResults" ); XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResults" );
@ -159,7 +156,7 @@ namespace Catch {
} }
} }
virtual void testCaseEnded( TestCaseStats const& testCaseStats ) { virtual void testCaseEnded( TestCaseStats const& testCaseStats ) CATCH_OVERRIDE {
StreamingReporterBase::testCaseEnded( testCaseStats ); StreamingReporterBase::testCaseEnded( testCaseStats );
XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResult" ); XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResult" );
e.writeAttribute( "success", testCaseStats.totals.assertions.allOk() ); e.writeAttribute( "success", testCaseStats.totals.assertions.allOk() );
@ -170,7 +167,7 @@ namespace Catch {
m_xml.endElement(); m_xml.endElement();
} }
virtual void testGroupEnded( TestGroupStats const& testGroupStats ) { virtual void testGroupEnded( TestGroupStats const& testGroupStats ) CATCH_OVERRIDE {
StreamingReporterBase::testGroupEnded( testGroupStats ); StreamingReporterBase::testGroupEnded( testGroupStats );
// TODO: Check testGroupStats.aborting and act accordingly. // TODO: Check testGroupStats.aborting and act accordingly.
m_xml.scopedElement( "OverallResults" ) m_xml.scopedElement( "OverallResults" )
@ -180,7 +177,7 @@ namespace Catch {
m_xml.endElement(); m_xml.endElement();
} }
virtual void testRunEnded( TestRunStats const& testRunStats ) { virtual void testRunEnded( TestRunStats const& testRunStats ) CATCH_OVERRIDE {
StreamingReporterBase::testRunEnded( testRunStats ); StreamingReporterBase::testRunEnded( testRunStats );
m_xml.scopedElement( "OverallResults" ) m_xml.scopedElement( "OverallResults" )
.writeAttribute( "successes", testRunStats.totals.assertions.passed ) .writeAttribute( "successes", testRunStats.totals.assertions.passed )

View File

@ -798,5 +798,5 @@ with expansion:
=============================================================================== ===============================================================================
test cases: 159 | 119 passed | 39 failed | 1 failed as expected test cases: 159 | 119 passed | 39 failed | 1 failed as expected
assertions: 784 | 691 passed | 80 failed | 13 failed as expected assertions: 788 | 695 passed | 80 failed | 13 failed as expected

View File

@ -3929,7 +3929,7 @@ with expansion:
TestMain.cpp:<line number>: TestMain.cpp:<line number>:
PASSED: PASSED:
CHECK( config.reporterName.empty() ) CHECK( config.reporterNames.empty() )
with expansion: with expansion:
true true
@ -4019,7 +4019,7 @@ PASSED:
TestMain.cpp:<line number>: TestMain.cpp:<line number>:
PASSED: PASSED:
REQUIRE( config.reporterName == "console" ) REQUIRE( config.reporterNames[0] == "console" )
with expansion: with expansion:
"console" == "console" "console" == "console"
@ -4037,10 +4037,40 @@ PASSED:
TestMain.cpp:<line number>: TestMain.cpp:<line number>:
PASSED: PASSED:
REQUIRE( config.reporterName == "xml" ) REQUIRE( config.reporterNames[0] == "xml" )
with expansion: with expansion:
"xml" == "xml" "xml" == "xml"
-------------------------------------------------------------------------------
Process can be configured on command line
reporter
-r xml and junit
-------------------------------------------------------------------------------
TestMain.cpp:<line number>
...............................................................................
TestMain.cpp:<line number>:
PASSED:
CHECK_NOTHROW( parseIntoConfig( argv, config ) )
TestMain.cpp:<line number>:
PASSED:
REQUIRE( config.reporterNames.size() == 2 )
with expansion:
2 == 2
TestMain.cpp:<line number>:
PASSED:
REQUIRE( config.reporterNames[0] == "xml" )
with expansion:
"xml" == "xml"
TestMain.cpp:<line number>:
PASSED:
REQUIRE( config.reporterNames[1] == "junit" )
with expansion:
"junit" == "junit"
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Process can be configured on command line Process can be configured on command line
reporter reporter
@ -4055,7 +4085,7 @@ PASSED:
TestMain.cpp:<line number>: TestMain.cpp:<line number>:
PASSED: PASSED:
REQUIRE( config.reporterName == "junit" ) REQUIRE( config.reporterNames[0] == "junit" )
with expansion: with expansion:
"junit" == "junit" "junit" == "junit"
@ -8141,5 +8171,5 @@ with expansion:
=============================================================================== ===============================================================================
test cases: 159 | 103 passed | 55 failed | 1 failed as expected test cases: 159 | 103 passed | 55 failed | 1 failed as expected
assertions: 804 | 691 passed | 100 failed | 13 failed as expected assertions: 808 | 695 passed | 100 failed | 13 failed as expected

View File

@ -1,5 +1,5 @@
<testsuites> <testsuites>
<testsuite name="CatchSelfTest" errors="12" failures="88" tests="804" hostname="tbd" time="{duration}" timestamp="tbd"> <testsuite name="CatchSelfTest" errors="12" failures="88" tests="808" hostname="tbd" time="{duration}" timestamp="tbd">
<testcase classname="global" name="toString(enum)" time="{duration}"/> <testcase classname="global" name="toString(enum)" time="{duration}"/>
<testcase classname="global" name="toString(enum w/operator&lt;&lt;)" time="{duration}"/> <testcase classname="global" name="toString(enum w/operator&lt;&lt;)" time="{duration}"/>
<testcase classname="global" name="toString(enum class)" time="{duration}"/> <testcase classname="global" name="toString(enum class)" time="{duration}"/>
@ -478,6 +478,7 @@ MiscTests.cpp:<line number>
<testcase classname="Process can be configured on command line" name="test lists/Specify one test case exclusion using ~" time="{duration}"/> <testcase classname="Process can be configured on command line" name="test lists/Specify one test case exclusion using ~" time="{duration}"/>
<testcase classname="Process can be configured on command line" name="reporter/-r/console" time="{duration}"/> <testcase classname="Process can be configured on command line" name="reporter/-r/console" time="{duration}"/>
<testcase classname="Process can be configured on command line" name="reporter/-r/xml" time="{duration}"/> <testcase classname="Process can be configured on command line" name="reporter/-r/xml" time="{duration}"/>
<testcase classname="Process can be configured on command line" name="reporter/-r xml and junit" time="{duration}"/>
<testcase classname="Process can be configured on command line" name="reporter/--reporter/junit" time="{duration}"/> <testcase classname="Process can be configured on command line" name="reporter/--reporter/junit" time="{duration}"/>
<testcase classname="Process can be configured on command line" name="debugger/-b" time="{duration}"/> <testcase classname="Process can be configured on command line" name="debugger/-b" time="{duration}"/>
<testcase classname="Process can be configured on command line" name="debugger/--break" time="{duration}"/> <testcase classname="Process can be configured on command line" name="debugger/--break" time="{duration}"/>

View File

@ -4013,7 +4013,7 @@
</Expression> </Expression>
<Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
<Original> <Original>
config.reporterName.empty() config.reporterNames.empty()
</Original> </Original>
<Expanded> <Expanded>
true true
@ -4123,7 +4123,7 @@
</Expression> </Expression>
<Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
<Original> <Original>
config.reporterName == "console" config.reporterNames[0] == "console"
</Original> </Original>
<Expanded> <Expanded>
"console" == "console" "console" == "console"
@ -4145,7 +4145,7 @@
</Expression> </Expression>
<Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
<Original> <Original>
config.reporterName == "xml" config.reporterNames[0] == "xml"
</Original> </Original>
<Expanded> <Expanded>
"xml" == "xml" "xml" == "xml"
@ -4155,6 +4155,44 @@
</Section> </Section>
<OverallResults successes="2" failures="0" expectedFailures="0"/> <OverallResults successes="2" failures="0" expectedFailures="0"/>
</Section> </Section>
<Section name="reporter">
<Section name="-r xml and junit">
<Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
<Original>
parseIntoConfig( argv, config )
</Original>
<Expanded>
parseIntoConfig( argv, config )
</Expanded>
</Expression>
<Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
<Original>
config.reporterNames.size() == 2
</Original>
<Expanded>
2 == 2
</Expanded>
</Expression>
<Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
<Original>
config.reporterNames[0] == "xml"
</Original>
<Expanded>
"xml" == "xml"
</Expanded>
</Expression>
<Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
<Original>
config.reporterNames[1] == "junit"
</Original>
<Expanded>
"junit" == "junit"
</Expanded>
</Expression>
<OverallResults successes="4" failures="0" expectedFailures="0"/>
</Section>
<OverallResults successes="4" failures="0" expectedFailures="0"/>
</Section>
<Section name="reporter"> <Section name="reporter">
<Section name="--reporter/junit"> <Section name="--reporter/junit">
<Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
@ -4167,7 +4205,7 @@
</Expression> </Expression>
<Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
<Original> <Original>
config.reporterName == "junit" config.reporterNames[0] == "junit"
</Original> </Original>
<Expanded> <Expanded>
"junit" == "junit" "junit" == "junit"
@ -8425,7 +8463,7 @@ there"
</Section> </Section>
<OverallResult success="true"/> <OverallResult success="true"/>
</TestCase> </TestCase>
<OverallResults successes="691" failures="100" expectedFailures="13"/> <OverallResults successes="695" failures="100" expectedFailures="13"/>
</Group> </Group>
<OverallResults successes="691" failures="100" expectedFailures="13"/> <OverallResults successes="695" failures="100" expectedFailures="13"/>
</Catch> </Catch>

View File

@ -7,14 +7,16 @@
*/ */
#include "catch.hpp" #include "catch.hpp"
#ifdef __clang__
# pragma clang diagnostic ignored "-Wc++98-compat"
# pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
#endif
#include "internal/catch_xmlwriter.hpp" #include "internal/catch_xmlwriter.hpp"
#include <iostream> #include <iostream>
#ifdef __clang__
#pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
#endif
TEST_CASE( "random SECTION tests", "[.][sections][failing]" ) TEST_CASE( "random SECTION tests", "[.][sections][failing]" )
{ {
int a = 1; int a = 1;

View File

@ -1 +1,2 @@
#include "catch_suppress_warnings.h"
#include "catch_interfaces_exception.h" #include "catch_interfaces_exception.h"

View File

@ -1,2 +1,3 @@
// This file is only here to verify (to the extent possible) the self sufficiency of the header // This file is only here to verify (to the extent possible) the self sufficiency of the header
#include "catch_suppress_warnings.h"
#include "catch_interfaces_registry_hub.h" #include "catch_interfaces_registry_hub.h"