Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / resources / chromeos / chromevox / common / braille_util_test.unitjs
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 });