blob: bdee05a6e6c627b207ec35403cf0a883deadc511 [file] [log] [blame]
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.view.inputmethod.cts;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestTargetNew;
import dalvik.annotation.TestTargets;
import android.os.Bundle;
import android.test.AndroidTestCase;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.inputmethod.CompletionInfo;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.ExtractedText;
import android.view.inputmethod.ExtractedTextRequest;
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputConnectionWrapper;
@TestTargetClass(InputConnectionWrapper.class)
public class InputConnectionWrapperTest extends AndroidTestCase {
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "InputConnectionWrapper",
args = {InputConnection.class, boolean.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setTarget",
args = {InputConnection.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "beginBatchEdit",
args = {}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "commitCompletion",
args = {CompletionInfo.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "endBatchEdit",
args = {}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "getExtractedText",
args = {ExtractedTextRequest.class, int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "performContextMenuAction",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "performEditorAction",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "performPrivateCommand",
args = {String.class, Bundle.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setSelection",
args = {int.class, int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "getTextAfterCursor",
args = {int.class, int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "getTextBeforeCursor",
args = {int.class, int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "getSelectedText",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "getCursorCapsMode",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "clearMetaKeyStates",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "commitText",
args = {CharSequence.class, int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "deleteSurroundingText",
args = {int.class, int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "finishComposingText",
args = {}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setComposingText",
args = {CharSequence.class, int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setComposingRegion",
args = {int.class, int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "sendKeyEvent",
args = {KeyEvent.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "reportFullscreenMode",
args = {boolean.class}
)
})
public void testInputConnectionWrapper() {
MockInputConnection inputConnection = new MockInputConnection();
InputConnectionWrapper wrapper = new InputConnectionWrapper(null, true);
try {
wrapper.beginBatchEdit();
fail("Failed to throw NullPointerException!");
} catch (NullPointerException e) {
// expected
}
wrapper.setTarget(inputConnection);
wrapper.beginBatchEdit();
assertTrue(inputConnection.isBeginBatchEditCalled);
wrapper.clearMetaKeyStates(KeyEvent.META_ALT_ON);
assertTrue(inputConnection.isClearMetaKeyStatesCalled);
wrapper.commitCompletion(new CompletionInfo(1, 1, "testText"));
assertTrue(inputConnection.isCommitCompletionCalled);
wrapper.commitText("Text", 1);
assertTrue(inputConnection.isCommitTextCalled);
wrapper.deleteSurroundingText(10, 100);
assertTrue(inputConnection.isDeleteSurroundingTextCalled);
wrapper.endBatchEdit();
assertTrue(inputConnection.isEndBatchEditCalled);
wrapper.finishComposingText();
assertTrue(inputConnection.isFinishComposingTextCalled);
wrapper.getCursorCapsMode(TextUtils.CAP_MODE_CHARACTERS);
assertTrue(inputConnection.isGetCursorCapsModeCalled);
wrapper.getExtractedText(new ExtractedTextRequest(), 0);
assertTrue(inputConnection.isGetExtractedTextCalled);
wrapper.getTextAfterCursor(5, 0);
assertTrue(inputConnection.isGetTextAfterCursorCalled);
wrapper.getTextBeforeCursor(3, 0);
assertTrue(inputConnection.isGetTextBeforeCursorCalled);
wrapper.performContextMenuAction(1);
assertTrue(inputConnection.isPerformContextMenuActionCalled);
wrapper.performEditorAction(EditorInfo.IME_ACTION_GO);
assertTrue(inputConnection.isPerformEditorActionCalled);
wrapper.performPrivateCommand("com.android.action.MAIN", new Bundle());
assertTrue(inputConnection.isPerformPrivateCommandCalled);
wrapper.reportFullscreenMode(true);
assertTrue(inputConnection.isReportFullscreenModeCalled);
wrapper.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_0));
assertTrue(inputConnection.isSendKeyEventCalled);
wrapper.setComposingText("Text", 1);
assertTrue(inputConnection.isSetComposingTextCalled);
wrapper.setSelection(0, 10);
assertTrue(inputConnection.isSetSelectionCalled);
wrapper.getSelectedText(0);
assertTrue(inputConnection.isGetSelectedTextCalled);
wrapper.setComposingRegion(0, 3);
assertTrue(inputConnection.isSetComposingRegionCalled);
}
private class MockInputConnection implements InputConnection {
public boolean isBeginBatchEditCalled;
public boolean isClearMetaKeyStatesCalled;
public boolean isCommitCompletionCalled;
public boolean isCommitTextCalled;
public boolean isDeleteSurroundingTextCalled;
public boolean isEndBatchEditCalled;
public boolean isFinishComposingTextCalled;
public boolean isGetCursorCapsModeCalled;
public boolean isGetExtractedTextCalled;
public boolean isGetTextAfterCursorCalled;
public boolean isGetTextBeforeCursorCalled;
public boolean isGetSelectedTextCalled;
public boolean isPerformContextMenuActionCalled;
public boolean isPerformEditorActionCalled;
public boolean isPerformPrivateCommandCalled;
public boolean isReportFullscreenModeCalled;
public boolean isSendKeyEventCalled;
public boolean isSetComposingTextCalled;
public boolean isSetComposingRegionCalled;
public boolean isSetSelectionCalled;
public boolean beginBatchEdit() {
isBeginBatchEditCalled = true;
return false;
}
public boolean clearMetaKeyStates(int states) {
isClearMetaKeyStatesCalled = true;
return false;
}
public boolean commitCompletion(CompletionInfo text) {
isCommitCompletionCalled = true;
return false;
}
public boolean commitText(CharSequence text, int newCursorPosition) {
isCommitTextCalled = true;
return false;
}
public boolean deleteSurroundingText(int leftLength, int rightLength) {
isDeleteSurroundingTextCalled = true;
return false;
}
public boolean endBatchEdit() {
isEndBatchEditCalled = true;
return false;
}
public boolean finishComposingText() {
isFinishComposingTextCalled = true;
return false;
}
public int getCursorCapsMode(int reqModes) {
isGetCursorCapsModeCalled = true;
return 0;
}
public ExtractedText getExtractedText(ExtractedTextRequest request, int flags) {
isGetExtractedTextCalled = true;
return null;
}
public CharSequence getTextAfterCursor(int n, int flags) {
isGetTextAfterCursorCalled = true;
return null;
}
public CharSequence getTextBeforeCursor(int n, int flags) {
isGetTextBeforeCursorCalled = true;
return null;
}
public CharSequence getSelectedText(int flags) {
isGetSelectedTextCalled = true;
return null;
}
public boolean performContextMenuAction(int id) {
isPerformContextMenuActionCalled = true;
return false;
}
public boolean performEditorAction(int editorAction) {
isPerformEditorActionCalled = true;
return false;
}
public boolean performPrivateCommand(String action, Bundle data) {
isPerformPrivateCommandCalled = true;
return false;
}
public boolean reportFullscreenMode(boolean enabled) {
isReportFullscreenModeCalled = true;
return false;
}
public boolean sendKeyEvent(KeyEvent event) {
isSendKeyEventCalled = true;
return false;
}
public boolean setComposingText(CharSequence text, int newCursorPosition) {
isSetComposingTextCalled = true;
return false;
}
public boolean setComposingRegion(int start, int end) {
isSetComposingRegionCalled = true;
return false;
}
public boolean setSelection(int start, int end) {
isSetSelectionCalled = true;
return false;
}
}
}