#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: FakeFileSource fileSource; TransformState transformState; util::RunLoop loop; ThreadPool threadPool { 1 }; style::Style style { loop, fileSource, 1 }; AnnotationManager annotationManager { style }; ImageManager imageManager; GlyphManager glyphManager { fileSource }; TileParameters tileParameters { 1.0, MapDebugOptions(), transformState, threadPool, 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); StubTileObserver observer; observer.tileChanged = [&] (const Tile&) { // Once present, the bucket should never "disappear", which would cause // flickering. ASSERT_NE(nullptr, tile.getBucket(*layer.baseImpl)); }; tile.setLayers({{ layer.baseImpl }}); tile.setObserver(&observer); tile.setTileData(features); while (!tile.isComplete()) { test.loop.runOnce(); } }