diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2016-09-26 17:26:15 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2016-10-27 16:15:36 -0700 |
commit | 91272992f3a7ca7baa124c3378f1c1e2b3e5bb76 (patch) | |
tree | f76b6293a302b3986dbf42a8e0b0f5975c31b677 /test/map | |
parent | e7bfa7849e4ed7a80d27b63ac2f504660ecfb14b (diff) | |
download | qtlocation-mapboxgl-91272992f3a7ca7baa124c3378f1c1e2b3e5bb76.tar.gz |
[core] don't load tiles from sources that aren't used
Diffstat (limited to 'test/map')
-rw-r--r-- | test/map/map.test.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/test/map/map.test.cpp b/test/map/map.test.cpp index 97a09e94a0..f6b37d6bc2 100644 --- a/test/map/map.test.cpp +++ b/test/map/map.test.cpp @@ -394,3 +394,51 @@ TEST(Map, RemoveImage) { map.removeImage("test-icon"); test::checkImage("test/fixtures/map/remove_icon", test::render(map, test.view)); } + +TEST(Map, DontLoadUnneededTiles) { + MapTest test; + + Map map(test.backend, test.view.getSize(), 1, test.fileSource, test.threadPool, MapMode::Still); + map.setStyleJSON(R"STYLE({ + "sources": { + "a": { "type": "vector", "tiles": [ "a/{z}/{x}/{y}" ] } + }, + "layers": [{ + "id": "a", + "type": "fill", + "source": "a", + "source-layer": "a", + "minzoom": 0.3, + "maxzoom": 1.6 + }] +})STYLE"); + + using Tiles = std::unordered_set<std::string>; + Tiles tiles; + + test.fileSource.tileResponse = [&](const Resource& rsc) { + tiles.emplace(rsc.url); + Response res; + res.noContent = true; + return res; + }; + + std::unordered_map<double, Tiles> referenceTiles = { + // Since the layer's minzoom is 0.3, we shouldn't load tiles before z0.3 + { 0.3, { "a/0/0/0" } }, + { 1.0, { "a/1/1/0", "a/1/0/1", "a/1/0/0", "a/1/1/1" } }, + // Since the layer's maxzoom is 1.6, we should never load z2 or z3 tiles. + }; + + // Loop through zoom levels from 0 to 3 and check that the correct tiles are loaded at every + // step. The source is marked with maxzoom 1.0, which means that it won't be visible anymore + // after z1.0, so we should under no circumstances attempt to load z2 tiles. + for (unsigned zoom = 0; zoom <= 30; zoom++) { // times 10 + // Note: using z += 0.1 in the loop doesn't produce accurate floating point numbers. + const double z = double(zoom) / 10; + tiles.clear(); + map.setZoom(z); + test::render(map, test.view); + EXPECT_EQ(referenceTiles[z], tiles) << "zoom level " << z; + } +} |