Index: content/public/android/javatests/src/org/chromium/content/browser/input/AdapterInputConnectionTest.java |
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/AdapterInputConnectionTest.java b/content/public/android/javatests/src/org/chromium/content/browser/input/AdapterInputConnectionTest.java |
index 83e22feb771e3ea40800ee67eb503e731e3d1e74..a57f5ec71138802bd4e5bed990f458df0ad971bf 100644 |
--- a/content/public/android/javatests/src/org/chromium/content/browser/input/AdapterInputConnectionTest.java |
+++ b/content/public/android/javatests/src/org/chromium/content/browser/input/AdapterInputConnectionTest.java |
@@ -9,6 +9,8 @@ import android.os.IBinder; |
import android.os.ResultReceiver; |
import android.test.suitebuilder.annotation.MediumTest; |
import android.text.Editable; |
+import android.text.Selection; |
+import android.view.KeyEvent; |
import android.view.View; |
import android.view.inputmethod.EditorInfo; |
@@ -27,6 +29,7 @@ public class AdapterInputConnectionTest extends ContentShellTestBase { |
private AdapterInputConnection mConnection; |
private TestInputMethodManagerWrapper mWrapper; |
private Editable mEditable; |
+ private TestImeAdapter mImeAdapter; |
@Override |
public void setUp() throws Exception { |
@@ -35,11 +38,11 @@ public class AdapterInputConnectionTest extends ContentShellTestBase { |
assertTrue("Page failed to load", waitForActiveShellToBeDoneLoading()); |
mWrapper = new TestInputMethodManagerWrapper(getActivity()); |
ImeAdapterDelegate delegate = new TestImeAdapterDelegate(); |
- ImeAdapter imeAdapter = new TestImeAdapter(mWrapper, delegate); |
+ mImeAdapter = new TestImeAdapter(mWrapper, delegate); |
EditorInfo info = new EditorInfo(); |
mEditable = Editable.Factory.getInstance().newEditable(""); |
mConnection = new AdapterInputConnection( |
- getContentViewCore().getContainerView(), imeAdapter, mEditable, info); |
+ getContentViewCore().getContainerView(), mImeAdapter, mEditable, info); |
} |
@MediumTest |
@@ -82,10 +85,59 @@ public class AdapterInputConnectionTest extends ContentShellTestBase { |
mWrapper.verifyUpdateSelectionCall(0, 4, 4, 0 ,4); |
} |
+ @MediumTest |
+ @Feature({"TextInput", "Main"}) |
+ public void testDeleteSurroundingText() throws Throwable { |
+ // Tests back deletion of a single character with empty input. |
+ mConnection.deleteSurroundingText(1, 0); |
+ assertEquals(0, mImeAdapter.getDeleteSurroundingTextCallCount()); |
+ Integer[] keyEvents = mImeAdapter.getKeyEvents(); |
+ assertEquals(1, keyEvents.length); |
+ assertEquals(KeyEvent.KEYCODE_DEL, keyEvents[0].intValue()); |
+ |
+ // Tests forward deletion of a single character with non-empty input. |
+ mEditable.replace(0, mEditable.length(), " hello"); |
+ Selection.setSelection(mEditable, 0, 0); |
+ mConnection.deleteSurroundingText(0, 1); |
+ assertEquals(0, mImeAdapter.getDeleteSurroundingTextCallCount()); |
+ keyEvents = mImeAdapter.getKeyEvents(); |
+ assertEquals(2, keyEvents.length); |
+ assertEquals(KeyEvent.KEYCODE_FORWARD_DEL, keyEvents[1].intValue()); |
+ |
+ // Tests back deletion of multiple characters with non-empty input. |
+ mEditable.replace(0, mEditable.length(), "hello "); |
+ Selection.setSelection(mEditable, mEditable.length(), mEditable.length()); |
+ mConnection.deleteSurroundingText(2, 0); |
+ assertEquals(1, mImeAdapter.getDeleteSurroundingTextCallCount()); |
+ assertEquals(2, mImeAdapter.getKeyEvents().length); |
+ } |
+ |
private static class TestImeAdapter extends ImeAdapter { |
+ private final ArrayList<Integer> mKeyEventQueue = new ArrayList<Integer>(); |
+ private int mDeleteSurroundingTextCounter; |
+ |
public TestImeAdapter(InputMethodManagerWrapper wrapper, ImeAdapterDelegate embedder) { |
super(wrapper, embedder); |
} |
+ |
+ @Override |
+ public boolean deleteSurroundingText(int beforeLength, int afterLength) { |
+ ++mDeleteSurroundingTextCounter; |
+ return true; |
+ } |
+ |
+ @Override |
+ public void sendKeyEventWithKeyCode(int keyCode, int flags) { |
+ mKeyEventQueue.add(keyCode); |
+ } |
+ |
+ public int getDeleteSurroundingTextCallCount() { |
+ return mDeleteSurroundingTextCounter; |
+ } |
+ |
+ public Integer[] getKeyEvents() { |
+ return mKeyEventQueue.toArray(new Integer[mKeyEventQueue.size()]); |
+ } |
} |
private static class TestInputMethodManagerWrapper extends InputMethodManagerWrapper { |