[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
This commit is contained in:
6
test/fixtures/stub_file_source.cpp
vendored
6
test/fixtures/stub_file_source.cpp
vendored
@@ -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");
|
||||
|
||||
18
test/fixtures/stub_file_source.hpp
vendored
18
test/fixtures/stub_file_source.hpp
vendored
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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 = [&] () {
|
||||
|
||||
@@ -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&) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user