Add Map.PlacedSymbolData unit test

This commit is contained in:
Mikhail Pozdnyakov
2020-03-26 17:11:03 +02:00
parent c3b68fe91b
commit 57cd47b2fc

View File

@@ -1389,4 +1389,74 @@ TEST(Map, KeepRenderData) {
test.frontend.render(test.map);
EXPECT_EQ(resourcesCount * i, requestsCount);
}
}
}
namespace {
bool isInsideTile(const mapbox::geometry::box<float>& box, float padding, Size viewportSize) {
if (box.min.x - padding < 0) return false;
if (box.min.y - padding < 0) return false;
if (box.max.x - padding > viewportSize.width) return false;
if (box.max.y - padding > viewportSize.height) return false;
return true;
}
} // namespace
TEST(Map, PlacedSymbolData) {
MapTest<> test{std::move(MapOptions().withMapMode(MapMode::Tile))};
test.fileSource->tileResponse = makeResponse("vector.tile", true);
test.fileSource->glyphsResponse = makeResponse("glyphs.pbf", true);
test.fileSource->styleResponse = makeResponse("style_vector.json");
test.fileSource->sourceResponse = makeResponse("source_vector.json");
test.fileSource->spriteJSONResponse = makeResponse("sprite.json");
test.fileSource->spriteImageResponse = makeResponse("sprite.png");
// Camera options will give exactly one tile (12/1171/1566)
test.map.jumpTo(CameraOptions().withZoom(12).withCenter(LatLng{38.917982, -77.037603}));
test.map.getStyle().loadURL("mapbox://streets");
Size viewportSize = test.frontend.getSize();
test.frontend.getRenderer()->collectPlacedSymbolData(true);
test.frontend.render(test.map);
const auto& placedSymbols = test.frontend.getRenderer()->getPlacedSymbolsData();
EXPECT_FALSE(placedSymbols.empty());
int placedTextInsideTile = 0;
int placedText = 0;
int placedIconInsideTile = 0;
int placedIcon = 0;
int placedTotal = 0;
for (const auto& placedSymbol : placedSymbols) {
if (placedSymbol.textPlaced && placedSymbol.textCollisionBox) {
if (isInsideTile(*placedSymbol.textCollisionBox, placedSymbol.viewportPadding, viewportSize)) {
EXPECT_FALSE(placedSymbol.intersectsTileBorder);
++placedTextInsideTile;
}
++placedText;
}
if (placedSymbol.iconPlaced && placedSymbol.iconCollisionBox) {
if (isInsideTile(*placedSymbol.iconCollisionBox, placedSymbol.viewportPadding, viewportSize)) {
EXPECT_FALSE(placedSymbol.intersectsTileBorder);
++placedIconInsideTile;
}
++placedIcon;
}
++placedTotal;
}
EXPECT_EQ(1, placedTextInsideTile);
EXPECT_EQ(28, placedText);
EXPECT_EQ(2, placedIconInsideTile);
EXPECT_EQ(29, placedIcon);
EXPECT_EQ(50, placedTotal);
test.frontend.getRenderer()->collectPlacedSymbolData(false);
test.frontend.render(test.map);
EXPECT_TRUE(test.frontend.getRenderer()->getPlacedSymbolsData().empty());
}