summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-02-04 10:59:36 -0800
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-02-04 13:18:14 -0800
commit19aa090bdcff083c039c0767908c9608ad853403 (patch)
tree8eee0222ccca67bf5f2968bb04fc6a7c2bb14616
parentd7db9c775abafd852c3b935045443387191bf823 (diff)
downloadqtlocation-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
-rw-r--r--test/fixtures/stub_file_source.cpp6
-rw-r--r--test/fixtures/stub_file_source.hpp18
-rw-r--r--test/sprite/sprite_store.cpp2
-rw-r--r--test/style/glyph_store.cpp2
-rw-r--r--test/style/source.cpp4
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) {