OLD | NEW |
| (Empty) |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 // Include test fixture. | |
6 GEN_INCLUDE(['../testing/chromevox_unittest_base.js']); | |
7 | |
8 /** | |
9 * Test fixture. | |
10 * @constructor | |
11 * @extends {ChromeVoxUnitTestBase} | |
12 */ | |
13 function CvoxBrailleUtilUnitTest() {} | |
14 | |
15 CvoxBrailleUtilUnitTest.prototype = { | |
16 __proto__: ChromeVoxUnitTestBase.prototype, | |
17 | |
18 /** @override */ | |
19 closureModuleDeps: [ | |
20 'cvox.BrailleUtil', | |
21 'cvox.CursorSelection', | |
22 'cvox.NavigationShifter', | |
23 'cvox.TestMsgs', | |
24 ], | |
25 | |
26 /** @override */ | |
27 setUp: function() { | |
28 cvox.ChromeVox.msgs = new cvox.TestMsgs(); | |
29 }, | |
30 | |
31 /** | |
32 * @param {!Node} expectedParent Expected parent node. | |
33 * @param {!Node} node Node to examine. | |
34 * @private | |
35 */ | |
36 assertTextNodeChildOf_: function(expectedParent, node) { | |
37 assertEquals(Node.TEXT_NODE, node.nodeType); | |
38 assertEquals(expectedParent, node.parentNode); | |
39 }, | |
40 | |
41 /** | |
42 * Helper to retrieve braille for testing. | |
43 * @param {!cvox.CursorSelection} prevSel Previous selection. | |
44 * @param {!cvox.CursorSelection} sel Current selection. | |
45 * @return {!cvox.NavBraille} Resulting braille. | |
46 * @private | |
47 */ | |
48 getBraille_: function(prevSel, sel) { | |
49 return (new cvox.NavigationShifter).getBraille(prevSel, sel); | |
50 }, | |
51 | |
52 /** | |
53 * Asserts that two NavBraille objects are equal, ignoring spans. | |
54 * @param {Object} expected Expected result, should have no spans. | |
55 * @param {cvox.NavBraille} actual Actual result. | |
56 */ | |
57 assertBrailleEquals: function(expected, actual) { | |
58 actual = new cvox.NavBraille({ | |
59 text: actual.text.toString(), | |
60 startIndex: actual.startIndex, | |
61 endIndex: actual.endIndex | |
62 }); | |
63 assertThat(new cvox.NavBraille(expected), eqJSON(actual)); | |
64 } | |
65 }; | |
66 | |
67 TEST_F('CvoxBrailleUtilUnitTest', 'BrailleName', function() { | |
68 this.loadHtml( | |
69 '<div id="navbar">' + | |
70 '<a id="1" href="one.com">one</a>' + | |
71 '<a id="2" href="two.com">two</a>' + | |
72 '<a id="3" href="three.com">three</a>' + | |
73 '</div>'); | |
74 var navbar = cvox.CursorSelection.fromNode($('navbar')); | |
75 var braille = this.getBraille_(navbar, navbar); | |
76 this.assertBrailleEquals( | |
77 {text: 'one lnk two lnk three lnk', | |
78 startIndex: 0, | |
79 endIndex: 1 | |
80 }, braille); | |
81 | |
82 var one = | |
83 cvox.CursorSelection.fromNode($('1').firstChild); | |
84 braille = this.getBraille_(one, one); | |
85 this.assertBrailleEquals( | |
86 {text: 'one lnk two lnk three lnk', | |
87 startIndex: 0, | |
88 endIndex: 1 | |
89 }, braille); | |
90 | |
91 var two = | |
92 cvox.CursorSelection.fromNode($('2').firstChild); | |
93 braille = this.getBraille_(one, two); | |
94 this.assertBrailleEquals( | |
95 {text: 'one lnk two lnk three lnk', | |
96 startIndex: 8, | |
97 endIndex: 9 | |
98 }, braille); | |
99 | |
100 var three = | |
101 cvox.CursorSelection.fromNode($('3').firstChild); | |
102 braille = this.getBraille_(two, three); | |
103 this.assertBrailleEquals( | |
104 {text: 'one lnk two lnk three lnk', | |
105 startIndex: 16, | |
106 endIndex: 17 | |
107 }, braille); | |
108 }); | |
109 | |
110 | |
111 /** | |
112 * @export | |
113 */ | |
114 TEST_F('CvoxBrailleUtilUnitTest', 'NameTemplate', function() { | |
115 this.loadHtml( | |
116 '<button id="1">Submit</button>' + | |
117 '<input id="2" type="text" aria-label="Search">' | |
118 ); | |
119 | |
120 var button = cvox.CursorSelection.fromNode($('1')); | |
121 | |
122 this.assertBrailleEquals( | |
123 {text: '[Submit]', | |
124 startIndex: 0, | |
125 endIndex: 1 | |
126 }, this.getBraille_(button, button)); | |
127 | |
128 var inputElement = $('2'); | |
129 var input = cvox.CursorSelection.fromNode(inputElement); | |
130 | |
131 // Note: the cursor appears where text would be typed. | |
132 this.assertBrailleEquals( | |
133 {text: 'Search: edtxt', | |
134 startIndex: 0, | |
135 endIndex: 1 | |
136 }, this.getBraille_(input, input)); | |
137 inputElement.focus(); | |
138 this.assertBrailleEquals( | |
139 {text: 'Search: edtxt', | |
140 startIndex: 8, | |
141 endIndex: 8 | |
142 }, this.getBraille_(input, input)); | |
143 }); | |
144 | |
145 | |
146 /** | |
147 * @export | |
148 */ | |
149 TEST_F('CvoxBrailleUtilUnitTest', 'TextField', function() { | |
150 this.loadHtml( | |
151 '<input id="1" type="text" aria-label="Search" value="larry">' | |
152 ); | |
153 | |
154 var inputElement = $('1'); | |
155 var input = cvox.CursorSelection.fromNode(inputElement); | |
156 | |
157 // Note: the cursor appears where text would be typed. | |
158 // The cursor is at the beginning by default. | |
159 this.assertBrailleEquals( | |
160 {text: 'Search: larry edtxt', | |
161 startIndex: 0, | |
162 endIndex: 1 | |
163 }, this.getBraille_(input, input)); | |
164 inputElement.focus(); | |
165 inputElement.selectionStart = 0; | |
166 inputElement.selectionEnd = 5; | |
167 this.assertBrailleEquals( | |
168 {text: 'Search: larry edtxt', | |
169 startIndex: 8, | |
170 endIndex: 13 | |
171 }, this.getBraille_(input, input)); | |
172 }); | |
173 | |
174 | |
175 /** | |
176 * @export | |
177 */ | |
178 TEST_F('CvoxBrailleUtilUnitTest', 'TextFieldEmpty', function() { | |
179 this.loadHtml( | |
180 '<input id="1" type="text">' | |
181 ); | |
182 | |
183 var inputElement = $('1'); | |
184 var input = cvox.CursorSelection.fromNode($('1')); | |
185 | |
186 this.assertBrailleEquals( | |
187 {text: ': edtxt', | |
188 startIndex: 0, | |
189 endIndex: 1 | |
190 }, this.getBraille_(input, input)); | |
191 inputElement.focus(); | |
192 this.assertBrailleEquals( | |
193 {text: ': edtxt', | |
194 startIndex: 2, | |
195 endIndex: 2 | |
196 }, this.getBraille_(input, input)); | |
197 }); | |
198 | |
199 | |
200 /** | |
201 * @export | |
202 */ | |
203 TEST_F('CvoxBrailleUtilUnitTest', 'TextFieldSelection', function() { | |
204 this.loadHtml( | |
205 '<input id="1" type="text" value="strawberry">' | |
206 ); | |
207 | |
208 var inputElem = $('1'); | |
209 inputElem.focus(); | |
210 var input = cvox.CursorSelection.fromNode(inputElem); | |
211 | |
212 // Selection. | |
213 inputElem.selectionStart = 2; | |
214 inputElem.selectionEnd = 5; | |
215 this.assertBrailleEquals( | |
216 {text: ': strawberry edtxt', | |
217 startIndex: 4, | |
218 endIndex: 7 | |
219 }, this.getBraille_(input, input)); | |
220 | |
221 // Cursor at end. | |
222 inputElem.selectionStart = 10; | |
223 inputElem.selectionEnd = 10; | |
224 this.assertBrailleEquals( | |
225 {text: ': strawberry edtxt', | |
226 startIndex: 12, | |
227 endIndex: 12 | |
228 }, this.getBraille_(input, input)); | |
229 }); | |
230 | |
231 | |
232 /** | |
233 * @export | |
234 */ | |
235 TEST_F('CvoxBrailleUtilUnitTest', 'StateTemplate', function() { | |
236 this.loadHtml( | |
237 '<input id="1" type="checkbox" aria-label="Save">'); | |
238 | |
239 var checkbox = cvox.CursorSelection.fromNode($('1')); | |
240 | |
241 this.assertBrailleEquals( | |
242 {text: 'Save ( )', | |
243 startIndex: 0, | |
244 endIndex: 1 | |
245 }, this.getBraille_(checkbox, checkbox)); | |
246 | |
247 $('1').checked = true; | |
248 | |
249 this.assertBrailleEquals( | |
250 {text: 'Save (x)', | |
251 startIndex: 0, | |
252 endIndex: 1 | |
253 }, this.getBraille_(checkbox, checkbox)); | |
254 }); | |
255 | |
256 | |
257 /** | |
258 * @export | |
259 */ | |
260 TEST_F('CvoxBrailleUtilUnitTest', 'AccessKey', function() { | |
261 this.loadHtml( | |
262 '<a href="http://www.google.com" id="1" accesskey="g">Google</a>'); | |
263 | |
264 var link = cvox.CursorSelection.fromNode($('1')); | |
265 | |
266 this.assertBrailleEquals( | |
267 {text: 'Google lnk access key:g', | |
268 startIndex: 0, | |
269 endIndex: 1 | |
270 }, this.getBraille_(link, link)); | |
271 }); | |
272 | |
273 | |
274 /** | |
275 * @export | |
276 */ | |
277 TEST_F('CvoxBrailleUtilUnitTest', 'ContainerTemplate', function() { | |
278 this.loadHtml( | |
279 '<h1>' + | |
280 '<a id="1" href="#menu">Skip To Menu</a>' + | |
281 '</h1>' | |
282 ); | |
283 | |
284 var link = cvox.CursorSelection.fromNode($('1')); | |
285 | |
286 var navBraille = this.getBraille_( | |
287 cvox.CursorSelection.fromBody(), link); | |
288 this.assertBrailleEquals( | |
289 {text: 'h1 Skip To Menu int lnk', | |
290 startIndex: 0, | |
291 endIndex: 1 | |
292 }, navBraille); | |
293 }); | |
294 | |
295 | |
296 /** | |
297 * @export | |
298 */ | |
299 TEST_F('CvoxBrailleUtilUnitTest', 'LinkSpans', function() { | |
300 this.loadHtml('<p><a id="1" href="#1">Hello</a> from' + | |
301 ' <a id="2" href="//www.google.com/">ChromeVox</a>'); | |
302 var link1 = $('1'); | |
303 var link2 = $('2'); | |
304 var navBraille = this.getBraille_( | |
305 cvox.CursorSelection.fromBody(), cvox.CursorSelection.fromNode(link1)); | |
306 assertEquals('Hello int lnk from ChromeVox lnk', | |
307 navBraille.text.toString()); | |
308 assertEquals(link1, navBraille.text.getSpan(0)); | |
309 assertEquals(link1, navBraille.text.getSpan(12)); | |
310 assertEquals('undefined', typeof navBraille.text.getSpan(13)); | |
311 assertEquals('undefined', typeof navBraille.text.getSpan(18)); | |
312 assertEquals(link2, navBraille.text.getSpan(19)); | |
313 assertEquals(link2, navBraille.text.getSpan(31)); | |
314 }); | |
315 | |
316 | |
317 /** | |
318 * @export | |
319 */ | |
320 TEST_F('CvoxBrailleUtilUnitTest', 'NestedElements', function() { | |
321 this.loadHtml('<h1 id="test-h1">Larry, ' + | |
322 '<a href="#batman" id="batman-link">Sergey</a> and Eric</h1>'); | |
323 var h1 = $('test-h1'); | |
324 var link = $('batman-link'); | |
325 var navBraille = this.getBraille_( | |
326 cvox.CursorSelection.fromBody(), cvox.CursorSelection.fromNode(h1)); | |
327 assertEquals('h1 Larry, Sergey int lnk and Eric', | |
328 navBraille.text.toString()); | |
329 this.assertTextNodeChildOf_(h1, navBraille.text.getSpan(0)); | |
330 this.assertTextNodeChildOf_(h1, navBraille.text.getSpan(5)); | |
331 assertEquals(link, navBraille.text.getSpan(15)); | |
332 this.assertTextNodeChildOf_(h1, navBraille.text.getSpan(30)); | |
333 }); | |
334 | |
335 | |
336 /** | |
337 * @export | |
338 */ | |
339 TEST_F('CvoxBrailleUtilUnitTest', 'GetTemplatedOverride', function() { | |
340 assertEquals('Menu mnu', | |
341 cvox.BrailleUtil.getTemplated(null, null, | |
342 { 'name': 'Menu', | |
343 'roleMsg': 'aria_role_menu' }). | |
344 toString()); | |
345 assertEquals('alrt: Watch out!', | |
346 cvox.BrailleUtil.getTemplated(null, null, | |
347 { 'name': 'Watch out!', | |
348 'roleMsg': 'aria_role_alert' }). | |
349 toString()); | |
350 // Test all properties. role, if present, overrides roleMsg. | |
351 assertEquals('Name Value Role State', | |
352 cvox.BrailleUtil.getTemplated(null, null, | |
353 { 'name': 'Name', | |
354 'role': 'Role', | |
355 'roleMsg': 'excluded', | |
356 'value': 'Value', | |
357 'state': 'State' | |
358 }).toString()); | |
359 }); | |
360 | |
361 | |
362 /** | |
363 * @export | |
364 */ | |
365 TEST_F('CvoxBrailleUtilUnitTest', 'CreateValue', function() { | |
366 var s; | |
367 var valueSpan; | |
368 var selectiponSpan; | |
369 | |
370 // Value without a selection. | |
371 s = cvox.BrailleUtil.createValue('value'); | |
372 assertEquals('value', s.toString()); | |
373 assertUndefined(s.getSpanInstanceOf(cvox.BrailleUtil.ValueSelectionSpan)); | |
374 valueSpan = s.getSpanInstanceOf(cvox.BrailleUtil.ValueSpan); | |
375 assertEquals(0, s.getSpanStart(valueSpan)); | |
376 assertEquals(s.getLength(), s.getSpanEnd(valueSpan)); | |
377 | |
378 // Value with a carret at the start of the text. | |
379 s = cvox.BrailleUtil.createValue('value', 0); | |
380 selectionSpan = s.getSpanInstanceOf(cvox.BrailleUtil.ValueSelectionSpan); | |
381 assertEquals(0, s.getSpanStart(selectionSpan)); | |
382 assertEquals(0, s.getSpanEnd(selectionSpan)); | |
383 | |
384 // Value with a carret inside the text. | |
385 s = cvox.BrailleUtil.createValue('value', 1); | |
386 selectionSpan = s.getSpanInstanceOf(cvox.BrailleUtil.ValueSelectionSpan); | |
387 assertEquals(1, s.getSpanStart(selectionSpan)); | |
388 assertEquals(1, s.getSpanEnd(selectionSpan)); | |
389 | |
390 // Value with a carret at the end of the text. | |
391 s = cvox.BrailleUtil.createValue('value', 5); | |
392 selectionSpan = s.getSpanInstanceOf(cvox.BrailleUtil.ValueSelectionSpan); | |
393 assertEquals(5, s.getSpanStart(selectionSpan)); | |
394 assertEquals(5, s.getSpanEnd(selectionSpan)); | |
395 | |
396 // All of the value selected selected with reversed start and end. | |
397 s = cvox.BrailleUtil.createValue('value', 5, 0); | |
398 selectionSpan = s.getSpanInstanceOf(cvox.BrailleUtil.ValueSelectionSpan); | |
399 assertEquals(0, s.getSpanStart(selectionSpan)); | |
400 assertEquals(5, s.getSpanEnd(selectionSpan)); | |
401 }); | |
OLD | NEW |