diff options
author | Fabian Guerra <fabian.guerra@mapbox.com> | 2018-03-26 12:56:41 -0400 |
---|---|---|
committer | Fabian Guerra <fabian.guerra@mapbox.com> | 2018-03-28 11:12:28 -0400 |
commit | 79044a9cd0e20e617f6f1e87cea178b55f21ab1a (patch) | |
tree | 8261fa36890673d336d519b93e6a0db3b04ea054 | |
parent | fbd6e2b618d40c0dee18430f207ed4514e6cb150 (diff) | |
download | qtlocation-mapboxgl-79044a9cd0e20e617f6f1e87cea178b55f21ab1a.tar.gz |
[ios, macos] Add Expressions 'at' operator.
-rw-r--r-- | platform/darwin/src/NSExpression+MGLAdditions.mm | 8 | ||||
-rw-r--r-- | platform/darwin/test/MGLExpressionTests.mm | 21 |
2 files changed, 29 insertions, 0 deletions
diff --git a/platform/darwin/src/NSExpression+MGLAdditions.mm b/platform/darwin/src/NSExpression+MGLAdditions.mm index 9797709b7b..934b9572ae 100644 --- a/platform/darwin/src/NSExpression+MGLAdditions.mm +++ b/platform/darwin/src/NSExpression+MGLAdditions.mm @@ -406,6 +406,11 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { NSExpression *operand = subexpressions.firstObject; subexpressions = [subexpressions subarrayWithRange:NSMakeRange(1, subexpressions.count - 1)]; return [NSExpression expressionForFunction:operand selectorName:@"stringByAppendingString:" arguments:subexpressions]; + } else if ([op isEqualToString:@"at"]) { + NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); + NSExpression *index = subexpressions.firstObject; + NSExpression *operand = subexpressions[1]; + return [NSExpression expressionForFunction:operand selectorName:@"objectAtIndex:" arguments:@[index]]; } else if ([op isEqualToString:@"interpolate"]) { NSArray *interpolationOptions = argumentObjects.firstObject; NSString *curveType = interpolationOptions.firstObject; @@ -639,6 +644,9 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { } else if ([function isEqualToString:@"stringByAppendingString:"]) { NSArray *arguments = self.arguments.mgl_jsonExpressionObject; return [@[@"concat", self.operand.mgl_jsonExpressionObject] arrayByAddingObjectsFromArray:arguments]; + } else if ([function isEqualToString:@"objectAtIndex:"]) { + NSExpression *index = self.arguments[0]; + return @[@"at", index.mgl_jsonExpressionObject, self.operand.mgl_jsonExpressionObject]; } else if ([function isEqualToString:@"boolValue"]) { return @[@"to-boolean", self.operand.mgl_jsonExpressionObject]; } else if ([function isEqualToString:@"mgl_numberWithFallbackValues:"] || diff --git a/platform/darwin/test/MGLExpressionTests.mm b/platform/darwin/test/MGLExpressionTests.mm index ea5a1cd41c..b84f7d6a55 100644 --- a/platform/darwin/test/MGLExpressionTests.mm +++ b/platform/darwin/test/MGLExpressionTests.mm @@ -629,4 +629,25 @@ using namespace std::string_literals; } +- (void)testLookupExpressionObject { + { + NSExpression *operand = [NSExpression expressionForAggregate:@[MGLConstantExpression(@9), + MGLConstantExpression(@8), + MGLConstantExpression(@7)]]; + NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(%@, 'objectAtIndex:', %@)", operand, MGLConstantExpression(@1)]; + NSArray *jsonExpression = @[@"at", @1, @[ @"literal", @[@9, @8, @7]]]; + XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); + XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression); + } + { + NSExpression *operand = [NSExpression expressionForAggregate:@[MGLConstantExpression(@9), + MGLConstantExpression(@8), + MGLConstantExpression(@7)]]; + NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(%@, 'objectAtIndex:', x)", operand]; + NSArray *jsonExpression = @[@"at", @[@"get", @"x"], @[ @"literal", @[@9, @8, @7]]]; + XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); + XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression); + } +} + @end |