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