#pragma once #include #include #include #include "manifest_parser.hpp" #include #include class TestRunnerMapObserver; struct TestMetadata; class TestRunnerMapObserver : public mbgl::MapObserver { public: TestRunnerMapObserver() = default; void onDidFailLoadingMap(mbgl::MapLoadError, const std::string&) override { mapLoadFailure = true; } void onDidFinishRenderingMap(RenderMode mode) override final { if (!finishRenderingMap) finishRenderingMap = mode == RenderMode::Full; } void onDidBecomeIdle() override final { idle = true; } void reset() { mapLoadFailure = false; finishRenderingMap = false; idle = false; } bool mapLoadFailure; bool finishRenderingMap; bool idle; }; class TestRunner { public: enum class UpdateResults { NO, DEFAULT, PLATFORM, METRICS, REBASELINE }; TestRunner(Manifest, UpdateResults); void run(TestMetadata&); void reset(); // Manifest const Manifest& getManifest() const; void doShuffle(uint32_t seed); private: mbgl::HeadlessFrontend::RenderResult runTest(TestMetadata& metadata, TestContext& ctx); void checkQueryTestResults(mbgl::PremultipliedImage&& actualImage, std::vector&& features, TestMetadata&); void checkRenderTestResults(mbgl::PremultipliedImage&& image, TestMetadata&); void checkProbingResults(TestMetadata&); void appendLabelCutOffResults(TestMetadata&, const std::string&, const std::string&); void registerProxyFileSource(); struct Impl { Impl(const TestMetadata&, const mbgl::ResourceOptions&); ~Impl(); std::unique_ptr observer; mbgl::HeadlessFrontend frontend; std::shared_ptr fileSource; mbgl::Map map; }; std::unordered_map> maps; Manifest manifest; UpdateResults updateResults; };