mirror of
https://github.com/catchorg/Catch2.git
synced 2025-05-25 22:19:25 +00:00
Added [!mayfail] tag to indicate test case that can fail without failing the suite.
Overhauled the summary report (including the expected failure count)
This commit is contained in:
parent
05e42cb65c
commit
9c1f9a8f9a
15 changed files with 390 additions and 238 deletions
|
@ -15,14 +15,22 @@
|
|||
|
||||
namespace Catch {
|
||||
|
||||
inline bool isSpecialTag( std::string const& tag ) {
|
||||
return tag == "." ||
|
||||
tag == "hide" ||
|
||||
tag == "!hide" ||
|
||||
tag == "!throws";
|
||||
inline TestCaseInfo::SpecialProperties parseSpecialTag( std::string const& tag ) {
|
||||
if( tag == "." ||
|
||||
tag == "hide" ||
|
||||
tag == "!hide" )
|
||||
return TestCaseInfo::IsHidden;
|
||||
else if( tag == "!throws" )
|
||||
return TestCaseInfo::Throws;
|
||||
else if( tag == "!shouldfail" )
|
||||
return TestCaseInfo::ShouldFail;
|
||||
else if( tag == "!mayfail" )
|
||||
return TestCaseInfo::MayFail;
|
||||
else
|
||||
return TestCaseInfo::None;
|
||||
}
|
||||
inline bool isReservedTag( std::string const& tag ) {
|
||||
return !isSpecialTag( tag ) && tag.size() > 0 && !isalnum( tag[0] );
|
||||
return parseSpecialTag( tag ) == TestCaseInfo::None && tag.size() > 0 && !isalnum( tag[0] );
|
||||
}
|
||||
inline void enforceNotReservedTag( std::string const& tag, SourceLineInfo const& _lineInfo ) {
|
||||
if( isReservedTag( tag ) ) {
|
||||
|
@ -80,7 +88,7 @@ namespace Catch {
|
|||
tags.insert( "." );
|
||||
}
|
||||
|
||||
TestCaseInfo info( _name, _className, desc, tags, isHidden, _lineInfo );
|
||||
TestCaseInfo info( _name, _className, desc, tags, _lineInfo );
|
||||
return TestCase( _testCase, info );
|
||||
}
|
||||
|
||||
|
@ -88,22 +96,20 @@ namespace Catch {
|
|||
std::string const& _className,
|
||||
std::string const& _description,
|
||||
std::set<std::string> const& _tags,
|
||||
bool _isHidden,
|
||||
SourceLineInfo const& _lineInfo )
|
||||
: name( _name ),
|
||||
className( _className ),
|
||||
description( _description ),
|
||||
tags( _tags ),
|
||||
lineInfo( _lineInfo ),
|
||||
isHidden( _isHidden ),
|
||||
throws( false )
|
||||
properties( None )
|
||||
{
|
||||
std::ostringstream oss;
|
||||
for( std::set<std::string>::const_iterator it = _tags.begin(), itEnd = _tags.end(); it != itEnd; ++it ) {
|
||||
oss << "[" << *it << "]";
|
||||
if( *it == "!throws" )
|
||||
throws = true;
|
||||
lcaseTags.insert( toLower( *it ) );
|
||||
std::string lcaseTag = toLower( *it );
|
||||
properties = (SpecialProperties)( properties | parseSpecialTag( lcaseTag ) );
|
||||
lcaseTags.insert( lcaseTag );
|
||||
}
|
||||
tagsAsString = oss.str();
|
||||
}
|
||||
|
@ -116,10 +122,23 @@ namespace Catch {
|
|||
lcaseTags( other.lcaseTags ),
|
||||
tagsAsString( other.tagsAsString ),
|
||||
lineInfo( other.lineInfo ),
|
||||
isHidden( other.isHidden ),
|
||||
throws( other.throws )
|
||||
properties( other.properties )
|
||||
{}
|
||||
|
||||
bool TestCaseInfo::isHidden() const {
|
||||
return ( properties & IsHidden ) != 0;
|
||||
}
|
||||
bool TestCaseInfo::throws() const {
|
||||
return ( properties & Throws ) != 0;
|
||||
}
|
||||
bool TestCaseInfo::okToFail() const {
|
||||
return ( properties & (ShouldFail | MayFail ) ) != 0;
|
||||
}
|
||||
bool TestCaseInfo::expectedToFail() const {
|
||||
return ( properties & (ShouldFail ) ) != 0;
|
||||
}
|
||||
|
||||
|
||||
TestCase::TestCase( ITestCase* testCase, TestCaseInfo const& info ) : TestCaseInfo( info ), test( testCase ) {}
|
||||
|
||||
TestCase::TestCase( TestCase const& other )
|
||||
|
@ -141,8 +160,7 @@ namespace Catch {
|
|||
tags.swap( other.tags );
|
||||
lcaseTags.swap( other.lcaseTags );
|
||||
tagsAsString.swap( other.tagsAsString );
|
||||
std::swap( TestCaseInfo::isHidden, static_cast<TestCaseInfo&>( other ).isHidden );
|
||||
std::swap( TestCaseInfo::throws, static_cast<TestCaseInfo&>( other ).throws );
|
||||
std::swap( TestCaseInfo::properties, static_cast<TestCaseInfo&>( other ).properties );
|
||||
std::swap( lineInfo, other.lineInfo );
|
||||
}
|
||||
|
||||
|
@ -150,13 +168,6 @@ namespace Catch {
|
|||
test->invoke();
|
||||
}
|
||||
|
||||
bool TestCase::isHidden() const {
|
||||
return TestCaseInfo::isHidden;
|
||||
}
|
||||
bool TestCase::throws() const {
|
||||
return TestCaseInfo::throws;
|
||||
}
|
||||
|
||||
bool TestCase::operator == ( TestCase const& other ) const {
|
||||
return test.get() == other.test.get() &&
|
||||
name == other.name &&
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue