More tests for BaseInputConnection.
As a preparation work for Bug 6526420, where we are going to
introduce a new variant of IC#deleteSurroundingText(), this CL attempts
to improve the test coverage of
BaseInputConnection#deleteSurroundingText().
Bug: 6526420
Change-Id: Ibb8edb7b9764e52e71677ae8d8cdefdbf3321a28
diff --git a/tests/tests/view/src/android/view/inputmethod/cts/BaseInputConnectionTest.java b/tests/tests/view/src/android/view/inputmethod/cts/BaseInputConnectionTest.java
index 69659a2..55b5c75 100644
--- a/tests/tests/view/src/android/view/inputmethod/cts/BaseInputConnectionTest.java
+++ b/tests/tests/view/src/android/view/inputmethod/cts/BaseInputConnectionTest.java
@@ -16,15 +16,13 @@
package android.view.inputmethod.cts;
-import android.view.cts.R;
-
-
import android.app.Instrumentation;
import android.content.Context;
import android.cts.util.PollingCheck;
import android.os.Bundle;
import android.test.ActivityInstrumentationTestCase2;
import android.text.Editable;
+import android.text.Selection;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
@@ -32,6 +30,7 @@
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
+import android.view.cts.R;
import android.view.inputmethod.BaseInputConnection;
import android.view.inputmethod.CompletionInfo;
import android.view.inputmethod.ExtractedTextRequest;
@@ -163,7 +162,7 @@
}.run();
assertEquals(0, dummyConnection.getCursorCapsMode(TextUtils.CAP_MODE_WORDS));
- // Test deleteSurroudingText
+ // Test deleteSurroundingText
int end = text2.length();
mConnection.setSelection(end, end);
// Delete the ending space
@@ -256,4 +255,240 @@
mConnection.reportFullscreenMode(true);
assertTrue(imManager.isFullscreenMode());
}
+
+ /**
+ * An utility method to create an instance of {@link BaseInputConnection} in dummy mode with
+ * an initial text and selection range.
+ * @param view the {@link View} to be associated with the {@link BaseInputConnection}.
+ * @param source the initial text.
+ * @param selectionStart the initial selection start index.
+ * @param selectionEnd the initial selection end index.
+ * @return {@link BaseInputConnection} instantiated in dummy mode with {@code source} and
+ * selection range from {@code selectionStart} to {@code selectionEnd}
+ */
+ private static BaseInputConnection createDummyConnectionWithSelection(
+ final View view, final CharSequence source, final int selectionStart,
+ final int selectionEnd) {
+ final Editable editable = Editable.Factory.getInstance().newEditable(source);
+ Selection.setSelection(editable, selectionStart, selectionEnd);
+ return new BaseInputConnection(view, false) {
+ @Override
+ public Editable getEditable() {
+ return editable;
+ }
+ };
+ }
+
+ /**
+ * Tests {@link BaseInputConnection#deleteSurroundingText(int, int)} comprehensively.
+ */
+ public void testDeleteSurroundingText() throws Throwable {
+ // For text "012[]3456789", calling deleteSurroundingText(0, 0) must produce "012[]3456789",
+ // where '[' and ']' indicate the text selection range.
+ {
+ final BaseInputConnection dummyConnection = createDummyConnectionWithSelection(
+ mView, "0123456789", 3, 3);
+
+ dummyConnection.deleteSurroundingText(0, 0);
+ assertEquals("012", dummyConnection.getTextBeforeCursor(10, 0).toString());
+ assertTrue(TextUtils.isEmpty(dummyConnection.getSelectedText(0))); // null is allowed.
+ assertEquals("3456789", dummyConnection.getTextAfterCursor(10, 0).toString());
+ assertEquals("0123456789", dummyConnection.getEditable().toString());
+ }
+
+ // For text "012[]3456789", calling deleteSurroundingText(-1, -1) must produce
+ // "012[]3456789", where '[' and ']' indicate the text selection range.
+ {
+ final BaseInputConnection dummyConnection = createDummyConnectionWithSelection(
+ mView, "0123456789", 3, 3);
+
+ dummyConnection.deleteSurroundingText(-1, -1);
+ assertEquals("012", dummyConnection.getTextBeforeCursor(10, 0).toString());
+ assertTrue(TextUtils.isEmpty(dummyConnection.getSelectedText(0))); // null is allowed.
+ assertEquals("3456789", dummyConnection.getTextAfterCursor(10, 0).toString());
+ assertEquals("0123456789", dummyConnection.getEditable().toString());
+ }
+
+ // For text "012[]3456789", calling deleteSurroundingText(1, 2) must produce
+ // "01[]56789", where '[' and ']' indicate the text selection range.
+ {
+ final BaseInputConnection dummyConnection = createDummyConnectionWithSelection(
+ mView, "0123456789", 3, 3);
+
+ dummyConnection.deleteSurroundingText(1, 2);
+ assertEquals("01", dummyConnection.getTextBeforeCursor(10, 0).toString());
+ assertTrue(TextUtils.isEmpty(dummyConnection.getSelectedText(0))); // null is allowed.
+ assertEquals("56789", dummyConnection.getTextAfterCursor(10, 0).toString());
+ assertEquals("0156789", dummyConnection.getEditable().toString());
+ }
+
+ // For text "012[]3456789", calling deleteSurroundingText(10, 1) must produce "[]456789",
+ // where '[' and ']' indicate the text selection range.
+ {
+ final BaseInputConnection dummyConnection = createDummyConnectionWithSelection(
+ mView, "0123456789", 3, 3);
+
+ assertTrue(dummyConnection.deleteSurroundingText(10, 1));
+ assertEquals("", dummyConnection.getTextBeforeCursor(10, 0).toString());
+ assertTrue(TextUtils.isEmpty(dummyConnection.getSelectedText(0))); // null is allowed.
+ assertEquals("456789", dummyConnection.getTextAfterCursor(10, 0).toString());
+ assertEquals("456789", dummyConnection.getEditable().toString());
+ }
+
+ // For text "012[]3456789", calling deleteSurroundingText(1, 10) must produce "01[]",
+ // where '[' and ']' indicate the text selection range.
+ {
+ final BaseInputConnection dummyConnection = createDummyConnectionWithSelection(
+ mView, "0123456789", 3, 3);
+
+ assertTrue(dummyConnection.deleteSurroundingText(1, 10));
+ assertEquals("01", dummyConnection.getTextBeforeCursor(10, 0).toString());
+ assertTrue(TextUtils.isEmpty(dummyConnection.getSelectedText(0))); // null is allowed.
+ assertEquals("", dummyConnection.getTextAfterCursor(10, 0).toString());
+ assertEquals("01", dummyConnection.getEditable().toString());
+ }
+
+ // For text "[]0123456789", calling deleteSurroundingText(3, 3) must produce "[]3456789",
+ // where '[' and ']' indicate the text selection range.
+ {
+ final BaseInputConnection dummyConnection = createDummyConnectionWithSelection(
+ mView, "0123456789", 0, 0);
+
+ assertTrue(dummyConnection.deleteSurroundingText(3, 3));
+ assertEquals("", dummyConnection.getTextBeforeCursor(10, 0).toString());
+ assertTrue(TextUtils.isEmpty(dummyConnection.getSelectedText(0))); // null is allowed.
+ assertEquals("3456789", dummyConnection.getTextAfterCursor(10, 0).toString());
+ assertEquals("3456789", dummyConnection.getEditable().toString());
+ }
+
+ // For text "0123456789[]", calling deleteSurroundingText(3, 3) must produce "0123456[]",
+ // where '[' and ']' indicate the text selection range.
+ {
+ final BaseInputConnection dummyConnection = createDummyConnectionWithSelection(
+ mView, "0123456789", 10, 10);
+
+ assertTrue(dummyConnection.deleteSurroundingText(3, 3));
+ assertEquals("0123456", dummyConnection.getTextBeforeCursor(10, 0).toString());
+ assertTrue(TextUtils.isEmpty(dummyConnection.getSelectedText(0))); // null is allowed.
+ assertEquals("", dummyConnection.getTextAfterCursor(10, 0).toString());
+ assertEquals("0123456", dummyConnection.getEditable().toString());
+ }
+
+ // For text "012[345]6789", calling deleteSurroundingText(0, 0) must produce "012[345]6789",
+ // where '[' and ']' indicate the text selection range.
+ {
+ final BaseInputConnection dummyConnection = createDummyConnectionWithSelection(
+ mView, "0123456789", 3, 6);
+
+ dummyConnection.deleteSurroundingText(0, 0);
+ assertEquals("012", dummyConnection.getTextBeforeCursor(10, 0).toString());
+ assertEquals("345", dummyConnection.getSelectedText(0).toString());
+ assertEquals("6789", dummyConnection.getTextAfterCursor(10, 0).toString());
+ assertEquals("0123456789", dummyConnection.getEditable().toString());
+ }
+
+ // For text "012[345]6789", calling deleteSurroundingText(-1, -1) must produce
+ // "012[345]6789", where '[' and ']' indicate the text selection range.
+ {
+ final BaseInputConnection dummyConnection = createDummyConnectionWithSelection(
+ mView, "0123456789", 3, 6);
+
+ dummyConnection.deleteSurroundingText(-1, -1);
+ assertEquals("012", dummyConnection.getTextBeforeCursor(10, 0).toString());
+ assertEquals("345", dummyConnection.getSelectedText(0).toString());
+ assertEquals("6789", dummyConnection.getTextAfterCursor(10, 0).toString());
+ assertEquals("0123456789", dummyConnection.getEditable().toString());
+ }
+
+ // For text "012[345]6789", calling deleteSurroundingText(1, 2) must produce
+ // "01[345]89", where '[' and ']' indicate the text selection range.
+ {
+ final BaseInputConnection dummyConnection = createDummyConnectionWithSelection(
+ mView, "0123456789", 3, 6);
+
+ dummyConnection.deleteSurroundingText(1, 2);
+ assertEquals("01", dummyConnection.getTextBeforeCursor(10, 0).toString());
+ assertEquals("345", dummyConnection.getSelectedText(0).toString());
+ assertEquals("89", dummyConnection.getTextAfterCursor(10, 0).toString());
+ assertEquals("0134589", dummyConnection.getEditable().toString());
+ }
+
+ // For text "012[345]6789", calling deleteSurroundingText(10, 1) must produce
+ // "[345]789", where '[' and ']' indicate the text selection range.
+ {
+ final BaseInputConnection dummyConnection = createDummyConnectionWithSelection(
+ mView, "0123456789", 3, 6);
+
+ dummyConnection.deleteSurroundingText(10, 1);
+ assertEquals("", dummyConnection.getTextBeforeCursor(10, 0).toString());
+ assertEquals("345", dummyConnection.getSelectedText(0).toString());
+ assertEquals("789", dummyConnection.getTextAfterCursor(10, 0).toString());
+ assertEquals("345789", dummyConnection.getEditable().toString());
+ }
+
+ // For text "012[345]6789", calling deleteSurroundingText(1, 10) must produce
+ // "[345]789", where '[' and ']' indicate the text selection range.
+ {
+ final BaseInputConnection dummyConnection = createDummyConnectionWithSelection(
+ mView, "0123456789", 3, 6);
+
+ dummyConnection.deleteSurroundingText(1, 10);
+ assertEquals("01", dummyConnection.getTextBeforeCursor(10, 0).toString());
+ assertEquals("345", dummyConnection.getSelectedText(0).toString());
+ assertEquals("", dummyConnection.getTextAfterCursor(10, 0).toString());
+ assertEquals("01345", dummyConnection.getEditable().toString());
+ }
+
+ // For text "[012]3456789", calling deleteSurroundingText(3, 3) must produce "[012]6789",
+ // where '[' and ']' indicate the text selection range.
+ {
+ final BaseInputConnection dummyConnection = createDummyConnectionWithSelection(
+ mView, "0123456789", 0, 3);
+
+ assertTrue(dummyConnection.deleteSurroundingText(3, 3));
+ assertEquals("", dummyConnection.getTextBeforeCursor(10, 0).toString());
+ assertEquals("012", dummyConnection.getSelectedText(0).toString());
+ assertEquals("6789", dummyConnection.getTextAfterCursor(10, 0).toString());
+ assertEquals("0126789", dummyConnection.getEditable().toString());
+ }
+
+ // For text "0123456[789]", calling deleteSurroundingText(3, 3) must produce "0123[789]",
+ // where '[' and ']' indicate the text selection range.
+ {
+ final BaseInputConnection dummyConnection = createDummyConnectionWithSelection(
+ mView, "0123456789", 7, 10);
+
+ assertTrue(dummyConnection.deleteSurroundingText(3, 3));
+ assertEquals("0123", dummyConnection.getTextBeforeCursor(10, 0).toString());
+ assertEquals("789", dummyConnection.getSelectedText(0).toString());
+ assertEquals("", dummyConnection.getTextAfterCursor(10, 0).toString());
+ assertEquals("0123789", dummyConnection.getEditable().toString());
+ }
+
+ // For text "[0123456789]", calling deleteSurroundingText(0, 0) must produce "[0123456789]",
+ // where '[' and ']' indicate the text selection range.
+ {
+ final BaseInputConnection dummyConnection = createDummyConnectionWithSelection(
+ mView, "0123456789", 0, 10);
+
+ assertTrue(dummyConnection.deleteSurroundingText(0, 0));
+ assertEquals("", dummyConnection.getTextBeforeCursor(10, 0).toString());
+ assertEquals("0123456789", dummyConnection.getSelectedText(0).toString());
+ assertEquals("", dummyConnection.getTextAfterCursor(10, 0).toString());
+ assertEquals("0123456789", dummyConnection.getEditable().toString());
+ }
+
+ // For text "[0123456789]", calling deleteSurroundingText(1, 1) must produce "[0123456789]",
+ // where '[' and ']' indicate the text selection range.
+ {
+ final BaseInputConnection dummyConnection = createDummyConnectionWithSelection(
+ mView, "0123456789", 0, 10);
+
+ assertTrue(dummyConnection.deleteSurroundingText(1, 1));
+ assertEquals("", dummyConnection.getTextBeforeCursor(10, 0).toString());
+ assertEquals("0123456789", dummyConnection.getSelectedText(0).toString());
+ assertEquals("", dummyConnection.getTextAfterCursor(10, 0).toString());
+ assertEquals("0123456789", dummyConnection.getEditable().toString());
+ }
+ }
}