#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace mbgl; class VectorTileTest { public: std::shared_ptr fileSource = std::make_shared(); TransformState transformState; util::RunLoop loop; style::Style style{fileSource, 1}; AnnotationManager annotationManager { *style.impl }; ImageManager imageManager; GlyphManager glyphManager; Tileset tileset { { "https://example.com" }, { 0, 22 }, "none" }; TileParameters tileParameters { 1.0, MapDebugOptions(), transformState, fileSource, MapMode::Continuous, annotationManager, imageManager, glyphManager, 0 }; }; TEST(VectorTile, setError) { VectorTileTest test; VectorTile tile(OverscaledTileID(0, 0, 0), "source", test.tileParameters, test.tileset); tile.setError(std::make_exception_ptr(std::runtime_error("test"))); EXPECT_FALSE(tile.isRenderable()); EXPECT_TRUE(tile.isLoaded()); EXPECT_TRUE(tile.isComplete()); } TEST(VectorTile, onError) { VectorTileTest test; VectorTile tile(OverscaledTileID(0, 0, 0), "source", test.tileParameters, test.tileset); tile.onError(std::make_exception_ptr(std::runtime_error("test")), 0); EXPECT_FALSE(tile.isRenderable()); EXPECT_TRUE(tile.isLoaded()); EXPECT_TRUE(tile.isComplete()); } TEST(VectorTile, Issue8542) { VectorTileTest test; VectorTile tile(OverscaledTileID(0, 0, 0), "source", test.tileParameters, test.tileset); // Query before data is set std::vector result; tile.querySourceFeatures(result, { { {"layer"} }, {} }); } TEST(VectorTileData, ParseResults) { VectorTileData data(std::make_shared(util::read_file("test/fixtures/map/issue12432/0-0-0.mvt"))); std::vector layerNames = data.layerNames(); ASSERT_EQ(layerNames.size(), 2u); ASSERT_EQ(layerNames.at(0), "admin"); ASSERT_EQ(layerNames.at(1), "water"); ASSERT_FALSE(data.getLayer("invalid")); std::unique_ptr layer = data.getLayer("admin"); ASSERT_EQ(layer->getName(), "admin"); ASSERT_EQ(layer->featureCount(), 17154u); try { layer->getFeature(17154u); ASSERT_TRUE(false) << "should throw: feature index is out of range."; } catch (const std::out_of_range&) { ASSERT_TRUE(true); } std::unique_ptr feature = layer->getFeature(0u); ASSERT_EQ(feature->getType(), mbgl::FeatureType::LineString); ASSERT_TRUE(feature->getID().is()); ASSERT_EQ(feature->getID().get(), 1u); const std::unordered_map& properties = feature->getProperties(); ASSERT_EQ(properties.size(), 3u); ASSERT_EQ(properties.at("disputed"), *feature->getValue("disputed")); ASSERT_EQ(feature->getValue("invalid"), nullopt); }