package org.robolectric.shadows;
import android.app.job.JobInfo;
import android.app.job.JobScheduler;
import android.content.ComponentName;
import android.content.Context;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.TestRunners;
import org.robolectric.annotation.Config;
import static android.os.Build.VERSION_CODES.LOLLIPOP;
import static org.assertj.core.api.Assertions.assertThat;
import static org.robolectric.Shadows.shadowOf;
@RunWith(TestRunners.MultiApiSelfTest.class)
@Config(minSdk = LOLLIPOP)
public class ShadowJobSchedulerTest {
private JobScheduler jobScheduler;
@Before
public void setUp() {
jobScheduler = (JobScheduler) RuntimeEnvironment.application.getSystemService(Context.JOB_SCHEDULER_SERVICE);
}
@Test
public void getAllPendingJobs() {
JobInfo jobInfo = new JobInfo.Builder(99,
new ComponentName(RuntimeEnvironment.application, "component_class_name"))
.setPeriodic(1000)
.build();
jobScheduler.schedule(jobInfo);
assertThat(jobScheduler.getAllPendingJobs()).contains(jobInfo);
}
@Test
public void cancelAll() {
jobScheduler.schedule(new JobInfo.Builder(99,
new ComponentName(RuntimeEnvironment.application, "component_class_name"))
.setPeriodic(1000)
.build());
jobScheduler.schedule(new JobInfo.Builder(33,
new ComponentName(RuntimeEnvironment.application, "component_class_name"))
.setPeriodic(1000)
.build());
assertThat(jobScheduler.getAllPendingJobs()).hasSize(2);
jobScheduler.cancelAll();
assertThat(jobScheduler.getAllPendingJobs()).isEmpty();
}
@Test
public void cancelSingleJob() {
jobScheduler.schedule(new JobInfo.Builder(99,
new ComponentName(RuntimeEnvironment.application, "component_class_name"))
.setPeriodic(1000)
.build());
assertThat(jobScheduler.getAllPendingJobs()).isNotEmpty();
jobScheduler.cancel(99);
assertThat(jobScheduler.getAllPendingJobs()).isEmpty();
}
@Test
public void cancelNonExistentJob() {
jobScheduler.schedule(new JobInfo.Builder(99,
new ComponentName(RuntimeEnvironment.application, "component_class_name"))
.setPeriodic(1000)
.build());
assertThat(jobScheduler.getAllPendingJobs()).isNotEmpty();
jobScheduler.cancel(33);
assertThat(jobScheduler.getAllPendingJobs()).isNotEmpty();
}
@Test
public void schedule_success() {
int result = jobScheduler.schedule(new JobInfo.Builder(99,
new ComponentName(RuntimeEnvironment.application, "component_class_name"))
.setPeriodic(1000)
.build());
assertThat(result).isEqualTo(JobScheduler.RESULT_SUCCESS);
}
@Test
public void schedule_fail() {
shadowOf(jobScheduler).failOnJob(99);
int result = jobScheduler.schedule(new JobInfo.Builder(99,
new ComponentName(RuntimeEnvironment.application, "component_class_name"))
.setPeriodic(1000)
.build());
assertThat(result).isEqualTo(JobScheduler.RESULT_FAILURE);
}
}