• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
testChordingAlphabet()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.
testChordingShifted()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.
testChordingShiftLocked()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.
testChordingSymbols()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.
testChordingSymbolsShifted()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.
testChordingAutomaticUpperCase()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.
testChordingLetterAndShiftKey()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.
testMultiTouchManualShifted()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.
testMultiTouchAutomaticUpperCase()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.
testMultiTouchCapModeCharacter()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.
testMultiTouchShiftChordingManualShifted()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.
testMultiTouchShiftChordingAutomaticUpperCase()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.
testMultiTouchShiftChordingCapModeCharacter()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 
testLongPressShiftAndChording()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 
testDoubleTapShiftAndChording()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