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
17package com.android.inputmethod.keyboard.internal;
18
19public 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 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, switch back to alphabet shifted.
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, updated to alphabet unshifted.
355        releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
356
357        // Update shift state with auto caps enabled.
358        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
359
360        // Press shift key and hold, switch to alphabet shifted.
361        pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
362        // Press 'X' key and hold
363        chordingPressKey('X', ALPHABET_MANUAL_SHIFTED);
364        // Release 'X' key
365        releaseKey('X', ALPHABET_MANUAL_SHIFTED);
366        // Press  key and hold, stays in alphabet shifted.
367        chordingPressKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_MANUAL_SHIFTED);
368        // Release 'Z' key
369        releaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_MANUAL_SHIFTED);
370        // Release shift key, updated to alphabet automatic shifted.
371        releaseKey(CODE_SHIFT, ALPHABET_AUTOMATIC_SHIFTED);
372    }
373
374    // Multi touch shift chording input in capitalize character mode.
375    public void testMultiTouchShiftChordingCapModeCharacter() {
376        // Set auto character caps mode on.
377        setAutoCapsMode(CAP_MODE_CHARACTERS);
378        // Update shift state with auto caps enabled.
379        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
380
381        // Press shift key and hold, switch to alphabet shifted.
382        pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
383        // Press 'X' key and hold
384        chordingPressKey('X', ALPHABET_MANUAL_SHIFTED);
385        // Press 'Z' key and hold, stay in automatic shifted mode.
386        chordingPressKey('Z', ALPHABET_MANUAL_SHIFTED);
387        // Release 'X' key
388        releaseKey('X', ALPHABET_MANUAL_SHIFTED);
389        // Release 'Z' key
390        releaseKey('Z', ALPHABET_MANUAL_SHIFTED);
391        // Release shift key, updated to alphabet automatic shifted.
392        releaseKey(CODE_SHIFT, ALPHABET_AUTOMATIC_SHIFTED);
393    }
394
395    public void testLongPressShiftAndChording() {
396        // Long press shift key, enter maybe shift locked.
397        longPressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
398        // Press/release letter key, remain in manual shifted.
399        chordingPressAndReleaseKey('A', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
400        // Release shift key, back to alphabet (not shift locked).
401        releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
402
403        // Long press shift key, enter alphabet shift locked.
404        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
405                ALPHABET_SHIFT_LOCKED);
406        // Long press shift key, enter maybe alphabet.
407        longPressKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_SHIFT_LOCK_SHIFTED);
408        // Press/release letter key, remain in manual shifted.
409        chordingPressAndReleaseKey('A', ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_SHIFT_LOCK_SHIFTED);
410        // Release shift key, back to shift locked (not alphabet).
411        releaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCKED);
412        // Long press shift key, enter alphabet
413        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_SHIFT_LOCK_SHIFTED,
414                ALPHABET_UNSHIFTED);
415
416        // Press/release shift key, enter alphabet shifted.
417        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
418        // Long press shift key, enter maybe alphabet.
419        longPressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
420        // Press/release letter key, remain in manual shifted.
421        chordingPressAndReleaseKey('A', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
422        // Release shift key, back to alphabet shifted (not alphabet).
423        releaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
424
425        // Set capitalize the first character of all words mode.
426        setAutoCapsMode(CAP_MODE_WORDS);
427        // Load keyboard, should be in automatic shifted.
428        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
429        // Long press shift key, enter maybe shift locked.
430        longPressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
431        // Press/release letter key, remain in manual shifted.
432        chordingPressAndReleaseKey('A', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
433        // Release shift key, back to alphabet (not shift locked).
434        releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
435    }
436
437    public void testDoubleTapShiftAndChording() {
438        // TODO: The following tests fail due to bug. Temporarily commented.
439//        // First shift key tap.
440//        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
441//        // Second shift key tap, maybe shift locked.
442//        secondPressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
443//        // Press/release letter key, remain in manual shifted.
444//        chordingPressAndReleaseKey('A', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
445//        // Release shift key, back to alphabet shifted (not shift locked).
446//        releaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
447//
448//        // Long press shift key, enter alphabet shift locked.
449//        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
450//                ALPHABET_SHIFT_LOCKED);
451//        // First shift key tap.
452//        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
453//        // Second shift key tap, maybe shift unlocked.
454//        secondPressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
455//        // Press/release letter key, remain in manual shifted.
456//        chordingPressAndReleaseKey('A', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
457//        // Release shift key, back to alphabet (not shift locked).
458//        releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
459//
460//        // Set capitalize the first character of all words mode.
461//        setAutoCapsMode(CAP_MODE_WORDS);
462//        // Load keyboard, should be in automatic shifted.
463//        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
464//        // First shift key tap.
465//        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
466//        // Second shift key tap, maybe shift locked.
467//        secondPressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
468//        // Press/release letter key, remain in manual shifted.
469//        chordingPressAndReleaseKey('A', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
470//        // Release shift key, back to alphabet (not shift locked).
471//        releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
472    }
473}
474