diff --git a/test/fixtures/headless/pois.json b/test/fixtures/headless/pois.json new file mode 100644 index 000000000..7a4488608 --- /dev/null +++ b/test/fixtures/headless/pois.json @@ -0,0 +1,26 @@ +{ + "version": 7, + "name": "POIs", + "sources": { + "mapbox": { + "type": "vector", + "url": "asset://TEST_DATA/fixtures/tiles/streets.json" + } + }, + "layers": [{ + "id": "background", + "type": "background", + "paint": { + "background-color": "#CCCCCC" + } + }, { + "id": "pois", + "type": "symbol", + "source": "mapbox", + "source-layer": "poi_label", + "filter": ["in", "maki", "cafe", "bakery"], + "layout": { + "icon-image": "{maki}" + } + }] +} diff --git a/test/fixtures/tiles/streets/15-17605-10749.vector.pbf b/test/fixtures/tiles/streets/15-17605-10749.vector.pbf new file mode 100644 index 000000000..1f43a6c48 Binary files /dev/null and b/test/fixtures/tiles/streets/15-17605-10749.vector.pbf differ diff --git a/test/fixtures/tiles/streets/15-17605-10750.vector.pbf b/test/fixtures/tiles/streets/15-17605-10750.vector.pbf new file mode 100644 index 000000000..1ad616a56 Binary files /dev/null and b/test/fixtures/tiles/streets/15-17605-10750.vector.pbf differ diff --git a/test/headless/custom_sprites.cpp b/test/headless/custom_sprites.cpp new file mode 100644 index 000000000..e2c479a5c --- /dev/null +++ b/test/headless/custom_sprites.cpp @@ -0,0 +1,61 @@ +#include "../fixtures/util.hpp" +#include "../fixtures/fixture_log_observer.hpp" + +#include +#include +#include +#include + +#include + +#include +#include +#include + +#include + +using namespace mbgl; + +TEST(Headless, CustomSpriteImages) { + FixtureLog log; + + auto display = std::make_shared(); + HeadlessView view(display, 1); + view.resize(256, 256); + DefaultFileSource fileSource(nullptr); + + const auto style = util::read_file("test/fixtures/headless/pois.json"); + + Map map(view, fileSource, MapMode::Still); + + map.setLatLngZoom(LatLng{ 52.499167, 13.418056 }, 15); + + map.setStyleJSON(style, "test/suite"); + map.setSprite("cafe", + std::make_shared(12, 12, 1, std::string(12 * 12 * 4, '\xFF'))); + std::promise> promise; + map.renderStill([&promise](std::exception_ptr error, std::unique_ptr image) { + if (error) { + promise.set_exception(error); + } else { + promise.set_value(std::move(image)); + } + }); + auto result = promise.get_future().get(); + ASSERT_EQ(256, result->width); + ASSERT_EQ(256, result->height); + + EXPECT_EQ( + 21u, + log.count({ + EventSeverity::Info, Event::Sprite, int64_t(-1), "Can't find sprite named 'bakery'", + })); + + // const size_t bytes = result->width * result->height * 4; + // const auto hash = test::crc64(reinterpret_cast(result->pixels.get()), bytes); + // EXPECT_EQ(0xC40A4BCD76AEC564u, hash) << std::hex << hash; + + // const std::string png = util::compress_png(result->width, result->height, + // result->pixels.get()); + // util::write_file("test/fixtures/headless/1.actual.png", png); +} diff --git a/test/headless/headless.cpp b/test/headless/headless.cpp index 60f72b0be..80951433e 100644 --- a/test/headless/headless.cpp +++ b/test/headless/headless.cpp @@ -150,7 +150,11 @@ TEST_P(HeadlessTest, render) { map.setLatLngZoom(mbgl::LatLng(latitude, longitude), zoom); map.setBearing(bearing); - map.renderStill([&](std::exception_ptr, std::unique_ptr image) { + map.renderStill([&](std::exception_ptr error, std::unique_ptr image) { + if (error) { + promise.set_exception(error); + return; + } const std::string png = util::compress_png(image->width, image->height, image->pixels.get()); util::write_file("test/suite/tests/" + base + "/" + name + "/actual.png", png); promise.set_value(); diff --git a/test/test.gypi b/test/test.gypi index f5930867b..8cf7b1b06 100644 --- a/test/test.gypi +++ b/test/test.gypi @@ -46,6 +46,7 @@ 'api/repeated_render.cpp', 'api/set_style.cpp', + 'headless/custom_sprites.cpp', 'headless/headless.cpp', 'miscellaneous/clip_ids.cpp',