package com.patloew.rxlocation; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.Status; import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.LocationServices; import com.google.android.gms.location.LocationSettingsRequest; import com.google.android.gms.location.LocationSettingsResult; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareOnlyThisForTest; import org.powermock.modules.junit4.PowerMockRunner; import io.reactivex.Single; import static junit.framework.Assert.assertEquals; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.times; import static org.powermock.api.mockito.PowerMockito.spy; @SuppressWarnings("MissingPermission") @RunWith(PowerMockRunner.class) @PrepareOnlyThisForTest({ Single.class, LocationRequest.class, LocationSettingsRequest.Builder.class, LocationSettingsRequest.class, LocationSettingsResult.class, LocationServices.class, com.google.android.gms.location.ActivityRecognition.class, Status.class, ConnectionResult.class }) public class SettingsTest extends BaseTest { @Mock LocationSettingsRequest.Builder locationSettingsRequestBuilder; @Mock LocationSettingsRequest locationSettingsRequest; @Mock LocationSettingsResult locationSettingsResult; @Mock LocationRequest locationRequest; @Override @Before public void setup() throws Exception { MockitoAnnotations.initMocks(this); spy(Single.class); super.setup(); } @Test public void Check_LocationRequest() throws Exception { ArgumentCaptor<SettingsCheckSingleOnSubscribe> captor = ArgumentCaptor.forClass(SettingsCheckSingleOnSubscribe.class); doReturn(locationSettingsRequestBuilder).when(locationSettingsRequestBuilder).addLocationRequest(locationRequest); doReturn(locationSettingsRequest).when(locationSettingsRequestBuilder).build(); LocationSettings settings = spy(rxLocation.settings()); doReturn(locationSettingsRequestBuilder).when(settings).getLocationSettingsRequestBuilder(); settings.check(locationRequest); settings.check(locationRequest, TIMEOUT_TIME, TIMEOUT_TIMEUNIT); PowerMockito.verifyStatic(times(2)); Single.create(captor.capture()); SettingsCheckSingleOnSubscribe single = captor.getAllValues().get(0); assertEquals(locationSettingsRequest, single.locationSettingsRequest); assertNoTimeoutSet(single); single = captor.getAllValues().get(1); assertEquals(locationSettingsRequest, single.locationSettingsRequest); assertTimeoutSet(single); } @Test public void Check_LocationSettingsRequest() throws Exception { ArgumentCaptor<SettingsCheckSingleOnSubscribe> captor = ArgumentCaptor.forClass(SettingsCheckSingleOnSubscribe.class); rxLocation.settings().check(locationSettingsRequest); rxLocation.settings().check(locationSettingsRequest, TIMEOUT_TIME, TIMEOUT_TIMEUNIT); PowerMockito.verifyStatic(times(2)); Single.create(captor.capture()); SettingsCheckSingleOnSubscribe single = captor.getAllValues().get(0); assertEquals(locationSettingsRequest, single.locationSettingsRequest); assertNoTimeoutSet(single); single = captor.getAllValues().get(1); assertEquals(locationSettingsRequest, single.locationSettingsRequest); assertTimeoutSet(single); } @Test public void CheckAndHandleResolution_Completable_LocationRequest() throws Exception { ArgumentCaptor<SettingsCheckHandleSingleOnSubscribe> captor = ArgumentCaptor.forClass(SettingsCheckHandleSingleOnSubscribe.class); doReturn(locationSettingsRequestBuilder).when(locationSettingsRequestBuilder).addLocationRequest(locationRequest); doReturn(locationSettingsRequest).when(locationSettingsRequestBuilder).build(); LocationSettings settings = spy(rxLocation.settings()); doReturn(locationSettingsRequestBuilder).when(settings).getLocationSettingsRequestBuilder(); settings.checkAndHandleResolutionCompletable(locationRequest); settings.checkAndHandleResolutionCompletable(locationRequest, TIMEOUT_TIME, TIMEOUT_TIMEUNIT); PowerMockito.verifyStatic(times(2)); Single.create(captor.capture()); SettingsCheckHandleSingleOnSubscribe single = captor.getAllValues().get(0); assertEquals(locationSettingsRequest, single.locationSettingsRequest); assertNoTimeoutSet(single); single = captor.getAllValues().get(1); assertEquals(locationSettingsRequest, single.locationSettingsRequest); assertTimeoutSet(single); } @Test public void CheckAndHandleResolution_LocationRequest() throws Exception { ArgumentCaptor<SettingsCheckHandleSingleOnSubscribe> captor = ArgumentCaptor.forClass(SettingsCheckHandleSingleOnSubscribe.class); doReturn(locationSettingsRequestBuilder).when(locationSettingsRequestBuilder).addLocationRequest(locationRequest); doReturn(locationSettingsRequest).when(locationSettingsRequestBuilder).build(); LocationSettings settings = spy(rxLocation.settings()); doReturn(locationSettingsRequestBuilder).when(settings).getLocationSettingsRequestBuilder(); settings.checkAndHandleResolution(locationRequest); settings.checkAndHandleResolution(locationRequest, TIMEOUT_TIME, TIMEOUT_TIMEUNIT); PowerMockito.verifyStatic(times(2)); Single.create(captor.capture()); SettingsCheckHandleSingleOnSubscribe single = captor.getAllValues().get(0); assertEquals(locationSettingsRequest, single.locationSettingsRequest); assertNoTimeoutSet(single); single = captor.getAllValues().get(1); assertEquals(locationSettingsRequest, single.locationSettingsRequest); assertTimeoutSet(single); } @Test public void CheckAndHandleResolution_Completable_LocationSettingsRequest() throws Exception { ArgumentCaptor<SettingsCheckHandleSingleOnSubscribe> captor = ArgumentCaptor.forClass(SettingsCheckHandleSingleOnSubscribe.class); rxLocation.settings().checkAndHandleResolutionCompletable(locationSettingsRequest); rxLocation.settings().checkAndHandleResolutionCompletable(locationSettingsRequest, TIMEOUT_TIME, TIMEOUT_TIMEUNIT); PowerMockito.verifyStatic(times(2)); Single.create(captor.capture()); SettingsCheckHandleSingleOnSubscribe single = captor.getAllValues().get(0); assertEquals(locationSettingsRequest, single.locationSettingsRequest); assertNoTimeoutSet(single); single = captor.getAllValues().get(1); assertEquals(locationSettingsRequest, single.locationSettingsRequest); assertTimeoutSet(single); } @Test public void CheckAndHandleResolution_LocationSettingsRequest() throws Exception { ArgumentCaptor<SettingsCheckHandleSingleOnSubscribe> captor = ArgumentCaptor.forClass(SettingsCheckHandleSingleOnSubscribe.class); rxLocation.settings().checkAndHandleResolution(locationSettingsRequest); rxLocation.settings().checkAndHandleResolution(locationSettingsRequest, TIMEOUT_TIME, TIMEOUT_TIMEUNIT); PowerMockito.verifyStatic(times(2)); Single.create(captor.capture()); SettingsCheckHandleSingleOnSubscribe single = captor.getAllValues().get(0); assertEquals(locationSettingsRequest, single.locationSettingsRequest); assertNoTimeoutSet(single); single = captor.getAllValues().get(1); assertEquals(locationSettingsRequest, single.locationSettingsRequest); assertTimeoutSet(single); } }