package io.nlopez.smartlocation; import android.content.Context; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import io.nlopez.smartlocation.location.config.LocationParams; import io.nlopez.smartlocation.util.MockLocationProvider; import io.nlopez.smartlocation.utils.Logger; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; @RunWith(CustomTestRunner.class) @Config(manifest = Config.NONE) public class LocationControlTest { private static final LocationParams DEFAULT_PARAMS = LocationParams.BEST_EFFORT; private static final boolean DEFAULT_SINGLE_UPDATE = false; private MockLocationProvider mockProvider; private OnLocationUpdatedListener locationUpdatedListener; @Before public void setup() { mockProvider = mock(MockLocationProvider.class); locationUpdatedListener = mock(OnLocationUpdatedListener.class); } @Test public void test_location_control_init() { Context context = RuntimeEnvironment.application.getApplicationContext(); SmartLocation smartLocation = new SmartLocation.Builder(context).logging(false).preInitialize(false).build(); SmartLocation.LocationControl locationControl = smartLocation.location(mockProvider); verifyZeroInteractions(mockProvider); smartLocation = new SmartLocation.Builder(context).logging(false).build(); locationControl = smartLocation.location(mockProvider); verify(mockProvider).init(eq(context), any(Logger.class)); } @Test public void test_location_control_start_defaults() { SmartLocation.LocationControl locationControl = createLocationControl(); locationControl.start(locationUpdatedListener); verify(mockProvider).start(locationUpdatedListener, DEFAULT_PARAMS, DEFAULT_SINGLE_UPDATE); } @Test public void test_location_control_start_only_once() { SmartLocation.LocationControl locationControl = createLocationControl(); locationControl.oneFix(); locationControl.start(locationUpdatedListener); verify(mockProvider).start(locationUpdatedListener, DEFAULT_PARAMS, true); } @Test public void test_location_control_start_continuous() { SmartLocation.LocationControl locationControl = createLocationControl(); locationControl.oneFix(); locationControl.continuous(); locationControl.start(locationUpdatedListener); verify(mockProvider).start(locationUpdatedListener, DEFAULT_PARAMS, false); } @Test public void test_location_control_start_navigation() { SmartLocation.LocationControl locationControl = createLocationControl(); locationControl.config(LocationParams.NAVIGATION); locationControl.start(locationUpdatedListener); verify(mockProvider).start(eq(locationUpdatedListener), eq(LocationParams.NAVIGATION), anyBoolean()); } @Test public void test_location_control_get_last_location() { SmartLocation.LocationControl locationControl = createLocationControl(); locationControl.getLastLocation(); verify(mockProvider).getLastLocation(); } @Test public void test_location_control_stop() { SmartLocation.LocationControl locationControl = createLocationControl(); locationControl.stop(); verify(mockProvider).stop(); } private SmartLocation.LocationControl createLocationControl() { Context context = RuntimeEnvironment.application.getApplicationContext(); SmartLocation smartLocation = new SmartLocation.Builder(context).logging(false).preInitialize(false).build(); SmartLocation.LocationControl locationControl = smartLocation.location(mockProvider); return locationControl; } }