Home | History | Annotate | Download | only in internal
      1 /*
      2  * Copyright (C) 2012 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
      5  * use this file except in compliance with the License. You may obtain a copy of
      6  * the License at
      7  *
      8  * http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     13  * License for the specific language governing permissions and limitations under
     14  * the License.
     15  */
     16 
     17 package com.android.inputmethod.keyboard.internal;
     18 
     19 public class KeyboardStateMultiTouchTests extends KeyboardStateTestsBase {
     20     // Chording input in alphabet.
     21     public void testChordingAlphabet() {
     22         // Press shift key and hold, enter into choring shift state.
     23         pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
     24         // Press/release letter key.
     25         chordingPressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
     26         // Release shift key, switch back to alphabet.
     27         releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
     28 
     29         // Press "?123" key and hold, enter into choring symbols state.
     30         pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
     31         // Press/release symbol letter key.
     32         chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
     33         // Release "ABC" key, switch back to alphabet.
     34         releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
     35     }
     36 
     37     // Chording input in shifted.
     38     public void testChordingShifted() {
     39         // Press shift key, enter alphabet shifted.
     40         pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
     41 
     42         // Press shift key and hold, enter into choring shift state.
     43         pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
     44         // Press/release letter key.
     45         chordingPressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
     46         // Release shift key, switch back to alphabet shifted.
     47         releaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
     48 
     49         // Press "?123" key and hold, enter into choring symbols state.
     50         pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
     51         // Press/release symbol letter key.
     52         chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
     53         // Release "123?" key, switch back to alphabet shift unshifted.
     54         releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
     55     }
     56 
     57     // Chording input in shift locked.
     58     public void testChordingShiftLocked() {
     59         // Long press shift key, enter alphabet shift locked.
     60         longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
     61                 ALPHABET_SHIFT_LOCKED);
     62 
     63         // Press shift key and hold, enter into choring shift state.
     64         pressKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED);
     65         // Press/release letter key.
     66         chordingPressAndReleaseKey('Z', ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_SHIFT_LOCK_SHIFTED);
     67         // Release shift key, switch back to alphabet shift locked.
     68         releaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCKED);
     69 
     70         // Press "?123" key and hold, enter into choring symbols state.
     71         pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
     72         // Press/release symbol letter key.
     73         chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
     74         // Release "123?" key, switch back to alphabet shift locked.
     75         releaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED);
     76     }
     77 
     78     // Chording input in symbols.
     79     public void testChordingSymbols() {
     80         // Press/release "?123" key, enter symbols.
     81         pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
     82 
     83         // Press "=\<" key and hold, enter into choring symbols shifted state.
     84         pressKey(CODE_SHIFT, SYMBOLS_SHIFTED);
     85         // Press/release symbol letter key.
     86         chordingPressAndReleaseKey('1', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
     87         // Release "=\<" key, switch back to symbols.
     88         releaseKey(CODE_SHIFT, SYMBOLS_UNSHIFTED);
     89 
     90         // Press "ABC" key and hold, enter into choring alphabet state.
     91         pressKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
     92         // Press/release letter key.
     93         chordingPressAndReleaseKey('a', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
     94         // Release "ABC" key, switch back to symbols.
     95         releaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
     96 
     97         // Alphabet shifted -> symbols -> "ABC" key + letter -> symbols
     98         // -> alphabet.
     99         // Load keyboard
    100         loadKeyboard(ALPHABET_UNSHIFTED);
    101         // Press/release shift key, enter alphabet shifted.
    102         pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
    103         // Press/release "?123" key, enter into symbols.
    104         pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
    105         // Press "ABC" key, enter into chording alphabet state.
    106         pressKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
    107         // Enter/release letter key.
    108         chordingPressAndReleaseKey('a', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
    109         // Release "ABC" key, switch back to symbols.
    110         releaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
    111         // Press/release "ABC" key, switch to alphabet (not alphabet shifted).
    112         pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
    113 
    114         // Alphabet shift locked -> symbols -> "ABC" key + letter -> symbols ->
    115         // alphabet shift locked.
    116         // Load keyboard
    117         loadKeyboard(ALPHABET_UNSHIFTED);
    118         // Long press shift key, enter alphabet shift locked.
    119         longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
    120                 ALPHABET_SHIFT_LOCKED);
    121         // Press/release "?123" key, enter into symbols.
    122         pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
    123         // Press "ABC" key, enter into chording alphabet shift locked.
    124         pressKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED);
    125         // Enter/release letter key.
    126         chordingPressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
    127         // Release "ABC" key, switch back to symbols.
    128         releaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
    129         // Press/release "ABC" key, switch to alphabet shift locked.
    130         pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
    131 
    132         // Alphabet shift locked -> symbols -> "=\<" key + letter -> symbols ->
    133         // alphabet shift locked.
    134         // Load keyboard
    135         loadKeyboard(ALPHABET_UNSHIFTED);
    136         // Long press shift key, enter alphabet shift locked.
    137         longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
    138                 ALPHABET_SHIFT_LOCKED);
    139         // Press/release "?123" key, enter into symbols.
    140         pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
    141         // Press "=\<" key, enter into symbols shifted chording state.
    142         pressKey(CODE_SHIFT, SYMBOLS_SHIFTED);
    143         // Enter/release symbols shift letter key.
    144         chordingPressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
    145         // Release "=\<" key, switch back to symbols.
    146         releaseKey(CODE_SHIFT, SYMBOLS_UNSHIFTED);
    147         // Press/release "ABC" key, switch to alphabet shift locked.
    148         pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
    149     }
    150 
    151     // Chording input in symbol shifted.
    152     public void testChordingSymbolsShifted() {
    153         // Press/release "?123" key, enter symbols.
    154         pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
    155         // Press/release "=\<" key, enter symbols shifted.
    156         pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
    157 
    158         // Press "?123" key and hold, enter into chording symbols state.
    159         pressKey(CODE_SHIFT, SYMBOLS_UNSHIFTED);
    160         // Press/release symbol letter key.
    161         chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
    162         // Release "=\<" key, switch back to symbols shifted state.
    163         releaseKey(CODE_SHIFT, SYMBOLS_SHIFTED);
    164 
    165         // Press "ABC" key and hold, enter into choring alphabet state.
    166         pressKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
    167         // Press/release letter key.
    168         chordingPressAndReleaseKey('a', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
    169         // Release "ABC" key, switch back to symbols.
    170         releaseKey(CODE_SYMBOL, SYMBOLS_SHIFTED);
    171 
    172         // Alphabet shifted -> symbols shifted -> "ABC" key + letter -> symbols shifted ->
    173         // alphabet.
    174         // Load keyboard
    175         loadKeyboard(ALPHABET_UNSHIFTED);
    176         // Press/release shift key, enter alphabet shifted.
    177         pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
    178         // Press/release "?123" key, enter into symbols.
    179         pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
    180         // Press/release "=\<" key, enter symbols shifted.
    181         pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
    182         // Press "ABC" key, enter into chording alphabet state.
    183         pressKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
    184         // Enter/release letter key.
    185         chordingPressAndReleaseKey('a', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
    186         // Release "ABC" key, switch back to symbols shifted.
    187         releaseKey(CODE_SYMBOL, SYMBOLS_SHIFTED);
    188         // Press/release "ABC" key, switch to alphabet (not alphabet shifted).
    189         pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
    190 
    191         // Alphabet shift locked -> symbols shifted -> "ABC" key + letter -> symbols shifted
    192         // -> alphabet shift locked.
    193         // Load keyboard
    194         loadKeyboard(ALPHABET_UNSHIFTED);
    195         // Long press shift key, enter alphabet shift locked.
    196         longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
    197                 ALPHABET_SHIFT_LOCKED);
    198         // Press/release "?123" key, enter into symbols.
    199         pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
    200         // Press/release "=\<" key, enter symbols shifted.
    201         pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
    202         // Press "ABC" key, enter into chording alphabet shift locked.
    203         pressKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED);
    204         // Enter/release letter key.
    205         chordingPressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
    206         // Release "ABC" key, switch back to symbols shifted.
    207         releaseKey(CODE_SYMBOL, SYMBOLS_SHIFTED);
    208         // Press/release "ABC" key, switch to alphabet shift locked.
    209         pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
    210 
    211         // Alphabet shift locked -> symbols shifted -> "=\<" key + letter -> symbols shifted
    212         // -> alphabet shift locked.
    213         // Load keyboard
    214         loadKeyboard(ALPHABET_UNSHIFTED);
    215         // Long press shift key, enter alphabet shift locked.
    216         longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
    217                 ALPHABET_SHIFT_LOCKED);
    218         // Press/release "?123" key, enter into symbols.
    219         pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
    220         // Press/release "=\<" key, enter symbols shifted.
    221         pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
    222         // Press "=\<" key, enter into symbols chording state.
    223         pressKey(CODE_SHIFT, SYMBOLS_UNSHIFTED);
    224         // Enter/release symbols letter key.
    225         chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
    226         // Release "=\<" key, switch back to symbols shifted.
    227         releaseKey(CODE_SHIFT, SYMBOLS_SHIFTED);
    228         // Press/release "ABC" key, switch to alphabet shift locked.
    229         pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
    230     }
    231 
    232     // Chording input in automatic upper case.
    233     public void testChordingAutomaticUpperCase() {
    234         // Set capitalize the first character of all words mode.
    235         setAutoCapsMode(CAP_MODE_WORDS);
    236 
    237         // Update shift state with auto caps enabled.
    238         pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
    239         // Press shift key and hold, enter into chording shift state.
    240         pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
    241         // Press/release letter key.
    242         chordingPressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
    243         // Release shift key, switch back to alphabet.
    244         releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
    245 
    246         // Update shift state with auto caps enabled.
    247         pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
    248         // Press "123?" key and hold, enter into chording symbols state.
    249         pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
    250         // Press/release symbol letter key.
    251         chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
    252         // Release "123?" key, switch back to alphabet.
    253         releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
    254     }
    255 
    256     // Chording letter key with shift key.
    257     public void testChordingLetterAndShiftKey() {
    258         // Press letter key and hold.
    259         pressKey('z', ALPHABET_UNSHIFTED);
    260         // Press shift key, {@link PointerTracker} will fire a phantom release letter key.
    261         chordingReleaseKey('z', ALPHABET_UNSHIFTED);
    262         chordingPressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
    263         // Press another letter key and hold.
    264         chordingPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
    265         // Release shift key
    266         releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
    267     }
    268 
    269     // Multi touch input in manual shifted.
    270     public void testMultiTouchManualShifted() {
    271         // Press/release shift key, enter into alphabet shifted.
    272         pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
    273 
    274         // Press 'X' key and hold
    275         pressKey('X', ALPHABET_MANUAL_SHIFTED);
    276         // Press 'z' key and hold, switch back to alphabet unshifted.
    277         chordingPressKey('z', ALPHABET_UNSHIFTED);
    278         // Release 'X' key
    279         releaseKey('X', ALPHABET_UNSHIFTED);
    280         // Release 'z' key
    281         releaseKey('z', ALPHABET_UNSHIFTED);
    282     }
    283 
    284     // Multi touch input in automatic upper case.
    285     public void testMultiTouchAutomaticUpperCase() {
    286         // Set auto word caps mode on.
    287         setAutoCapsMode(CAP_MODE_WORDS);
    288         // Update shift state with auto caps enabled.
    289         pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
    290 
    291         // Press 'X' key and hold
    292         pressKey('X', ALPHABET_AUTOMATIC_SHIFTED);
    293         // Press 'z' key and hold, switch back to alphabet unshifted.
    294         chordingPressKey('z', ALPHABET_UNSHIFTED);
    295         // Release 'X' key
    296         releaseKey('X', ALPHABET_UNSHIFTED);
    297         // Release 'z' key
    298         releaseKey('z', ALPHABET_UNSHIFTED);
    299     }
    300 
    301     // Multi touch input in capitalize character mode.
    302     public void testMultiTouchCapModeCharacter() {
    303         // Set auto character caps mode on.
    304         setAutoCapsMode(CAP_MODE_CHARACTERS);
    305         // Update shift state with auto caps enabled.
    306         pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
    307 
    308         // Press 'X' key and hold
    309         pressKey('X', ALPHABET_AUTOMATIC_SHIFTED);
    310         // Press 'Z' key and hold, stay in automatic shifted mode.
    311         chordingPressKey('Z', ALPHABET_AUTOMATIC_SHIFTED);
    312         // Release 'X' key
    313         releaseKey('X', ALPHABET_AUTOMATIC_SHIFTED);
    314         // Release 'Z' key
    315         releaseKey('Z', ALPHABET_AUTOMATIC_SHIFTED);
    316     }
    317 
    318     // Multi touch shift chording input in manual shifted.
    319     public void testMultiTouchShiftChordingManualShifted() {
    320         // Press/release shift key, enter into alphabet shifted.
    321         pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
    322 
    323         // Press shift key and hold, stays in alphabet shifted.
    324         pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
    325         // Press 'X' key and hold
    326         chordingPressKey('X', ALPHABET_MANUAL_SHIFTED);
    327         // Press 'Z' key and hold, stays in alphabet shifted.
    328         chordingPressKey('Z', ALPHABET_MANUAL_SHIFTED);
    329         // Release 'X' key
    330         releaseKey('X', ALPHABET_MANUAL_SHIFTED);
    331         // Release 'Z' key
    332         releaseKey('Z', ALPHABET_MANUAL_SHIFTED);
    333         // Release shift key.
    334         releaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
    335     }
    336 
    337     // Multi touch shift chording input in automatic upper case.
    338     public void testMultiTouchShiftChordingAutomaticUpperCase() {
    339         // Set auto word caps mode on.
    340         setAutoCapsMode(CAP_MODE_WORDS);
    341         // Update shift state with auto caps enabled.
    342         pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
    343 
    344         // Press shift key and hold, switch to alphabet shifted.
    345         pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
    346         // Press 'X' key and hold
    347         chordingPressKey('X', ALPHABET_MANUAL_SHIFTED);
    348         // Press 'Z' key and hold, stays in alphabet shifted.
    349         chordingPressKey('Z', ALPHABET_MANUAL_SHIFTED);
    350         // Release 'X' key
    351         releaseKey('X', ALPHABET_MANUAL_SHIFTED);
    352         // Release 'Z' key
    353         releaseKey('Z', ALPHABET_MANUAL_SHIFTED);
    354         // Release shift key.
    355         releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
    356     }
    357 
    358     // Multi touch shift chording input in capitalize character mode.
    359     public void testMultiTouchShiftChordingCapModeCharacter() {
    360         // Set auto character caps mode on.
    361         setAutoCapsMode(CAP_MODE_CHARACTERS);
    362         // Update shift state with auto caps enabled.
    363         pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
    364 
    365         // Press shift key and hold, switch to alphabet shifted.
    366         pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
    367         // Press 'X' key and hold
    368         chordingPressKey('X', ALPHABET_MANUAL_SHIFTED);
    369         // Press 'Z' key and hold, stay in automatic shifted mode.
    370         chordingPressKey('Z', ALPHABET_MANUAL_SHIFTED);
    371         // Release 'X' key
    372         releaseKey('X', ALPHABET_MANUAL_SHIFTED);
    373         // Release 'Z' key
    374         releaseKey('Z', ALPHABET_MANUAL_SHIFTED);
    375         // Release shift key.
    376         releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
    377     }
    378 
    379     public void testLongPressShiftAndChording() {
    380         // Long press shift key, enter maybe shift locked.
    381         longPressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
    382         // Press/release letter key, remain in manual shifted.
    383         chordingPressAndReleaseKey('A', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
    384         // Release shift key, back to alphabet (not shift locked).
    385         releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
    386 
    387         // Long press shift key, enter alphabet shift locked.
    388         longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
    389                 ALPHABET_SHIFT_LOCKED);
    390         // Long press shift key, enter maybe alphabet.
    391         longPressKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_SHIFT_LOCK_SHIFTED);
    392         // Press/release letter key, remain in manual shifted.
    393         chordingPressAndReleaseKey('A', ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_SHIFT_LOCK_SHIFTED);
    394         // Release shift key, back to shift locked (not alphabet).
    395         releaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCKED);
    396         // Long press shift key, enter alphabet
    397         longPressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_SHIFT_LOCK_SHIFTED,
    398                 ALPHABET_UNSHIFTED);
    399 
    400         // Press/release shift key, enter alphabet shifted.
    401         pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
    402         // Long press shift key, enter maybe alphabet.
    403         longPressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
    404         // Press/release letter key, remain in manual shifted.
    405         chordingPressAndReleaseKey('A', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
    406         // Release shift key, back to alphabet shifted (not alphabet).
    407         releaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
    408 
    409         // Set capitalize the first character of all words mode.
    410         setAutoCapsMode(CAP_MODE_WORDS);
    411         // Load keyboard, should be in automatic shifted.
    412         loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
    413         // Long press shift key, enter maybe shift locked.
    414         longPressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
    415         // Press/release letter key, remain in manual shifted.
    416         chordingPressAndReleaseKey('A', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
    417         // Release shift key, back to alphabet (not shift locked).
    418         releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
    419     }
    420 
    421     public void testDoubleTapShiftAndChording() {
    422         // TODO: The following tests fail due to bug. Temporarily commented.
    423         // First shift key tap.
    424         pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
    425         // Second shift key tap, maybe shift locked.
    426         secondPressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
    427         // Press/release letter key, remain in manual shifted.
    428         chordingPressAndReleaseKey('A', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
    429         // Release shift key, back to alphabet shifted (not shift locked).
    430         releaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
    431 
    432         // Long press shift key, enter alphabet shift locked.
    433         longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
    434                 ALPHABET_SHIFT_LOCKED);
    435         // First shift key tap.
    436         pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
    437         // Second shift key tap, maybe shift unlocked.
    438         secondPressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
    439         // Press/release letter key, remain in manual shifted.
    440         chordingPressAndReleaseKey('A', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
    441         // Release shift key, back to alphabet (not shift locked).
    442         releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
    443 
    444         // Set capitalize the first character of all words mode.
    445         setAutoCapsMode(CAP_MODE_WORDS);
    446         // Load keyboard, should be in automatic shifted.
    447         loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
    448         // First shift key tap.
    449         pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
    450         // Second shift key tap, maybe shift locked.
    451         secondPressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
    452         // Press/release letter key, remain in manual shifted.
    453         chordingPressAndReleaseKey('A', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
    454         // Release shift key, back to alphabet (not shift locked).
    455         releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
    456     }
    457 }
    458