Index: chrome/android/javatests/src/org/chromium/chrome/browser/preferences/PreferencesTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/PreferencesTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/PreferencesTest.java |
index 40de50a82f08b82ac36e16a6dd3cb0af4598cd73..52104beb89ef2502dc1e3f10abd96f88b0b76b0d 100644 |
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/PreferencesTest.java |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/PreferencesTest.java |
@@ -8,14 +8,22 @@ import android.app.Activity; |
import android.app.Instrumentation; |
import android.content.Context; |
import android.content.Intent; |
+import android.preference.Preference; |
+import android.preference.PreferenceFragment; |
+import android.preference.PreferenceScreen; |
import android.test.suitebuilder.annotation.SmallTest; |
import org.chromium.base.ThreadUtils; |
import org.chromium.base.test.util.Feature; |
import org.chromium.chrome.browser.accessibility.FontSizePrefs; |
+import org.chromium.chrome.browser.search_engines.TemplateUrlService; |
+import org.chromium.chrome.browser.search_engines.TemplateUrlService.LoadListener; |
import org.chromium.chrome.shell.ChromeShellTestBase; |
+import org.chromium.chrome.shell.preferences.ChromeShellMainPreferences; |
+import org.chromium.content.browser.test.util.CallbackHelper; |
import org.chromium.content.browser.test.util.UiUtils; |
+import java.lang.reflect.Method; |
import java.text.NumberFormat; |
/** |
@@ -42,6 +50,74 @@ public class PreferencesTest extends ChromeShellTestBase { |
return (Preferences) activity; |
} |
+ public static void clickPreference(PreferenceFragment fragment, Preference preference) { |
+ try { |
+ Method performClick = Preference.class.getDeclaredMethod("performClick", |
+ PreferenceScreen.class); |
+ performClick.invoke(preference, fragment.getPreferenceScreen()); |
+ } catch (ReflectiveOperationException e) { |
+ throw new RuntimeException(e); |
+ } |
+ } |
+ |
+ /** |
+ * Change search engine and make sure it works correctly. |
+ */ |
+ @SmallTest |
+ @Feature({"Preferences"}) |
+ public void testSearchEnginePreference() throws Exception { |
+ // Make sure the template_url_service is loaded. |
+ final CallbackHelper onTemplateUrlServiceLoadedHelper = new CallbackHelper(); |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ if (TemplateUrlService.getInstance().isLoaded()) { |
+ onTemplateUrlServiceLoadedHelper.notifyCalled(); |
+ } else { |
+ TemplateUrlService.getInstance().registerLoadListener(new LoadListener() { |
+ @Override |
+ public void onTemplateUrlServiceLoaded() { |
+ onTemplateUrlServiceLoadedHelper.notifyCalled(); |
+ } |
+ }); |
+ TemplateUrlService.getInstance().load(); |
+ } |
+ } |
+ }); |
+ onTemplateUrlServiceLoadedHelper.waitForCallback(0); |
+ |
+ // Set the second search engine as the default using TemplateUrlService. |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ TemplateUrlService.getInstance().setSearchEngine(1); |
+ } |
+ }); |
+ |
+ final Preferences prefActivity = startPreferences(getInstrumentation(), |
+ ChromeShellMainPreferences.class.getName()); |
+ |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ // Ensure that the second search engine in the list is selected. |
+ PreferenceFragment fragment = (PreferenceFragment) |
+ prefActivity.getFragmentForTest(); |
+ SearchEnginePreference pref = (SearchEnginePreference) |
+ fragment.findPreference(SearchEnginePreference.PREF_SEARCH_ENGINE); |
+ assertNotNull(pref); |
+ assertEquals("1", pref.getValue()); |
+ |
+ // Simulate selecting the third search engine and ensure that TemplateUrlService |
+ // is updated. |
+ if (pref.getOnPreferenceChangeListener().onPreferenceChange(pref, "2")) { |
+ pref.setValue("2"); |
+ } |
+ assertEquals(2, TemplateUrlService.getInstance().getDefaultSearchEngineIndex()); |
+ } |
+ }); |
+ } |
+ |
/** |
* Tests setting FontScaleFactor and ForceEnableZoom in AccessibilityPreferences and ensures |
* that ForceEnableZoom changes corresponding to FontScaleFactor. |