#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace mbgl; class VectorTileTest { public: FakeFileSource fileSource; TransformState transformState; util::RunLoop loop; ThreadPool threadPool { 1 }; AnnotationManager annotationManager { 1.0 }; style::Style style { fileSource, 1.0 }; Tileset tileset { { "https://example.com" }, { 0, 22 }, "none" }; style::UpdateParameters updateParameters { 1.0, MapDebugOptions(), transformState, threadPool, fileSource, MapMode::Continuous, annotationManager, style }; }; TEST(VectorTile, setError) { VectorTileTest test; VectorTile tile(OverscaledTileID(0, 0, 0), "source", test.updateParameters, test.tileset); tile.setError(std::make_exception_ptr(std::runtime_error("test"))); EXPECT_FALSE(tile.isRenderable()); } TEST(VectorTile, onError) { VectorTileTest test; VectorTile tile(OverscaledTileID(0, 0, 0), "source", test.updateParameters, test.tileset); tile.onError(std::make_exception_ptr(std::runtime_error("test"))); EXPECT_TRUE(tile.isRenderable()); } TEST(VectorTile, Issue7615) { VectorTileTest test; VectorTile tile(OverscaledTileID(0, 0, 0), "source", test.updateParameters, test.tileset); style::SymbolLayer symbolLayer("symbol", "source"); auto symbolBucket = std::make_shared( MapMode::Continuous, style::SymbolLayoutProperties::Evaluated(), false, false); // Simulate placement of a symbol layer. tile.onPlacement(GeometryTile::PlacementResult { {{ symbolLayer.getID(), symbolBucket }}, nullptr, 0 }); // Subsequent onLayout should not cause the existing symbol bucket to be discarded. tile.onLayout(GeometryTile::LayoutResult { {}, nullptr, nullptr, 0 }); EXPECT_EQ(symbolBucket.get(), tile.getBucket(symbolLayer)); }