mirror of
https://github.com/catchorg/Catch2.git
synced 2024-12-23 03:43:28 +01:00
Added LazyStat wrapper
This commit is contained in:
parent
29ccaa67ad
commit
1f519dd856
@ -60,6 +60,21 @@ namespace Catch
|
||||
Node* parent;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct LazyStat : Option<T> {
|
||||
LazyStat() : used( false ) {}
|
||||
LazyStat& operator=( T const& _value ) {
|
||||
Option<T>::operator=( _value );
|
||||
used = false;
|
||||
return *this;
|
||||
}
|
||||
void reset() {
|
||||
Option<T>::reset();
|
||||
used = false;
|
||||
}
|
||||
bool used;
|
||||
};
|
||||
|
||||
struct TestRunInfo {
|
||||
TestRunInfo( std::string const& _name ) : name( _name ) {}
|
||||
std::string name;
|
||||
@ -235,14 +250,14 @@ namespace Catch
|
||||
virtual void noMatchingTestCases( std::string const& ) {}
|
||||
|
||||
virtual void testRunStarting( TestRunInfo const& _testRunInfo ) {
|
||||
testRunInfo = _testRunInfo;
|
||||
currentTestRunInfo = _testRunInfo;
|
||||
}
|
||||
virtual void testGroupStarting( GroupInfo const& _groupInfo ) {
|
||||
unusedGroupInfo = _groupInfo;
|
||||
currentGroupInfo = _groupInfo;
|
||||
}
|
||||
|
||||
virtual void testCaseStarting( TestCaseInfo const& _testInfo ) {
|
||||
unusedTestCaseInfo = _testInfo;
|
||||
currentTestCaseInfo = _testInfo;
|
||||
}
|
||||
virtual void sectionStarting( SectionInfo const& _sectionInfo ) {
|
||||
Ptr<Node<SectionInfo> > sectionInfo = new Node<SectionInfo>( _sectionInfo );
|
||||
@ -253,22 +268,22 @@ namespace Catch
|
||||
m_sectionStack.pop_back();
|
||||
}
|
||||
virtual void testCaseEnded( TestCaseStats const& /* _testCaseStats */ ) {
|
||||
unusedTestCaseInfo.reset();
|
||||
currentTestCaseInfo.reset();
|
||||
assert( m_sectionStack.empty() );
|
||||
}
|
||||
virtual void testGroupEnded( TestGroupStats const& /* _testGroupStats */ ) {
|
||||
unusedGroupInfo.reset();
|
||||
currentGroupInfo.reset();
|
||||
}
|
||||
virtual void testRunEnded( TestRunStats const& /* _testRunStats */ ) {
|
||||
unusedTestCaseInfo.reset();
|
||||
unusedGroupInfo.reset();
|
||||
testRunInfo.reset();
|
||||
currentTestCaseInfo.reset();
|
||||
currentGroupInfo.reset();
|
||||
currentTestRunInfo.reset();
|
||||
}
|
||||
|
||||
Ptr<IConfig> m_config;
|
||||
Option<TestRunInfo> testRunInfo;
|
||||
Option<GroupInfo> unusedGroupInfo;
|
||||
Option<TestCaseInfo> unusedTestCaseInfo;
|
||||
LazyStat<TestRunInfo> currentTestRunInfo;
|
||||
LazyStat<GroupInfo> currentGroupInfo;
|
||||
LazyStat<TestCaseInfo> currentTestCaseInfo;
|
||||
std::ostream& stream;
|
||||
|
||||
std::vector<SectionInfoNode> m_sectionStack;
|
||||
|
@ -79,7 +79,7 @@ namespace Catch {
|
||||
m_headerPrinted = false;
|
||||
}
|
||||
virtual void testGroupEnded( TestGroupStats const& _testGroupStats ) {
|
||||
if( !unusedGroupInfo ) {
|
||||
if( currentGroupInfo.used ) {
|
||||
printSummaryDivider();
|
||||
stream << "Summary for group '" << _testGroupStats.groupInfo.name << "':\n";
|
||||
printTotals( _testGroupStats.totals );
|
||||
@ -229,9 +229,9 @@ namespace Catch {
|
||||
|
||||
void lazyPrint() {
|
||||
|
||||
if( testRunInfo )
|
||||
if( !currentTestRunInfo.used )
|
||||
lazyPrintRunInfo();
|
||||
if( unusedGroupInfo )
|
||||
if( !currentGroupInfo.used )
|
||||
lazyPrintGroupInfo();
|
||||
|
||||
if( !m_headerPrinted ) {
|
||||
@ -243,7 +243,7 @@ namespace Catch {
|
||||
void lazyPrintRunInfo() {
|
||||
stream << "\n" << getTildes() << "\n";
|
||||
Colour colour( Colour::SecondaryText );
|
||||
stream << testRunInfo->name
|
||||
stream << currentTestRunInfo->name
|
||||
<< " is a Catch v" << libraryVersion.majorVersion << "."
|
||||
<< libraryVersion.minorVersion << " b"
|
||||
<< libraryVersion.buildNumber;
|
||||
@ -252,17 +252,17 @@ namespace Catch {
|
||||
stream << " host application.\n"
|
||||
<< "Run with -? for options\n\n";
|
||||
|
||||
testRunInfo.reset();
|
||||
currentTestRunInfo.used = true;
|
||||
}
|
||||
void lazyPrintGroupInfo() {
|
||||
if( !unusedGroupInfo->name.empty() && unusedGroupInfo->groupsCounts > 1 ) {
|
||||
printClosedHeader( "Group: " + unusedGroupInfo->name );
|
||||
unusedGroupInfo.reset();
|
||||
if( !currentGroupInfo->name.empty() && currentGroupInfo->groupsCounts > 1 ) {
|
||||
printClosedHeader( "Group: " + currentGroupInfo->name );
|
||||
currentGroupInfo.used = true;
|
||||
}
|
||||
}
|
||||
void printTestCaseAndSectionHeader() {
|
||||
assert( !m_sectionStack.empty() );
|
||||
printOpenHeader( unusedTestCaseInfo->name );
|
||||
printOpenHeader( currentTestCaseInfo->name );
|
||||
|
||||
if( m_sectionStack.size() > 1 ) {
|
||||
Colour colourGuard( Colour::Headers );
|
||||
|
Loading…
Reference in New Issue
Block a user