* Refactoring online file source so that tile server configuration is not hardcoded - part 1 * Added default templates * Update from master * Renaming MGLAccountManager to MGLSettings. Passing ResourceOptions and TileServerOptions to relevant classes and method in order to remove mapbox hardocded configuration * Fixing build * Addedm missing theme * Unit tests fixes * Fixing unit tests, adding factory methods for creating predefined configuration. * Fixing mapbox unit tests * Additional unit test fixes * Making MapboxConfiguration default * Making get/set resource options available in all classes that inherits from FileSource * Making get/set resource options available in all classes that inherits from FileSource - part 2 * Fixes for Android * Disable test coverage reports * Disable test coverage reports * Disable test coverage reports * Disable test coverage reports * Removing hardcoded configuration in iOS project - part 1 * Fixing wrong file extension, making use of tile server options. * Use apiKey and MGL_API_KEY everywhere * Just a rename * Re-enabling tests and improving MGLSettings init * Removing mapbox hardcoded configuration, using api key everywhere, implementing JNI conversion for TileServerOptions * Lint issues. * Integrating configurable tile server properties into Android SDK - part 2 * Removing mabox accounts * Exposing multiple configurations to Android SDK - bug fixes * Removing TileServerOptions from public interface - native methods dont work before mapbox-gl library is loaded * Adding support for configurable predefined styles * Migrating predefined styles in test app + cleanup * Parameter fix * Bug fixes * Fixing render test build * Fixing offline tester * Fixing benchmark tool * Fix: typo in method name * Adding code for public access to TileServerOptions * Bug fixes and debug code removal * Fixes for macOS, adding unit tests from MapLibre, removing redundant members from OnlineFileSource * Unit test fixes * MacOS test app - migrating to configurable tile server options, part 1 * Fixing offline maps * Migrating macOS test app to MapTiler * Minor improvements * Putting back apiKey test * Added unit tests for MapTiler configuration * Migrating test resources to MapTiler * minor fix * A few fixes * Fixing macOS tests, removing feedback functionality * Migrating ios test app to MapTiler * Migrating ui tests * UI tests fix * Benchmarking app fix * Cleanup and strings updates * Migrating benchmark app to maptiler * API key injection in benchmark app * Putting back release configuration * Additional tests and fixing issues identified by thread sanitizer. * Removing test filters * Fixes and addressing lint issues * More Maptiler tests + minro fix * Android instrumentation test migration to MapTiler. Exposing missing TileServerOptions in Android SDK. Minor fixes. * No requirements on API key format. * Fixing offline cache test tool * Adding configurable domain name for sources, adding source domain int MapTiler configuration, cleanup * Migrating tests to MapTiler, adding code for canonicalizing URLs, removing mapbox stuff from comments, cleanup * More tests * Updated database size * Lint issues * Fixed test * Updating developer config API key * Fixes for Android, propagaing updated tileServerOptions to native file sources, more tests * Just a few more fixes * Propagating updated settings to file sources + additional unit test * Lint issues * Removing test filter and fixing incorrect uri * Release preparation * macos release notes
178 lines
4.9 KiB
C++
178 lines
4.9 KiB
C++
#include <mbgl/test/util.hpp>
|
|
#include <mbgl/test/fixture_log_observer.hpp>
|
|
#include <mbgl/test/stub_file_source.hpp>
|
|
|
|
#include <mbgl/sprite/sprite_loader.hpp>
|
|
#include <mbgl/sprite/sprite_loader_observer.hpp>
|
|
#include <mbgl/sprite/sprite_parser.hpp>
|
|
#include <mbgl/util/io.hpp>
|
|
#include <mbgl/util/image.hpp>
|
|
#include <mbgl/util/run_loop.hpp>
|
|
#include <mbgl/util/string.hpp>
|
|
|
|
#include <utility>
|
|
|
|
using namespace mbgl;
|
|
using namespace mbgl::style;
|
|
|
|
class StubSpriteLoaderObserver : public SpriteLoaderObserver {
|
|
public:
|
|
void onSpriteLoaded(std::vector<Immutable<style::Image::Impl>> images) override {
|
|
if (spriteLoaded) spriteLoaded(std::move(images));
|
|
}
|
|
|
|
void onSpriteError(std::exception_ptr error) override {
|
|
if (spriteError) spriteError(error);
|
|
}
|
|
|
|
std::function<void(std::vector<Immutable<style::Image::Impl>>)> spriteLoaded;
|
|
std::function<void (std::exception_ptr)> spriteError;
|
|
};
|
|
|
|
class SpriteLoaderTest {
|
|
public:
|
|
SpriteLoaderTest() = default;
|
|
|
|
util::RunLoop loop;
|
|
StubFileSource fileSource;
|
|
StubSpriteLoaderObserver observer;
|
|
SpriteLoader spriteLoader{ 1 };
|
|
|
|
void run() {
|
|
// Squelch logging.
|
|
Log::setObserver(std::make_unique<Log::NullObserver>());
|
|
|
|
spriteLoader.setObserver(&observer);
|
|
spriteLoader.load("test/fixtures/resources/sprite", fileSource);
|
|
|
|
loop.run();
|
|
}
|
|
|
|
void end() {
|
|
loop.stop();
|
|
}
|
|
};
|
|
|
|
Response successfulSpriteImageResponse(const Resource& resource) {
|
|
EXPECT_EQ("test/fixtures/resources/sprite.png", resource.url);
|
|
Response response;
|
|
response.data = std::make_unique<std::string>(util::read_file(resource.url));
|
|
return response;
|
|
}
|
|
|
|
Response successfulSpriteJSONResponse(const Resource& resource) {
|
|
EXPECT_EQ("test/fixtures/resources/sprite.json", resource.url);
|
|
Response response;
|
|
response.data = std::make_unique<std::string>(util::read_file(resource.url));
|
|
return response;
|
|
}
|
|
|
|
Response failedSpriteResponse(const Resource&) {
|
|
Response response;
|
|
response.error = std::make_unique<Response::Error>(
|
|
Response::Error::Reason::Other,
|
|
"Failed by the test case");
|
|
return response;
|
|
}
|
|
|
|
Response corruptSpriteResponse(const Resource&) {
|
|
Response response;
|
|
response.data = std::make_unique<std::string>("CORRUPT");
|
|
return response;
|
|
}
|
|
|
|
TEST(SpriteLoader, LoadingSuccess) {
|
|
SpriteLoaderTest test;
|
|
|
|
test.fileSource.spriteImageResponse = successfulSpriteImageResponse;
|
|
test.fileSource.spriteJSONResponse = successfulSpriteJSONResponse;
|
|
|
|
test.observer.spriteError = [&] (std::exception_ptr error) {
|
|
FAIL() << util::toString(error);
|
|
test.end();
|
|
};
|
|
|
|
test.observer.spriteLoaded = [&](std::vector<Immutable<style::Image::Impl>> images) {
|
|
EXPECT_EQ(images.size(), 418u);
|
|
test.end();
|
|
};
|
|
|
|
test.run();
|
|
}
|
|
|
|
TEST(SpriteLoader, JSONLoadingFail) {
|
|
SpriteLoaderTest test;
|
|
|
|
test.fileSource.spriteImageResponse = successfulSpriteImageResponse;
|
|
test.fileSource.spriteJSONResponse = failedSpriteResponse;
|
|
|
|
test.observer.spriteError = [&] (std::exception_ptr error) {
|
|
EXPECT_TRUE(error != nullptr);
|
|
EXPECT_EQ("Failed by the test case", util::toString(error));
|
|
test.end();
|
|
};
|
|
|
|
test.run();
|
|
}
|
|
|
|
TEST(SpriteLoader, ImageLoadingFail) {
|
|
SpriteLoaderTest test;
|
|
|
|
test.fileSource.spriteImageResponse = failedSpriteResponse;
|
|
test.fileSource.spriteJSONResponse = successfulSpriteJSONResponse;
|
|
|
|
test.observer.spriteError = [&] (std::exception_ptr error) {
|
|
EXPECT_TRUE(error != nullptr);
|
|
EXPECT_EQ("Failed by the test case", util::toString(error));
|
|
test.end();
|
|
};
|
|
|
|
test.run();
|
|
}
|
|
|
|
TEST(SpriteLoader, JSONLoadingCorrupted) {
|
|
SpriteLoaderTest test;
|
|
|
|
test.fileSource.spriteImageResponse = successfulSpriteImageResponse;
|
|
test.fileSource.spriteJSONResponse = corruptSpriteResponse;
|
|
|
|
test.observer.spriteError = [&] (std::exception_ptr error) {
|
|
EXPECT_TRUE(error != nullptr);
|
|
EXPECT_EQ("Failed to parse JSON: Invalid value. at offset 0", util::toString(error));
|
|
test.end();
|
|
};
|
|
|
|
test.run();
|
|
}
|
|
|
|
TEST(SpriteLoader, ImageLoadingCorrupted) {
|
|
SpriteLoaderTest test;
|
|
|
|
test.fileSource.spriteImageResponse = corruptSpriteResponse;
|
|
test.fileSource.spriteJSONResponse = successfulSpriteJSONResponse;
|
|
|
|
test.observer.spriteError = [&] (std::exception_ptr error) {
|
|
EXPECT_TRUE(error != nullptr);
|
|
// Not asserting on platform-specific error text.
|
|
test.end();
|
|
};
|
|
|
|
test.run();
|
|
}
|
|
|
|
TEST(SpriteLoader, LoadingCancel) {
|
|
SpriteLoaderTest test;
|
|
|
|
test.fileSource.spriteImageResponse =
|
|
test.fileSource.spriteJSONResponse = [&] (const Resource&) {
|
|
test.end();
|
|
return optional<Response>();
|
|
};
|
|
|
|
test.observer.spriteLoaded = [&](std::vector<Immutable<style::Image::Impl>>) {
|
|
FAIL() << "Should never be called";
|
|
};
|
|
|
|
test.run();
|
|
}
|