/*
* Copyright (c) 2015 Daimler AG / Moovel GmbH
*
* All rights reserved
*/
package com.car2go.maps.osm;
import com.car2go.maps.AnyMap;
import com.car2go.maps.model.LatLng;
import com.car2go.maps.model.LatLngBounds;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.osmdroid.api.IMapController;
import static com.car2go.maps.osm.util.OsmUtils.toGeoPoint;
import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.refEq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
public class CameraUpdateHandlerTest {
@Mock
org.osmdroid.views.MapView map;
@Mock
IMapController mapController;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
doReturn(mapController)
.when(map)
.getController();
}
@Test
public void testMoveCameraToPosition() throws Exception {
// Given
CameraUpdateHandler handler = new CameraUpdateHandler(map);
final LatLng center = new LatLng(10, 10);
OsmCameraUpdate cameraUpdate = new OsmCameraUpdate.Builder()
.center(center)
.build();
// When
handler.moveCamera(cameraUpdate);
// Then
verify(mapController).setCenter(eq(toGeoPoint(center)));
verifyNoMoreInteractions(mapController);
}
@Test
public void testMoveCameraToPositionWithZoom() throws Exception {
// Given
CameraUpdateHandler handler = new CameraUpdateHandler(map);
final LatLng center = new LatLng(10, 10);
final int zoomLevel = 10;
OsmCameraUpdate cameraUpdate = new OsmCameraUpdate.Builder()
.center(center)
.zoom((float) zoomLevel)
.build();
// When
handler.moveCamera(cameraUpdate);
// Then
verify(mapController).setCenter(eq(toGeoPoint(center)));
verify(mapController).setZoom(zoomLevel);
verifyNoMoreInteractions(mapController);
}
@Test
public void testMoveCameraToBounds() throws Exception {
// Given
CameraUpdateHandler handler = new CameraUpdateHandler(map);
final LatLngBounds bounds = new LatLngBounds(
new LatLng(10, 10),
new LatLng(20, 20)
);
OsmCameraUpdate cameraUpdate = new OsmCameraUpdate.Builder()
.bounds(bounds)
.build();
// When
handler.moveCamera(cameraUpdate);
// Then
verify(mapController).setCenter(eq(
toGeoPoint(bounds.getCenter())
));
verify(mapController).zoomToSpan(
eq((int) (10 * 1e6)),
eq((int) (10 * 1e6))
);
}
@Test
public void testAnimateCamera() throws Exception {
// Given
CameraUpdateHandler handler = spy(new CameraUpdateHandler(map));
final LatLng center = new LatLng(10, 10);
OsmCameraUpdate cameraUpdate = new OsmCameraUpdate.Builder()
.center(center)
.build();
// When
handler.animateCamera(cameraUpdate);
// Then
verify(handler).moveCamera(refEq(cameraUpdate));
}
@Test
public void testAnimateCameraWithCallback() throws Exception {
// Given
CameraUpdateHandler handler = spy(new CameraUpdateHandler(map));
final LatLng center = new LatLng(10, 10);
OsmCameraUpdate cameraUpdate = new OsmCameraUpdate.Builder()
.center(center)
.build();
AnyMap.CancelableCallback callback = mock(AnyMap.CancelableCallback.class);
// When
handler.animateCamera(cameraUpdate, callback);
// Then
verify(handler).moveCamera(refEq(cameraUpdate));
verify(callback).onFinish();
verifyNoMoreInteractions(callback);
}
}