| 10015 | |
| 10016 | namespace Generators { |
| 10017 | struct GeneratorTracker : TestCaseTracking::TrackerBase, IGeneratorTracker { |
| 10018 | GeneratorBasePtr m_generator; |
| 10019 | |
| 10020 | GeneratorTracker( TestCaseTracking::NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ) |
| 10021 | : TrackerBase( nameAndLocation, ctx, parent ) |
| 10022 | {} |
| 10023 | ~GeneratorTracker(); |
| 10024 | |
| 10025 | static GeneratorTracker& acquire( TrackerContext& ctx, TestCaseTracking::NameAndLocation const& nameAndLocation ) { |
| 10026 | std::shared_ptr<GeneratorTracker> tracker; |
| 10027 | |
| 10028 | ITracker& currentTracker = ctx.currentTracker(); |
| 10029 | if( TestCaseTracking::ITrackerPtr childTracker = currentTracker.findChild( nameAndLocation ) ) { |
| 10030 | assert( childTracker ); |
| 10031 | assert( childTracker->isGeneratorTracker() ); |
| 10032 | tracker = std::static_pointer_cast<GeneratorTracker>( childTracker ); |
| 10033 | } |
| 10034 | else { |
| 10035 | tracker = std::make_shared<GeneratorTracker>( nameAndLocation, ctx, ¤tTracker ); |
| 10036 | currentTracker.addChild( tracker ); |
| 10037 | } |
| 10038 | |
| 10039 | if( !ctx.completedCycle() && !tracker->isComplete() ) { |
| 10040 | tracker->open(); |
| 10041 | } |
| 10042 | |
| 10043 | return *tracker; |
| 10044 | } |
| 10045 | |
| 10046 | // TrackerBase interface |
| 10047 | bool isGeneratorTracker() const override { return true; } |
| 10048 | auto hasGenerator() const -> bool override { |
| 10049 | return !!m_generator; |
| 10050 | } |
| 10051 | void close() override { |
| 10052 | TrackerBase::close(); |
| 10053 | // Generator interface only finds out if it has another item on atual move |
| 10054 | if (m_runState == CompletedSuccessfully && m_generator->next()) { |
| 10055 | m_children.clear(); |
| 10056 | m_runState = Executing; |
| 10057 | } |
| 10058 | } |
| 10059 | |
| 10060 | // IGeneratorTracker interface |
| 10061 | auto getGenerator() const -> GeneratorBasePtr const& override { |
| 10062 | return m_generator; |
| 10063 | } |
| 10064 | void setGenerator( GeneratorBasePtr&& generator ) override { |
| 10065 | m_generator = std::move( generator ); |
| 10066 | } |
| 10067 | }; |
| 10068 | GeneratorTracker::~GeneratorTracker() {} |
| 10069 | } |
| 10070 |
nothing calls this directly
no test coverage detected