diff options
Diffstat (limited to 'tests/src/org/kelar/inputmethod/keyboard/internal/KeyboardStateTestsBase.java')
-rw-r--r-- | tests/src/org/kelar/inputmethod/keyboard/internal/KeyboardStateTestsBase.java | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/tests/src/org/kelar/inputmethod/keyboard/internal/KeyboardStateTestsBase.java b/tests/src/org/kelar/inputmethod/keyboard/internal/KeyboardStateTestsBase.java new file mode 100644 index 000000000..016578ce6 --- /dev/null +++ b/tests/src/org/kelar/inputmethod/keyboard/internal/KeyboardStateTestsBase.java @@ -0,0 +1,253 @@ +/* + * Copyright (C) 2012 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 org.kelar.inputmethod.keyboard.internal; + +import android.test.AndroidTestCase; + +import org.kelar.inputmethod.latin.common.Constants; + +public class KeyboardStateTestsBase extends AndroidTestCase + implements MockKeyboardSwitcher.MockConstants { + protected MockKeyboardSwitcher mSwitcher; + + @Override + protected void setUp() throws Exception { + super.setUp(); + + mSwitcher = new MockKeyboardSwitcher(); + mSwitcher.setAutoCapsMode(CAP_MODE_OFF); + + loadKeyboard(ALPHABET_UNSHIFTED); + } + + /** + * Set auto caps mode. + * + * @param autoCaps the auto cap mode. + */ + public void setAutoCapsMode(final int autoCaps) { + mSwitcher.setAutoCapsMode(autoCaps); + } + + private static void assertLayout(final String message, final int expected, final int actual) { + assertTrue(message + ": expected=" + MockKeyboardSwitcher.getLayoutName(expected) + + " actual=" + MockKeyboardSwitcher.getLayoutName(actual), + expected == actual); + } + + /** + * Emulate update keyboard shift state. + * + * @param afterUpdate the keyboard state after updating the keyboard shift state. + */ + public void updateShiftState(final int afterUpdate) { + mSwitcher.updateShiftState(); + assertLayout("afterUpdate", afterUpdate, mSwitcher.getLayoutId()); + } + + /** + * Emulate load default keyboard. + * + * @param afterLoad the keyboard state after loading default keyboard. + */ + public void loadKeyboard(final int afterLoad) { + mSwitcher.loadKeyboard(); + mSwitcher.updateShiftState(); + assertLayout("afterLoad", afterLoad, mSwitcher.getLayoutId()); + } + + /** + * Emulate rotate device. + * + * @param afterRotate the keyboard state after rotating device. + */ + public void rotateDevice(final int afterRotate) { + mSwitcher.saveKeyboardState(); + mSwitcher.loadKeyboard(); + assertLayout("afterRotate", afterRotate, mSwitcher.getLayoutId()); + } + + private void pressKeyWithoutTimerExpire(final int code, final boolean isSinglePointer, + final int afterPress) { + mSwitcher.onPressKey(code, isSinglePointer); + assertLayout("afterPress", afterPress, mSwitcher.getLayoutId()); + } + + /** + * Emulate key press. + * + * @param code the key code to press. + * @param afterPress the keyboard state after pressing the key. + */ + public void pressKey(final int code, final int afterPress) { + mSwitcher.expireDoubleTapTimeout(); + pressKeyWithoutTimerExpire(code, true, afterPress); + } + + /** + * Emulate key release and register. + * + * @param code the key code to release and register + * @param afterRelease the keyboard state after releasing the key. + */ + public void releaseKey(final int code, final int afterRelease) { + mSwitcher.onCodeInput(code); + mSwitcher.onReleaseKey(code, NOT_SLIDING); + assertLayout("afterRelease", afterRelease, mSwitcher.getLayoutId()); + } + + /** + * Emulate key press and release. + * + * @param code the key code to press and release. + * @param afterPress the keyboard state after pressing the key. + * @param afterRelease the keyboard state after releasing the key. + */ + public void pressAndReleaseKey(final int code, final int afterPress, final int afterRelease) { + pressKey(code, afterPress); + releaseKey(code, afterRelease); + } + + /** + * Emulate chording key press. + * + * @param code the chording key code. + * @param afterPress the keyboard state after pressing chording key. + */ + public void chordingPressKey(final int code, final int afterPress) { + mSwitcher.expireDoubleTapTimeout(); + pressKeyWithoutTimerExpire(code, false, afterPress); + } + + /** + * Emulate chording key release. + * + * @param code the cording key code. + * @param afterRelease the keyboard state after releasing chording key. + */ + public void chordingReleaseKey(final int code, final int afterRelease) { + mSwitcher.onCodeInput(code); + mSwitcher.onReleaseKey(code, NOT_SLIDING); + assertLayout("afterRelease", afterRelease, mSwitcher.getLayoutId()); + } + + /** + * Emulate chording key press and release. + * + * @param code the chording key code. + * @param afterPress the keyboard state after pressing chording key. + * @param afterRelease the keyboard state after releasing chording key. + */ + public void chordingPressAndReleaseKey(final int code, final int afterPress, + final int afterRelease) { + chordingPressKey(code, afterPress); + chordingReleaseKey(code, afterRelease); + } + + /** + * Emulate start of the sliding key input. + * + * @param code the key code to start sliding. + * @param afterPress the keyboard state after pressing the key. + * @param afterSlide the keyboard state after releasing the key with sliding input. + */ + public void pressAndSlideFromKey(final int code, final int afterPress, final int afterSlide) { + pressKey(code, afterPress); + mSwitcher.onReleaseKey(code, SLIDING); + assertLayout("afterSlide", afterSlide, mSwitcher.getLayoutId()); + } + + /** + * Emulate end of the sliding key input. + * + * @param code the key code to stop sliding. + * @param afterPress the keyboard state after pressing the key. + * @param afterSlide the keyboard state after releasing the key and stop sliding. + */ + public void stopSlidingOnKey(final int code, final int afterPress, final int afterSlide) { + pressKey(code, afterPress); + mSwitcher.onCodeInput(code); + mSwitcher.onReleaseKey(code, NOT_SLIDING); + mSwitcher.onFinishSlidingInput(); + assertLayout("afterSlide", afterSlide, mSwitcher.getLayoutId()); + } + + /** + * Emulate cancel the sliding key input. + * + * @param afterCancelSliding the keyboard state after canceling sliding input. + */ + public void stopSlidingAndCancel(final int afterCancelSliding) { + mSwitcher.onFinishSlidingInput(); + assertLayout("afterCancelSliding", afterCancelSliding, mSwitcher.getLayoutId()); + } + + /** + * Emulate long press shift key. + * + * @param afterPress the keyboard state after pressing shift key. + * @param afterLongPress the keyboard state after long press fired. + */ + public void longPressShiftKey(final int afterPress, final int afterLongPress) { + // Long press shift key will register {@link Constants#CODE_CAPS_LOCK}. See + // {@link R.xml#key_styles_common} and its baseForShiftKeyStyle. We thus emulate the + // behavior that is implemented in {@link MainKeyboardView#onLongPress(PointerTracker)}. + pressKey(Constants.CODE_SHIFT, afterPress); + mSwitcher.onPressKey(Constants.CODE_CAPSLOCK, true /* isSinglePointer */); + mSwitcher.onCodeInput(Constants.CODE_CAPSLOCK); + assertLayout("afterLongPress", afterLongPress, mSwitcher.getLayoutId()); + } + + /** + * Emulate long press shift key and release. + * + * @param afterPress the keyboard state after pressing shift key. + * @param afterLongPress the keyboard state after long press fired. + * @param afterRelease the keyboard state after shift key is released. + */ + public void longPressAndReleaseShiftKey(final int afterPress, final int afterLongPress, + final int afterRelease) { + // Long press shift key will register {@link Constants#CODE_CAPS_LOCK}. See + // {@link R.xml#key_styles_common} and its baseForShiftKeyStyle. We thus emulate the + // behavior that is implemented in {@link MainKeyboardView#onLongPress(PointerTracker)}. + longPressShiftKey(afterPress, afterLongPress); + releaseKey(Constants.CODE_CAPSLOCK, afterRelease); + } + + /** + * Emulate the second press of the double tap. + * + * @param code the key code to double tap. + * @param afterPress the keyboard state after pressing the second tap. + */ + public void secondPressKey(final int code, final int afterPress) { + pressKeyWithoutTimerExpire(code, true, afterPress); + } + + /** + * Emulate the second tap of the double tap. + * + * @param code the key code to double tap. + * @param afterPress the keyboard state after pressing the second tap. + * @param afterRelease the keyboard state after releasing the second tap. + */ + public void secondPressAndReleaseKey(final int code, final int afterPress, + final int afterRelease) { + secondPressKey(code, afterPress); + releaseKey(code, afterRelease); + } +} |