OLD | NEW |
---|---|
(Empty) | |
1 /* | |
2 * Copyright 2013 The Chromium Authors. All rights reserved. | |
3 * Use of this source code is governed by a BSD-style license that can be | |
4 * found in the LICENSE file. | |
5 */ | |
6 | |
7 /** | |
8 * Retrieves the left or right shift keys. Shift keys come in pairs for upper | |
9 * and lowercase keyboard layouts respectively. | |
10 * @param {string} alignment Which of {left, right} shift keys to return. | |
11 * @return {Object.<string: Object>} a map from keyset to the shift key in it. | |
12 */ | |
13 function getShiftKeys(alignment) { | |
14 var layout = keyboard.layout; | |
15 var keysets = ['lower', 'upper']; | |
16 | |
17 var result={}; | |
18 for(var keysetIndex in keysets) { | |
19 var keysetId = keysets[keysetIndex]; | |
20 // The keyset DOM object which contains a shift key. | |
21 var keyset = keyboard.querySelector('#' + layout + "-" + keysetId); | |
22 assertTrue(!!keyset, "Cannot find keyset: " + keyset); | |
23 var shiftKey = keyset.querySelector('kb-shift-key[align="' + | |
24 alignment + '"]'); | |
25 assertTrue(!!shiftKey, "Keyset " + keysetId + | |
26 " does not have a shift key with " + alignment + " alignment"); | |
27 result[keysetId] = shiftKey; | |
28 } | |
29 return result; | |
30 } | |
31 | |
32 /** | |
33 * Tests chording with a single shift key. | |
34 * @param {Object} lowerShift, a shift key in the lower key set. | |
35 * @param {Object} uppserShift, the same shift key in the upper key set. | |
36 */ | |
37 function checkShiftChording(lowerShift, upperShift) { | |
38 var lower = lowerShift.lowerCaseKeysetId; | |
39 var upper = lowerShift.upperCaseKeysetId; | |
40 // Check that we're testing from correct initial state. | |
41 assertEquals(lower, keyboard.keyset, "Invalid initial keyset."); | |
42 var mockEvent = {pointerId:1, isPrimary:true}; | |
43 lowerShift.down(mockEvent); | |
44 assertEquals(upper, keyboard.keyset, | |
45 "Unexpected keyset transition on shift key down."); | |
46 // Some alphanumeric character | |
47 mockTypeCharacter('A', 0x41, true); | |
48 assertEquals(upper, keyboard.keyset, | |
49 "Did not remain in uppercase on key press while chording."); | |
50 mockTimer.tick(1000); | |
51 upperShift.up(mockEvent); | |
52 assertEquals(lower, keyboard.keyset, | |
53 "Did not revert to lowercase after chording."); | |
54 } | |
55 | |
56 /** | |
57 * Tests a particular shift key for highlighting on tapping. The keyboard | |
58 * should temporarily transition to uppercase, and after a non-control tap, | |
59 * revert to lower case. | |
60 * @param {Object} lowerShift The shift key object on the lower keyset. | |
61 * @param {Object} upperShift The shift key object on the upper keyset. | |
62 */ | |
63 function checkShiftHighlight(lowerShift, upperShift) { | |
64 assertTrue(!!keyboard.shift, "Shift key was not cached by keyboard"); | |
65 var unlocked = lowerShift.lowerCaseKeysetId; | |
66 var locked = lowerShift.upperCaseKeysetId; | |
67 assertEquals(unlocked, keyboard.keyset, | |
68 "Invalid initial keyboard keyset."); | |
69 // Crashes if we don't give it a pointerId. | |
70 var mockEvent = { pointerId: 1}; | |
71 // Tap shift key. | |
72 lowerShift.down(mockEvent); | |
73 upperShift.up(mockEvent); | |
74 // Tests that we are now in locked case. | |
75 assertEquals(locked, keyboard.keyset, | |
76 "Unexpected keyset transition after typing shift."); | |
77 // Some alphanumeric character. | |
78 mockTypeCharacter('A', 0x41, true); | |
79 // Check that we've reverted to lower case. | |
80 assertEquals(unlocked, keyboard.keyset, | |
81 "Did not revert to lower case after highlight."); | |
82 // Check that we persist in lower case. | |
83 mockTypeCharacter('a', 0x41, false); | |
84 assertEquals(unlocked, keyboard.keyset, | |
85 "Did not stay in lower case after highlight."); | |
86 } | |
87 | |
88 /** | |
89 * Tests that a particular shift key has been initialized correctly. | |
90 * @param {Object} shift The shift key. | |
91 */ | |
92 function checkShiftInitialState(shift) { | |
93 //Checks that the unlocked case is lower. | |
94 var unlocked = 'lower'; | |
95 assertEquals(unlocked, shift.lowerCaseKeysetId, | |
96 "Mismatched lowerCaseKeysetId."); | |
97 //Checks that the locked case is upper. | |
98 var locked = 'upper'; | |
99 assertEquals(locked, shift.upperCaseKeysetId, | |
100 "Mismatched upperCaseKeysetId."); | |
101 } | |
102 | |
103 /** | |
104 * Tests that a particular shift key capitalizes on long press. | |
105 * @param {Object} shift The shift key. | |
106 */ | |
107 function checkShiftLongPress(lowerShift, upperShift) { | |
108 // Check that keyboard is in expected start state. | |
109 assertTrue(!!keyboard.shift, "Shift key was not cached by keyboard"); | |
110 var unlocked = lowerShift.lowerCaseKeysetId; | |
111 var locked = lowerShift.upperCaseKeysetId; | |
112 assertEquals(unlocked, keyboard.keyset, | |
113 "Invalid initial keyboard keyset."); | |
114 // Mocks a pointer event. | |
115 var mockEvent = { pointerId: 1}; | |
116 lowerShift.down(mockEvent); | |
117 assertEquals(locked, keyboard.keyset, | |
118 "Invalid transition on shift key down."); | |
119 // Long press should now be active. | |
120 mockTimer.tick(1000); | |
121 // Type any caps character, make sure we remain in caps mode. | |
122 upperShift.up(mockEvent); | |
123 mockTypeCharacter('A', 0x41, true); | |
124 assertEquals(locked, keyboard.keyset, | |
125 "Did not remain in locked case after shift long press."); | |
126 // Revert to lower case. | |
127 upperShift.down(mockEvent); | |
128 assertEquals(unlocked, keyboard.keyset, | |
129 "Did not revert to lower case on shift down."); | |
130 lowerShift.up(mockEvent); | |
131 } | |
132 | |
kevers
2013/10/01 19:27:49
Add jsdoc.
rsadam
2013/10/01 21:29:18
Done.
| |
133 function checkShiftDoubleClick(lowerShift, upperShift) { | |
134 // Check that keyboard is in expected start state. | |
135 assertTrue(!!keyboard.shift, "Shift key was not cached by keyboard"); | |
136 var unlocked = lowerShift.lowerCaseKeysetId; | |
137 var locked = lowerShift.upperCaseKeysetId; | |
138 assertEquals(unlocked, keyboard.keyset, | |
139 "Invalid initial keyboard keyset."); | |
140 // Mocks a pointer event. | |
141 var mockEvent = { pointerId: 1}; | |
kevers
2013/10/01 19:27:49
nit: remove space after {
rsadam
2013/10/01 21:29:18
Done.
| |
142 lowerShift.down(mockEvent); | |
143 upperShift.up(mockEvent); | |
144 // Need to also mock a keyboard pointer up event. | |
145 keyboard.up(mockEvent); | |
146 upperShift.down(mockEvent); | |
147 upperShift.up(mockEvent); | |
148 keyboard.up(mockEvent); | |
149 // Check that we're capslocked. | |
150 assertEquals(locked, keyboard.keyset, | |
151 "Did not lock on double click."); | |
152 mockTypeCharacter('A', 0x41, true); | |
153 assertEquals(locked, keyboard.keyset, | |
154 "Did not remain in locked case after typing another key."); | |
155 // Reverts to lower case. | |
156 upperShift.down(mockEvent); | |
157 assertEquals(unlocked, keyboard.keyset, | |
158 "Did not revert to lower case on shift down."); | |
159 lowerShift.up(mockEvent); | |
160 } | |
161 /** | |
162 * Asynchronously tests highlighting of the left and right shift keys. | |
163 * @param {function} testDoneCallBack The callback function to be called | |
kevers
2013/10/01 19:27:49
Description seems a bit redundant. Can reduce "Th
rsadam
2013/10/01 21:29:18
Done.
| |
164 * on completion. | |
165 */ | |
166 function testShiftHighlightAsync(testDoneCallback) { | |
167 var runTest = function() { | |
168 var alignments = ['left', 'right']; | |
169 for (var i in alignments) { | |
170 var alignment = alignments[i]; | |
171 var shifts = getShiftKeys(alignment); | |
172 checkShiftHighlight(shifts['lower'], shifts['upper']); | |
173 } | |
174 }; | |
175 onKeyboardReady('testShiftKeyHighlightAsync', runTest, testDoneCallback); | |
176 } | |
177 | |
178 /** | |
179 * Asynchronously tests initialization of the left and right shift keys. | |
180 * @param {function} testDoneCallBack The callback function to be called | |
181 * on completion. | |
182 */ | |
183 function testShiftKeyInitAsync(testDoneCallback) { | |
184 var runTest = function() { | |
185 var alignments = ['left', 'right']; | |
186 for (var i in alignments) { | |
187 var alignment = alignments[i]; | |
188 var shifts = getShiftKeys(alignment); | |
189 checkShiftInitialState(shifts['lower']); | |
190 checkShiftInitialState(shifts['upper']); | |
191 } | |
192 }; | |
193 onKeyboardReady('testShiftKeyInitAsync', runTest, testDoneCallback); | |
194 } | |
195 | |
196 /** | |
197 * Asynchronously tests capitalization on double click of the left and | |
198 * right shift keys. | |
199 * @param {function} testDoneCallBack The callback function to be called | |
200 * on completion. | |
201 */ | |
202 function testShiftDoubleClickAsync(testDoneCallback) { | |
203 var runTest = function() { | |
204 var alignments = ['left', 'right']; | |
205 for (var i in alignments) { | |
206 var alignment = alignments[i]; | |
207 var shifts = getShiftKeys(alignment); | |
208 checkShiftDoubleClick(shifts['lower'], shifts['upper']); | |
209 } | |
210 }; | |
211 onKeyboardReady('testShiftDoubleClickAsync', runTest, testDoneCallback); | |
212 } | |
213 | |
214 /** | |
215 * Asynchronously tests capitalization on long press of the left and | |
216 * right shift keys. | |
217 * @param {function} testDoneCallBack The callback function to be called | |
218 * on completion. | |
219 */ | |
220 function testShiftLongPressAsync(testDoneCallback) { | |
221 var runTest = function() { | |
222 var alignments = ['left', 'right']; | |
223 for (var i in alignments) { | |
224 var alignment = alignments[i]; | |
225 var shifts = getShiftKeys(alignment); | |
226 checkShiftLongPress(shifts['lower'], shifts['upper']); | |
227 } | |
228 }; | |
229 onKeyboardReady('testShiftLongPressAsync', runTest, testDoneCallback); | |
230 } | |
231 | |
232 /** | |
233 * Asynchronously tests chording on the keyboard. | |
234 * @param {function} testDoneCallBack The callback function to be called | |
235 * on completion. | |
236 */ | |
237 function testShiftChordingAsync(testDoneCallback) { | |
238 var runTest = function() { | |
239 var left = getShiftKeys('left'); | |
240 var right = getShiftKeys('right'); | |
241 checkShiftChording(left['lower'], left['upper']); | |
242 checkShiftChording(right['lower'], right['upper']); | |
243 } | |
244 onKeyboardReady('testShiftChordingAsync', runTest, testDoneCallback); | |
245 } | |
OLD | NEW |