diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-02-02 11:09:16 -0800 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2016-02-02 11:31:13 -0800 |
commit | b97dcbc12592fc93d2c8137f3d56a523e994a136 (patch) | |
tree | 12e5f91d686f2853c5322a525663193a546ab130 /test/map | |
parent | ce8c6e26d58f91bba46576080caf48e4765c176f (diff) | |
download | qtlocation-mapboxgl-b97dcbc12592fc93d2c8137f3d56a523e994a136.tar.gz |
[tests] Reorganize tests to match src structure
Diffstat (limited to 'test/map')
-rw-r--r-- | test/map/map.cpp | 59 | ||||
-rw-r--r-- | test/map/map_context.cpp | 23 | ||||
-rw-r--r-- | test/map/tile.cpp | 50 | ||||
-rw-r--r-- | test/map/transform.cpp | 236 |
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); +} |