summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAlexander Shalamov <alexander.shalamov@mapbox.com>2019-03-28 00:44:32 +0200
committerAlexander Shalamov <alexander.shalamov@mapbox.com>2019-03-28 22:27:59 +0200
commit4e335d0b050c6d5b94ae0d28cb4fd36b939ad84b (patch)
tree55d8f2e17ba3d7083a648aed4aac9cb366da8bf7 /test
parent21155772ef086c949f951e32424c36b9dd7dc430 (diff)
downloadqtlocation-mapboxgl-4e335d0b050c6d5b94ae0d28cb4fd36b939ad84b.tar.gz
[core] Traverse expression tree when checking for property overrides
Before this change, symbol layer was only checking whether top level 'text-field' layout property expression is FormatExpression and if it has paint property overrides. This change takes into account that 'text-field' might have nested expressions, thus, requires traversal over child expressions. Fixes: #14254
Diffstat (limited to 'test')
-rw-r--r--test/style/style_layer.test.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/test/style/style_layer.test.cpp b/test/style/style_layer.test.cpp
index e58a5fe5d0..7598d888e9 100644
--- a/test/style/style_layer.test.cpp
+++ b/test/style/style_layer.test.cpp
@@ -1,4 +1,5 @@
#include <mbgl/style/expression/dsl.hpp>
+#include <mbgl/style/expression/match.hpp>
#include <mbgl/style/expression/format_expression.hpp>
#include <mbgl/style/style_impl.hpp>
#include <mbgl/style/layers/background_layer.hpp>
@@ -330,6 +331,17 @@ void testHasOverrides(LayoutType& layout) {
PropertyExpression<Formatted> propExprOverride(std::move(formatExprOverride));
layout.template get<TextField>() = PropertyValueType<Formatted>(std::move(propExprOverride));
EXPECT_TRUE(MockOverrides::hasOverrides(layout.template get<TextField>()));
+
+ // Nested expressions, overridden text-color.
+ auto formattedExpr1 = format("first paragraph");
+ std::vector<FormatExpressionSection> sections{ { literal("second paragraph"), nullopt, nullopt, toColor(literal("blue")) } };
+ auto formattedExpr2 = std::make_unique<FormatExpression>(std::move(sections));
+ std::unordered_map<std::string, std::shared_ptr<Expression>> branches{ { "1st", std::move(formattedExpr1) },
+ { "2nd", std::move(formattedExpr2) } };
+ auto match = std::make_unique<Match<std::string>>(type::Formatted, literal("input"), std::move(branches), format("otherwise"));
+ PropertyExpression<Formatted> nestedPropExpr(std::move(match));
+ layout.template get<TextField>() = PropertyValueType<Formatted>(std::move(nestedPropExpr));
+ EXPECT_TRUE(MockOverrides::hasOverrides(layout.template get<TextField>()));
}
} // namespace