Renamed SectionInfo -> RunningSection.

Added SectionInfo (that now corresponds to TestCaseInfo) and SectionStats
Switched some const T&'s to T const&'s
This commit is contained in:
Phil Nash 2012-11-29 20:31:17 +00:00
parent 3d6be037e9
commit 95df676a27
3 changed files with 76 additions and 66 deletions

View File

@ -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<IStreamingReporter>
{
public:
LegacyReporterAdapter( const Ptr<IReporter>& legacyReporter, const ReporterConfig& config )
LegacyReporterAdapter( Ptr<IReporter> 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<std::string, IReporterFactory*> 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 " );

View File

@ -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;
};
}

View File

@ -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<SectionInfo*> SubSections;
typedef std::vector<RunningSection*> 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;
};