#pragma once #include #include #include "manifest_parser.hpp" #include #include struct RunContext; class TestRunnerMapObserver; struct TestMetadata; class TestRunner { public: enum class UpdateResults { NO, DEFAULT, PLATFORM, METRICS, REBASELINE }; TestRunner(Manifest, UpdateResults); bool run(TestMetadata&); void reset(); // Manifest const Manifest& getManifest() const; void doShuffle(uint32_t seed); private: bool runOperations(const std::string& key, TestMetadata&, RunContext&); bool runInjectedProbesBegin(TestMetadata&, RunContext&); bool runInjectedProbesEnd(TestMetadata&, RunContext&, mbgl::gfx::RenderingStats); bool checkQueryTestResults(mbgl::PremultipliedImage&& actualImage, std::vector&& features, TestMetadata&); bool checkRenderTestResults(mbgl::PremultipliedImage&& image, TestMetadata&); bool checkProbingResults(TestMetadata&); struct Impl { Impl(const TestMetadata&); ~Impl(); std::unique_ptr observer; mbgl::HeadlessFrontend frontend; mbgl::Map map; }; std::unordered_map> maps; Manifest manifest; UpdateResults updateResults; };