diff --git a/src/svg/process_building_symbolizer.cpp b/src/svg/process_building_symbolizer.cpp index f0f604f2d..7a8b1cb9f 100644 --- a/src/svg/process_building_symbolizer.cpp +++ b/src/svg/process_building_symbolizer.cpp @@ -37,4 +37,8 @@ namespace mapnik template void svg_renderer::process(building_symbolizer const& sym, Feature const& feature, proj_transform const& prj_trans); + + template void svg_renderer::process(building_symbolizer const& sym, + Feature const& feature, + proj_transform const& prj_trans); } diff --git a/src/svg/process_glyph_symbolizer.cpp b/src/svg/process_glyph_symbolizer.cpp index 75264dda2..105d78bb2 100644 --- a/src/svg/process_glyph_symbolizer.cpp +++ b/src/svg/process_glyph_symbolizer.cpp @@ -37,4 +37,8 @@ namespace mapnik template void svg_renderer::process(glyph_symbolizer const& sym, Feature const& feature, proj_transform const& prj_trans); + + template void svg_renderer::process(glyph_symbolizer const& sym, + Feature const& feature, + proj_transform const& prj_trans); } diff --git a/src/svg/process_line_pattern_symbolizer.cpp b/src/svg/process_line_pattern_symbolizer.cpp index a68040ab5..3711509e7 100644 --- a/src/svg/process_line_pattern_symbolizer.cpp +++ b/src/svg/process_line_pattern_symbolizer.cpp @@ -37,4 +37,8 @@ namespace mapnik template void svg_renderer::process(line_pattern_symbolizer const& sym, Feature const& feature, proj_transform const& prj_trans); + + template void svg_renderer::process(line_pattern_symbolizer const& sym, + Feature const& feature, + proj_transform const& prj_trans); } diff --git a/src/svg/process_line_symbolizer.cpp b/src/svg/process_line_symbolizer.cpp index 7b5d6ba44..67bbcee4a 100644 --- a/src/svg/process_line_symbolizer.cpp +++ b/src/svg/process_line_symbolizer.cpp @@ -37,4 +37,8 @@ namespace mapnik template void svg_renderer::process(line_symbolizer const& sym, Feature const& feature, proj_transform const& prj_trans); + + template void svg_renderer::process(line_symbolizer const& sym, + Feature const& feature, + proj_transform const& prj_trans); } diff --git a/src/svg/process_markers_symbolizer.cpp b/src/svg/process_markers_symbolizer.cpp index 949e35001..299f517ce 100644 --- a/src/svg/process_markers_symbolizer.cpp +++ b/src/svg/process_markers_symbolizer.cpp @@ -37,4 +37,8 @@ namespace mapnik template void svg_renderer::process(markers_symbolizer const& sym, Feature const& feature, proj_transform const& prj_trans); + + template void svg_renderer::process(markers_symbolizer const& sym, + Feature const& feature, + proj_transform const& prj_trans); } diff --git a/src/svg/process_point_symbolizer.cpp b/src/svg/process_point_symbolizer.cpp index 907f2ab11..0e65721eb 100644 --- a/src/svg/process_point_symbolizer.cpp +++ b/src/svg/process_point_symbolizer.cpp @@ -37,4 +37,8 @@ namespace mapnik template void svg_renderer::process(point_symbolizer const& sym, Feature const& feature, proj_transform const& prj_trans); + + template void svg_renderer::process(point_symbolizer const& sym, + Feature const& feature, + proj_transform const& prj_trans); } diff --git a/src/svg/process_polygon_pattern_symbolizer.cpp b/src/svg/process_polygon_pattern_symbolizer.cpp index 8eac6b4cd..2d9134dae 100644 --- a/src/svg/process_polygon_pattern_symbolizer.cpp +++ b/src/svg/process_polygon_pattern_symbolizer.cpp @@ -37,4 +37,8 @@ namespace mapnik template void svg_renderer::process(polygon_pattern_symbolizer const& sym, Feature const& feature, proj_transform const& prj_trans); + + template void svg_renderer::process(polygon_pattern_symbolizer const& sym, + Feature const& feature, + proj_transform const& prj_trans); } diff --git a/src/svg/process_polygon_symbolizer.cpp b/src/svg/process_polygon_symbolizer.cpp index f1a5b37e6..243bbe9f9 100644 --- a/src/svg/process_polygon_symbolizer.cpp +++ b/src/svg/process_polygon_symbolizer.cpp @@ -37,4 +37,8 @@ namespace mapnik template void svg_renderer::process(polygon_symbolizer const& sym, Feature const& feature, proj_transform const& prj_trans); + + template void svg_renderer::process(polygon_symbolizer const& sym, + Feature const& feature, + proj_transform const& prj_trans); } diff --git a/src/svg/process_raster_symbolizer.cpp b/src/svg/process_raster_symbolizer.cpp index 5035f416a..701bf9b96 100644 --- a/src/svg/process_raster_symbolizer.cpp +++ b/src/svg/process_raster_symbolizer.cpp @@ -37,4 +37,8 @@ namespace mapnik template void svg_renderer::process(raster_symbolizer const& sym, Feature const& feature, proj_transform const& prj_trans); + + template void svg_renderer::process(raster_symbolizer const& sym, + Feature const& feature, + proj_transform const& prj_trans); } diff --git a/src/svg/process_shield_symbolizer.cpp b/src/svg/process_shield_symbolizer.cpp index 389a0bb73..04db836e5 100644 --- a/src/svg/process_shield_symbolizer.cpp +++ b/src/svg/process_shield_symbolizer.cpp @@ -37,4 +37,8 @@ namespace mapnik template void svg_renderer::process(shield_symbolizer const& sym, Feature const& feature, proj_transform const& prj_trans); + + template void svg_renderer::process(shield_symbolizer const& sym, + Feature const& feature, + proj_transform const& prj_trans); } diff --git a/src/svg/process_text_symbolizer.cpp b/src/svg/process_text_symbolizer.cpp index 3e866fa6e..a8ea27f2e 100644 --- a/src/svg/process_text_symbolizer.cpp +++ b/src/svg/process_text_symbolizer.cpp @@ -37,4 +37,8 @@ namespace mapnik template void svg_renderer::process(text_symbolizer const& sym, Feature const& feature, proj_transform const& prj_trans); + + template void svg_renderer::process(text_symbolizer const& sym, + Feature const& feature, + proj_transform const& prj_trans); } diff --git a/tests/cpp_tests/svg_renderer_tests/file_output_test.cpp b/tests/cpp_tests/svg_renderer_tests/file_output_test.cpp new file mode 100644 index 000000000..bd1f92239 --- /dev/null +++ b/tests/cpp_tests/svg_renderer_tests/file_output_test.cpp @@ -0,0 +1,66 @@ +#define BOOST_TEST_MODULE file_output_test + +/* + * This test module contains test cases that + * verify the correct generation of SVG output + * using file streams as destinations. + */ + +// boost.test +#include + +// boost.filesystem +#include + +// mapnik +#include +#include +#include + +// stl +#include + +namespace filesystem = boost::filesystem; + +/* + * This test case tests the generation of an SVG document + * using a file stream. It uses svg_renderer parameterized + * with an std::ofstream as a target for output. + * + * It's important to notice that svg_renderer doesn't create + * or close the file stream, but leaves that task to the client. + * + * The test fails if the file can't be created and succeeds + * otherwise. + * + * Note: the file is created in the directory in which the + * test is run. + */ +BOOST_AUTO_TEST_CASE(file_output_test_case) +{ + using namespace mapnik; + typedef svg_renderer svg_ren; + + Map map(800, 600); + map.set_background(color_factory::from_string("blue")); + + std::string output_filename = "file_output_test_case.svg"; + std::ofstream output_stream(output_filename.c_str()); + + if(output_stream) + { + svg_ren renderer(map, output_stream); + renderer.apply(); + + output_stream.close(); + + filesystem::path output_filename_path = + filesystem::system_complete(filesystem::path(".")) / filesystem::path(output_filename); + + BOOST_CHECK_MESSAGE(filesystem::exists(output_filename_path), "File '"+output_filename_path.string()+"' was created."); + } + else + { + BOOST_FAIL("Could not create create/open file 'file_output_test_case.svg'."); + } +}