TEST(Annotations, StyleSourcedShapeAnnotation) { AnnotationTest test; Polygon<double> polygon = {{ {{ { 0, 0 }, { 0, 45 }, { 45, 45 }, { 45, 0 } }} }}; test.map.setStyleJSON(util::read_file("test/fixtures/api/annotation.json")); test.map.addAnnotation(StyleSourcedAnnotation { polygon, "annotation" }); test.checkRendering("style_sourced_shape_annotation"); }
TEST(Annotations, SymbolAnnotation) { AnnotationTest test; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); test.map.addAnnotationIcon("default_marker", namedMarker("default_marker.png")); test.map.addAnnotation(SymbolAnnotation { Point<double>(0, 0), "default_marker" }); test.checkRendering("point_annotation"); // FIXME: https://github.com/mapbox/mapbox-gl-native/issues/5419 //test.map.setZoom(test.map.getMaxZoom()); //test.checkRendering("point_annotation"); }
TEST(Annotations, AddMultiple) { AnnotationTest test; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); test.map.addAnnotationIcon("default_marker", namedMarker("default_marker.png")); test.map.addAnnotation(SymbolAnnotation { Point<double> { -10, 0 }, "default_marker" }); test::render(test.map); test.map.addAnnotation(SymbolAnnotation { Point<double> { 10, 0 }, "default_marker" }); test.checkRendering("add_multiple"); }
TEST(Annotations, ReaddImage) { AnnotationTest test; test.map.getStyle().loadJSON(util::read_file("test/fixtures/api/empty.json")); test.map.addAnnotationImage(namedMarker("default_marker")); test.map.addAnnotation(SymbolAnnotation { Point<double> { 0, 0 }, "default_marker" }); test.frontend.render(test.map); test.map.addAnnotationImage(std::make_unique<style::Image>("default_marker", namedImage("flipped_marker"), 1.0)); test.checkRendering("readd_image"); }
TEST(Annotations, DebugEmpty) { // This test should render nothing, not even the tile borders. Tile borders are only rendered // when there is an actual tile we're trying to render, but since there is no annotation, we // should not render them. AnnotationTest test; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); test.map.setDebug(MapDebugOptions::TileBorders); test.map.setZoom(1); test.checkRendering("debug_empty"); }
TEST(Annotations, SwitchStyle) { AnnotationTest test; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); test.map.addAnnotationIcon("default_marker", namedMarker("default_marker.png")); test.map.addAnnotation(SymbolAnnotation { Point<double> { 0, 0 }, "default_marker" }); test::render(test.map, test.view); test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); test.checkRendering("switch_style"); }
TEST(Annotations, RemovePoint) { AnnotationTest test; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); test.map.addAnnotationIcon("default_marker", namedMarker("default_marker.png")); AnnotationID point = test.map.addAnnotation(SymbolAnnotation { Point<double> { 0, 0 }, "default_marker" }); test::render(test.map); test.map.removeAnnotation(point); test.checkRendering("remove_point"); }
TEST(Annotations, SwitchStyle) { AnnotationTest test; test.map.getStyle().loadJSON(util::read_file("test/fixtures/api/empty.json")); test.map.addAnnotationImage(namedMarker("default_marker")); test.map.addAnnotation(SymbolAnnotation { Point<double> { 0, 0 }, "default_marker" }); test.frontend.render(test.map); test.map.getStyle().loadJSON(util::read_file("test/fixtures/api/empty.json")); test.checkRendering("switch_style"); }
TEST(Annotations, DebugSparse) { // This test should only render the top right tile with the associated tile border, but no other // tiles because they're all empty. AnnotationTest test; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); test.map.setDebug(MapDebugOptions::TileBorders); test.map.setZoom(1); test.map.addAnnotationIcon("default_marker", namedMarker("default_marker.png")); test.map.addAnnotation(SymbolAnnotation { Point<double>(10, 10), "default_marker" }); test.checkRendering("debug_sparse"); }
TEST(Annotations, UpdateSymbolAnnotationIcon) { AnnotationTest test; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); test.map.addAnnotationIcon("default_marker", namedMarker("default_marker.png")); test.map.addAnnotationIcon("flipped_marker", namedMarker("flipped_marker.png")); AnnotationID point = test.map.addAnnotation(SymbolAnnotation { Point<double> { 0, 0 }, "default_marker" }); test::render(test.map); test.map.updateAnnotation(point, SymbolAnnotation { Point<double> { 0, 0 }, "flipped_marker" }); test.checkRendering("update_icon"); }
TEST(Annotations, NonImmediateAdd) { AnnotationTest test; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); test::render(test.map); Polygon<double> polygon = {{ {{ { 0, 0 }, { 0, 45 }, { 45, 45 }, { 45, 0 } }} }}; FillAnnotation annotation { polygon }; annotation.color = { 255, 0, 0, 1 }; test.map.addAnnotation(annotation); test.checkRendering("non_immediate_add"); }
TEST(Annotations, UpdateSymbolAnnotationGeometry) { AnnotationTest test; test.map.getStyle().loadJSON(util::read_file("test/fixtures/api/empty.json")); test.map.addAnnotationImage(namedMarker("default_marker")); test.map.addAnnotationImage(namedMarker("flipped_marker")); AnnotationID point = test.map.addAnnotation(SymbolAnnotation { Point<double> { 0, 0 }, "default_marker" }); test.frontend.render(test.map); test.map.updateAnnotation(point, SymbolAnnotation { Point<double> { -10, 0 }, "default_marker" }); test.checkRendering("update_point"); }
TEST(Annotations, FillAnnotation) { AnnotationTest test; Polygon<double> polygon = {{ {{ { 0, 0 }, { 0, 45 }, { 45, 45 }, { 45, 0 } }} }}; FillAnnotation annotation { polygon }; annotation.color = { 255, 0, 0, 1 }; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); test.map.addAnnotation(annotation); test.checkRendering("fill_annotation"); test.map.setZoom(test.map.getMaxZoom()); test.checkRendering("fill_annotation_max_zoom"); }
TEST(Annotations, OverlappingFillAnnotation) { AnnotationTest test; Polygon<double> polygon = {{ {{ { 0, 0 }, { 0, 45 }, { 45, 45 }, { 45, 0 } }} }}; FillAnnotation underlaidAnnotation { polygon }; underlaidAnnotation.color = Color::green(); FillAnnotation overlaidAnnotation { polygon }; overlaidAnnotation.color = Color::red(); test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); test.map.addAnnotation(underlaidAnnotation); test.map.addAnnotation(overlaidAnnotation); test.checkRendering("overlapping_fill_annotation"); }
TEST(Annotations, LineAnnotation) { AnnotationTest test; LineString<double> line = {{ { 0, 0 }, { 45, 45 }, { 30, 0 } }}; LineAnnotation annotation { line }; annotation.color = { 255, 0, 0, 1 }; annotation.width = 5; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); test.map.addAnnotation(annotation); test.checkRendering("line_annotation"); test.map.setZoom(test.map.getMaxZoom()); test.checkRendering("line_annotation_max_zoom"); }
TEST(Annotations, ChangeMaxZoom) { AnnotationTest test; LineString<double> line = {{ { 0, 0 }, { 45, 45 }, { 30, 0 } }}; LineAnnotation annotation { line }; annotation.color = Color::red(); annotation.width = { 5 }; test.map.setMaxZoom(6); test.map.getStyle().loadJSON(util::read_file("test/fixtures/api/empty.json")); test.map.addAnnotation(annotation); test.map.setMaxZoom(14); test.map.setZoom(test.map.getMaxZoom()); test.checkRendering("line_annotation_max_zoom"); }
TEST(Annotations, UpdateFillAnnotationGeometry) { AnnotationTest test; FillAnnotation annotation { Polygon<double> {{ {{ { 0, 0 }, { 0, 45 }, { 45, 45 }, { 45, 0 } }} }} }; annotation.color = Color::red(); test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); AnnotationID fill = test.map.addAnnotation(annotation); test::render(test.map, test.view); annotation.geometry = Polygon<double> {{ {{ { 0, 0 }, { 0, 45 }, { 45, 0 } }} }}; test.map.updateAnnotation(fill, annotation); test.checkRendering("update_fill_geometry"); }
TEST(Annotations, UpdateFillAnnotationStyle) { AnnotationTest test; Polygon<double> polygon = {{ {{ { 0, 0 }, { 0, 45 }, { 45, 45 }, { 45, 0 } }} }}; FillAnnotation annotation { polygon }; annotation.color = { { 255, 0, 0, 1 } }; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); AnnotationID fill = test.map.addAnnotation(annotation); test::render(test.map, test.view); annotation.color = { { 0, 255, 0, 1 } }; test.map.updateAnnotation(fill, annotation); test.checkRendering("update_fill_style"); }
TEST(Annotations, UpdateLineAnnotationGeometry) { AnnotationTest test; LineAnnotation annotation { LineString<double> {{ { 0, 0 }, { 45, 45 }, { 30, 0 } }} }; annotation.color = Color::red(); annotation.width = { 5 }; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); AnnotationID line = test.map.addAnnotation(annotation); test::render(test.map, test.view); annotation.geometry = LineString<double> {{ { 0, 0 }, { -45, -45 } }}; test.map.updateAnnotation(line, annotation); test.checkRendering("update_line_geometry"); }
TEST(Annotations, RemoveShape) { AnnotationTest test; LineString<double> line = {{ { 0, 0 }, { 45, 45 } }}; LineAnnotation annotation { line }; annotation.color = { 255, 0, 0, 1 }; annotation.width = 5; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); AnnotationID shape = test.map.addAnnotation(annotation); test::render(test.map); test.map.removeAnnotation(shape); test.checkRendering("remove_shape"); }
TEST(Annotations, UpdateFillAnnotationStyle) { AnnotationTest test; Polygon<double> polygon = { {{ { 0, 0 }, { 0, 45 }, { 45, 45 }, { 45, 0 } }} }; FillAnnotation annotation { polygon }; annotation.color = Color::red(); test.map.getStyle().loadJSON(util::read_file("test/fixtures/api/empty.json")); AnnotationID fill = test.map.addAnnotation(annotation); test.frontend.render(test.map); annotation.color = Color::green(); test.map.updateAnnotation(fill, annotation); test.checkRendering("update_fill_style"); }
TEST(Annotations, SymbolAnnotation) { AnnotationTest test; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); test.map.addAnnotationIcon("default_marker", namedMarker("default_marker.png")); test.map.addAnnotation(SymbolAnnotation { Point<double>(0, 0), "default_marker" }); test.checkRendering("point_annotation"); auto size = test.view.size; auto screenBox = ScreenBox { {}, { double(size.width), double(size.height) } }; for (uint8_t zoom = test.map.getMinZoom(); zoom <= test.map.getMaxZoom(); ++zoom) { test.map.setZoom(zoom); test.checkRendering("point_annotation"); EXPECT_EQ(test.map.queryPointAnnotations(screenBox).size(), 1u); } }
TEST(Annotations, UpdateLineAnnotationStyle) { AnnotationTest test; LineAnnotation annotation { LineString<double> {{ { 0, 0 }, { 45, 45 }, { 30, 0 } }} }; annotation.color = Color::red(); annotation.width = { 5 }; test.map.getStyle().loadJSON(util::read_file("test/fixtures/api/empty.json")); AnnotationID line = test.map.addAnnotation(annotation); test.frontend.render(test.map); annotation.color = Color::green(); annotation.width = { 2 }; test.map.updateAnnotation(line, annotation); test.checkRendering("update_line_style"); }
TEST(Annotations, UpdateLineAnnotationStyle) { AnnotationTest test; LineAnnotation annotation { LineString<double> {{ { 0, 0 }, { 45, 45 }, { 30, 0 } }} }; annotation.color = { { 255, 0, 0, 1 } }; annotation.width = { 5 }; test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); AnnotationID line = test.map.addAnnotation(annotation); test::render(test.map, test.view); annotation.color = { { 0, 255, 0, 1 } }; annotation.width = { 2 }; test.map.updateAnnotation(line, annotation); test.checkRendering("update_line_style"); }
TEST(Annotations, AntimeridianAnnotationSmall) { AnnotationTest test; double antimeridian = 180; test.map.setLatLngZoom(mbgl::LatLng(0, antimeridian), 0); test.map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); LineString<double> line = {{ { antimeridian, 20 }, { antimeridian, -20 } }}; LineAnnotation lineAnnotation { line }; lineAnnotation.color = Color::red(); lineAnnotation.width = { 2 }; test.map.addAnnotation(lineAnnotation); Polygon<double> polygon = {{ {{ { antimeridian+10, 0 }, { antimeridian - 10, 10 }, { antimeridian-10, -10 } }} }}; FillAnnotation polygonAnnotation { polygon }; polygonAnnotation.color = Color::blue(); test.map.addAnnotation(polygonAnnotation); test.checkRendering("antimeridian_annotation_small"); }