summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/map/map.test.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/test/map/map.test.cpp b/test/map/map.test.cpp
index a62bd10b57..71267e9a60 100644
--- a/test/map/map.test.cpp
+++ b/test/map/map.test.cpp
@@ -13,6 +13,7 @@
#include <mbgl/util/image.hpp>
#include <mbgl/util/io.hpp>
#include <mbgl/util/run_loop.hpp>
+#include <mbgl/util/async_task.hpp>
#include <mbgl/style/layers/background_layer.hpp>
#include <mbgl/util/color.hpp>
@@ -442,3 +443,61 @@ TEST(Map, DontLoadUnneededTiles) {
EXPECT_EQ(referenceTiles[z], tiles) << "zoom level " << z;
}
}
+
+
+class MockBackend : public HeadlessBackend {
+public:
+ std::function<void()> callback;
+ void invalidate() override {
+ if (callback) {
+ callback();
+ }
+ }
+};
+
+TEST(Map, ContinuousRendering) {
+ util::RunLoop runLoop;
+ MockBackend backend;
+ OffscreenView view { backend.getContext() };
+ ThreadPool threadPool { 4 };
+
+#ifdef MBGL_ASSET_ZIP
+ // Regenerate with `cd test/fixtures/api/ && zip -r assets.zip assets/`
+ DefaultFileSource fileSource(":memory:", "test/fixtures/api/assets.zip");
+#else
+ DefaultFileSource fileSource(":memory:", "test/fixtures/api/assets");
+#endif
+
+ Map map(backend, view.size, 1, fileSource, threadPool, MapMode::Continuous);
+
+ using namespace std::chrono_literals;
+
+ util::Timer emergencyShutoff;
+ emergencyShutoff.start(10s, 0s, [&] {
+ util::RunLoop::Get()->stop();
+ FAIL() << "Did not stop rendering";
+ });
+
+ util::Timer timer;
+ util::AsyncTask render{[&] {
+ if (map.isFullyLoaded()) {
+ // Abort the test after 1 second after the map loading fully. Note that a "fully loaded
+ // map" doesn't mean that we won't render anymore: we could still render fade in/fade
+ // out or other animations.
+ // If we are continuing to render indefinitely, the emergency shutoff above will trigger
+ // and the test will fail since the regular time will be constantly reset.
+ timer.start(1s, 0s, [&] {
+ util::RunLoop::Get()->stop();
+ });
+ }
+
+ map.render(view);
+ }};
+
+ backend.callback = [&] {
+ render.send();
+ };
+
+ map.setStyleJSON(util::read_file("test/fixtures/api/water.json"));
+ util::RunLoop::Get()->run();
+}