| Index: sync/android/javatests/src/org/chromium/sync/AndroidSyncSettingsTest.java
|
| diff --git a/sync/android/javatests/src/org/chromium/sync/AndroidSyncSettingsTest.java b/sync/android/javatests/src/org/chromium/sync/AndroidSyncSettingsTest.java
|
| deleted file mode 100644
|
| index 48b901b1555ee9d141c0e64848a96344ceca1606..0000000000000000000000000000000000000000
|
| --- a/sync/android/javatests/src/org/chromium/sync/AndroidSyncSettingsTest.java
|
| +++ /dev/null
|
| @@ -1,389 +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.sync;
|
| -
|
| -import android.accounts.Account;
|
| -import android.content.Context;
|
| -import android.os.Bundle;
|
| -import android.test.InstrumentationTestCase;
|
| -import android.test.suitebuilder.annotation.SmallTest;
|
| -
|
| -import org.chromium.base.ThreadUtils;
|
| -import org.chromium.base.test.util.DisabledTest;
|
| -import org.chromium.base.test.util.Feature;
|
| -import org.chromium.sync.AndroidSyncSettings.AndroidSyncSettingsObserver;
|
| -import org.chromium.sync.signin.AccountManagerHelper;
|
| -import org.chromium.sync.test.util.AccountHolder;
|
| -import org.chromium.sync.test.util.MockAccountManager;
|
| -import org.chromium.sync.test.util.MockSyncContentResolverDelegate;
|
| -
|
| -/**
|
| - * Tests for AndroidSyncSettings.
|
| - */
|
| -@DisabledTest(message = "https://crbug.com/605567")
|
| -public class AndroidSyncSettingsTest extends InstrumentationTestCase {
|
| -
|
| - private static class CountingMockSyncContentResolverDelegate
|
| - extends MockSyncContentResolverDelegate {
|
| - private int mGetMasterSyncAutomaticallyCalls;
|
| - private int mGetSyncAutomaticallyCalls;
|
| - private int mGetIsSyncableCalls;
|
| - private int mSetIsSyncableCalls;
|
| - private int mSetSyncAutomaticallyCalls;
|
| - private int mRemovePeriodicSyncCalls;
|
| -
|
| - @Override
|
| - public boolean getMasterSyncAutomatically() {
|
| - mGetMasterSyncAutomaticallyCalls++;
|
| - return super.getMasterSyncAutomatically();
|
| - }
|
| -
|
| - @Override
|
| - public boolean getSyncAutomatically(Account account, String authority) {
|
| - mGetSyncAutomaticallyCalls++;
|
| - return super.getSyncAutomatically(account, authority);
|
| - }
|
| -
|
| - @Override
|
| - public int getIsSyncable(Account account, String authority) {
|
| - mGetIsSyncableCalls++;
|
| - return super.getIsSyncable(account, authority);
|
| - }
|
| -
|
| - @Override
|
| - public void setIsSyncable(Account account, String authority, int syncable) {
|
| - mSetIsSyncableCalls++;
|
| - super.setIsSyncable(account, authority, syncable);
|
| - }
|
| -
|
| - @Override
|
| - public void setSyncAutomatically(Account account, String authority, boolean sync) {
|
| - mSetSyncAutomaticallyCalls++;
|
| - super.setSyncAutomatically(account, authority, sync);
|
| - }
|
| -
|
| - @Override
|
| - public void removePeriodicSync(Account account, String authority, Bundle extras) {
|
| - mRemovePeriodicSyncCalls++;
|
| - super.removePeriodicSync(account, authority, extras);
|
| - }
|
| - }
|
| -
|
| - private static class MockSyncSettingsObserver implements AndroidSyncSettingsObserver {
|
| - private boolean mReceivedNotification;
|
| -
|
| - public void clearNotification() {
|
| - mReceivedNotification = false;
|
| - }
|
| -
|
| - public boolean receivedNotification() {
|
| - return mReceivedNotification;
|
| - }
|
| -
|
| - @Override
|
| - public void androidSyncSettingsChanged() {
|
| - mReceivedNotification = true;
|
| - }
|
| - }
|
| -
|
| - private Context mContext;
|
| - private CountingMockSyncContentResolverDelegate mSyncContentResolverDelegate;
|
| - private String mAuthority;
|
| - private Account mAccount;
|
| - private Account mAlternateAccount;
|
| - private MockSyncSettingsObserver mSyncSettingsObserver;
|
| - private MockAccountManager mAccountManager;
|
| -
|
| - @Override
|
| - protected void setUp() throws Exception {
|
| - mSyncContentResolverDelegate = new CountingMockSyncContentResolverDelegate();
|
| - mContext = getInstrumentation().getTargetContext();
|
| - setupTestAccounts(mContext);
|
| -
|
| - AndroidSyncSettings.overrideForTests(mContext, mSyncContentResolverDelegate);
|
| - mAuthority = AndroidSyncSettings.getContractAuthority(mContext);
|
| - AndroidSyncSettings.updateAccount(mContext, mAccount);
|
| -
|
| - mSyncSettingsObserver = new MockSyncSettingsObserver();
|
| - AndroidSyncSettings.registerObserver(mContext, mSyncSettingsObserver);
|
| -
|
| - super.setUp();
|
| - }
|
| -
|
| - private void setupTestAccounts(Context context) {
|
| - mAccountManager = new MockAccountManager(context, context);
|
| - AccountManagerHelper.overrideAccountManagerHelperForTests(context, mAccountManager);
|
| - mAccount = setupTestAccount("account@example.com");
|
| - mAlternateAccount = setupTestAccount("alternate@example.com");
|
| - }
|
| -
|
| - private Account setupTestAccount(String accountName) {
|
| - Account account = AccountManagerHelper.createAccountFromName(accountName);
|
| - AccountHolder.Builder accountHolder =
|
| - AccountHolder.create().account(account).password("password").alwaysAccept(true);
|
| - mAccountManager.addAccountHolderExplicitly(accountHolder.build());
|
| - return account;
|
| - }
|
| -
|
| - private void enableChromeSyncOnUiThread() {
|
| - ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - AndroidSyncSettings.enableChromeSync(mContext);
|
| - }
|
| - });
|
| - }
|
| -
|
| - private void disableChromeSyncOnUiThread() {
|
| - ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - AndroidSyncSettings.disableChromeSync(mContext);
|
| - }
|
| - });
|
| - }
|
| -
|
| - @SmallTest
|
| - @Feature({"Sync"})
|
| - public void testAccountInitialization() throws InterruptedException {
|
| - // mAccount was set to be syncable and not have periodic syncs.
|
| - assertEquals(1, mSyncContentResolverDelegate.mSetIsSyncableCalls);
|
| - assertEquals(1, mSyncContentResolverDelegate.mRemovePeriodicSyncCalls);
|
| - AndroidSyncSettings.updateAccount(mContext, null);
|
| - mAccountManager.waitForGetAccountsTask();
|
| - // mAccount was set to be not syncable.
|
| - assertEquals(2, mSyncContentResolverDelegate.mSetIsSyncableCalls);
|
| - assertEquals(1, mSyncContentResolverDelegate.mRemovePeriodicSyncCalls);
|
| - AndroidSyncSettings.updateAccount(mContext, mAlternateAccount);
|
| - // mAlternateAccount was set to be syncable and not have periodic syncs.
|
| - assertEquals(3, mSyncContentResolverDelegate.mSetIsSyncableCalls);
|
| - assertEquals(2, mSyncContentResolverDelegate.mRemovePeriodicSyncCalls);
|
| - }
|
| -
|
| - @SmallTest
|
| - @Feature({"Sync"})
|
| - public void testToggleMasterSyncFromSettings() throws InterruptedException {
|
| - mSyncContentResolverDelegate.setMasterSyncAutomatically(true);
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| - assertTrue("master sync should be set",
|
| - AndroidSyncSettings.isMasterSyncEnabled(mContext));
|
| -
|
| - mSyncContentResolverDelegate.setMasterSyncAutomatically(false);
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| - assertFalse("master sync should be unset",
|
| - AndroidSyncSettings.isMasterSyncEnabled(mContext));
|
| - }
|
| -
|
| - @SmallTest
|
| - @Feature({"Sync"})
|
| - public void testToggleChromeSyncFromSettings() throws InterruptedException {
|
| - // Turn on syncability.
|
| - mSyncContentResolverDelegate.setMasterSyncAutomatically(true);
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| -
|
| - // First sync
|
| - mSyncContentResolverDelegate.setIsSyncable(mAccount, mAuthority, 1);
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| - mSyncContentResolverDelegate.setSyncAutomatically(mAccount, mAuthority, true);
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| - assertTrue("sync should be set", AndroidSyncSettings.isSyncEnabled(mContext));
|
| - assertTrue("sync should be set for chrome app",
|
| - AndroidSyncSettings.isChromeSyncEnabled(mContext));
|
| -
|
| - // Disable sync automatically for the app
|
| - mSyncContentResolverDelegate.setSyncAutomatically(mAccount, mAuthority, false);
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| - assertFalse("sync should be unset", AndroidSyncSettings.isSyncEnabled(mContext));
|
| - assertFalse("sync should be unset for chrome app",
|
| - AndroidSyncSettings.isChromeSyncEnabled(mContext));
|
| -
|
| - // Re-enable sync
|
| - mSyncContentResolverDelegate.setSyncAutomatically(mAccount, mAuthority, true);
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| - assertTrue("sync should be re-enabled", AndroidSyncSettings.isSyncEnabled(mContext));
|
| - assertTrue("sync should be set for chrome app",
|
| - AndroidSyncSettings.isChromeSyncEnabled(mContext));
|
| -
|
| - // Disabled from master sync
|
| - mSyncContentResolverDelegate.setMasterSyncAutomatically(false);
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| - assertFalse("sync should be disabled due to master sync",
|
| - AndroidSyncSettings.isSyncEnabled(mContext));
|
| - assertFalse("master sync should be disabled",
|
| - AndroidSyncSettings.isMasterSyncEnabled(mContext));
|
| - assertTrue("sync should be set for chrome app",
|
| - AndroidSyncSettings.isChromeSyncEnabled(mContext));
|
| - }
|
| -
|
| - @SmallTest
|
| - @Feature({"Sync"})
|
| - public void testToggleAccountSyncFromApplication() throws InterruptedException {
|
| - // Turn on syncability.
|
| - mSyncContentResolverDelegate.setMasterSyncAutomatically(true);
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| -
|
| - enableChromeSyncOnUiThread();
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| - assertTrue("account should be synced", AndroidSyncSettings.isSyncEnabled(mContext));
|
| -
|
| - disableChromeSyncOnUiThread();
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| - assertFalse("account should not be synced", AndroidSyncSettings.isSyncEnabled(mContext));
|
| - }
|
| -
|
| - @SmallTest
|
| - @Feature({"Sync"})
|
| - public void testToggleSyncabilityForMultipleAccounts() throws InterruptedException {
|
| - // Turn on syncability.
|
| - mSyncContentResolverDelegate.setMasterSyncAutomatically(true);
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| -
|
| - enableChromeSyncOnUiThread();
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| - assertTrue("account should be synced", AndroidSyncSettings.isSyncEnabled(mContext));
|
| -
|
| - AndroidSyncSettings.updateAccount(mContext, mAlternateAccount);
|
| - enableChromeSyncOnUiThread();
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| - assertTrue("alternate account should be synced",
|
| - AndroidSyncSettings.isSyncEnabled(mContext));
|
| -
|
| - disableChromeSyncOnUiThread();
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| - assertFalse("alternate account should not be synced",
|
| - AndroidSyncSettings.isSyncEnabled(mContext));
|
| - AndroidSyncSettings.updateAccount(mContext, mAccount);
|
| - assertTrue("account should still be synced", AndroidSyncSettings.isSyncEnabled(mContext));
|
| -
|
| - // Ensure we don't erroneously re-use cached data.
|
| - AndroidSyncSettings.updateAccount(mContext, null);
|
| - assertFalse("null account should not be synced",
|
| - AndroidSyncSettings.isSyncEnabled(mContext));
|
| - }
|
| -
|
| - @SmallTest
|
| - @Feature({"Sync"})
|
| - public void testSyncSettingsCaching() throws InterruptedException {
|
| - // Turn on syncability.
|
| - mSyncContentResolverDelegate.setMasterSyncAutomatically(true);
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| -
|
| - enableChromeSyncOnUiThread();
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| - assertTrue("account should be synced", AndroidSyncSettings.isSyncEnabled(mContext));
|
| -
|
| - int masterSyncAutomaticallyCalls =
|
| - mSyncContentResolverDelegate.mGetMasterSyncAutomaticallyCalls;
|
| - int isSyncableCalls = mSyncContentResolverDelegate.mGetIsSyncableCalls;
|
| - int getSyncAutomaticallyAcalls = mSyncContentResolverDelegate.mGetSyncAutomaticallyCalls;
|
| -
|
| - // Do a bunch of reads.
|
| - AndroidSyncSettings.isMasterSyncEnabled(mContext);
|
| - AndroidSyncSettings.isSyncEnabled(mContext);
|
| - AndroidSyncSettings.isChromeSyncEnabled(mContext);
|
| -
|
| - // Ensure values were read from cache.
|
| - assertEquals(masterSyncAutomaticallyCalls,
|
| - mSyncContentResolverDelegate.mGetMasterSyncAutomaticallyCalls);
|
| - assertEquals(isSyncableCalls, mSyncContentResolverDelegate.mGetIsSyncableCalls);
|
| - assertEquals(getSyncAutomaticallyAcalls,
|
| - mSyncContentResolverDelegate.mGetSyncAutomaticallyCalls);
|
| -
|
| - // Do a bunch of reads for alternate account.
|
| - AndroidSyncSettings.updateAccount(mContext, mAlternateAccount);
|
| - AndroidSyncSettings.isMasterSyncEnabled(mContext);
|
| - AndroidSyncSettings.isSyncEnabled(mContext);
|
| - AndroidSyncSettings.isChromeSyncEnabled(mContext);
|
| -
|
| - // Ensure settings were only fetched once.
|
| - assertEquals(masterSyncAutomaticallyCalls + 1,
|
| - mSyncContentResolverDelegate.mGetMasterSyncAutomaticallyCalls);
|
| - assertEquals(isSyncableCalls + 1, mSyncContentResolverDelegate.mGetIsSyncableCalls);
|
| - assertEquals(getSyncAutomaticallyAcalls + 1,
|
| - mSyncContentResolverDelegate.mGetSyncAutomaticallyCalls);
|
| - }
|
| -
|
| - @SmallTest
|
| - @Feature({"Sync"})
|
| - public void testGetContractAuthority() throws Exception {
|
| - assertEquals("The contract authority should be the package name.",
|
| - getInstrumentation().getTargetContext().getPackageName(),
|
| - AndroidSyncSettings.getContractAuthority(mContext));
|
| - }
|
| -
|
| - @SmallTest
|
| - @Feature({"Sync"})
|
| - public void testAndroidSyncSettingsPostsNotifications() throws InterruptedException {
|
| - // Turn on syncability.
|
| - mSyncContentResolverDelegate.setMasterSyncAutomatically(true);
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| -
|
| - mSyncSettingsObserver.clearNotification();
|
| - AndroidSyncSettings.enableChromeSync(mContext);
|
| - assertTrue("enableChromeSync should trigger observers",
|
| - mSyncSettingsObserver.receivedNotification());
|
| -
|
| - mSyncSettingsObserver.clearNotification();
|
| - AndroidSyncSettings.updateAccount(mContext, mAlternateAccount);
|
| - assertTrue("switching to account with different settings should notify",
|
| - mSyncSettingsObserver.receivedNotification());
|
| -
|
| - mSyncSettingsObserver.clearNotification();
|
| - AndroidSyncSettings.updateAccount(mContext, mAccount);
|
| - assertTrue("switching to account with different settings should notify",
|
| - mSyncSettingsObserver.receivedNotification());
|
| -
|
| - mSyncSettingsObserver.clearNotification();
|
| - AndroidSyncSettings.enableChromeSync(mContext);
|
| - assertFalse("enableChromeSync shouldn't trigger observers",
|
| - mSyncSettingsObserver.receivedNotification());
|
| -
|
| - mSyncSettingsObserver.clearNotification();
|
| - AndroidSyncSettings.disableChromeSync(mContext);
|
| - assertTrue("disableChromeSync should trigger observers",
|
| - mSyncSettingsObserver.receivedNotification());
|
| -
|
| - mSyncSettingsObserver.clearNotification();
|
| - AndroidSyncSettings.disableChromeSync(mContext);
|
| - assertFalse("disableChromeSync shouldn't observers",
|
| - mSyncSettingsObserver.receivedNotification());
|
| - }
|
| -
|
| - @SmallTest
|
| - @Feature({"Sync"})
|
| - public void testIsSyncableOnSigninAndNotOnSignout() throws InterruptedException {
|
| - assertTrue(mSyncContentResolverDelegate.getIsSyncable(mAccount, mAuthority) == 1);
|
| - AndroidSyncSettings.updateAccount(mContext, null);
|
| - mAccountManager.waitForGetAccountsTask();
|
| - assertTrue(mSyncContentResolverDelegate.getIsSyncable(mAccount, mAuthority) == 0);
|
| - AndroidSyncSettings.updateAccount(mContext, mAccount);
|
| - assertTrue(mSyncContentResolverDelegate.getIsSyncable(mAccount, mAuthority) == 1);
|
| - }
|
| -
|
| - /**
|
| - * Regression test for crbug.com/475299.
|
| - */
|
| - @SmallTest
|
| - @Feature({"Sync"})
|
| - public void testSyncableIsAlwaysSetWhenEnablingSync() throws InterruptedException {
|
| - // Setup bad state.
|
| - mSyncContentResolverDelegate.setMasterSyncAutomatically(true);
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| - mSyncContentResolverDelegate.setIsSyncable(mAccount, mAuthority, 1);
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| - mSyncContentResolverDelegate.setSyncAutomatically(mAccount, mAuthority, true);
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| - mSyncContentResolverDelegate.setIsSyncable(mAccount, mAuthority, 0);
|
| - mSyncContentResolverDelegate.waitForLastNotificationCompleted();
|
| - assertTrue(mSyncContentResolverDelegate.getIsSyncable(mAccount, mAuthority) == 0);
|
| - assertTrue(mSyncContentResolverDelegate.getSyncAutomatically(mAccount, mAuthority));
|
| -
|
| - // Ensure bug is fixed.
|
| - AndroidSyncSettings.enableChromeSync(mContext);
|
| - assertTrue(mSyncContentResolverDelegate.getIsSyncable(mAccount, mAuthority) == 1);
|
| - // Should still be enabled.
|
| - assertTrue(mSyncContentResolverDelegate.getSyncAutomatically(mAccount, mAuthority));
|
| - }
|
| -}
|
|
|