diff -r 000000000000 -r 6474c204b198 mobile/android/base/tests/testInputConnection.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobile/android/base/tests/testInputConnection.java Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,89 @@ +package org.mozilla.gecko.tests; + +import static org.mozilla.gecko.tests.helpers.AssertionHelper.fAssertEquals; +import static org.mozilla.gecko.tests.helpers.TextInputHelper.assertSelection; +import static org.mozilla.gecko.tests.helpers.TextInputHelper.assertSelectionAt; +import static org.mozilla.gecko.tests.helpers.TextInputHelper.assertText; +import static org.mozilla.gecko.tests.helpers.TextInputHelper.assertTextAndSelection; +import static org.mozilla.gecko.tests.helpers.TextInputHelper.assertTextAndSelectionAt; + +import org.mozilla.gecko.tests.components.GeckoViewComponent.InputConnectionTest; +import org.mozilla.gecko.tests.helpers.GeckoHelper; +import org.mozilla.gecko.tests.helpers.NavigationHelper; + +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputConnection; + +/** + * Tests the proper operation of GeckoInputConnection + */ +public class testInputConnection extends UITest { + + private static final String INITIAL_TEXT = "foo"; + + public void testInputConnection() throws InterruptedException { + GeckoHelper.blockForReady(); + + NavigationHelper.enterAndLoadUrl(StringHelper.ROBOCOP_INPUT_URL + "#" + INITIAL_TEXT); + mToolbar.assertTitle(StringHelper.ROBOCOP_INPUT_TITLE); + + mGeckoView.mTextInput + .waitForInputConnection() + .testInputConnection(new BasicInputConnectionTest()); + } + + private class BasicInputConnectionTest implements InputConnectionTest { + @Override + public void test(InputConnection ic, EditorInfo info) { + // Test initial text provided by the hash in the test page URL + assertText("Initial text matches URL hash", ic, INITIAL_TEXT); + + // Test setSelection + ic.setSelection(0, 3); + assertSelection("Can set selection to range", ic, 0, 3); + ic.setSelection(-3, 6); + // Test both forms of assert + assertTextAndSelection("Can handle invalid range", ic, INITIAL_TEXT, 0, 3); + ic.setSelection(3, 3); + assertSelectionAt("Can collapse selection", ic, 3); + ic.setSelection(4, 4); + assertTextAndSelectionAt("Can handle invalid cursor", ic, INITIAL_TEXT, 3); + + // Test commitText + ic.commitText("", 10); // Selection past end of new text + assertTextAndSelectionAt("Can commit empty text", ic, "foo", 3); + ic.commitText("bar", 1); // Selection at end of new text + assertTextAndSelectionAt("Can commit text (select after)", ic, "foobar", 6); + ic.commitText("foo", -1); // Selection at start of new text + assertTextAndSelectionAt("Can commit text (select before)", ic, "foobarfoo", 5); + + // Test deleteSurroundingText + ic.deleteSurroundingText(1, 0); + assertTextAndSelectionAt("Can delete text before", ic, "foobrfoo", 4); + ic.deleteSurroundingText(1, 1); + assertTextAndSelectionAt("Can delete text before/after", ic, "foofoo", 3); + ic.deleteSurroundingText(0, 10); + assertTextAndSelectionAt("Can delete text after", ic, "foo", 3); + ic.deleteSurroundingText(0, 0); + assertTextAndSelectionAt("Can delete empty text", ic, "foo", 3); + + // Test setComposingText + ic.setComposingText("foo", 1); + assertTextAndSelectionAt("Can start composition", ic, "foofoo", 6); + ic.setComposingText("", 1); + assertTextAndSelectionAt("Can set empty composition", ic, "foo", 3); + ic.setComposingText("bar", 1); + assertTextAndSelectionAt("Can update composition", ic, "foobar", 6); + + // Test finishComposingText + ic.finishComposingText(); + assertTextAndSelectionAt("Can finish composition", ic, "foobar", 6); + + // Test getTextBeforeCursor + fAssertEquals("Can retrieve text before cursor", "bar", ic.getTextBeforeCursor(3, 0)); + + // Test getTextAfterCursor + fAssertEquals("Can retrieve text after cursor", "", ic.getTextAfterCursor(3, 0)); + } + } +}