[ios, macos] Distinguish between conditionals and expressions in case expression
This commit is contained in:
committed by
Minh Nguyễn
parent
e32a0586f2
commit
f9e32d59ad
@@ -662,9 +662,9 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
NSMutableArray *arguments = [NSMutableArray array];
|
||||
|
||||
for (NSUInteger index = 0; index < argumentObjects.count; index++) {
|
||||
if ([argumentObjects[index] isKindOfClass:[NSArray class]]) {
|
||||
NSPredicate *conditional = [NSPredicate mgl_predicateWithJSONObject:argumentObjects[index]];
|
||||
NSExpression *argument = [NSExpression expressionWithFormat:@"%@", conditional];
|
||||
if (index % 2 == 0 && index != argumentObjects.count - 1) {
|
||||
NSPredicate *predicate = [NSPredicate mgl_predicateWithJSONObject:argumentObjects[index]];
|
||||
NSExpression *argument = [NSExpression expressionForConstantValue:predicate];
|
||||
[arguments addObject:argument];
|
||||
} else {
|
||||
[arguments addObject:[NSExpression mgl_expressionWithJSONObject:argumentObjects[index]]];
|
||||
@@ -673,7 +673,7 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) {
|
||||
|
||||
if (@available(iOS 9.0, *)) {
|
||||
if (arguments.count == 3) {
|
||||
NSPredicate *conditional = [NSPredicate mgl_predicateWithJSONObject:argumentObjects.firstObject];
|
||||
NSPredicate *conditional = [arguments.firstObject constantValue];
|
||||
return [NSExpression expressionForConditional:conditional trueExpression:arguments[1] falseExpression:arguments[2]];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -743,7 +743,21 @@ using namespace std::string_literals;
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @YES);
|
||||
}
|
||||
|
||||
{
|
||||
NSArray *jsonExpression = @[
|
||||
@"case",
|
||||
@[
|
||||
@"<",
|
||||
@[@"get", @"area"],
|
||||
@80000
|
||||
],
|
||||
@[@"get", @"abbr"],
|
||||
@[@"get", @"name_en"]
|
||||
];
|
||||
NSExpression *expression = [NSExpression expressionWithFormat:@"TERNARY(area < 80000, abbr, name_en)"];
|
||||
XCTAssertEqualObjects([NSExpression mgl_expressionWithJSONObject:jsonExpression], expression);
|
||||
XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression);
|
||||
}
|
||||
}
|
||||
|
||||
- (void)testLookupExpressionObject {
|
||||
|
||||
Reference in New Issue
Block a user