[ios, macos] Fixed runtime styling deprecation warnings

This commit is contained in:
Minh Nguyễn
2017-02-07 18:26:49 -08:00
committed by Minh Nguyễn
parent bd2f3a28a5
commit 360e5bf631
4 changed files with 110 additions and 98 deletions

View File

@@ -246,7 +246,10 @@
}
- (void)testClasses {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
XCTAssertEqual(self.style.styleClasses.count, 0);
#pragma clang diagnostic pop
}
- (void)testImages {

View File

@@ -7,7 +7,107 @@
@implementation MGLStyleValueTests
- (void)testStoplessFunction {
XCTAssertThrowsSpecificNamed([MGLStyleValue<NSNumber *> valueWithStops:@{}], NSException, NSInvalidArgumentException, @"Stopless function should raise an exception");
XCTAssertThrowsSpecificNamed([MGLStyleValue<NSNumber *> valueWithInterpolationMode:MGLInterpolationModeExponential cameraStops:@{} options:nil], NSException, NSInvalidArgumentException, @"Stopless function should raise an exception");
}
- (void)testDeprecatedFunctions {
MGLShapeSource *shapeSource = [[MGLShapeSource alloc] initWithIdentifier:@"test"
shape:nil
options:nil];
MGLSymbolStyleLayer *symbolStyleLayer = [[MGLSymbolStyleLayer alloc] initWithIdentifier:@"symbolLayer"
source:shapeSource];
MGLCircleStyleLayer *circleStyleLayer = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"circleLayer"
source:shapeSource];
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
// deprecated function, stops with float values
NSDictionary<NSNumber *, MGLStyleValue<NSNumber *> *> *stops = @{
@1: [MGLStyleValue<NSNumber *> valueWithRawValue:@0],
@2: [MGLStyleValue<NSNumber *> valueWithRawValue:@1],
@3: [MGLStyleValue<NSNumber *> valueWithRawValue:@2],
@4: [MGLStyleValue<NSNumber *> valueWithRawValue:@0],
};
MGLStyleValue<NSNumber *> *iconHaloBlurStyleValue =
[MGLStyleValue<NSNumber *> valueWithInterpolationBase:1.0 stops:stops];
symbolStyleLayer.iconHaloBlur = iconHaloBlurStyleValue;
XCTAssertEqualObjects(symbolStyleLayer.iconHaloBlur, iconHaloBlurStyleValue);
// deprecated function, stops with boolean values
stops = @{
@1: [MGLStyleValue<NSNumber *> valueWithRawValue:@YES],
@2: [MGLStyleValue<NSNumber *> valueWithRawValue:@NO],
@3: [MGLStyleValue<NSNumber *> valueWithRawValue:@YES],
@4: [MGLStyleValue<NSNumber *> valueWithRawValue:@NO],
};
MGLStyleValue<NSNumber *> *iconAllowsOverlapStyleValue =
[MGLStyleValue<NSNumber *> valueWithInterpolationBase:1.0 stops:stops];
symbolStyleLayer.iconAllowsOverlap = iconAllowsOverlapStyleValue;
// iconAllowsOverlap is boolean so mgl and mbgl conversions will coerce the developers stops into interval stops
MGLStyleValue<NSNumber *> *expectedIconAllowsOverlapStyleValue =
[MGLStyleValue<NSNumber *> valueWithInterpolationMode:MGLInterpolationModeInterval
cameraStops:stops
options:nil];
XCTAssertEqualObjects(symbolStyleLayer.iconAllowsOverlap, expectedIconAllowsOverlapStyleValue);
///
// creating and using MGLStyleFunctions directly
///
NSDictionary<NSNumber *, MGLStyleValue<NSNumber *> *> *circleRadiusStops = @{
@0: [MGLStyleValue<NSNumber *> valueWithRawValue:@10],
@20: [MGLStyleValue<NSNumber *> valueWithRawValue:@5],
};
MGLStyleFunction<NSNumber *> *circleRadiusFunction =
[MGLStyleFunction<NSNumber *> functionWithInterpolationBase:1.0
stops:circleRadiusStops];
circleStyleLayer.circleRadius = circleRadiusFunction;
MGLStyleValue<NSNumber *> *expectedCircleRadiusFunction =
[MGLStyleValue<NSNumber *> valueWithInterpolationMode:MGLInterpolationModeExponential
cameraStops:circleRadiusStops
options:nil];
// setting a data driven property to an MGLStyleFunction should return an exponential camera function
XCTAssertEqualObjects(circleStyleLayer.circleRadius, expectedCircleRadiusFunction);
CGVector circleTranslationOne = CGVectorMake(100, 0);
CGVector circleTranslationTwo = CGVectorMake(0, 0);
#if TARGET_OS_IPHONE
NSValue *circleTranslationValueOne = [NSValue valueWithCGVector:circleTranslationOne];
NSValue *circleTranslationValueTwo = [NSValue valueWithCGVector:circleTranslationTwo];
#else
NSValue *circleTranslationValueOne = [NSValue value:&circleTranslationOne withObjCType:@encode(CGVector)];
NSValue *circleTranslationValueTwo = [NSValue value:&circleTranslationTwo withObjCType:@encode(CGVector)];
#endif
NSDictionary<NSNumber *, MGLStyleValue<NSValue *> *> *circleTranslationStops = @{
@0: [MGLStyleValue<NSValue *> valueWithRawValue:circleTranslationValueOne],
@10: [MGLStyleValue<NSValue *> valueWithRawValue:circleTranslationValueTwo],
};
MGLStyleFunction<NSValue *> *circleTranslationFunction =
[MGLStyleFunction<NSValue *> functionWithInterpolationBase:1.0
stops:circleTranslationStops];
circleStyleLayer.circleTranslation = circleTranslationFunction;
MGLStyleValue<NSValue *> *expectedCircleTranslationFunction =
[MGLStyleValue<NSValue *> valueWithInterpolationMode:MGLInterpolationModeExponential
cameraStops:circleTranslationStops
options:nil];
// setting a non-data driven, interpolatable property to an MGLStyleFunction should return an exponential camera function
XCTAssertEqualObjects(circleStyleLayer.circleTranslation, expectedCircleTranslationFunction);
NSDictionary<NSNumber *, MGLStyleValue<NSNumber *> *> *iconOptionalStops = @{
@0: [MGLStyleValue<NSNumber *> valueWithRawValue:@NO],
@20: [MGLStyleValue<NSNumber *> valueWithRawValue:@YES],
};
MGLStyleFunction<NSNumber *> *iconOptionalFunction =
[MGLStyleFunction<NSNumber *> valueWithInterpolationBase:1.0
stops:iconOptionalStops];
symbolStyleLayer.iconOptional = iconOptionalFunction;
MGLStyleValue<NSNumber *> *expectedIconOptionalFunction =
[MGLStyleValue<NSNumber *> valueWithInterpolationMode:MGLInterpolationModeInterval
cameraStops:iconOptionalStops
options:nil];
XCTAssertEqualObjects(symbolStyleLayer.iconOptional, expectedIconOptionalFunction);
#pragma clang diagnostic pop
}
@end

