package com.patloew.rxlocation; import android.app.PendingIntent; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.Status; import com.google.android.gms.location.GeofencingRequest; import com.google.android.gms.location.LocationServices; 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 java.util.ArrayList; import java.util.List; import io.reactivex.Single; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNull; import static org.mockito.Mockito.times; @SuppressWarnings("MissingPermission") @RunWith(PowerMockRunner.class) @PrepareOnlyThisForTest({ Single.class, LocationServices.class, com.google.android.gms.location.ActivityRecognition.class, Status.class, ConnectionResult.class }) public class GeofencingTest extends BaseTest { @Mock GeofencingRequest geofencingRequest; @Mock PendingIntent pendingIntent; List<String> geofenceRequestIds; @Override @Before public void setup() throws Exception { MockitoAnnotations.initMocks(this); PowerMockito.spy(Single.class); super.setup(); geofenceRequestIds = new ArrayList<>(0); } // Add @Test public void Add() throws Exception { ArgumentCaptor<GeofencingAddSingleOnSubscribe> captor = ArgumentCaptor.forClass(GeofencingAddSingleOnSubscribe.class); rxLocation.geofencing().add(geofencingRequest, pendingIntent); rxLocation.geofencing().add(geofencingRequest, pendingIntent, TIMEOUT_TIME, TIMEOUT_TIMEUNIT); PowerMockito.verifyStatic(times(2)); Single.create(captor.capture()); GeofencingAddSingleOnSubscribe single = captor.getAllValues().get(0); assertEquals(geofencingRequest, single.geofencingRequest); assertEquals(pendingIntent, single.pendingIntent); assertNoTimeoutSet(single); single = captor.getAllValues().get(1); assertEquals(geofencingRequest, single.geofencingRequest); assertEquals(pendingIntent, single.pendingIntent); assertTimeoutSet(single); } // Remove PendingIntent @Test public void Remove_PendingIntent() throws Exception { ArgumentCaptor<GeofencingRemoveSingleOnSubscribe> captor = ArgumentCaptor.forClass(GeofencingRemoveSingleOnSubscribe.class); rxLocation.geofencing().remove(pendingIntent); rxLocation.geofencing().remove(pendingIntent, TIMEOUT_TIME, TIMEOUT_TIMEUNIT); PowerMockito.verifyStatic(times(2)); Single.create(captor.capture()); GeofencingRemoveSingleOnSubscribe single = captor.getAllValues().get(0); assertEquals(pendingIntent, single.pendingIntent); assertNull(single.geofenceRequestIds); assertNoTimeoutSet(single); single = captor.getAllValues().get(1); assertEquals(pendingIntent, single.pendingIntent); assertNull(single.geofenceRequestIds); assertTimeoutSet(single); } @Test public void Remove_IdList() throws Exception { ArgumentCaptor<GeofencingRemoveSingleOnSubscribe> captor = ArgumentCaptor.forClass(GeofencingRemoveSingleOnSubscribe.class); rxLocation.geofencing().remove(geofenceRequestIds); rxLocation.geofencing().remove(geofenceRequestIds, TIMEOUT_TIME, TIMEOUT_TIMEUNIT); PowerMockito.verifyStatic(times(2)); Single.create(captor.capture()); GeofencingRemoveSingleOnSubscribe single = captor.getAllValues().get(0); assertEquals(geofenceRequestIds, single.geofenceRequestIds); assertNull(single.pendingIntent); assertNoTimeoutSet(single); single = captor.getAllValues().get(1); assertEquals(geofenceRequestIds, single.geofenceRequestIds); assertNull(single.pendingIntent); assertTimeoutSet(single); } }