fixup! Report generator states for failed assertions

This commit is contained in:
Marcel Gotsch 2022-08-27 22:08:35 +02:00
parent 48a5431466
commit 33704524d8
5 changed files with 13 additions and 9 deletions

View File

@ -29,7 +29,7 @@ TEST_CASE("Generate random doubles across different ranges",
// This will take r1 by reference and r2 by value.
// Note that there are no advantages for doing so in this example,
// it is done only for expository purposes.
auto number = Catch::Generators::generate( "custom capture generator", "custom definition", CATCH_INTERNAL_LINEINFO,
auto number = Catch::Generators::generate( "custom capture generator", "custom arguments description", CATCH_INTERNAL_LINEINFO,
[&r1, r2]{
using namespace Catch::Generators;
return makeGenerators(take(50, random(std::get<0>(r1), std::get<1>(r2))));

View File

@ -211,7 +211,7 @@ namespace Detail {
// Note: The type after -> is weird, because VS2015 cannot parse
// the expression used in the typedef inside, when it is in
// return type. Yeah.
auto generate( StringRef generatorName, StringRef definition, SourceLineInfo const& lineInfo, L const& generatorExpression ) -> decltype(std::declval<decltype(generatorExpression())>().get()) {
auto generate( StringRef generatorName, StringRef argumentsDescription, SourceLineInfo const& lineInfo, L const& generatorExpression ) -> decltype(std::declval<decltype(generatorExpression())>().get()) {
using UnderlyingType = typename decltype(generatorExpression())::type;
IGeneratorTracker& tracker = acquireGeneratorTracker( generatorName, lineInfo );
@ -220,7 +220,7 @@ namespace Detail {
}
auto const& generator = static_cast<IGenerator<UnderlyingType> const&>( *tracker.getGenerator() );
getResultCapture().trackGeneratorState(GeneratorInfo(definition, lineInfo, generator.currentElementAsString()));
getResultCapture().trackGeneratorState(GeneratorInfo(generatorName, argumentsDescription, lineInfo, generator.currentElementAsString()));
return generator.get();
}

View File

@ -10,10 +10,12 @@
namespace Catch {
GeneratorInfo::GeneratorInfo( StringRef _definition,
GeneratorInfo::GeneratorInfo( StringRef _name,
StringRef _arguments,
SourceLineInfo const& _lineInfo,
StringRef _currentElement ):
definition( _definition ),
name( _name ),
arguments( _arguments ),
lineInfo( _lineInfo ),
currentElement( _currentElement ) {}

View File

@ -15,16 +15,18 @@
namespace Catch {
struct GeneratorInfo {
GeneratorInfo( StringRef _definition,
GeneratorInfo( StringRef _name,
StringRef _arguments,
SourceLineInfo const& _lineInfo,
StringRef currentElement );
StringRef definition;
StringRef name;
StringRef arguments;
SourceLineInfo lineInfo;
StringRef currentElement;
bool operator==( GeneratorInfo const& other ) const {
return definition == other.definition &&
return name == other.name && arguments == other.arguments &&
lineInfo == other.lineInfo &&
currentElement == other.currentElement;
}

View File

@ -164,7 +164,7 @@ private:
for ( auto const& info : stats.generatorInfos ) {
stream << TextFlow::Column( "line:" ).indent( 2 )
<< info.lineInfo.line << ": "
<< "GENERATE(" << info.definition << ")\n"
<< "GENERATE(" << info.arguments << ")\n"
<< TextFlow::Column( "value: " ).indent( 2 )
<< colourImpl->guardColour( Colour::GeneratorValue )
<< info.currentElement << '\n';