Index: chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchTapEventTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchTapEventTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchTapEventTest.java |
index d1672343356625ba4a7525d52e4aa37aa0e04c0d..1f18857b0b65881f33becb495b88a22faa896adb 100644 |
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchTapEventTest.java |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchTapEventTest.java |
@@ -4,7 +4,9 @@ |
package org.chromium.chrome.browser.contextualsearch; |
-import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE; |
+import static org.hamcrest.CoreMatchers.equalTo; |
+import static org.hamcrest.CoreMatchers.is; |
+import static org.junit.Assert.assertThat; |
import android.content.Context; |
import android.net.Uri; |
@@ -20,12 +22,13 @@ import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManager; |
import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManagerWrapper; |
import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.ContextualSearchPanel; |
import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost; |
+import org.chromium.chrome.browser.contextualsearch.ContextualSearchInternalStateController.InternalState; |
+import org.chromium.chrome.browser.contextualsearch.ContextualSearchSelectionController.SelectionType; |
import org.chromium.chrome.test.ChromeActivityTestCaseBase; |
import org.chromium.content.browser.ContentViewCore; |
import org.chromium.content.browser.SelectionClient; |
import org.chromium.content.browser.SelectionPopupController; |
import org.chromium.content_public.browser.WebContents; |
-import org.chromium.ui.base.WindowAndroid; |
import org.chromium.ui.resources.dynamics.DynamicResourceLoader; |
import org.chromium.ui.touch_selection.SelectionEventType; |
@@ -42,7 +45,7 @@ public class ContextualSearchTapEventTest extends ChromeActivityTestCaseBase<Chr |
private SelectionClient mContextualSearchClient; |
/** |
- * A ContextualSearchRequest that forgoes URI template lookup. |
+ * A ContextualSearchRequest that foregoes URI template lookup. |
*/ |
private static class MockContextualSearchRequest extends ContextualSearchRequest { |
public MockContextualSearchRequest(String term, String altTerm, boolean prefetch) { |
@@ -83,9 +86,8 @@ public class ContextualSearchTapEventTest extends ChromeActivityTestCaseBase<Chr |
* ContextualSearchManager wrapper that prevents network requests and most native calls. |
*/ |
private static class ContextualSearchManagerWrapper extends ContextualSearchManager { |
- public ContextualSearchManagerWrapper(ChromeActivity activity, |
- WindowAndroid windowAndroid) { |
- super(activity, windowAndroid, null); |
+ public ContextualSearchManagerWrapper(ChromeActivity activity) { |
+ super(activity, null); |
setSelectionController(new MockCSSelectionController(activity, this)); |
ContentViewCore contentView = getSelectionController().getBaseContentView(); |
WebContents webContents = WebContentsFactory.createWebContents(false, false); |
@@ -113,7 +115,10 @@ public class ContextualSearchTapEventTest extends ChromeActivityTestCaseBase<Chr |
@Override |
protected void nativeGatherSurroundingText(long nativeContextualSearchManager, |
- ContextualSearchContext contextualSearchContext, WebContents baseWebContents) {} |
+ ContextualSearchContext contextualSearchContext, WebContents baseWebContents) { |
+ getContextualSearchInternalStateController().notifyFinishedWorkOn( |
+ InternalState.GATHERING_SURROUNDINGS); |
+ } |
/** |
* @return A stubbed ContentViewCore for mocking text selection. |
@@ -195,7 +200,7 @@ public class ContextualSearchTapEventTest extends ChromeActivityTestCaseBase<Chr |
/** |
* Trigger text selection on the contextual search manager. |
*/ |
- private void mockTapText(String text) { |
+ private void mockLongpressText(String text) { |
mContextualSearchManager.getBaseContentView().setSelectedText(text); |
ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
@Override |
@@ -207,6 +212,19 @@ public class ContextualSearchTapEventTest extends ChromeActivityTestCaseBase<Chr |
} |
/** |
+ * Trigger text selection on the contextual search manager. |
+ */ |
+ private void mockTapText(String text) { |
+ mContextualSearchManager.getBaseContentView().setSelectedText(text); |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ mContextualSearchClient.showUnhandledTapUIIfNeeded(0, 0); |
+ } |
+ }); |
+ } |
+ |
+ /** |
* Trigger empty space tap. |
*/ |
private void mockTapEmptySpace() { |
@@ -220,6 +238,15 @@ public class ContextualSearchTapEventTest extends ChromeActivityTestCaseBase<Chr |
}); |
} |
+ private void mockSelectWordAroundCaretAck(final String text) { |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ mContextualSearchManager.handleSelection(text, true, SelectionType.TAP, 0, 0); |
+ } |
+ }); |
+ } |
+ |
// -------------------------------------------------------------------------------------------- |
public ContextualSearchTapEventTest() { |
@@ -239,8 +266,7 @@ public class ContextualSearchTapEventTest extends ChromeActivityTestCaseBase<Chr |
mPanelManager.setContainerView(new LinearLayout(activity)); |
mPanelManager.setDynamicResourceLoader(new DynamicResourceLoader(0, null)); |
- mContextualSearchManager = |
- new ContextualSearchManagerWrapper(activity, activity.getWindowAndroid()); |
+ mContextualSearchManager = new ContextualSearchManagerWrapper(activity); |
mPanel = new ContextualSearchPanelWrapper(activity, null, mPanelManager); |
mPanel.setManagementDelegate(mContextualSearchManager); |
mContextualSearchManager.setContextualSearchPanel(mPanel); |
@@ -260,23 +286,41 @@ public class ContextualSearchTapEventTest extends ChromeActivityTestCaseBase<Chr |
*/ |
@SmallTest |
@Feature({"ContextualSearch"}) |
- @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
- public void testTextTapFollowedByNonTextTap() { |
+ @Restriction(Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
+ public void testLongpressFollowedByNonTextTap() { |
assertTrue(mPanelManager.getRequestPanelShowCount() == 0); |
// Fake a selection event. |
- mockTapText("text"); |
+ mockLongpressText("text"); |
- assertTrue(mPanelManager.getRequestPanelShowCount() == 1); |
- assertTrue(mPanelManager.getPanelHideCount() == 0); |
- assertTrue(mContextualSearchManager.getSelectionController().getSelectedText() |
- .equals("text")); |
+ assertThat(mPanelManager.getRequestPanelShowCount(), is(1)); |
+ assertThat(mPanelManager.getPanelHideCount(), is(0)); |
+ assertThat(mContextualSearchManager.getSelectionController().getSelectedText(), |
+ equalTo("text")); |
// Fake tap on non-text. |
mockTapEmptySpace(); |
- assertTrue(mPanelManager.getRequestPanelShowCount() == 1); |
- assertTrue(mPanelManager.getPanelHideCount() == 1); |
- assertTrue(mContextualSearchManager.getSelectionController().getSelectedText() == null); |
+ assertThat(mPanelManager.getRequestPanelShowCount(), is(1)); |
+ assertThat(mPanelManager.getPanelHideCount(), is(1)); |
+ assertNull(mContextualSearchManager.getSelectionController().getSelectedText()); |
+ } |
+ |
+ /** |
+ * Tests that a Tap gesture followed by tapping empty space closes the panel. |
+ */ |
+ @SmallTest |
+ @Feature({"ContextualSearch"}) |
+ @Restriction(Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
+ public void testTextTapFollowedByNonTextTap() { |
+ assertTrue(mPanelManager.getRequestPanelShowCount() == 0); |
+ |
+ // Fake a Tap event. |
+ mockTapText("text"); |
+ // Right now the tap-processing sequence will stall at selectWordAroundCaret, so we need |
+ // to prod it forward with a manual hack: |
+ mockSelectWordAroundCaretAck("text"); |
+ assertThat(mPanelManager.getRequestPanelShowCount(), is(1)); |
+ assertThat(mPanelManager.getPanelHideCount(), is(0)); |
} |
} |