summaryrefslogtreecommitdiff
path: root/test/map
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-02-02 11:09:16 -0800
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-02-02 11:31:13 -0800
commitb97dcbc12592fc93d2c8137f3d56a523e994a136 (patch)
tree12e5f91d686f2853c5322a525663193a546ab130 /test/map
parentce8c6e26d58f91bba46576080caf48e4765c176f (diff)
downloadqtlocation-mapboxgl-b97dcbc12592fc93d2c8137f3d56a523e994a136.tar.gz
[tests] Reorganize tests to match src structure
Diffstat (limited to 'test/map')
-rw-r--r--test/map/map.cpp59
-rw-r--r--test/map/map_context.cpp23
-rw-r--r--test/map/tile.cpp50
-rw-r--r--test/map/transform.cpp236
4 files changed, 368 insertions, 0 deletions
diff --git a/test/map/map.cpp b/test/map/map.cpp
new file mode 100644
index 0000000000..ed63bb085c
--- /dev/null
+++ b/test/map/map.cpp
@@ -0,0 +1,59 @@
+#include "../fixtures/util.hpp"
+
+#include <mbgl/map/map.hpp>
+#include <mbgl/platform/default/headless_view.hpp>
+#include <mbgl/platform/default/headless_display.hpp>
+#include <mbgl/storage/online_file_source.hpp>
+
+using namespace mbgl;
+
+TEST(Map, PauseResume) {
+ using namespace mbgl;
+
+ auto display = std::make_shared<mbgl::HeadlessDisplay>();
+ HeadlessView view(display, 1);
+ OnlineFileSource fileSource(nullptr);
+
+ Map map(view, fileSource, MapMode::Continuous);
+
+ map.pause();
+ map.resume();
+}
+
+TEST(Map, DoublePause) {
+ using namespace mbgl;
+
+ auto display = std::make_shared<mbgl::HeadlessDisplay>();
+ HeadlessView view(display, 1);
+ OnlineFileSource fileSource(nullptr);
+
+ Map map(view, fileSource, MapMode::Continuous);
+
+ map.pause();
+ map.pause();
+ map.resume();
+}
+
+TEST(Map, ResumeWithoutPause) {
+ using namespace mbgl;
+
+ auto display = std::make_shared<mbgl::HeadlessDisplay>();
+ HeadlessView view(display, 1);
+ OnlineFileSource fileSource(nullptr);
+
+ Map map(view, fileSource, MapMode::Continuous);
+
+ map.resume();
+}
+
+TEST(Map, DestroyPaused) {
+ using namespace mbgl;
+
+ auto display = std::make_shared<mbgl::HeadlessDisplay>();
+ HeadlessView view(display, 1);
+ OnlineFileSource fileSource(nullptr);
+
+ Map map(view, fileSource, MapMode::Continuous);
+
+ map.pause();
+}
diff --git a/test/map/map_context.cpp b/test/map/map_context.cpp
new file mode 100644
index 0000000000..60cb3d6b7f
--- /dev/null
+++ b/test/map/map_context.cpp
@@ -0,0 +1,23 @@
+#include "../fixtures/util.hpp"
+
+#include <mbgl/map/map_data.hpp>
+#include <mbgl/map/map_context.hpp>
+#include <mbgl/platform/default/headless_view.hpp>
+#include <mbgl/platform/default/headless_display.hpp>
+#include <mbgl/storage/online_file_source.hpp>
+#include <mbgl/util/thread.hpp>
+
+using namespace mbgl;
+
+TEST(MapContext, DoubleStyleLoad) {
+ std::shared_ptr<HeadlessDisplay> display = std::make_shared<HeadlessDisplay>();
+ HeadlessView view(display, 1, 512, 512);
+ OnlineFileSource fileSource(nullptr);
+
+ util::Thread<MapContext> context({"Map", util::ThreadType::Map, util::ThreadPriority::Regular},
+ view, fileSource, MapMode::Continuous, GLContextMode::Unique, view.getPixelRatio());
+
+ context.invokeSync(&MapContext::setStyleJSON, "", "");
+ context.invokeSync(&MapContext::setStyleJSON, "", "");
+ context.invokeSync(&MapContext::cleanup);
+}
diff --git a/test/map/tile.cpp b/test/map/tile.cpp
new file mode 100644
index 0000000000..8341725f0f
--- /dev/null
+++ b/test/map/tile.cpp
@@ -0,0 +1,50 @@
+#include <iostream>
+#include "../fixtures/util.hpp"
+
+#include <mbgl/map/tile_id.hpp>
+
+using namespace mbgl;
+
+
+TEST(Variant, isChild) {
+ ASSERT_TRUE(TileID(1, 0, 0, 1).isChildOf(TileID(0, 0, 0, 0)));
+ ASSERT_TRUE(TileID(1, 1, 0, 1).isChildOf(TileID(0, 0, 0, 0)));
+ ASSERT_TRUE(TileID(1, 2, 0, 1).isChildOf(TileID(0, 1, 0, 0)));
+ ASSERT_TRUE(TileID(1, 3, 0, 1).isChildOf(TileID(0, 1, 0, 0)));
+ ASSERT_TRUE(TileID(1, 4, 0, 1).isChildOf(TileID(0, 2, 0, 0)));
+ ASSERT_TRUE(TileID(1, 5, 0, 1).isChildOf(TileID(0, 2, 0, 0)));
+ ASSERT_TRUE(TileID(2, 0, 0, 2).isChildOf(TileID(0, 0, 0, 0)));
+
+ ASSERT_TRUE(TileID(2, 8, 0, 2).isChildOf(TileID(0, 2, 0, 0)));
+ ASSERT_TRUE(TileID(2, 9, 0, 2).isChildOf(TileID(0, 2, 0, 0)));
+ ASSERT_TRUE(TileID(2, 10, 0, 2).isChildOf(TileID(0, 2, 0, 0)));
+ ASSERT_TRUE(TileID(2, 11, 0, 2).isChildOf(TileID(0, 2, 0, 0)));
+ ASSERT_TRUE(TileID(2, 12, 0, 2).isChildOf(TileID(0, 3, 0, 0)));
+ ASSERT_TRUE(TileID(2, 13, 0, 2).isChildOf(TileID(0, 3, 0, 0)));
+
+ ASSERT_TRUE(TileID(1, -1, 0, 1).isChildOf(TileID(0, -1, 0, 0)));
+ ASSERT_TRUE(TileID(1, -2, 0, 1).isChildOf(TileID(0, -1, 0, 0)));
+ ASSERT_TRUE(TileID(1, -3, 0, 1).isChildOf(TileID(0, -2, 0, 0)));
+ ASSERT_TRUE(TileID(1, -4, 0, 1).isChildOf(TileID(0, -2, 0, 0)));
+ ASSERT_TRUE(TileID(2, -1, 0, 2).isChildOf(TileID(0, -1, 0, 0)));
+ ASSERT_TRUE(TileID(2, -2, 0, 2).isChildOf(TileID(0, -1, 0, 0)));
+ ASSERT_TRUE(TileID(2, -3, 0, 2).isChildOf(TileID(0, -1, 0, 0)));
+ ASSERT_TRUE(TileID(2, -4, 0, 2).isChildOf(TileID(0, -1, 0, 0)));
+ ASSERT_TRUE(TileID(2, -5, 0, 2).isChildOf(TileID(0, -2, 0, 0)));
+ ASSERT_TRUE(TileID(2, -6, 0, 2).isChildOf(TileID(0, -2, 0, 0)));
+ ASSERT_TRUE(TileID(2, -7, 0, 2).isChildOf(TileID(0, -2, 0, 0)));
+ ASSERT_TRUE(TileID(2, -8, 0, 2).isChildOf(TileID(0, -2, 0, 0)));
+
+ ASSERT_FALSE(TileID(4, -16, 0, 4).isChildOf(TileID(0, -2, 0, 0)));
+ ASSERT_TRUE(TileID(4, -17, 0, 4).isChildOf(TileID(0, -2, 0, 0)));
+
+ ASSERT_TRUE(TileID(2, -1, 0, 2).isChildOf(TileID(1, -1, 0, 1)));
+ ASSERT_TRUE(TileID(2, -2, 0, 2).isChildOf(TileID(1, -1, 0, 1)));
+ ASSERT_TRUE(TileID(2, -3, 0, 2).isChildOf(TileID(1, -2, 0, 1)));
+ ASSERT_TRUE(TileID(2, -4, 0, 2).isChildOf(TileID(1, -2, 0, 1)));
+ ASSERT_TRUE(TileID(3, -1, 0, 3).isChildOf(TileID(1, -1, 0, 1)));
+ ASSERT_TRUE(TileID(3, -2, 0, 3).isChildOf(TileID(1, -1, 0, 1)));
+ ASSERT_TRUE(TileID(3, -3, 0, 3).isChildOf(TileID(1, -1, 0, 1)));
+ ASSERT_TRUE(TileID(3, -4, 0, 3).isChildOf(TileID(1, -1, 0, 1)));
+ ASSERT_TRUE(TileID(3, -5, 0, 3).isChildOf(TileID(1, -2, 0, 1)));
+}
diff --git a/test/map/transform.cpp b/test/map/transform.cpp
new file mode 100644
index 0000000000..4a8b685564
--- /dev/null
+++ b/test/map/transform.cpp
@@ -0,0 +1,236 @@
+#include "../fixtures/util.hpp"
+#include "../fixtures/mock_view.hpp"
+
+#include <mbgl/map/transform.hpp>
+#include <mbgl/util/geo.hpp>
+
+using namespace mbgl;
+
+TEST(Transform, InvalidScale) {
+ MockView view;
+ Transform transform(view, ConstrainMode::HeightOnly);
+
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(1, transform.getScale());
+
+ transform.setScale(2 << 0);
+
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(2, transform.getScale());
+
+ const double invalid = std::nan("");
+ transform.setScale(invalid);
+
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(2, transform.getScale());
+
+ transform.scaleBy(invalid);
+
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(2, transform.getScale());
+
+ transform.setZoom(invalid);
+
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(2, transform.getScale());
+
+ transform.setLatLngZoom({ 0, 0 }, invalid);
+
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(2, transform.getScale());
+}
+
+TEST(Transform, InvalidLatLng) {
+ MockView view;
+ Transform transform(view, ConstrainMode::HeightOnly);
+
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(1, transform.getScale());
+
+ transform.setScale(2 << 0);
+ transform.setLatLng({ 8, 10 });
+
+ ASSERT_DOUBLE_EQ(8, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(10, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(2, transform.getScale());
+
+ transform.setLatLngZoom({ 10, 8 }, 2);
+
+ ASSERT_DOUBLE_EQ(10, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(8, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(4, transform.getScale());
+
+ const double invalid = std::nan("");
+ transform.setLatLngZoom({ invalid, 8 }, 2);
+
+ ASSERT_DOUBLE_EQ(10, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(8, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(4, transform.getScale());
+
+ transform.setLatLngZoom({ 10, invalid }, 2);
+
+ ASSERT_DOUBLE_EQ(10, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(8, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(4, transform.getScale());
+}
+
+
+TEST(Transform, InvalidBearing) {
+ MockView view;
+ Transform transform(view, ConstrainMode::HeightOnly);
+
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(1, transform.getScale());
+
+ transform.setScale(2 << 0);
+ transform.setAngle(2);
+
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(2, transform.getScale());
+ ASSERT_DOUBLE_EQ(2, transform.getAngle());
+
+ const double invalid = std::nan("");
+ transform.setAngle(invalid);
+
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(2, transform.getScale());
+ ASSERT_DOUBLE_EQ(2, transform.getAngle());
+}
+
+TEST(Transform, PerspectiveProjection) {
+ MockView view;
+ Transform transform(view, ConstrainMode::HeightOnly);
+
+ transform.resize({{ 1000, 1000 }});
+ transform.setScale(2 << 9);
+ transform.setPitch(0.9);
+ transform.setLatLng(LatLng(38, -77));
+
+ // expected values are from mapbox-gl-js
+
+ LatLng loc = transform.getState().pointToLatLng({ 500, 500 });
+ ASSERT_NEAR(-77, loc.longitude, 0.0001);
+ ASSERT_NEAR(38, loc.latitude, 0.0001);
+
+ loc = transform.getState().pointToLatLng({ 0, 1000 });
+ ASSERT_NEAR(-77.59198961199148, loc.longitude, 0.0002);
+ ASSERT_NEAR(38.74661326302018, loc.latitude, 0.0001);
+
+ loc = transform.getState().pointToLatLng({ 1000, 0 });
+ ASSERT_NEAR(-76.75823239205641, loc.longitude, 0.0001);
+ ASSERT_NEAR(37.692872969426375, loc.latitude, 0.0001);
+
+ PrecisionPoint point = transform.getState().latLngToPoint({38.74661326302018, -77.59198961199148});
+ ASSERT_NEAR(point.x, 0, 0.01);
+ ASSERT_NEAR(point.y, 1000, 0.01);
+
+ point = transform.getState().latLngToPoint({37.692872969426375, -76.75823239205641});
+ ASSERT_NEAR(point.x, 1000, 0.02);
+ ASSERT_NEAR(point.y, 0, 0.02);
+}
+
+TEST(Transform, ConstrainHeightOnly) {
+ MockView view;
+ LatLng loc;
+ LatLngBounds bounds;
+
+ Transform transform(view, ConstrainMode::HeightOnly);
+ transform.resize({{ 1000, 1000 }});
+ transform.setScale(1024);
+
+ transform.setLatLng(bounds.sw);
+ loc = transform.getState().pointToLatLng({ 500, 500 });
+ ASSERT_NEAR(-85.021422866378714, loc.latitude, 0.0001);
+ ASSERT_NEAR(180, std::abs(loc.longitude), 0.0001);
+
+ transform.setLatLng(bounds.ne);
+ loc = transform.getState().pointToLatLng({ 500, 500 });
+ ASSERT_NEAR(85.021422866378742, loc.latitude, 0.0001);
+ ASSERT_NEAR(180, std::abs(loc.longitude), 0.0001);
+}
+
+TEST(Transform, ConstrainWidthAndHeight) {
+ MockView view;
+ LatLng loc;
+ LatLngBounds bounds;
+
+ Transform transform(view, ConstrainMode::WidthAndHeight);
+ transform.resize({{ 1000, 1000 }});
+ transform.setScale(1024);
+
+ transform.setLatLng(bounds.sw);
+ loc = transform.getState().pointToLatLng({ 500, 500 });
+ ASSERT_NEAR(-85.021422866378714, loc.latitude, 0.0001);
+ ASSERT_NEAR(-179.65667724609375, loc.longitude, 0.0001);
+
+ transform.setLatLng(bounds.ne);
+ loc = transform.getState().pointToLatLng({ 500, 500 });
+ ASSERT_NEAR(85.021422866378742, loc.latitude, 0.0001);
+ ASSERT_NEAR(179.65667724609358, std::abs(loc.longitude), 0.0001);
+}
+
+TEST(Transform, Anchor) {
+ MockView view;
+ Transform transform(view, ConstrainMode::HeightOnly);
+
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(1, transform.getScale());
+
+ transform.setLatLngZoom({ 10, -100 }, 10);
+
+ ASSERT_DOUBLE_EQ(10, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(-100, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(10, transform.getZoom());
+ ASSERT_DOUBLE_EQ(0, transform.getAngle());
+
+ const PrecisionPoint anchorPoint = {0, 0};
+ const LatLng anchorLatLng = transform.getState().pointToLatLng(anchorPoint);
+ transform.setAngle(M_PI_4, anchorPoint);
+
+ ASSERT_NEAR(M_PI_4, transform.getAngle(), 0.000001);
+ ASSERT_NE(anchorLatLng, transform.getLatLng());
+ ASSERT_DOUBLE_EQ(anchorLatLng, transform.getState().pointToLatLng(anchorPoint));
+}
+
+TEST(Transform, Padding) {
+ MockView view;
+ Transform transform(view, ConstrainMode::HeightOnly);
+ transform.resize({{ 1000, 1000 }});
+
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(0, transform.getLatLng().longitude);
+
+ transform.setLatLngZoom({ 10, -100 }, 10);
+
+ const LatLng trueCenter = transform.getLatLng();
+ ASSERT_DOUBLE_EQ(10, trueCenter.latitude);
+ ASSERT_DOUBLE_EQ(-100, trueCenter.longitude);
+ ASSERT_DOUBLE_EQ(10, transform.getZoom());
+
+ const LatLng manualShiftedCenter = transform.getState().pointToLatLng({
+ 1000.0 / 2.0,
+ 1000.0 / 4.0,
+ });
+
+ EdgeInsets padding;
+ padding.top = 1000.0 / 2.0;
+ ASSERT_GT(padding.top, 0);
+ ASSERT_TRUE(padding);
+
+ const LatLng shiftedCenter = transform.getLatLng(padding);
+ ASSERT_NE(trueCenter.latitude, shiftedCenter.latitude);
+ ASSERT_DOUBLE_EQ(trueCenter.longitude, shiftedCenter.longitude);
+ ASSERT_DOUBLE_EQ(manualShiftedCenter.latitude, shiftedCenter.latitude);
+ ASSERT_DOUBLE_EQ(manualShiftedCenter.longitude, shiftedCenter.longitude);
+}