| Index: content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleTest.java
|
| diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleTest.java b/content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleTest.java
|
| index 08dc1d48a23359bc5a0772bc07862c7dcea2ce14..baaf1aa5e42a662876e3d679cc32f909ecc4c272 100644
|
| --- a/content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleTest.java
|
| +++ b/content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleTest.java
|
| @@ -5,6 +5,7 @@
|
| package org.chromium.content.browser.input;
|
|
|
| import android.graphics.Point;
|
| +import android.graphics.PointF;
|
| import android.graphics.Rect;
|
| import android.os.SystemClock;
|
| import android.test.FlakyTest;
|
| @@ -29,6 +30,10 @@ import org.chromium.content_shell_apk.ContentShellTestBase;
|
|
|
| import java.util.concurrent.Callable;
|
|
|
| +/**
|
| + * Tests for the selection handles that allow to select text in both editable and non-editable
|
| + * elements.
|
| + */
|
| public class SelectionHandleTest extends ContentShellTestBase {
|
| private static final String META_DISABLE_ZOOM =
|
| "<meta name=\"viewport\" content=\"" +
|
| @@ -152,6 +157,76 @@ public class SelectionHandleTest extends ContentShellTestBase {
|
| doSelectionHandleTest(TestPageType.EDITABLE);
|
| }
|
|
|
| + /**
|
| + * Verifies that the visibility of handles is correct when visible clipping
|
| + * rectangle is set.
|
| + */
|
| + @MediumTest
|
| + @Feature({ "TextSelection" })
|
| + public void testEditableSelectionHandlesStartNotVisibleEndVisible() throws Throwable {
|
| + doSelectionHandleTestVisibility(TestPageType.EDITABLE, false, true, new PointF(.5f, .5f),
|
| + new PointF(0,1));
|
| + }
|
| +
|
| + @MediumTest
|
| + @Feature({ "TextSelection" })
|
| + public void testEditableSelectionHandlesStartVisibleEndNotVisible() throws Throwable {
|
| + doSelectionHandleTestVisibility(TestPageType.EDITABLE, true, false, new PointF(1,0),
|
| + new PointF(.5f, .5f));
|
| + }
|
| +
|
| + @MediumTest
|
| + @Feature({ "TextSelection" })
|
| + public void testEditableSelectionHandlesStartVisibleEndVisible() throws Throwable {
|
| + doSelectionHandleTestVisibility(TestPageType.EDITABLE, true, true, new PointF(1, 0),
|
| + new PointF(0,1));
|
| + }
|
| +
|
| + @MediumTest
|
| + @Feature({ "TextSelection" })
|
| + public void testEditableSelectionHandlesStartNotVisibleEndNotVisible() throws Throwable {
|
| + doSelectionHandleTestVisibility(TestPageType.EDITABLE, false, false, new PointF(1,0),
|
| + new PointF(1, 0));
|
| + }
|
| +
|
| + private void doSelectionHandleTestVisibility(TestPageType pageType,
|
| + boolean startHandleVisible, boolean endHandleVisible,
|
| + PointF affineTopLeft, PointF affineBottomRight) throws Throwable {
|
| + launchWithUrl(pageType.dataUrl);
|
| +
|
| + clickNodeToShowSelectionHandles(pageType.nodeId);
|
| + assertWaitForSelectionEditableEquals(pageType.selectionShouldBeEditable);
|
| +
|
| + HandleView startHandle = getStartHandle();
|
| + HandleView endHandle = getEndHandle();
|
| +
|
| + Rect nodeWindowBounds = getNodeBoundsPix(pageType.nodeId);
|
| +
|
| + int visibleBoundsLeftX = Math.round(affineTopLeft.x * nodeWindowBounds.left
|
| + + affineTopLeft.y * nodeWindowBounds.right);
|
| + int visibleBoundsTopY = Math.round(affineTopLeft.x * nodeWindowBounds.top
|
| + + affineTopLeft.y * nodeWindowBounds.bottom);
|
| +
|
| + int visibleBoundsRightX = Math.round(affineBottomRight.x * nodeWindowBounds.left
|
| + + affineBottomRight.y * nodeWindowBounds.right);
|
| + int visibleBoundsBottomY = Math.round(affineBottomRight.x * nodeWindowBounds.top
|
| + + affineBottomRight.y * nodeWindowBounds.bottom);
|
| +
|
| + getContentViewCore().getSelectionHandleControllerForTest().setVisibleClippingRectangle(
|
| + visibleBoundsLeftX, visibleBoundsTopY, visibleBoundsRightX, visibleBoundsBottomY);
|
| +
|
| + int leftX = (nodeWindowBounds.left + nodeWindowBounds.centerX()) / 2;
|
| + int rightX = (nodeWindowBounds.right + nodeWindowBounds.centerX()) / 2;
|
| +
|
| + int topY = (nodeWindowBounds.top + nodeWindowBounds.centerY()) / 2;
|
| + int bottomY = (nodeWindowBounds.bottom + nodeWindowBounds.centerY()) / 2;
|
| +
|
| + dragHandleAndCheckSelectionChange(startHandle, leftX, topY, -1, 0, startHandleVisible);
|
| + dragHandleAndCheckSelectionChange(endHandle, rightX, bottomY, 0, 1, endHandleVisible);
|
| +
|
| + clickToDismissHandles();
|
| + }
|
| +
|
| private void doSelectionHandleTest(TestPageType pageType) throws Throwable {
|
| launchWithUrl(pageType.dataUrl);
|
|
|
| @@ -172,23 +247,25 @@ public class SelectionHandleTest extends ContentShellTestBase {
|
| int bottomY = (nodeWindowBounds.bottom + nodeWindowBounds.centerY()) / 2;
|
|
|
| // Drag start handle up and to the left. The selection start should decrease.
|
| - dragHandleAndCheckSelectionChange(startHandle, leftX, topY, -1, 0);
|
| + dragHandleAndCheckSelectionChange(startHandle, leftX, topY, -1, 0, true);
|
| // Drag end handle down and to the right. The selection end should increase.
|
| - dragHandleAndCheckSelectionChange(endHandle, rightX, bottomY, 0, 1);
|
| + dragHandleAndCheckSelectionChange(endHandle, rightX, bottomY, 0, 1, true);
|
| // Drag start handle back to the middle. The selection start should increase.
|
| - dragHandleAndCheckSelectionChange(startHandle, centerX, centerY, 1, 0);
|
| + dragHandleAndCheckSelectionChange(startHandle, centerX, centerY, 1, 0, true);
|
| // Drag end handle up and to the left past the start handle. Both selection start and end
|
| // should decrease.
|
| - dragHandleAndCheckSelectionChange(endHandle, leftX, topY, -1, -1);
|
| + dragHandleAndCheckSelectionChange(endHandle, leftX, topY, -1, -1, true);
|
| // Drag start handle down and to the right past the end handle. Both selection start and end
|
| // should increase.
|
| - dragHandleAndCheckSelectionChange(startHandle, rightX, bottomY, 1, 1);
|
| + dragHandleAndCheckSelectionChange(startHandle, rightX, bottomY, 1, 1, true);
|
|
|
| clickToDismissHandles();
|
| }
|
|
|
| - private void dragHandleAndCheckSelectionChange(HandleView handle, int dragToX, int dragToY,
|
| - final int expectedStartChange, final int expectedEndChange) throws Throwable {
|
| + private void dragHandleAndCheckSelectionChange(final HandleView handle,
|
| + final int dragToX, final int dragToY,
|
| + final int expectedStartChange, final int expectedEndChange,
|
| + final boolean expectedHandleVisible) throws Throwable {
|
| String initialText = getContentViewCore().getSelectedText();
|
| final int initialSelectionEnd = getSelectionEnd();
|
| final int initialSelectionStart = getSelectionStart();
|
| @@ -212,6 +289,8 @@ public class SelectionHandleTest extends ContentShellTestBase {
|
| if ((int) Math.signum(endChange) != expectedEndChange) return false;
|
| }
|
|
|
| + if (expectedHandleVisible != handle.isPositionVisible()) return false;
|
| +
|
| return true;
|
| }
|
| }));
|
|
|