diff options
author | Minh Nguyễn <mxn@1ec5.org> | 2018-03-19 10:10:04 -0700 |
---|---|---|
committer | Fabian Guerra <fabian.guerra@mapbox.com> | 2018-03-28 19:35:58 -0400 |
commit | 38c31dd15b6f3e1b7e21c388e431120bd3986b2e (patch) | |
tree | 6b00a0225987d23c2e7c33923a4b9d8b71496ba4 | |
parent | 3f02c5e1a1fa619dadc583d22b5d83cb889cffaa (diff) | |
download | qtlocation-mapboxgl-38c31dd15b6f3e1b7e21c388e431120bd3986b2e.tar.gz |
[ios, macos] Convert length operator to length: for strings
Only works for literal strings.
-rw-r--r-- | platform/darwin/docs/guides/Predicates and Expressions.md | 1 | ||||
-rw-r--r-- | platform/darwin/src/NSExpression+MGLAdditions.mm | 8 | ||||
-rw-r--r-- | platform/darwin/test/MGLExpressionTests.mm | 6 |
3 files changed, 14 insertions, 1 deletions
diff --git a/platform/darwin/docs/guides/Predicates and Expressions.md b/platform/darwin/docs/guides/Predicates and Expressions.md index d1e809ef09..06eaabbdbe 100644 --- a/platform/darwin/docs/guides/Predicates and Expressions.md +++ b/platform/darwin/docs/guides/Predicates and Expressions.md @@ -161,6 +161,7 @@ Initializer parameter | Format string syntax `uppercase:` | `uppercase('Elysian Fields')` `lowercase:` | `lowercase('DOWNTOWN')` `noindex:` | `noindex(0 + 2 + c)` +`length:` | `length('Wapakoneta')` The following predefined functions are not supported: diff --git a/platform/darwin/src/NSExpression+MGLAdditions.mm b/platform/darwin/src/NSExpression+MGLAdditions.mm index 6e6376099c..3c159430af 100644 --- a/platform/darwin/src/NSExpression+MGLAdditions.mm +++ b/platform/darwin/src/NSExpression+MGLAdditions.mm @@ -439,7 +439,12 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { return [NSExpression expressionForKeyPath:argumentObjects.firstObject]; } else if ([op isEqualToString:@"length"]) { NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); - return [NSExpression expressionForFunction:@"count:" arguments:@[subexpressions.firstObject]]; + NSString *function = @"count:"; + if ([subexpressions.firstObject expressionType] == NSConstantValueExpressionType + && [[subexpressions.firstObject constantValue] isKindOfClass:[NSString class]]) { + function = @"length:"; + } + return [NSExpression expressionForFunction:function arguments:@[subexpressions.firstObject]]; } else if ([op isEqualToString:@"min"]) { NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); NSExpression *subexpression = [NSExpression expressionForAggregate:subexpressions]; @@ -599,6 +604,7 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { @"raise:toPower:": @"^", @"uppercase:": @"upcase", @"lowercase:": @"downcase", + @"length:": @"length", }; }); diff --git a/platform/darwin/test/MGLExpressionTests.mm b/platform/darwin/test/MGLExpressionTests.mm index 71a28af70c..807e7ffa00 100644 --- a/platform/darwin/test/MGLExpressionTests.mm +++ b/platform/darwin/test/MGLExpressionTests.mm @@ -530,6 +530,12 @@ using namespace std::string_literals; XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression); } + { + NSExpression *expression = [NSExpression expressionForFunction:@"length:" arguments:arguments]; + NSArray *jsonExpression = @[@"length", @"MacDonald"]; + XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); + XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression); + } } - (void)testTypeConversionExpressionObject { |