Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0f96006f authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka Committed by Android (Google) Code Review
Browse files

Merge "Add KeyboardStateTestsBase and helper methods"

parents cc6ded7a 64e01baa
Loading
Loading
Loading
Loading
+133 −297
Original line number Diff line number Diff line
@@ -16,412 +16,248 @@

package com.android.inputmethod.keyboard.internal;

import android.test.AndroidTestCase;

public class KeyboardStateNonDistinctTests extends AndroidTestCase
        implements MockKeyboardSwitcher.Constants {
    protected MockKeyboardSwitcher mSwitcher;

public class KeyboardStateNonDistinctTests extends KeyboardStateTestsBase {
    @Override
    public boolean hasDistinctMultitouch() {
        return false;
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();

        mSwitcher = new MockKeyboardSwitcher();

        final String layoutSwitchBackSymbols = "";
        mSwitcher.loadKeyboard(layoutSwitchBackSymbols, hasDistinctMultitouch());
    }

    public void assertAlphabetNormal() {
        assertTrue(mSwitcher.assertAlphabetNormal());
    }

    public void assertAlphabetManualShifted() {
        assertTrue(mSwitcher.assertAlphabetManualShifted());
    }

    public void assertAlphabetAutomaticShifted() {
        assertTrue(mSwitcher.assertAlphabetAutomaticShifted());
    }

    public void assertAlphabetShiftLocked() {
        assertTrue(mSwitcher.assertAlphabetShiftLocked());
    }

    public void assertSymbolsNormal() {
        assertTrue(mSwitcher.assertSymbolsNormal());
    }

    public void assertSymbolsShifted() {
        assertTrue(mSwitcher.assertSymbolsShifted());
    }

    // Initial state test.
    public void testLoadKeyboard() {
        assertAlphabetNormal();
    }

    // Shift key in alphabet mode.
    public void testShift() {
        // Press/release shift key, enter into shift state.
        mSwitcher.onPressKey(CODE_SHIFT);
        assertAlphabetManualShifted();
        mSwitcher.onCodeInput(CODE_SHIFT);
        mSwitcher.onReleaseKey(CODE_SHIFT);
        assertAlphabetManualShifted();
        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
        // Press/release shift key, back to normal state.
        mSwitcher.onPressKey(CODE_SHIFT);
        assertAlphabetManualShifted();
        mSwitcher.onCodeInput(CODE_SHIFT);
        mSwitcher.onReleaseKey(CODE_SHIFT);
        assertAlphabetNormal();
        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);

        // Press/release shift key, enter into shift state.
        mSwitcher.onPressKey(CODE_SHIFT);
        assertAlphabetManualShifted();
        mSwitcher.onCodeInput(CODE_SHIFT);
        mSwitcher.onReleaseKey(CODE_SHIFT);
        assertAlphabetManualShifted();
        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
        // Press/release letter key, snap back to normal state.
        mSwitcher.onPressKey('Z');
        mSwitcher.onCodeInput('Z');
        mSwitcher.onReleaseKey('Z');
        assertAlphabetNormal();
        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
    }

    // Shift key sliding input.
    public void testShiftSliding() {
        // Press shift key.
        mSwitcher.onPressKey(CODE_SHIFT);
        assertAlphabetManualShifted();
        // Slide out shift key.
        mSwitcher.onReleaseKey(CODE_SHIFT, SLIDING);
        assertAlphabetManualShifted();

        // Enter into letter key.
        mSwitcher.onPressKey('Z');
        assertAlphabetManualShifted();
        // Release letter key, snap back to alphabet.
        mSwitcher.onCodeInput('Z');
        mSwitcher.onReleaseKey('Z');
        assertAlphabetNormal();
    }

    public void enterSymbolsMode() {
        // Press/release "?123" key.
        mSwitcher.onPressKey(CODE_SYMBOL);
        assertSymbolsNormal();
        mSwitcher.onCodeInput(CODE_SYMBOL);
        mSwitcher.onReleaseKey(CODE_SYMBOL);
        assertSymbolsNormal();
    }
        // Press and slide from shift key.
        pressAndSlideFromKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);

    public void leaveSymbolsMode() {
        // Press/release "ABC" key.
        mSwitcher.onPressKey(CODE_SYMBOL);
        assertAlphabetNormal();
        mSwitcher.onCodeInput(CODE_SYMBOL);
        mSwitcher.onReleaseKey(CODE_SYMBOL);
        assertAlphabetNormal();
        // Enter/release letter key, snap back to alphabet.
        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
    }

    // Switching between alphabet and symbols.
    public void testAlphabetAndSymbols() {
        enterSymbolsMode();
        leaveSymbolsMode();
        // Press/release "?123" key, enter into symbols.
        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
        // Press/release "?123" key, back to alphabet.
        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
    }

    // Switching between alphabet shift locked and symbols.
    public void testAlphabetShiftLockedAndSymbols() {
        enterShiftLockWithLongPressShift();
        enterSymbolsMode();
        // Long press shift key, enter alphabet shift locked.
        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);

        // Press/release "?123" key, enter into symbols.
        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);

        // Press/release "ABC" key, switch back to shift locked mode.
        mSwitcher.onPressKey(CODE_SYMBOL);
        assertAlphabetShiftLocked();
        mSwitcher.onCodeInput(CODE_SYMBOL);
        mSwitcher.onReleaseKey(CODE_SYMBOL);
        assertAlphabetShiftLocked();
        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
    }

    // Symbols key sliding input.
    public void testSymbolsSliding() {
        // Press "123?" key.
        mSwitcher.onPressKey(CODE_SYMBOL);
        assertSymbolsNormal();
        // Slide out from "123?" key.
        mSwitcher.onReleaseKey(CODE_SYMBOL, SLIDING);
        assertSymbolsNormal();

        // Enter into letter key.
        mSwitcher.onPressKey('z');
        assertSymbolsNormal();
        // Release letter key, snap back to alphabet.
        mSwitcher.onCodeInput('z');
        mSwitcher.onReleaseKey('z');
        assertAlphabetNormal();
        // Press and slide from "123?" key.
        pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);

        // Enter/release into symbol key, snap back to alphabet.
        pressAndReleaseKey('!', SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
    }

    // Switching between symbols and symbols shifted.
    public void testSymbolsAndSymbolsShifted() {
        enterSymbolsMode();

        // Press/release "=\<" key.
        mSwitcher.onPressKey(CODE_SHIFT);
        assertSymbolsShifted();
        mSwitcher.onCodeInput(CODE_SHIFT);
        mSwitcher.onReleaseKey(CODE_SHIFT);
        assertSymbolsShifted();

        // Press/release "?123" key.
        mSwitcher.onPressKey(CODE_SHIFT);
        assertSymbolsNormal();
        mSwitcher.onCodeInput(CODE_SHIFT);
        mSwitcher.onReleaseKey(CODE_SHIFT);
        assertSymbolsNormal();

        leaveSymbolsMode();
        // Press/release "?123" key, enter into symbols.
        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);

        // Press/release "=\<" key, enter into symbols shifted.
        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);

        // Press/release "?123" key, enter into symbols.
        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
    }

    // Symbols shift sliding input
    public void testSymbolsShiftSliding() {
        enterSymbolsMode();

        // Press "=\<" key.
        mSwitcher.onPressKey(CODE_SHIFT);
        assertSymbolsShifted();
        // Slide out "=\<" key.
        mSwitcher.onReleaseKey(CODE_SHIFT, SLIDING);
        assertSymbolsShifted();

        // Enter into symbol shifted letter key.
        mSwitcher.onPressKey('~');
        assertSymbolsShifted();
        // Release symbol shifted letter key, snap back to symbols.
        mSwitcher.onCodeInput('~');
        mSwitcher.onReleaseKey('~');
        assertSymbolsNormal();
        // Press/release "?123" key, enter into symbols.
        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);

        // Press and slide from "=\<" key.
        pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);

        // Enter/release symbol shifted letter key, snap back to symbols.
        pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_UNSHIFTED);
    }

    // Symbols shift sliding input from symbols shifted.
    public void testSymbolsShiftSliding2() {
        enterSymbolsMode();

        // Press/release "=\<" key.
        mSwitcher.onPressKey(CODE_SHIFT);
        assertSymbolsShifted();
        mSwitcher.onCodeInput(CODE_SHIFT);
        mSwitcher.onReleaseKey(CODE_SHIFT);
        assertSymbolsShifted();

        // Press "123?" key.
        mSwitcher.onPressKey(CODE_SHIFT);
        assertSymbolsNormal();
        // Slide out "123?" key.
        mSwitcher.onReleaseKey(CODE_SHIFT, SLIDING);
        assertSymbolsNormal();

        // Enter into symbol letter key.
        mSwitcher.onPressKey('1');
        assertSymbolsNormal();
        // Release symbol letter key, snap back to symbols shift.
        mSwitcher.onCodeInput('1');
        mSwitcher.onReleaseKey('1');
        assertSymbolsShifted();
        // Press/release "?123" key, enter into symbols.
        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);

        // Press/release "=\<" key, enter into symbols shifted.
        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);

        // Press and slide from "123?" key.
        pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);

        // Enter/release symbol letter key, snap back to symbols shifted.
        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_SHIFTED);
    }

    // Automatic snap back to alphabet from symbols by space key.
    public void testSnapBackBySpace() {
        enterSymbolsMode();
        // Press/release "?123" key, enter into symbols.
        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);

        // Enter a symbol letter.
        mSwitcher.onPressKey('1');
        assertSymbolsNormal();
        mSwitcher.onCodeInput('1');
        mSwitcher.onReleaseKey('1');
        assertSymbolsNormal();
        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);

        // Enter space, snap back to alphabet.
        mSwitcher.onPressKey(CODE_SPACE);
        assertSymbolsNormal();
        mSwitcher.onCodeInput(CODE_SPACE);
        mSwitcher.onReleaseKey(CODE_SPACE);
        assertAlphabetNormal();
        pressAndReleaseKey(CODE_SPACE, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
    }

    // TODO: Add automatic snap back to shift locked test.

    // Automatic snap back to alphabet from symbols by registered letters.
    public void testSnapBack() {
        // Set snap back chars.
        final String snapBackChars = "'";
        final int snapBackCode = snapBackChars.codePointAt(0);
        final boolean hasDistinctMultitouch = true;
        mSwitcher.loadKeyboard(snapBackChars, hasDistinctMultitouch);
        loadKeyboard(snapBackChars, ALPHABET_UNSHIFTED);

        enterSymbolsMode();
        // Press/release "?123" key, enter into symbols.
        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);

        // Enter a symbol letter.
        mSwitcher.onPressKey('1');
        assertSymbolsNormal();
        mSwitcher.onCodeInput('1');
        mSwitcher.onReleaseKey('1');
        assertSymbolsNormal();
        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);

        // Enter snap back letter, snap back to alphabet.
        mSwitcher.onPressKey(snapBackCode);
        assertSymbolsNormal();
        mSwitcher.onCodeInput(snapBackCode);
        mSwitcher.onReleaseKey(snapBackCode);
        assertAlphabetNormal();
        pressAndReleaseKey(snapBackCode, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
    }

    // Automatic upper case test
    public void testAutomaticUpperCase() {
        mSwitcher.setAutoCapsMode(AUTO_CAPS);
        // Set auto caps mode on.
        setAutoCapsMode(AUTO_CAPS);

        // Update shift state with auto caps enabled.
        mSwitcher.updateShiftState();
        assertAlphabetAutomaticShifted();

        // Press shift key.
        mSwitcher.onPressKey(CODE_SHIFT);
        assertAlphabetManualShifted();
        // Release shift key.
        mSwitcher.onCodeInput(CODE_SHIFT);
        mSwitcher.onReleaseKey(CODE_SHIFT);
        assertAlphabetNormal();
        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);

        // Press/release shift key, back to alphabet.
        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
    }

    // Sliding from shift key in automatic upper case.
    public void testAutomaticUpperCaseSliding() {
        mSwitcher.setAutoCapsMode(AUTO_CAPS);
        // Set auto caps mode on.
        setAutoCapsMode(AUTO_CAPS);

        // Update shift state with auto caps enabled.
        mSwitcher.updateShiftState();
        assertAlphabetAutomaticShifted();

        // Press shift key.
        mSwitcher.onPressKey(CODE_SHIFT);
        assertAlphabetManualShifted();
        // Slide out shift key.
        mSwitcher.onReleaseKey(CODE_SHIFT, SLIDING);
        assertAlphabetManualShifted();
        // Enter into letter key.
        mSwitcher.onPressKey('Z');
        assertAlphabetManualShifted();
        // Release letter key, snap back to alphabet.
        mSwitcher.onCodeInput('Z');
        mSwitcher.onReleaseKey('Z');
        assertAlphabetNormal();
        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);

        // Press and slide from shift key.
        pressAndSlideFromKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);

        // Enter and release letter key, back to alphabet.
        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
    }

    // Sliding from symbol key in automatic upper case.
    public void testAutomaticUpperCaseSliding2() {
        mSwitcher.setAutoCapsMode(AUTO_CAPS);
        // Set auto caps mode on.
        setAutoCapsMode(AUTO_CAPS);

        // Update shift state with auto caps enabled.
        mSwitcher.updateShiftState();
        assertAlphabetAutomaticShifted();

        // Press "123?" key.
        mSwitcher.onPressKey(CODE_SYMBOL);
        assertSymbolsNormal();
        // Slide out "123?" key.
        mSwitcher.onReleaseKey(CODE_SYMBOL, SLIDING);
        assertSymbolsNormal();
        // Enter into symbol letter keys.
        mSwitcher.onPressKey('1');
        assertSymbolsNormal();
        // Release symbol letter key, snap back to alphabet.
        mSwitcher.onCodeInput('1');
        mSwitcher.onReleaseKey('1');
        assertAlphabetNormal();
    }
        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);

    public void enterShiftLockWithLongPressShift() {
        // Long press shift key
        mSwitcher.onPressKey(CODE_SHIFT);
        assertAlphabetManualShifted();
        // Long press recognized in LatinKeyboardView.KeyTimerHandler.
        mSwitcher.onCodeInput(CODE_CAPSLOCK);
        assertAlphabetShiftLocked();
        mSwitcher.onReleaseKey(CODE_SHIFT);
        assertAlphabetShiftLocked();
    }
        // Press and slide from "123?" key.
        pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);

    public void leaveShiftLockWithLongPressShift() {
        // Press shift key.
        mSwitcher.onPressKey(CODE_SHIFT);
        assertAlphabetManualShifted();
        // Long press recognized in LatinKeyboardView.KeyTimerHandler.
        mSwitcher.onCodeInput(CODE_CAPSLOCK);
        assertAlphabetNormal();
        mSwitcher.onReleaseKey(CODE_SHIFT);
        assertAlphabetNormal();
        // Enter and release symbol letter keys, back to alphabet.
        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
    }

    // Long press shift key.
    // TODO: Move long press recognizing timer/logic into KeyboardState.
    public void testLongPressShift() {
        enterShiftLockWithLongPressShift();
        leaveShiftLockWithLongPressShift();
        // Long press shift key, enter alphabet shift locked.
        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);

        // Press/release letter key, remain in shift locked.
        pressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);

        // Press/release letter key, remain in shift locked.
        pressAndReleaseKey('B', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);

        // Press/release word separator, remain in shift locked.
        pressAndReleaseKey(CODE_SPACE, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);

        // Long press shift key, back to alphabet.
        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
     }

    // Leave shift lock with single tap shift key.
    public void testShiftInShiftLock() {
        enterShiftLockWithLongPressShift();
        assertAlphabetShiftLocked();

        // Tap shift key.
        mSwitcher.onPressKey(CODE_SHIFT);
        assertAlphabetManualShifted();
        mSwitcher.onCodeInput(CODE_SHIFT, SINGLE);
        assertAlphabetManualShifted();
        mSwitcher.onReleaseKey(CODE_SHIFT);
        assertAlphabetNormal();
        // Long press shift key, enter alphabet shift locked.
        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);

        // Press/release shift key, back to alphabet.
        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
    }

    // Double tap shift key.
    // TODO: Move double tap recognizing timer/logic into KeyboardState.
    public void testDoubleTapShift() {
        // First shift key tap.
        mSwitcher.onPressKey(CODE_SHIFT);
        assertAlphabetManualShifted();
        mSwitcher.onCodeInput(CODE_SHIFT);
        assertAlphabetManualShifted();
        mSwitcher.onReleaseKey(CODE_SHIFT);
        assertAlphabetManualShifted();
        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);

        // Second shift key tap.
        // Double tap recognized in LatinKeyboardView.KeyTimerHandler.
        mSwitcher.onCodeInput(CODE_CAPSLOCK);
        assertAlphabetShiftLocked();
        secondTapShiftKey(ALPHABET_SHIFT_LOCKED);

        // First shift key tap.
        mSwitcher.onPressKey(CODE_SHIFT);
        assertAlphabetManualShifted();
        mSwitcher.onCodeInput(CODE_SHIFT);
        assertAlphabetManualShifted();
        mSwitcher.onReleaseKey(CODE_SHIFT);
        assertAlphabetNormal();
        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);

        // Second shift key tap.
        // Second tap is ignored in LatinKeyboardView.KeyTimerHandler.
    }

    // Update shift state.
    public void testUpdateShiftState() {
        mSwitcher.setAutoCapsMode(AUTO_CAPS);
        // Set auto caps mode on.
        setAutoCapsMode(AUTO_CAPS);

        // Update shift state.
        mSwitcher.updateShiftState();
        assertAlphabetAutomaticShifted();
        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);

        // Press/release letter key, back to alphabet.
        pressAndReleaseKey('A', ALPHABET_AUTOMATIC_SHIFTED, ALPHABET_UNSHIFTED);

        // Press/release letter key
        pressAndReleaseKey('b', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);

        // Press/release auto caps trigger letter, back to automatic shifted.
        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
    }

    // Update shift state when shift locked.
    public void testUpdateShiftStateInShiftLocked() {
        mSwitcher.setAutoCapsMode(AUTO_CAPS);
        enterShiftLockWithLongPressShift();
        assertAlphabetShiftLocked();
        // Set auto caps mode on.
        setAutoCapsMode(AUTO_CAPS);

        // Long press shift key, enter alphabet shift locked.
        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);

        // Update shift state when shift locked
        mSwitcher.updateShiftState();
        assertAlphabetShiftLocked();
        updateShiftState(ALPHABET_SHIFT_LOCKED);
    }

    // TODO: Change focus test.
