diff options
Diffstat (limited to 'platform')
-rw-r--r-- | platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm | 7 | ||||
-rw-r--r-- | platform/darwin/test/MGLFilterTests.mm | 12 |
2 files changed, 18 insertions, 1 deletions
diff --git a/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm b/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm index aa0e456bb1..19c264aa40 100644 --- a/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm +++ b/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm @@ -68,6 +68,12 @@ filter.values = self.rightExpression.mgl_filterValues; return filter; } + case NSContainsPredicateOperatorType: { + auto filter = mbgl::style::InFilter(); + filter.key = [self.rightExpression.constantValue UTF8String]; + filter.values = self.leftExpression.mgl_filterValues; + return filter; + } case NSBetweenPredicateOperatorType: { auto filter = mbgl::style::AllFilter(); auto gteFilter = mbgl::style::GreaterThanEqualsFilter(); @@ -85,7 +91,6 @@ case NSBeginsWithPredicateOperatorType: case NSEndsWithPredicateOperatorType: case NSCustomSelectorPredicateOperatorType: - case NSContainsPredicateOperatorType: [NSException raise:@"Unsupported operator type" format:@"NSPredicateOperatorType:%lu is not supported.", (unsigned long)self.predicateOperatorType]; } diff --git a/platform/darwin/test/MGLFilterTests.mm b/platform/darwin/test/MGLFilterTests.mm index 2bb188575b..b18400f83a 100644 --- a/platform/darwin/test/MGLFilterTests.mm +++ b/platform/darwin/test/MGLFilterTests.mm @@ -74,6 +74,18 @@ [self.mapView.style addLayer:layer]; } +- (void)testContainsPredicate +{ + // core does not have a "contains" filter but we can achieve the equivalent by creating an `mbgl::style::InFilter` + // and searching the value for the key + NSPredicate *expectedPredicate = [NSPredicate predicateWithFormat:@"park IN %@", @[@"park", @"neighbourhood"]]; + NSPredicate *containsPredicate = [NSPredicate predicateWithFormat:@"%@ CONTAINS %@", @[@"park", @"neighbourhood"], @"park"]; + + layer.predicate = containsPredicate; + XCTAssertEqualObjects(layer.predicate, expectedPredicate); + [self.mapView.style addLayer:layer]; +} + - (void)testBetweenPredicate { // core does not have a "between" filter but we can achieve the equivalent by creating a set of greater than or equal / less than or equal |