mirror of
https://github.com/catchorg/Catch2.git
synced 2025-12-15 22:52:12 +01:00
Completed NoAssertions warning implementation
This commit is contained in:
@@ -149,10 +149,13 @@ namespace Catch {
|
||||
return m_data.allowThrows;
|
||||
}
|
||||
|
||||
const ConfigData& data() const {
|
||||
return m_data;
|
||||
}
|
||||
ConfigData& data() {
|
||||
return m_data;
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
ConfigData m_data;
|
||||
|
||||
|
||||
@@ -47,8 +47,10 @@ namespace Catch
|
||||
virtual void EndTesting( const Totals& totals ) = 0;
|
||||
virtual void StartGroup( const std::string& groupName ) = 0;
|
||||
virtual void EndGroup( const std::string& groupName, const Totals& totals ) = 0;
|
||||
virtual void StartSection( const std::string& sectionName, const std::string& description ) = 0;
|
||||
virtual void EndSection( const std::string& sectionName, const Counts& assertions ) = 0;
|
||||
virtual void StartSection( const std::string& sectionName, const std::string& description ) = 0;
|
||||
virtual void NoAssertionsInSection( const std::string& sectionName ) = 0;
|
||||
virtual void NoAssertionsInTestCase( const std::string& testName ) = 0;
|
||||
virtual void EndSection( const std::string& sectionName, const Counts& assertions ) = 0;
|
||||
virtual void StartTestCase( const TestCaseInfo& testInfo ) = 0;
|
||||
virtual void Aborted() = 0;
|
||||
virtual void EndTestCase( const TestCaseInfo& testInfo, const Totals& totals, const std::string& stdOut, const std::string& stdErr ) = 0;
|
||||
|
||||
@@ -190,8 +190,16 @@ namespace Catch {
|
||||
}
|
||||
|
||||
virtual void sectionEnded( const std::string& name, const Counts& prevAssertions ) {
|
||||
Counts assertions = m_totals.assertions - prevAssertions;
|
||||
if( assertions.total() == 0 &&
|
||||
( m_config.data().warnings & ConfigData::WarnAbout::NoAssertions ) &&
|
||||
!m_runningTest->isBranchSection() ) {
|
||||
m_reporter->NoAssertionsInSection( name );
|
||||
m_totals.assertions.failed++;
|
||||
assertions.failed++;
|
||||
}
|
||||
m_runningTest->endSection( name );
|
||||
m_reporter->EndSection( name, m_totals.assertions - prevAssertions );
|
||||
m_reporter->EndSection( name, assertions );
|
||||
}
|
||||
|
||||
virtual void pushScopedInfo( ScopedInfo* scopedInfo ) {
|
||||
@@ -246,6 +254,7 @@ namespace Catch {
|
||||
void runCurrentTest( std::string& redirectedCout, std::string& redirectedCerr ) {
|
||||
try {
|
||||
m_runningTest->reset();
|
||||
Counts prevAssertions = m_totals.assertions;
|
||||
if( m_reporter->shouldRedirectStdout() ) {
|
||||
StreamRedirect coutRedir( std::cout, redirectedCout );
|
||||
StreamRedirect cerrRedir( std::cerr, redirectedCerr );
|
||||
@@ -254,6 +263,13 @@ namespace Catch {
|
||||
else {
|
||||
m_runningTest->getTestCaseInfo().invoke();
|
||||
}
|
||||
Counts assertions = m_totals.assertions - prevAssertions;
|
||||
if( assertions.total() == 0 &&
|
||||
( m_config.data().warnings & ConfigData::WarnAbout::NoAssertions ) &&
|
||||
!m_runningTest->hasSections() ) {
|
||||
m_totals.assertions.failed++;
|
||||
m_reporter->NoAssertionsInTestCase( m_runningTest->getTestCaseInfo().getName() );
|
||||
}
|
||||
m_runningTest->ranToCompletion();
|
||||
}
|
||||
catch( TestFailureException& ) {
|
||||
|
||||
@@ -36,6 +36,17 @@ namespace Catch {
|
||||
m_runStatus == RanToCompletionWithSections;
|
||||
}
|
||||
|
||||
bool isBranchSection() const {
|
||||
return m_currentSection &&
|
||||
m_currentSection->isBranch();
|
||||
}
|
||||
|
||||
bool hasSections() const {
|
||||
return m_runStatus == RanAtLeastOneSection ||
|
||||
m_runStatus == RanToCompletionWithSections ||
|
||||
m_runStatus == EncounteredASection;
|
||||
}
|
||||
|
||||
void reset() {
|
||||
m_runStatus = NothingRun;
|
||||
m_changed = false;
|
||||
|
||||
@@ -52,6 +52,10 @@ namespace Catch {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool isBranch() const {
|
||||
return m_status == Branch;
|
||||
}
|
||||
|
||||
void ranToCompletion() {
|
||||
if( m_status == Branch && !hasUntestedSections() )
|
||||
m_status = TestedBranch;
|
||||
|
||||
Reference in New Issue
Block a user