From b5524e893e44fcee1838a10fc1ec305b86e5b7d6 Mon Sep 17 00:00:00 2001 From: Fabian Guerra Date: Mon, 26 Mar 2018 16:19:30 -0400 Subject: [ios, macos] Implement 'has' operator. --- platform/darwin/src/NSExpression+MGLAdditions.mm | 6 ++++++ platform/darwin/test/MGLExpressionTests.mm | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/platform/darwin/src/NSExpression+MGLAdditions.mm b/platform/darwin/src/NSExpression+MGLAdditions.mm index 934b9572ae..1fcaa5136d 100644 --- a/platform/darwin/src/NSExpression+MGLAdditions.mm +++ b/platform/darwin/src/NSExpression+MGLAdditions.mm @@ -411,6 +411,10 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { NSExpression *index = subexpressions.firstObject; NSExpression *operand = subexpressions[1]; return [NSExpression expressionForFunction:operand selectorName:@"objectAtIndex:" arguments:@[index]]; + } else if ([op isEqualToString:@"has"]) { + NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); + NSExpression *property = subexpressions.firstObject; + return [NSExpression expressionWithFormat:@"FUNCTION(%@, 'has')", property]; } else if ([op isEqualToString:@"interpolate"]) { NSArray *interpolationOptions = argumentObjects.firstObject; NSString *curveType = interpolationOptions.firstObject; @@ -659,6 +663,8 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { return @[@"to-string", self.operand.mgl_jsonExpressionObject]; } else if ([function isEqualToString:@"noindex:"]) { return self.arguments.firstObject.mgl_jsonExpressionObject; + } else if ([function isEqualToString:@"has"]) { + return @[@"has", self.operand.mgl_jsonExpressionObject]; } else if ([function isEqualToString:@"mgl_interpolateWithCurveType:parameters:stops:"]) { if (self.arguments.count < 3) { [NSException raise:NSInvalidArgumentException format: diff --git a/platform/darwin/test/MGLExpressionTests.mm b/platform/darwin/test/MGLExpressionTests.mm index b84f7d6a55..4107306a5b 100644 --- a/platform/darwin/test/MGLExpressionTests.mm +++ b/platform/darwin/test/MGLExpressionTests.mm @@ -648,6 +648,12 @@ using namespace std::string_literals; XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression); } + { + NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION('x', 'has')"]; + NSArray *jsonExpression = @[@"has", @"x"]; + XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); + XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression); + } } @end -- cgit v1.2.1