diff --git a/include/internal/catch_interfaces_reporter.h b/include/internal/catch_interfaces_reporter.h index a0b274ab..b5fdabef 100644 --- a/include/internal/catch_interfaces_reporter.h +++ b/include/internal/catch_interfaces_reporter.h @@ -21,9 +21,8 @@ namespace Catch { - struct ReporterConfig - { - ReporterConfig( std::ostream& _stream, const ConfigData& _fullConfig ) + struct ReporterConfig { + ReporterConfig( std::ostream& _stream, ConfigData const& _fullConfig ) : m_stream( &_stream ), m_fullConfig( _fullConfig ) {} std::ostream& stream() { return *m_stream; } @@ -36,8 +35,7 @@ namespace Catch ConfigData m_fullConfig; }; - struct ReporterPreferences - { + struct ReporterPreferences { ReporterPreferences() : shouldRedirectStdOut( false ) {} @@ -45,9 +43,23 @@ namespace Catch bool shouldRedirectStdOut; }; + struct SectionInfo { + SectionInfo( std::string const& _name, + std::string const& _description, + SourceLineInfo const& _lineInfo ) + : name( _name ), + description( _description ), + sourceLineInfo( _lineInfo ) + {} + + std::string name; + std::string description; + SourceLineInfo sourceLineInfo; + }; + struct AssertionStats { - AssertionStats( const AssertionResult& _assertionResult, - const Totals& _totals ) + AssertionStats( AssertionResult const& _assertionResult, + Totals const& _totals ) : assertionResult( _assertionResult ), totals( _totals ) {} @@ -57,11 +69,16 @@ namespace Catch Totals totals; }; + struct SectionStats { + SectionInfo sectionInfo; + Totals totals; + }; + struct TestCaseStats { - TestCaseStats( const TestCaseInfo& _testInfo, - const Totals& _totals, - const std::string& _stdOut, - const std::string& _stdErr, + TestCaseStats( TestCaseInfo const& _testInfo, + Totals const& _totals, + std::string const& _stdOut, + std::string const& _stdErr, bool _missingAssertions, bool _aborting ) : testInfo( _testInfo ), @@ -81,8 +98,8 @@ namespace Catch }; struct TestGroupStats { - TestGroupStats( const std::string& _groupName, - const Totals& _totals, + TestGroupStats( std::string const& _groupName, + Totals const& _totals, bool _aborting ) : groupName( _groupName ), totals( _totals ), @@ -95,8 +112,8 @@ namespace Catch }; struct TestRunStats { - TestRunStats( const std::string& _runName, - const Totals& _totals, + TestRunStats( std::string const& _runName, + Totals const& _totals, bool _aborting ) : runName( _runName ), totals( _totals ), @@ -113,17 +130,17 @@ namespace Catch virtual ~IStreamingReporter(); virtual ReporterPreferences getPreferences() const = 0; - virtual void testRunStarting( const std::string& runName ) = 0; - virtual void testGroupStarting( const std::string& groupName ) = 0; + virtual void testRunStarting( std::string const& runName ) = 0; + virtual void testGroupStarting( std::string const& groupName ) = 0; // !TBD: include section info (perhaps TestCase has an isSection flag and/ or a parent pointer - virtual void testCaseStarting( const TestCaseInfo& testInfo ) = 0; - virtual void assertionStarting( const AssertionInfo& assertionInfo ) = 0; + virtual void testCaseStarting( TestCaseInfo const& testInfo ) = 0; + virtual void assertionStarting( AssertionInfo const& assertionInfo ) = 0; - virtual void assertionEnding( const AssertionStats& assertionStats ) = 0; - virtual void testCaseEnding( const TestCaseStats& testCaseStats ) = 0; - virtual void testGroupEnding( const TestGroupStats& testGroupStats ) = 0; - virtual void testRunEnding( const TestRunStats& testRunStats ) = 0; + virtual void assertionEnding( AssertionStats const& assertionStats ) = 0; + virtual void testCaseEnding( TestCaseStats const& testCaseStats ) = 0; + virtual void testGroupEnding( TestGroupStats const& testGroupStats ) = 0; + virtual void testRunEnding( TestRunStats const& testRunStats ) = 0; }; // !TBD: Derived helper that implements the streaming interface but holds the stats // - declares a new interface where methods are called at the end of each event @@ -138,23 +155,23 @@ namespace Catch virtual bool shouldRedirectStdout() const = 0; virtual void StartTesting() = 0; - virtual void EndTesting( const Totals& totals ) = 0; + virtual void EndTesting( Totals const& totals ) = 0; - virtual void StartGroup( const std::string& groupName ) = 0; - virtual void EndGroup( const std::string& groupName, const Totals& totals ) = 0; + virtual void StartGroup( std::string const& groupName ) = 0; + virtual void EndGroup( std::string const& groupName, Totals const& totals ) = 0; - virtual void StartTestCase( const TestCaseInfo& testInfo ) = 0; + virtual void StartTestCase( TestCaseInfo const& testInfo ) = 0; // TestCaseResult - virtual void EndTestCase( const TestCaseInfo& testInfo, const Totals& totals, const std::string& stdOut, const std::string& stdErr ) = 0; + virtual void EndTestCase( TestCaseInfo const& testInfo, Totals const& totals, std::string const& stdOut, std::string const& stdErr ) = 0; // SectionInfo - virtual void StartSection( const std::string& sectionName, const std::string& description ) = 0; + virtual void StartSection( std::string const& sectionName, std::string const& description ) = 0; // Section Result - virtual void EndSection( const std::string& sectionName, const Counts& assertions ) = 0; + virtual void EndSection( std::string const& sectionName, const Counts& assertions ) = 0; // - merge into SectionResult ? - virtual void NoAssertionsInSection( const std::string& sectionName ) = 0; - virtual void NoAssertionsInTestCase( const std::string& testName ) = 0; + virtual void NoAssertionsInSection( std::string const& sectionName ) = 0; + virtual void NoAssertionsInTestCase( std::string const& testName ) = 0; // - merge into SectionResult, TestCaseResult, GroupResult & TestRunResult virtual void Aborted() = 0; @@ -166,7 +183,7 @@ namespace Catch class LegacyReporterAdapter : public SharedImpl { public: - LegacyReporterAdapter( const Ptr& legacyReporter, const ReporterConfig& config ) + LegacyReporterAdapter( Ptr const& legacyReporter, ReporterConfig const& config ) : m_legacyReporter( legacyReporter ), m_config( config ) {} @@ -178,33 +195,33 @@ namespace Catch return prefs; } - virtual void testRunStarting( const std::string& ) { + virtual void testRunStarting( std::string const& ) { m_legacyReporter->StartTesting(); } - virtual void testGroupStarting( const std::string& groupName ) { + virtual void testGroupStarting( std::string const& groupName ) { m_legacyReporter->StartGroup( groupName ); } - virtual void testCaseStarting( const TestCaseInfo& testInfo ) { + virtual void testCaseStarting( TestCaseInfo const& testInfo ) { m_legacyReporter->StartTestCase( testInfo ); } - virtual void assertionStarting( const AssertionInfo& ) { + virtual void assertionStarting( AssertionInfo const& ) { // Not on legacy interface } - virtual void assertionEnding( const AssertionStats& assertionStats ) { + virtual void assertionEnding( AssertionStats const& assertionStats ) { m_legacyReporter->Result( assertionStats.assertionResult ); } - virtual void testCaseEnding( const TestCaseStats& testCaseStats ) { + virtual void testCaseEnding( TestCaseStats const& testCaseStats ) { if( testCaseStats.missingAssertions ) m_legacyReporter->NoAssertionsInTestCase( testCaseStats.testInfo.name ); m_legacyReporter->EndTestCase( testCaseStats.testInfo, testCaseStats.totals, testCaseStats.stdOut, testCaseStats.stdErr ); } - virtual void testGroupEnding( const TestGroupStats& testGroupStats ) { + virtual void testGroupEnding( TestGroupStats const& testGroupStats ) { if( testGroupStats.aborting ) m_legacyReporter->Aborted(); m_legacyReporter->EndGroup( testGroupStats.groupName, testGroupStats.totals ); } - virtual void testRunEnding( const TestRunStats& testRunStats ) { + virtual void testRunEnding( TestRunStats const& testRunStats ) { m_legacyReporter->EndTesting( testRunStats.totals ); } @@ -216,7 +233,7 @@ namespace Catch struct IReporterFactory { virtual ~IReporterFactory(); - virtual IReporter* create( const ReporterConfig& config ) const = 0; + virtual IReporter* create( ReporterConfig const& config ) const = 0; virtual std::string getDescription() const = 0; }; @@ -224,11 +241,11 @@ namespace Catch typedef std::map FactoryMap; virtual ~IReporterRegistry(); - virtual IReporter* create( const std::string& name, const ReporterConfig& config ) const = 0; + virtual IReporter* create( std::string const& name, ReporterConfig const& config ) const = 0; virtual const FactoryMap& getFactories() const = 0; }; - inline std::string trim( const std::string& str ) { + inline std::string trim( std::string const& str ) { std::string::size_type start = str.find_first_not_of( "\n\r\t " ); std::string::size_type end = str.find_last_not_of( "\n\r\t " ); diff --git a/include/internal/catch_running_test.hpp b/include/internal/catch_running_test.hpp index 7f89ab70..0b234c09 100644 --- a/include/internal/catch_running_test.hpp +++ b/include/internal/catch_running_test.hpp @@ -68,7 +68,7 @@ namespace Catch { if( m_runStatus == NothingRun ) m_runStatus = EncounteredASection; - SectionInfo* thisSection = m_currentSection->findOrAddSubSection( name, m_changed ); + RunningSection* thisSection = m_currentSection->findOrAddSubSection( name, m_changed ); if( !wasSectionSeen() && thisSection->shouldRun() ) { m_currentSection = thisSection; @@ -102,9 +102,9 @@ namespace Catch { private: const TestCase& m_info; RunStatus m_runStatus; - SectionInfo m_rootSection; - SectionInfo* m_currentSection; - SectionInfo* m_lastSectionToRun; + RunningSection m_rootSection; + RunningSection* m_currentSection; + RunningSection* m_lastSectionToRun; bool m_changed; }; } diff --git a/include/internal/catch_section_info.hpp b/include/internal/catch_section_info.hpp index 7f09a943..7a326dfd 100644 --- a/include/internal/catch_section_info.hpp +++ b/include/internal/catch_section_info.hpp @@ -15,17 +15,10 @@ namespace Catch { - struct ISectionInfo { - virtual ~ISectionInfo() {} - - virtual std::string getName() const = 0; - virtual const ISectionInfo* getParent() const = 0; - }; - - class SectionInfo : public ISectionInfo { + class RunningSection { public: - typedef std::vector SubSections; + typedef std::vector SubSections; enum State { Root, @@ -35,23 +28,23 @@ namespace Catch { TestedLeaf }; - SectionInfo( SectionInfo* parent, const std::string& name ) + RunningSection( RunningSection* parent, const std::string& name ) : m_state( Unknown ), m_parent( parent ), m_name( name ) {} - SectionInfo( const std::string& name ) + RunningSection( const std::string& name ) : m_state( Root ), m_parent( NULL ), m_name( name ) {} - ~SectionInfo() { + ~RunningSection() { deleteAll( m_subSections ); } - virtual std::string getName() const { + std::string getName() const { return m_name; } @@ -63,7 +56,7 @@ namespace Catch { return m_state == Branch; } - const SectionInfo* getParent() const { + const RunningSection* getParent() const { return m_parent; } @@ -80,17 +73,17 @@ namespace Catch { // Mutable methods: - SectionInfo* getParent() { + RunningSection* getParent() { return m_parent; } - SectionInfo* findOrAddSubSection( const std::string& name, bool& changed ) { + RunningSection* findOrAddSubSection( const std::string& name, bool& changed ) { for( SubSections::const_iterator it = m_subSections.begin(); it != m_subSections.end(); ++it) if( (*it)->getName() == name ) return *it; - SectionInfo* subSection = new SectionInfo( this, name ); + RunningSection* subSection = new RunningSection( this, name ); m_subSections.push_back( subSection ); m_state = Branch; changed = true; @@ -111,7 +104,7 @@ namespace Catch { private: State m_state; - SectionInfo* m_parent; + RunningSection* m_parent; std::string m_name; SubSections m_subSections; };