From 9c0f2044c7a123de544b8549b1ea6dd971720ceb Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Tue, 27 Feb 2018 17:27:36 +0200 Subject: [test] Update Map.PrefetchTiles --- cmake/test-files.cmake | 1 + test/fixtures/map/prefetch/expected.png | Bin 2198 -> 0 bytes test/fixtures/map/prefetch/tile.png | Bin 0 -> 659 bytes test/fixtures/map/prefetch/tile_green.png | Bin 659 -> 0 bytes test/fixtures/map/prefetch/tile_red.png | Bin 659 -> 0 bytes test/map/map.test.cpp | 46 +++------------------------- test/map/prefetch.test.cpp | 40 ++++++++++++------------ test/src/mbgl/test/stub_map_observer.hpp | 49 ++++++++++++++++++++++++++++++ 8 files changed, 75 insertions(+), 61 deletions(-) delete mode 100644 test/fixtures/map/prefetch/expected.png create mode 100644 test/fixtures/map/prefetch/tile.png delete mode 100644 test/fixtures/map/prefetch/tile_green.png delete mode 100644 test/fixtures/map/prefetch/tile_red.png create mode 100644 test/src/mbgl/test/stub_map_observer.hpp diff --git a/cmake/test-files.cmake b/cmake/test-files.cmake index 790198a55e..2aadfa8a7f 100644 --- a/cmake/test-files.cmake +++ b/cmake/test-files.cmake @@ -104,6 +104,7 @@ set(MBGL_TEST_FILES test/src/mbgl/test/stub_file_source.hpp test/src/mbgl/test/stub_geometry_tile_feature.hpp test/src/mbgl/test/stub_layer_observer.hpp + test/src/mbgl/test/stub_map_observer.hpp test/src/mbgl/test/stub_render_source_observer.hpp test/src/mbgl/test/stub_style_observer.hpp test/src/mbgl/test/stub_tile_observer.hpp diff --git a/test/fixtures/map/prefetch/expected.png b/test/fixtures/map/prefetch/expected.png deleted file mode 100644 index e1111b37f7..0000000000 Binary files a/test/fixtures/map/prefetch/expected.png and /dev/null differ diff --git a/test/fixtures/map/prefetch/tile.png b/test/fixtures/map/prefetch/tile.png new file mode 100644 index 0000000000..553cd10cd1 Binary files /dev/null and b/test/fixtures/map/prefetch/tile.png differ diff --git a/test/fixtures/map/prefetch/tile_green.png b/test/fixtures/map/prefetch/tile_green.png deleted file mode 100644 index 553cd10cd1..0000000000 Binary files a/test/fixtures/map/prefetch/tile_green.png and /dev/null differ diff --git a/test/fixtures/map/prefetch/tile_red.png b/test/fixtures/map/prefetch/tile_red.png deleted file mode 100644 index 5fa561fb92..0000000000 Binary files a/test/fixtures/map/prefetch/tile_red.png and /dev/null differ diff --git a/test/map/map.test.cpp b/test/map/map.test.cpp index 30c076ad89..f95e26fd82 100644 --- a/test/map/map.test.cpp +++ b/test/map/map.test.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -23,45 +24,6 @@ using namespace mbgl; using namespace mbgl::style; using namespace std::literals::string_literals; -class StubMapObserver : public MapObserver { -public: - void onWillStartLoadingMap() final { - if (onWillStartLoadingMapCallback) { - onWillStartLoadingMapCallback(); - } - } - - void onDidFinishLoadingMap() final { - if (onDidFinishLoadingMapCallback) { - onDidFinishLoadingMapCallback(); - } - } - - void onDidFailLoadingMap(std::exception_ptr) final { - if (didFailLoadingMapCallback) { - didFailLoadingMapCallback(); - } - } - - void onDidFinishLoadingStyle() final { - if (didFinishLoadingStyleCallback) { - didFinishLoadingStyleCallback(); - } - } - - void onDidFinishRenderingFrame(RenderMode mode) final { - if (didFinishRenderingFrame) { - didFinishRenderingFrame(mode); - } - } - - std::function onWillStartLoadingMapCallback; - std::function onDidFinishLoadingMapCallback; - std::function didFailLoadingMapCallback; - std::function didFinishLoadingStyleCallback; - std::function didFinishRenderingFrame; -}; - template class MapTest { public: @@ -371,7 +333,7 @@ TEST(Map, MapLoadingSignal) { MapTest<> test; bool emitted = false; - test.observer.onWillStartLoadingMapCallback = [&]() { + test.observer.willStartLoadingMapCallback = [&]() { emitted = true; }; test.map.getStyle().loadJSON(util::read_file("test/fixtures/api/empty.json")); @@ -381,7 +343,7 @@ TEST(Map, MapLoadingSignal) { TEST(Map, MapLoadedSignal) { MapTest<> test { 1, MapMode::Continuous }; - test.observer.onDidFinishLoadingMapCallback = [&]() { + test.observer.didFinishLoadingMapCallback = [&]() { test.runLoop.stop(); }; @@ -607,7 +569,7 @@ TEST(Map, TEST_DISABLED_ON_CI(ContinuousRendering)) { HeadlessFrontend frontend(pixelRatio, fileSource, threadPool); StubMapObserver observer; - observer.didFinishRenderingFrame = [&] (MapObserver::RenderMode) { + observer.didFinishRenderingFrameCallback = [&] (MapObserver::RenderMode) { // Start a timer that ends the test one second from now. If we are continuing to render // indefinitely, the timer will be constantly restarted and never trigger. Instead, the // emergency shutoff above will trigger, failing the test. diff --git a/test/map/prefetch.test.cpp b/test/map/prefetch.test.cpp index 4c82b2c965..9b61224027 100644 --- a/test/map/prefetch.test.cpp +++ b/test/map/prefetch.test.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -17,34 +18,38 @@ using namespace mbgl; using namespace mbgl::style; using namespace std::literals::string_literals; +using namespace std::chrono_literals; TEST(Map, PrefetchTiles) { util::RunLoop runLoop; ThreadPool threadPool(4); StubFileSource fileSource; + + util::Timer emergencyShutoff; + emergencyShutoff.start(10s, 0s, [&] { + runLoop.stop(); + FAIL() << "Did not stop rendering"; + }); + + StubMapObserver observer; + observer.didFinishLoadingMapCallback = [&] () { + runLoop.stop(); + }; + HeadlessFrontend frontend { { 512, 512 }, 1, fileSource, threadPool }; - Map map(frontend, MapObserver::nullObserver(), frontend.getSize(), 1, fileSource, threadPool, MapMode::Static); + Map map(frontend, observer, frontend.getSize(), 1, fileSource, threadPool, MapMode::Continuous); std::vector tiles; fileSource.response = [&] (const Resource& res) -> optional { - Response response; + static std::string tile = util::read_file("test/fixtures/map/prefetch/tile.png"); auto zoom = std::stoi(res.url); tiles.push_back(zoom); - // Return a red tile for prefetched tiles or green to the actual tile. - // The end rendering result should be all green because the map is only - // considered fully rendered when only ideal tiles are shown. - if (zoom == int(map.getZoom()) + 1) { - response.data = std::make_shared( - util::read_file("test/fixtures/map/prefetch/tile_green.png")); - } else { - response.data = std::make_shared( - util::read_file("test/fixtures/map/prefetch/tile_red.png")); - } - - return { std::move(response) }; + Response response; + response.data = std::make_shared(tile); + return response; }; auto checkTilesForZoom = [&](int zoom, const std::vector& expected) { @@ -53,14 +58,11 @@ TEST(Map, PrefetchTiles) { // Force tile reloading. map.getStyle().loadJSON(util::read_file("test/fixtures/map/prefetch/empty.json")); map.getStyle().loadJSON(util::read_file("test/fixtures/map/prefetch/style.json")); - map.setLatLngZoom({ 40.726989, -73.992857 }, zoom); // Manhattan + runLoop.run(); - // Should always render the ideal tiles (i.e. a green map) - test::checkImage("test/fixtures/map/prefetch", frontend.render(map)); - + ASSERT_EQ(tiles.size(), expected.size()); ASSERT_TRUE(std::is_permutation(tiles.begin(), tiles.end(), expected.begin())); - ASSERT_FALSE(tiles.empty()); }; // Check defaults, should be 4. diff --git a/test/src/mbgl/test/stub_map_observer.hpp b/test/src/mbgl/test/stub_map_observer.hpp new file mode 100644 index 0000000000..1371577473 --- /dev/null +++ b/test/src/mbgl/test/stub_map_observer.hpp @@ -0,0 +1,49 @@ +#pragma once + +#include + +#include + +namespace mbgl { + +class StubMapObserver : public MapObserver { +public: + void onWillStartLoadingMap() final { + if (willStartLoadingMapCallback) { + willStartLoadingMapCallback(); + } + } + + void onDidFinishLoadingMap() final { + if (didFinishLoadingMapCallback) { + didFinishLoadingMapCallback(); + } + } + + void onDidFailLoadingMap(std::exception_ptr) final { + if (didFailLoadingMapCallback) { + didFailLoadingMapCallback(); + } + } + + void onDidFinishLoadingStyle() final { + if (didFinishLoadingStyleCallback) { + didFinishLoadingStyleCallback(); + } + } + + void onDidFinishRenderingFrame(RenderMode mode) final { + if (didFinishRenderingFrameCallback) { + didFinishRenderingFrameCallback(mode); + } + } + + std::function willStartLoadingMapCallback; + std::function didFinishLoadingMapCallback; + std::function didFailLoadingMapCallback; + std::function didFinishLoadingStyleCallback; + std::function didFinishRenderingFrameCallback; +}; + + +} // namespace mbgl -- cgit v1.2.1