diff options
Diffstat (limited to 'platform/darwin/test/MGLStyleTests.mm')
-rw-r--r-- | platform/darwin/test/MGLStyleTests.mm | 500 |
1 files changed, 0 insertions, 500 deletions
diff --git a/platform/darwin/test/MGLStyleTests.mm b/platform/darwin/test/MGLStyleTests.mm deleted file mode 100644 index ec2605646c..0000000000 --- a/platform/darwin/test/MGLStyleTests.mm +++ /dev/null @@ -1,500 +0,0 @@ -#import <Mapbox/Mapbox.h> - -#import "NSBundle+MGLAdditions.h" -#import "MGLVectorTileSource_Private.h" - -#import <mbgl/util/default_styles.hpp> - -#import <XCTest/XCTest.h> -#if TARGET_OS_IPHONE - #import <UIKit/UIKit.h> -#else - #import <Cocoa/Cocoa.h> -#endif -#import <objc/runtime.h> - -@interface MGLStyleTests : XCTestCase <MGLMapViewDelegate> - -@property (nonatomic) MGLMapView *mapView; -@property (nonatomic) MGLStyle *style; - -@end - -@implementation MGLStyleTests { - XCTestExpectation *_styleLoadingExpectation; -} - -- (void)setUp { - [super setUp]; - - [MGLAccountManager setAccessToken:@"pk.feedcafedeadbeefbadebede"]; - NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]; - self.mapView = [[MGLMapView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) styleURL:styleURL]; - self.mapView.delegate = self; - if (!self.mapView.style) { - _styleLoadingExpectation = [self expectationWithDescription:@"Map view should finish loading style."]; - [self waitForExpectationsWithTimeout:10 handler:nil]; - } -} - -- (void)mapView:(MGLMapView *)mapView didFinishLoadingStyle:(MGLStyle *)style { - XCTAssertNotNil(mapView.style); - XCTAssertEqual(mapView.style, style); - - [_styleLoadingExpectation fulfill]; -} - -- (void)tearDown { - _styleLoadingExpectation = nil; - self.mapView = nil; - - [super tearDown]; -} - -- (MGLStyle *)style { - return self.mapView.style; -} - -- (void)testUnversionedStyleURLs { - XCTAssertEqual(mbgl::util::default_styles::streets.currentVersion, MGLStyleDefaultVersion, - "mbgl::util::default_styles::streets.currentVersion and MGLStyleDefaultVersion disagree."); - - XCTAssertEqualObjects([MGLStyle streetsStyleURL].absoluteString, @(mbgl::util::default_styles::streets.url)); - XCTAssertEqualObjects([MGLStyle outdoorsStyleURL].absoluteString, @(mbgl::util::default_styles::outdoors.url)); - XCTAssertEqualObjects([MGLStyle lightStyleURL].absoluteString, @(mbgl::util::default_styles::light.url)); - XCTAssertEqualObjects([MGLStyle darkStyleURL].absoluteString, @(mbgl::util::default_styles::dark.url)); - XCTAssertEqualObjects([MGLStyle satelliteStyleURL].absoluteString, @(mbgl::util::default_styles::satellite.url)); - XCTAssertEqualObjects([MGLStyle satelliteStreetsStyleURL].absoluteString, @(mbgl::util::default_styles::satelliteStreets.url)); -} - -- (void)testVersionedStyleURLs { - // Test that all the default styles have publicly-declared MGLStyle class - // methods and that the URLs all have the right values. - XCTAssertEqualObjects([MGLStyle streetsStyleURLWithVersion:mbgl::util::default_styles::streets.currentVersion].absoluteString, - @(mbgl::util::default_styles::streets.url)); - XCTAssertEqualObjects([MGLStyle streetsStyleURLWithVersion:99].absoluteString, - @"mapbox://styles/mapbox/streets-v99"); - XCTAssertEqualObjects([MGLStyle outdoorsStyleURLWithVersion:mbgl::util::default_styles::outdoors.currentVersion].absoluteString, - @(mbgl::util::default_styles::outdoors.url)); - XCTAssertEqualObjects([MGLStyle outdoorsStyleURLWithVersion:99].absoluteString, - @"mapbox://styles/mapbox/outdoors-v99"); - XCTAssertEqualObjects([MGLStyle lightStyleURLWithVersion:mbgl::util::default_styles::light.currentVersion].absoluteString, - @(mbgl::util::default_styles::light.url)); - XCTAssertEqualObjects([MGLStyle lightStyleURLWithVersion:99].absoluteString, - @"mapbox://styles/mapbox/light-v99"); - XCTAssertEqualObjects([MGLStyle darkStyleURLWithVersion:mbgl::util::default_styles::dark.currentVersion].absoluteString, - @(mbgl::util::default_styles::dark.url)); - XCTAssertEqualObjects([MGLStyle darkStyleURLWithVersion:99].absoluteString, - @"mapbox://styles/mapbox/dark-v99"); - XCTAssertEqualObjects([MGLStyle satelliteStyleURLWithVersion:mbgl::util::default_styles::satellite.currentVersion].absoluteString, - @(mbgl::util::default_styles::satellite.url)); - XCTAssertEqualObjects([MGLStyle satelliteStyleURLWithVersion:99].absoluteString, - @"mapbox://styles/mapbox/satellite-v99"); - XCTAssertEqualObjects([MGLStyle satelliteStreetsStyleURLWithVersion:mbgl::util::default_styles::satelliteStreets.currentVersion].absoluteString, - @(mbgl::util::default_styles::satelliteStreets.url)); - XCTAssertEqualObjects([MGLStyle satelliteStreetsStyleURLWithVersion:99].absoluteString, - @"mapbox://styles/mapbox/satellite-streets-v99"); - - static_assert(6 == mbgl::util::default_styles::numOrderedStyles, - "MGLStyleTests isn’t testing all the styles in mbgl::util::default_styles."); -} - -- (void)testStyleURLDeclarations { - // Make sure this test is comprehensive. - const unsigned numImplicitArgs = 2 /* _cmd, self */; - unsigned numMethods = 0; - Method *methods = class_copyMethodList(object_getClass([MGLStyle class]), &numMethods); - unsigned numVersionedMethods = 0; - for (NSUInteger i = 0; i < numMethods; i++) { - Method method = methods[i]; - SEL selector = method_getName(method); - NSString *name = @(sel_getName(selector)); - unsigned numArgs = method_getNumberOfArguments(method); - if ([name hasSuffix:@"StyleURL"]) { - XCTAssertEqual(numArgs, numImplicitArgs, @"Unversioned style URL method should have no parameters, but it has %u.", numArgs - numImplicitArgs); - } else if ([name hasSuffix:@"StyleURLWithVersion:"]) { - XCTAssertEqual(numArgs, numImplicitArgs + 1, @"Versioned style URL method should have one parameter, but it has %u.", numArgs - numImplicitArgs); - numVersionedMethods++; - } else { - XCTAssertEqual([name rangeOfString:@"URL"].location, NSNotFound, @"MGLStyle style URL method %@ is malformed.", name); - } - } - XCTAssertEqual(mbgl::util::default_styles::numOrderedStyles, numVersionedMethods, - @"There are %lu default styles but MGLStyleTests only provides versioned style URL methods for %u of them.", - mbgl::util::default_styles::numOrderedStyles, numVersionedMethods); - - // Test that all the versioned style methods are in the public header. - NSString *styleHeader = self.stringWithContentsOfStyleHeader; - - NSError *versionedMethodError; - NSString *versionedMethodExpressionString = @(R"RE(^\+\s*\(NSURL\s*\*\s*\)\s*(?!traffic)\w+StyleURLWithVersion\s*:\s*\(\s*NSInteger\s*\)\s*version\s*\b)RE"); - NSRegularExpression *versionedMethodExpression = [NSRegularExpression regularExpressionWithPattern:versionedMethodExpressionString options:NSRegularExpressionAnchorsMatchLines error:&versionedMethodError]; - XCTAssertNil(versionedMethodError, @"Error compiling regular expression to search for versioned methods."); - NSUInteger numVersionedMethodDeclarations = [versionedMethodExpression numberOfMatchesInString:styleHeader options:0 range:NSMakeRange(0, styleHeader.length)]; - XCTAssertEqual(numVersionedMethodDeclarations, numVersionedMethods); -} - -- (void)testName { - XCTAssertNil(self.style.name); -} - -- (void)testSources { - NSSet<MGLSource *> *initialSources = self.style.sources; - if ([initialSources.anyObject.identifier isEqualToString:@"com.mapbox.annotations"]) { - XCTAssertEqual(self.style.sources.count, 1UL); - } else { - XCTAssertEqual(self.style.sources.count, 0UL); - } - MGLShapeSource *shapeSource = [[MGLShapeSource alloc] initWithIdentifier:@"shapeSource" shape:nil options:nil]; - [self.style addSource:shapeSource]; - XCTAssertEqual(self.style.sources.count, initialSources.count + 1); - XCTAssertEqual(shapeSource, [self.style sourceWithIdentifier:@"shapeSource"]); - [self.style removeSource:shapeSource]; - XCTAssertEqual(self.style.sources.count, initialSources.count); -} - -- (void)testAddingSourcesTwice { - MGLShapeSource *shapeSource = [[MGLShapeSource alloc] initWithIdentifier:@"shapeSource" shape:nil options:nil]; - [self.style addSource:shapeSource]; - XCTAssertThrowsSpecificNamed([self.style addSource:shapeSource], NSException, MGLRedundantSourceException); - - MGLRasterTileSource *rasterTileSource = [[MGLRasterTileSource alloc] initWithIdentifier:@"rasterTileSource" configurationURL:[NSURL URLWithString:@".json"] tileSize:42]; - [self.style addSource:rasterTileSource]; - XCTAssertThrowsSpecificNamed([self.style addSource:rasterTileSource], NSException, MGLRedundantSourceException); - - MGLVectorTileSource *vectorTileSource = [[MGLVectorTileSource alloc] initWithIdentifier:@"vectorTileSource" configurationURL:[NSURL URLWithString:@".json"]]; - [self.style addSource:vectorTileSource]; - XCTAssertThrowsSpecificNamed([self.style addSource:vectorTileSource], NSException, MGLRedundantSourceException); -} - -- (void)testAddingSourcesWithDuplicateIdentifiers { - MGLVectorTileSource *source1 = [[MGLVectorTileSource alloc] initWithIdentifier:@"my-source" configurationURL:[NSURL URLWithString:@"mapbox://mapbox.mapbox-terrain-v2"]]; - MGLVectorTileSource *source2 = [[MGLVectorTileSource alloc] initWithIdentifier:@"my-source" configurationURL:[NSURL URLWithString:@"mapbox://mapbox.mapbox-terrain-v2"]]; - - [self.style addSource: source1]; - XCTAssertThrowsSpecificNamed([self.style addSource: source2], NSException, MGLRedundantSourceIdentifierException); -} - -- (void)testRemovingSourcesBeforeAddingThem { - MGLRasterTileSource *rasterTileSource = [[MGLRasterTileSource alloc] initWithIdentifier:@"raster-tile-source" tileURLTemplates:@[] options:nil]; - [self.style removeSource:rasterTileSource]; - [self.style addSource:rasterTileSource]; - XCTAssertNotNil([self.style sourceWithIdentifier:rasterTileSource.identifier]); - - MGLShapeSource *shapeSource = [[MGLShapeSource alloc] initWithIdentifier:@"shape-source" shape:nil options:nil]; - [self.style removeSource:shapeSource]; - [self.style addSource:shapeSource]; - XCTAssertNotNil([self.style sourceWithIdentifier:shapeSource.identifier]); - - MGLVectorTileSource *vectorTileSource = [[MGLVectorTileSource alloc] initWithIdentifier:@"vector-tile-source" tileURLTemplates:@[] options:nil]; - [self.style removeSource:vectorTileSource]; - [self.style addSource:vectorTileSource]; - XCTAssertNotNil([self.style sourceWithIdentifier:vectorTileSource.identifier]); -} - -- (void)testAddingSourceOfTypeABeforeSourceOfTypeBWithSameIdentifier { - // Add a raster tile source - MGLRasterTileSource *rasterTileSource = [[MGLRasterTileSource alloc] initWithIdentifier:@"some-identifier" tileURLTemplates:@[] options:nil]; - [self.style addSource:rasterTileSource]; - - // Attempt to remove an image source with the same identifier as the raster tile source - MGLImageSource *imageSource = [[MGLImageSource alloc] initWithIdentifier:@"some-identifier" coordinateQuad: { } URL:[NSURL URLWithString:@"http://host/image.png"]]; - [self.style removeSource:imageSource]; - // The raster tile source should still be added - XCTAssertTrue([[self.style sourceWithIdentifier:rasterTileSource.identifier] isMemberOfClass:[MGLRasterTileSource class]]); - - // Remove the raster tile source - [self.style removeSource:rasterTileSource]; - - // Add the shape source - [self.style addSource:imageSource]; - - // Attempt to remove a vector tile source with the same identifer as the shape source - MGLVectorTileSource *vectorTileSource = [[MGLVectorTileSource alloc] initWithIdentifier:@"some-identifier" tileURLTemplates:@[] options:nil]; - [self.style removeSource:vectorTileSource]; - // The image source should still be added - XCTAssertTrue([[self.style sourceWithIdentifier:imageSource.identifier] isMemberOfClass:[MGLImageSource class]]); - - // Remove the image source - [self.style removeSource:imageSource]; - - // Add the vector tile source - [self.style addSource:vectorTileSource]; - - // Attempt to remove the previously created raster tile source that has the same identifer as the shape source - [self.style removeSource:rasterTileSource]; - // The vector tile source should still be added - XCTAssertTrue([[self.style sourceWithIdentifier:imageSource.identifier] isMemberOfClass:[MGLVectorTileSource class]]); -} - -- (void)testRemovingSourceInUse { - // Add a raster tile source - MGLVectorTileSource *vectorTileSource = [[MGLVectorTileSource alloc] initWithIdentifier:@"some-identifier" tileURLTemplates:@[] options:nil]; - [self.style addSource:vectorTileSource]; - - // Add a layer using it - MGLFillStyleLayer *fillLayer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"fillLayer" source:vectorTileSource]; - [self.style addLayer:fillLayer]; - - // Attempt to remove the raster tile source - NSError *error; - BOOL result = [self.style removeSource:vectorTileSource error:&error]; - - XCTAssertFalse(result); - XCTAssertEqualObjects(error.domain, MGLErrorDomain); - XCTAssertEqual(error.code, MGLErrorCodeSourceIsInUseCannotRemove); - - // Ensure it is still there - XCTAssertTrue([[self.style sourceWithIdentifier:vectorTileSource.identifier] isMemberOfClass:[MGLVectorTileSource class]]); -} - -- (void)testLayers { - NSArray<MGLStyleLayer *> *initialLayers = self.style.layers; - if ([initialLayers.firstObject.identifier isEqualToString:@"com.mapbox.annotations.points"]) { - XCTAssertEqual(self.style.layers.count, 1UL); - } else { - XCTAssertEqual(self.style.layers.count, 0UL); - } - MGLShapeSource *shapeSource = [[MGLShapeSource alloc] initWithIdentifier:@"shapeSource" shape:nil options:nil]; - [self.style addSource:shapeSource]; - MGLFillStyleLayer *fillLayer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"fillLayer" source:shapeSource]; - [self.style addLayer:fillLayer]; - XCTAssertEqual(self.style.layers.count, initialLayers.count + 1); - XCTAssertEqual(fillLayer, [self.style layerWithIdentifier:@"fillLayer"]); - [self.style removeLayer:fillLayer]; - XCTAssertEqual(self.style.layers.count, initialLayers.count); -} - -- (void)testAddingLayersTwice { - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"shapeSource" shape:nil options:nil]; - - MGLBackgroundStyleLayer *backgroundLayer = [[MGLBackgroundStyleLayer alloc] initWithIdentifier:@"backgroundLayer"]; - [self.style addLayer:backgroundLayer]; - XCTAssertThrowsSpecificNamed([self.style addLayer:backgroundLayer], NSException, MGLRedundantLayerException); - - MGLCircleStyleLayer *circleLayer = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"circleLayer" source:source]; - [self.style addLayer:circleLayer]; - XCTAssertThrowsSpecificNamed([self.style addLayer:circleLayer], NSException, MGLRedundantLayerException); - - MGLFillStyleLayer *fillLayer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"fillLayer" source:source]; - [self.style addLayer:fillLayer]; - XCTAssertThrowsSpecificNamed([self.style addLayer:fillLayer], NSException, MGLRedundantLayerException); - - MGLLineStyleLayer *lineLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"lineLayer" source:source]; - [self.style addLayer:lineLayer]; - XCTAssertThrowsSpecificNamed([self.style addLayer:lineLayer], NSException, MGLRedundantLayerException); - - MGLRasterStyleLayer *rasterLayer = [[MGLRasterStyleLayer alloc] initWithIdentifier:@"rasterLayer" source:source]; - [self.style addLayer:rasterLayer]; - XCTAssertThrowsSpecificNamed([self.style addLayer:rasterLayer], NSException, MGLRedundantLayerException); - - MGLSymbolStyleLayer *symbolLayer = [[MGLSymbolStyleLayer alloc] initWithIdentifier:@"symbolLayer" source:source]; - [self.style addLayer:symbolLayer]; - XCTAssertThrowsSpecificNamed([self.style addLayer:symbolLayer], NSException, MGLRedundantLayerException); -} - -- (void)testAddingLayersWithDuplicateIdentifiers { - // Just some source - MGLVectorTileSource *source = [[MGLVectorTileSource alloc] initWithIdentifier:@"my-source" configurationURL:[NSURL URLWithString:@"mapbox://mapbox.mapbox-terrain-v2"]]; - [self.style addSource: source]; - - // Add initial layer - MGLFillStyleLayer *initial = [[MGLFillStyleLayer alloc] initWithIdentifier:@"my-layer" source:source]; - [self.style addLayer:initial]; - - // Try to add the duplicate - XCTAssertThrowsSpecificNamed([self.style addLayer:[[MGLFillStyleLayer alloc] initWithIdentifier:@"my-layer" source:source]], NSException, @"MGLRedundantLayerIdentifierException"); - XCTAssertThrowsSpecificNamed([self.style insertLayer:[[MGLFillStyleLayer alloc] initWithIdentifier:@"my-layer" source:source] belowLayer:initial],NSException, @"MGLRedundantLayerIdentifierException"); - XCTAssertThrowsSpecificNamed([self.style insertLayer:[[MGLFillStyleLayer alloc] initWithIdentifier:@"my-layer" source:source] aboveLayer:initial], NSException, @"MGLRedundantLayerIdentifierException"); - XCTAssertThrowsSpecificNamed([self.style insertLayer:[[MGLFillStyleLayer alloc] initWithIdentifier:@"my-layer" source:source] atIndex:0], NSException, @"MGLRedundantLayerIdentifierException"); - XCTAssertThrowsSpecificNamed([self.style insertLayer:[[MGLOpenGLStyleLayer alloc] initWithIdentifier:@"my-layer"] atIndex:0], NSException, @"MGLRedundantLayerIdentifierException"); -} - -- (void)testRemovingLayerBeforeAddingSameLayer { - { - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"shape-source-removing-before-adding" shape:nil options:nil]; - - // Attempting to find a layer with identifier will trigger an exception if the source associated with the layer is not added - [self.style addSource:source]; - - MGLFillStyleLayer *fillLayer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"fill-layer" source:source]; - [self.style removeLayer:fillLayer]; - [self.style addLayer:fillLayer]; - XCTAssertNotNil([self.style layerWithIdentifier:fillLayer.identifier]); - - MGLSymbolStyleLayer *symbolLayer = [[MGLSymbolStyleLayer alloc] initWithIdentifier:@"symbol-layer" source:source]; - [self.style removeLayer:symbolLayer]; - [self.style addLayer:symbolLayer]; - XCTAssertNotNil([self.style layerWithIdentifier:symbolLayer.identifier]); - - MGLLineStyleLayer *lineLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"line-layer" source:source]; - [self.style removeLayer:lineLayer]; - [self.style addLayer:lineLayer]; - XCTAssertNotNil([self.style layerWithIdentifier:lineLayer.identifier]); - - MGLCircleStyleLayer *circleLayer = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"circle-layer" source:source]; - [self.style removeLayer:circleLayer]; - [self.style addLayer:circleLayer]; - XCTAssertNotNil([self.style layerWithIdentifier:circleLayer.identifier]); - - MGLBackgroundStyleLayer *backgroundLayer = [[MGLBackgroundStyleLayer alloc] initWithIdentifier:@"background-layer"]; - [self.style removeLayer:backgroundLayer]; - [self.style addLayer:backgroundLayer]; - XCTAssertNotNil([self.style layerWithIdentifier:backgroundLayer.identifier]); - } - - { - MGLRasterTileSource *rasterSource = [[MGLRasterTileSource alloc] initWithIdentifier:@"raster-tile-source" tileURLTemplates:@[] options:nil]; - [self.style addSource:rasterSource]; - - MGLRasterStyleLayer *rasterLayer = [[MGLRasterStyleLayer alloc] initWithIdentifier:@"raster-layer" source:rasterSource]; - [self.style removeLayer:rasterLayer]; - [self.style addLayer:rasterLayer]; - XCTAssertNotNil([self.style layerWithIdentifier:rasterLayer.identifier]); - } -} - -- (void)testAddingLayerOfTypeABeforeRemovingLayerOfTypeBWithSameIdentifier { - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"shape-source-identifier" shape:nil options:nil]; - [self.style addSource:source]; - - // Add a fill layer - MGLFillStyleLayer *fillLayer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"some-identifier" source:source]; - [self.style addLayer:fillLayer]; - - // Attempt to remove a line layer with the same identifier as the fill layer - MGLLineStyleLayer *lineLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:fillLayer.identifier source:source]; - [self.style removeLayer:lineLayer]; - - XCTAssertTrue([[self.style layerWithIdentifier:fillLayer.identifier] isMemberOfClass:[MGLFillStyleLayer class]]); -} - -- (NSString *)stringWithContentsOfStyleHeader { - NSURL *styleHeaderURL = [[[NSBundle mgl_frameworkBundle].bundleURL - URLByAppendingPathComponent:@"Headers" isDirectory:YES] - URLByAppendingPathComponent:@"MGLStyle.h"]; - NSError *styleHeaderError; - NSString *styleHeader = [NSString stringWithContentsOfURL:styleHeaderURL usedEncoding:nil error:&styleHeaderError]; - XCTAssertNil(styleHeaderError, @"Error getting contents of MGLStyle.h."); - return styleHeader; -} - -- (void)testImages { - NSString *imageName = @"TrackingLocationMask"; -#if TARGET_OS_IPHONE - MGLImage *image = [MGLImage imageNamed:imageName - inBundle:[NSBundle bundleForClass:[self class]] - compatibleWithTraitCollection:nil]; -#else - MGLImage *image = [[NSBundle bundleForClass:[self class]] imageForResource:imageName]; -#endif - XCTAssertNotNil(image); - - [self.style setImage:image forName:imageName]; - MGLImage *styleImage = [self.style imageForName:imageName]; - - XCTAssertNotNil(styleImage); - XCTAssertEqual(image.size.width, styleImage.size.width); - XCTAssertEqual(image.size.height, styleImage.size.height); -} - -- (void)testLayersOrder { - NSString *filePath = [[NSBundle bundleForClass:self.class] pathForResource:@"amsterdam" ofType:@"geojson"]; - NSURL *url = [NSURL fileURLWithPath:filePath]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" URL:url options:nil]; - [self.style addSource:source]; - - MGLCircleStyleLayer *layer1 = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"layer1" source:source]; - [self.style addLayer:layer1]; - - MGLCircleStyleLayer *layer3 = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"layer3" source:source]; - [self.style addLayer:layer3]; - - MGLCircleStyleLayer *layer2 = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"layer2" source:source]; - [self.style insertLayer:layer2 aboveLayer:layer1]; - - MGLCircleStyleLayer *layer4 = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"layer4" source:source]; - [self.style insertLayer:layer4 aboveLayer:layer3]; - - MGLCircleStyleLayer *layer0 = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"layer0" source:source]; - [self.style insertLayer:layer0 belowLayer:layer1]; - - NSArray<MGLStyleLayer *> *layers = [self.style layers]; - NSUInteger startIndex = 0; - if ([layers.firstObject.identifier isEqualToString:@"com.mapbox.annotations.points"]) { - startIndex++; - } - - XCTAssertEqualObjects(layers[startIndex++].identifier, layer0.identifier); - XCTAssertEqualObjects(layers[startIndex++].identifier, layer1.identifier); - XCTAssertEqualObjects(layers[startIndex++].identifier, layer2.identifier); - XCTAssertEqualObjects(layers[startIndex++].identifier, layer3.identifier); - XCTAssertEqualObjects(layers[startIndex++].identifier, layer4.identifier); -} - -#pragma mark Localization tests - -- (void)testLanguageMatching { - { - NSArray *preferences = @[@"en"]; - XCTAssertEqualObjects([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences], @"en"); - } - { - NSArray *preferences = @[@"en-US"]; - XCTAssertEqualObjects([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences], @"en"); - } - { - NSArray *preferences = @[@"fr"]; - XCTAssertEqualObjects([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences], @"fr"); - } - { - NSArray *preferences = @[@"zh-Hans"]; - XCTAssertEqualObjects([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences], @"zh-Hans"); - } - { - NSArray *preferences = @[@"zh-Hans", @"en"]; - XCTAssertEqualObjects([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences], @"zh-Hans"); - } - { - NSArray *preferences = @[@"zh-Hant"]; - XCTAssertNil([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences]); - } - { - NSArray *preferences = @[@"en", @"fr", @"el"]; - XCTAssertEqualObjects([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences], @"en"); - } - { - NSArray *preferences = @[@"tlh"]; - XCTAssertNil([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences]); - } - { - NSArray *preferences = @[@"tlh", @"en"]; - XCTAssertEqualObjects([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences], @"en"); - } - { - NSArray *preferences = @[@"mul"]; - XCTAssertNil([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences]); - } -} - -#pragma mark Transition tests - -- (void)testTransition -{ - MGLTransition transitionTest = MGLTransitionMake(5, 4); - - self.style.transition = transitionTest; - - XCTAssert(self.style.transition.delay == transitionTest.delay); - XCTAssert(self.style.transition.duration == transitionTest.duration); -} - -- (void)testPerformsPlacementTransitions -{ - XCTAssertTrue(self.style.performsPlacementTransitions, @"The default value for enabling placement transitions should be YES."); - - self.style.performsPlacementTransitions = NO; - XCTAssertFalse(self.style.performsPlacementTransitions, @"Enabling placement transitions should be NO."); -} - -@end |