From 5ff4110243482952ed1621b71e53be298fb71472 Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Wed, 15 Mar 2017 16:06:52 +0200 Subject: [PATCH] [core] Pass std::exception_ptr in MapObserver::onDidFailLoadingMap --- include/mbgl/map/map_observer.hpp | 3 ++- src/mbgl/map/map.cpp | 4 ++-- test/map/map.test.cpp | 34 ++++++++++++------------------- 3 files changed, 17 insertions(+), 24 deletions(-) diff --git a/include/mbgl/map/map_observer.hpp b/include/mbgl/map/map_observer.hpp index e0a734cf5..7f5073ba2 100644 --- a/include/mbgl/map/map_observer.hpp +++ b/include/mbgl/map/map_observer.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include namespace mbgl { @@ -26,7 +27,7 @@ public: virtual void onCameraDidChange(CameraChangeMode) {} virtual void onWillStartLoadingMap() {} virtual void onDidFinishLoadingMap() {} - virtual void onDidFailLoadingMap() {} + virtual void onDidFailLoadingMap(std::exception_ptr) {} virtual void onWillStartRenderingFrame() {} virtual void onDidFinishRenderingFrame(RenderMode) {} virtual void onWillStartRenderingMap() {} diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index 39aa5a2d0..32fbd3f0c 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -1102,8 +1102,8 @@ void Map::Impl::onStyleLoaded() { observer.onDidFinishLoadingStyle(); } -void Map::Impl::onStyleError(std::exception_ptr) { - observer.onDidFailLoadingMap(); +void Map::Impl::onStyleError(std::exception_ptr error) { + observer.onDidFailLoadingMap(error); } void Map::Impl::onResourceError(std::exception_ptr error) { diff --git a/test/map/map.test.cpp b/test/map/map.test.cpp index c5d579be3..2d995fc59 100644 --- a/test/map/map.test.cpp +++ b/test/map/map.test.cpp @@ -28,15 +28,7 @@ class BackendTest : public HeadlessBackend { public: BackendTest() : HeadlessBackend(test::sharedDisplay()) {} - void setDidFailLoadingMapCallback(std::function&& callback) { - didFailLoadingMapCallback = std::move(callback); - } - - void setDidFinishLoadingStyleCallback(std::function&& callback) { - didFinishLoadingStyleCallback = std::move(callback); - } - - void onDidFailLoadingMap() final { + void onDidFailLoadingMap(std::exception_ptr) final { if (didFailLoadingMapCallback) { didFailLoadingMapCallback(); } @@ -113,9 +105,9 @@ TEST(Map, SetStyleInvalidJSON) { Log::setObserver(std::make_unique()); bool fail = false; - test.backend.setDidFailLoadingMapCallback([&]() { + test.backend.didFailLoadingMapCallback = [&]() { fail = true; - }); + }; { Map map(test.backend, test.view.getSize(), 1, test.fileSource, test.threadPool, @@ -144,9 +136,9 @@ TEST(Map, SetStyleInvalidURL) { return response; }; - test.backend.setDidFailLoadingMapCallback([&]() { + test.backend.didFailLoadingMapCallback = [&]() { test.runLoop.stop(); - }); + }; Map map(test.backend, test.view.getSize(), 1, test.fileSource, test.threadPool, MapMode::Still); map.setStyleURL("mapbox://bar"); @@ -257,9 +249,9 @@ TEST(Map, StyleLoadedSignal) { // The map should emit a signal on style loaded bool emitted = false; - test.backend.setDidFinishLoadingStyleCallback([&]() { + test.backend.didFinishLoadingStyleCallback = [&]() { emitted = true; - }); + }; map.setStyleJSON(util::read_file("test/fixtures/api/empty.json")); EXPECT_TRUE(emitted); @@ -277,9 +269,9 @@ TEST(Map, TEST_REQUIRES_SERVER(StyleNetworkErrorRetry)) { Map map(test.backend, test.view.getSize(), 1, fileSource, test.threadPool, MapMode::Still); map.setStyleURL("http://127.0.0.1:3000/style-fail-once-500"); - test.backend.setDidFinishLoadingStyleCallback([&]() { + test.backend.didFinishLoadingStyleCallback = [&]() { test.runLoop.stop(); - }); + }; test.runLoop.run(); } @@ -295,15 +287,15 @@ TEST(Map, TEST_REQUIRES_SERVER(StyleNotFound)) { util::Timer timer; // Not found errors should not trigger a retry like other errors. - test.backend.setDidFinishLoadingStyleCallback([&]() { + test.backend.didFinishLoadingStyleCallback = [&]() { FAIL() << "Should not retry on not found!"; - }); + }; - test.backend.setDidFailLoadingMapCallback([&]() { + test.backend.didFailLoadingMapCallback = [&]() { timer.start(Milliseconds(1100), 0s, [&] { test.runLoop.stop(); }); - }); + }; test.runLoop.run();