+27 −54
Original line number Diff line number Diff line
@@ -25,90 +25,63 @@ public class KeyboardStateTests extends KeyboardStateNonDistinctTests {
    // Shift key chording input.
    public void testShiftChording() {
        // Press shift key and hold, enter into choring shift state.
        mSwitcher.onPressKey(CODE_SHIFT);
        assertAlphabetManualShifted();
        pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);

        // Press/release letter keys.
        mSwitcher.onPressKey('Z');
        mSwitcher.onCodeInput('Z', MULTI);
        mSwitcher.onReleaseKey('Z');
        assertAlphabetManualShifted();
        mSwitcher.onPressKey('X');
        mSwitcher.onCodeInput('X', MULTI);
        mSwitcher.onReleaseKey('X');
        assertAlphabetManualShifted();
        chordingPressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
        chordingPressAndReleaseKey('X', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);

        // Release shift key, snap back to normal state.
        mSwitcher.onCodeInput(CODE_SHIFT);
        mSwitcher.onReleaseKey(CODE_SHIFT);
        mSwitcher.updateShiftState();
        assertAlphabetNormal();
        releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
    }

    // Symbols key chording input.
    public void testSymbolsChording() {
        // Press symbols key and hold, enter into choring shift state.
        mSwitcher.onPressKey(CODE_SYMBOL);
        assertSymbolsNormal();
        pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);

        // Press/release symbol letter keys.
        mSwitcher.onPressKey('1');
        mSwitcher.onCodeInput('1', MULTI);
        mSwitcher.onReleaseKey('1');
        assertSymbolsNormal();
        mSwitcher.onPressKey('2');
        mSwitcher.onCodeInput('2', MULTI);
        mSwitcher.onReleaseKey('2');
        assertSymbolsNormal();
        chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
        chordingPressAndReleaseKey('2', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);

        // Release shift key, snap back to normal state.
        mSwitcher.onCodeInput(CODE_SYMBOL);
        mSwitcher.onReleaseKey(CODE_SYMBOL);
        mSwitcher.updateShiftState();
        assertAlphabetNormal();
        releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
    }

    // Chording shift key in automatic upper case.
    public void testAutomaticUpperCaseChording() {
        mSwitcher.setAutoCapsMode(AUTO_CAPS);
        // Set auto caps mode on.
        setAutoCapsMode(AUTO_CAPS);

        // Update shift state with auto caps enabled.
        mSwitcher.updateShiftState();
        assertAlphabetAutomaticShifted();
        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);

        // Press shift key.
        mSwitcher.onPressKey(CODE_SHIFT);
        assertAlphabetManualShifted();
        pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);

        // Press/release letter keys.
        mSwitcher.onPressKey('Z');
        mSwitcher.onCodeInput('Z', MULTI);
        mSwitcher.onReleaseKey('Z');
        assertAlphabetManualShifted();
        chordingPressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);

        // Release shift key, snap back to alphabet.
        mSwitcher.onCodeInput(CODE_SHIFT);
        mSwitcher.onReleaseKey(CODE_SHIFT);
        assertAlphabetNormal();
        releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
    }

    // Chording symbol key in automatic upper case.
    public void testAutomaticUpperCaseChrding2() {
        mSwitcher.setAutoCapsMode(AUTO_CAPS);
    public void testAutomaticUpperCaseChording2() {
        // Set auto caps mode on.
        setAutoCapsMode(AUTO_CAPS);

        // Update shift state with auto caps enabled.
        mSwitcher.updateShiftState();
        assertAlphabetAutomaticShifted();
        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);

        // Press "123?" key.
        mSwitcher.onPressKey(CODE_SYMBOL);
        assertSymbolsNormal();
        pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);

        // Press/release symbol letter keys.
        mSwitcher.onPressKey('1');
        assertSymbolsNormal();
        mSwitcher.onCodeInput('1', MULTI);
        mSwitcher.onReleaseKey('1');
        assertSymbolsNormal();
        chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);

        // Release "123?" key, snap back to alphabet.
        mSwitcher.onCodeInput(CODE_SYMBOL);
        mSwitcher.onReleaseKey(CODE_SYMBOL);
        assertAlphabetNormal();
        releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
    }

    // TODO: Multitouch test
+104 −0

File added.

Preview size limit exceeded, changes collapsed.

+24 −51

File changed.

Preview size limit exceeded, changes collapsed.