KeyboardStateSingleTouchTests.java revision 06bc1db017b14614353137fde035d2eed666a74f
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 mode.
21    public void testShift() {
22        // Press/release shift key, enter into shift state.
23        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
24        // Press/release shift key, back to normal state.
25        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
26
27        // Press/release shift key, enter into shift state.
28        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
29        // Press/release letter key, switch back to normal state.
30        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
31    }
32
33    // Shift key sliding input.
34    public void testShiftSliding() {
35        // Press and slide from shift key.
36        pressAndSlideFromKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
37
38        // Enter/release letter key, switch back to alphabet.
39        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
40    }
41
42    // Switching between alphabet and symbols.
43    public void testAlphabetAndSymbols() {
44        // Press/release "?123" key, enter into symbols.
45        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
46        // Press/release "?123" key, back to alphabet.
47        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
48    }
49
50    // Switching between alphabet shift locked and symbols.
51    public void testAlphabetShiftLockedAndSymbols() {
52        // Long press shift key, enter alphabet shift locked.
53        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
54
55        // Press/release "?123" key, enter into symbols.
56        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
57
58        // Press/release "ABC" key, switch back to shift locked mode.
59        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
60    }
61
62    // Symbols key sliding input.
63    public void testSymbolsSliding() {
64        // Press and slide from "123?" key.
65        pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
66
67        // Enter/release into symbol key, switch back to alphabet.
68        pressAndReleaseKey('!', SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
69    }
70
71    // Switching between symbols and symbols shifted.
72    public void testSymbolsAndSymbolsShifted() {
73        // Press/release "?123" key, enter into symbols.
74        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
75
76        // Press/release "=\<" key, enter into symbols shifted.
77        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
78
79        // Press/release "?123" key, enter into symbols.
80        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
81    }
82
83    // Symbols shift sliding input
84    public void testSymbolsShiftSliding() {
85        // Press/release "?123" key, enter into symbols.
86        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
87
88        // Press and slide from "=\<" key.
89        pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
90
91        // Enter/release symbol shifted letter key, switch back to symbols.
92        pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_UNSHIFTED);
93    }
94
95    // Symbols shift sliding input from symbols shifted.
96    public void testSymbolsShiftSliding2() {
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
103        // Press and slide from "123?" key.
104        pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
105
106        // Enter/release symbol letter key, switch back to symbols shifted.
107        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_SHIFTED);
108    }
109
110    // Automatic switch back to alphabet from symbols by space key.
111    public void testSwitchBackBySpace() {
112        // Press/release "?123" key, enter into symbols.
113        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
114
115        // Enter a symbol letter.
116        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
117
118        // Enter space, switch back to alphabet.
119        pressAndReleaseKey(CODE_SPACE, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
120    }
121
122    // Automatic switch back to shift locked test.
123    public void testSwitchBackBySpaceInShiftLocked() {
124        // Long press shift key, enter alphabet shift locked.
125        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
126
127        // Press/release "?123" key, enter into symbols.
128        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
129
130        // Enter a symbol letter.
131        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
132
133        // Enter space, switch back to alphabet.
134        pressAndReleaseKey(CODE_SPACE, SYMBOLS_UNSHIFTED, ALPHABET_SHIFT_LOCKED);
135    }
136
137
138    // Automatic switch back to alphabet from symbols by registered letters.
139    public void testSwitchBackChar() {
140        // Set switch back chars.
141        final String switchBackSymbols = "'";
142        final int switchBackCode = switchBackSymbols.codePointAt(0);
143        setLayoutSwitchBackSymbols(switchBackSymbols);
144        loadKeyboard(ALPHABET_UNSHIFTED);
145
146        // Press/release "?123" key, enter into symbols.
147        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
148
149        // Enter a symbol letter.
150        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
151
152        // Enter switch back letter, switch back to alphabet.
153        pressAndReleaseKey(switchBackCode, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
154    }
155
156    // Automatic upper case test
157    public void testAutomaticUpperCase() {
158        // Set auto caps mode on.
159        setAutoCapsMode(AUTO_CAPS);
160
161        // Update shift state with auto caps enabled.
162        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
163
164        // Press/release shift key, back to alphabet.
165        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
166    }
167
168    // Sliding from shift key in automatic upper case.
169    public void testAutomaticUpperCaseSliding() {
170        // Set auto caps mode on.
171        setAutoCapsMode(AUTO_CAPS);
172
173        // Update shift state with auto caps enabled.
174        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
175
176        // Press and slide from shift key.
177        pressAndSlideFromKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
178
179        // Enter and release letter key, back to alphabet.
180        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
181    }
182
183    // Sliding from symbol key in automatic upper case.
184    public void testAutomaticUpperCaseSliding2() {
185        // Set auto caps mode on.
186        setAutoCapsMode(AUTO_CAPS);
187
188        // Update shift state with auto caps enabled.
189        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
190
191        // Press and slide from "123?" key.
192        pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
193
194        // Enter and release symbol letter keys, back to alphabet.
195        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
196    }
197
198    // Long press shift key.
199    // TODO: Move long press recognizing timer/logic into KeyboardState.
200    public void testLongPressShift() {
201        // Long press shift key, enter alphabet shift locked.
202        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
203
204        // Press/release letter key, remain in shift locked.
205        pressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
206
207        // Press/release letter key, remain in shift locked.
208        pressAndReleaseKey('B', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
209
210        // Press/release word separator, remain in shift locked.
211        pressAndReleaseKey(CODE_SPACE, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
212
213        // Long press shift key, back to alphabet.
214        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
215     }
216
217    // Leave shift lock with single tap shift key.
218    public void testShiftInShiftLock() {
219        // Long press shift key, enter alphabet shift locked.
220        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
221
222        // Press/release shift key, back to alphabet.
223        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
224    }
225
226    // Double tap shift key.
227    // TODO: Move double tap recognizing timer/logic into KeyboardState.
228    public void testDoubleTapShift() {
229        // First shift key tap.
230        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
231
232        // Second shift key tap.
233        // Double tap recognized in LatinKeyboardView.KeyTimerHandler.
234        secondTapShiftKey(ALPHABET_SHIFT_LOCKED);
235
236        // First shift key tap.
237        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
238
239        // Second shift key tap.
240        // Second tap is ignored in LatinKeyboardView.KeyTimerHandler.
241    }
242
243    // Update shift state.
244    public void testUpdateShiftState() {
245        // Set auto caps mode on.
246        setAutoCapsMode(AUTO_CAPS);
247
248        // Update shift state.
249        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
250
251        // Press/release letter key, back to alphabet.
252        pressAndReleaseKey('A', ALPHABET_AUTOMATIC_SHIFTED, ALPHABET_UNSHIFTED);
253
254        // Press/release letter key
255        pressAndReleaseKey('b', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
256
257        // Press/release auto caps trigger letter, back to automatic shifted.
258        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
259    }
260
261    // Update shift state when shift locked.
262    public void testUpdateShiftStateInShiftLocked() {
263        // Set auto caps mode on.
264        setAutoCapsMode(AUTO_CAPS);
265
266        // Long press shift key, enter alphabet shift locked.
267        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
268
269        // Update shift state when shift locked
270        updateShiftState(ALPHABET_SHIFT_LOCKED);
271    }
272
273    // Change focus to new text field.
274    public void testChangeFocus() {
275        // Press/release shift key.
276        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
277        // Change focus to new text field.
278        loadKeyboard(ALPHABET_UNSHIFTED);
279
280        // Long press shift key, enter alphabet shift locked.
281        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
282        // Change focus to new text field.
283        loadKeyboard(ALPHABET_UNSHIFTED);
284
285        // Press/release symbol key.
286        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
287        // Change focus to new text field.
288        loadKeyboard(ALPHABET_UNSHIFTED);
289
290        // Press/release symbol key.
291        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
292        // Press/release shift key.
293        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
294        // Change focus to new text field.
295        loadKeyboard(ALPHABET_UNSHIFTED);
296    }
297
298    // Change focus to auto caps text field.
299    public void testChangeFocusAutoCaps() {
300        // Set auto caps mode on.
301        setAutoCapsMode(AUTO_CAPS);
302
303        // Update shift state.
304        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
305        // Change focus to new text field.
306        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
307
308        // Press/release shift key, enter alphabet.
309        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
310        // Change focus to new text field.
311        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
312
313        // Long press shift key, enter alphabet shift locked.
314        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
315        // Change focus to new text field.
316        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
317
318        // Press/release symbol key.
319        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
320        // Change focus to new text field.
321        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
322
323        // Press/release symbol key.
324        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
325        // Press/release shift key.
326        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
327        // Change focus to new text field.
328        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
329    }
330
331    // Change orientation.
332    public void testChangeOrientation() {
333        // Press/release shift key.
334        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
335        // Rotate device.
336        rotateDevice(ALPHABET_MANUAL_SHIFTED);
337
338        // Long press shift key, enter alphabet shift locked.
339        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
340        // Rotate device.
341        rotateDevice(ALPHABET_SHIFT_LOCKED);
342
343        // Press/release symbol key.
344        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
345        // Rotate device.
346        rotateDevice(SYMBOLS_UNSHIFTED);
347
348        // Press/release shift key.
349        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
350        // Rotate device.
351        rotateDevice(SYMBOLS_SHIFTED);
352    }
353}
354