diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/test')
2 files changed, 298 insertions, 2 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationCameraControllerTest.java b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationCameraControllerTest.java index 9e26bb1a60..4f950cebac 100644 --- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationCameraControllerTest.java +++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationCameraControllerTest.java @@ -1,20 +1,29 @@ package com.mapbox.mapboxsdk.location; import android.graphics.PointF; +import android.location.Location; import com.mapbox.android.gestures.AndroidGesturesManager; import com.mapbox.android.gestures.MoveGestureDetector; import com.mapbox.mapboxsdk.camera.CameraPosition; import com.mapbox.mapboxsdk.camera.CameraUpdate; +import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.location.modes.CameraMode; import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.Projection; import com.mapbox.mapboxsdk.maps.UiSettings; +import junit.framework.Assert; + import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -413,6 +422,255 @@ public class LocationCameraControllerTest { verify(moveGestureDetector, times(1)).interrupt(); } + @Test + public void transition_locationIsNull() { + MapboxMap mapboxMap = mock(MapboxMap.class); + LocationCameraController camera = buildCamera(mapboxMap); + camera.initializeOptions(mock(LocationComponentOptions.class)); + OnLocationCameraTransitionListener listener = mock(OnLocationCameraTransitionListener.class); + + camera.setCameraMode(CameraMode.TRACKING, null, listener); + Assert.assertEquals(CameraMode.TRACKING, camera.getCameraMode()); + verify(listener).onLocationCameraTransitionFinished(CameraMode.TRACKING); + verify(mapboxMap, times(0)) + .animateCamera(any(CameraUpdate.class), any(Integer.class), any(MapboxMap.CancelableCallback.class)); + } + + @Test + public void transition_notTracking() { + MapboxMap mapboxMap = mock(MapboxMap.class); + LocationCameraController camera = buildCamera(mapboxMap); + camera.initializeOptions(mock(LocationComponentOptions.class)); + OnLocationCameraTransitionListener listener = mock(OnLocationCameraTransitionListener.class); + Location location = mock(Location.class); + + camera.setCameraMode(CameraMode.NONE, location, listener); + verify(listener, times(1)).onLocationCameraTransitionFinished(CameraMode.NONE); + verify(mapboxMap, times(0)) + .animateCamera(any(CameraUpdate.class), any(Integer.class), any(MapboxMap.CancelableCallback.class)); + } + + @Test + public void transition_trackingChanged() { + MapboxMap mapboxMap = mock(MapboxMap.class); + when(mapboxMap.getCameraPosition()).thenReturn(CameraPosition.DEFAULT); + LocationCameraController camera = buildCamera(mapboxMap); + camera.initializeOptions(mock(LocationComponentOptions.class)); + final OnLocationCameraTransitionListener listener = mock(OnLocationCameraTransitionListener.class); + Location location = mock(Location.class); + + doAnswer(new Answer<Void>() { + @Override + public Void answer(InvocationOnMock invocation) throws Throwable { + listener.onLocationCameraTransitionFinished(CameraMode.TRACKING); + return null; + } + }).when(mapboxMap).animateCamera(any(CameraUpdate.class), any(Integer.class), any(MapboxMap.CancelableCallback + .class)); + + camera.setCameraMode(CameraMode.TRACKING, location, listener); + verify(listener).onLocationCameraTransitionFinished(CameraMode.TRACKING); + verify(mapboxMap) + .animateCamera(any(CameraUpdate.class), any(Integer.class), any(MapboxMap.CancelableCallback.class)); + } + + @Test + public void transition_trackingNotChanged() { + MapboxMap mapboxMap = mock(MapboxMap.class); + when(mapboxMap.getCameraPosition()).thenReturn(CameraPosition.DEFAULT); + LocationCameraController camera = buildCamera(mapboxMap); + camera.initializeOptions(mock(LocationComponentOptions.class)); + final OnLocationCameraTransitionListener listener = mock(OnLocationCameraTransitionListener.class); + Location location = mock(Location.class); + + camera.setCameraMode(CameraMode.TRACKING, location, listener); + + doAnswer(new Answer<Void>() { + @Override + public Void answer(InvocationOnMock invocation) throws Throwable { + listener.onLocationCameraTransitionFinished(CameraMode.TRACKING_GPS_NORTH); + return null; + } + }).when(mapboxMap).animateCamera(any(CameraUpdate.class), any(Integer.class), any(MapboxMap.CancelableCallback + .class)); + + camera.setCameraMode(CameraMode.TRACKING_GPS_NORTH, location, listener); + verify(listener, times(1)).onLocationCameraTransitionFinished(CameraMode.TRACKING_GPS_NORTH); + verify(mapboxMap, times(1)) + .animateCamera(any(CameraUpdate.class), any(Integer.class), any(MapboxMap.CancelableCallback.class)); + } + + @Test + public void transition_canceled() { + MapboxMap mapboxMap = mock(MapboxMap.class); + when(mapboxMap.getCameraPosition()).thenReturn(CameraPosition.DEFAULT); + LocationCameraController camera = buildCamera(mapboxMap); + camera.initializeOptions(mock(LocationComponentOptions.class)); + final OnLocationCameraTransitionListener listener = mock(OnLocationCameraTransitionListener.class); + Location location = mock(Location.class); + + doAnswer(new Answer<Void>() { + @Override + public Void answer(InvocationOnMock invocation) throws Throwable { + listener.onLocationCameraTransitionCanceled(CameraMode.TRACKING); + return null; + } + }).when(mapboxMap).animateCamera(any(CameraUpdate.class), any(Integer.class), any(MapboxMap.CancelableCallback + .class)); + + camera.setCameraMode(CameraMode.TRACKING, location, listener); + verify(listener).onLocationCameraTransitionCanceled(CameraMode.TRACKING); + verify(mapboxMap) + .animateCamera(any(CameraUpdate.class), any(Integer.class), any(MapboxMap.CancelableCallback.class)); + } + + @Test + public void transition_mapboxCallbackFinished() { + MapboxMap mapboxMap = mock(MapboxMap.class); + when(mapboxMap.getCameraPosition()).thenReturn(CameraPosition.DEFAULT); + LocationCameraController camera = buildCamera(mapboxMap); + camera.initializeOptions(mock(LocationComponentOptions.class)); + final OnLocationCameraTransitionListener listener = mock(OnLocationCameraTransitionListener.class); + Location location = mock(Location.class); + when(location.getLatitude()).thenReturn(1.0); + when(location.getLongitude()).thenReturn(1.0); + when(location.getBearing()).thenReturn(30f); + when(location.getAltitude()).thenReturn(0.0); + + ArgumentCaptor<MapboxMap.CancelableCallback> callbackCaptor + = ArgumentCaptor.forClass(MapboxMap.CancelableCallback.class); + + camera.setCameraMode(CameraMode.TRACKING, location, listener); + + CameraPosition.Builder builder = new CameraPosition.Builder().target(new LatLng(location)); + verify(mapboxMap).animateCamera( + eq(CameraUpdateFactory.newCameraPosition(builder.build())), + eq((int) LocationComponentConstants.TRANSITION_ANIMATION_DURATION_MS), + callbackCaptor.capture()); + + Assert.assertTrue(camera.isTransitioning()); + + callbackCaptor.getValue().onFinish(); + + Assert.assertFalse(camera.isTransitioning()); + + verify(listener).onLocationCameraTransitionFinished(CameraMode.TRACKING); + } + + @Test + public void transition_mapboxCallbackCanceled() { + MapboxMap mapboxMap = mock(MapboxMap.class); + when(mapboxMap.getCameraPosition()).thenReturn(CameraPosition.DEFAULT); + LocationCameraController camera = buildCamera(mapboxMap); + camera.initializeOptions(mock(LocationComponentOptions.class)); + final OnLocationCameraTransitionListener listener = mock(OnLocationCameraTransitionListener.class); + Location location = mock(Location.class); + when(location.getLatitude()).thenReturn(1.0); + when(location.getLongitude()).thenReturn(1.0); + when(location.getBearing()).thenReturn(30f); + when(location.getAltitude()).thenReturn(0.0); + + ArgumentCaptor<MapboxMap.CancelableCallback> callbackCaptor + = ArgumentCaptor.forClass(MapboxMap.CancelableCallback.class); + + camera.setCameraMode(CameraMode.TRACKING, location, listener); + + CameraPosition.Builder builder = new CameraPosition.Builder().target(new LatLng(location)); + verify(mapboxMap).animateCamera( + eq(CameraUpdateFactory.newCameraPosition(builder.build())), + eq((int) LocationComponentConstants.TRANSITION_ANIMATION_DURATION_MS), + callbackCaptor.capture()); + + Assert.assertTrue(camera.isTransitioning()); + + callbackCaptor.getValue().onCancel(); + + Assert.assertFalse(camera.isTransitioning()); + + verify(listener).onLocationCameraTransitionCanceled(CameraMode.TRACKING); + } + + @Test + public void transition_mapboxAnimateBearing() { + MapboxMap mapboxMap = mock(MapboxMap.class); + when(mapboxMap.getCameraPosition()).thenReturn(CameraPosition.DEFAULT); + LocationCameraController camera = buildCamera(mapboxMap); + camera.initializeOptions(mock(LocationComponentOptions.class)); + final OnLocationCameraTransitionListener listener = mock(OnLocationCameraTransitionListener.class); + Location location = mock(Location.class); + when(location.getLatitude()).thenReturn(1.0); + when(location.getLongitude()).thenReturn(1.0); + when(location.getBearing()).thenReturn(30f); + when(location.getAltitude()).thenReturn(0.0); + + camera.setCameraMode(CameraMode.TRACKING_GPS, location, listener); + + CameraPosition.Builder builder = new CameraPosition.Builder().target(new LatLng(location)).bearing(30); + verify(mapboxMap).animateCamera( + eq(CameraUpdateFactory.newCameraPosition(builder.build())), + eq((int) LocationComponentConstants.TRANSITION_ANIMATION_DURATION_MS), + any(MapboxMap.CancelableCallback.class)); + } + + @Test + public void transition_mapboxAnimateNorth() { + MapboxMap mapboxMap = mock(MapboxMap.class); + when(mapboxMap.getCameraPosition()).thenReturn(CameraPosition.DEFAULT); + LocationCameraController camera = buildCamera(mapboxMap); + camera.initializeOptions(mock(LocationComponentOptions.class)); + final OnLocationCameraTransitionListener listener = mock(OnLocationCameraTransitionListener.class); + Location location = mock(Location.class); + when(location.getLatitude()).thenReturn(1.0); + when(location.getLongitude()).thenReturn(1.0); + when(location.getBearing()).thenReturn(30f); + when(location.getAltitude()).thenReturn(0.0); + + camera.setCameraMode(CameraMode.TRACKING_GPS_NORTH, location, listener); + + CameraPosition.Builder builder = new CameraPosition.Builder().target(new LatLng(location)).bearing(0); + verify(mapboxMap).animateCamera( + eq(CameraUpdateFactory.newCameraPosition(builder.build())), + eq((int) LocationComponentConstants.TRANSITION_ANIMATION_DURATION_MS), + any(MapboxMap.CancelableCallback.class)); + } + + @Test + public void transition_animatorValuesDuringTransition() { + MapboxMap mapboxMap = mock(MapboxMap.class); + when(mapboxMap.getCameraPosition()).thenReturn(CameraPosition.DEFAULT); + LocationCameraController camera = buildCamera(mapboxMap); + camera.initializeOptions(mock(LocationComponentOptions.class)); + final OnLocationCameraTransitionListener listener = mock(OnLocationCameraTransitionListener.class); + Location location = mock(Location.class); + + ArgumentCaptor<MapboxMap.CancelableCallback> callbackCaptor + = ArgumentCaptor.forClass(MapboxMap.CancelableCallback.class); + + camera.setCameraMode(CameraMode.TRACKING_GPS, location, listener); + + verify(mapboxMap).animateCamera( + any(CameraUpdate.class), + eq((int) LocationComponentConstants.TRANSITION_ANIMATION_DURATION_MS), + callbackCaptor.capture()); + + camera.onNewLatLngValue(new LatLng(10, 10)); + camera.onNewGpsBearingValue(10f); + camera.onNewCompassBearingValue(10f); + camera.onNewTiltValue(10f); + camera.onNewZoomValue(10f); + + verify(mapboxMap, times(0)).moveCamera(any(CameraUpdate.class)); + + callbackCaptor.getValue().onFinish(); + + camera.onNewLatLngValue(new LatLng(10, 10)); + camera.onNewGpsBearingValue(10f); + camera.onNewTiltValue(10f); + camera.onNewZoomValue(10f); + + verify(mapboxMap, times(4)).moveCamera(any(CameraUpdate.class)); + } + private LocationCameraController buildCamera(OnCameraTrackingChangedListener onCameraTrackingChangedListener) { MapboxMap mapboxMap = mock(MapboxMap.class); when(mapboxMap.getUiSettings()).thenReturn(mock(UiSettings.class)); diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt index b0bea5aa0e..2fa340fbb8 100644 --- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt +++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt @@ -7,6 +7,8 @@ import android.os.Looper import com.mapbox.android.core.location.LocationEngine import com.mapbox.android.core.location.LocationEngineRequest import com.mapbox.mapboxsdk.R +import com.mapbox.mapboxsdk.camera.CameraPosition +import com.mapbox.mapboxsdk.location.modes.CameraMode import com.mapbox.mapboxsdk.maps.MapboxMap import com.mapbox.mapboxsdk.maps.Style import io.mockk.mockk @@ -14,7 +16,7 @@ import org.junit.Assert import org.junit.Before import org.junit.Test import org.junit.runner.RunWith -import org.mockito.ArgumentMatchers +import org.mockito.ArgumentCaptor import org.mockito.Mock import org.mockito.Mockito.* import org.mockito.MockitoAnnotations @@ -90,7 +92,7 @@ class LocationComponentTest { .getDimension(R.dimen.mapbox_locationComponentTrackingMultiFingerMoveThreshold) doReturn(0f).`when`(resources) .getDimension(R.dimen.mapbox_locationComponentTrackingMultiFingerMoveThreshold) - locationComponent.activateLocationComponent(context, mockk(),true, locationEngineRequest) + locationComponent.activateLocationComponent(context, mockk(), true, locationEngineRequest) Assert.assertEquals(locationEngineRequest, locationComponent.locationEngineRequest) } @@ -145,4 +147,40 @@ class LocationComponentTest { verify(locationEngine).getLastLocation(lastListener) } + + @Test + fun transitionCallbackFinishedTest() { + locationComponent.activateLocationComponent(context, mockk(), locationEngine, locationEngineRequest, locationComponentOptions) + locationComponent.onStart() + locationComponent.isLocationComponentEnabled = true + `when`(mapboxMap.cameraPosition).thenReturn(CameraPosition.DEFAULT) + + val listener = mock(OnLocationCameraTransitionListener::class.java) + + val callback = ArgumentCaptor.forClass(OnLocationCameraTransitionListener::class.java) + locationComponent.setCameraMode(CameraMode.TRACKING, listener) + verify(locationCameraController).setCameraMode(eq(CameraMode.TRACKING), any(), callback.capture()) + callback.value.onLocationCameraTransitionFinished(CameraMode.TRACKING) + + verify(listener).onLocationCameraTransitionFinished(CameraMode.TRACKING) + verify(locationAnimatorCoordinator).resetAllCameraAnimations(CameraPosition.DEFAULT, false) + } + + @Test + fun transitionCallbackCanceledTest() { + locationComponent.activateLocationComponent(context, mockk(), locationEngine, locationEngineRequest, locationComponentOptions) + locationComponent.onStart() + locationComponent.isLocationComponentEnabled = true + `when`(mapboxMap.cameraPosition).thenReturn(CameraPosition.DEFAULT) + + val listener = mock(OnLocationCameraTransitionListener::class.java) + + val callback = ArgumentCaptor.forClass(OnLocationCameraTransitionListener::class.java) + locationComponent.setCameraMode(CameraMode.TRACKING, listener) + verify(locationCameraController).setCameraMode(eq(CameraMode.TRACKING), any(), callback.capture()) + callback.value.onLocationCameraTransitionCanceled(CameraMode.TRACKING) + + verify(listener).onLocationCameraTransitionCanceled(CameraMode.TRACKING) + verify(locationAnimatorCoordinator).resetAllCameraAnimations(CameraPosition.DEFAULT, false) + } }
\ No newline at end of file |