summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMinh Nguyễn <mxn@1ec5.org>2018-03-19 10:10:04 -0700
committerFabian Guerra <fabian.guerra@mapbox.com>2018-03-28 19:35:58 -0400
commit38c31dd15b6f3e1b7e21c388e431120bd3986b2e (patch)
tree6b00a0225987d23c2e7c33923a4b9d8b71496ba4
parent3f02c5e1a1fa619dadc583d22b5d83cb889cffaa (diff)
downloadqtlocation-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.md1
-rw-r--r--platform/darwin/src/NSExpression+MGLAdditions.mm8
-rw-r--r--platform/darwin/test/MGLExpressionTests.mm6
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 {