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 c677f134fd70d5b86316b4041dd0b6e4e12dee55..e4d58c9bcd3321ec0209bdc81202f0171917463f 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 |
@@ -4,14 +4,22 @@ |
package org.chromium.chrome.browser.offlinepages; |
+import static org.junit.Assert.assertEquals; |
+import static org.junit.Assert.assertFalse; |
import static org.junit.Assert.assertNotNull; |
import static org.junit.Assert.assertNull; |
import static org.junit.Assert.assertSame; |
import static org.junit.Assert.assertTrue; |
+import static org.mockito.Mockito.any; |
+import static org.mockito.Mockito.when; |
+import android.content.Context; |
import android.os.Bundle; |
+import com.google.android.gms.gcm.Task; |
+ |
import org.chromium.base.BaseChromiumApplication; |
+import org.chromium.base.metrics.RecordHistogram; |
import org.chromium.base.test.util.Feature; |
import org.chromium.chrome.browser.ChromeBackgroundServiceWaiter; |
import org.chromium.net.ConnectionType; |
@@ -19,6 +27,8 @@ import org.chromium.testing.local.LocalRobolectricTestRunner; |
import org.junit.Before; |
import org.junit.Test; |
import org.junit.runner.RunWith; |
+import org.mockito.Mock; |
+import org.mockito.MockitoAnnotations; |
import org.robolectric.Robolectric; |
import org.robolectric.annotation.Config; |
@@ -30,16 +40,37 @@ import org.robolectric.annotation.Config; |
application = BaseChromiumApplication.class, |
shadows = { ShadowGcmNetworkManager.class }) |
public class BackgroundOfflinerTaskTest { |
+ private static final boolean REQUIRE_POWER = true; |
+ private static final boolean REQUIRE_UNMETERED = true; |
+ private static final boolean POWER_CONNECTED = true; |
+ private static final int MINIMUM_BATTERY_LEVEL = 33; |
+ |
+ @Mock |
+ private OfflinePageUtils mOfflinePageUtils; |
+ |
private Bundle mTaskExtras; |
private long mTestTime; |
private StubBackgroundSchedulerProcessor mStubBackgroundSchedulerProcessor; |
+ private TriggerConditions mTriggerConditions = |
+ new TriggerConditions(!REQUIRE_POWER, MINIMUM_BATTERY_LEVEL, REQUIRE_UNMETERED); |
+ private DeviceConditions mDeviceConditions = new DeviceConditions( |
+ !POWER_CONNECTED, MINIMUM_BATTERY_LEVEL + 5, ConnectionType.CONNECTION_3G); |
@Before |
public void setUp() throws Exception { |
- // Build a bundle |
+ MockitoAnnotations.initMocks(this); |
+ when(mOfflinePageUtils.getDeviceConditionsImpl(any(Context.class))) |
+ .thenReturn(mDeviceConditions); |
+ |
+ // Build a bundle with trigger conditions. |
mTaskExtras = new Bundle(); |
TaskExtrasPacker.packTimeInBundle(mTaskExtras); |
+ TaskExtrasPacker.packTriggerConditionsInBundle(mTaskExtras, mTriggerConditions); |
+ |
+ OfflinePageUtils.setInstanceForTesting(mOfflinePageUtils); |
mStubBackgroundSchedulerProcessor = new StubBackgroundSchedulerProcessor(); |
+ RecordHistogram.disableForTests(); |
+ ShadowGcmNetworkManager.clear(); |
} |
@Test |
@@ -48,13 +79,11 @@ public class BackgroundOfflinerTaskTest { |
BackgroundOfflinerTask task = |
new BackgroundOfflinerTask(mStubBackgroundSchedulerProcessor); |
ChromeBackgroundServiceWaiter waiter = new ChromeBackgroundServiceWaiter(1); |
- DeviceConditions deviceConditions = |
- new DeviceConditions(false, 51, ConnectionType.CONNECTION_WIFI); |
- task.processBackgroundRequests(mTaskExtras, deviceConditions, waiter); |
+ task.processBackgroundRequests(mTaskExtras, mDeviceConditions, waiter); |
// Check with ShadowBackgroundBackgroundSchedulerProcessor that startProcessing got called. |
assertTrue(mStubBackgroundSchedulerProcessor.getStartProcessingCalled()); |
- assertSame(deviceConditions, mStubBackgroundSchedulerProcessor.getDeviceConditions()); |
+ assertSame(mDeviceConditions, mStubBackgroundSchedulerProcessor.getDeviceConditions()); |
// TODO(dougarnett): Call processor callback and verify waiter signaled. |
} |
@@ -68,15 +97,45 @@ public class BackgroundOfflinerTaskTest { |
assertTrue(task.startBackgroundRequests(Robolectric.application, mTaskExtras, waiter)); |
// Check that the backup task was scheduled. |
- assertNotNull("Backup task scheduled", ShadowGcmNetworkManager.getScheduledTask()); |
+ Task gcmTask = ShadowGcmNetworkManager.getScheduledTask(); |
+ assertNotNull("Backup task scheduled", gcmTask); |
+ assertEquals(mTriggerConditions, |
+ TaskExtrasPacker.unpackTriggerConditionsFromBundle(gcmTask.getExtras())); |
// Check with ShadowBackgroundBackgroundSchedulerProcessor that startProcessing got called. |
assertTrue(mStubBackgroundSchedulerProcessor.getStartProcessingCalled()); |
+ assertSame(mDeviceConditions, mStubBackgroundSchedulerProcessor.getDeviceConditions()); |
} |
@Test |
@Feature({"OfflinePages"}) |
- public void testCallback() { |
- // TODO(petewil): Implement the test |
+ public void testStartBackgroundRequestsForLowBatteryLevel() { |
+ DeviceConditions deviceConditionsLowBattery = new DeviceConditions( |
+ !POWER_CONNECTED, MINIMUM_BATTERY_LEVEL - 1, ConnectionType.CONNECTION_WIFI); |
+ when(mOfflinePageUtils.getDeviceConditionsImpl(any(Context.class))) |
+ .thenReturn(deviceConditionsLowBattery); |
+ BackgroundOfflinerTask task = new BackgroundOfflinerTask(mStubBackgroundSchedulerProcessor); |
+ ChromeBackgroundServiceWaiter waiter = new ChromeBackgroundServiceWaiter(1); |
+ assertNull("Nothing scheduled", ShadowGcmNetworkManager.getScheduledTask()); |
+ 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 low battery level but with power connected will start processing. |
+ DeviceConditions deviceConditionsPowerConnected = new DeviceConditions( |
+ POWER_CONNECTED, MINIMUM_BATTERY_LEVEL - 1, ConnectionType.CONNECTION_WIFI); |
+ when(mOfflinePageUtils.getDeviceConditionsImpl(any(Context.class))) |
+ .thenReturn(deviceConditionsPowerConnected); |
+ BackgroundOfflinerTask task2 = |
+ new BackgroundOfflinerTask(mStubBackgroundSchedulerProcessor); |
+ ChromeBackgroundServiceWaiter waiter2 = new ChromeBackgroundServiceWaiter(1); |
+ assertTrue(task2.startBackgroundRequests(Robolectric.application, mTaskExtras, waiter2)); |
} |
} |