Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Add c++ fontset test

  • Loading branch information...
commit e0bcf44874f62942a044f7f8f91d8cf4bcd19578 1 parent a4b5549
@springmeyer springmeyer authored
Showing with 71 additions and 0 deletions.
  1. +71 −0 tests/cpp_tests/fontset_runtime_test.cpp
View
71 tests/cpp_tests/fontset_runtime_test.cpp
@@ -0,0 +1,71 @@
+#include <boost/version.hpp>
+#include <boost/detail/lightweight_test.hpp>
+#include <iostream>
+#include <mapnik/memory_datasource.hpp>
+#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>
+
+
+int main( int, char*[] )
+{
+ // create a renderable map with a fontset and a text symbolizer
+ // and do not register any fonts, to ensure the error thrown is reasonable
+ mapnik::context_ptr ctx = boost::make_shared<mapnik::context_type>();
+ ctx->push("name");
+ mapnik::feature_ptr feature(mapnik::feature_factory::create(ctx,1));
+ mapnik::transcoder tr("utf-8");
+ UnicodeString ustr = tr.transcode("hello world!");
+ feature->put("name",ustr);
+ mapnik::geometry_type * pt = new mapnik::geometry_type(mapnik::Point);
+ pt->move_to(128,128);
+ feature->add_geometry(pt);
+ mapnik::datasource_ptr memory_ds = boost::make_shared<mapnik::memory_datasource>();
+ mapnik::memory_datasource *cache = dynamic_cast<mapnik::memory_datasource *>(memory_ds.get());
+ cache->push(feature);
+ 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");
+ lyr.set_datasource(memory_ds);
+ lyr.add_style("style");
+ m.addLayer(lyr);
+ mapnik::feature_type_style the_style;
+ mapnik::rule the_rule;
+ mapnik::text_symbolizer text_sym(mapnik::parse_expression("[name]"),10,mapnik::color(0,0,0));
+ text_sym.set_fontset(fontset);
+ the_rule.append(text_sym);
+ the_style.add_rule(the_rule);
+ 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);
+ try {
+ ren.apply();
+ } catch (std::exception const& ex) {
+ BOOST_TEST_EQ(std::string(ex.what()),std::string("No valid font face could be loaded for font set: 'fontset'"));
+ }
+ if (!::boost::detail::test_errors()) {
+ std::clog << "C++ fontset runtime: \x1b[1;32m✓ \x1b[0m\n";
+#if BOOST_VERSION >= 104600
+ ::boost::detail::report_errors_remind().called_report_errors_function = true;
+#endif
+ } else {
+ return ::boost::report_errors();
+ }
+}
Please sign in to comment.
Something went wrong with that request. Please try again.