summaryrefslogtreecommitdiff
path: root/test/src/mbgl/test/stub_file_source.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/src/mbgl/test/stub_file_source.cpp')
-rw-r--r--test/src/mbgl/test/stub_file_source.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/test/src/mbgl/test/stub_file_source.cpp b/test/src/mbgl/test/stub_file_source.cpp
new file mode 100644
index 0000000000..89ccb3b335
--- /dev/null
+++ b/test/src/mbgl/test/stub_file_source.cpp
@@ -0,0 +1,69 @@
+#include <mbgl/test/stub_file_source.hpp>
+
+namespace mbgl {
+
+using namespace std::chrono_literals;
+
+class StubFileRequest : public AsyncRequest {
+public:
+ StubFileRequest(StubFileSource& fileSource_)
+ : fileSource(fileSource_) {
+ }
+
+ ~StubFileRequest() {
+ fileSource.pending.erase(this);
+ }
+
+ StubFileSource& fileSource;
+};
+
+StubFileSource::StubFileSource() {
+ timer.start(10ms, 10ms, [this] {
+ // Explicit copy to avoid iterator invalidation if ~StubFileRequest gets called within the loop.
+ auto pending_ = pending;
+ for (auto& pair : pending_) {
+ optional<Response> res = std::get<1>(pair.second)(std::get<0>(pair.second));
+ if (res) {
+ std::get<2>(pair.second)(*res);
+ }
+ }
+ });
+}
+
+StubFileSource::~StubFileSource() = default;
+
+std::unique_ptr<AsyncRequest> StubFileSource::request(const Resource& resource, Callback callback) {
+ auto req = std::make_unique<StubFileRequest>(*this);
+ pending.emplace(req.get(), std::make_tuple(resource, response, callback));
+ return std::move(req);
+}
+
+optional<Response> StubFileSource::defaultResponse(const Resource& resource) {
+ switch (resource.kind) {
+ case Resource::Kind::Style:
+ if (!styleResponse) throw std::runtime_error("unexpected style request");
+ return styleResponse(resource);
+ case Resource::Kind::Source:
+ if (!sourceResponse) throw std::runtime_error("unexpected source request");
+ return sourceResponse(resource);
+ case Resource::Kind::Tile:
+ if (!tileResponse) throw std::runtime_error("unexpected tile request");
+ return tileResponse(resource);
+ case Resource::Kind::Glyphs:
+ if (!glyphsResponse) throw std::runtime_error("unexpected glyphs request");
+ return glyphsResponse(resource);
+ case Resource::Kind::SpriteJSON:
+ if (!spriteJSONResponse) throw std::runtime_error("unexpected sprite JSON request");
+ return spriteJSONResponse(resource);
+ case Resource::Kind::SpriteImage:
+ if (!spriteImageResponse) throw std::runtime_error("unexpected sprite image request");
+ return spriteImageResponse(resource);
+ case Resource::Kind::Unknown:
+ throw std::runtime_error("unknown resource type");
+ }
+
+ // The above switch is exhaustive, but placate GCC nonetheless:
+ return Response();
+}
+
+} // namespace mbgl