View File

@@ -35,97 +35,6 @@ extension MGLStyleValueTests {
XCTAssertEqual(circleStyleLayer.circleScaleAlignment, expectedCircleScaleAlignmentValue)
}
func testDeprecatedFunctions() {
let shapeSource = MGLShapeSource(identifier: "test", shape: nil, options: nil)
let symbolStyleLayer = MGLSymbolStyleLayer(identifier: "symbolLayer", source: shapeSource)
let circleStyleLayer = MGLCircleStyleLayer(identifier: "circleLayer", source: shapeSource)
// deprecated function, stops with float values
let iconHaloBlurStyleValue = MGLStyleValue<NSNumber>(interpolationBase: 1.0, stops: [1: MGLStyleValue(rawValue: 0),
2: MGLStyleValue(rawValue: 1),
3: MGLStyleValue(rawValue: 2),
4: MGLStyleValue(rawValue: 3)])
symbolStyleLayer.iconHaloBlur = iconHaloBlurStyleValue
XCTAssertEqual(symbolStyleLayer.iconHaloBlur!, iconHaloBlurStyleValue)
// deprecated function, stops with boolean values
let stops: [NSNumber: MGLStyleValue<NSNumber>] = [
1: MGLStyleValue(rawValue: true),
2: MGLStyleValue(rawValue: false),
3: MGLStyleValue(rawValue: true),
4: MGLStyleValue(rawValue: false),
]
let iconAllowsOverlapStyleValue = MGLStyleValue<NSNumber>(interpolationBase: 1, stops: stops)
symbolStyleLayer.iconAllowsOverlap = iconAllowsOverlapStyleValue
// iconAllowsOverlap is boolean so mgl and mbgl conversions will coerce the developers stops into interval stops
let expectedIconAllowsOverlapStyleValue = MGLStyleValue<NSNumber>(
interpolationMode: .interval,
cameraStops: stops,
options: nil
)
XCTAssertEqual(symbolStyleLayer.iconAllowsOverlap, expectedIconAllowsOverlapStyleValue)
///
// creating and using MGLStyleFunctions directly
///
let circleRadiusStops: [NSNumber: MGLStyleValue<NSNumber>] = [
0: MGLStyleValue(rawValue: 10),
20: MGLStyleValue(rawValue: 5)
]
let circleRadiusFunction = MGLStyleFunction<NSNumber>(
interpolationBase: 1.0,
stops: circleRadiusStops
)
circleStyleLayer.circleRadius = circleRadiusFunction
let expectedCircleRadiusFunction = MGLStyleValue<NSNumber>(
interpolationMode: .exponential,
cameraStops:
circleRadiusStops,
options: nil
)
// setting a data driven property to an MGLStyleFunction should return an exponential camera function
XCTAssertEqual(circleStyleLayer.circleRadius, expectedCircleRadiusFunction)
var circleTranslationOne = CGVector(dx: 100, dy: 0)
let circleTranslationValueOne = NSValue(bytes: &circleTranslationOne, objCType: "{CGVector=dd}")
var circleTranslationTwo = CGVector(dx: 0, dy: 0)
let circleTranslationValueTwo = NSValue(bytes: &circleTranslationTwo, objCType: "{CGVector=dd}")
let circleTranslationStops: [NSNumber: MGLStyleValue<NSValue>] = [
0: MGLStyleValue<NSValue>(rawValue: circleTranslationValueOne),
10: MGLStyleValue<NSValue>(rawValue: circleTranslationValueTwo)
]
let circleTranslationFunction = MGLStyleFunction<NSValue>(
interpolationBase: 1.0,
stops: circleTranslationStops
)
circleStyleLayer.circleTranslation = circleTranslationFunction
let expectedCircleTranslationFunction = MGLStyleValue<NSValue>(
interpolationMode: .exponential,
cameraStops: circleTranslationStops,
options: nil
)
// setting a non-data driven, interpolatable property to an MGLStyleFunction should return an exponential camera function
XCTAssertEqual(circleStyleLayer.circleTranslation, expectedCircleTranslationFunction)
let iconOptionalStops: [NSNumber: MGLStyleValue<NSNumber>] = [
0: MGLStyleValue(rawValue: false),
20: MGLStyleValue(rawValue: true)
]
let iconOptionalFunction = MGLStyleFunction(
interpolationBase: 1.0,
stops: iconOptionalStops
)
symbolStyleLayer.iconOptional = iconOptionalFunction
let expectedIconOptionalFunction = MGLStyleValue(
interpolationMode: .interval,
cameraStops: iconOptionalStops,
options: nil
)
XCTAssertEqual(symbolStyleLayer.iconOptional, expectedIconOptionalFunction)
}
func testFunctionsWithNonDataDrivenProperties() {
let shapeSource = MGLShapeSource(identifier: "test", shape: nil, options: nil)
let circleStyleLayer = MGLCircleStyleLayer(identifier: "circleLayer", source: shapeSource)

View File

@@ -689,11 +689,11 @@ NS_ARRAY_OF(id <MGLAnnotation>) *MBXFlattenedShapes(NS_ARRAY_OF(id <MGLAnnotatio
MGLFillStyleLayer *fillStyleLayer = (MGLFillStyleLayer *)[self.mapView.style layerWithIdentifier:@"water"];
MGLStyleValue *colorFunction = [MGLStyleValue<NSColor *> valueWithStops:@{
MGLStyleValue *colorFunction = [MGLStyleValue<NSColor *> valueWithInterpolationMode:MGLInterpolationModeExponential cameraStops:@{
@0.0: [MGLStyleValue<NSColor *> valueWithRawValue:[NSColor redColor]],
@10.0: [MGLStyleValue<NSColor *> valueWithRawValue:[NSColor yellowColor]],
@20.0: [MGLStyleValue<NSColor *> valueWithRawValue:[NSColor blackColor]],
}];
} options:nil];
fillStyleLayer.fillColor = colorFunction;
NSString *filePath = [[NSBundle bundleForClass:self.class] pathForResource:@"amsterdam" ofType:@"geojson"];
@@ -715,11 +715,11 @@ NS_ARRAY_OF(id <MGLAnnotation>) *MBXFlattenedShapes(NS_ARRAY_OF(id <MGLAnnotatio
theaterLayer.predicate = [NSPredicate predicateWithFormat:@"maki == 'theatre'"];
theaterLayer.iconImageName = [MGLStyleValue valueWithRawValue:NSImageNameIChatTheaterTemplate];
theaterLayer.iconScale = [MGLStyleValue valueWithRawValue:@2];
theaterLayer.iconColor = [MGLStyleValue valueWithStops:@{
theaterLayer.iconColor = [MGLStyleValue valueWithInterpolationMode:MGLInterpolationModeExponential cameraStops:@{
@16.0: [MGLStyleValue valueWithRawValue:[NSColor redColor]],
@18.0: [MGLStyleValue valueWithRawValue:[NSColor yellowColor]],
@20.0: [MGLStyleValue valueWithRawValue:[NSColor blackColor]],
}];
} options:nil];
[self.mapView.style addLayer:theaterLayer];
}
@@ -1080,14 +1080,14 @@ NS_ARRAY_OF(id <MGLAnnotation>) *MBXFlattenedShapes(NS_ARRAY_OF(id <MGLAnnotatio
- (void)mapView:(MGLMapView *)mapView didSelectAnnotation:(id <MGLAnnotation>)annotation {
if ([annotation isKindOfClass:[DroppedPinAnnotation class]]) {
DroppedPinAnnotation *droppedPin = annotation;
DroppedPinAnnotation *droppedPin = (DroppedPinAnnotation *)annotation;
[droppedPin resume];
}
}
- (void)mapView:(MGLMapView *)mapView didDeselectAnnotation:(id <MGLAnnotation>)annotation {
if ([annotation isKindOfClass:[DroppedPinAnnotation class]]) {
DroppedPinAnnotation *droppedPin = annotation;
DroppedPinAnnotation *droppedPin = (DroppedPinAnnotation *)annotation;
[droppedPin pause];
}
}