| Index: blimp/client/app/android/javatests/src/org/chromium/blimp/core/settings/BlimpPreferencesTest.java
|
| diff --git a/blimp/client/app/android/javatests/src/org/chromium/blimp/core/settings/BlimpPreferencesTest.java b/blimp/client/app/android/javatests/src/org/chromium/blimp/core/settings/BlimpPreferencesTest.java
|
| index 0d53f4e6b222013355d735ab3c83f331586e4c73..19396a9779d5c55e9fb2234cb39bc5bd025ebe69 100644
|
| --- a/blimp/client/app/android/javatests/src/org/chromium/blimp/core/settings/BlimpPreferencesTest.java
|
| +++ b/blimp/client/app/android/javatests/src/org/chromium/blimp/core/settings/BlimpPreferencesTest.java
|
| @@ -9,11 +9,15 @@ import android.content.Intent;
|
| import android.preference.Preference;
|
| import android.preference.PreferenceFragment;
|
| import android.preference.PreferenceScreen;
|
| +import android.preference.SwitchPreference;
|
| import android.test.suitebuilder.annotation.SmallTest;
|
|
|
| +import org.chromium.base.ContextUtils;
|
| import org.chromium.base.ThreadUtils;
|
| import org.chromium.base.test.BaseActivityInstrumentationTestCase;
|
| -import org.chromium.blimp_public.BlimpSettingsCallbacks;
|
| +import org.chromium.blimp.core.MockBlimpClientContext;
|
| +import org.chromium.blimp.core.MockBlimpClientContextDelegate;
|
| +import org.chromium.components.sync.signin.ChromeSigninController;
|
|
|
| /**
|
| * Test blimp setting page.
|
| @@ -34,30 +38,48 @@ public class BlimpPreferencesTest extends BaseActivityInstrumentationTestCase<Mo
|
| getActivity();
|
| }
|
|
|
| - // Mock callback implementation.
|
| - static class MockSettingCallback implements BlimpSettingsCallbacks {
|
| - private int mRestartCalled = 0;
|
| + /**
|
| + * Mock {@link AboutBlimpPreferences}, the main test target class.
|
| + */
|
| + public static class MockAboutBlimpPreferences extends AboutBlimpPreferences {
|
| + private static final String BLIMP_PREF_TAG = "TestBlimpPref";
|
| +
|
| + // Avoid calling native code in instrumentation test.
|
| @Override
|
| - public void onRestartBrowserRequested() {
|
| - ++mRestartCalled;
|
| - }
|
| - }
|
| + protected void initializeNative() {}
|
| + @Override
|
| + protected void destroyNative() {}
|
|
|
| - // Mock {@link AboutBlimpPreferences}, the main test target class.
|
| - static class MockAboutBlimpPreferences extends AboutBlimpPreferences {
|
| - private static final String BLIMP_PREF_TAG = "TestBlimpPref";
|
| public void testRestartBrowser() {
|
| super.restartBrowser();
|
| }
|
| }
|
|
|
| - private Preference attachBlimpPref(PreferenceFragment fragment,
|
| - BlimpSettingsCallbacks callback) {
|
| + private Preference attachBlimpPref(PreferenceFragment fragment) {
|
| ThreadUtils.assertOnUiThread();
|
| assertNotNull(fragment);
|
| - MockAboutBlimpPreferences.addBlimpPreferences(fragment);
|
| - MockAboutBlimpPreferences.registerCallback(callback);
|
| - return fragment.findPreference(MockAboutBlimpPreferences.PREF_BLIMP_SWITCH);
|
| + MockAboutBlimpPreferences.addBlimpPreferences(fragment, new MockBlimpClientContext());
|
| + return fragment.findPreference(PreferencesUtil.PREF_BLIMP_SWITCH);
|
| + }
|
| +
|
| + // Create the setting page preference.
|
| + private MockAboutBlimpPreferences createMockBlimpPreferenceFragment() {
|
| + FragmentManager manager = getActivity().getFragmentManager();
|
| + manager.beginTransaction()
|
| + .add(new MockAboutBlimpPreferences(), MockAboutBlimpPreferences.BLIMP_PREF_TAG)
|
| + .commitAllowingStateLoss();
|
| + manager.executePendingTransactions();
|
| +
|
| + MockAboutBlimpPreferences blimpFragment =
|
| + (MockAboutBlimpPreferences) manager.findFragmentByTag(
|
| + MockAboutBlimpPreferences.BLIMP_PREF_TAG);
|
| +
|
| + assertNotNull("Blimp PreferenceFragment is not found.", blimpFragment);
|
| +
|
| + // Call onResume to load preferences items, this simulate the actual fragment life cycle.
|
| + blimpFragment.onResume();
|
| +
|
| + return blimpFragment;
|
| }
|
|
|
| /**
|
| @@ -76,27 +98,85 @@ public class BlimpPreferencesTest extends BaseActivityInstrumentationTestCase<Mo
|
| PreferenceScreen mainScreen = mainFragment.getPreferenceScreen();
|
| assertNotNull("Mock Main preferences screen is null.", mainScreen);
|
|
|
| - MockSettingCallback callback = new MockSettingCallback();
|
| -
|
| // Check if blimp settings preference item can be attached to main preferences list.
|
| - Preference blimpPref = attachBlimpPref(mainFragment, callback);
|
| + Preference blimpPref = attachBlimpPref(mainFragment);
|
| assertNotNull("Blimp preference item in main preferences list is not found.",
|
| blimpPref);
|
|
|
| // Open blimp settings page and check if callback is handled.
|
| - FragmentManager manager = mainFragment.getFragmentManager();
|
| - manager.beginTransaction().add(
|
| - new MockAboutBlimpPreferences(), MockAboutBlimpPreferences.BLIMP_PREF_TAG)
|
| - .commitAllowingStateLoss();
|
| - manager.executePendingTransactions();
|
| -
|
| - MockAboutBlimpPreferences blimpFragment = (MockAboutBlimpPreferences)
|
| - manager.findFragmentByTag(MockAboutBlimpPreferences.BLIMP_PREF_TAG);
|
| - assertNotNull("Blimp PreferenceFragment is not found.", blimpFragment);
|
| + MockAboutBlimpPreferences blimpFragment = createMockBlimpPreferenceFragment();
|
| + MockBlimpClientContext mockClientContext = new MockBlimpClientContext();
|
| + MockAboutBlimpPreferences.setDelegate(mockClientContext);
|
|
|
| blimpFragment.testRestartBrowser();
|
| - assertEquals("Unexpected number of callback triggered.", 1,
|
| - callback.mRestartCalled);
|
| + MockBlimpClientContextDelegate mockDelegate =
|
| + (MockBlimpClientContextDelegate) mockClientContext.getDelegate();
|
| + assertEquals("Restart browser should be called.",
|
| + mockDelegate.restartBrowserCalled(), 1);
|
| + }
|
| + });
|
| + }
|
| +
|
| + /**
|
| + * Test the Blimp switch preference when user signed in or signed out.
|
| + */
|
| + @SmallTest
|
| + public void testSwitchPrefSignedIn() {
|
| + launchActivity();
|
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + // Mock user sign in.
|
| + ChromeSigninController signinController =
|
| + ChromeSigninController.get(ContextUtils.getApplicationContext());
|
| + signinController.setSignedInAccountName("test@gmail.com");
|
| + assertTrue("User should be signed in.", signinController.isSignedIn());
|
| +
|
| + MockBlimpClientContext mockClientContext = new MockBlimpClientContext();
|
| + MockAboutBlimpPreferences.setDelegate(mockClientContext);
|
| +
|
| + MockAboutBlimpPreferences blimpFragment = createMockBlimpPreferenceFragment();
|
| +
|
| + // Test switch preference states after the setting page is created.
|
| + SwitchPreference switchPref = (SwitchPreference) blimpFragment.findPreference(
|
| + PreferencesUtil.PREF_BLIMP_SWITCH);
|
| + boolean canUpdate = switchPref.getOnPreferenceChangeListener().onPreferenceChange(
|
| + switchPref, true);
|
| + assertTrue("User can change switch if the user signed in.", canUpdate);
|
| + assertEquals(
|
| + "Connect should be called.", mockClientContext.connectCalledCount(), 1);
|
| + mockClientContext.reset();
|
| +
|
| + // Test switch state after user signed out.
|
| + signinController.setSignedInAccountName(null);
|
| + blimpFragment.onResume();
|
| +
|
| + // Need to update the reference of switchPreference since UI will remove all the
|
| + // prefs, and fill in with new ones in onResume.
|
| + switchPref = (SwitchPreference) blimpFragment.findPreference(
|
| + PreferencesUtil.PREF_BLIMP_SWITCH);
|
| + canUpdate = switchPref.getOnPreferenceChangeListener().onPreferenceChange(
|
| + switchPref, true);
|
| + assertFalse("User can't change switch if the user signed out.", canUpdate);
|
| +
|
| + // Test waiting for sign in and sign in call from native code.
|
| + blimpFragment.mWaitForSignIn = true;
|
| + blimpFragment.onSignedIn();
|
| + switchPref = (SwitchPreference) blimpFragment.findPreference(
|
| + PreferencesUtil.PREF_BLIMP_SWITCH);
|
| + assertFalse(
|
| + "UI should no longer wait for user sign in.", blimpFragment.mWaitForSignIn);
|
| + assertTrue("User sign in call should turn on the switch.", switchPref.isChecked());
|
| + assertEquals(
|
| + "Connect should be called.", mockClientContext.connectCalledCount(), 1);
|
| + mockClientContext.reset();
|
| +
|
| + // Test sign out call from native code.
|
| + blimpFragment.onSignedOut();
|
| + switchPref = (SwitchPreference) blimpFragment.findPreference(
|
| + PreferencesUtil.PREF_BLIMP_SWITCH);
|
| + assertFalse(
|
| + "User sign out call should turn off the switch.", switchPref.isChecked());
|
| }
|
| });
|
| }
|
|
|