diff options
Diffstat (limited to 'platform/darwin/test/MGLResourceTests.mm')
-rw-r--r-- | platform/darwin/test/MGLResourceTests.mm | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/platform/darwin/test/MGLResourceTests.mm b/platform/darwin/test/MGLResourceTests.mm new file mode 100644 index 0000000000..0420997c39 --- /dev/null +++ b/platform/darwin/test/MGLResourceTests.mm @@ -0,0 +1,74 @@ +#import <Mapbox/Mapbox.h> +#import <XCTest/XCTest.h> +#import <mbgl/storage/resource.hpp> + +namespace mbgl { + extern NSURL *resourceURLWithAccountType(const Resource& resource, NSInteger accountType); +} + +@interface MGLResourceTests : XCTestCase +@end + +@implementation MGLResourceTests + +- (void)testOfflineQueryParameterIsAddedForOfflineResource { + + using namespace mbgl; + + std::string testURL = "test://mapbox.com/testing_offline_query?a=one&b=two"; + + // Is our test URL "correct" for subsequent checks? + { + NSURL *url = [NSURL URLWithString:@(testURL.c_str())]; + NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; + NSArray<NSURLQueryItem *> *items = components.queryItems; + XCTAssert(items.count == 2 ); + } + + Resource resource(Resource::Kind::Unknown, testURL); + + // By default, resource are NOT offline + { + NSURL *url = resourceURLWithAccountType(resource, 0); + NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; + for (NSURLQueryItem *item in components.queryItems) { + XCTAssertFalse([item.name isEqualToString:@"offline"]); + } + } + + // Now check offline + resource.setUsage(Resource::Usage::Offline); + + { + NSURL *url = resourceURLWithAccountType(resource, 0); + NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; + + // For offline, we expect a single offline param and a sku param + NSInteger foundCount = 0; + +#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR + for (NSURLQueryItem *item in components.queryItems) { + if (([item.name isEqualToString:@"offline"] && [item.value isEqualToString:@"true"]) || + ([item.name isEqualToString:@"a"] && [item.value isEqualToString:@"one"]) || + ([item.name isEqualToString:@"b"] && [item.value isEqualToString:@"two"]) || + ([item.name isEqualToString:@"sku"])) { + foundCount++; + } + } + + XCTAssert(foundCount == 4); +#else + // NOTE: Currently the macOS SDK does not supply the sku or offline query parameters + for (NSURLQueryItem *item in components.queryItems) { + if (([item.name isEqualToString:@"a"] && [item.value isEqualToString:@"one"]) || + ([item.name isEqualToString:@"b"] && [item.value isEqualToString:@"two"])) { + foundCount++; + } + } + + XCTAssert(foundCount == 2); +#endif + } +} + +@end |