From 6292e95f80fa2e0a9a7aa4d4d4e320a207e78d27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Thu, 7 May 2015 08:35:41 -0700 Subject: [PATCH 1/2] Parse feature types in set filters A filter key of `$type` should work in an `in` filter, just like in an `==` filter. --- src/mbgl/style/filter_expression.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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; } From 53586f89b33995dbc1a253611e7a22d65a328ab0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Thu, 7 May 2015 11:05:05 -0700 Subject: [PATCH 2/2] Added tests for 6292e95f80fa2e0a9a7aa4d4d4e320a207e78d27 --- test/miscellaneous/comparisons.cpp | 7 +++++++ 1 file changed, 7 insertions(+) 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]]"),