Chromium Code Reviews| Index: chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/BackgroundOfflinerTaskTest.java |
| diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/BackgroundOfflinerTaskTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/BackgroundOfflinerTaskTest.java |
| index e4d58c9bcd3321ec0209bdc81202f0171917463f..ec39b81db381b59da37de6fe793f13f1d103f43d 100644 |
| --- a/chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/BackgroundOfflinerTaskTest.java |
| +++ b/chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/BackgroundOfflinerTaskTest.java |
| @@ -13,17 +13,24 @@ import static org.junit.Assert.assertTrue; |
| import static org.mockito.Mockito.any; |
| import static org.mockito.Mockito.when; |
| +import android.app.Activity; |
| import android.content.Context; |
| import android.os.Bundle; |
| import com.google.android.gms.gcm.Task; |
| +import org.chromium.base.ActivityState; |
| +import org.chromium.base.ApplicationStatus; |
| import org.chromium.base.BaseChromiumApplication; |
| +import org.chromium.base.BaseSwitches; |
| +import org.chromium.base.CommandLine; |
| +import org.chromium.base.SysUtils; |
| import org.chromium.base.metrics.RecordHistogram; |
| import org.chromium.base.test.util.Feature; |
| import org.chromium.chrome.browser.ChromeBackgroundServiceWaiter; |
| import org.chromium.net.ConnectionType; |
| import org.chromium.testing.local.LocalRobolectricTestRunner; |
| +import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| @@ -44,6 +51,8 @@ public class BackgroundOfflinerTaskTest { |
| private static final boolean REQUIRE_UNMETERED = true; |
| private static final boolean POWER_CONNECTED = true; |
| private static final int MINIMUM_BATTERY_LEVEL = 33; |
| + private static final String IS_LOW_END_DEVICE_SWITCH = |
| + "--" + BaseSwitches.ENABLE_LOW_END_DEVICE_MODE; |
| @Mock |
| private OfflinePageUtils mOfflinePageUtils; |
| @@ -55,6 +64,7 @@ public class BackgroundOfflinerTaskTest { |
| new TriggerConditions(!REQUIRE_POWER, MINIMUM_BATTERY_LEVEL, REQUIRE_UNMETERED); |
| private DeviceConditions mDeviceConditions = new DeviceConditions( |
| !POWER_CONNECTED, MINIMUM_BATTERY_LEVEL + 5, ConnectionType.CONNECTION_3G); |
| + private Activity mTestActivity; |
| @Before |
| public void setUp() throws Exception { |
| @@ -71,6 +81,23 @@ public class BackgroundOfflinerTaskTest { |
| mStubBackgroundSchedulerProcessor = new StubBackgroundSchedulerProcessor(); |
| RecordHistogram.disableForTests(); |
| ShadowGcmNetworkManager.clear(); |
| + |
| + // Run tests as a low-end device. |
| + CommandLine.init(new String[] {"testcommand", IS_LOW_END_DEVICE_SWITCH}); |
|
pasko
2016/07/29 09:58:17
did you not choose @CommandLineFlags.Add(BaseSwitc
dougarnett
2016/07/29 15:55:26
This was a bit interesting. I did try that annotat
|
| + |
| + // Set up single, stopped Activity. |
| + ApplicationStatus.destroyForJUnitTests(); |
| + mTestActivity = new Activity(); |
| + ApplicationStatus.onStateChangeForTesting(mTestActivity, ActivityState.CREATED); |
| + ApplicationStatus.onStateChangeForTesting(mTestActivity, ActivityState.STOPPED); |
| + } |
| + |
| + @After |
| + public void tearDown() throws Exception { |
| + // Clean up static state for subsequent Robolectric tests. |
| + CommandLine.reset(); |
| + SysUtils.reset(); |
| + ApplicationStatus.destroyForJUnitTests(); |
| } |
| @Test |
| @@ -138,4 +165,33 @@ public class BackgroundOfflinerTaskTest { |
| ChromeBackgroundServiceWaiter waiter2 = new ChromeBackgroundServiceWaiter(1); |
| assertTrue(task2.startBackgroundRequests(Robolectric.application, mTaskExtras, waiter2)); |
| } |
| + |
| + @Test |
| + @Feature({"OfflinePages"}) |
| + public void testStartBackgroundRequestsForRunningActivityOnLowEndDevice() { |
| + BackgroundOfflinerTask task = new BackgroundOfflinerTask(mStubBackgroundSchedulerProcessor); |
| + ChromeBackgroundServiceWaiter waiter = new ChromeBackgroundServiceWaiter(1); |
| + assertNull("Nothing scheduled", ShadowGcmNetworkManager.getScheduledTask()); |
| + |
| + // Transition the test Activity to a running state. |
| + ApplicationStatus.onStateChangeForTesting(mTestActivity, ActivityState.STARTED); |
| + |
| + assertFalse(task.startBackgroundRequests(Robolectric.application, mTaskExtras, waiter)); |
| + |
| + // Check that the backup task was scheduled. |
| + Task gcmTask = ShadowGcmNetworkManager.getScheduledTask(); |
| + assertNotNull("Backup task scheduled", gcmTask); |
| + assertEquals(mTriggerConditions, |
| + TaskExtrasPacker.unpackTriggerConditionsFromBundle(gcmTask.getExtras())); |
| + |
| + // Check that startProcessing was NOT called. |
| + assertFalse(mStubBackgroundSchedulerProcessor.getStartProcessingCalled()); |
| + |
| + // Now verify will start processing when Activity is stopped. |
| + ApplicationStatus.onStateChangeForTesting(mTestActivity, ActivityState.STOPPED); |
| + BackgroundOfflinerTask task2 = |
| + new BackgroundOfflinerTask(mStubBackgroundSchedulerProcessor); |
| + ChromeBackgroundServiceWaiter waiter2 = new ChromeBackgroundServiceWaiter(1); |
| + assertTrue(task2.startBackgroundRequests(Robolectric.application, mTaskExtras, waiter2)); |
| + } |
| } |