Index: content/public/android/javatests/src/org/chromium/content/browser/InsertionHandleTest.java |
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/InsertionHandleTest.java b/content/public/android/javatests/src/org/chromium/content/browser/InsertionHandleTest.java |
deleted file mode 100644 |
index 4f519f0262a5f034b4d47d03386b3db5db96f8c2..0000000000000000000000000000000000000000 |
--- a/content/public/android/javatests/src/org/chromium/content/browser/InsertionHandleTest.java |
+++ /dev/null |
@@ -1,358 +0,0 @@ |
-// Copyright (c) 2012 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.content.browser; |
- |
-import android.content.ClipData; |
-import android.content.ClipboardManager; |
-import android.content.Context; |
-import android.graphics.Rect; |
-import android.test.suitebuilder.annotation.MediumTest; |
-import android.text.Editable; |
-import android.text.Selection; |
- |
-import org.chromium.base.test.util.DisabledTest; |
-import org.chromium.base.test.util.Feature; |
-import org.chromium.content.browser.test.util.Criteria; |
-import org.chromium.content.browser.test.util.CriteriaHelper; |
-import org.chromium.content.browser.test.util.DOMUtils; |
-import org.chromium.content.browser.test.util.TestCallbackHelperContainer; |
-import org.chromium.content.browser.test.util.TestTouchUtils; |
-import org.chromium.content.browser.test.util.TouchCommon; |
-import org.chromium.content_shell_apk.ContentShellTestBase; |
- |
-public class InsertionHandleTest extends ContentShellTestBase { |
- |
- private static final String TEXTAREA_FILENAME = |
- "content/insertion_handle/editable_long_text.html"; |
- private static final String TEXTAREA_ID = "textarea"; |
- private static final String INPUT_TEXT_FILENAME = "content/insertion_handle/input_text.html"; |
- private static final String INPUT_TEXT_ID = "input_text"; |
- // Offset to compensate for the fact that the handle is below the text. |
- private static final int VERTICAL_OFFSET = 10; |
- private static final int HANDLE_POSITION_TOLERANCE = 20; |
- private static final String PASTE_TEXT = "**test text to paste**"; |
- |
- // TODO(cjhopman): Due to http://crbug.com/179511, these tests must wait for the ContentViewCore |
- // to have the correct page scale factor (otherwise clicks will be sent to the wrong |
- // coordinates). This workaround should be removed when that bug is fixed. |
- private void assertWaitForPageScaleFactor(final float scale) throws InterruptedException { |
- assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { |
- @Override |
- public boolean isSatisfied() { |
- return getContentViewCore().getScale() == scale; |
- } |
- })); |
- } |
- |
- @Override |
- public void startActivityWithTestUrl(String filename) throws Throwable { |
- super.startActivityWithTestUrl(filename); |
- assertWaitForPageScaleFactor(1); |
- } |
- |
- /** |
- * @MediumTest |
- * @Feature({"TextSelection", "TextInput", "Main"}) |
- * http://crbug.com/169648 |
- */ |
- @DisabledTest |
- public void testUnselectHidesHandle() throws Throwable { |
- startActivityWithTestUrl(TEXTAREA_FILENAME); |
- clickNodeToShowInsertionHandle(TEXTAREA_ID); |
- |
- // Unselecting should cause the handle to disappear. |
- getImeAdapter().unselect(); |
- assertTrue(waitForHandleShowingEquals(false)); |
- } |
- |
- /** |
- * @MediumTest |
- * @Feature({"TextSelection", "TextInput", "Main"}) |
- * http://crbug.com/169648 |
- */ |
- @DisabledTest |
- public void testDragInsertionHandle() throws Throwable { |
- startActivityWithTestUrl(TEXTAREA_FILENAME); |
- |
- clickNodeToShowInsertionHandle(TEXTAREA_ID); |
- |
- InsertionHandleController ihc = getContentViewCore().getInsertionHandleControllerForTest(); |
- HandleView handle = ihc.getHandleViewForTest(); |
- |
- int initialX = handle.getPositionX(); |
- int initialY = handle.getPositionY(); |
- int dragToX = initialX + 120; |
- int dragToY = initialY + 120; |
- |
- dragHandleTo(dragToX, dragToY); |
- assertWaitForHandleNear(dragToX, dragToY); |
- } |
- |
- /** |
- * @MediumTest |
- * @Feature({"TextSelection", "TextInput"}) |
- * http://crbug.com/169648 |
- */ |
- @DisabledTest |
- public void testPasteAtInsertionHandle() throws Throwable { |
- startActivityWithTestUrl(TEXTAREA_FILENAME); |
- |
- clickNodeToShowInsertionHandle(TEXTAREA_ID); |
- |
- int offset = getSelectionStart(); |
- String initialText = getEditableText(); |
- |
- saveToClipboard(PASTE_TEXT); |
- pasteOnMainSync(); |
- |
- String expectedText = |
- initialText.substring(0, offset) + PASTE_TEXT + initialText.substring(offset); |
- assertTrue(waitForEditableTextEquals(expectedText)); |
- assertTrue(waitForHandleShowingEquals(false)); |
- } |
- |
- /** |
- * @MediumTest |
- * @Feature({"TextSelection", "TextInput", "Main"}) |
- * http://crbug.com/169648 |
- */ |
- @DisabledTest |
- public void testDragInsertionHandleInputText() throws Throwable { |
- startActivityWithTestUrl(INPUT_TEXT_FILENAME); |
- |
- clickNodeToShowInsertionHandle(INPUT_TEXT_ID); |
- |
- InsertionHandleController ihc = getContentViewCore().getInsertionHandleControllerForTest(); |
- HandleView handle = ihc.getHandleViewForTest(); |
- |
- int initialX = handle.getPositionX(); |
- int initialY = handle.getPositionY(); |
- int dragToX = initialX + 120; |
- int dragToY = initialY; |
- dragHandleTo(dragToX, dragToY); |
- assertWaitForHandleNear(dragToX, initialY); |
- |
- TestTouchUtils.sleepForDoubleTapTimeout(getInstrumentation()); |
- |
- initialX = handle.getPositionX(); |
- initialY = handle.getPositionY(); |
- dragToY = initialY + 120; |
- dragHandleTo(initialX, dragToY); |
- // Vertical drag should not change the y-position. |
- assertWaitForHandleNear(initialX, initialY); |
- } |
- |
- /** |
- * @MediumTest |
- * @Feature({"TextSelection", "TextInput", "Main"}) |
- * http://crbug.com/169648 |
- */ |
- @DisabledTest |
- public void testDragInsertionHandleInputTextOutsideBounds() throws Throwable { |
- startActivityWithTestUrl(INPUT_TEXT_FILENAME); |
- |
- clickNodeToShowInsertionHandle(INPUT_TEXT_ID); |
- |
- InsertionHandleController ihc = getContentViewCore().getInsertionHandleControllerForTest(); |
- HandleView handle = ihc.getHandleViewForTest(); |
- |
- int initialX = handle.getPositionX(); |
- int initialY = handle.getPositionY(); |
- int dragToX = initialX; |
- int dragToY = initialY + 150; |
- |
- // A vertical drag should not move the insertion handle. |
- dragHandleTo(dragToX, dragToY); |
- assertWaitForHandleNear(initialX, initialY); |
- |
- // The input box does not go to the edge of the screen, and neither should the insertion |
- // handle. |
- dragToX = getContentView().getWidth(); |
- dragHandleTo(dragToX, dragToY); |
- assertTrue(handle.getPositionX() < dragToX - 100); |
- } |
- |
- @Override |
- protected void tearDown() throws Exception { |
- super.tearDown(); |
- // No way to just clear clipboard, so setting to empty string instead. |
- saveToClipboard(""); |
- } |
- |
- private void clickNodeToShowInsertionHandle(String nodeId) throws Throwable { |
- // On the first click the keyboard will be displayed but no insertion handles. On the second |
- // click (only if it changes the selection), the insertion handle is displayed. So that the |
- // second click changes the selection, the two clicks should be in sufficiently different |
- // locations. |
- Rect nodeBounds = DOMUtils.getNodeBounds(getContentView(), |
- new TestCallbackHelperContainer(getContentView()), nodeId); |
- |
- RenderCoordinates renderCoordinates = getContentView().getRenderCoordinates(); |
- int offsetX = getContentView().getContentViewCore().getViewportSizeOffsetWidthPix(); |
- int offsetY = getContentView().getContentViewCore().getViewportSizeOffsetHeightPix(); |
- float left = renderCoordinates.fromLocalCssToPix(nodeBounds.left) + offsetX; |
- float right = renderCoordinates.fromLocalCssToPix(nodeBounds.right) + offsetX; |
- float top = renderCoordinates.fromLocalCssToPix(nodeBounds.top) + offsetY; |
- float bottom = renderCoordinates.fromLocalCssToPix(nodeBounds.bottom) + offsetY; |
- |
- TouchCommon touchCommon = new TouchCommon(this); |
- touchCommon.singleClickView(getContentView(), |
- (int)(left + 3 * (right - left) / 4), (int)(top + (bottom - top) / 2)); |
- |
- |
- TestTouchUtils.sleepForDoubleTapTimeout(getInstrumentation()); |
- assertTrue(waitForHasSelectionPosition()); |
- |
- // TODO(cjhopman): Wait for keyboard display finished? |
- touchCommon.singleClickView(getContentView(), |
- (int)(left + (right - left) / 4), (int)(top + (bottom - top) / 2)); |
- assertTrue(waitForHandleShowingEquals(true)); |
- assertTrue(waitForHandleViewStopped()); |
- } |
- |
- private boolean waitForHandleViewStopped() throws Throwable { |
- // If the polling interval is too short, slowly moving may be detected as not moving. |
- final int POLLING_INTERVAL = 200; |
- return CriteriaHelper.pollForCriteria(new Criteria() { |
- int mPositionX = -1; |
- int mPositionY = -1; |
- @Override |
- public boolean isSatisfied() { |
- int lastPositionX = mPositionX; |
- int lastPositionY = mPositionY; |
- InsertionHandleController ihc = |
- getContentViewCore().getInsertionHandleControllerForTest(); |
- HandleView handle = ihc.getHandleViewForTest(); |
- mPositionX = handle.getPositionX(); |
- mPositionY = handle.getPositionY(); |
- return !handle.isDragging() && |
- mPositionX == lastPositionX && mPositionY == lastPositionY; |
- } |
- }, CriteriaHelper.DEFAULT_MAX_TIME_TO_POLL, POLLING_INTERVAL); |
- } |
- |
- private boolean waitForEditableTextEquals(final String expectedText) |
- throws Throwable { |
- return CriteriaHelper.pollForCriteria(new Criteria() { |
- @Override |
- public boolean isSatisfied() { |
- return getEditableText().trim().equals(expectedText.trim()); |
- } |
- }); |
- } |
- |
- private boolean waitForHasSelectionPosition() |
- throws Throwable { |
- return CriteriaHelper.pollForCriteria(new Criteria() { |
- @Override |
- public boolean isSatisfied() { |
- int start = getSelectionStart(); |
- int end = getSelectionEnd(); |
- return start > 0 && start == end; |
- } |
- }); |
- } |
- |
- private void dragHandleTo(int dragToX, int dragToY, int steps) throws Throwable { |
- InsertionHandleController ihc = getContentViewCore().getInsertionHandleControllerForTest(); |
- HandleView handle = ihc.getHandleViewForTest(); |
- int initialX = handle.getPositionX(); |
- int initialY = handle.getPositionY(); |
- ContentView view = getContentView(); |
- |
- int fromLocation[] = TestTouchUtils.getAbsoluteLocationFromRelative(view, initialX, |
- initialY + VERTICAL_OFFSET); |
- int toLocation[] = TestTouchUtils.getAbsoluteLocationFromRelative(view, dragToX, |
- dragToY + VERTICAL_OFFSET); |
- |
- long downTime = TestTouchUtils.dragStart(getInstrumentation(), fromLocation[0], |
- fromLocation[1]); |
- assertWaitForHandleDraggingEquals(true); |
- TestTouchUtils.dragTo(getInstrumentation(), fromLocation[0], toLocation[0], |
- fromLocation[1], toLocation[1], steps, downTime); |
- TestTouchUtils.dragEnd(getInstrumentation(), toLocation[0], toLocation[1], downTime); |
- assertWaitForHandleDraggingEquals(false); |
- assertTrue(waitForHandleViewStopped()); |
- } |
- |
- private void dragHandleTo(int dragToX, int dragToY) throws Throwable { |
- dragHandleTo(dragToX, dragToY, 5); |
- } |
- |
- private void assertWaitForHandleDraggingEquals(final boolean expected) throws Throwable { |
- InsertionHandleController ihc = getContentViewCore().getInsertionHandleControllerForTest(); |
- final HandleView handle = ihc.getHandleViewForTest(); |
- assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { |
- @Override |
- public boolean isSatisfied() { |
- return handle.isDragging() == expected; |
- } |
- })); |
- } |
- |
- private static boolean isHandleNear(HandleView handle, int x, int y) { |
- return (Math.abs(handle.getPositionX() - x) < HANDLE_POSITION_TOLERANCE) && |
- (Math.abs(handle.getPositionY() - VERTICAL_OFFSET - y) < HANDLE_POSITION_TOLERANCE); |
- } |
- |
- private void assertWaitForHandleNear(final int x, final int y) throws Throwable { |
- InsertionHandleController ihc = getContentViewCore().getInsertionHandleControllerForTest(); |
- final HandleView handle = ihc.getHandleViewForTest(); |
- assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { |
- @Override |
- public boolean isSatisfied() { |
- return isHandleNear(handle, x, y); |
- } |
- })); |
- } |
- |
- private boolean waitForHandleShowingEquals(final boolean shouldBeShowing) |
- throws Throwable { |
- return CriteriaHelper.pollForCriteria(new Criteria() { |
- @Override |
- public boolean isSatisfied() { |
- InsertionHandleController ihc = |
- getContentViewCore().getInsertionHandleControllerForTest(); |
- boolean isShowing = ihc != null && ihc.isShowing(); |
- return isShowing == shouldBeShowing; |
- } |
- }); |
- } |
- |
- private void pasteOnMainSync() { |
- getInstrumentation().runOnMainSync(new Runnable() { |
- @Override |
- public void run() { |
- getContentViewCore().getInsertionHandleControllerForTest().paste(); |
- } |
- }); |
- } |
- |
- private int getSelectionStart() { |
- return Selection.getSelectionStart(getEditable()); |
- } |
- |
- private int getSelectionEnd() { |
- return Selection.getSelectionEnd(getEditable()); |
- } |
- |
- private Editable getEditable() { |
- return getContentViewCore().getEditableForTest(); |
- } |
- |
- private String getEditableText() { |
- return getEditable().toString(); |
- } |
- |
- private void saveToClipboard(String text) { |
- ClipboardManager clipMgr = |
- (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); |
- clipMgr.setPrimaryClip(ClipData.newPlainText(null, text)); |
- } |
- |
- private ImeAdapter getImeAdapter() { |
- return getContentViewCore().getImeAdapterForTest(); |
- } |
-} |