diff options
author | Minh Nguyễn <mxn@1ec5.org> | 2018-03-16 10:57:16 -0700 |
---|---|---|
committer | Fabian Guerra <fabian.guerra@mapbox.com> | 2018-03-28 19:35:58 -0400 |
commit | f10402d1e33d33ca886149ca575a268249a8a976 (patch) | |
tree | d7da8763ceba6aa277062a03ae8efe82f3db214f | |
parent | 09810d53bf224e68ba4cbe95cf633f4ad6c29592 (diff) | |
download | qtlocation-mapboxgl-f10402d1e33d33ca886149ca575a268249a8a976.tar.gz |
[ios, macos] Fixed mgl_join:
-rw-r--r-- | platform/darwin/src/NSExpression+MGLAdditions.mm | 14 | ||||
-rw-r--r-- | platform/darwin/test/MGLExpressionTests.mm | 8 |
2 files changed, 13 insertions, 9 deletions
diff --git a/platform/darwin/src/NSExpression+MGLAdditions.mm b/platform/darwin/src/NSExpression+MGLAdditions.mm index cb9f5813f3..6e6376099c 100644 --- a/platform/darwin/src/NSExpression+MGLAdditions.mm +++ b/platform/darwin/src/NSExpression+MGLAdditions.mm @@ -26,7 +26,7 @@ NSString *MGLJoinComponents(Class self, SEL _cmd, NSArray<NSString *> *component /** Adds to NSExpression’s built-in repertoire of functions. */ -void MGLEndowExpressionsWithCustomFunctions() { +void MGLInstallAftermarketExpressionFunctions() { // NSExpression’s built-in functions are backed by class methods on a // private class, so use a function expression to get at the class. // http://funwithobjc.tumblr.com/post/2922267976/using-custom-functions-with-nsexpression @@ -41,13 +41,13 @@ void MGLEndowExpressionsWithCustomFunctions() { #pragma clang pop } -@interface MGLExpressionEndowmentLoader: NSObject +@interface MGLAftermarketExpressionInstaller: NSObject @end -@implementation MGLExpressionEndowmentLoader +@implementation MGLAftermarketExpressionInstaller + (void)load { - MGLEndowExpressionsWithCustomFunctions(); + MGLInstallAftermarketExpressionFunctions(); } @end @@ -454,7 +454,8 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { return [NSExpression expressionForConstantValue:@(M_PI)]; } else if ([op isEqualToString:@"concat"]) { NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); - return [NSExpression expressionForFunction:@"mgl_join" arguments:subexpressions]; + NSExpression *subexpression = [NSExpression expressionForAggregate:subexpressions]; + return [NSExpression expressionForFunction:@"mgl_join:" arguments:@[subexpression]]; } else if ([op isEqualToString:@"at"]) { NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); NSExpression *index = subexpressions.firstObject; @@ -710,6 +711,9 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { } else if ([function isEqualToString:@"floor:"]) { return [NSExpression expressionWithFormat:@"trunc:(%@) - TERNARY(modulus:by:(%@, 1) < 0, 1, 0)", self.arguments.firstObject, self.arguments.firstObject].mgl_jsonExpressionObject; + } else if ([function isEqualToString:@"mgl_join:"]) { + NSArray *arguments = [self.arguments.firstObject.collection valueForKeyPath:@"mgl_jsonExpressionObject"]; + return [@[@"concat"] arrayByAddingObjectsFromArray:arguments]; } else if ([function isEqualToString:@"stringByAppendingString:"]) { NSArray *arguments = self.arguments.mgl_jsonExpressionObject; return [@[@"concat", self.operand.mgl_jsonExpressionObject] arrayByAddingObjectsFromArray:arguments]; diff --git a/platform/darwin/test/MGLExpressionTests.mm b/platform/darwin/test/MGLExpressionTests.mm index a78126ef95..71a28af70c 100644 --- a/platform/darwin/test/MGLExpressionTests.mm +++ b/platform/darwin/test/MGLExpressionTests.mm @@ -510,13 +510,13 @@ using namespace std::string_literals; NSArray *arguments = @[MGLConstantExpression(@"MacDonald")]; { NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION('Old', 'stringByAppendingString:', 'MacDonald')"]; - NSExpression *customExpression = [NSExpression expressionWithFormat:@"mgl_join({'Old', 'McDonald'})"]; + NSExpression *aftermarketExpression = [NSExpression expressionWithFormat:@"mgl_join({'Old', 'MacDonald'})"]; NSArray *jsonExpression = @[@"concat", @"Old", @"MacDonald"]; XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects(customExpression.mgl_jsonExpressionObject, jsonExpression); + XCTAssertEqualObjects(aftermarketExpression.mgl_jsonExpressionObject, jsonExpression); XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @"OldMacDonald"); - XCTAssertEqualObjects([customExpression expressionValueWithObject:nil context:nil], @"OldMacDonald"); - XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], customExpression); + XCTAssertEqualObjects([aftermarketExpression expressionValueWithObject:nil context:nil], @"OldMacDonald"); + XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], aftermarketExpression); } { NSExpression *expression = [NSExpression expressionForFunction:@"uppercase:" arguments:arguments]; |