diff --git a/src/mbgl/style/filter_expression.cpp b/src/mbgl/style/filter_expression.cpp index 684715b02..bb755c564 100644 --- a/src/mbgl/style/filter_expression.cpp +++ b/src/mbgl/style/filter_expression.cpp @@ -59,7 +59,11 @@ FilterExpression parseSetFilter(const rapidjson::Value& value) { Expression expression; expression.key = { value[1u].GetString(), value[1u].GetStringLength() }; for (rapidjson::SizeType i = 2; i < value.Size(); ++i) { - expression.values.push_back(parseValue(value[i])); + Value parsedValue = parseValue(value[i]); + if (expression.key == "$type") { + parsedValue = parseFeatureType(parsedValue); + } + expression.values.push_back(parsedValue); } return expression; } diff --git a/test/miscellaneous/comparisons.cpp b/test/miscellaneous/comparisons.cpp index 315416c13..afb3990f8 100644 --- a/test/miscellaneous/comparisons.cpp +++ b/test/miscellaneous/comparisons.cpp @@ -72,6 +72,13 @@ TEST(FilterComparison, EqualsType) { ASSERT_TRUE(evaluate(f, {{}}, FeatureType::LineString)); } +TEST(FilterComparison, InType) { + FilterExpression f = parse("[\"in\", \"$type\", \"LineString\", \"Polygon\"]"); + ASSERT_FALSE(evaluate(f, {{}}, FeatureType::Point)); + ASSERT_TRUE(evaluate(f, {{}}, FeatureType::LineString)); + ASSERT_TRUE(evaluate(f, {{}}, FeatureType::Polygon)); +} + TEST(FilterComparison, Any) { ASSERT_FALSE(evaluate(parse("[\"any\"]"), {{}})); ASSERT_TRUE(evaluate(parse("[\"any\", [\"==\", \"foo\", 1]]"),