diff --git a/test/headless/headless.cpp b/test/headless/headless.cpp index cccd0d44b..aac5dda83 100644 --- a/test/headless/headless.cpp +++ b/test/headless/headless.cpp @@ -16,10 +16,10 @@ #include #include -#include - #include +#include + void rewriteLocalScheme(rapidjson::Value &value, rapidjson::Document::AllocatorType &allocator) { ASSERT_TRUE(value.IsString()); auto string = std::string { value.GetString(),value.GetStringLength() }; @@ -154,32 +154,15 @@ TEST_P(HeadlessTest, render) { map.setLatLngZoom(mbgl::LatLng(latitude, longitude), zoom); map.setBearing(bearing); - struct Data { - std::string path; - std::unique_ptr image; - }; + std::promise promise; - uv_async_t *async = new uv_async_t; - async->data = new Data { "test/suite/tests/" + base + "/" + name + "/actual.png", nullptr }; - uv_async_init(uv_default_loop(), async, [](uv_async_t *as, int) { - auto data = std::unique_ptr(reinterpret_cast(as->data)); - as->data = nullptr; - uv_close(reinterpret_cast(as), [](uv_handle_t *handle) { - delete reinterpret_cast(handle); - }); - - assert(data); - const std::string png = util::compress_png(data->image->width, data->image->height, data->image->pixels.get()); - util::write_file(data->path, png); + map.renderStill([&](std::unique_ptr image) { + 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(); }); - map.renderStill([async](std::unique_ptr image) { - reinterpret_cast(async->data)->image = std::move(image); - uv_async_send(async); - }); - - // This loop will terminate once the async was fired. - uv_run(uv_default_loop(), UV_RUN_DEFAULT); + promise.get_future().get(); map.stop(); }