mapnik/tests/cxx/copy_move_test.cpp

78 lines
2 KiB
C++
Raw Normal View History

2015-04-24 14:40:22 +02:00
#include <mapnik/layer.hpp>
#include <mapnik/map.hpp>
#include <mapnik/color.hpp>
#include <mapnik/datasource.hpp>
#include <mapnik/datasource_cache.hpp>
#include <vector>
#include <algorithm>
#include "catch.hpp"
TEST_CASE("copy") {
SECTION("layers") {
try
{
mapnik::Map m0(100,100);
mapnik::Map m2(200,100);
mapnik::datasource_cache::instance().register_datasources("plugins/input/shape.input");
mapnik::parameters p;
p["type"]="shape";
p["file"]="demo/data/boundaries";
p["encoding"]="latin1";
auto ds0 = mapnik::datasource_cache::instance().create(p);
auto ds1 = ds0; // shared ptr copy
2015-04-25 10:33:35 +02:00
REQUIRE( (ds1 == ds0) );
REQUIRE( (*ds1 != *ds0) );
REQUIRE( (ds1.get() == ds0.get()) );
2015-04-24 14:40:22 +02:00
ds1 = mapnik::datasource_cache::instance().create(p); // new with the same parameters
2015-04-25 10:33:35 +02:00
REQUIRE( (ds1 != ds0) );
REQUIRE( (*ds1 == *ds0) );
2015-04-24 14:40:22 +02:00
auto ds2 = std::move(ds1);
2015-04-25 10:33:35 +02:00
REQUIRE( (ds2 != ds0) );
REQUIRE( (*ds2 == *ds0) );
2015-04-24 14:40:22 +02:00
// mapnik::layer
mapnik::layer l0("test-layer");
l0.set_datasource(ds0);
mapnik::layer l1 = l0; // copy assignment
2015-04-25 10:33:35 +02:00
REQUIRE( (l1 == l0) );
2015-04-24 14:40:22 +02:00
mapnik::layer l2(l0); // copy ctor
2015-04-25 10:33:35 +02:00
REQUIRE( (l2 == l0) );
2015-04-24 14:40:22 +02:00
mapnik::layer l3(mapnik::layer("test-layer")); // move ctor
l3.set_datasource(ds2);
2015-04-25 10:33:35 +02:00
REQUIRE( (l3 == l0) );
2015-04-24 14:40:22 +02:00
mapnik::layer l4 = std::move(l3);
2015-04-25 10:33:35 +02:00
REQUIRE( (l4 == l0) ); // move assignment
2015-04-24 14:40:22 +02:00
m0.add_layer(l4);
m0.set_background(mapnik::color("skyblue"));
m2.set_background(mapnik::color("skyblue"));
auto m1 = m0; //copy
2015-04-25 10:33:35 +02:00
REQUIRE( (m0 == m1) );
REQUIRE( (m0 != m2) );
2015-04-24 14:40:22 +02:00
m2 = m1; // copy
2015-04-25 10:33:35 +02:00
REQUIRE( (m2 == m1) );
2015-04-24 14:40:22 +02:00
m2 = std::move(m1);
2015-04-25 10:33:35 +02:00
REQUIRE( (m2 == m0) );
REQUIRE( (m1 != m0) );
2015-04-24 14:40:22 +02:00
2015-04-25 10:33:35 +02:00
REQUIRE( (m0 == m2) );
2015-04-24 14:40:22 +02:00
}
catch (std::exception const & ex)
{
std::clog << ex.what() << "\n";
REQUIRE(false);
}
}
}