Avoid superfluous re-run when specific section is selected

Fixes #1394
This commit is contained in:
Lotte Steenbrink 2019-01-07 16:40:23 +01:00 committed by Martin Hořeňovský
parent c1720d0c42
commit d084162b2f
5 changed files with 57 additions and 0 deletions

View File

@ -0,0 +1,35 @@
// Provide a basis to check whether section selection via the `-c` command line
// option works as intended.
#define CATCH_CONFIG_MAIN
#include <catch2/catch.hpp>
bool previouslyRun = false;
bool previouslyRunNested = false;
TEST_CASE( "#1394" ) {
// -- Don't re-run after specified section is done
REQUIRE(previouslyRun == false);
SECTION( "RunSection" ) {
previouslyRun = true;
}
SECTION( "SkipSection" ) {
// cause an error if this section is called because it shouldn't be
REQUIRE(1 == 0);
}
}
TEST_CASE( "#1394 nested" ) {
REQUIRE(previouslyRunNested == false);
SECTION( "NestedRunSection" ) {
SECTION( "s1" ) {
previouslyRunNested = true;
}
}
SECTION( "NestedSkipSection" ) {
// cause an error if this section is called because it shouldn't be
REQUIRE(1 == 0);
}
}

View File

@ -21,6 +21,7 @@ set( REPORTER_HEADER_DIR ${CATCH_DIR}/include/reporters )
set( SOURCES_SINGLE_FILE set( SOURCES_SINGLE_FILE
010-TestCase.cpp 010-TestCase.cpp
231-Cfg-OutputStreams.cpp 231-Cfg-OutputStreams.cpp
300-FilteredSection.cpp
) )
# multiple-file modules: # multiple-file modules:

8
examples/runFilteredSection.sh Executable file
View File

@ -0,0 +1,8 @@
#!/bin/bash
# make sure single-file header was regenerated
../scripts/generateSingleHeader.py
# run Test case with specified section to trigger bug #1394
../cmake-build-debug/examples/300-FilteredSection \#1394 -c RunSection
../cmake-build-debug/examples/300-FilteredSection \#1394\ nested -c NestedRunSection -c s1

View File

@ -190,6 +190,17 @@ namespace TestCaseTracking {
} }
} }
bool SectionTracker::isComplete() const {
bool complete = true;
if ((m_filters.empty() || m_filters[0] == "") ||
std::find(m_filters.begin(), m_filters.end(),
m_nameAndLocation.name) != m_filters.end())
complete = TrackerBase::isComplete();
return complete;
}
bool SectionTracker::isSectionTracker() const { return true; } bool SectionTracker::isSectionTracker() const { return true; }
SectionTracker& SectionTracker::acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation ) { SectionTracker& SectionTracker::acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation ) {

View File

@ -140,6 +140,8 @@ namespace TestCaseTracking {
bool isSectionTracker() const override; bool isSectionTracker() const override;
bool isComplete() const override;
static SectionTracker& acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation ); static SectionTracker& acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation );
void tryOpen(); void tryOpen();