• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of 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,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.inputmethod.keyboard.internal;
18 
19 import android.test.AndroidTestCase;
20 
21 import com.android.inputmethod.latin.common.Constants;
22 
23 public class KeyboardStateTestsBase extends AndroidTestCase
24         implements MockKeyboardSwitcher.MockConstants {
25     protected MockKeyboardSwitcher mSwitcher;
26 
27     @Override
setUp()28     protected void setUp() throws Exception {
29         super.setUp();
30 
31         mSwitcher = new MockKeyboardSwitcher();
32         mSwitcher.setAutoCapsMode(CAP_MODE_OFF);
33 
34         loadKeyboard(ALPHABET_UNSHIFTED);
35     }
36 
37     /**
38      * Set auto caps mode.
39      *
40      * @param autoCaps the auto cap mode.
41      */
setAutoCapsMode(final int autoCaps)42     public void setAutoCapsMode(final int autoCaps) {
43         mSwitcher.setAutoCapsMode(autoCaps);
44     }
45 
assertLayout(final String message, final int expected, final int actual)46     private static void assertLayout(final String message, final int expected, final int actual) {
47         assertTrue(message + ": expected=" + MockKeyboardSwitcher.getLayoutName(expected)
48                 + " actual=" + MockKeyboardSwitcher.getLayoutName(actual),
49                 expected == actual);
50     }
51 
52     /**
53      * Emulate update keyboard shift state.
54      *
55      * @param afterUpdate the keyboard state after updating the keyboard shift state.
56      */
updateShiftState(final int afterUpdate)57     public void updateShiftState(final int afterUpdate) {
58         mSwitcher.updateShiftState();
59         assertLayout("afterUpdate", afterUpdate, mSwitcher.getLayoutId());
60     }
61 
62     /**
63      * Emulate load default keyboard.
64      *
65      * @param afterLoad the keyboard state after loading default keyboard.
66      */
loadKeyboard(final int afterLoad)67     public void loadKeyboard(final int afterLoad) {
68         mSwitcher.loadKeyboard();
69         mSwitcher.updateShiftState();
70         assertLayout("afterLoad", afterLoad, mSwitcher.getLayoutId());
71     }
72 
73     /**
74      * Emulate rotate device.
75      *
76      * @param afterRotate the keyboard state after rotating device.
77      */
rotateDevice(final int afterRotate)78     public void rotateDevice(final int afterRotate) {
79         mSwitcher.saveKeyboardState();
80         mSwitcher.loadKeyboard();
81         assertLayout("afterRotate", afterRotate, mSwitcher.getLayoutId());
82     }
83 
pressKeyWithoutTimerExpire(final int code, final boolean isSinglePointer, final int afterPress)84     private void pressKeyWithoutTimerExpire(final int code, final boolean isSinglePointer,
85             final int afterPress) {
86         mSwitcher.onPressKey(code, isSinglePointer);
87         assertLayout("afterPress", afterPress, mSwitcher.getLayoutId());
88     }
89 
90     /**
91      * Emulate key press.
92      *
93      * @param code the key code to press.
94      * @param afterPress the keyboard state after pressing the key.
95      */
pressKey(final int code, final int afterPress)96     public void pressKey(final int code, final int afterPress) {
97         mSwitcher.expireDoubleTapTimeout();
98         pressKeyWithoutTimerExpire(code, true, afterPress);
99     }
100 
101     /**
102      * Emulate key release and register.
103      *
104      * @param code the key code to release and register
105      * @param afterRelease the keyboard state after releasing the key.
106      */
releaseKey(final int code, final int afterRelease)107     public void releaseKey(final int code, final int afterRelease) {
108         mSwitcher.onCodeInput(code);
109         mSwitcher.onReleaseKey(code, NOT_SLIDING);
110         assertLayout("afterRelease", afterRelease, mSwitcher.getLayoutId());
111     }
112 
113     /**
114      * Emulate key press and release.
115      *
116      * @param code the key code to press and release.
117      * @param afterPress the keyboard state after pressing the key.
118      * @param afterRelease the keyboard state after releasing the key.
119      */
pressAndReleaseKey(final int code, final int afterPress, final int afterRelease)120     public void pressAndReleaseKey(final int code, final int afterPress, final int afterRelease) {
121         pressKey(code, afterPress);
122         releaseKey(code, afterRelease);
123     }
124 
125     /**
126      * Emulate chording key press.
127      *
128      * @param code the chording key code.
129      * @param afterPress the keyboard state after pressing chording key.
130      */
chordingPressKey(final int code, final int afterPress)131     public void chordingPressKey(final int code, final int afterPress) {
132         mSwitcher.expireDoubleTapTimeout();
133         pressKeyWithoutTimerExpire(code, false, afterPress);
134     }
135 
136     /**
137      * Emulate chording key release.
138      *
139      * @param code the cording key code.
140      * @param afterRelease the keyboard state after releasing chording key.
141      */
chordingReleaseKey(final int code, final int afterRelease)142     public void chordingReleaseKey(final int code, final int afterRelease) {
143         mSwitcher.onCodeInput(code);
144         mSwitcher.onReleaseKey(code, NOT_SLIDING);
145         assertLayout("afterRelease", afterRelease, mSwitcher.getLayoutId());
146     }
147 
148     /**
149      * Emulate chording key press and release.
150      *
151      * @param code the chording key code.
152      * @param afterPress the keyboard state after pressing chording key.
153      * @param afterRelease the keyboard state after releasing chording key.
154      */
chordingPressAndReleaseKey(final int code, final int afterPress, final int afterRelease)155     public void chordingPressAndReleaseKey(final int code, final int afterPress,
156             final int afterRelease) {
157         chordingPressKey(code, afterPress);
158         chordingReleaseKey(code, afterRelease);
159     }
160 
161     /**
162      * Emulate start of the sliding key input.
163      *
164      * @param code the key code to start sliding.
165      * @param afterPress the keyboard state after pressing the key.
166      * @param afterSlide the keyboard state after releasing the key with sliding input.
167      */
pressAndSlideFromKey(final int code, final int afterPress, final int afterSlide)168     public void pressAndSlideFromKey(final int code, final int afterPress, final int afterSlide) {
169         pressKey(code, afterPress);
170         mSwitcher.onReleaseKey(code, SLIDING);
171         assertLayout("afterSlide", afterSlide, mSwitcher.getLayoutId());
172     }
173 
174     /**
175      * Emulate end of the sliding key input.
176      *
177      * @param code the key code to stop sliding.
178      * @param afterPress the keyboard state after pressing the key.
179      * @param afterSlide the keyboard state after releasing the key and stop sliding.
180      */
stopSlidingOnKey(final int code, final int afterPress, final int afterSlide)181     public void stopSlidingOnKey(final int code, final int afterPress, final int afterSlide) {
182         pressKey(code, afterPress);
183         mSwitcher.onCodeInput(code);
184         mSwitcher.onReleaseKey(code, NOT_SLIDING);
185         mSwitcher.onFinishSlidingInput();
186         assertLayout("afterSlide", afterSlide, mSwitcher.getLayoutId());
187     }
188 
189     /**
190      * Emulate cancel the sliding key input.
191      *
192      * @param afterCancelSliding the keyboard state after canceling sliding input.
193      */
stopSlidingAndCancel(final int afterCancelSliding)194     public void stopSlidingAndCancel(final int afterCancelSliding) {
195         mSwitcher.onFinishSlidingInput();
196         assertLayout("afterCancelSliding", afterCancelSliding, mSwitcher.getLayoutId());
197     }
198 
199     /**
200      * Emulate long press shift key.
201      *
202      * @param afterPress the keyboard state after pressing shift key.
203      * @param afterLongPress the keyboard state after long press fired.
204      */
longPressShiftKey(final int afterPress, final int afterLongPress)205     public void longPressShiftKey(final int afterPress, final int afterLongPress) {
206         // Long press shift key will register {@link Constants#CODE_CAPS_LOCK}. See
207         // {@link R.xml#key_styles_common} and its baseForShiftKeyStyle. We thus emulate the
208         // behavior that is implemented in {@link MainKeyboardView#onLongPress(PointerTracker)}.
209         pressKey(Constants.CODE_SHIFT, afterPress);
210         mSwitcher.onPressKey(Constants.CODE_CAPSLOCK, true /* isSinglePointer */);
211         mSwitcher.onCodeInput(Constants.CODE_CAPSLOCK);
212         assertLayout("afterLongPress", afterLongPress, mSwitcher.getLayoutId());
213     }
214 
215     /**
216      * Emulate long press shift key and release.
217      *
218      * @param afterPress the keyboard state after pressing shift key.
219      * @param afterLongPress the keyboard state after long press fired.
220      * @param afterRelease the keyboard state after shift key is released.
221      */
longPressAndReleaseShiftKey(final int afterPress, final int afterLongPress, final int afterRelease)222     public void longPressAndReleaseShiftKey(final int afterPress, final int afterLongPress,
223             final int afterRelease) {
224         // Long press shift key will register {@link Constants#CODE_CAPS_LOCK}. See
225         // {@link R.xml#key_styles_common} and its baseForShiftKeyStyle. We thus emulate the
226         // behavior that is implemented in {@link MainKeyboardView#onLongPress(PointerTracker)}.
227         longPressShiftKey(afterPress, afterLongPress);
228         releaseKey(Constants.CODE_CAPSLOCK, afterRelease);
229     }
230 
231     /**
232      * Emulate the second press of the double tap.
233      *
234      * @param code the key code to double tap.
235      * @param afterPress the keyboard state after pressing the second tap.
236      */
secondPressKey(final int code, final int afterPress)237     public void secondPressKey(final int code, final int afterPress) {
238         pressKeyWithoutTimerExpire(code, true, afterPress);
239     }
240 
241     /**
242      * Emulate the second tap of the double tap.
243      *
244      * @param code the key code to double tap.
245      * @param afterPress the keyboard state after pressing the second tap.
246      * @param afterRelease the keyboard state after releasing the second tap.
247      */
secondPressAndReleaseKey(final int code, final int afterPress, final int afterRelease)248     public void secondPressAndReleaseKey(final int code, final int afterPress,
249             final int afterRelease) {
250         secondPressKey(code, afterPress);
251         releaseKey(code, afterRelease);
252     }
253 }
254