88#ifndef CATCH_GENERATORS_HPP_INCLUDED
99#define CATCH_GENERATORS_HPP_INCLUDED
1010
11+ #include " catch2/interfaces/catch_interfaces_capture.hpp"
1112#include < catch2/catch_tostring.hpp>
1213#include < catch2/interfaces/catch_interfaces_generatortracker.hpp>
14+ #include < catch2/internal/catch_generator_info.hpp>
1315#include < catch2/internal/catch_source_line_info.hpp>
1416#include < catch2/internal/catch_stringref.hpp>
1517#include < catch2/internal/catch_move_and_forward.hpp>
@@ -210,7 +212,7 @@ namespace Detail {
210212 // Note: The type after -> is weird, because VS2015 cannot parse
211213 // the expression used in the typedef inside, when it is in
212214 // return type. Yeah.
213- auto generate ( StringRef generatorName, SourceLineInfo const & lineInfo, L const & generatorExpression ) -> decltype(std::declval<decltype (generatorExpression())>().get()) {
215+ auto generate ( StringRef generatorName, StringRef definition, SourceLineInfo const & lineInfo, L const & generatorExpression ) -> decltype(std::declval<decltype (generatorExpression())>().get()) {
214216 using UnderlyingType = typename decltype (generatorExpression ())::type;
215217
216218 IGeneratorTracker& tracker = acquireGeneratorTracker ( generatorName, lineInfo );
@@ -219,6 +221,7 @@ namespace Detail {
219221 }
220222
221223 auto const & generator = static_cast <IGenerator<UnderlyingType> const &>( *tracker.getGenerator () );
224+ getResultCapture ().trackGeneratorState (GeneratorInfo (definition, lineInfo, generator.currentElementAsString ()));
222225 return generator.get ();
223226 }
224227
@@ -227,14 +230,17 @@ namespace Detail {
227230
228231#define GENERATE ( ... ) \
229232 Catch::Generators::generate ( INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_UNIQUE_NAME(generator)), \
233+ INTERNAL_CATCH_STRINGIZE( __VA_ARGS__ ), \
230234 CATCH_INTERNAL_LINEINFO, \
231235 [ ]{ using namespace Catch ::Generators; return makeGenerators ( __VA_ARGS__ ); } ) // NOLINT(google-build-using-namespace)
232236#define GENERATE_COPY ( ... ) \
233237 Catch::Generators::generate ( INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_UNIQUE_NAME(generator)), \
238+ INTERNAL_CATCH_STRINGIZE( __VA_ARGS__ ), \
234239 CATCH_INTERNAL_LINEINFO, \
235240 [=]{ using namespace Catch ::Generators; return makeGenerators ( __VA_ARGS__ ); } ) // NOLINT(google-build-using-namespace)
236241#define GENERATE_REF ( ... ) \
237242 Catch::Generators::generate ( INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_UNIQUE_NAME(generator)), \
243+ INTERNAL_CATCH_STRINGIZE( __VA_ARGS__ ), \
238244 CATCH_INTERNAL_LINEINFO, \
239245 [&]{ using namespace Catch ::Generators; return makeGenerators ( __VA_ARGS__ ); } ) // NOLINT(google-build-using-namespace)
240246
0 commit comments