Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5443)

Unified Diff: chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/prefetch/PrefetchBackgroundTaskTest.java

Issue 2820263002: [Offline Prefetch] Create a new JobScheduler task to wake up for net activity. (Closed)
Patch Set: tommycli@ comments. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/android/junit/DEPS ('k') | chrome/browser/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/prefetch/PrefetchBackgroundTaskTest.java
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/prefetch/PrefetchBackgroundTaskTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/prefetch/PrefetchBackgroundTaskTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..14523810f4446b8737db18c429128b12e0e96945
--- /dev/null
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/prefetch/PrefetchBackgroundTaskTest.java
@@ -0,0 +1,146 @@
+// 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.chrome.browser.offlinepages.prefetch;
+
+import android.content.Context;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import org.robolectric.annotation.Config;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+import org.robolectric.internal.ShadowExtractor;
+import org.robolectric.shadows.multidex.ShadowMultiDex;
+
+import org.chromium.components.background_task_scheduler.BackgroundTask.TaskFinishedCallback;
+import org.chromium.components.background_task_scheduler.BackgroundTaskScheduler;
+import org.chromium.components.background_task_scheduler.BackgroundTaskSchedulerFactory;
+import org.chromium.components.background_task_scheduler.TaskIds;
+import org.chromium.components.background_task_scheduler.TaskInfo;
+import org.chromium.components.background_task_scheduler.TaskParameters;
+import org.chromium.testing.local.LocalRobolectricTestRunner;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/** Unit tests for {@link PrefetchBackgroundTask}. */
+@RunWith(LocalRobolectricTestRunner.class)
+@Config(manifest = Config.NONE,
+ shadows = {PrefetchBackgroundTaskTest.ShadowBackgroundTaskScheduler.class,
+ ShadowMultiDex.class})
+public class PrefetchBackgroundTaskTest {
+ /**
+ * Shadow of BackgroundTaskScheduler system service.
+ */
+ @Implements(BackgroundTaskScheduler.class)
+ public static class ShadowBackgroundTaskScheduler {
+ private HashMap<Integer, TaskInfo> mTaskInfos = new HashMap<>();
+
+ @Implementation
+ public boolean schedule(Context context, TaskInfo taskInfo) {
+ mTaskInfos.put(taskInfo.getTaskId(), taskInfo);
+ return true;
+ }
+
+ @Implementation
+ public void cancel(Context context, int taskId) {
+ mTaskInfos.remove(taskId);
+ }
+
+ public TaskInfo getTaskInfo(int taskId) {
+ return mTaskInfos.get(taskId);
+ }
+
+ public void clear() {
+ mTaskInfos = new HashMap<>();
+ }
+ }
+
+ @Spy
+ private PrefetchBackgroundTask mPrefetchBackgroundTask = new PrefetchBackgroundTask(null);
+ private ShadowBackgroundTaskScheduler mShadowTaskScheduler;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ doAnswer(new Answer() {
+ public Object answer(InvocationOnMock invocation) {
+ mPrefetchBackgroundTask.setNativeTask(1);
+ return Boolean.TRUE;
+ }
+ })
+ .when(mPrefetchBackgroundTask)
+ .nativeStartPrefetchTask(any());
+ doReturn(true).when(mPrefetchBackgroundTask).nativeOnStopTask(1);
+ doNothing().when(mPrefetchBackgroundTask).launchBrowserIfNecessary(any());
+
+ mShadowTaskScheduler = (ShadowBackgroundTaskScheduler) ShadowExtractor.extract(
+ BackgroundTaskSchedulerFactory.getScheduler());
+ }
+
+ @After
+ public void tearDown() {
+ mShadowTaskScheduler.clear();
+ }
+
+ @Test
+ public void scheduleTask() {
+ PrefetchBackgroundTask.scheduleTask();
+ TaskInfo scheduledTask =
+ mShadowTaskScheduler.getTaskInfo(TaskIds.OFFLINE_PAGES_PREFETCH_JOB_ID);
+ assertNotNull(scheduledTask);
+ assertEquals(true, scheduledTask.isPersisted());
+ assertEquals(TaskInfo.NETWORK_TYPE_UNMETERED, scheduledTask.getRequiredNetworkType());
+ }
+
+ @Test
+ public void cancelTask() {
+ TaskInfo scheduledTask =
+ mShadowTaskScheduler.getTaskInfo(TaskIds.OFFLINE_PAGES_PREFETCH_JOB_ID);
+ assertNull(scheduledTask);
+
+ PrefetchBackgroundTask.scheduleTask();
+ scheduledTask = mShadowTaskScheduler.getTaskInfo(TaskIds.OFFLINE_PAGES_PREFETCH_JOB_ID);
+ assertNotNull(scheduledTask);
+
+ PrefetchBackgroundTask.cancelTask();
+ scheduledTask = mShadowTaskScheduler.getTaskInfo(TaskIds.OFFLINE_PAGES_PREFETCH_JOB_ID);
+ assertNull(scheduledTask);
+ }
+
+ @Test
+ public void createNativeTask() {
+ final ArrayList<Boolean> reschedules = new ArrayList<>();
+ TaskParameters params = mock(TaskParameters.class);
+ when(params.getTaskId()).thenReturn(TaskIds.OFFLINE_PAGES_PREFETCH_JOB_ID);
+
+ mPrefetchBackgroundTask.onStartTask(null, params, new TaskFinishedCallback() {
+ @Override
+ public void taskFinished(boolean needsReschedule) {
+ reschedules.add(needsReschedule);
+ }
+ });
+ mPrefetchBackgroundTask.doneProcessing(false);
+
+ assertEquals(1, reschedules.size());
+ assertEquals(false, reschedules.get(0));
+ }
+}
« no previous file with comments | « chrome/android/junit/DEPS ('k') | chrome/browser/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698