diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-05-13 16:37:40 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-05-14 11:29:24 +0300 |
commit | 5b6a262e1544fc9f649b53ef15ae19b9057356f1 (patch) | |
tree | 004cf1678190a8a75bb48e002da39575793f3023 /test/style/source.test.cpp | |
parent | 7e77aff8dfc2434846614f919cd4f8db1a2ca2f0 (diff) | |
download | qtlocation-mapboxgl-5b6a262e1544fc9f649b53ef15ae19b9057356f1.tar.gz |
[core] GeometryTile and TileLoader keep strong reference to FileSource
Thus we fix a potential bug: if `Renderer` outlives the `Map` it will hold a stale reference to the `FileSource` instance.
Diffstat (limited to 'test/style/source.test.cpp')
-rw-r--r-- | test/style/source.test.cpp | 82 |
1 files changed, 41 insertions, 41 deletions
diff --git a/test/style/source.test.cpp b/test/style/source.test.cpp index 77a9440490..09c433b6a4 100644 --- a/test/style/source.test.cpp +++ b/test/style/source.test.cpp @@ -49,12 +49,12 @@ using SourceType = mbgl::style::SourceType; class SourceTest { public: util::RunLoop loop; - StubFileSource fileSource; + std::shared_ptr<StubFileSource> fileSource = std::make_shared<StubFileSource>(); StubStyleObserver styleObserver; StubRenderSourceObserver renderSourceObserver; Transform transform; TransformState transformState; - Style style { fileSource, 1 }; + Style style { *fileSource, 1 }; AnnotationManager annotationManager { style }; ImageManager imageManager; GlyphManager glyphManager; @@ -93,7 +93,7 @@ public: TEST(Source, LoadingFail) { SourceTest test; - test.fileSource.sourceResponse = [&] (const Resource& resource) { + test.fileSource->sourceResponse = [&] (const Resource& resource) { EXPECT_EQ("url", resource.url); Response response; response.error = std::make_unique<Response::Error>( @@ -110,7 +110,7 @@ TEST(Source, LoadingFail) { VectorSource source("source", "url"); source.setObserver(&test.styleObserver); - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); test.run(); } @@ -118,7 +118,7 @@ TEST(Source, LoadingFail) { TEST(Source, LoadingCorrupt) { SourceTest test; - test.fileSource.sourceResponse = [&] (const Resource& resource) { + test.fileSource->sourceResponse = [&] (const Resource& resource) { EXPECT_EQ("url", resource.url); Response response; response.data = std::make_unique<std::string>("CORRUPTED"); @@ -133,7 +133,7 @@ TEST(Source, LoadingCorrupt) { VectorSource source("source", "url"); source.setObserver(&test.styleObserver); - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); test.run(); } @@ -141,7 +141,7 @@ TEST(Source, LoadingCorrupt) { TEST(Source, RasterTileEmpty) { SourceTest test; - test.fileSource.tileResponse = [&] (const Resource&) { + test.fileSource->tileResponse = [&] (const Resource&) { Response response; response.noContent = true; return response; @@ -155,7 +155,7 @@ TEST(Source, RasterTileEmpty) { tileset.tiles = { "tiles" }; RasterSource source("source", tileset, 512); - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); test.renderSourceObserver.tileChanged = [&] (RenderSource& source_, const OverscaledTileID&) { EXPECT_EQ("source", source_.baseImpl->id); @@ -180,7 +180,7 @@ TEST(Source, RasterTileEmpty) { TEST(Source, RasterDEMTileEmpty) { SourceTest test; - test.fileSource.tileResponse = [&] (const Resource&) { + test.fileSource->tileResponse = [&] (const Resource&) { Response response; response.noContent = true; return response; @@ -194,7 +194,7 @@ TEST(Source, RasterDEMTileEmpty) { tileset.tiles = { "tiles" }; RasterDEMSource source("source", tileset, 512); - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); test.renderSourceObserver.tileChanged = [&] (RenderSource& source_, const OverscaledTileID&) { EXPECT_EQ("source", source_.baseImpl->id); @@ -219,7 +219,7 @@ TEST(Source, RasterDEMTileEmpty) { TEST(Source, VectorTileEmpty) { SourceTest test; - test.fileSource.tileResponse = [&] (const Resource&) { + test.fileSource->tileResponse = [&] (const Resource&) { Response response; response.noContent = true; return response; @@ -235,7 +235,7 @@ TEST(Source, VectorTileEmpty) { tileset.tiles = { "tiles" }; VectorSource source("source", tileset); - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); test.renderSourceObserver.tileChanged = [&] (RenderSource& source_, const OverscaledTileID&) { EXPECT_EQ("source", source_.baseImpl->id); @@ -260,7 +260,7 @@ TEST(Source, VectorTileEmpty) { TEST(Source, RasterTileFail) { SourceTest test; - test.fileSource.tileResponse = [&] (const Resource&) { + test.fileSource->tileResponse = [&] (const Resource&) { Response response; response.error = std::make_unique<Response::Error>( Response::Error::Reason::Other, @@ -276,7 +276,7 @@ TEST(Source, RasterTileFail) { tileset.tiles = { "tiles" }; RasterSource source("source", tileset, 512); - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); test.renderSourceObserver.tileError = [&] (RenderSource& source_, const OverscaledTileID& tileID, std::exception_ptr error) { EXPECT_EQ(SourceType::Raster, source_.baseImpl->type); @@ -299,7 +299,7 @@ TEST(Source, RasterTileFail) { TEST(Source, RasterDEMTileFail) { SourceTest test; - test.fileSource.tileResponse = [&] (const Resource&) { + test.fileSource->tileResponse = [&] (const Resource&) { Response response; response.error = std::make_unique<Response::Error>( Response::Error::Reason::Other, @@ -315,7 +315,7 @@ TEST(Source, RasterDEMTileFail) { tileset.tiles = { "tiles" }; RasterDEMSource source("source", tileset, 512); - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); test.renderSourceObserver.tileError = [&] (RenderSource& source_, const OverscaledTileID& tileID, std::exception_ptr error) { EXPECT_EQ(SourceType::RasterDEM, source_.baseImpl->type); @@ -338,7 +338,7 @@ TEST(Source, RasterDEMTileFail) { TEST(Source, VectorTileFail) { SourceTest test; - test.fileSource.tileResponse = [&] (const Resource&) { + test.fileSource->tileResponse = [&] (const Resource&) { Response response; response.error = std::make_unique<Response::Error>( Response::Error::Reason::Other, @@ -356,7 +356,7 @@ TEST(Source, VectorTileFail) { tileset.tiles = { "tiles" }; VectorSource source("source", tileset); - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); test.renderSourceObserver.tileError = [&] (RenderSource& source_, const OverscaledTileID& tileID, std::exception_ptr error) { EXPECT_EQ(SourceType::Vector, source_.baseImpl->type); @@ -379,7 +379,7 @@ TEST(Source, VectorTileFail) { TEST(Source, RasterTileCorrupt) { SourceTest test; - test.fileSource.tileResponse = [&] (const Resource&) { + test.fileSource->tileResponse = [&] (const Resource&) { Response response; response.data = std::make_unique<std::string>("CORRUPTED"); return response; @@ -393,7 +393,7 @@ TEST(Source, RasterTileCorrupt) { tileset.tiles = { "tiles" }; RasterSource source("source", tileset, 512); - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); test.renderSourceObserver.tileError = [&] (RenderSource& source_, const OverscaledTileID& tileID, std::exception_ptr error) { EXPECT_EQ(source_.baseImpl->type, SourceType::Raster); @@ -417,7 +417,7 @@ TEST(Source, RasterTileCorrupt) { TEST(Source, RasterDEMTileCorrupt) { SourceTest test; - test.fileSource.tileResponse = [&] (const Resource&) { + test.fileSource->tileResponse = [&] (const Resource&) { Response response; response.data = std::make_unique<std::string>("CORRUPTED"); return response; @@ -431,7 +431,7 @@ TEST(Source, RasterDEMTileCorrupt) { tileset.tiles = { "tiles" }; RasterDEMSource source("source", tileset, 512); - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); test.renderSourceObserver.tileError = [&] (RenderSource& source_, const OverscaledTileID& tileID, std::exception_ptr error) { EXPECT_EQ(source_.baseImpl->type, SourceType::RasterDEM); @@ -455,7 +455,7 @@ TEST(Source, RasterDEMTileCorrupt) { TEST(Source, VectorTileCorrupt) { SourceTest test; - test.fileSource.tileResponse = [&] (const Resource&) { + test.fileSource->tileResponse = [&] (const Resource&) { Response response; response.data = std::make_unique<std::string>("CORRUPTED"); return response; @@ -471,7 +471,7 @@ TEST(Source, VectorTileCorrupt) { tileset.tiles = { "tiles" }; VectorSource source("source", tileset); - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); test.renderSourceObserver.tileError = [&] (RenderSource& source_, const OverscaledTileID& tileID, std::exception_ptr error) { EXPECT_EQ(source_.baseImpl->type, SourceType::Vector); @@ -494,7 +494,7 @@ TEST(Source, VectorTileCorrupt) { TEST(Source, RasterTileCancel) { SourceTest test; - test.fileSource.tileResponse = [&] (const Resource&) { + test.fileSource->tileResponse = [&] (const Resource&) { test.end(); return optional<Response>(); }; @@ -507,7 +507,7 @@ TEST(Source, RasterTileCancel) { tileset.tiles = { "tiles" }; RasterSource source("source", tileset, 512); - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); test.renderSourceObserver.tileChanged = [&] (RenderSource&, const OverscaledTileID&) { FAIL() << "Should never be called"; @@ -531,7 +531,7 @@ TEST(Source, RasterTileCancel) { TEST(Source, RasterDEMTileCancel) { SourceTest test; - test.fileSource.tileResponse = [&] (const Resource&) { + test.fileSource->tileResponse = [&] (const Resource&) { test.end(); return optional<Response>(); }; @@ -544,7 +544,7 @@ TEST(Source, RasterDEMTileCancel) { tileset.tiles = { "tiles" }; RasterDEMSource source("source", tileset, 512); - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); test.renderSourceObserver.tileChanged = [&] (RenderSource&, const OverscaledTileID&) { FAIL() << "Should never be called"; @@ -568,7 +568,7 @@ TEST(Source, RasterDEMTileCancel) { TEST(Source, VectorTileCancel) { SourceTest test; - test.fileSource.tileResponse = [&] (const Resource&) { + test.fileSource->tileResponse = [&] (const Resource&) { test.end(); return optional<Response>(); }; @@ -583,7 +583,7 @@ TEST(Source, VectorTileCancel) { tileset.tiles = { "tiles" }; VectorSource source("source", tileset); - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); test.renderSourceObserver.tileChanged = [&] (RenderSource&, const OverscaledTileID&) { FAIL() << "Should never be called"; @@ -614,13 +614,13 @@ TEST(Source, RasterTileAttribution) { std::string mapboxOSM = ("<a href='https://www.mapbox.com/about/maps/' target='_blank'>© Mapbox</a> " "<a href='http://www.openstreetmap.org/about/' target='_blank'>©️ OpenStreetMap</a>"); - test.fileSource.tileResponse = [&] (const Resource&) { + test.fileSource->tileResponse = [&] (const Resource&) { Response response; response.noContent = true; return response; }; - test.fileSource.sourceResponse = [&] (const Resource& resource) { + test.fileSource->sourceResponse = [&] (const Resource& resource) { EXPECT_EQ("url", resource.url); Response response; response.data = std::make_unique<std::string>(R"TILEJSON({ "tilejson": "2.1.0", "attribution": ")TILEJSON" + @@ -637,7 +637,7 @@ TEST(Source, RasterTileAttribution) { RasterSource source("source", "url", 512); source.setObserver(&test.styleObserver); - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); auto renderSource = RenderSource::create(source.baseImpl); renderSource->update(source.baseImpl, @@ -658,13 +658,13 @@ TEST(Source, RasterDEMTileAttribution) { std::string mapbox = ("<a href='https://www.mapbox.com/about/maps/' target='_blank'>© Mapbox</a> "); - test.fileSource.tileResponse = [&] (const Resource&) { + test.fileSource->tileResponse = [&] (const Resource&) { Response response; response.noContent = true; return response; }; - test.fileSource.sourceResponse = [&] (const Resource& resource) { + test.fileSource->sourceResponse = [&] (const Resource& resource) { EXPECT_EQ("url", resource.url); Response response; response.data = std::make_unique<std::string>(R"TILEJSON({ "tilejson": "2.1.0", "attribution": ")TILEJSON" + @@ -680,7 +680,7 @@ TEST(Source, RasterDEMTileAttribution) { RasterDEMSource source("source", "url", 512); source.setObserver(&test.styleObserver); - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); auto renderSource = RenderSource::create(source.baseImpl); renderSource->update(source.baseImpl, @@ -695,7 +695,7 @@ TEST(Source, RasterDEMTileAttribution) { TEST(Source, GeoJSonSourceUrlUpdate) { SourceTest test; - test.fileSource.sourceResponse = [&] (const Resource& resource) { + test.fileSource->sourceResponse = [&] (const Resource& resource) { EXPECT_EQ("url", resource.url); Response response; response.data = std::make_unique<std::string>(R"({"geometry": {"type": "Point", "coordinates": [1.1, 1.1]}, "type": "Feature", "properties": {}})"); @@ -711,7 +711,7 @@ TEST(Source, GeoJSonSourceUrlUpdate) { source.setObserver(&test.styleObserver); // Load initial, so the source state will be loaded=true - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); // Schedule an update test.loop.invoke([&] () { @@ -725,7 +725,7 @@ TEST(Source, GeoJSonSourceUrlUpdate) { TEST(Source, ImageSourceImageUpdate) { SourceTest test; - test.fileSource.response = [&] (const Resource& resource) { + test.fileSource->response = [&] (const Resource& resource) { EXPECT_EQ("http://url", resource.url); Response response; response.data = std::make_unique<std::string>(util::read_file("test/fixtures/image/no_profile.png")); @@ -742,7 +742,7 @@ TEST(Source, ImageSourceImageUpdate) { source.setObserver(&test.styleObserver); // Load initial, so the source state will be loaded=true - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); PremultipliedImage rgba({ 1, 1 }); rgba.data[0] = 255; rgba.data[1] = 254; @@ -761,7 +761,7 @@ TEST(Source, ImageSourceImageUpdate) { TEST(Source, CustomGeometrySourceSetTileData) { SourceTest test; CustomGeometrySource source("source", CustomGeometrySource::Options()); - source.loadDescription(test.fileSource); + source.loadDescription(*test.fileSource); LineLayer layer("id", "source"); layer.setSourceLayer("water"); |