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

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/widget/findinpage/FindTest.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/widget/findinpage/FindTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/findinpage/FindTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/findinpage/FindTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..18aeb087df99eb9b6763c3ef8d4e1d54df9a2296
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/findinpage/FindTest.java
@@ -0,0 +1,281 @@
+// 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.
+
+/**
+ * This is a simple framework for a test of an Application. See
+ * {@link android.test.ApplicationTestCase ApplicationTestCase} for more
+ * information on how to write and extend Application tests.
+ */
+
+package org.chromium.chrome.browser.widget.findinpage;
+
+import android.test.suitebuilder.annotation.MediumTest;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.view.KeyCharacterMap;
+import android.view.KeyEvent;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.google.android.apps.chrome.R;
+
+import org.chromium.base.ThreadUtils;
+import org.chromium.base.test.util.Feature;
+import org.chromium.chrome.test.ChromeTabbedActivityTestBase;
+import org.chromium.chrome.test.util.MenuUtils;
+import org.chromium.chrome.test.util.TestHttpServerClient;
+import org.chromium.content.browser.test.util.Criteria;
+import org.chromium.content.browser.test.util.CriteriaHelper;
+import org.chromium.content.browser.test.util.KeyUtils;
+import org.chromium.content.browser.test.util.UiUtils;
+
+/**
+ * Find in page tests.
+ */
+public class FindTest extends ChromeTabbedActivityTestBase {
+ private static final String FILEPATH = "chrome/test/data/android/find/test.html";
+
+ /**
+ * Returns the FindResults text.
+ */
+ private String waitForFindResults(final String expectedResult) throws InterruptedException {
+ final TextView findResults = (TextView) getActivity().findViewById(R.id.find_status);
+ assertNotNull(expectedResult);
+ assertNotNull(findResults);
+ assertTrue(CriteriaHelper.pollForUIThreadCriteria(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ return expectedResult.equals(findResults.getText());
+ }
+ }));
+ return findResults.getText().toString();
+ }
+
+ /**
+ * Find in page by invoking the 'find in page' menu item.
+ *
+ * @throws InterruptedException
+ */
+ private void findInPageFromMenu() throws InterruptedException {
+ MenuUtils.invokeCustomMenuActionSync(getInstrumentation(),
+ getActivity(), R.id.find_in_page_id);
+
+ waitForFindInPageVisibility(true);
+ }
+
+ private void waitForFindInPageVisibility(final boolean visible) throws InterruptedException {
+ assertTrue(CriteriaHelper.pollForUIThreadCriteria(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ FindToolbar findToolbar = (FindToolbar) getActivity().findViewById(
+ R.id.find_toolbar);
+
+ boolean isVisible = findToolbar != null && findToolbar.isShown();
+ return (visible == isVisible) && !findToolbar.isAnimating();
+ }
+ }));
+ }
+
+ private String findStringInPage(final String query, String expectedResult)
+ throws InterruptedException {
+ findInPageFromMenu();
+ // FindToolbar should automatically get focus.
+ assertTrue("FindToolbar should have focus",
+ getActivity().findViewById(R.id.find_query).hasFocus());
+ final TextView findQueryText = (TextView) getActivity().findViewById(R.id.find_query);
+ assertNotNull(findQueryText);
+ // We have to send each key 1-by-1 to trigger the right listeners in the toolbar.
+ KeyCharacterMap keyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
+ final KeyEvent[] events = keyCharacterMap.getEvents(query.toCharArray());
+ assertNotNull(events);
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ for (int i = 0; i < events.length; i++) {
+ if (!findQueryText.dispatchKeyEventPreIme(events[i])) {
+ findQueryText.dispatchKeyEvent(events[i]);
+ }
+ }
+ }
+ });
+ return waitForFindResults(expectedResult);
+ }
+
+ private void loadTestAndVerifyFindInPage(String query, String expectedResult)
+ throws InterruptedException {
+ loadUrl(TestHttpServerClient.getUrl(FILEPATH));
+ String findResults = findStringInPage(query, expectedResult);
+ assertTrue("Expected: " + expectedResult + " Got: " + findResults + " for: "
+ + TestHttpServerClient.getUrl(FILEPATH),
+ findResults.contains(expectedResult));
+ }
+
+ /**
+ * Verify Find In Page is not case sensitive.
+ */
+ @MediumTest
+ @Feature({"FindInPage", "Main"})
+ public void testFind() throws InterruptedException {
+ loadTestAndVerifyFindInPage("pitts", "1/7");
+ }
+
+ /**
+ * Verify Find In Page with just one result.
+ */
+ @MediumTest
+ @Feature({"FindInPage"})
+ public void testFind101() throws InterruptedException {
+ loadTestAndVerifyFindInPage("it", "1/101");
+ }
+
+ /**
+ * Verify Find In Page with a multi-line string.
+ */
+ @MediumTest
+ @Feature({"FindInPage"})
+ public void testFindMultiLine() throws InterruptedException {
+ String multiLineSearchTerm = "This is the text of this document.\n"
+ + " I am going to write the word \'Pitts\' 7 times. (That was one.)";
+ loadTestAndVerifyFindInPage(multiLineSearchTerm, "1/1");
+ }
+
+ /**
+ * Test for Find In Page with a multi-line string. Search string has an extra character
+ * added to the end so it should not be found.
+ */
+ @MediumTest
+ @Feature({"FindInPage"})
+ public void testFindMultiLineFalse() throws InterruptedException {
+ String multiLineSearchTerm = "aThis is the text of this document.\n"
+ + " I am going to write the word \'Pitts\' 7 times. (That was one.)";
+ loadTestAndVerifyFindInPage(multiLineSearchTerm, "0/0");
+ }
+
+ /**
+ * Verify Find In Page Next button.
+ */
+ @MediumTest
+ @Feature({"FindInPage"})
+ public void testFindNext() throws InterruptedException {
+ String query = "pitts";
+ loadTestAndVerifyFindInPage(query, "1/7");
+ // TODO(jaydeepmehta): Verify number of results and match against boxes drawn.
+ singleClickView(getActivity().findViewById(R.id.find_next_button));
+ waitForFindResults("2/7");
+ for (int i = 2; i <= 7; i++) {
+ singleClickView(getActivity().findViewById(R.id.find_next_button));
+ }
+ waitForFindResults("1/7");
+ }
+
+ /**
+ * Verify Find In Page Next/Previous button.
+ */
+ @MediumTest
+ @Feature({"FindInPage"})
+ public void testFindNextPrevious() throws InterruptedException {
+ String query = "pitts";
+ loadTestAndVerifyFindInPage(query, "1/7");
+ // TODO(jaydeepmehta): Verify number of results and match against boxes drawn.
+ singleClickView(getActivity().findViewById(R.id.find_next_button));
+ waitForFindResults("2/7");
+ singleClickView(getActivity().findViewById(R.id.find_prev_button));
+ waitForFindResults("1/7");
+ }
+
+ @MediumTest
+ @Feature({"FindInPage"})
+ public void testResultsBarInitiallyVisible() throws InterruptedException {
+ loadUrl(TestHttpServerClient.getUrl(FILEPATH));
+ findInPageFromMenu();
+ FindToolbar findToolbar = (FindToolbar) getActivity().findViewById(R.id.find_toolbar);
+ View resultBar = findToolbar.getFindResultBar();
+ assertEquals(View.VISIBLE, resultBar.getVisibility());
+ }
+
+ @MediumTest
+ @Feature({"FindInPage"})
+ public void testResultsBarVisibleAfterTypingText() throws InterruptedException {
+ loadUrl(TestHttpServerClient.getUrl(FILEPATH));
+ findInPageFromMenu();
+ FindToolbar findToolbar = (FindToolbar) getActivity().findViewById(R.id.find_toolbar);
+ View resultBar = findToolbar.getFindResultBar();
+ assertNotNull(resultBar);
+ final TextView findQueryText = (TextView) findToolbar.findViewById(R.id.find_query);
+ assertNotNull(findQueryText);
+
+ KeyUtils.singleKeyEventView(getInstrumentation(), findQueryText, KeyEvent.KEYCODE_T);
+ assertEquals(View.VISIBLE, resultBar.getVisibility());
+ KeyUtils.singleKeyEventView(getInstrumentation(), findQueryText, KeyEvent.KEYCODE_DEL);
+ assertEquals(View.VISIBLE, resultBar.getVisibility());
+ }
+
+ /**
+ * Verify Find In Page isn't dismissed and matches no results
+ * if invoked with an empty string.
+ */
+ @MediumTest
+ @Feature({"FindInPage"})
+ public void testFindDismissOnEmptyString() throws InterruptedException {
+ loadUrl(TestHttpServerClient.getUrl(FILEPATH));
+ findInPageFromMenu();
+
+ FindToolbar findToolbar = (FindToolbar) getActivity().findViewById(R.id.find_toolbar);
+ assertNotNull(findToolbar);
+ assertEquals(View.VISIBLE, findToolbar.getVisibility());
+ final TextView findQueryText = (TextView) findToolbar.findViewById(R.id.find_query);
+ assertNotNull(findQueryText);
+ KeyUtils.singleKeyEventView(getInstrumentation(), findQueryText, KeyEvent.KEYCODE_T);
+ KeyUtils.singleKeyEventView(getInstrumentation(), findQueryText, KeyEvent.KEYCODE_DEL);
+ KeyUtils.singleKeyEventView(getInstrumentation(), findQueryText, KeyEvent.KEYCODE_ENTER);
+
+ assertEquals(View.VISIBLE, findToolbar.getVisibility());
+
+ String findResults = waitForFindResults("");
+ assertEquals(0, findResults.length());
+ }
+
+ /**
+ * Verify FIP in IncognitoTabs.
+ */
+ @SmallTest
+ @Feature({"FindInPage"})
+ public void testFindNextPreviousIncognitoTab() throws InterruptedException {
+ String query = "pitts";
+ newIncognitoTabFromMenu();
+ loadTestAndVerifyFindInPage(query, "1/7");
+ // TODO(jaydeepmehta): Verify number of results and match against boxes drawn.
+ singleClickView(getActivity().findViewById(R.id.find_next_button));
+ waitForFindResults("2/7");
+ singleClickView(getActivity().findViewById(R.id.find_prev_button));
+ waitForFindResults("1/7");
+ }
+
+ /**
+ * Verify Find in Page text isnt restored on Incognito Tabs.
+ */
+ @MediumTest
+ @Feature({"FindInPage"})
+ public void testFipTextNotRestoredIncognitoTab() throws InterruptedException {
+ newIncognitoTabFromMenu();
+ loadTestAndVerifyFindInPage("pitts", "1/7");
+ // close the fip
+ final View v = getActivity().findViewById(R.id.close_find_button);
+ singleClickView(v);
+ waitForFindInPageVisibility(false);
+
+ // Reopen and check the text.
+ findInPageFromMenu();
+ UiUtils.settleDownUI(getInstrumentation());
+ // Verify the text content.
+ EditText e = (EditText) getActivity().findViewById(R.id.find_query);
+ String myText = e.getText().toString();
+ assertTrue("expected empty string : " + myText, myText.isEmpty());
+ }
+
+ @Override
+ public void startMainActivity() throws InterruptedException {
+ startMainActivityOnBlankPage();
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698