#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace mbgl; using namespace mbgl::style; class CustomTileTest { public: std::shared_ptr fileSource = std::make_shared(); TransformState transformState; util::RunLoop loop; style::Style style { *fileSource, 1 }; AnnotationManager annotationManager { style }; ImageManager imageManager; GlyphManager glyphManager; TileParameters tileParameters { 1.0, MapDebugOptions(), transformState, fileSource, MapMode::Continuous, annotationManager, imageManager, glyphManager, 0 }; }; TEST(CustomGeometryTile, InvokeFetchTile) { CustomTileTest test; CircleLayer layer("circle", "source"); mapbox::feature::feature_collection features; features.push_back(mapbox::feature::feature { mapbox::geometry::point(0, 0) }); CustomTileLoader loader([&](const CanonicalTileID& tileId) { EXPECT_EQ(tileId, CanonicalTileID(0,0,0)); test.loop.stop(); }, [&](const CanonicalTileID&) { }); auto mb =std::make_shared(*Scheduler::GetCurrent()); ActorRef loaderActor(loader, mb); CustomGeometryTile tile(OverscaledTileID(0, 0, 0), "source", test.tileParameters, CustomGeometrySource::TileOptions(), loaderActor); tile.setNecessity(TileNecessity::Required); test.loop.run(); } TEST(CustomGeometryTile, InvokeCancelTile) { CustomTileTest test; CircleLayer layer("circle", "source"); mapbox::feature::feature_collection features; features.push_back(mapbox::feature::feature { mapbox::geometry::point(0, 0) }); CustomTileLoader loader([&](const CanonicalTileID&) { }, [&](const CanonicalTileID& tileId) { EXPECT_EQ(tileId, CanonicalTileID(0,0,0)); test.loop.stop(); }); auto mb =std::make_shared(*Scheduler::GetCurrent()); ActorRef loaderActor(loader, mb); CustomGeometryTile tile(OverscaledTileID(0, 0, 0), "source", test.tileParameters, CustomGeometrySource::TileOptions(), loaderActor); tile.setNecessity(TileNecessity::Required); tile.setNecessity(TileNecessity::Optional); test.loop.run(); } TEST(CustomGeometryTile, InvokeTileChanged) { CustomTileTest test; CircleLayer layer("circle", "source"); mapbox::feature::feature_collection features; features.push_back(mapbox::feature::feature { mapbox::geometry::point(0, 0) }); CustomTileLoader loader(nullptr, nullptr); auto mb =std::make_shared(*Scheduler::GetCurrent()); ActorRef loaderActor(loader, mb); CustomGeometryTile tile(OverscaledTileID(0, 0, 0), "source", test.tileParameters, CustomGeometrySource::TileOptions(), loaderActor); Immutable layerProperties = makeMutable(staticImmutableCast(layer.baseImpl)); StubTileObserver observer; observer.tileChanged = [&] (const Tile&) { // Once present, the bucket should never "disappear", which would cause // flickering. ASSERT_TRUE(tile.layerPropertiesUpdated(layerProperties)); }; std::vector> layers { layerProperties }; tile.setLayers(layers); tile.setObserver(&observer); tile.setTileData(features); while (!tile.isComplete()) { test.loop.runOnce(); } }