From 82b801250ef69cc9dc5f73f64c41ce6d37b86270 Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Thu, 29 Sep 2016 15:31:37 +0300 Subject: [PATCH] [tests] Add unit tests for query features fiters --- cmake/test-files.cmake | 1 + test/api/query.test.cpp | 62 ++++++++++++++++++++++++++++++ test/fixtures/api/query_style.json | 61 +++++++++++++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 test/api/query.test.cpp create mode 100644 test/fixtures/api/query_style.json diff --git a/cmake/test-files.cmake b/cmake/test-files.cmake index 74dc60503..e98e993fe 100644 --- a/cmake/test-files.cmake +++ b/cmake/test-files.cmake @@ -15,6 +15,7 @@ set(MBGL_TEST_FILES test/api/annotations.test.cpp test/api/api_misuse.test.cpp test/api/custom_layer.test.cpp + test/api/query.test.cpp test/api/render_missing.test.cpp test/api/repeated_render.test.cpp diff --git a/test/api/query.test.cpp b/test/api/query.test.cpp new file mode 100644 index 000000000..7da0f4311 --- /dev/null +++ b/test/api/query.test.cpp @@ -0,0 +1,62 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace mbgl; + +namespace { + +class QueryTest { +public: + QueryTest() { + auto decoded = decodeImage(util::read_file("test/fixtures/sprites/default_marker.png")); + auto image = std::make_unique(std::move(decoded), 1.0); + + map.setStyleJSON(util::read_file("test/fixtures/api/query_style.json")); + map.addImage("test-icon", std::move(image)); + + test::render(map); + } + + util::RunLoop loop; + std::shared_ptr display { std::make_shared() }; + HeadlessView view { display, 1 }; + StubFileSource fileSource; + Map map { view, fileSource, MapMode::Still }; +}; + +} // end namespace + +TEST(Query, QueryRenderedFeatures) { + QueryTest test; + + auto features1 = test.map.queryRenderedFeatures(test.map.pixelForLatLng({ 0, 0 })); + EXPECT_EQ(features1.size(), 3u); + + auto features2 = test.map.queryRenderedFeatures(test.map.pixelForLatLng({ 9, 9 })); + EXPECT_EQ(features2.size(), 0u); +} + +TEST(Query, QueryRenderedFeaturesFilterLayer) { + QueryTest test; + + auto zz = test.map.pixelForLatLng({ 0, 0 }); + + auto features1 = test.map.queryRenderedFeatures(zz, {{ "layer1"}}); + EXPECT_EQ(features1.size(), 1u); + + auto features2 = test.map.queryRenderedFeatures(zz, {{ "layer1", "layer2" }}); + EXPECT_EQ(features2.size(), 2u); + + auto features3 = test.map.queryRenderedFeatures(zz, {{ "foobar" }}); + EXPECT_EQ(features3.size(), 0u); + + auto features4 = test.map.queryRenderedFeatures(zz, {{ "foobar", "layer3" }}); + EXPECT_EQ(features4.size(), 1u); +} diff --git a/test/fixtures/api/query_style.json b/test/fixtures/api/query_style.json new file mode 100644 index 000000000..6978e1ba1 --- /dev/null +++ b/test/fixtures/api/query_style.json @@ -0,0 +1,61 @@ +{ + "version": 8, + "sources": { + "source1": { + "type": "geojson", + "data": { + "type": "Point", + "coordinates": [ + 0, + 0 + ] + } + }, + "source2": { + "type": "geojson", + "data": { + "type": "Point", + "coordinates": [ + 0, + 0 + ] + } + }, + "source3": { + "type": "geojson", + "data": { + "type": "Point", + "coordinates": [ + 0, + 0 + ] + } + } + }, + "layers": [ + { + "id": "layer1", + "type": "symbol", + "source": "source1", + "layout": { + "icon-image": "test-icon" + } + }, + { + "id": "layer2", + "type": "symbol", + "source": "source2", + "layout": { + "icon-image": "test-icon" + } + }, + { + "id": "layer3", + "type": "symbol", + "source": "source3", + "layout": { + "icon-image": "test-icon" + } + } + ] +}