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..9398c100bc990a3522f173fb608d9749f567f91b 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.setContext(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.setContext(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()); |
} |
}); |
} |