From 6e09311524a2987f95e0b4d39cd497b955b3a0c7 Mon Sep 17 00:00:00 2001 From: maxbogue Date: Fri, 29 May 2015 17:03:25 -0700 Subject: [PATCH] [Sync] Add simple tests for FirstRun signin behavior. - Telling FR to sign in should successfuly sign in and start sync. - Telling FR to not sign in should not sign in and not start sync. BUG=480604 Review URL: https://codereview.chromium.org/1149093005 Cr-Commit-Position: refs/heads/master@{#332083} --- .../browser/firstrun/FirstRunSignInProcessor.java | 4 +- .../chromium/chrome/browser/sync/FirstRunTest.java | 74 ++++++++++++++++++++++ .../chromium/chrome/browser/sync/SyncTestBase.java | 10 ++- 3 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 chrome/android/sync_shell/javatests/src/org/chromium/chrome/browser/sync/FirstRunTest.java diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunSignInProcessor.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunSignInProcessor.java index c140d2324533..3422d2276860 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunSignInProcessor.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunSignInProcessor.java @@ -14,6 +14,7 @@ import android.text.TextUtils; import android.util.Log; import org.chromium.base.CommandLine; +import org.chromium.base.VisibleForTesting; import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.preferences.Preferences; import org.chromium.chrome.browser.preferences.PreferencesLauncher; @@ -241,7 +242,8 @@ public class FirstRunSignInProcessor { * @param context A context * @param isComplete Whether there is no pending sign-in requests from the First Run Experience. */ - private static void setFirstRunFlowSignInComplete(Context context, boolean isComplete) { + @VisibleForTesting + public static void setFirstRunFlowSignInComplete(Context context, boolean isComplete) { PreferenceManager.getDefaultSharedPreferences(context) .edit() .putBoolean(FIRST_RUN_FLOW_SIGNIN_COMPLETE, isComplete) diff --git a/chrome/android/sync_shell/javatests/src/org/chromium/chrome/browser/sync/FirstRunTest.java b/chrome/android/sync_shell/javatests/src/org/chromium/chrome/browser/sync/FirstRunTest.java new file mode 100644 index 000000000000..c48ff4d8f1e2 --- /dev/null +++ b/chrome/android/sync_shell/javatests/src/org/chromium/chrome/browser/sync/FirstRunTest.java @@ -0,0 +1,74 @@ +// 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.sync; + +import android.accounts.Account; +import android.os.Bundle; +import android.test.suitebuilder.annotation.SmallTest; + +import org.chromium.base.ThreadUtils; +import org.chromium.base.test.util.Feature; +import org.chromium.chrome.browser.firstrun.FirstRunActivity; +import org.chromium.chrome.browser.firstrun.FirstRunSignInProcessor; +import org.chromium.chrome.test.util.browser.sync.SyncTestUtil; +import org.chromium.sync.AndroidSyncSettings; + +/** + * Tests for the first run experience. + */ +public class FirstRunTest extends SyncTestBase { + private static final String TAG = "FirstRunTest"; + + private enum ShowSyncSettings { + YES, + NO; + } + + // Test that signing in through FirstRun signs in and starts sync. + @SmallTest + @Feature({"Sync"}) + public void testFreSignin() throws Exception { + Account testAccount = setupTestAccount(CLIENT_ID); + SyncTestUtil.verifySyncIsSignedOut(mContext); + assertFalse(AndroidSyncSettings.isChromeSyncEnabled(mContext)); + processFirstRun(testAccount.name, ShowSyncSettings.NO); + SyncTestUtil.verifySyncIsSignedIn(mContext, testAccount); + assertTrue(AndroidSyncSettings.isChromeSyncEnabled(mContext)); + } + + // Test that not signing in through FirstRun does not sign in sync. + @SmallTest + @Feature({"Sync"}) + public void testFreNoSignin() throws Exception { + setupTestAccount(CLIENT_ID); + SyncTestUtil.verifySyncIsSignedOut(mContext); + assertFalse(AndroidSyncSettings.isChromeSyncEnabled(mContext)); + processFirstRun(null, ShowSyncSettings.NO); + SyncTestUtil.verifySyncIsSignedOut(mContext); + assertFalse(AndroidSyncSettings.isChromeSyncEnabled(mContext)); + } + + /** + * Execute the FirstRun code using the given parameters. + * + * @param account The account name to sign in, or null. + * @param showSyncSettings Whether to show the sync settings page. + */ + private void processFirstRun(String account, ShowSyncSettings showSyncSettings) { + FirstRunSignInProcessor.setFirstRunFlowSignInComplete(getActivity(), false); + Bundle data = new Bundle(); + data.putString(FirstRunActivity.RESULT_SIGNIN_ACCOUNT_NAME, account); + data.putBoolean(FirstRunActivity.RESULT_SHOW_SYNC_SETTINGS, + showSyncSettings == ShowSyncSettings.YES); + FirstRunSignInProcessor.finalizeFirstRunFlowState(getActivity(), data); + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + FirstRunSignInProcessor.start(getActivity()); + } + }); + getInstrumentation().waitForIdleSync(); + } +} diff --git a/chrome/android/sync_shell/javatests/src/org/chromium/chrome/browser/sync/SyncTestBase.java b/chrome/android/sync_shell/javatests/src/org/chromium/chrome/browser/sync/SyncTestBase.java index 5dd2f3033f51..fb5c5c4a46bd 100644 --- a/chrome/android/sync_shell/javatests/src/org/chromium/chrome/browser/sync/SyncTestBase.java +++ b/chrome/android/sync_shell/javatests/src/org/chromium/chrome/browser/sync/SyncTestBase.java @@ -122,8 +122,7 @@ public class SyncTestBase extends ChromeShellTestBase { AndroidSyncSettings.overrideForTests(mContext, mSyncContentResolver); } - protected void setupTestAccountAndSignInToSync( - final String syncClientIdentifier) + protected Account setupTestAccount(final String syncClientIdentifier) throws InterruptedException { Account defaultTestAccount = SyncTestUtil.setupTestAccountThatAcceptsAllAuthTokens( mAccountManager, SyncTestUtil.DEFAULT_TEST_ACCOUNT, SyncTestUtil.DEFAULT_PASSWORD); @@ -138,6 +137,13 @@ public class SyncTestBase extends ChromeShellTestBase { }, true); SyncTestUtil.verifySyncIsSignedOut(getActivity()); + return defaultTestAccount; + } + + protected void setupTestAccountAndSignInToSync( + final String syncClientIdentifier) + throws InterruptedException { + Account defaultTestAccount = setupTestAccount(syncClientIdentifier); signIn(defaultTestAccount); SyncTestUtil.verifySyncIsSignedIn(mContext, defaultTestAccount); assertTrue("Sync everything should be enabled", -- 2.11.4.GIT