summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMinh Nguyễn <mxn@1ec5.org>2018-03-16 10:57:16 -0700
committerFabian Guerra <fabian.guerra@mapbox.com>2018-03-28 19:35:58 -0400
commitf10402d1e33d33ca886149ca575a268249a8a976 (patch)
treed7da8763ceba6aa277062a03ae8efe82f3db214f
parent09810d53bf224e68ba4cbe95cf633f4ad6c29592 (diff)
downloadqtlocation-mapboxgl-f10402d1e33d33ca886149ca575a268249a8a976.tar.gz
[ios, macos] Fixed mgl_join:
-rw-r--r--platform/darwin/src/NSExpression+MGLAdditions.mm14
-rw-r--r--platform/darwin/test/MGLExpressionTests.mm8
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];