Index: chrome/android/junit/src/org/chromium/chrome/browser/invalidations/InvalidationControllerTest.java |
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/invalidations/InvalidationControllerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/invalidations/InvalidationControllerTest.java |
deleted file mode 100644 |
index 8d6b103347bd4c1c07f7fef9c6244e42e774a0c6..0000000000000000000000000000000000000000 |
--- a/chrome/android/junit/src/org/chromium/chrome/browser/invalidations/InvalidationControllerTest.java |
+++ /dev/null |
@@ -1,482 +0,0 @@ |
-// Copyright 2015 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.invalidation; |
- |
-import android.accounts.Account; |
-import android.app.Activity; |
-import android.content.Context; |
-import android.content.Intent; |
- |
-import org.chromium.base.ActivityState; |
-import org.chromium.base.ApplicationState; |
-import org.chromium.base.ApplicationStatus; |
-import org.chromium.base.CollectionUtil; |
-import org.chromium.base.test.util.Feature; |
-import org.chromium.chrome.browser.sync.ProfileSyncService; |
-import org.chromium.components.invalidation.InvalidationClientService; |
-import org.chromium.sync.AndroidSyncSettings; |
-import org.chromium.sync.ModelType; |
-import org.chromium.sync.ModelTypeHelper; |
-import org.chromium.sync.notifier.InvalidationIntentProtocol; |
-import org.chromium.sync.signin.ChromeSigninController; |
-import org.chromium.sync.test.util.MockSyncContentResolverDelegate; |
-import org.chromium.testing.local.CustomShadowAsyncTask; |
-import org.chromium.testing.local.LocalRobolectricTestRunner; |
-import org.junit.Assert; |
-import org.junit.Before; |
-import org.junit.Test; |
-import org.junit.runner.RunWith; |
-import org.robolectric.Robolectric; |
-import org.robolectric.annotation.Config; |
-import org.robolectric.shadows.ShadowActivity; |
- |
-import java.util.HashSet; |
-import java.util.Set; |
-import java.util.concurrent.atomic.AtomicBoolean; |
- |
-/** |
- * Tests for the {@link InvalidationController}. |
- */ |
-@RunWith(LocalRobolectricTestRunner.class) |
-@Config(manifest = Config.NONE, shadows = {CustomShadowAsyncTask.class}) |
-public class InvalidationControllerTest { |
- /** |
- * Stubbed out ProfileSyncService with a setter to control return value of |
- * {@link ProfileSyncService#getPreferredDataTypes()} |
- */ |
- private static class ProfileSyncServiceStub extends ProfileSyncService { |
- private Set<Integer> mPreferredDataTypes; |
- |
- public ProfileSyncServiceStub() { |
- super(); |
- } |
- |
- public void setPreferredDataTypes(Set<Integer> types) { |
- mPreferredDataTypes = types; |
- } |
- |
- @Override |
- protected void init() { |
- // Skip native initialization. |
- } |
- |
- @Override |
- public Set<Integer> getPreferredDataTypes() { |
- return mPreferredDataTypes; |
- } |
- } |
- |
- private enum IntentType { START, START_AND_REGISTER, STOP }; |
- |
- private ShadowActivity mShadowActivity; |
- private Context mContext; |
- private InvalidationController mController; |
- |
- /** |
- * The names of the preferred ModelTypes. |
- */ |
- private Set<String> mAllTypes; |
- |
- /** |
- * The names of the non-session preferred ModelTypes. |
- */ |
- private Set<String> mNonSessionTypes; |
- |
- @Before |
- public void setUp() throws Exception { |
- Activity activity = Robolectric.buildActivity(Activity.class).setup().get(); |
- mShadowActivity = Robolectric.shadowOf(activity); |
- mContext = activity; |
- |
- ModelTypeHelper.setTestDelegate(new ModelTypeHelper.TestDelegate() { |
- public String toNotificationType(int modelType) { |
- return Integer.toString(modelType); |
- } |
- }); |
- |
- ProfileSyncServiceStub profileSyncServiceStub = new ProfileSyncServiceStub(); |
- ProfileSyncService.overrideForTests(profileSyncServiceStub); |
- profileSyncServiceStub.setPreferredDataTypes( |
- CollectionUtil.newHashSet(ModelType.BOOKMARKS, ModelType.SESSIONS)); |
- mAllTypes = CollectionUtil.newHashSet( |
- ModelTypeHelper.toNotificationType(ModelType.BOOKMARKS), |
- ModelTypeHelper.toNotificationType(ModelType.SESSIONS)); |
- mNonSessionTypes = CollectionUtil.newHashSet(ModelTypeHelper.toNotificationType( |
- ModelType.BOOKMARKS)); |
- |
- // We don't want to use the system content resolver, so we override it. |
- MockSyncContentResolverDelegate delegate = new MockSyncContentResolverDelegate(); |
- // Android master sync can safely always be on. |
- delegate.setMasterSyncAutomatically(true); |
- AndroidSyncSettings.overrideForTests(mContext, delegate); |
- |
- ChromeSigninController.get(mContext).setSignedInAccountName("test@example.com"); |
- AndroidSyncSettings.enableChromeSync(mContext); |
- } |
- |
- /** |
- * Verify the intent sent by InvalidationController#stop(). |
- */ |
- @Test |
- @Feature({"Sync"}) |
- public void testStop() throws Exception { |
- InvalidationController controller = new InvalidationController(mContext, true, false); |
- controller.stop(); |
- Intent intent = getOnlyIntent(); |
- validateIntentComponent(intent); |
- Assert.assertEquals(1, intent.getExtras().size()); |
- Assert.assertTrue(intent.hasExtra(InvalidationIntentProtocol.EXTRA_STOP)); |
- Assert.assertTrue(intent.getBooleanExtra(InvalidationIntentProtocol.EXTRA_STOP, false)); |
- } |
- |
- /** |
- * Verify the intent sent by InvalidationController#ensureStartedAndUpdateRegisteredTypes(). |
- */ |
- @Test |
- @Feature({"Sync"}) |
- public void testEnsureStartedAndUpdateRegisteredTypes() { |
- InvalidationController controller = new InvalidationController(mContext, false, false); |
- controller.ensureStartedAndUpdateRegisteredTypes(); |
- Intent intent = getOnlyIntent(); |
- |
- // Ensure GCM is initialized. This is a regression test for http://crbug.com/475299. |
- Assert.assertTrue(controller.isGcmInitialized()); |
- |
- // Validate destination. |
- validateIntentComponent(intent); |
- Assert.assertEquals(InvalidationIntentProtocol.ACTION_REGISTER, intent.getAction()); |
- |
- // Validate account. |
- Account intentAccount = |
- intent.getParcelableExtra(InvalidationIntentProtocol.EXTRA_ACCOUNT); |
- Assert.assertEquals("test@example.com", intentAccount.name); |
- |
- // Validate registered types. |
- Assert.assertEquals(mAllTypes, getRegisterIntentRegisterTypes(intent)); |
- Assert.assertNull(InvalidationIntentProtocol.getRegisteredObjectIds(intent)); |
- } |
- |
- /** |
- * Test that pausing and resuming Chrome's activities does not send any intents if sync is |
- * disabled. |
- */ |
- @Test |
- @Feature({"Sync"}) |
- public void testPauseAndResumeMainActivityWithSyncDisabled() throws Exception { |
- AndroidSyncSettings.disableChromeSync(mContext); |
- |
- InvalidationController controller = new InvalidationController(mContext, false, false); |
- controller.onApplicationStateChange(ApplicationState.HAS_PAUSED_ACTIVITIES); |
- controller.onApplicationStateChange(ApplicationState.HAS_RUNNING_ACTIVITIES); |
- assertNoNewIntents(); |
- } |
- |
- /** |
- * Test that ensureStartedAndUpdateRegisteredTypes() does not send any intents if |
- * ProfileSyncService is null. |
- */ |
- @Test |
- @Feature({"Sync"}) |
- public void testNullProfileSyncService() throws Exception { |
- ProfileSyncService.overrideForTests(null); |
- |
- InvalidationController controller = new InvalidationController(mContext, false, false); |
- controller.ensureStartedAndUpdateRegisteredTypes(); |
- assertNoNewIntents(); |
- } |
- |
- /** |
- * Test that creating an InvalidationController object registers an ApplicationStateListener. |
- */ |
- @Test |
- @Feature({"Sync"}) |
- public void testEnsureConstructorRegistersListener() throws Exception { |
- final AtomicBoolean listenerCallbackCalled = new AtomicBoolean(); |
- |
- // Create instance. |
- new InvalidationController(mContext, true, false) { |
- @Override |
- public void onApplicationStateChange(int newState) { |
- listenerCallbackCalled.set(true); |
- } |
- }; |
- |
- // Ensure initial state is correct. |
- Assert.assertFalse(listenerCallbackCalled.get()); |
- |
- // Ensure we get a callback, which means we have registered for them. |
- ApplicationStatus.onStateChangeForTesting(new Activity(), ActivityState.CREATED); |
- Assert.assertTrue(listenerCallbackCalled.get()); |
- } |
- |
- /** |
- * Test that the controller registers for session invalidations and stays registered when |
- * disabling session invalidations is prohibited. |
- */ |
- @Test |
- @Feature({"Sync"}) |
- public void testCannotToggleSessionInvalidations() { |
- InvalidationController controller = new InvalidationController(mContext, false, false); |
- controller.ensureStartedAndUpdateRegisteredTypes(); |
- Assert.assertEquals(mAllTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- |
- controller.onRecentTabsPageOpened(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- assertNoNewIntents(); |
- |
- controller.onRecentTabsPageClosed(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- assertNoNewIntents(); |
- } |
- |
- /********************************************************************************************** |
- * Tests for when session invalidations can be disabled. |
- */ |
- |
- /** |
- * Test that an intent is sent to register for session invalidations after the RecentTabsPage is |
- * opened. |
- */ |
- @Test |
- @Feature({"Sync"}) |
- public void testRecentTabsPageShown() { |
- InvalidationController controller = new InvalidationController(mContext, true, false); |
- controller.ensureStartedAndUpdateRegisteredTypes(); |
- Assert.assertEquals(mNonSessionTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- |
- controller.onRecentTabsPageOpened(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(mAllTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- |
- controller.onRecentTabsPageClosed(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(mNonSessionTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- } |
- |
- /** |
- * Test that if the InvalidationController is started while the RecentTabsPage is shown that |
- * an intent is sent to register for session invalidations only once the InvalidationController |
- * is started. |
- */ |
- @Test |
- @Feature({"Sync"}) |
- public void testStartWhileRecentTabsPageShown() { |
- InvalidationController controller = new InvalidationController(mContext, true, false); |
- controller.onRecentTabsPageOpened(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- assertNoNewIntents(); |
- |
- controller.ensureStartedAndUpdateRegisteredTypes(); |
- Assert.assertEquals(IntentType.START_AND_REGISTER, getIntentType(getOnlyIntent())); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(mAllTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- |
- controller.onRecentTabsPageClosed(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(mNonSessionTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- } |
- |
- /** |
- * Test the handling for multiple open RecentTabsPages. |
- */ |
- @Test |
- @Feature({"Sync"}) |
- public void testMultipleRecentTabsPages() { |
- InvalidationController controller = new InvalidationController(mContext, true, false); |
- controller.ensureStartedAndUpdateRegisteredTypes(); |
- Assert.assertEquals(mNonSessionTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- |
- controller.onRecentTabsPageOpened(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(mAllTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- |
- controller.onRecentTabsPageOpened(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- assertNoNewIntents(); |
- |
- controller.onRecentTabsPageClosed(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- assertNoNewIntents(); |
- |
- controller.onRecentTabsPageClosed(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(mNonSessionTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- } |
- |
- /** |
- * Test the handling for when the RecentTabsPage is opened/closed quickly. |
- */ |
- @Test |
- @Feature({"Sync"}) |
- public void testOpenCloseRecentTabsPageQuickly() { |
- InvalidationController controller = new InvalidationController(mContext, true, false); |
- controller.ensureStartedAndUpdateRegisteredTypes(); |
- Assert.assertEquals(mNonSessionTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- |
- controller.onRecentTabsPageOpened(); |
- controller.onRecentTabsPageClosed(); |
- controller.onRecentTabsPageOpened(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(mAllTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- |
- controller.onRecentTabsPageClosed(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(mNonSessionTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- |
- controller.onRecentTabsPageOpened(); |
- controller.onRecentTabsPageClosed(); |
- controller.onRecentTabsPageOpened(); |
- controller.onRecentTabsPageClosed(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- assertNoNewIntents(); |
- } |
- |
- /** |
- * Test that if the InvalidationController is stopped prior to session sync invalidations being |
- * disabled as a result of the RecentTabsPage being closed, that session sync invalidations are |
- * disabled when the InvalidationController is restarted. |
- */ |
- @Test |
- @Feature({"Sync"}) |
- public void testDisableSessionInvalidationsOnStart() { |
- InvalidationController controller = new InvalidationController(mContext, true, false); |
- controller.ensureStartedAndUpdateRegisteredTypes(); |
- Assert.assertEquals(mNonSessionTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- controller.onRecentTabsPageOpened(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(mAllTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- |
- controller.onRecentTabsPageClosed(); |
- controller.stop(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(IntentType.STOP, getIntentType(getOnlyIntent())); |
- |
- controller.ensureStartedAndUpdateRegisteredTypes(); |
- Assert.assertEquals(mAllTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(mNonSessionTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- } |
- |
- /** |
- * Test that if the activity is paused prior to session sync invalidations being disabled as a |
- * result of the RecentTabsPage being closed, that session sync invalidations are disabled when |
- * the activity is resumed. |
- */ |
- @Test |
- @Feature({"Sync"}) |
- public void testDisableSessionInvalidationsOnResume() { |
- InvalidationController controller = new InvalidationController(mContext, true, false); |
- controller.ensureStartedAndUpdateRegisteredTypes(); |
- Assert.assertEquals(mNonSessionTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- controller.onRecentTabsPageOpened(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(mAllTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- |
- controller.onRecentTabsPageClosed(); |
- controller.onApplicationStateChange(ApplicationState.HAS_PAUSED_ACTIVITIES); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(IntentType.STOP, getIntentType(getOnlyIntent())); |
- |
- controller.onApplicationStateChange(ApplicationState.HAS_RUNNING_ACTIVITIES); |
- Assert.assertEquals(IntentType.START, getIntentType(getOnlyIntent())); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(mNonSessionTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- } |
- |
- /** |
- * Test that pausing all of Chrome's activities and resuming one of them keeps session |
- * invalidations enabled if they were enabled prior to Chrome's activities getting paused. |
- */ |
- @Test |
- @Feature({"Sync"}) |
- public void testPauseAndResumeMainActivity() throws Exception { |
- InvalidationController controller = new InvalidationController(mContext, true, false); |
- controller.ensureStartedAndUpdateRegisteredTypes(); |
- Assert.assertEquals(mNonSessionTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- controller.onRecentTabsPageOpened(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(mAllTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- |
- controller.onApplicationStateChange(ApplicationState.HAS_PAUSED_ACTIVITIES); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(IntentType.STOP, getIntentType(getOnlyIntent())); |
- |
- // Resuming the activity should not send a START_AND_REGISTER intent. |
- controller.onApplicationStateChange(ApplicationState.HAS_RUNNING_ACTIVITIES); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(IntentType.START, getIntentType(getOnlyIntent())); |
- } |
- |
- /** |
- * Test that opening the RecentTabsPage has no effect after the InvalidationController is |
- * stopped. |
- */ |
- @Test |
- @Feature({"Sync"}) |
- public void testPauseAndResumeMainActivityAfterStop() throws Exception { |
- InvalidationController controller = new InvalidationController(mContext, true, false); |
- controller.ensureStartedAndUpdateRegisteredTypes(); |
- Assert.assertEquals(mNonSessionTypes, getRegisterIntentRegisterTypes(getOnlyIntent())); |
- |
- controller.stop(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- Assert.assertEquals(IntentType.STOP, getIntentType(getOnlyIntent())); |
- |
- controller.onRecentTabsPageOpened(); |
- Robolectric.runUiThreadTasksIncludingDelayedTasks(); |
- assertNoNewIntents(); |
- } |
- |
- /** |
- * Asserts that {@code intent} is destined for the correct component. |
- */ |
- private static void validateIntentComponent(Intent intent) { |
- Assert.assertNotNull(intent.getComponent()); |
- Assert.assertEquals( |
- InvalidationClientService.class.getName(), intent.getComponent().getClassName()); |
- } |
- |
- /** |
- * Assert that there are no new intents. |
- */ |
- private void assertNoNewIntents() { |
- Assert.assertNull(mShadowActivity.getNextStartedService()); |
- } |
- |
- /** |
- * Assert that there is only one new intent. Returns the intent. |
- */ |
- private Intent getOnlyIntent() { |
- Intent intent = mShadowActivity.getNextStartedService(); |
- Assert.assertNotNull(intent); |
- Assert.assertNull(mShadowActivity.getNextStartedService()); |
- return intent; |
- } |
- |
- /** |
- * Returns the type of the intent. |
- */ |
- private static IntentType getIntentType(Intent intent) { |
- if (intent.hasExtra(InvalidationIntentProtocol.EXTRA_STOP)) { |
- return IntentType.STOP; |
- } else if (intent.hasExtra(InvalidationIntentProtocol.EXTRA_REGISTERED_TYPES)) { |
- return IntentType.START_AND_REGISTER; |
- } else { |
- return IntentType.START; |
- } |
- } |
- |
- /** |
- * Returns the names of the ModelTypes to be registered by the passed in START_AND_REGISTER |
- * intent. |
- */ |
- private static Set<String> getRegisterIntentRegisterTypes(Intent intent) { |
- Set<String> registeredTypes = new HashSet<String>(); |
- registeredTypes.addAll( |
- intent.getStringArrayListExtra(InvalidationIntentProtocol.EXTRA_REGISTERED_TYPES)); |
- return registeredTypes; |
- } |
- |
-} |