Merge pull request #1464 from mapbox/1ec5-type-in

Parse feature types in set filters
This commit is contained in:
Minh Nguyễn
2015-05-07 11:35:48 -07:00
2 changed files with 12 additions and 1 deletions

View File

@@ -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;
}

View File

@@ -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]]"),