diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-02-04 10:59:36 -0800 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2016-02-04 13:18:14 -0800 |
commit | 19aa090bdcff083c039c0767908c9608ad853403 (patch) | |
tree | 8eee0222ccca67bf5f2968bb04fc6a7c2bb14616 /test | |
parent | d7db9c775abafd852c3b935045443387191bf823 (diff) | |
download | qtlocation-mapboxgl-19aa090bdcff083c039c0767908c9608ad853403.tar.gz |
[tests] Don't call the callback for cancelled responses
StubFileSource gets an optional Response return type. Returning null means "cancelled; don't call the callback".
Fixes #3784
Diffstat (limited to 'test')
-rw-r--r-- | test/fixtures/stub_file_source.cpp | 6 | ||||
-rw-r--r-- | test/fixtures/stub_file_source.hpp | 18 | ||||
-rw-r--r-- | test/sprite/sprite_store.cpp | 2 | ||||
-rw-r--r-- | test/style/glyph_store.cpp | 2 | ||||
-rw-r--r-- | test/style/source.cpp | 4 |
5 files changed, 17 insertions, 15 deletions
diff --git a/test/fixtures/stub_file_source.cpp b/test/fixtures/stub_file_source.cpp index 57bc178ac1..9eb37b7928 100644 --- a/test/fixtures/stub_file_source.cpp +++ b/test/fixtures/stub_file_source.cpp @@ -22,7 +22,9 @@ StubFileSource::StubFileSource() { // Explicit move to avoid iterator invalidation if ~StubFileRequest gets called within the loop. auto pending_ = std::move(pending); for (auto& pair : pending_) { - pair.second.second(pair.second.first); + if (pair.second.first) { + pair.second.second(*pair.second.first); + } } }); } @@ -35,7 +37,7 @@ std::unique_ptr<FileRequest> StubFileSource::request(const Resource& resource, C return std::move(req); } -Response StubFileSource::defaultResponse(const Resource& resource) { +optional<Response> StubFileSource::defaultResponse(const Resource& resource) { switch (resource.kind) { case Resource::Kind::Style: if (!styleResponse) throw std::runtime_error("unexpected style request"); diff --git a/test/fixtures/stub_file_source.hpp b/test/fixtures/stub_file_source.hpp index 7cb9c89320..344dff6073 100644 --- a/test/fixtures/stub_file_source.hpp +++ b/test/fixtures/stub_file_source.hpp @@ -16,25 +16,25 @@ public: std::unique_ptr<FileRequest> request(const Resource&, Callback) override; // You can set the response callback on a global level by assigning this callback: - std::function<Response (const Resource&)> response = [this] (const Resource& resource) { + std::function<optional<Response> (const Resource&)> response = [this] (const Resource& resource) { return defaultResponse(resource); }; // Or set per-kind responses by setting these callbacks: - std::function<Response (const Resource&)> styleResponse; - std::function<Response (const Resource&)> sourceResponse; - std::function<Response (const Resource&)> tileResponse; - std::function<Response (const Resource&)> glyphsResponse; - std::function<Response (const Resource&)> spriteJSONResponse; - std::function<Response (const Resource&)> spriteImageResponse; + std::function<optional<Response> (const Resource&)> styleResponse; + std::function<optional<Response> (const Resource&)> sourceResponse; + std::function<optional<Response> (const Resource&)> tileResponse; + std::function<optional<Response> (const Resource&)> glyphsResponse; + std::function<optional<Response> (const Resource&)> spriteJSONResponse; + std::function<optional<Response> (const Resource&)> spriteImageResponse; private: friend class StubFileRequest; // The default behavior is to throw if no per-kind callback has been set. - Response defaultResponse(const Resource&); + optional<Response> defaultResponse(const Resource&); - std::unordered_map<FileRequest*, std::pair<Response, Callback>> pending; + std::unordered_map<FileRequest*, std::pair<optional<Response>, Callback>> pending; util::Timer timer; }; diff --git a/test/sprite/sprite_store.cpp b/test/sprite/sprite_store.cpp index 08977eac4f..ee6ea2e9e0 100644 --- a/test/sprite/sprite_store.cpp +++ b/test/sprite/sprite_store.cpp @@ -299,7 +299,7 @@ TEST(SpriteStore, LoadingCancel) { test.fileSource.spriteImageResponse = test.fileSource.spriteJSONResponse = [&] (const Resource&) { test.end(); - return Response(); + return optional<Response>(); }; test.observer.spriteLoaded = [&] () { diff --git a/test/style/glyph_store.cpp b/test/style/glyph_store.cpp index a4bc0e3135..55f19672af 100644 --- a/test/style/glyph_store.cpp +++ b/test/style/glyph_store.cpp @@ -134,7 +134,7 @@ TEST(GlyphStore, LoadingCancel) { test.fileSource.glyphsResponse = [&] (const Resource&) { test.end(); - return Response(); + return optional<Response>(); }; test.observer.glyphsLoaded = [&] (const std::string&, const GlyphRange&) { diff --git a/test/style/source.cpp b/test/style/source.cpp index d1944f3842..528059ae9f 100644 --- a/test/style/source.cpp +++ b/test/style/source.cpp @@ -240,7 +240,7 @@ TEST(Source, RasterTileCancel) { test.fileSource.tileResponse = [&] (const Resource&) { test.end(); - return Response(); + return optional<Response>(); }; test.observer.tileLoaded = [&] (Source&, const TileID&, bool) { @@ -267,7 +267,7 @@ TEST(Source, VectorTileCancel) { test.fileSource.tileResponse = [&] (const Resource&) { test.end(); - return Response(); + return optional<Response>(); }; test.observer.tileLoaded = [&] (Source&, const TileID&, bool) { |