Chromium Code Reviews| Index: components/background_task_scheduler/android/junit/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerTest.java |
| diff --git a/components/background_task_scheduler/android/junit/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerTest.java b/components/background_task_scheduler/android/junit/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerTest.java |
| index 69ad03edb3a01f8cc367dacabc5874e0299db4c5..525caef821a838a95e55bfb58d3989551624e157 100644 |
| --- a/components/background_task_scheduler/android/junit/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerTest.java |
| +++ b/components/background_task_scheduler/android/junit/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerTest.java |
| @@ -4,6 +4,12 @@ |
| package org.chromium.components.background_task_scheduler; |
| +import android.os.Build; |
| + |
| +import com.google.android.gms.common.ConnectionResult; |
| +import com.google.android.gms.common.GoogleApiAvailability; |
| +import com.google.android.gms.gcm.GcmNetworkManager; |
| + |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertTrue; |
| @@ -20,6 +26,10 @@ import org.mockito.Mock; |
| import org.mockito.MockitoAnnotations; |
| import org.robolectric.RuntimeEnvironment; |
| import org.robolectric.annotation.Config; |
| +import org.robolectric.internal.ShadowExtractor; |
| +import org.robolectric.shadows.gms.Shadows; |
| +import org.robolectric.shadows.gms.common.ShadowGoogleApiAvailability; |
| +import org.robolectric.util.ReflectionHelpers; |
| import org.chromium.base.ContextUtils; |
| import org.chromium.base.test.util.Feature; |
| @@ -29,7 +39,8 @@ import java.util.concurrent.TimeUnit; |
| /** Unit tests for {@link BackgroundTaskScheduler}. */ |
| @RunWith(LocalRobolectricTestRunner.class) |
| -@Config(manifest = Config.NONE) |
| +@Config(manifest = Config.NONE, |
| + shadows = {ShadowGcmNetworkManager.class, ShadowGoogleApiAvailability.class}) |
| public class BackgroundTaskSchedulerTest { |
| private static final TaskInfo TASK = |
| TaskInfo.createOneOffTask( |
| @@ -38,6 +49,7 @@ public class BackgroundTaskSchedulerTest { |
| @Mock |
| private BackgroundTaskSchedulerDelegate mDelegate; |
| + private ShadowGcmNetworkManager mGcmNetworkManager; |
| @Before |
| public void setUp() { |
| @@ -46,6 +58,12 @@ public class BackgroundTaskSchedulerTest { |
| BackgroundTaskSchedulerFactory.setSchedulerForTesting( |
| new BackgroundTaskScheduler(mDelegate)); |
| TestBackgroundTask.reset(); |
| + |
| + // Initialize Google Play Services and GCM Network Manager for upgrade testing. |
| + Shadows.shadowOf(GoogleApiAvailability.getInstance()) |
| + .setIsGooglePlayServicesAvailable(ConnectionResult.SUCCESS); |
| + mGcmNetworkManager = (ShadowGcmNetworkManager) ShadowExtractor.extract( |
| + GcmNetworkManager.getInstance(ContextUtils.getApplicationContext())); |
| } |
| @Test |
| @@ -84,4 +102,52 @@ public class BackgroundTaskSchedulerTest { |
| assertEquals(1, TestBackgroundTask.getRescheduleCalls()); |
| assertTrue(BackgroundTaskSchedulerPrefs.getScheduledTasks().isEmpty()); |
| } |
| + |
| + @Test |
| + @Feature({"BackgroundTaskScheduler"}) |
| + public void testCheckForOSUpgrade_PreMToMPlus() { |
| + BackgroundTaskSchedulerPrefs.setLastSdkVersion(Build.VERSION_CODES.LOLLIPOP); |
| + BackgroundTaskSchedulerPrefs.addScheduledTask(TASK); |
| + ReflectionHelpers.setStaticField(Build.VERSION.class, "SDK_INT", Build.VERSION_CODES.M); |
| + |
| + BackgroundTaskSchedulerFactory.getScheduler().checkForOSUpgrade( |
| + RuntimeEnvironment.application); |
| + |
| + assertEquals(Build.VERSION_CODES.M, BackgroundTaskSchedulerPrefs.getLastSdkVersion()); |
| + assertTrue(mGcmNetworkManager.getCanceledTaskTags().contains( |
| + Integer.toString(TASK.getTaskId()))); |
| + assertEquals(1, TestBackgroundTask.getRescheduleCalls()); |
| + } |
| + |
| + /** This scenario tests upgrade from M+ to M+ OS, which requires no rescheduling. */ |
|
nyquist
2017/04/18 22:41:08
Could you update this comment to match the test?
fgorski
2017/04/20 22:36:07
Done.
|
| + @Test |
| + @Feature({"BackgroundTaskScheduler"}) |
| + public void testCheckForOSUpgrade_PreMToPreM() { |
| + BackgroundTaskSchedulerPrefs.setLastSdkVersion(Build.VERSION_CODES.KITKAT); |
| + BackgroundTaskSchedulerPrefs.addScheduledTask(TASK); |
| + ReflectionHelpers.setStaticField( |
| + Build.VERSION.class, "SDK_INT", Build.VERSION_CODES.LOLLIPOP); |
| + |
| + BackgroundTaskSchedulerFactory.getScheduler().checkForOSUpgrade( |
| + RuntimeEnvironment.application); |
| + |
| + assertEquals( |
| + Build.VERSION_CODES.LOLLIPOP, BackgroundTaskSchedulerPrefs.getLastSdkVersion()); |
| + assertEquals(0, TestBackgroundTask.getRescheduleCalls()); |
| + } |
| + |
| + /** This scenario tests upgrade from M+ to M+ OS, which requires no rescheduling. */ |
| + @Test |
| + @Feature({"BackgroundTaskScheduler"}) |
| + public void testCheckForOSUpgrade_MPlusToMPlus() { |
| + BackgroundTaskSchedulerPrefs.setLastSdkVersion(Build.VERSION_CODES.M); |
| + BackgroundTaskSchedulerPrefs.addScheduledTask(TASK); |
| + ReflectionHelpers.setStaticField(Build.VERSION.class, "SDK_INT", Build.VERSION_CODES.N); |
| + |
| + BackgroundTaskSchedulerFactory.getScheduler().checkForOSUpgrade( |
| + RuntimeEnvironment.application); |
| + |
| + assertEquals(Build.VERSION_CODES.N, BackgroundTaskSchedulerPrefs.getLastSdkVersion()); |
| + assertEquals(0, TestBackgroundTask.getRescheduleCalls()); |
| + } |
| } |