summaryrefslogtreecommitdiff
path: root/test/fixtures/stub_file_source.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/fixtures/stub_file_source.cpp')
-rw-r--r--test/fixtures/stub_file_source.cpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/test/fixtures/stub_file_source.cpp b/test/fixtures/stub_file_source.cpp
new file mode 100644
index 0000000000..57bc178ac1
--- /dev/null
+++ b/test/fixtures/stub_file_source.cpp
@@ -0,0 +1,66 @@
+#include "stub_file_source.hpp"
+
+namespace mbgl {
+
+using namespace std::chrono_literals;
+
+class StubFileRequest : public FileRequest {
+public:
+ StubFileRequest(StubFileSource& fileSource_)
+ : fileSource(fileSource_) {
+ }
+
+ ~StubFileRequest() {
+ fileSource.pending.erase(this);
+ }
+
+ StubFileSource& fileSource;
+};
+
+StubFileSource::StubFileSource() {
+ timer.start(10ms, 10ms, [this] {
+ // 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);
+ }
+ });
+}
+
+StubFileSource::~StubFileSource() = default;
+
+std::unique_ptr<FileRequest> StubFileSource::request(const Resource& resource, Callback callback) {
+ auto req = std::make_unique<StubFileRequest>(*this);
+ pending.emplace(req.get(), std::make_pair(response(resource), callback));
+ return std::move(req);
+}
+
+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