diff --git a/test/unit/text/text_placements_list.cpp b/test/unit/text/text_placements_list.cpp new file mode 100644 index 000000000..37bc553ed --- /dev/null +++ b/test/unit/text/text_placements_list.cpp @@ -0,0 +1,64 @@ +#include "catch.hpp" +#include +#include +#include + +TEST_CASE("text_placements_list") +{ + mapnik::text_placements_list list; + + list.defaults.format_defaults.text_size = 12.0; + list.defaults.set_format_tree(std::make_shared("\"Default text\"")); + + { + mapnik::text_symbolizer_properties & properties = list.add(); + properties.format_defaults.text_size = 10.0; + properties.set_format_tree(std::make_shared("\"Alternative text 1\"")); + } + + { + mapnik::text_symbolizer_properties & properties = list.add(); + properties.format_defaults.text_size = 8.0; + properties.set_format_tree(std::make_shared("\"Alternative text 2\"")); + } + + mapnik::context_ptr context(std::make_shared()); + mapnik::feature_impl feature(context, 1); + mapnik::attributes vars; + mapnik::text_placement_info_ptr info = list.get_placement_info(1.0, feature, vars); + + { + REQUIRE(info->next()); + CHECK(info->properties.format_defaults.text_size.get() == Approx(12.0)); + REQUIRE(info->properties.format_tree()); + mapnik::expression_set expressions; + info->properties.format_tree()->add_expressions(expressions); + REQUIRE(!expressions.empty()); + mapnik::expr_node const& expression = **expressions.begin(); + CHECK(expression.get() == mapnik::value_unicode_string("Default text")); + } + + { + REQUIRE(info->next()); + CHECK(info->properties.format_defaults.text_size.get() == Approx(10.0)); + REQUIRE(info->properties.format_tree()); + mapnik::expression_set expressions; + info->properties.format_tree()->add_expressions(expressions); + REQUIRE(!expressions.empty()); + mapnik::expr_node const& expression = **expressions.begin(); + CHECK(expression.get() == mapnik::value_unicode_string("Alternative text 1")); + } + + { + REQUIRE(info->next()); + CHECK(info->properties.format_defaults.text_size.get() == Approx(8.0)); + REQUIRE(info->properties.format_tree()); + mapnik::expression_set expressions; + info->properties.format_tree()->add_expressions(expressions); + REQUIRE(!expressions.empty()); + mapnik::expr_node const& expression = **expressions.begin(); + CHECK(expression.get() == mapnik::value_unicode_string("Alternative text 2")); + } + + CHECK(!info->next()); +}