2012-10-05 01:35:46 +02:00
|
|
|
#include <boost/detail/lightweight_test.hpp>
|
|
|
|
#include <iostream>
|
|
|
|
#include <mapnik/memory_datasource.hpp>
|
2014-05-30 11:16:49 +02:00
|
|
|
#include <mapnik/datasource_cache.hpp>
|
2012-10-05 01:35:46 +02:00
|
|
|
#include <mapnik/feature.hpp>
|
|
|
|
#include <mapnik/feature_factory.hpp>
|
|
|
|
#include <mapnik/unicode.hpp>
|
|
|
|
#include <mapnik/geometry.hpp>
|
|
|
|
#include <mapnik/map.hpp>
|
|
|
|
#include <mapnik/params.hpp>
|
|
|
|
#include <mapnik/expression.hpp>
|
|
|
|
#include <mapnik/layer.hpp>
|
|
|
|
#include <mapnik/rule.hpp>
|
|
|
|
#include <mapnik/feature_type_style.hpp>
|
|
|
|
#include <mapnik/agg_renderer.hpp>
|
|
|
|
#include <mapnik/graphics.hpp>
|
|
|
|
#include <mapnik/image_util.hpp>
|
|
|
|
#include <mapnik/color_factory.hpp>
|
|
|
|
#include <mapnik/save_map.hpp>
|
2013-08-14 00:52:04 +02:00
|
|
|
#include <mapnik/value_types.hpp>
|
2013-11-28 07:50:15 +01:00
|
|
|
#include <mapnik/symbolizer.hpp>
|
2014-07-11 15:43:56 +02:00
|
|
|
#include <mapnik/text/placements/dummy.hpp>
|
2013-05-25 02:21:55 +02:00
|
|
|
#include <vector>
|
2013-05-26 01:04:40 +02:00
|
|
|
#include <algorithm>
|
2014-06-12 16:14:05 +02:00
|
|
|
#include <mapnik/make_unique.hpp>
|
2012-10-05 01:35:46 +02:00
|
|
|
|
2014-08-14 21:47:51 +02:00
|
|
|
// icu - for memory cleanup (to make valgrind happy)
|
|
|
|
#include "unicode/uclean.h"
|
|
|
|
|
2013-05-26 03:16:18 +02:00
|
|
|
#include "utils.hpp"
|
|
|
|
|
2013-05-25 02:21:55 +02:00
|
|
|
int main(int argc, char** argv)
|
2012-10-05 01:35:46 +02:00
|
|
|
{
|
2013-05-25 02:21:55 +02:00
|
|
|
std::vector<std::string> args;
|
|
|
|
for (int i=1;i<argc;++i)
|
|
|
|
{
|
|
|
|
args.push_back(argv[i]);
|
|
|
|
}
|
|
|
|
bool quiet = std::find(args.begin(), args.end(), "-q")!=args.end();
|
|
|
|
|
2012-10-05 01:35:46 +02:00
|
|
|
try {
|
2013-05-26 03:16:18 +02:00
|
|
|
BOOST_TEST(set_working_dir(args));
|
|
|
|
|
|
|
|
// create a renderable map with a fontset and a text symbolizer
|
|
|
|
// and do not register any fonts, to ensure the error thrown is reasonable
|
2013-09-20 15:00:11 +02:00
|
|
|
mapnik::context_ptr ctx = std::make_shared<mapnik::context_type>();
|
2013-05-26 03:16:18 +02:00
|
|
|
ctx->push("name");
|
|
|
|
mapnik::feature_ptr feature(mapnik::feature_factory::create(ctx,1));
|
|
|
|
mapnik::transcoder tr("utf-8");
|
2013-08-14 00:52:04 +02:00
|
|
|
mapnik::value_unicode_string ustr = tr.transcode("hello world!");
|
2013-05-26 03:16:18 +02:00
|
|
|
feature->put("name",ustr);
|
2014-03-18 22:10:02 +01:00
|
|
|
auto pt = std::make_unique<mapnik::geometry_type>(mapnik::geometry_type::types::Point);
|
2013-05-26 03:16:18 +02:00
|
|
|
pt->move_to(128,128);
|
2014-03-18 22:10:02 +01:00
|
|
|
feature->add_geometry(pt.release());
|
2014-05-30 11:16:49 +02:00
|
|
|
|
|
|
|
mapnik::parameters params;
|
|
|
|
params["type"]="memory";
|
|
|
|
auto ds = std::make_shared<mapnik::memory_datasource>(params);
|
2013-07-04 20:27:33 +02:00
|
|
|
ds->push(feature);
|
2013-05-26 03:16:18 +02:00
|
|
|
mapnik::Map m(256,256);
|
|
|
|
mapnik::font_set fontset("fontset");
|
|
|
|
// NOTE: this is a valid font, but will fail because none are registered
|
|
|
|
fontset.add_face_name("DejaVu Sans Book");
|
|
|
|
m.insert_fontset("fontset", fontset);
|
|
|
|
mapnik::layer lyr("layer");
|
2013-07-04 20:27:33 +02:00
|
|
|
lyr.set_datasource(ds);
|
2013-05-26 03:16:18 +02:00
|
|
|
lyr.add_style("style");
|
2014-05-30 12:03:31 +02:00
|
|
|
m.add_layer(lyr);
|
2013-05-26 03:16:18 +02:00
|
|
|
mapnik::feature_type_style the_style;
|
2013-11-28 07:50:15 +01:00
|
|
|
mapnik::rule r;
|
|
|
|
mapnik::text_symbolizer text_sym;
|
|
|
|
mapnik::text_placements_ptr placement_finder = std::make_shared<mapnik::text_placements_dummy>();
|
2014-07-23 19:09:18 +02:00
|
|
|
placement_finder->defaults.format_defaults.face_name = "DejaVu Sans Book";
|
|
|
|
placement_finder->defaults.format_defaults.text_size = 10.0;
|
|
|
|
placement_finder->defaults.format_defaults.fill = mapnik::color(0,0,0);
|
|
|
|
placement_finder->defaults.format_defaults.fontset = fontset;
|
2013-11-28 07:50:15 +01:00
|
|
|
placement_finder->defaults.set_old_style_expression(mapnik::parse_expression("[name]"));
|
|
|
|
mapnik::put<mapnik::text_placements_ptr>(text_sym, mapnik::keys::text_placements_, placement_finder);
|
|
|
|
r.append(std::move(text_sym));
|
2014-04-29 02:10:00 +02:00
|
|
|
the_style.add_rule(std::move(r));
|
2013-05-26 03:16:18 +02:00
|
|
|
m.insert_style("style",the_style );
|
|
|
|
m.zoom_to_box(mapnik::box2d<double>(-256,-256,
|
|
|
|
256,256));
|
|
|
|
mapnik::image_32 buf(m.width(),m.height());
|
|
|
|
mapnik::agg_renderer<mapnik::image_32> ren(m,buf);
|
2012-10-05 01:35:46 +02:00
|
|
|
ren.apply();
|
|
|
|
} catch (std::exception const& ex) {
|
2013-11-28 07:50:15 +01:00
|
|
|
BOOST_TEST_EQ(std::string(ex.what()),std::string("Unable to find specified font face 'DejaVu Sans Book' in font set: 'fontset'"));
|
2012-10-05 01:35:46 +02:00
|
|
|
}
|
2014-08-14 21:47:51 +02:00
|
|
|
u_cleanup();
|
2012-10-05 01:35:46 +02:00
|
|
|
if (!::boost::detail::test_errors()) {
|
2013-05-25 02:21:55 +02:00
|
|
|
if (quiet) std::clog << "\x1b[1;32m.\x1b[0m";
|
|
|
|
else std::clog << "C++ fontset runtime: \x1b[1;32m✓ \x1b[0m\n";
|
2012-10-05 01:35:46 +02:00
|
|
|
::boost::detail::report_errors_remind().called_report_errors_function = true;
|
|
|
|
} else {
|
|
|
|
return ::boost::report_errors();
|
|
|
|
}
|
|
|
|
}
|