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.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 io.reactivex.Single;
import static junit.framework.Assert.assertEquals;
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 ActivityTest extends BaseTest {
@Mock PendingIntent pendingIntent;
@Override
@Before
public void setup() throws Exception {
MockitoAnnotations.initMocks(this);
PowerMockito.spy(Single.class);
super.setup();
}
// Request Updates
@Test
public void Activity_RequestUpdates() throws Exception {
ArgumentCaptor<ActivityRequestUpdatesSingleOnSubscribe> captor = ArgumentCaptor.forClass(ActivityRequestUpdatesSingleOnSubscribe.class);
long detectionIntervalMillis = 123L;
rxLocation.activity().requestUpdates(detectionIntervalMillis,pendingIntent);
rxLocation.activity().requestUpdates(detectionIntervalMillis,pendingIntent, TIMEOUT_TIME, TIMEOUT_TIMEUNIT);
PowerMockito.verifyStatic(times(2));
Single.create(captor.capture());
ActivityRequestUpdatesSingleOnSubscribe single = captor.getAllValues().get(0);
assertEquals(detectionIntervalMillis, single.detectionIntervalMillis);
assertEquals(pendingIntent, single.pendingIntent);
assertNoTimeoutSet(single);
single = captor.getAllValues().get(1);
assertEquals(detectionIntervalMillis, single.detectionIntervalMillis);
assertEquals(pendingIntent, single.pendingIntent);
assertTimeoutSet(single);
}
// Remove Updates
@Test
public void Activity_RemoveUpdates() throws Exception {
ArgumentCaptor<ActivityRemoveUpdatesSingleOnSubscribe> captor = ArgumentCaptor.forClass(ActivityRemoveUpdatesSingleOnSubscribe.class);
rxLocation.activity().removeUpdates(pendingIntent);
rxLocation.activity().removeUpdates(pendingIntent, TIMEOUT_TIME, TIMEOUT_TIMEUNIT);
PowerMockito.verifyStatic(times(2));
Single.create(captor.capture());
ActivityRemoveUpdatesSingleOnSubscribe single = captor.getAllValues().get(0);
assertEquals(pendingIntent, single.pendingIntent);
assertNoTimeoutSet(single);
single = captor.getAllValues().get(1);
assertEquals(pendingIntent, single.pendingIntent);
assertTimeoutSet(single);
}
}