Chromium Code Reviews| Index: chrome/android/sync_shell/javatests/src/org/chromium/chrome/browser/sync/SyncCustomizationFragmentTest.java |
| diff --git a/chrome/android/sync_shell/javatests/src/org/chromium/chrome/browser/sync/SyncCustomizationFragmentTest.java b/chrome/android/sync_shell/javatests/src/org/chromium/chrome/browser/sync/SyncCustomizationFragmentTest.java |
| index a10a51d85754c66180aae940477705dddc589458..71016f8aa197c072379b53773e0d49f49cea4151 100644 |
| --- a/chrome/android/sync_shell/javatests/src/org/chromium/chrome/browser/sync/SyncCustomizationFragmentTest.java |
| +++ b/chrome/android/sync_shell/javatests/src/org/chromium/chrome/browser/sync/SyncCustomizationFragmentTest.java |
| @@ -6,6 +6,7 @@ package org.chromium.chrome.browser.sync; |
| import android.app.Activity; |
| import android.app.FragmentTransaction; |
| +import android.os.Bundle; |
| import android.preference.CheckBoxPreference; |
| import android.preference.Preference; |
| import android.preference.SwitchPreference; |
| @@ -16,7 +17,15 @@ import org.chromium.base.ThreadUtils; |
| import org.chromium.base.test.util.Feature; |
| import org.chromium.chrome.browser.sync.ui.SyncCustomizationFragment; |
| import org.chromium.chrome.shell.R; |
| +import org.chromium.chrome.test.util.browser.sync.SyncTestUtil; |
| import org.chromium.sync.AndroidSyncSettings; |
| +import org.chromium.sync.internal_api.pub.base.ModelType; |
| + |
| +import java.util.Collection; |
| +import java.util.EnumSet; |
| +import java.util.HashMap; |
| +import java.util.Map; |
| +import java.util.Set; |
| /** |
| * Tests for SyncCustomizationFragment. |
| @@ -25,6 +34,21 @@ public class SyncCustomizationFragmentTest extends SyncTestBase { |
| private static final String TAG = "SyncCustomizationFragmentTest"; |
| private static final String TEST_ACCOUNT = "test@gmail.com"; |
| + /** |
| + * Maps ModelTypes to their UI element IDs. |
| + */ |
| + private static final Map<ModelType, String> UI_DATATYPES; |
| + |
| + static { |
| + UI_DATATYPES = new HashMap<ModelType, String>(); |
| + UI_DATATYPES.put(ModelType.AUTOFILL, SyncCustomizationFragment.PREFERENCE_SYNC_AUTOFILL); |
| + UI_DATATYPES.put(ModelType.BOOKMARK, SyncCustomizationFragment.PREFERENCE_SYNC_BOOKMARKS); |
| + UI_DATATYPES.put(ModelType.TYPED_URL, SyncCustomizationFragment.PREFERENCE_SYNC_OMNIBOX); |
| + UI_DATATYPES.put(ModelType.PASSWORD, SyncCustomizationFragment.PREFERENCE_SYNC_PASSWORDS); |
| + UI_DATATYPES.put(ModelType.PROXY_TABS, |
| + SyncCustomizationFragment.PREFERENCE_SYNC_RECENT_TABS); |
| + } |
| + |
| private Activity mActivity; |
| private AndroidSyncSettings mAndroidSyncSettings; |
| @@ -96,7 +120,7 @@ public class SyncCustomizationFragmentTest extends SyncTestBase { |
| startSync(); |
| SyncCustomizationFragment fragment = startSyncCustomizationFragment(); |
| SwitchPreference syncEverything = getSyncEverything(fragment); |
| - CheckBoxPreference[] dataTypes = getDataTypes(fragment); |
| + Collection<CheckBoxPreference> dataTypes = getDataTypes(fragment).values(); |
| assertDefaultSyncOnState(fragment); |
| togglePreference(syncEverything); |
| @@ -114,12 +138,46 @@ public class SyncCustomizationFragmentTest extends SyncTestBase { |
| assertFalse(mAndroidSyncSettings.isChromeSyncEnabled()); |
| } |
| + @SmallTest |
| + @Feature({"Sync"}) |
| + public void testSettingDataTypes() throws Exception { |
| + setupTestAccountAndSignInToSync(CLIENT_ID); |
| + startSync(); |
| + SyncCustomizationFragment fragment = startSyncCustomizationFragment(); |
| + SwitchPreference syncEverything = getSyncEverything(fragment); |
| + Map<ModelType, CheckBoxPreference> dataTypes = getDataTypes(fragment); |
| + |
| + assertDefaultSyncOnState(fragment); |
| + togglePreference(syncEverything); |
| + for (CheckBoxPreference dataType : dataTypes.values()) { |
| + assertTrue(dataType.isChecked()); |
| + assertTrue(dataType.isEnabled()); |
| + } |
| + |
| + Set<ModelType> expectedTypes = EnumSet.copyOf(dataTypes.keySet()); |
| + assertDataTypesAre(expectedTypes); |
| + togglePreference(dataTypes.get(ModelType.AUTOFILL)); |
| + togglePreference(dataTypes.get(ModelType.PASSWORD)); |
| + // Nothing should have changed before the fragment closes. |
| + assertDataTypesAre(expectedTypes); |
| + |
| + closeFragment(fragment); |
| + expectedTypes.remove(ModelType.AUTOFILL); |
| + expectedTypes.remove(ModelType.PASSWORD); |
| + assertDataTypesAre(expectedTypes); |
| + } |
| + |
| private SyncCustomizationFragment startSyncCustomizationFragment() { |
| + SyncCustomizationFragment fragment = new SyncCustomizationFragment(); |
| + Bundle args = new Bundle(); |
| + args.putString(SyncCustomizationFragment.ARGUMENT_ACCOUNT, |
| + SyncTestUtil.DEFAULT_TEST_ACCOUNT); |
| + fragment.setArguments(args); |
| FragmentTransaction transaction = mActivity.getFragmentManager().beginTransaction(); |
| - transaction.add(R.id.content_container, new SyncCustomizationFragment(), TAG); |
| + transaction.add(R.id.content_container, fragment, TAG); |
| transaction.commit(); |
| getInstrumentation().waitForIdleSync(); |
| - return (SyncCustomizationFragment) mActivity.getFragmentManager().findFragmentByTag(TAG); |
| + return fragment; |
| } |
| private void closeFragment(SyncCustomizationFragment fragment) { |
| @@ -139,19 +197,14 @@ public class SyncCustomizationFragmentTest extends SyncTestBase { |
| SyncCustomizationFragment.PREFERENCE_SYNC_EVERYTHING); |
| } |
| - private CheckBoxPreference[] getDataTypes(SyncCustomizationFragment fragment) { |
| - return new CheckBoxPreference[] { |
| - (CheckBoxPreference) fragment.findPreference( |
| - SyncCustomizationFragment.PREFERENCE_SYNC_AUTOFILL), |
| - (CheckBoxPreference) fragment.findPreference( |
| - SyncCustomizationFragment.PREFERENCE_SYNC_BOOKMARKS), |
| - (CheckBoxPreference) fragment.findPreference( |
| - SyncCustomizationFragment.PREFERENCE_SYNC_OMNIBOX), |
| - (CheckBoxPreference) fragment.findPreference( |
| - SyncCustomizationFragment.PREFERENCE_SYNC_PASSWORDS), |
| - (CheckBoxPreference) fragment.findPreference( |
| - SyncCustomizationFragment.PREFERENCE_SYNC_RECENT_TABS) |
| - }; |
| + private Map<ModelType, CheckBoxPreference> getDataTypes(SyncCustomizationFragment fragment) { |
| + Map<ModelType, CheckBoxPreference> dataTypes = |
| + new HashMap<ModelType, CheckBoxPreference>(); |
| + for (ModelType modelType : UI_DATATYPES.keySet()) { |
| + String prefId = UI_DATATYPES.get(modelType); |
| + dataTypes.put(modelType, (CheckBoxPreference) fragment.findPreference(prefId)); |
| + } |
| + return dataTypes; |
| } |
| private Preference getEncryption(SyncCustomizationFragment fragment) { |
| @@ -170,7 +223,7 @@ public class SyncCustomizationFragmentTest extends SyncTestBase { |
| SwitchPreference syncEverything = getSyncEverything(fragment); |
| assertTrue("The sync everything switch should be on.", syncEverything.isChecked()); |
| assertTrue("The sync everything switch should be enabled.", syncEverything.isEnabled()); |
| - for (CheckBoxPreference dataType : getDataTypes(fragment)) { |
| + for (CheckBoxPreference dataType : getDataTypes(fragment).values()) { |
| String key = dataType.getKey(); |
| assertTrue("Data type " + key + " should be checked.", dataType.isChecked()); |
| assertFalse("Data type " + key + " should be disabled.", dataType.isEnabled()); |
| @@ -187,7 +240,7 @@ public class SyncCustomizationFragmentTest extends SyncTestBase { |
| SwitchPreference syncEverything = getSyncEverything(fragment); |
| assertTrue("The sync everything switch should be on.", syncEverything.isChecked()); |
| assertFalse("The sync everything switch should be disabled.", syncEverything.isEnabled()); |
| - for (CheckBoxPreference dataType : getDataTypes(fragment)) { |
| + for (CheckBoxPreference dataType : getDataTypes(fragment).values()) { |
| String key = dataType.getKey(); |
| assertTrue("Data type " + key + " should be checked.", dataType.isChecked()); |
| assertFalse("Data type " + key + " should be disabled.", dataType.isEnabled()); |
| @@ -198,6 +251,22 @@ public class SyncCustomizationFragmentTest extends SyncTestBase { |
| getManageData(fragment).isEnabled()); |
| } |
| + private void assertDataTypesAre(final Set<ModelType> enabledDataTypes) { |
| + final Set<ModelType> disabledDataTypes = EnumSet.copyOf(UI_DATATYPES.keySet()); |
| + disabledDataTypes.removeAll(enabledDataTypes); |
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| + @Override |
| + public void run() { |
| + Set<ModelType> actualDataTypes = mProfileSyncService.getPreferredDataTypes(); |
| + assertTrue(actualDataTypes.containsAll(enabledDataTypes)); |
| + // There is no Set.containsNone(), sadly. |
|
maniscalco
2015/05/14 19:01:43
Too bad about the lack of containsNone. retainAll
maxbogue
2015/05/14 19:41:04
I think the existing code with the comment is clea
|
| + for (ModelType disabledDataType : disabledDataTypes) { |
| + assertFalse(actualDataTypes.contains(disabledDataType)); |
| + } |
| + } |
| + }); |
| + } |
| + |
| private void togglePreference(final TwoStatePreference pref) { |
| ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| @Override |