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 KeyboardStateSingleTouchTests extends KeyboardStateTestsBase {
20    // Shift key in alphabet.
21    public void testShiftAlphabet() {
22        // Press/release shift key, enter into alphabet shifted.
23        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
24
25        // Press/release shift key, back to alphabet.
26        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
27
28        // Press/release shift key, enter into alphabet shifted.
29        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
30        // Press/release letter key, switch back to alphabet.
31        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
32    }
33
34    // Shift key in symbols.
35    public void testShiftSymbols() {
36        // Press/release "?123" key, enter into symbols.
37        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
38
39        // Press/release "=\<" key, enter into symbols shifted.
40        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
41
42        // Press/release "?123" key, back to symbols.
43        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
44
45        // Press/release "=\<" key, enter into symbols shifted.
46        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
47        // Press/release symbol letter key, remain in symbols shifted.
48        pressAndReleaseKey('1', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
49    }
50
51    // Switching between alphabet and symbols.
52    public void testAlphabetAndSymbols() {
53        // Press/release "?123" key, enter into symbols.
54        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
55        // Press/release "ABC" key, back to alphabet.
56        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
57        // Press/release "?123" key, enter into symbols.
58        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
59
60        // Press/release "=\<" key, enter into symbols shifted.
61        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
62        // Press/release "ABC" key, back to alphabet.
63        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
64        // Press/release "?123" key, back to symbols (not symbols shifted).
65        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
66    }
67
68    // Switching between alphabet shifted and symbols.
69    public void testAlphabetShiftedAndSymbols() {
70        // Press/release shift key, enter into alphabet shifted.
71        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
72
73        // Press/release "?123" key, enter into symbols.
74        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
75        // Press/release "ABC" key, back to alphabet (not alphabet shifted).
76        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
77
78        // Press/release shift key, enter into alphabet shifted.
79        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
80        // Press/release "?123" key, enter into symbols.
81        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
82        // Press/release "=\< key, enter into symbols shifted.
83        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
84        // Press/release "ABC" key, back to alphabet (not alphabet shifted).
85        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
86    }
87
88    // Switching between alphabet shift locked and symbols.
89    public void testAlphabetShiftLockedAndSymbols() {
90        // Long press shift key, enter alphabet shift locked.
91        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
92                ALPHABET_SHIFT_LOCKED);
93
94        // Press/release "?123" key, enter into symbols.
95        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
96        // Press/release "ABC" key, back to alphabet shift locked.
97        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
98        // Press/release "?123" key, enter into symbols.
99        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
100
101        // Press/release "=\<" key, enter into symbols shifted.
102        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
103        // Press/release "ABC" key, back to alphabet shift locked.
104        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
105        // Press/release "?123" key, back to symbols (not symbols shifted).
106        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
107    }
108
109    // Automatic switch back to alphabet by space key.
110    public void testSwitchBackBySpace() {
111        // Press/release "?123" key, enter into symbols.
112        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
113        // Enter symbol letter.
114        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
115        // Enter space, switch back to alphabet.
116        pressAndReleaseKey(CODE_SPACE, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
117
118        // Press/release "?123" key, enter into symbols.
119        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
120        // Press/release "=\<" key, enter into symbols shifted.
121        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
122        // Enter symbol shift letter.
123        pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
124        // Enter space, switch back to alphabet.
125        pressAndReleaseKey(CODE_SPACE, SYMBOLS_SHIFTED, ALPHABET_UNSHIFTED);
126        // Press/release "?123" key, enter into symbols (not symbols shifted).
127        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
128    }
129
130    // Automatic switch back to alphabet shift locked test by space key.
131    public void testSwitchBackBySpaceShiftLocked() {
132        // Long press shift key, enter alphabet shift locked.
133        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
134                ALPHABET_SHIFT_LOCKED);
135
136        // Press/release "?123" key, enter into symbols.
137        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
138        // Enter symbol letter.
139        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
140        // Enter space, switch back to alphabet shift locked.
141        pressAndReleaseKey(CODE_SPACE, SYMBOLS_UNSHIFTED, ALPHABET_SHIFT_LOCKED);
142
143        // Press/release "?123" key, enter into symbols.
144        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
145        // Press/release "=\<" key, enter into symbols shifted.
146        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
147        // Enter symbol shift letter.
148        pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
149        // Enter space, switch back to alphabet shift locked.
150        pressAndReleaseKey(CODE_SPACE, SYMBOLS_SHIFTED, ALPHABET_SHIFT_LOCKED);
151    }
152
153    // Automatic switch back to alphabet by registered letters.
154    public void testSwitchBackChar() {
155        // Set switch back chars.
156        final String switchBackSymbols = "'";
157        final int switchBackCode = switchBackSymbols.codePointAt(0);
158        setLayoutSwitchBackSymbols(switchBackSymbols);
159        loadKeyboard(ALPHABET_UNSHIFTED);
160
161        // Press/release "?123" key, enter into symbols.
162        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
163        // Enter symbol letter.
164        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
165        // Enter switch back letter, switch back to alphabet.
166        pressAndReleaseKey(switchBackCode, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
167
168        // Press/release "?123" key, enter into symbols.
169        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
170        // Press/release "=\<" key, enter into symbols shifted.
171        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
172        // Enter symbol shift letter.
173        pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
174        // Enter switch abck letter, switch back to alphabet.
175        pressAndReleaseKey(switchBackCode, SYMBOLS_SHIFTED, ALPHABET_UNSHIFTED);
176    }
177
178    // Automatic switch back to alphabet shift locked by registered letters.
179    public void testSwitchBackCharShiftLocked() {
180        // Set switch back chars.
181        final String switchBackSymbols = "'";
182        final int switchBackCode = switchBackSymbols.codePointAt(0);
183        setLayoutSwitchBackSymbols(switchBackSymbols);
184        loadKeyboard(ALPHABET_UNSHIFTED);
185        // Long press shift key, enter alphabet shift locked.
186        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
187                ALPHABET_SHIFT_LOCKED);
188
189        // Press/release "?123" key, enter into symbols.
190        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
191        // Enter symbol letter.
192        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
193        // Enter switch back letter, switch back to alphabet shift locked.
194        pressAndReleaseKey(switchBackCode, SYMBOLS_UNSHIFTED, ALPHABET_SHIFT_LOCKED);
195
196        // Press/release "?123" key, enter into symbols.
197        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
198        // Press/release "=\<" key, enter into symbols shifted.
199        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
200        // Enter symbol shift letter.
201        pressAndReleaseKey(CODE_SPACE, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
202        // Enter switch back letter, switch back to alphabet shift locked.
203        pressAndReleaseKey(switchBackCode, SYMBOLS_SHIFTED, ALPHABET_SHIFT_LOCKED);
204    }
205
206    // Automatic upper case test
207    public void testAutomaticUpperCase() {
208        // Set capitalize the first character of all words mode.
209        setAutoCapsMode(CAP_MODE_WORDS);
210        // Load keyboard, should be in automatic shifted.
211        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
212
213        // Press/release letter key, switch to alphabet.
214        pressAndReleaseKey('A', ALPHABET_AUTOMATIC_SHIFTED, ALPHABET_UNSHIFTED);
215        // Press/release auto caps trigger letter, should be in automatic shifted.
216        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
217
218        // Press/release shift key, back to alphabet.
219        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
220        // Press/release letter key, remain in alphabet.
221        pressAndReleaseKey('a', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
222        // Press/release auto caps trigger letter, should be in automatic shifted.
223        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
224
225        // Press/release "?123" key, enter into symbols.
226        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
227        // Press/release symbol letter key, remain in symbols.
228        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
229        // Press/release space, switch back to automatic shifted.
230        pressAndReleaseKey(CODE_SPACE, SYMBOLS_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
231
232        // Press/release "?123" key, enter into symbols.
233        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
234        // Press/release "=\<" key, enter into symbols shifted.
235        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
236        // Press/release symbol shift letter key, remain in symbols shifted.
237        pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
238        // Press/release space, switch back to automatic shifted.
239        pressAndReleaseKey(CODE_SPACE, SYMBOLS_SHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
240    }
241
242    // Long press shift key.
243    public void testLongPressShift() {
244        // Set auto caps mode off.
245        setAutoCapsMode(CAP_MODE_OFF);
246        // Load keyboard, should be in alphabet.
247        loadKeyboard(ALPHABET_UNSHIFTED);
248        // Long press shift key, enter alphabet shift locked.
249        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
250                ALPHABET_SHIFT_LOCKED);
251        // Press/release shift key, back to alphabet.
252        pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
253
254        // Long press shift key, enter alphabet shift locked.
255        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
256                ALPHABET_SHIFT_LOCKED);
257        // Press/release letter key, remain in shift locked.
258        pressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
259        // Press/release word separator, remain in shift locked.
260        pressAndReleaseKey(CODE_SPACE, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
261        // Press/release shift key, back to alphabet.
262        pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
263
264        // Long press shift key, enter alphabet shift locked.
265        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
266                ALPHABET_SHIFT_LOCKED);
267        // Long press shift key, back to alphabet.
268        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_SHIFT_LOCK_SHIFTED,
269                ALPHABET_UNSHIFTED);
270
271        // Press/release shift key, enter alphabet shifted.
272        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
273        // Long press shift key, enter alphabet shift locked.
274        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
275                ALPHABET_SHIFT_LOCKED);
276        // Press/release shift key, back to alphabet.
277        pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
278
279        // Set capitalize the first character of all words mode.
280        setAutoCapsMode(CAP_MODE_WORDS);
281        // Load keyboard, should be in automatic shifted.
282        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
283        // Long press shift key, enter alphabet shift locked.
284        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
285                ALPHABET_SHIFT_LOCKED);
286        // Press/release shift key, back to alphabet.
287        pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
288    }
289
290    // Double tap shift key.
291    public void testDoubleTapShift() {
292        // First shift key tap.
293        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
294        // Second shift key tap.
295        secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
296
297        // First shift key tap.
298        pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
299        // Second shift key tap.
300        secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
301
302        // Press/release shift key, enter alphabet manual shifted.
303        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
304
305        // First shift key tap.
306        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
307        // Second shift key tap.
308        secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
309
310        // First shift key tap.
311        pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
312        // Second shift key tap.
313        secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
314
315        // Set capitalize the first character of all words mode.
316        setAutoCapsMode(CAP_MODE_WORDS);
317        // Load keyboard, should be in automatic shifted.
318        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
319
320        // First shift key tap.
321        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
322        // Second shift key tap.
323        secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
324
325        // First shift key tap.
326        pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
327        // Second shift key tap.
328        secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
329    }
330
331    // Update shift state.
332    public void testUpdateShiftState() {
333        // Set auto caps mode off.
334        setAutoCapsMode(CAP_MODE_OFF);
335        // Load keyboard, should be in alphabet.
336        loadKeyboard(ALPHABET_UNSHIFTED);
337        // Update shift state, remained in alphabet.
338        updateShiftState(ALPHABET_UNSHIFTED);
339
340        // Press/release shift key, enter alphabet shifted.
341        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
342        // Update shift state, back to alphabet.
343        updateShiftState(ALPHABET_UNSHIFTED);
344
345        // Long press shift key, enter alphabet shift locked.
346        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
347                ALPHABET_SHIFT_LOCKED);
348        // Update shift state, remained in alphabet shift locked.
349        updateShiftState(ALPHABET_SHIFT_LOCKED);
350        // Long press shift key, back to alphabet.
351        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_SHIFT_LOCK_SHIFTED,
352                ALPHABET_UNSHIFTED);
353
354        // Press/release "?123" key, enter into symbols.
355        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
356        // Update shift state, remained in symbols.
357        updateShiftState(SYMBOLS_UNSHIFTED);
358
359        // Press/release "=\<" key, enter symbols shifted.
360        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
361        // Update shift state, remained in symbols shifted.
362        updateShiftState(SYMBOLS_SHIFTED);
363
364        // Set capitalize the first character of all words mode.
365        setAutoCapsMode(CAP_MODE_WORDS);
366        // Load keyboard, should be in automatic shifted.
367        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
368        // Update shift state, remained in automatic shifted.
369        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
370
371        // Press/release shift key, enter alphabet.
372        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
373        // Press/release shift key, enter alphabet shifted.
374        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
375        // Update shift state, enter to automatic shifted (not alphabet shifted).
376        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
377
378        // Long press shift key, enter alphabet shift locked.
379        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
380                ALPHABET_SHIFT_LOCKED);
381        // Update shift state, remained in alphabet shift locked (not automatic shifted).
382        updateShiftState(ALPHABET_SHIFT_LOCKED);
383        // Long press shift key, back to alphabet.
384        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_SHIFT_LOCK_SHIFTED,
385                ALPHABET_UNSHIFTED);
386
387        // Load keyboard, should be in automatic shifted.
388        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
389        // Press/release "?123" key, enter into symbols.
390        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
391        // Update shift state, remained in symbols.
392        updateShiftState(SYMBOLS_UNSHIFTED);
393
394        // Press/release "=\<" key, enter symbols shifted.
395        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
396        // Update shift state, remained in symbols shifted.
397        updateShiftState(SYMBOLS_SHIFTED);
398    }
399
400    // Sliding input in alphabet.
401    public void testSlidingAlphabet() {
402        // Alphabet -> shift key + letter -> alphabet.
403        // Press and slide from shift key, enter alphabet shifted.
404        pressAndSlideFromKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
405        // Enter/release letter key, switch back to alphabet.
406        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
407
408        // Alphabet -> "?123" key + letter -> alphabet.
409        // Press and slide from "123?" key, enter symbols.
410        pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
411        // Enter/release into symbol letter key, switch back to alphabet.
412        pressAndReleaseKey('!', SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
413
414        // Alphabet shifted -> shift key + letter -> alphabet.
415        // Press/release shift key, enter alphabet shifted.
416        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
417        // Press and slide from shift key, remain alphabet shifted.
418        pressAndSlideFromKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
419        // Enter/release letter key, switch back to alphabet (not alphabet shifted).
420        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
421
422        // Alphabet shifted -> "?123" key + letter -> alphabet.
423        // Press/release shift key, enter alphabet shifted.
424        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
425        // Press and slide from "123?" key, enter symbols.
426        pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
427        // Enter/release into symbol letter key, switch back to alphabet (not alphabet shifted).
428        pressAndReleaseKey('!', SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
429
430        // Alphabet shift locked -> shift key + letter -> alphabet shift locked.
431        // Long press shift key, enter alphabet shift locked.
432        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
433                ALPHABET_SHIFT_LOCKED);
434        // Press and slide from "123?" key, enter symbols.
435        pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
436        // Enter/release into symbol letter key, switch back to alphabet shift locked.
437        pressAndReleaseKey('!', SYMBOLS_UNSHIFTED, ALPHABET_SHIFT_LOCKED);
438
439        // Alphabet shift locked -> "?123" key + letter -> alphabet shift locked.
440        // Press and slide from shift key, enter alphabet shifted.
441        pressAndSlideFromKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_SHIFT_LOCKED);
442        // Enter/release letter key, switch back to shift locked.
443        pressAndReleaseKey('Z', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
444    }
445
446    // Sliding input in symbols.
447    public void testSlidingSymbols() {
448        // Symbols -> "=\<" key + letter -> symbols.
449        // Press/release "?123" key, enter into symbols.
450        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
451        // Press and slide from shift key, enter symols shifted.
452        pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
453        // Enter/release symbol shifted letter key, switch back to symbols.
454        pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_UNSHIFTED);
455
456        // Symbols -> "ABC" key + letter -> Symbols.
457        // Press and slide from "ABC" key, enter alphabet.
458        pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
459        // Enter/release letter key, switch back to symbols.
460        pressAndReleaseKey('a', ALPHABET_UNSHIFTED, SYMBOLS_UNSHIFTED);
461        // Press/release "ABC" key, switch to alphabet.
462        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
463
464        // Alphabet shifted -> symbols -> "ABC" key + letter -> symbols ->
465        // alphabet.
466        // Load keyboard
467        loadKeyboard(ALPHABET_UNSHIFTED);
468        // Press/release shift key, enter alphabet shifted.
469        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
470        // Press/release "?123" key, enter into symbols.
471        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
472        // Press and slide from "ABC" key.
473        pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
474        // Enter/release letter key, switch back to symbols.
475        pressAndReleaseKey('a', ALPHABET_UNSHIFTED, SYMBOLS_UNSHIFTED);
476        // Press/release "ABC" key, switch to alphabet (not alphabet shifted).
477        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
478
479        // Alphabet shift locked -> symbols -> "ABC" key + letter -> symbols ->
480        // alphabet shift locked.
481        // Load keyboard
482        loadKeyboard(ALPHABET_UNSHIFTED);
483        // Long press shift key, enter alphabet shift locked.
484        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
485                ALPHABET_SHIFT_LOCKED);
486        // Press/release "?123" key, enter into symbols.
487        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
488        // Press and slide from "ABC" key, enter alphabet shift locked.
489        pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
490        // Enter/release letter key, switch back to symbols.
491        pressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, SYMBOLS_UNSHIFTED);
492        // Press/release "ABC" key, switch to alphabet shift locked.
493        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
494
495        // Alphabet shift locked -> symbols -> "=\<" key + letter -> symbols ->
496        // alphabet shift locked.
497        // Load keyboard
498        loadKeyboard(ALPHABET_UNSHIFTED);
499        // Long press shift key, enter alphabet shift locked.
500        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
501                ALPHABET_SHIFT_LOCKED);
502        // Press/release "?123" key, enter into symbols.
503        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
504        // Press and slide from "=\<" key, enter symbols shifted.
505        pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
506        // Enter/release symbols shift letter key, switch back to symbols.
507        pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_UNSHIFTED);
508        // Press/release "ABC" key, switch to alphabet shift locked.
509        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
510    }
511
512    // Sliding input in symbols shifted.
513    public void testSlidingSymbolsShifted() {
514        // Symbols shifted -> "?123" + letter -> symbols shifted.
515        // Press/release "?123" key, enter into symbols.
516        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
517        // Press/release "=\<" key, enter into symbols shifted.
518        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
519        // Press and slide from shift key, enter symbols.
520        pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
521        // Enter/release symbol letter key, switch back to symbols shifted.
522        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_SHIFTED);
523
524        // Symbols shifted -> "ABC" key + letter -> symbols shifted.
525        // Press and slide from "ABC" key, enter alphabet.
526        pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
527        // Enter/release letter key, switch back to symbols shifted.
528        pressAndReleaseKey('a', ALPHABET_UNSHIFTED, SYMBOLS_SHIFTED);
529        // Press/release "ABC" key, switch to alphabet.
530        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
531
532        // Alphabet shifted -> symbols shifted -> "ABC" + letter -> symbols shifted ->
533        // alphabet.
534        // Load keyboard
535        loadKeyboard(ALPHABET_UNSHIFTED);
536        // Press/release shift key, enter alphabet shifted.
537        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
538        // Press/release "?123" key, enter into symbols.
539        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
540        // Press/release "=\<" key, enter into symbols shifted.
541        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
542        // Press and slide from "ABC" key.
543        pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
544        // Enter/release letter key, switch back to symbols shifted.
545        pressAndReleaseKey('a', ALPHABET_UNSHIFTED, SYMBOLS_SHIFTED);
546        // Press/release "ABC" key, switch to alphabet (not alphabet shifted).
547        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
548
549        // Alphabet shift locked -> symbols shifted -> "ABC" + letter -> symbols shifted ->
550        // alphabet shift locked.
551        // Load keyboard
552        loadKeyboard(ALPHABET_UNSHIFTED);
553        // Long press shift key, enter alphabet shift locked.
554        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
555                ALPHABET_SHIFT_LOCKED);
556        // Press/release "?123" key, enter into symbols.
557        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
558        // Press/release "=\<" key, enter into symbols shifted.
559        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
560        // Press and slide from "ABC" key.
561        pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
562        // Enter/release letter key, switch back to symbols shifted.
563        pressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, SYMBOLS_SHIFTED);
564        // Press/release "ABC" key, switch to alphabet shift locked.
565        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
566
567        // Alphabet shift locked -> symbols shifted -> "?123" + letter -> symbols shifted ->
568        // alphabet shift locked.
569        // Load keyboard
570        loadKeyboard(ALPHABET_UNSHIFTED);
571        // Long press shift key, enter alphabet shift locked.
572        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
573                ALPHABET_SHIFT_LOCKED);
574        // Press/release "?123" key, enter into symbols.
575        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
576        // Press/release "=\<" key, enter into symbols shifted.
577        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
578        // Press and slide from "?123" key.
579        pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
580        // Enter/release symbol letter key, switch back to symbols shifted.
581        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_SHIFTED);
582        // Press/release "ABC" key, switch to alphabet shift locked.
583        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
584    }
585
586    // Change focus to new text field.
587    public void testChangeFocus() {
588        // Press/release shift key.
589        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
590        // Change focus to new text field.
591        loadKeyboard(ALPHABET_UNSHIFTED);
592
593        // Long press shift key, enter alphabet shift locked.
594        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
595                ALPHABET_SHIFT_LOCKED);
596        // Change focus to new text field.
597        loadKeyboard(ALPHABET_UNSHIFTED);
598
599        // Press/release "?123" key.
600        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
601        // Change focus to new text field.
602        loadKeyboard(ALPHABET_UNSHIFTED);
603
604        // Press/release "?123" key.
605        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
606        // Press/release "=\<" key.
607        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
608        // Change focus to new text field.
609        loadKeyboard(ALPHABET_UNSHIFTED);
610    }
611
612    // Change focus to auto caps text field.
613    public void testChangeFocusAutoCaps() {
614        // Set capitalize the first character of all words mode.
615        setAutoCapsMode(CAP_MODE_WORDS);
616        // Change focus to new text field.
617        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
618
619        // Press/release shift key, enter alphabet.
620        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
621        // Change focus to new text field.
622        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
623
624        // Long press shift key, enter alphabet shift locked.
625        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
626                ALPHABET_SHIFT_LOCKED);
627        // Change focus to new text field.
628        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
629
630        // Press/release "?123" key.
631        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
632        // Change focus to new text field.
633        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
634
635        // Press/release "?123" key.
636        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
637        // Press/release "=\<" key.
638        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
639        // Change focus to new text field.
640        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
641    }
642
643    // Change orientation.
644    public void testChangeOrientation() {
645        // Alphabet -> rotate -> alphabet.
646        updateShiftState(ALPHABET_UNSHIFTED);
647        // Rotate device, remain in alphabet.
648        rotateDevice(ALPHABET_UNSHIFTED);
649
650        // Alphabet shifted -> rotate -> alphabet shifted.
651        // Press/release shift key, enter alphabet shifted.
652        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
653        // Rotate device, remain in alphabet shifted.
654        rotateDevice(ALPHABET_MANUAL_SHIFTED);
655
656        // Alphabet shift locked -> rotate -> alphabet shift locked.
657        // Long press shift key, enter alphabet shift locked.
658        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
659                ALPHABET_SHIFT_LOCKED);
660        // Rotate device, remain in alphabet shift locked.
661        rotateDevice(ALPHABET_SHIFT_LOCKED);
662
663        // Alphabet shift locked -> symbols -> rotate -> symbols ->
664        // Alphabet shift locked.
665        // Press/release "?123" key, enter symbols.
666        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
667        // Rotate device, remain in symbols,
668        rotateDevice(SYMBOLS_UNSHIFTED);
669        // Press/release "ABC" key, alphabet shift locked state should be maintained.
670        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
671
672        // Alphabet shift locked -> symbols shifted -> rotate -> symbols shifted ->
673        // Alphabet shift locked.
674        // Press/release "?123" key, enter symbols.
675        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
676        // Press/release "=\<" key, enter symbols shifted.
677        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
678        // Rotate device, remain in symbols shifted.
679        rotateDevice(SYMBOLS_SHIFTED);
680        // Press/release "ABC" key, alphabet shift locked state should be maintained.
681        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
682
683        // Alphabet shift locked -> symbols shifted -> alphabet shift locked -> rotate ->
684        // Alphabet shift locked -> symbols.
685        // Press/release "?123" key, enter symbols.
686        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
687        // Press/release "=\<" key, enter symbols shifted.
688        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
689        // Press/release "ABC" key, enter alphabet shift locked.
690        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
691        // Rotate device, remain in alphabet shift locked.
692        rotateDevice(ALPHABET_SHIFT_LOCKED);
693        // Press/release "?123" key, enter symbols (not symbols shifted).
694        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
695
696        // Alphabet -> symbols shifted -> alphabet -> rotate ->
697        // Alphabet -> symbols.
698        loadKeyboard(ALPHABET_UNSHIFTED);
699        // Press/release "?123" key, enter symbols.
700        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
701        // Press/release "=\<" key, enter symbols shifted.
702        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
703        // Press/release "ABC" key, enter alphabet.
704        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
705        // Rotate device, remain in alphabet shift locked.
706        rotateDevice(ALPHABET_UNSHIFTED);
707        // Press/release "?123" key, enter symbols (not symbols shifted).
708        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
709    }
710
711    // Rapidly type shift key.
712    public void testRapidShiftTyping() {
713        // Press/release shift key
714        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
715        // Rapidly press/release letter key.
716        secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
717        // Rapidly press/release shift key.
718        secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
719        // Rapidly press/release letter key.
720        secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
721        // Rapidly press/release shift key.
722        secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
723        // Rapidly press/release letter key.
724        secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
725
726        // Press/release shift key to enter alphabet manual shifted.
727        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
728        // Press/release shift key
729        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
730        // Rapidly press/release letter key.
731        secondPressAndReleaseKey('j', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
732        // Rapidly press/release shift key.
733        secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
734        // Rapidly press/release letter key.
735        secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
736        // Rapidly press/release shift key.
737        secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
738        // Rapidly press/release letter key.
739        secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
740
741        // Long press shift key to enter alphabet shift locked.
742        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
743                ALPHABET_SHIFT_LOCKED);
744        // Press/release shift key
745        pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
746        // Rapidly press/release letter key.
747        secondPressAndReleaseKey('j', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
748        // Rapidly press/release shift key.
749        secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
750        // Rapidly press/release letter key.
751        secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
752        // Rapidly press/release shift key.
753        secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
754        // Rapidly press/release letter key.
755        secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
756
757        // Set capitalize the first character of all words mode.
758        setAutoCapsMode(CAP_MODE_WORDS);
759        // Press/release auto caps trigger letter to enter alphabet automatic shifted.
760        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
761        // Press/release shift key
762        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
763        // Rapidly press/release letter key.
764        secondPressAndReleaseKey('j', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
765        // Rapidly press/release shift key.
766        secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
767        // Rapidly press/release letter key.
768        secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
769        // Rapidly press/release shift key.
770        secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
771        // Rapidly press/release letter key.
772        secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
773    }
774}
775