summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2016-03-13 19:05:15 +0200
committerBruno de Oliveira Abinader <bruno@mapbox.com>2016-03-14 11:45:31 +0200
commitb5bb48edaa0a553a4b91c3632148bf86ac9e2bf6 (patch)
tree85d0d979f59488b772f63c22b99f1e0913ee3f0e /test
parentfe7e208b4224101f3feeddf9808ecedd3b0f486f (diff)
downloadqtlocation-mapboxgl-b5bb48edaa0a553a4b91c3632148bf86ac9e2bf6.tar.gz
[core] Simplify LatLng::unwrapForShortestPath usage
Simplify LatLng::{wrap,unwrapForShortestPath} code, avoiding duplicated code between Transform::{latLngToScreenCoordinate,easeTo,flyTo}. Added unit tests for camera usage in Transform to detect cases like e.g. crossing the antimeridian as a shortest path between two coordinates. Transform::flyTo precision loss to be handled in #4298.
Diffstat (limited to 'test')
-rw-r--r--test/map/transform.cpp72
1 files changed, 70 insertions, 2 deletions
diff --git a/test/map/transform.cpp b/test/map/transform.cpp
index d07a8d3880..d26df51fd4 100644
--- a/test/map/transform.cpp
+++ b/test/map/transform.cpp
@@ -291,8 +291,8 @@ TEST(Transform, Anchor) {
ASSERT_DOUBLE_EQ(latLng.latitude, transform.getLatLng().latitude);
ASSERT_DOUBLE_EQ(latLng.longitude, transform.getLatLng().longitude);
- transform.setAngle(-45 * util::DEG2RAD, anchorPoint);
- ASSERT_NEAR(-45 / util::RAD2DEG, transform.getAngle(), 0.000001);
+ transform.setAngle(45 * util::DEG2RAD, anchorPoint);
+ ASSERT_NEAR(45 / util::RAD2DEG, transform.getAngle(), 0.000001);
ASSERT_NEAR(anchorLatLng.latitude, transform.getLatLng().latitude, 1);
ASSERT_NEAR(anchorLatLng.longitude, transform.getLatLng().longitude, 1);
@@ -416,3 +416,71 @@ TEST(Transform, Antimeridian) {
ASSERT_DOUBLE_EQ(pixelWaikiriForwards.x, pixelWaikiriBackwards.x);
ASSERT_DOUBLE_EQ(pixelWaikiriForwards.y, pixelWaikiriBackwards.y);
}
+
+TEST(Transform, Camera) {
+ MockView view;
+ Transform transform(view, ConstrainMode::HeightOnly);
+ transform.resize({{ 1000, 1000 }});
+
+ const LatLng latLng1 { 45, 135 };
+ CameraOptions cameraOptions1;
+ cameraOptions1.zoom = 20;
+ cameraOptions1.center = latLng1;
+ transform.jumpTo(cameraOptions1);
+
+ ASSERT_DOUBLE_EQ(latLng1.latitude, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(latLng1.longitude, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(20, transform.getZoom());
+
+ const LatLng latLng2 { -45, -135 };
+ CameraOptions cameraOptions2;
+ cameraOptions2.zoom = 10;
+ cameraOptions2.center = latLng2;
+
+ transform.jumpTo(cameraOptions2);
+ ASSERT_DOUBLE_EQ(latLng2.latitude, transform.getLatLng().latitude);
+ ASSERT_DOUBLE_EQ(latLng2.longitude, transform.getLatLng().longitude);
+ ASSERT_DOUBLE_EQ(10, transform.getZoom());
+
+ AnimationOptions easeOptions(Seconds(1));
+ easeOptions.transitionFrameFn = [&](double t) {
+ ASSERT_TRUE(t >= 0 && t <= 1);
+ ASSERT_GE(latLng1.latitude, transform.getLatLng().latitude);
+ ASSERT_LE(latLng1.longitude, transform.getLatLng().longitude);
+ };
+ easeOptions.transitionFinishFn = [&]() {
+ ASSERT_NEAR(latLng1.latitude, transform.getLatLng().latitude, 0.000001);
+ ASSERT_NEAR(latLng1.longitude, transform.getLatLng().longitude, 0.000001);
+ ASSERT_NEAR(20, transform.getZoom(), 0.000001);
+ };
+
+ transform.easeTo(cameraOptions1, easeOptions);
+ ASSERT_TRUE(transform.inTransition());
+ transform.updateTransitions(transform.getTransitionStart() + Milliseconds(250));
+ transform.updateTransitions(transform.getTransitionStart() + Milliseconds(500));
+ transform.updateTransitions(transform.getTransitionStart() + Milliseconds(750));
+ transform.updateTransitions(transform.getTransitionStart() + transform.getTransitionDuration());
+ ASSERT_FALSE(transform.inTransition());
+
+ AnimationOptions flyOptions(Seconds(1));
+ flyOptions.transitionFrameFn = [&](double t) {
+ ASSERT_TRUE(t >= 0 && t <= 1);
+ ASSERT_LE(latLng2.latitude, transform.getLatLng().latitude);
+ ASSERT_GE(latLng2.longitude, transform.getLatLng().longitude);
+ };
+ flyOptions.transitionFinishFn = [&]() {
+ // XXX Fix precision loss in flyTo:
+ // https://github.com/mapbox/mapbox-gl-native/issues/4298
+ ASSERT_NEAR(latLng2.latitude, transform.getLatLng().latitude, 0.001);
+ ASSERT_NEAR(latLng2.longitude, transform.getLatLng().longitude, 0.001);
+ ASSERT_NEAR(10, transform.getZoom(), 0.00001);
+ };
+
+ transform.flyTo(cameraOptions2, flyOptions);
+ ASSERT_TRUE(transform.inTransition());
+ transform.updateTransitions(transform.getTransitionStart() + Milliseconds(250));
+ transform.updateTransitions(transform.getTransitionStart() + Milliseconds(500));
+ transform.updateTransitions(transform.getTransitionStart() + Milliseconds(750));
+ transform.updateTransitions(transform.getTransitionStart() + transform.getTransitionDuration());
+ ASSERT_FALSE(transform.inTransition());
+}