KeyboardStateSingleTouchTests.java revision 64e01baadeb624781d9d056b62679b25ea0fe5c0
1e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka/*
2e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * Copyright (C) 2012 The Android Open Source Project
3e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka *
4e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * use this file except in compliance with the License. You may obtain a copy of
6e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * the License at
7e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka *
8e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0
9e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka *
10e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software
11e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * License for the specific language governing permissions and limitations under
14e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * the License.
15e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka */
16e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
17e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaokapackage com.android.inputmethod.keyboard.internal;
18e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
1964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaokapublic class KeyboardStateNonDistinctTests extends KeyboardStateTestsBase {
2064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka    @Override
2187e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    public boolean hasDistinctMultitouch() {
2287e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka        return false;
2387e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    }
24e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
25e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Shift key in alphabet mode.
26e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testShift() {
27e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Press/release shift key, enter into shift state.
2864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
29e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Press/release shift key, back to normal state.
3064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
31e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
32e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Press/release shift key, enter into shift state.
3364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
34e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Press/release letter key, snap back to normal state.
3564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
36e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
37e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
3887e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    // Shift key sliding input.
3987e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    public void testShiftSliding() {
4064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press and slide from shift key.
4164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndSlideFromKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
42e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
4364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Enter/release letter key, snap back to alphabet.
4464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
45e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
46e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
47e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Switching between alphabet and symbols.
48e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testAlphabetAndSymbols() {
4964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, enter into symbols.
5064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
5164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, back to alphabet.
5264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
53e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
54e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
55e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Switching between alphabet shift locked and symbols.
56e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testAlphabetShiftLockedAndSymbols() {
5764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Long press shift key, enter alphabet shift locked.
5864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
5964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
6064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, enter into symbols.
6164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
62e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
6387e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka        // Press/release "ABC" key, switch back to shift locked mode.
6464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
6587e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    }
6687e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka
6787e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    // Symbols key sliding input.
6887e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    public void testSymbolsSliding() {
6964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press and slide from "123?" key.
7064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
7164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
7264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Enter/release into symbol key, snap back to alphabet.
7364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('!', SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
74e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
75e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
76e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Switching between symbols and symbols shifted.
77e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testSymbolsAndSymbolsShifted() {
7864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, enter into symbols.
7964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
8064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
8164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "=\<" key, enter into symbols shifted.
8264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
8364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
8464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, enter into symbols.
8564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
8687e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    }
8787e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka
8887e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    // Symbols shift sliding input
8987e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    public void testSymbolsShiftSliding() {
9064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, enter into symbols.
9164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
9264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
9364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press and slide from "=\<" key.
9464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
9564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
9664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Enter/release symbol shifted letter key, snap back to symbols.
9764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_UNSHIFTED);
9887e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    }
99e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
10087e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    // Symbols shift sliding input from symbols shifted.
10187e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    public void testSymbolsShiftSliding2() {
10264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, enter into symbols.
10364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
10464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
10564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "=\<" key, enter into symbols shifted.
10664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
10764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
10864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press and slide from "123?" key.
10964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
11064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
11164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Enter/release symbol letter key, snap back to symbols shifted.
11264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_SHIFTED);
113e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
114e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
115e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Automatic snap back to alphabet from symbols by space key.
116e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testSnapBackBySpace() {
11764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, enter into symbols.
11864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
119e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
120e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Enter a symbol letter.
12164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
12264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
123e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Enter space, snap back to alphabet.
12464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SPACE, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
125e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
126e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
12787e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    // TODO: Add automatic snap back to shift locked test.
12887e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka
129e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Automatic snap back to alphabet from symbols by registered letters.
130e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testSnapBack() {
13164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Set snap back chars.
132e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        final String snapBackChars = "'";
133e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        final int snapBackCode = snapBackChars.codePointAt(0);
13464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        loadKeyboard(snapBackChars, ALPHABET_UNSHIFTED);
135e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
13664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, enter into symbols.
13764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
138e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
139e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Enter a symbol letter.
14064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
14164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
142e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Enter snap back letter, snap back to alphabet.
14364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(snapBackCode, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
144e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
145e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
146e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Automatic upper case test
147e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testAutomaticUpperCase() {
14864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Set auto caps mode on.
14964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        setAutoCapsMode(AUTO_CAPS);
15064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
151e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Update shift state with auto caps enabled.
15264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
15364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
15464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release shift key, back to alphabet.
15564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
156e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
157e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
15887e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    // Sliding from shift key in automatic upper case.
15987e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    public void testAutomaticUpperCaseSliding() {
16064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Set auto caps mode on.
16164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        setAutoCapsMode(AUTO_CAPS);
16264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
16387e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka        // Update shift state with auto caps enabled.
16464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
16564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
16664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press and slide from shift key.
16764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndSlideFromKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
16864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
16964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Enter and release letter key, back to alphabet.
17064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
17187e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    }
17287e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka
17387e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    // Sliding from symbol key in automatic upper case.
17487e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    public void testAutomaticUpperCaseSliding2() {
17564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Set auto caps mode on.
17664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        setAutoCapsMode(AUTO_CAPS);
17764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
17887e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka        // Update shift state with auto caps enabled.
17964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
18087e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka
18164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press and slide from "123?" key.
18264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
183e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
18464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Enter and release symbol letter keys, back to alphabet.
18564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
186e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
187e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
188e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Long press shift key.
189e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // TODO: Move long press recognizing timer/logic into KeyboardState.
190e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testLongPressShift() {
19164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Long press shift key, enter alphabet shift locked.
19264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
19364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
19464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release letter key, remain in shift locked.
19564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
19664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
19764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release letter key, remain in shift locked.
19864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('B', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
19964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
20064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release word separator, remain in shift locked.
20164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SPACE, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
20264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
20364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Long press shift key, back to alphabet.
20464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
205e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka     }
206e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
207e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Leave shift lock with single tap shift key.
208e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testShiftInShiftLock() {
20964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Long press shift key, enter alphabet shift locked.
21064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
21164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
21264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release shift key, back to alphabet.
21364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
214e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
215e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
216e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Double tap shift key.
217e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // TODO: Move double tap recognizing timer/logic into KeyboardState.
218e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testDoubleTapShift() {
219e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // First shift key tap.
22064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
22164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
222e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Second shift key tap.
223e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Double tap recognized in LatinKeyboardView.KeyTimerHandler.
22464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        secondTapShiftKey(ALPHABET_SHIFT_LOCKED);
225e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
226e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // First shift key tap.
22764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
22864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
229e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Second shift key tap.
230e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Second tap is ignored in LatinKeyboardView.KeyTimerHandler.
231e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
232e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
233e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Update shift state.
234e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testUpdateShiftState() {
23564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Set auto caps mode on.
23664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        setAutoCapsMode(AUTO_CAPS);
23764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
238e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Update shift state.
23964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
24064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
24164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release letter key, back to alphabet.
24264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('A', ALPHABET_AUTOMATIC_SHIFTED, ALPHABET_UNSHIFTED);
24364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
24464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release letter key
24564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('b', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
24664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
24764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release auto caps trigger letter, back to automatic shifted.
24864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
249e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
250e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
251e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Update shift state when shift locked.
252e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testUpdateShiftStateInShiftLocked() {
25364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Set auto caps mode on.
25464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        setAutoCapsMode(AUTO_CAPS);
25564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
25664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Long press shift key, enter alphabet shift locked.
25764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
25864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
259e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Update shift state when shift locked
26064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        updateShiftState(ALPHABET_SHIFT_LOCKED);
261e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
262e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
263e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // TODO: Change focus test.
264e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
265e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // TODO: Change orientation test.
266e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka}
267