| 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 |