summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAlexander Shalamov <alexander.shalamov@mapbox.com>2020-03-27 15:18:39 +0200
committerAlexander Shalamov <alexander.shalamov@mapbox.com>2020-04-01 16:18:55 -0400
commitf3e9c4733afaa5313f0cc7d346afe4b63f8f705a (patch)
treedd47830e52fd789258c79f4984240ebf47ab5947 /test
parentca1ae7604c1632e64e39fdaabb410e7579118ed4 (diff)
downloadqtlocation-mapboxgl-f3e9c4733afaa5313f0cc7d346afe4b63f8f705a.tar.gz
[core] Add unit tests
Diffstat (limited to 'test')
-rw-r--r--test/algorithm/update_renderables.test.cpp63
-rw-r--r--test/style/source.test.cpp60
2 files changed, 119 insertions, 4 deletions
diff --git a/test/algorithm/update_renderables.test.cpp b/test/algorithm/update_renderables.test.cpp
index 22d8d79443..6958f21ea2 100644
--- a/test/algorithm/update_renderables.test.cpp
+++ b/test/algorithm/update_renderables.test.cpp
@@ -1309,3 +1309,66 @@ TEST(UpdateRenderables, LoadOverscaledMaxZoomTile) {
}),
log);
}
+
+TEST(UpdateRenderables, MaxParentOverscaleFactor) {
+ ActionLog log;
+ MockSource source;
+ auto getTileData = getTileDataFn(log, source.dataTiles);
+ auto createTileData = createTileDataFn(log, source.dataTiles);
+ auto retainTileData = retainTileDataFn(log);
+ auto renderTile = renderTileFn(log);
+
+ source.idealTiles.emplace(UnwrappedTileID{4, 0, 0});
+ source.idealTiles.emplace(UnwrappedTileID{4, 1, 0});
+
+ auto tile_0_0_0_0 = source.createTileData(OverscaledTileID{0, 0, 0});
+ tile_0_0_0_0->renderable = true;
+
+ // Set max parent overscale factor to 4, so that tile 0,0,0 would be rendered
+ algorithm::updateRenderables(
+ getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange, 4, 4);
+ EXPECT_EQ(ActionLog({GetTileDataAction{{4, 0, {4, 0, 0}}, NotFound}, // ideal tile
+ CreateTileDataAction{{4, 0, {4, 0, 0}}},
+ RetainTileDataAction{{4, 0, {4, 0, 0}}, TileNecessity::Required},
+ GetTileDataAction{{5, 0, {5, 0, 0}}, NotFound}, // child tiles
+ GetTileDataAction{{5, 0, {5, 0, 1}}, NotFound},
+ GetTileDataAction{{5, 0, {5, 1, 0}}, NotFound},
+ GetTileDataAction{{5, 0, {5, 1, 1}}, NotFound},
+ GetTileDataAction{{3, 0, {3, 0, 0}}, NotFound}, // ascent
+ GetTileDataAction{{2, 0, {2, 0, 0}}, NotFound},
+ GetTileDataAction{{1, 0, {1, 0, 0}}, NotFound},
+ GetTileDataAction{{0, 0, {0, 0, 0}}, Found},
+ RetainTileDataAction{{0, 0, {0, 0, 0}}, TileNecessity::Optional},
+ RenderTileAction{{0, 0, 0}, *tile_0_0_0_0}, // render tile 0,0,0
+ GetTileDataAction{{4, 0, {4, 1, 0}}, NotFound}, // ideal tile
+ CreateTileDataAction{{4, 0, {4, 1, 0}}},
+ RetainTileDataAction{{4, 0, {4, 1, 0}}, TileNecessity::Required},
+ GetTileDataAction{{5, 0, {5, 2, 0}}, NotFound}, // child tiles
+ GetTileDataAction{{5, 0, {5, 2, 1}}, NotFound},
+ GetTileDataAction{{5, 0, {5, 3, 0}}, NotFound},
+ GetTileDataAction{{5, 0, {5, 3, 1}}, NotFound}}),
+ log);
+
+ log.clear();
+
+ // Set max parent overscale factor to 3.
+ // Parent tile 0,0,0 should not be requested / rendered.
+ algorithm::updateRenderables(
+ getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange, 4, 3);
+ EXPECT_EQ(ActionLog({GetTileDataAction{{4, 0, {4, 0, 0}}, Found}, // ideal tile
+ RetainTileDataAction{{4, 0, {4, 0, 0}}, TileNecessity::Required},
+ GetTileDataAction{{5, 0, {5, 0, 0}}, NotFound}, // child tiles
+ GetTileDataAction{{5, 0, {5, 0, 1}}, NotFound},
+ GetTileDataAction{{5, 0, {5, 1, 0}}, NotFound},
+ GetTileDataAction{{5, 0, {5, 1, 1}}, NotFound},
+ GetTileDataAction{{3, 0, {3, 0, 0}}, NotFound}, // ascent
+ GetTileDataAction{{2, 0, {2, 0, 0}}, NotFound},
+ GetTileDataAction{{1, 0, {1, 0, 0}}, NotFound},
+ GetTileDataAction{{4, 0, {4, 1, 0}}, Found}, // ideal tile
+ RetainTileDataAction{{4, 0, {4, 1, 0}}, TileNecessity::Required},
+ GetTileDataAction{{5, 0, {5, 2, 0}}, NotFound}, // child tiles
+ GetTileDataAction{{5, 0, {5, 2, 1}}, NotFound},
+ GetTileDataAction{{5, 0, {5, 3, 0}}, NotFound},
+ GetTileDataAction{{5, 0, {5, 3, 1}}, NotFound}}),
+ log);
+}
diff --git a/test/style/source.test.cpp b/test/style/source.test.cpp
index 37f87fb982..dae2aef9ca 100644
--- a/test/style/source.test.cpp
+++ b/test/style/source.test.cpp
@@ -1,7 +1,8 @@
-#include <mbgl/test/util.hpp>
+#include <mbgl/test/fixture_log_observer.hpp>
#include <mbgl/test/stub_file_source.hpp>
-#include <mbgl/test/stub_style_observer.hpp>
#include <mbgl/test/stub_render_source_observer.hpp>
+#include <mbgl/test/stub_style_observer.hpp>
+#include <mbgl/test/util.hpp>
#include <mbgl/style/layers/circle_layer.hpp>
#include <mbgl/style/layers/circle_layer_impl.hpp>
@@ -32,10 +33,11 @@
#include <mbgl/util/premultiply.hpp>
#include <mbgl/util/image.hpp>
-#include <mbgl/util/tileset.hpp>
#include <mbgl/util/logging.hpp>
#include <mbgl/util/optional.hpp>
#include <mbgl/util/range.hpp>
+#include <mbgl/util/tileset.hpp>
+#include <mbgl/util/timer.hpp>
#include <mbgl/annotation/annotation_manager.hpp>
#include <mbgl/annotation/annotation_source.hpp>
@@ -775,7 +777,8 @@ public:
tileset.zoomRange,
tileset.bounds,
[&](const OverscaledTileID& tileID) { return std::make_unique<FakeTile>(*this, tileID); },
- baseImpl->getPrefetchZoomDelta());
+ baseImpl->getPrefetchZoomDelta(),
+ baseImpl->getMaxOverscaleFactorForParentTiles());
}
const optional<Tileset>& getTileset() const override {
@@ -880,3 +883,52 @@ TEST(Source, GeoJSONSourceTilesAfterDataReset) {
.update(source.baseImpl, layers, true, true, test.tileParameters(MapMode::Static));
EXPECT_TRUE(renderSource.isLoaded()); // Tiles are reset in static mode.
}
+
+TEST(Source, SetMaxParentOverscaleFactor) {
+ SourceTest test;
+ test.transform.jumpTo(CameraOptions().withCenter(LatLng()).withZoom(8.0));
+ test.transformState = test.transform.getState();
+ util::Timer timer;
+ FixtureLog log;
+
+ test.fileSource->tileResponse = [&](const Resource& res) {
+ if (res.tileData->z == 5) {
+ timer.start(Milliseconds(10), Duration::zero(), [&] { test.end(); });
+ }
+ // No tiles above zoom level 5 should be requested.
+ EXPECT_LE(5, int(res.tileData->z));
+ Response response;
+ response.noContent = true;
+ return response;
+ };
+
+ RasterLayer layer("id", "source");
+ Immutable<LayerProperties> layerProperties =
+ makeMutable<RasterLayerProperties>(staticImmutableCast<RasterLayer::Impl>(layer.baseImpl));
+ std::vector<Immutable<LayerProperties>> layers{layerProperties};
+
+ Tileset tileset;
+ tileset.tiles = {"tiles"};
+
+ RasterSource source("source", tileset, 512);
+ ASSERT_EQ(nullopt, source.getMaxOverscaleFactorForParentTiles());
+ source.setMaxOverscaleFactorForParentTiles(3);
+ ASSERT_EQ(3, *source.getMaxOverscaleFactorForParentTiles());
+ source.loadDescription(*test.fileSource);
+
+ auto renderSource = RenderSource::create(source.baseImpl);
+ renderSource->setObserver(&test.renderSourceObserver);
+ renderSource->update(source.baseImpl, layers, true, true, test.tileParameters());
+
+ test.renderSourceObserver.tileChanged = [&](RenderSource&, const OverscaledTileID&) {
+ renderSource->update(source.baseImpl, layers, true, true, test.tileParameters());
+ };
+
+ test.run();
+
+ EXPECT_EQ(
+ 1u,
+ log.count(
+ {EventSeverity::Warning, Event::Style, -1, "Parent tile overscale factor will cap prefetch delta to 3"}));
+ EXPECT_EQ(0u, log.uncheckedCount());
+}