MCPcopy Create free account
hub / github.com/ObEngine/ObEngine / GeneratorTracker

Class GeneratorTracker

extlibs/catch/include/catch/catch.hpp:12042–12092  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12040
12041 namespace Generators {
12042 struct GeneratorTracker : TestCaseTracking::TrackerBase, IGeneratorTracker {
12043 GeneratorBasePtr m_generator;
12044
12045 GeneratorTracker( TestCaseTracking::NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent )
12046 : TrackerBase( nameAndLocation, ctx, parent )
12047 {}
12048 ~GeneratorTracker();
12049
12050 static GeneratorTracker& acquire( TrackerContext& ctx, TestCaseTracking::NameAndLocation const& nameAndLocation ) {
12051 std::shared_ptr<GeneratorTracker> tracker;
12052
12053 ITracker& currentTracker = ctx.currentTracker();
12054 if( TestCaseTracking::ITrackerPtr childTracker = currentTracker.findChild( nameAndLocation ) ) {
12055 assert( childTracker );
12056 assert( childTracker->isGeneratorTracker() );
12057 tracker = std::static_pointer_cast<GeneratorTracker>( childTracker );
12058 }
12059 else {
12060 tracker = std::make_shared<GeneratorTracker>( nameAndLocation, ctx, &currentTracker );
12061 currentTracker.addChild( tracker );
12062 }
12063
12064 if( !ctx.completedCycle() && !tracker->isComplete() ) {
12065 tracker->open();
12066 }
12067
12068 return *tracker;
12069 }
12070
12071 // TrackerBase interface
12072 bool isGeneratorTracker() const override { return true; }
12073 auto hasGenerator() const -> bool override {
12074 return !!m_generator;
12075 }
12076 void close() override {
12077 TrackerBase::close();
12078 // Generator interface only finds out if it has another item on atual move
12079 if (m_runState == CompletedSuccessfully && m_generator->next()) {
12080 m_children.clear();
12081 m_runState = Executing;
12082 }
12083 }
12084
12085 // IGeneratorTracker interface
12086 auto getGenerator() const -> GeneratorBasePtr const& override {
12087 return m_generator;
12088 }
12089 void setGenerator( GeneratorBasePtr&& generator ) override {
12090 m_generator = std::move( generator );
12091 }
12092 };
12093 GeneratorTracker::~GeneratorTracker() {}
12094 }
12095

Callers

nothing calls this directly

Calls 6

findChildMethod · 0.80
completedCycleMethod · 0.80
isCompleteMethod · 0.80
isGeneratorTrackerMethod · 0.45
addChildMethod · 0.45
openMethod · 0.45

Tested by

no test coverage detected