| 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, ¤tTracker ); |
| 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 |
nothing calls this directly
no test coverage detected