Index: content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleUnitTest.java |
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleUnitTest.java b/content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleUnitTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6340d9fcbf11cfb735e4c37d555351bab867283e |
--- /dev/null |
+++ b/content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleUnitTest.java |
@@ -0,0 +1,235 @@ |
+// Copyright 2013 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.input; |
+ |
+import android.content.Context; |
+import android.test.AndroidTestCase; |
+import android.test.suitebuilder.annotation.SmallTest; |
+import android.view.View; |
+ |
+import java.util.HashSet; |
+ |
+import org.chromium.base.test.util.Feature; |
+import org.chromium.content.browser.PositionObserverInterface; |
+ |
+/** |
+ * Test suite for Selection handles. |
+ */ |
+public class SelectionHandleUnitTest extends AndroidTestCase { |
+ public class FakeHandleViewDelegate implements HandleView.Delegate { |
+ public Context getContext() { |
+ return SelectionHandleUnitTest.this.getContext(); |
+ } |
+ |
+ public boolean isPositionVisible(int x, int y) { |
+ return true; |
+ } |
+ |
+ public void dismissContainer() { |
+ } |
+ |
+ public boolean isContainerShowing() { |
+ return true; |
+ } |
+ |
+ public void showContainerAtPosition(View view, int x, int y) { |
+ mContainerPositionX = x; |
+ mContainerPositionY = y; |
+ } |
+ |
+ public void updateContainerPosition(int x, int y, int width, int height) { |
+ mContainerPositionX = x; |
+ mContainerPositionY = y; |
+ } |
+ |
+ public int getPositionX() { |
+ return mContainerPositionX; |
Ted C
2013/10/10 18:16:32
indent is off
|
+ } |
+ |
+ public int getPositionY() { |
+ return mContainerPositionY; |
Ted C
2013/10/10 18:16:32
here too
|
+ } |
+ |
+ private int mContainerPositionX; |
Ted C
2013/10/10 18:16:32
member variables at the top
|
+ private int mContainerPositionY; |
+ } |
+ |
+ public class FakePositionObserver implements PositionObserverInterface { |
+ FakePositionObserver() { |
+ mListeners = new HashSet<Listener>(); |
+ } |
+ |
+ public int getPositionX() { |
+ return mX; |
+ } |
+ |
+ public int getPositionY() { |
+ return mY; |
+ } |
+ |
+ public void addListener(Listener listener) { |
+ mListeners.add(listener); |
+ } |
+ |
+ public void removeListener(Listener listener) { |
+ mListeners.remove(listener); |
+ } |
+ |
+ public void moveTo(int x, int y) { |
+ mX = x; |
+ mY = y; |
+ for (Listener l : mListeners) { |
+ l.onPositionChanged(x, y); |
+ } |
+ } |
+ |
+ private int mX; |
Ted C
2013/10/10 18:16:32
same
|
+ private int mY; |
+ private HashSet<Listener> mListeners; |
+ } |
+ |
+ private interface SelectBetweenCoordinatesCallback { |
+ public void Run(int x1, int y1, int x2, int y2); |
+ } |
+ |
+ @Override |
+ public void setUp() throws Exception { |
+ super.setUp(); |
+ mFakePositionObserver = new FakePositionObserver(); |
+ mStartHandleDelegate = new FakeHandleViewDelegate(); |
+ mEndHandleDelegate = new FakeHandleViewDelegate(); |
+ mSelectBetweenCoordinatesCallback = null; |
+ mController = new SelectionHandleController( |
+ mStartHandleDelegate, mEndHandleDelegate, mFakePositionObserver) { |
+ @Override |
+ public void selectBetweenCoordinates(int x1, int y1, int x2, int y2) { |
+ if (mSelectBetweenCoordinatesCallback != null) { |
+ mSelectBetweenCoordinatesCallback.Run(x1, y1, x2, y2); |
+ } |
+ } |
+ }; |
+ } |
+ |
+ /** |
+ * Verifies that selection handles are shown when selection changes if allowAutomaticShowing |
+ * has been called and that they are not shown if hideAndDisallowAutomaticShowing was called. |
+ * |
+ * Also verifies that they are shown at the expected position. |
+ */ |
+ @SmallTest |
+ @Feature({ "TextSelection" }) |
+ public void testShowSelectionHandles() throws Throwable { |
+ mController.hideAndDisallowAutomaticShowing(); |
+ assertFalse(mController.isShowing()); |
+ |
+ int startHandleX = 10; |
+ int startHandleY = 20; |
+ int endHandleX = 30; |
+ int endHandleY = 40; |
+ |
+ mController.onSelectionChanged(1, 1); |
+ assertFalse(mController.isShowing()); |
+ |
+ mController.allowAutomaticShowing(); |
+ mController.onSelectionChanged(1, 1); |
+ assertTrue(mController.isShowing()); |
+ |
+ mController.setStartHandlePosition(startHandleX, startHandleY); |
+ mController.setEndHandlePosition(endHandleX, endHandleY); |
+ |
+ assertEquals(startHandleX, getStartHandlePositionX()); |
+ assertEquals(startHandleY, getStartHandlePositionY()); |
+ assertEquals(endHandleX, getEndHandlePositionX()); |
+ assertEquals(endHandleY, getEndHandlePositionY()); |
+ } |
+ |
+ /** |
+ * Verifies that the selection handle positions are updated as expected when the observed |
+ * position (i.e. of the containing view) is changed. |
+ */ |
+ @SmallTest |
+ @Feature({ "TextSelection" }) |
+ public void testMoveSelectionHandleContainer() throws Throwable { |
+ mController.allowAutomaticShowing(); |
+ |
+ int startHandleX = 10; |
+ int startHandleY = 20; |
+ int endHandleX = 30; |
+ int endHandleY = 40; |
+ |
+ mController.onSelectionChanged(1, 1); |
+ mController.setStartHandlePosition(startHandleX, startHandleY); |
+ mController.setEndHandlePosition(endHandleX, endHandleY); |
+ |
+ assertTrue(mController.isShowing()); |
+ |
+ int containerPositionX = 0; |
+ int containerPositionY = 0; |
+ |
+ int previousStartHandleDelegatePositionX = mStartHandleDelegate.getPositionX(); |
+ int previousStartHandleDelegatePositionY = mStartHandleDelegate.getPositionY(); |
+ int previousEndHandleDelegatePositionX = mEndHandleDelegate.getPositionX(); |
+ int previousEndHandleDelegatePositionY = mEndHandleDelegate.getPositionY(); |
+ |
+ assertEquals(startHandleX, getStartHandlePositionX()); |
+ assertEquals(startHandleY, getStartHandlePositionY()); |
+ assertEquals(endHandleX, getEndHandlePositionX()); |
+ assertEquals(endHandleY, getEndHandlePositionY()); |
+ |
+ containerPositionX = 20; |
+ containerPositionY = 30; |
+ |
+ mFakePositionObserver.moveTo(containerPositionX, containerPositionY); |
+ |
+ assertEquals(startHandleX + containerPositionX, getStartHandlePositionX()); |
+ assertEquals(startHandleY + containerPositionY, getStartHandlePositionY()); |
+ assertEquals(endHandleX + containerPositionX, getEndHandlePositionX()); |
+ assertEquals(endHandleY + containerPositionY, getEndHandlePositionY()); |
+ |
+ |
+ // Check that the handle has updated the position of the container in the delegate by the |
+ // movement in the position observer. |
+ assertEquals(previousStartHandleDelegatePositionX + containerPositionX, |
+ mStartHandleDelegate.getPositionX()); |
Ted C
2013/10/10 18:16:32
+4 indent on all of these
|
+ assertEquals(previousStartHandleDelegatePositionY + containerPositionY, |
+ mStartHandleDelegate.getPositionY()); |
+ assertEquals(previousEndHandleDelegatePositionX + containerPositionX, |
+ mEndHandleDelegate.getPositionX()); |
+ assertEquals(previousEndHandleDelegatePositionY + containerPositionY, |
+ mEndHandleDelegate.getPositionY()); |
+ } |
+ |
+ private int getStartHandlePositionX() { |
+ return getStartHandle().getRootViewRelativePositionX(); |
Ted C
2013/10/10 18:16:32
the next 4 methods need an extra +2 indent on thei
|
+ } |
+ |
+ private int getStartHandlePositionY() { |
+ return getStartHandle().getRootViewRelativePositionY(); |
+ } |
+ |
+ private int getEndHandlePositionX() { |
+ return getEndHandle().getRootViewRelativePositionX(); |
+ } |
+ |
+ private int getEndHandlePositionY() { |
+ return getEndHandle().getRootViewRelativePositionY(); |
+ } |
+ |
+ private HandleView getStartHandle() { |
+ return mController.getStartHandleViewForTest(); |
+ } |
+ |
+ private HandleView getEndHandle() { |
+ return mController.getEndHandleViewForTest(); |
+ } |
+ |
+ private SelectBetweenCoordinatesCallback mSelectBetweenCoordinatesCallback; |
+ private FakePositionObserver mFakePositionObserver; |
Ted C
2013/10/10 18:16:32
to the top here as well
|
+ private FakeHandleViewDelegate mStartHandleDelegate; |
+ private FakeHandleViewDelegate mEndHandleDelegate; |
+ private SelectionHandleController mController; |
+ |
+} |
+ |