summaryrefslogtreecommitdiff
path: root/platform/darwin/test/MGLResourceTests.mm
diff options
context:
space:
mode:
Diffstat (limited to 'platform/darwin/test/MGLResourceTests.mm')
-rw-r--r--platform/darwin/test/MGLResourceTests.mm74
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