From 8d13a109e6eb6d2cd556c9a4806ef5b89c313ecc Mon Sep 17 00:00:00 2001 From: Fabian Guerra Date: Mon, 26 Mar 2018 16:40:52 -0400 Subject: [ios, macos] Implement expressions feature operators. --- platform/darwin/src/NSExpression+MGLAdditions.mm | 15 +++++++++++++++ platform/darwin/test/MGLExpressionTests.mm | 18 ++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/platform/darwin/src/NSExpression+MGLAdditions.mm b/platform/darwin/src/NSExpression+MGLAdditions.mm index 1fcaa5136d..2b42fb6e78 100644 --- a/platform/darwin/src/NSExpression+MGLAdditions.mm +++ b/platform/darwin/src/NSExpression+MGLAdditions.mm @@ -465,6 +465,12 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { return [NSExpression expressionForVariable:@"zoomLevel"]; } else if ([op isEqualToString:@"heatmap-density"]) { return [NSExpression expressionForVariable:@"heatmapDensity"]; + } else if ([op isEqualToString:@"geometry-type"]) { + return [NSExpression expressionForVariable:@"geometryType"]; + } else if ([op isEqualToString:@"id"]) { + return [NSExpression expressionForVariable:@"featureId"]; + } else if ([op isEqualToString:@"properties"]) { + return [NSExpression expressionForVariable:@"featureProperties"]; } else if ([op isEqualToString:@"let"]) { NSExpression *operand = [NSExpression mgl_expressionWithJSONObject:argumentObjects.lastObject]; NSArray *bindingObjects = [argumentObjects subarrayWithRange:NSMakeRange(0, argumentObjects.count - 1)]; @@ -553,6 +559,15 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { if ([self.variable isEqualToString:@"zoomLevel"]) { return @[@"zoom"]; } + if ([self.variable isEqualToString:@"geometryType"]) { + return @[@"geometry-type"]; + } + if ([self.variable isEqualToString:@"featureId"]) { + return @[@"id"]; + } + if ([self.variable isEqualToString:@"featureProperties"]) { + return @[@"properties"]; + } return @[@"var", self.variable]; } diff --git a/platform/darwin/test/MGLExpressionTests.mm b/platform/darwin/test/MGLExpressionTests.mm index 4107306a5b..f489b3f79a 100644 --- a/platform/darwin/test/MGLExpressionTests.mm +++ b/platform/darwin/test/MGLExpressionTests.mm @@ -170,6 +170,24 @@ using namespace std::string_literals; NSMutableDictionary *context = [@{@"heatmapDensity": @1} mutableCopy]; XCTAssertEqualObjects([expression expressionValueWithObject:nil context:context], @1); } + { + NSExpression *expression = [NSExpression expressionForVariable:@"geometryType"]; + XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, @[@"geometry-type"]); + XCTAssertEqualObjects([NSExpression expressionWithFormat:@"$geometryType"].mgl_jsonExpressionObject, @[@"geometry-type"]); + XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:@[@"geometry-type"]], expression); + } + { + NSExpression *expression = [NSExpression expressionForVariable:@"featureId"]; + XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, @[@"id"]); + XCTAssertEqualObjects([NSExpression expressionWithFormat:@"$featureId"].mgl_jsonExpressionObject, @[@"id"]); + XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:@[@"id"]], expression); + } + { + NSExpression *expression = [NSExpression expressionForVariable:@"featureProperties"]; + XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, @[@"properties"]); + XCTAssertEqualObjects([NSExpression expressionWithFormat:@"$featureProperties"].mgl_jsonExpressionObject, @[@"properties"]); + XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:@[@"properties"]], expression); + } { NSExpression *expression = [NSExpression expressionForVariable:@"loremIpsum"]; NSArray *jsonExpression = @[@"var", @"loremIpsum"]; -- cgit v1.2.1