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