summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Guerra <fabian.guerra@mapbox.com>2018-03-26 16:19:30 -0400
committerFabian Guerra <fabian.guerra@mapbox.com>2018-03-28 11:12:28 -0400
commitb5524e893e44fcee1838a10fc1ec305b86e5b7d6 (patch)
treedf91cc2087ba8812186793594d7e46dd24356e69
parent79044a9cd0e20e617f6f1e87cea178b55f21ab1a (diff)
downloadqtlocation-mapboxgl-b5524e893e44fcee1838a10fc1ec305b86e5b7d6.tar.gz
[ios, macos] Implement 'has' operator.
-rw-r--r--platform/darwin/src/NSExpression+MGLAdditions.mm6
-rw-r--r--platform/darwin/test/MGLExpressionTests.mm6
2 files changed, 12 insertions, 0 deletions
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