diff --git a/src/memory_datasource.cpp b/src/memory_datasource.cpp index 3c182207b..1127f4b83 100644 --- a/src/memory_datasource.cpp +++ b/src/memory_datasource.cpp @@ -117,12 +117,20 @@ datasource::datasource_t memory_datasource::type() const featureset_ptr memory_datasource::features(const query& q) const { + if (features_.empty()) + { + return mapnik::make_invalid_featureset(); + } return std::make_shared(q.get_bbox(),*this,bbox_check_); } featureset_ptr memory_datasource::features_at_point(coord2d const& pt, double tol) const { + if (features_.empty()) + { + return mapnik::make_invalid_featureset(); + } box2d box = box2d(pt.x, pt.y, pt.x, pt.y); box.pad(tol); MAPNIK_LOG_DEBUG(memory_datasource) << "memory_datasource: Box=" << box << ", Point x=" << pt.x << ",y=" << pt.y; diff --git a/test/unit/datasource/memory.cpp b/test/unit/datasource/memory.cpp new file mode 100644 index 000000000..514e645ba --- /dev/null +++ b/test/unit/datasource/memory.cpp @@ -0,0 +1,46 @@ +/***************************************************************************** + * + * This file is part of Mapnik (c++ mapping toolkit) + * + * Copyright (C) 2015 Artem Pavlenko + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + *****************************************************************************/ + +#include "catch.hpp" +#include "ds_test_util.hpp" + +#include +#include +#include +#include + + +TEST_CASE("memory datasource") { + + SECTION("empty featureset") + { + mapnik::parameters params; + mapnik::datasource_ptr ds = std::make_shared(params); + CHECK(ds != nullptr); + auto fs = all_features(ds); + REQUIRE(!mapnik::is_valid(fs)); + while (auto f = fs->next()) + { + CHECK(false); // shouldn't get here + } + } +}