KeyboardStateSingleTouchTests.java revision 747ed9e99a6a83e54d97d96aa3cbb1abd11eaf0f
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        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
92
93        // Press/release "?123" key, enter into symbols.
94        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
95        // Press/release "ABC" key, back to alphabet shift locked.
96        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
97        // Press/release "?123" key, enter into symbols.
98        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
99
100        // Press/release "=\<" key, enter into symbols shifted.
101        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
102        // Press/release "ABC" key, back to alphabet shift locked.
103        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
104        // Press/release "?123" key, back to symbols (not symbols shifted).
105        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
106    }
107
108    // Automatic switch back to alphabet by space key.
109    public void testSwitchBackBySpace() {
110        // Press/release "?123" key, enter into symbols.
111        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
112        // Enter symbol letter.
113        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
114        // Enter space, switch back to alphabet.
115        pressAndReleaseKey(CODE_SPACE, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
116
117        // Press/release "?123" key, enter into symbols.
118        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
119        // Press/release "=\<" key, enter into symbols shifted.
120        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
121        // Enter symbol shift letter.
122        pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
123        // Enter space, switch back to alphabet.
124        pressAndReleaseKey(CODE_SPACE, SYMBOLS_SHIFTED, ALPHABET_UNSHIFTED);
125    }
126
127    // Automatic switch back to alphabet shift locked test by space key.
128    public void testSwitchBackBySpaceShiftLocked() {
129        // Long press shift key, enter alphabet shift locked.
130        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
131
132        // Press/release "?123" key, enter into symbols.
133        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
134        // Enter symbol letter.
135        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
136        // Enter space, switch back to alphabet shift locked.
137        pressAndReleaseKey(CODE_SPACE, SYMBOLS_UNSHIFTED, ALPHABET_SHIFT_LOCKED);
138
139        // Press/release "?123" key, enter into symbols.
140        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
141        // Press/release "=\<" key, enter into symbols shifted.
142        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
143        // Enter symbol shift letter.
144        pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
145        // Enter space, switch back to alphabet shift locked.
146        pressAndReleaseKey(CODE_SPACE, SYMBOLS_SHIFTED, ALPHABET_SHIFT_LOCKED);
147    }
148
149    // Automatic switch back to alphabet by registered letters.
150    public void testSwitchBackChar() {
151        // Set switch back chars.
152        final String switchBackSymbols = "'";
153        final int switchBackCode = switchBackSymbols.codePointAt(0);
154        setLayoutSwitchBackSymbols(switchBackSymbols);
155        loadKeyboard(ALPHABET_UNSHIFTED);
156
157        // Press/release "?123" key, enter into symbols.
158        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
159        // Enter symbol letter.
160        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
161        // Enter switch back letter, switch back to alphabet.
162        pressAndReleaseKey(switchBackCode, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
163
164        // Press/release "?123" key, enter into symbols.
165        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
166        // Press/release "=\<" key, enter into symbols shifted.
167        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
168        // Enter symbol shift letter.
169        pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
170        // Enter switch abck letter, switch back to alphabet.
171        pressAndReleaseKey(switchBackCode, SYMBOLS_SHIFTED, ALPHABET_UNSHIFTED);
172    }
173
174    // Automatic switch back to alphabet shift locked by registered letters.
175    public void testSwitchBackCharShiftLocked() {
176        // Set switch back chars.
177        final String switchBackSymbols = "'";
178        final int switchBackCode = switchBackSymbols.codePointAt(0);
179        setLayoutSwitchBackSymbols(switchBackSymbols);
180        loadKeyboard(ALPHABET_UNSHIFTED);
181        // Long press shift key, enter alphabet shift locked.
182        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
183
184        // Press/release "?123" key, enter into symbols.
185        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
186        // Enter symbol letter.
187        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
188        // Enter switch back letter, switch back to alphabet shift locked.
189        pressAndReleaseKey(switchBackCode, SYMBOLS_UNSHIFTED, ALPHABET_SHIFT_LOCKED);
190
191        // Press/release "?123" key, enter into symbols.
192        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
193        // Press/release "=\<" key, enter into symbols shifted.
194        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
195        // Enter symbol shift letter.
196        pressAndReleaseKey(CODE_SPACE, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
197        // Enter switch back letter, switch back to alphabet shift locked.
198        pressAndReleaseKey(switchBackCode, SYMBOLS_SHIFTED, ALPHABET_SHIFT_LOCKED);
199    }
200
201    // Automatic upper case test
202    public void testAutomaticUpperCase() {
203        // Set auto caps mode on.
204        setAutoCapsMode(AUTO_CAPS);
205        // Load keyboard, should be in automatic shifted.
206        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
207
208        // Press/release letter key, switch to alphabet.
209        pressAndReleaseKey('A', ALPHABET_AUTOMATIC_SHIFTED, ALPHABET_UNSHIFTED);
210        // Press/release auto caps trigger letter, should be in automatic shifted.
211        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
212
213        // Press/release shift key, back to alphabet.
214        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
215        // Press/release letter key, remain in alphabet.
216        pressAndReleaseKey('a', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
217        // Press/release auto caps trigger letter, should be in automatic shifted.
218        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
219
220        // Press/release "?123" key, enter into symbols.
221        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
222        // Press/release symbol letter key, remain in symbols.
223        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
224        // Press/release space, switch back to automatic shifted.
225        pressAndReleaseKey(CODE_SPACE, SYMBOLS_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
226
227        // Press/release "?123" key, enter into symbols.
228        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
229        // Press/release "=\<" key, enter into symbols shifted.
230        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
231        // Press/release symbol shift letter key, remain in symbols shifted.
232        pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
233        // Press/release space, switch back to automatic shifted.
234        pressAndReleaseKey(CODE_SPACE, SYMBOLS_SHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
235    }
236
237    // Long press shift key.
238    // TODO: Move long press recognizing timer/logic into KeyboardState.
239    public void testLongPressShift() {
240        // Long press shift key, enter alphabet shift locked.
241        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
242
243        // Press/release letter key, remain in shift locked.
244        pressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
245        // Press/release word separator, remain in shift locked.
246        pressAndReleaseKey(CODE_SPACE, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
247
248        // Press/release shift key, back to alphabet.
249        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
250
251        // Long press shift key, enter alphabet shift locked.
252        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
253
254        // Long press shift key, back to alphabet.
255        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
256    }
257
258    // Double tap shift key.
259    // TODO: Move double tap recognizing timer/logic into KeyboardState.
260    public void testDoubleTapShift() {
261        // First shift key tap.
262        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
263        // Second shift key tap.
264        // Double tap recognized in LatinKeyboardView.KeyTimerHandler.
265        secondTapShiftKey(ALPHABET_SHIFT_LOCKED);
266
267        // First shift key tap.
268        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
269        // Second shift key tap.
270        // Second tap is ignored in LatinKeyboardView.KeyTimerHandler.
271    }
272
273    // Update shift state.
274    public void testUpdateShiftState() {
275        // Set auto caps mode off.
276        setAutoCapsMode(NO_AUTO_CAPS);
277        // Load keyboard, should be in alphabet.
278        loadKeyboard(ALPHABET_UNSHIFTED);
279        // Update shift state, remained in alphabet.
280        updateShiftState(ALPHABET_UNSHIFTED);
281
282        // Press/release shift key, enter alphabet shifted.
283        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
284        // Update shift state, back to alphabet.
285        updateShiftState(ALPHABET_UNSHIFTED);
286
287        // Long press shift key, enter alphabet shift locked.
288        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
289        // Update shift state, remained in alphabet shift locked.
290        updateShiftState(ALPHABET_SHIFT_LOCKED);
291        // Long press shift key, back to alphabet.
292        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
293
294        // Press/release "?123" key, enter into symbols.
295        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
296        // Update shift state, remained in symbols.
297        updateShiftState(SYMBOLS_UNSHIFTED);
298
299        // Press/release "=\<" key, enter symbols shifted.
300        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
301        // Update shift state, remained in symbols shifted.
302        updateShiftState(SYMBOLS_SHIFTED);
303
304        // Set auto caps mode on.
305        setAutoCapsMode(AUTO_CAPS);
306        // Load keyboard, should be in automatic shifted.
307        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
308        // Update shift state, remained in automatic shifted.
309        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
310
311        // Press/release shift key, enter alphabet.
312        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
313        // Press/release shift key, enter alphabet shifted.
314        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
315        // Update shift state, enter to automatic shifted (not alphabet shifted).
316        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
317
318        // Long press shift key, enter alphabet shift locked.
319        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
320        // Update shift state, remained in alphabet shift locked (not automatic shifted).
321        updateShiftState(ALPHABET_SHIFT_LOCKED);
322        // Long press shift key, back to alphabet.
323        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
324
325        // Load keyboard, should be in automatic shifted.
326        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
327        // Press/release "?123" key, enter into symbols.
328        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
329        // Update shift state, remained in symbols.
330        updateShiftState(SYMBOLS_UNSHIFTED);
331
332        // Press/release "=\<" key, enter symbols shifted.
333        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
334        // Update shift state, remained in symbols shifted.
335        updateShiftState(SYMBOLS_SHIFTED);
336    }
337
338    // Sliding input in alphabet.
339    public void testSlidingAlphabet() {
340        // Alphabet -> shift key + letter -> alphabet.
341        // Press and slide from shift key, enter alphabet shifted.
342        pressAndSlideFromKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
343        // Enter/release letter key, switch back to alphabet.
344        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
345
346        // Alphabet -> "?123" key + letter -> alphabet.
347        // Press and slide from "123?" key, enter symbols.
348        pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
349        // Enter/release into symbol letter key, switch back to alphabet.
350        pressAndReleaseKey('!', SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
351
352        // Alphabet shifted -> shift key + letter -> alphabet.
353        // Press/release shift key, enter alphabet shifted.
354        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
355        // Press and slide from shift key, remain alphabet shifted.
356        pressAndSlideFromKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
357        // Enter/release letter key, switch back to alphabet (not alphabet shifted).
358        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
359
360        // Alphabet shifted -> "?123" key + letter -> alphabet.
361        // Press/release shift key, enter alphabet shifted.
362        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
363        // Press and slide from "123?" key, enter symbols.
364        pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
365        // Enter/release into symbol letter key, switch back to alphabet (not alphabet shifted).
366        pressAndReleaseKey('!', SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
367
368        // Alphabet shift locked -> shift key + letter -> alphabet shift locked.
369        // Long press shift key, enter alphabet shift locked.
370        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
371        // Press and slide from "123?" key, enter symbols.
372        pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
373        // Enter/release into symbol letter key, switch back to alphabet shift locked.
374        pressAndReleaseKey('!', SYMBOLS_UNSHIFTED, ALPHABET_SHIFT_LOCKED);
375
376        // Alphabet shift locked -> "?123" key + letter -> alphabet shift locked.
377        // Press and slide from shift key, enter alphabet shifted.
378        pressAndSlideFromKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
379        // Enter/release letter key, switch back to shift locked.
380        // TODO: This test fails due to bug, though the external behavior is correct.
381//        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
382        // TODO: Replace this with the above line once the bug fixed.
383        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
384    }
385
386    // Sliding input in symbols.
387    public void testSlidingSymbols() {
388        // Symbols -> "=\<" key + letter -> symbols.
389        // Press/release "?123" key, enter into symbols.
390        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
391        // Press and slide from shift key, enter symols shifted.
392        pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
393        // Enter/release symbol shifted letter key, switch back to symbols.
394        pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_UNSHIFTED);
395
396        // Symbols -> "ABC" key + letter -> Symbols.
397        // Press and slide from "ABC" key, enter alphabet.
398        pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
399        // Enter/release letter key, switch back to symbols.
400        pressAndReleaseKey('a', ALPHABET_UNSHIFTED, SYMBOLS_UNSHIFTED);
401        // Press/release "ABC" key, switch to alphabet.
402        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
403
404        // Alphabet shifted -> symbols -> "ABC" key + letter -> symbols -> alphabet.
405        // Load keyboard
406        loadKeyboard(ALPHABET_UNSHIFTED);
407        // Press/release shift key, enter alphabet shifted.
408        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
409        // Press/release "?123" key, enter into symbols.
410        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
411        // Press and slide from "ABC" key.
412        pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
413        // Enter/release letter key, switch back to symbols.
414        pressAndReleaseKey('a', ALPHABET_UNSHIFTED, SYMBOLS_UNSHIFTED);
415        // Press/release "ABC" key, switch to alphabet (not alphabet shifted).
416        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
417
418        // Alphabet shift locked -> symbols -> "ABC" key + letter -> symbols.
419        // -> alphabet shift locked.
420        // Load keyboard
421        loadKeyboard(ALPHABET_UNSHIFTED);
422        // Long press shift key, enter alphabet shift locked.
423        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
424        // Press/release "?123" key, enter into symbols.
425        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
426        // Press and slide from "ABC" key, enter alphabet shift locked.
427        pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
428        // Enter/release letter key, switch back to symbols.
429        pressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, SYMBOLS_UNSHIFTED);
430        // Press/release "ABC" key, switch to alphabet shift locked.
431        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
432    }
433
434    // Sliding input in symbols shifted.
435    public void testSlidingSymbolsShifted() {
436        // Symbols shifted -> "?123" + letter -> symbols shifted.
437        // Press/release "?123" key, enter into symbols.
438        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
439        // Press/release "=\<" key, enter into symbols shifted.
440        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
441        // Press and slide from shift key, enter symbols.
442        pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
443        // Enter/release symbol letter key, switch back to symbols shifted.
444        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_SHIFTED);
445
446        // Symbols shifted -> "ABC" key + letter -> symbols shifted.
447        // Press and slide from "ABC" key, enter alphabet.
448        pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
449        // Enter/release letter key, switch back to symbols shifted.
450        pressAndReleaseKey('a', ALPHABET_UNSHIFTED, SYMBOLS_SHIFTED);
451        // Press/release "ABC" key, switch to alphabet.
452        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
453
454        // Alphabet shifted -> symbols shifted -> "ABC" + letter -> symbols shifted -> alphabet.
455        // Load keyboard
456        loadKeyboard(ALPHABET_UNSHIFTED);
457        // Press/release shift key, enter alphabet shifted.
458        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
459        // Press/release "?123" key, enter into symbols.
460        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
461        // Press/release "=\<" key, enter into symbols shifted.
462        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
463        // Press and slide from "ABC" key.
464        pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
465        // Enter/release letter key, switch back to symbols shifted.
466        pressAndReleaseKey('a', ALPHABET_UNSHIFTED, SYMBOLS_SHIFTED);
467        // Press/release "ABC" key, switch to alphabet (not alphabet shifted).
468        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
469
470        // Alphabet shift locked -> symbols shifted -> "ABC" + letter -> symbols shifted
471        // -> alphabet shift locked.
472        // Load keyboard
473        loadKeyboard(ALPHABET_UNSHIFTED);
474        // Long press shift key, enter alphabet shift locked.
475        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
476        // Press/release "?123" key, enter into symbols.
477        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
478        // Press/release "=\<" key, enter into symbols shifted.
479        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
480        // Press and slide from "ABC" key.
481        pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
482        // Enter/release letter key, switch back to symbols shifted.
483        pressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, SYMBOLS_SHIFTED);
484        // Press/release "ABC" key, switch to alphabet shift locked.
485        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
486    }
487
488    // Change focus to new text field.
489    public void testChangeFocus() {
490        // Press/release shift key.
491        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
492        // Change focus to new text field.
493        loadKeyboard(ALPHABET_UNSHIFTED);
494
495        // Long press shift key, enter alphabet shift locked.
496        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
497        // Change focus to new text field.
498        loadKeyboard(ALPHABET_UNSHIFTED);
499
500        // Press/release "?123" key.
501        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
502        // Change focus to new text field.
503        loadKeyboard(ALPHABET_UNSHIFTED);
504
505        // Press/release "?123" key.
506        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
507        // Press/release "=\<" key.
508        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
509        // Change focus to new text field.
510        loadKeyboard(ALPHABET_UNSHIFTED);
511    }
512
513    // Change focus to auto caps text field.
514    public void testChangeFocusAutoCaps() {
515        // Set auto caps mode on.
516        setAutoCapsMode(AUTO_CAPS);
517
518        // Update shift state.
519        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
520        // Change focus to new text field.
521        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
522
523        // Press/release shift key, enter alphabet.
524        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
525        // Change focus to new text field.
526        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
527
528        // Long press shift key, enter alphabet shift locked.
529        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
530        // Change focus to new text field.
531        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
532
533        // Press/release "?123" key.
534        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
535        // Change focus to new text field.
536        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
537
538        // Press/release "?123" key.
539        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
540        // Press/release "=\<" key.
541        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
542        // Change focus to new text field.
543        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
544    }
545
546    // Change orientation.
547    public void testChangeOrientation() {
548        // Press/release shift key.
549        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
550        // Rotate device.
551        rotateDevice(ALPHABET_MANUAL_SHIFTED);
552
553        // Long press shift key, enter alphabet shift locked.
554        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
555        // Rotate device.
556        rotateDevice(ALPHABET_SHIFT_LOCKED);
557
558        // Press/release "?123" key.
559        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
560        // Rotate device.
561        rotateDevice(SYMBOLS_UNSHIFTED);
562
563        // Press/release "=\<" key.
564        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
565        // Rotate device.
566        rotateDevice(SYMBOLS_SHIFTED);
567    }
568}
569