Index: components/background_task_scheduler/android/javatests/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerJobServiceTest.java |
diff --git a/components/background_task_scheduler/android/javatests/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerJobServiceTest.java b/components/background_task_scheduler/android/javatests/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerJobServiceTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9be58ec0ab1209b120ffb2975657fe082717bd47 |
--- /dev/null |
+++ b/components/background_task_scheduler/android/javatests/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerJobServiceTest.java |
@@ -0,0 +1,137 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.components.background_task_scheduler; |
+ |
+import android.annotation.TargetApi; |
+import android.app.job.JobInfo; |
+import android.content.Context; |
+import android.os.Build; |
+import android.os.Bundle; |
+import android.os.PersistableBundle; |
+import android.support.test.filters.SmallTest; |
+import android.test.InstrumentationTestCase; |
+ |
+import org.chromium.base.test.util.MinAndroidSdkLevel; |
+ |
+import java.util.concurrent.TimeUnit; |
+ |
+/** |
+ * Tests for {@link BackgroundTaskSchedulerJobService}. |
+ */ |
+@TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1) |
+@MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP_MR1) |
+public class BackgroundTaskSchedulerJobServiceTest extends InstrumentationTestCase { |
+ private static class TestBackgroundTask implements BackgroundTask { |
+ @Override |
+ public boolean onStartTask( |
+ Context context, TaskParameters taskParameters, TaskFinishedCallback callback) { |
+ return false; |
+ } |
+ |
+ @Override |
+ public boolean onStopTask(Context context, TaskParameters taskParameters) { |
+ return false; |
+ } |
+ } |
+ |
+ @SmallTest |
+ public void testOneOffTaskInfoWithDeadlineConversion() { |
+ TaskInfo oneOffTask = TaskInfo.createOneOffTask(TaskIds.TEST, TestBackgroundTask.class, |
+ TimeUnit.MINUTES.toMillis(200)) |
+ .build(); |
+ JobInfo jobInfo = BackgroundTaskSchedulerJobService.createJobInfoFromTaskInfo( |
+ getInstrumentation().getTargetContext(), oneOffTask); |
+ assertEquals(oneOffTask.getTaskId(), jobInfo.getId()); |
+ assertFalse(jobInfo.isPeriodic()); |
+ assertEquals(oneOffTask.getOneOffInfo().getWindowEndTimeMs(), |
+ jobInfo.getMaxExecutionDelayMillis()); |
+ } |
+ |
+ @SmallTest |
+ public void testOneOffTaskInfoWithWindowConversion() { |
+ TaskInfo oneOffTask = |
+ TaskInfo.createOneOffTask(TaskIds.TEST, TestBackgroundTask.class, |
+ TimeUnit.MINUTES.toMillis(100), TimeUnit.MINUTES.toMillis(200)) |
+ .build(); |
+ JobInfo jobInfo = BackgroundTaskSchedulerJobService.createJobInfoFromTaskInfo( |
+ getInstrumentation().getTargetContext(), oneOffTask); |
+ assertEquals(oneOffTask.getTaskId(), jobInfo.getId()); |
+ assertFalse(jobInfo.isPeriodic()); |
+ assertEquals( |
+ oneOffTask.getOneOffInfo().getWindowStartTimeMs(), jobInfo.getMinLatencyMillis()); |
+ assertEquals(oneOffTask.getOneOffInfo().getWindowEndTimeMs(), |
+ jobInfo.getMaxExecutionDelayMillis()); |
+ } |
+ |
+ @SmallTest |
+ public void testPeriodicTaskInfoWithoutFlexConversion() { |
+ TaskInfo periodicTask = TaskInfo.createPeriodicTask(TaskIds.TEST, TestBackgroundTask.class, |
+ TimeUnit.MINUTES.toMillis(200)) |
+ .build(); |
+ JobInfo jobInfo = BackgroundTaskSchedulerJobService.createJobInfoFromTaskInfo( |
+ getInstrumentation().getTargetContext(), periodicTask); |
+ assertEquals(periodicTask.getTaskId(), jobInfo.getId()); |
+ assertTrue(jobInfo.isPeriodic()); |
+ assertEquals(periodicTask.getPeriodicInfo().getIntervalMs(), jobInfo.getIntervalMillis()); |
+ } |
+ |
+ @SmallTest |
+ public void testPeriodicTaskInfoWithFlexConversion() { |
+ TaskInfo periodicTask = |
+ TaskInfo.createPeriodicTask(TaskIds.TEST, TestBackgroundTask.class, |
+ TimeUnit.MINUTES.toMillis(200), TimeUnit.MINUTES.toMillis(50)) |
+ .build(); |
+ JobInfo jobInfo = BackgroundTaskSchedulerJobService.createJobInfoFromTaskInfo( |
+ getInstrumentation().getTargetContext(), periodicTask); |
+ assertEquals(periodicTask.getTaskId(), jobInfo.getId()); |
+ assertTrue(jobInfo.isPeriodic()); |
+ assertEquals(periodicTask.getPeriodicInfo().getIntervalMs(), jobInfo.getIntervalMillis()); |
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { |
+ assertEquals(periodicTask.getPeriodicInfo().getFlexMs(), jobInfo.getFlexMillis()); |
+ } |
+ } |
+ |
+ @SmallTest |
+ public void testTaskInfoWithExtras() { |
+ Bundle taskExtras = new Bundle(); |
+ taskExtras.putString("foo", "bar"); |
+ taskExtras.putBoolean("bools", true); |
+ taskExtras.putLong("longs", 1342543L); |
+ TaskInfo oneOffTask = TaskInfo.createOneOffTask(TaskIds.TEST, TestBackgroundTask.class, |
+ TimeUnit.MINUTES.toMillis(200)) |
+ .setExtras(taskExtras) |
+ .build(); |
+ JobInfo jobInfo = BackgroundTaskSchedulerJobService.createJobInfoFromTaskInfo( |
+ getInstrumentation().getTargetContext(), oneOffTask); |
+ assertEquals(oneOffTask.getTaskId(), jobInfo.getId()); |
+ PersistableBundle jobExtras = jobInfo.getExtras(); |
+ PersistableBundle persistableBundle = jobExtras.getPersistableBundle( |
+ BackgroundTaskSchedulerJobService.BACKGROUND_TASK_EXTRAS_KEY); |
+ assertEquals(taskExtras.keySet().size(), persistableBundle.keySet().size()); |
+ assertEquals(taskExtras.getString("foo"), persistableBundle.getString("foo")); |
+ assertEquals(taskExtras.getBoolean("bools"), persistableBundle.getBoolean("bools")); |
+ assertEquals(taskExtras.getLong("longs"), persistableBundle.getLong("longs")); |
+ } |
+ |
+ @SmallTest |
+ public void testTaskInfoWithManyConstraints() { |
+ TaskInfo.Builder taskBuilder = TaskInfo.createOneOffTask( |
+ TaskIds.TEST, TestBackgroundTask.class, TimeUnit.MINUTES.toMillis(200)); |
+ |
+ JobInfo jobInfo = BackgroundTaskSchedulerJobService.createJobInfoFromTaskInfo( |
+ getInstrumentation().getTargetContext(), taskBuilder.setIsPersisted(true).build()); |
+ assertTrue(jobInfo.isPersisted()); |
+ |
+ jobInfo = BackgroundTaskSchedulerJobService.createJobInfoFromTaskInfo( |
+ getInstrumentation().getTargetContext(), |
+ taskBuilder.setRequiredNetworkType(TaskInfo.NETWORK_TYPE_UNMETERED).build()); |
+ assertEquals(JobInfo.NETWORK_TYPE_UNMETERED, jobInfo.getNetworkType()); |
+ |
+ jobInfo = BackgroundTaskSchedulerJobService.createJobInfoFromTaskInfo( |
+ getInstrumentation().getTargetContext(), |
+ taskBuilder.setRequiresCharging(true).build()); |
+ assertTrue(jobInfo.isRequireCharging()); |
+ } |
+} |