Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3805)

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/QueryInOmniboxTest.java

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/QueryInOmniboxTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/QueryInOmniboxTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/QueryInOmniboxTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..3c2a1291b95cf6a85cabb014e607a6b52f73196a
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/QueryInOmniboxTest.java
@@ -0,0 +1,324 @@
+// 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.omnibox;
+
+import static org.chromium.chrome.test.util.OmniboxTestUtils.buildSuggestionMap;
+
+import android.os.SystemClock;
+import android.test.suitebuilder.annotation.MediumTest;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.text.Selection;
+import android.text.TextUtils;
+import android.view.KeyEvent;
+import android.view.View;
+import android.widget.ImageButton;
+
+import com.google.android.apps.chrome.R;
+
+import org.chromium.base.ThreadUtils;
+import org.chromium.base.test.util.Feature;
+import org.chromium.chrome.browser.ChromeActivity;
+import org.chromium.chrome.browser.Tab;
+import org.chromium.chrome.browser.ntp.NewTabPage;
+import org.chromium.chrome.browser.omnibox.AutocompleteController.OnSuggestionsReceivedListener;
+import org.chromium.chrome.browser.omnibox.OmniboxResultsAdapter.OmniboxResultItem;
+import org.chromium.chrome.browser.omnibox.OmniboxSuggestion.Type;
+import org.chromium.chrome.browser.toolbar.ToolbarDataProvider;
+import org.chromium.chrome.test.ChromeActivityTestCaseBase;
+import org.chromium.chrome.test.util.OmniboxTestUtils;
+import org.chromium.chrome.test.util.OmniboxTestUtils.SuggestionsResult;
+import org.chromium.chrome.test.util.OmniboxTestUtils.SuggestionsResultBuilder;
+import org.chromium.chrome.test.util.OmniboxTestUtils.TestAutocompleteController;
+import org.chromium.chrome.test.util.OmniboxTestUtils.TestSuggestionResultsBuilder;
+import org.chromium.chrome.test.util.TestHttpServerClient;
+import org.chromium.content.browser.test.util.KeyUtils;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Tests for Query in Omnibox.
+ */
+public class QueryInOmniboxTest extends ChromeActivityTestCaseBase<ChromeActivity> {
+
+ private static final String QUERY_EXTRACTION_PARAM = "espv=1";
+ private static final String SEARCH_TERM = "Puppies";
+
+ private UrlBar mUrlBar;
+ private LocationBarLayout mLocationBar;
+ private TestToolbarDataProvider mTestToolbarDataProvider;
+ private ImageButton mDeleteButton;
+
+ public QueryInOmniboxTest() {
+ super(ChromeActivity.class);
+ }
+
+ /**
+ * Loading a google https url which is searching for queryText.
+ * @throws InterruptedException
+ */
+ private void loadUrlFromQueryText()
+ throws InterruptedException {
+ String url = TestHttpServerClient.getUrl("chrome/test/data/android/google.html?q="
+ + SEARCH_TERM + "&hl=en&client=chrome-mobile&"
+ + QUERY_EXTRACTION_PARAM + "&tbm=isch");
+ loadUrl(url);
+ }
+
+ /**
+ * @return The current UrlBar querytext.
+ */
+ private String getUrlBarQueryText() {
+ return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<String>() {
+ @Override
+ public String call() throws Exception {
+ return TextUtils.isEmpty(mUrlBar.getQueryText()) ? "" :
+ mUrlBar.getQueryText();
+ }
+ });
+ }
+
+ /**
+ * @return The current UrlBar text.
+ */
+ private CharSequence getUrlBarText() {
+ return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<CharSequence>() {
+ @Override
+ public CharSequence call() throws Exception {
+ return mUrlBar.getText();
+ }
+ });
+ }
+
+ /**
+ * Assert the urlbar is displaying the correct text
+ */
+ private void checkUrlBarText() {
+ assertEquals(SEARCH_TERM, getUrlBarQueryText());
+ }
+
+ @SmallTest
+ @Feature({"QueryinOmnibox", "Omnibox"})
+ public void testQueryInOmnibox() throws InterruptedException {
+ loadUrlFromQueryText();
+ checkUrlBarText();
+ }
+
+ @SmallTest
+ @Feature({"QueryinOmnibox", "Omnibox"})
+ public void testQueryInOmniboxOnFocus() throws InterruptedException {
+ loadUrlFromQueryText();
+ OmniboxTestUtils.toggleUrlBarFocus(mUrlBar, true);
+ checkUrlBarText();
+ }
+
+ @SmallTest
+ @Feature({"QueryinOmnibox", "Omnibox"})
+ public void testRefocusWithQueryInOmnibox() throws InterruptedException {
+ loadUrlFromQueryText();
+ assertEquals(SEARCH_TERM, getUrlBarQueryText());
+ assertFalse(OmniboxTestUtils.doesUrlBarHaveFocus(mUrlBar));
+ OmniboxTestUtils.checkUrlBarRefocus(mUrlBar, 5);
+ }
+
+ @MediumTest
+ @Feature({"QueryinOmnibox", "Omnibox"})
+ public void testDeleteButton() throws InterruptedException {
+ loadUrlFromQueryText();
+ OmniboxTestUtils.toggleUrlBarFocus(mUrlBar, true);
+ checkUrlBarText();
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ mDeleteButton.callOnClick();
+ }
+ });
+ assertTrue(getUrlBarQueryText().isEmpty());
+ }
+
+ @MediumTest
+ @Feature({"QueryinOmnibox", "Omnibox"})
+ public void testBackspaceDelete() throws InterruptedException {
+ loadUrlFromQueryText();
+ OmniboxTestUtils.toggleUrlBarFocus(mUrlBar, true);
+ checkUrlBarText();
+ // Backspace delete the entire querytext
+ for (int i = 0; i < SEARCH_TERM.length(); i++) {
+ final View v = mUrlBar;
+ KeyUtils.singleKeyEventView(getInstrumentation(), v, KeyEvent.KEYCODE_DEL);
+ }
+ // Query text should be gone
+ assertTrue(getUrlBarQueryText().isEmpty());
+ }
+
+ @MediumTest
+ @Feature({"QueryinOmnibox", "Omnibox"})
+ public void testShrinkingAutocompleteTextResults()
+ throws InterruptedException {
+ loadUrlFromQueryText();
+ OmniboxTestUtils.toggleUrlBarFocus(mUrlBar, true);
+ final String term = SEARCH_TERM + "i";
+ setupAutocompleteSuggestions(term);
+ CharSequence urlText = getUrlBarText();
+ assertEquals("URL Bar text not autocompleted as expected.",
+ SEARCH_TERM + "ingz", getUrlBarQueryText());
+ assertEquals(8, Selection.getSelectionStart(urlText));
+ assertEquals(11, Selection.getSelectionEnd(urlText));
+ }
+
+ @MediumTest
+ @Feature({"QueryinOmnibox", "Omnibox"})
+ public void testRefineSuggestion() throws InterruptedException {
+ loadUrlFromQueryText();
+ OmniboxTestUtils.toggleUrlBarFocus(mUrlBar, true);
+ final String term = SEARCH_TERM + "i";
+ setupAutocompleteSuggestions(term);
+ assertEquals(SEARCH_TERM + "ingz", getUrlBarQueryText());
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ OmniboxSuggestion refineView =
+ ((OmniboxResultItem) mLocationBar.getSuggestionList()
+ .getAdapter().getItem(1)).getSuggestion();
+ ((OmniboxResultsAdapter) mLocationBar.getSuggestionList()
+ .getAdapter()).getSuggestionDelegate()
+ .onRefineSuggestion(refineView);
+ }
+ });
+ CharSequence urlText = getUrlBarText();
+ assertEquals("Refine suggestion did not work as expected.",
+ SEARCH_TERM + "iblarg", getUrlBarQueryText());
+ assertEquals(urlText.length(), Selection.getSelectionStart(urlText));
+ assertEquals(urlText.length(), Selection.getSelectionEnd(urlText));
+ }
+
+ /**
+ * Setup Autocomplete suggestion map, add suggestionListener and autocomplete controller
+ * to the location bar.
+ * @param term The search term.
+ * @throws InterruptedException
+ */
+ private void setupAutocompleteSuggestions(final String term) throws InterruptedException {
+ final String suggestionFor = term.toLowerCase();
+ Map<String, List<SuggestionsResult>> suggestionsMap = buildSuggestionMap(
+ new TestSuggestionResultsBuilder()
+ .setTextShownFor(suggestionFor)
+ .addSuggestions(new SuggestionsResultBuilder()
+ .addGeneratedSuggestion(Type.SEARCH_HISTORY, term , null)
+ .addGeneratedSuggestion(Type.SEARCH_HISTORY, term + "ng", null)
+ .setAutocompleteText("ng is awesome"))
+ .addSuggestions(new SuggestionsResultBuilder()
+ .addGeneratedSuggestion(Type.SEARCH_HISTORY, term, null)
+ .addGeneratedSuggestion(Type.SEARCH_HISTORY, term + "z", null)
+ .setAutocompleteText("ng is hard"))
+ .addSuggestions(new SuggestionsResultBuilder()
+ .addGeneratedSuggestion(Type.SEARCH_HISTORY, term, null)
+ .addGeneratedSuggestion(Type.SEARCH_HISTORY, term + "blarg", null)
+ .setAutocompleteText("ngz")));
+
+ final Object suggestionsProcessedSignal = new Object();
+ final AtomicInteger suggestionsLeft = new AtomicInteger(
+ suggestionsMap.get(suggestionFor).size());
+ OnSuggestionsReceivedListener suggestionsListener = new OnSuggestionsReceivedListener() {
+ @Override
+ public void onSuggestionsReceived(
+ List<OmniboxSuggestion> suggestions, String inlineAutocompleteText) {
+ mLocationBar.onSuggestionsReceived(suggestions, inlineAutocompleteText);
+ synchronized (suggestionsProcessedSignal) {
+ int remaining = suggestionsLeft.decrementAndGet();
+ if (remaining == 0) {
+ suggestionsProcessedSignal.notifyAll();
+ } else if (remaining < 0) {
+ fail("Unexpected suggestions received");
+ }
+ }
+ }
+ };
+ final TestAutocompleteController controller = new TestAutocompleteController(
+ mLocationBar, suggestionsListener, suggestionsMap);
+
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ mLocationBar.setAutocompleteController(controller);
+ mUrlBar.append("i");
+ }
+ });
+ synchronized (suggestionsProcessedSignal) {
+ long endTime = SystemClock.uptimeMillis() + 3000;
+ while (suggestionsLeft.get() != 0) {
+ long waitTime = endTime - SystemClock.uptimeMillis();
+ if (waitTime <= 0) break;
+ suggestionsProcessedSignal.wait(waitTime);
+ }
+ }
+ }
+
+ @Override
+ public void startMainActivity() throws InterruptedException {
+ startMainActivityOnBlankPage();
+ mUrlBar = (UrlBar) getActivity().findViewById(R.id.url_bar);
+ mLocationBar = (LocationBarLayout) getActivity().findViewById(R.id.location_bar);
+ mTestToolbarDataProvider =
+ new TestToolbarDataProvider(mLocationBar.getToolbarDataProvider());
+ mLocationBar.setToolbarDataProvider(mTestToolbarDataProvider);
+ mDeleteButton = (ImageButton) getActivity().findViewById(R.id.delete_button);
+ }
+
+ private static class TestToolbarDataProvider implements ToolbarDataProvider {
+ private final ToolbarDataProvider mBaseProvider;
+
+ public TestToolbarDataProvider(ToolbarDataProvider baseProvider) {
+ mBaseProvider = baseProvider;
+ }
+
+ @Override
+ public Tab getTab() {
+ return mBaseProvider.getTab();
+ }
+
+ @Override
+ public NewTabPage getNewTabPageForCurrentTab() {
+ return mBaseProvider.getNewTabPageForCurrentTab();
+ }
+
+ @Override
+ public boolean isIncognito() {
+ return mBaseProvider.isIncognito();
+ }
+
+ @Override
+ public int getLoadProgress() {
+ return mBaseProvider.getLoadProgress();
+ }
+
+ @Override
+ public String getText() {
+ return SEARCH_TERM;
+ }
+
+ @Override
+ public boolean wouldReplaceURL() {
+ return true;
+ }
+
+ @Override
+ public int getPrimaryColor() {
+ return mBaseProvider.getPrimaryColor();
+ }
+
+ @Override
+ public boolean isUsingBrandColor() {
+ return mBaseProvider.isUsingBrandColor();
+ }
+
+ @Override
+ public String getCorpusChipText() {
+ return null;
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698