| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Include test fixture. | 5 // Include test fixture. |
| 6 GEN_INCLUDE(['../../testing/chromevox_next_e2e_test_base.js', | 6 GEN_INCLUDE(['../../testing/chromevox_next_e2e_test_base.js', |
| 7 '../../testing/assert_additions.js']); | 7 '../../testing/assert_additions.js']); |
| 8 | 8 |
| 9 GEN_INCLUDE(['../../testing/mock_feedback.js']); | 9 GEN_INCLUDE(['../../testing/mock_feedback.js']); |
| 10 | 10 |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 mockFeedback.expectSpeech('a') | 256 mockFeedback.expectSpeech('a') |
| 257 .expectSpeech('Link'); | 257 .expectSpeech('Link'); |
| 258 mockFeedback.replay(); | 258 mockFeedback.replay(); |
| 259 }); | 259 }); |
| 260 }); | 260 }); |
| 261 | 261 |
| 262 TEST_F('BackgroundTest', 'AriaLabel', function() { | 262 TEST_F('BackgroundTest', 'AriaLabel', function() { |
| 263 var mockFeedback = this.createMockFeedback(); | 263 var mockFeedback = this.createMockFeedback(); |
| 264 this.runWithLoadedTree('<a aria-label="foo" href="a">a</a>', | 264 this.runWithLoadedTree('<a aria-label="foo" href="a">a</a>', |
| 265 function(rootNode) { | 265 function(rootNode) { |
| 266 rootNode.find({role: RoleType.LINK}).focus(); | 266 rootNode.find({role: RoleType.link}).focus(); |
| 267 mockFeedback.expectSpeech('foo') | 267 mockFeedback.expectSpeech('foo') |
| 268 .expectSpeech('Link') | 268 .expectSpeech('Link') |
| 269 .expectBraille('foo lnk'); | 269 .expectBraille('foo lnk'); |
| 270 mockFeedback.replay(); | 270 mockFeedback.replay(); |
| 271 } | 271 } |
| 272 ); | 272 ); |
| 273 }); | 273 }); |
| 274 | 274 |
| 275 TEST_F('BackgroundTest', 'ShowContextMenu', function() { | 275 TEST_F('BackgroundTest', 'ShowContextMenu', function() { |
| 276 var mockFeedback = this.createMockFeedback(); | 276 var mockFeedback = this.createMockFeedback(); |
| 277 this.runWithLoadedTree('<p>before</p><a href="a">a</a>', | 277 this.runWithLoadedTree('<p>before</p><a href="a">a</a>', |
| 278 function(rootNode) { | 278 function(rootNode) { |
| 279 var go = rootNode.find({ role: RoleType.LINK }); | 279 var go = rootNode.find({ role: RoleType.link }); |
| 280 // Menus no longer nest a message loop, so we can launch menu and confirm | 280 // Menus no longer nest a message loop, so we can launch menu and confirm |
| 281 // expected speech. The menu will not block test shutdown. | 281 // expected speech. The menu will not block test shutdown. |
| 282 mockFeedback.call(go.focus.bind(go)) | 282 mockFeedback.call(go.focus.bind(go)) |
| 283 .expectSpeech('a', 'Link') | 283 .expectSpeech('a', 'Link') |
| 284 .call(doCmd('contextMenu')) | 284 .call(doCmd('contextMenu')) |
| 285 .expectSpeech(/menu opened/); | 285 .expectSpeech(/menu opened/); |
| 286 mockFeedback.replay(); | 286 mockFeedback.replay(); |
| 287 }.bind(this)); | 287 }.bind(this)); |
| 288 }); | 288 }); |
| 289 | 289 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 303 <button id="btn2">Focus me</button> | 303 <button id="btn2">Focus me</button> |
| 304 <p>Some more text</p> | 304 <p>Some more text</p> |
| 305 <input type="text" id ="text" value="Edit me"> | 305 <input type="text" id ="text" value="Edit me"> |
| 306 <script> | 306 <script> |
| 307 document.getElementById('btn1').addEventListener('click', function() { | 307 document.getElementById('btn1').addEventListener('click', function() { |
| 308 document.getElementById('btn2').focus(); | 308 document.getElementById('btn2').focus(); |
| 309 }, false); | 309 }, false); |
| 310 </script> | 310 </script> |
| 311 */}, | 311 */}, |
| 312 function(rootNode) { | 312 function(rootNode) { |
| 313 var button1 = rootNode.find({role: RoleType.BUTTON, | 313 var button1 = rootNode.find({role: RoleType.button, |
| 314 attributes: { name: 'Click me' }}); | 314 attributes: { name: 'Click me' }}); |
| 315 var textField = rootNode.find( | 315 var textField = rootNode.find( |
| 316 {role: RoleType.TEXT_FIELD}); | 316 {role: RoleType.textField}); |
| 317 mockFeedback.expectBraille('start') | 317 mockFeedback.expectBraille('start') |
| 318 .call(button1.focus.bind(button1)) | 318 .call(button1.focus.bind(button1)) |
| 319 .expectBraille(/^Click me btn/) | 319 .expectBraille(/^Click me btn/) |
| 320 .call(route.bind(null, 5)) | 320 .call(route.bind(null, 5)) |
| 321 .expectBraille(/Focus me btn/) | 321 .expectBraille(/Focus me btn/) |
| 322 .call(textField.focus.bind(textField)) | 322 .call(textField.focus.bind(textField)) |
| 323 .expectBraille('Edit me ed', {startIndex: 0}) | 323 .expectBraille('Edit me ed', {startIndex: 0}) |
| 324 .call(route.bind(null, 3)) | 324 .call(route.bind(null, 3)) |
| 325 .expectBraille('Edit me ed', {startIndex: 3}) | 325 .expectBraille('Edit me ed', {startIndex: 3}) |
| 326 .call(function() { | 326 .call(function() { |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 369 }); | 369 }); |
| 370 var assertDoesntExist = this.newCallback(function (evt) { | 370 var assertDoesntExist = this.newCallback(function (evt) { |
| 371 assertTrue( | 371 assertTrue( |
| 372 !ChromeVoxState.desktopAutomationHandler.editableTextHandler_); | 372 !ChromeVoxState.desktopAutomationHandler.editableTextHandler_); |
| 373 evt.stopPropagation(); | 373 evt.stopPropagation(); |
| 374 | 374 |
| 375 // Focus the other text field here to make this test not racey. | 375 // Focus the other text field here to make this test not racey. |
| 376 editable.focus(); | 376 editable.focus(); |
| 377 }); | 377 }); |
| 378 | 378 |
| 379 var editable = rootNode.find({ role: RoleType.TEXT_FIELD }); | 379 var editable = rootNode.find({ role: RoleType.textField }); |
| 380 var nonEditable = rootNode.find({ role: RoleType.PARAGRAPH }); | 380 var nonEditable = rootNode.find({ role: RoleType.paragraph }); |
| 381 | 381 |
| 382 this.listenOnce(nonEditable, 'focus', assertDoesntExist); | 382 this.listenOnce(nonEditable, 'focus', assertDoesntExist); |
| 383 this.listenOnce(editable, 'focus', assertExists); | 383 this.listenOnce(editable, 'focus', assertExists); |
| 384 | 384 |
| 385 nonEditable.focus(); | 385 nonEditable.focus(); |
| 386 }.bind(this)); | 386 }.bind(this)); |
| 387 }); | 387 }); |
| 388 | 388 |
| 389 TEST_F('BackgroundTest', 'EarconsForControls', function() { | 389 TEST_F('BackgroundTest', 'EarconsForControls', function() { |
| 390 var mockFeedback = this.createMockFeedback(); | 390 var mockFeedback = this.createMockFeedback(); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 // Flaky, see http://crbug.com/635032 | 465 // Flaky, see http://crbug.com/635032 |
| 466 TEST_F('BackgroundTest', 'DISABLED_ActiveOrInactive', function() { | 466 TEST_F('BackgroundTest', 'DISABLED_ActiveOrInactive', function() { |
| 467 var mockFeedback = this.createMockFeedback(); | 467 var mockFeedback = this.createMockFeedback(); |
| 468 this.runWithLoadedTree(function() {/*! | 468 this.runWithLoadedTree(function() {/*! |
| 469 <a href="a">a</a> | 469 <a href="a">a</a> |
| 470 <button>b</button> | 470 <button>b</button> |
| 471 <input type="text"></input> | 471 <input type="text"></input> |
| 472 */}, | 472 */}, |
| 473 function(rootNode) { | 473 function(rootNode) { |
| 474 var focusButton = function() { | 474 var focusButton = function() { |
| 475 rootNode.find({role: RoleType.BUTTON}).focus(); | 475 rootNode.find({role: RoleType.button}).focus(); |
| 476 }; | 476 }; |
| 477 var on = function() { cvox.ChromeVox.isActive = true; }; | 477 var on = function() { cvox.ChromeVox.isActive = true; }; |
| 478 var off = function() { cvox.ChromeVox.isActive = false; }; | 478 var off = function() { cvox.ChromeVox.isActive = false; }; |
| 479 | 479 |
| 480 function focusThen(toFocus, then) { | 480 function focusThen(toFocus, then) { |
| 481 toFocus.addEventListener('focus', function innerFocus(e) { | 481 toFocus.addEventListener('focus', function innerFocus(e) { |
| 482 if (e.target != toFocus) | 482 if (e.target != toFocus) |
| 483 return; | 483 return; |
| 484 rootNode.removeEventListener('focus', innerFocus, true); | 484 rootNode.removeEventListener('focus', innerFocus, true); |
| 485 then && then(); | 485 then && then(); |
| 486 }, true); | 486 }, true); |
| 487 toFocus.focus(); | 487 toFocus.focus(); |
| 488 } | 488 } |
| 489 | 489 |
| 490 mockFeedback.call(focusButton) | 490 mockFeedback.call(focusButton) |
| 491 .expectSpeech('b').expectSpeech('Button') | 491 .expectSpeech('b').expectSpeech('Button') |
| 492 .call(off) | 492 .call(off) |
| 493 .call(focusThen.bind(this, rootNode.find( | 493 .call(focusThen.bind(this, rootNode.find( |
| 494 { role: RoleType.LINK }), on)) | 494 { role: RoleType.link }), on)) |
| 495 .call(focusThen.bind(this, rootNode.find( | 495 .call(focusThen.bind(this, rootNode.find( |
| 496 { role: RoleType.TEXT_FIELD }))) | 496 { role: RoleType.textField }))) |
| 497 .expectNextSpeechUtteranceIsNot('a') | 497 .expectNextSpeechUtteranceIsNot('a') |
| 498 .expectSpeech('Edit text'); | 498 .expectSpeech('Edit text'); |
| 499 | 499 |
| 500 mockFeedback.replay(); | 500 mockFeedback.replay(); |
| 501 }); | 501 }); |
| 502 }); | 502 }); |
| 503 | 503 |
| 504 TEST_F('BackgroundTest', 'ModeSwitching', function() { | 504 TEST_F('BackgroundTest', 'ModeSwitching', function() { |
| 505 this.runWithLoadedTree('<button></button>', function(root) { | 505 this.runWithLoadedTree('<button></button>', function(root) { |
| 506 var fakeDesktop = {}; | 506 var fakeDesktop = {}; |
| 507 fakeDesktop.role = 'desktop'; | 507 fakeDesktop.role = 'desktop'; |
| 508 fakeDesktop.root = fakeDesktop; | 508 fakeDesktop.root = fakeDesktop; |
| 509 | 509 |
| 510 var fakeWebRoot = {}; | 510 var fakeWebRoot = {}; |
| 511 fakeWebRoot.root = fakeWebRoot; | 511 fakeWebRoot.root = fakeWebRoot; |
| 512 fakeWebRoot.parent = fakeDesktop; | 512 fakeWebRoot.parent = fakeDesktop; |
| 513 fakeWebRoot.role = RoleType.ROOT_WEB_AREA; | 513 fakeWebRoot.role = RoleType.rootWebArea; |
| 514 fakeWebRoot.makeVisible = function() {}; | 514 fakeWebRoot.makeVisible = function() {}; |
| 515 fakeWebRoot.location = {left: 1, top: 1, width: 1, height: 1}; | 515 fakeWebRoot.location = {left: 1, top: 1, width: 1, height: 1}; |
| 516 var fakeSubRoot = {}; | 516 var fakeSubRoot = {}; |
| 517 fakeSubRoot.root = fakeSubRoot; | 517 fakeSubRoot.root = fakeSubRoot; |
| 518 fakeSubRoot.parent = fakeWebRoot; | 518 fakeSubRoot.parent = fakeWebRoot; |
| 519 fakeSubRoot.role = RoleType.ROOT_WEB_AREA; | 519 fakeSubRoot.role = RoleType.rootWebArea; |
| 520 fakeSubRoot.makeVisible = function() {}; | 520 fakeSubRoot.makeVisible = function() {}; |
| 521 fakeSubRoot.location = {left: 1, top: 1, width: 1, height: 1}; | 521 fakeSubRoot.location = {left: 1, top: 1, width: 1, height: 1}; |
| 522 var bk = ChromeVoxState.instance; | 522 var bk = ChromeVoxState.instance; |
| 523 | 523 |
| 524 // Tests default to force next mode. | 524 // Tests default to force next mode. |
| 525 assertEquals('force_next', bk.mode); | 525 assertEquals('force_next', bk.mode); |
| 526 | 526 |
| 527 // Force next mode stays set regardless of where the range lands. | 527 // Force next mode stays set regardless of where the range lands. |
| 528 fakeWebRoot.docUrl = 'http://google.com'; | 528 fakeWebRoot.docUrl = 'http://google.com'; |
| 529 bk.setCurrentRange(cursors.Range.fromNode(fakeWebRoot)); | 529 bk.setCurrentRange(cursors.Range.fromNode(fakeWebRoot)); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 571 bk.setCurrentRange(cursors.Range.fromNode(fakeWebRoot)); | 571 bk.setCurrentRange(cursors.Range.fromNode(fakeWebRoot)); |
| 572 assertEquals('force_next', bk.mode); | 572 assertEquals('force_next', bk.mode); |
| 573 }.bind(this)); | 573 }.bind(this)); |
| 574 }); | 574 }); |
| 575 | 575 |
| 576 TEST_F('BackgroundTest', 'ShouldNotFocusIframe', function() { | 576 TEST_F('BackgroundTest', 'ShouldNotFocusIframe', function() { |
| 577 this.runWithLoadedTree( function() {/*! | 577 this.runWithLoadedTree( function() {/*! |
| 578 <iframe tabindex=0 src="data:text/html,<p>Inside</p>"></iframe> | 578 <iframe tabindex=0 src="data:text/html,<p>Inside</p>"></iframe> |
| 579 <button>outside</button> | 579 <button>outside</button> |
| 580 */}, function(root) { | 580 */}, function(root) { |
| 581 var iframe = root.find({role: RoleType.IFRAME}); | 581 var iframe = root.find({role: RoleType.iframe}); |
| 582 var button = root.find({role: RoleType.BUTTON}); | 582 var button = root.find({role: RoleType.button}); |
| 583 | 583 |
| 584 assertEquals('iframe', iframe.role); | 584 assertEquals('iframe', iframe.role); |
| 585 assertEquals('button', button.role); | 585 assertEquals('button', button.role); |
| 586 | 586 |
| 587 var didFocus = false; | 587 var didFocus = false; |
| 588 iframe.addEventListener('focus', function() { | 588 iframe.addEventListener('focus', function() { |
| 589 didFocus = true; | 589 didFocus = true; |
| 590 }); | 590 }); |
| 591 var b = ChromeVoxState.instance; | 591 var b = ChromeVoxState.instance; |
| 592 b.currentRange_ = cursors.Range.fromNode(button); | 592 b.currentRange_ = cursors.Range.fromNode(button); |
| 593 doCmd('previousElement'); | 593 doCmd('previousElement'); |
| 594 assertFalse(didFocus); | 594 assertFalse(didFocus); |
| 595 }.bind(this)); | 595 }.bind(this)); |
| 596 }); | 596 }); |
| 597 | 597 |
| 598 TEST_F('BackgroundTest', 'ShouldFocusLink', function() { | 598 TEST_F('BackgroundTest', 'ShouldFocusLink', function() { |
| 599 this.runWithLoadedTree( function() {/*! | 599 this.runWithLoadedTree( function() {/*! |
| 600 <div><a href="#">mylink</a></div> | 600 <div><a href="#">mylink</a></div> |
| 601 <button>after</button> | 601 <button>after</button> |
| 602 */}, function(root) { | 602 */}, function(root) { |
| 603 var link = root.find({role: RoleType.LINK}); | 603 var link = root.find({role: RoleType.link}); |
| 604 var button = root.find({role: RoleType.BUTTON}); | 604 var button = root.find({role: RoleType.button}); |
| 605 | 605 |
| 606 assertEquals('link', link.role); | 606 assertEquals('link', link.role); |
| 607 assertEquals('button', button.role); | 607 assertEquals('button', button.role); |
| 608 | 608 |
| 609 var didFocus = false; | 609 var didFocus = false; |
| 610 link.addEventListener('focus', this.newCallback(function() { | 610 link.addEventListener('focus', this.newCallback(function() { |
| 611 // Success | 611 // Success |
| 612 })); | 612 })); |
| 613 var b = ChromeVoxState.instance; | 613 var b = ChromeVoxState.instance; |
| 614 b.currentRange_ = cursors.Range.fromNode(button); | 614 b.currentRange_ = cursors.Range.fromNode(button); |
| 615 doCmd('previousElement'); | 615 doCmd('previousElement'); |
| 616 }); | 616 }); |
| 617 }); | 617 }); |
| 618 | 618 |
| 619 TEST_F('BackgroundTest', 'NoisySlider', function() { | 619 TEST_F('BackgroundTest', 'NoisySlider', function() { |
| 620 var mockFeedback = this.createMockFeedback(); | 620 var mockFeedback = this.createMockFeedback(); |
| 621 this.runWithLoadedTree( function() {/*! | 621 this.runWithLoadedTree( function() {/*! |
| 622 <button id="go">go</button> | 622 <button id="go">go</button> |
| 623 <div id="slider" tabindex=0 role="slider"></div> | 623 <div id="slider" tabindex=0 role="slider"></div> |
| 624 <script> | 624 <script> |
| 625 function update() { | 625 function update() { |
| 626 var s = document.getElementById('slider'); | 626 var s = document.getElementById('slider'); |
| 627 s.setAttribute('aria-valuetext', 'noisy'); | 627 s.setAttribute('aria-valuetext', 'noisy'); |
| 628 setTimeout(update, 500); | 628 setTimeout(update, 500); |
| 629 } | 629 } |
| 630 update(); | 630 update(); |
| 631 </script> | 631 </script> |
| 632 */}, function(root) { | 632 */}, function(root) { |
| 633 var go = root.find({role: RoleType.BUTTON}); | 633 var go = root.find({role: RoleType.button}); |
| 634 var slider = root.find({role: RoleType.SLIDER}); | 634 var slider = root.find({role: RoleType.slider}); |
| 635 var focusButton = go.focus.bind(go); | 635 var focusButton = go.focus.bind(go); |
| 636 var focusSlider = slider.focus.bind(slider); | 636 var focusSlider = slider.focus.bind(slider); |
| 637 mockFeedback.call(focusButton) | 637 mockFeedback.call(focusButton) |
| 638 .expectNextSpeechUtteranceIsNot('noisy') | 638 .expectNextSpeechUtteranceIsNot('noisy') |
| 639 .call(focusSlider) | 639 .call(focusSlider) |
| 640 .expectSpeech('noisy') | 640 .expectSpeech('noisy') |
| 641 .expectSpeech('noisy') | 641 .expectSpeech('noisy') |
| 642 .replay(); | 642 .replay(); |
| 643 }.bind(this)); | 643 }.bind(this)); |
| 644 }); | 644 }); |
| 645 | 645 |
| 646 TEST_F('BackgroundTest', 'Checkbox', function() { | 646 TEST_F('BackgroundTest', 'Checkbox', function() { |
| 647 var mockFeedback = this.createMockFeedback(); | 647 var mockFeedback = this.createMockFeedback(); |
| 648 this.runWithLoadedTree(function() {/*! | 648 this.runWithLoadedTree(function() {/*! |
| 649 <div id="go" role="checkbox">go</div> | 649 <div id="go" role="checkbox">go</div> |
| 650 <script> | 650 <script> |
| 651 var go = document.getElementById('go'); | 651 var go = document.getElementById('go'); |
| 652 var isChecked = true; | 652 var isChecked = true; |
| 653 go.addEventListener('click', function(e) { | 653 go.addEventListener('click', function(e) { |
| 654 if (isChecked) | 654 if (isChecked) |
| 655 go.setAttribute('aria-checked', true); | 655 go.setAttribute('aria-checked', true); |
| 656 else | 656 else |
| 657 go.removeAttribute('aria-checked'); | 657 go.removeAttribute('aria-checked'); |
| 658 isChecked = !isChecked; | 658 isChecked = !isChecked; |
| 659 }); | 659 }); |
| 660 </script> | 660 </script> |
| 661 */}, function(root) { | 661 */}, function(root) { |
| 662 var cbx = root.find({role: RoleType.CHECK_BOX}); | 662 var cbx = root.find({role: RoleType.checkBox}); |
| 663 var click = cbx.doDefault.bind(cbx); | 663 var click = cbx.doDefault.bind(cbx); |
| 664 var focus = cbx.focus.bind(cbx); | 664 var focus = cbx.focus.bind(cbx); |
| 665 mockFeedback.call(focus) | 665 mockFeedback.call(focus) |
| 666 .expectSpeech('go') | 666 .expectSpeech('go') |
| 667 .expectSpeech('Check box') | 667 .expectSpeech('Check box') |
| 668 .expectSpeech('Not checked') | 668 .expectSpeech('Not checked') |
| 669 .call(click) | 669 .call(click) |
| 670 .expectSpeech('go') | 670 .expectSpeech('go') |
| 671 .expectSpeech('Check box') | 671 .expectSpeech('Check box') |
| 672 .expectSpeech('Checked') | 672 .expectSpeech('Checked') |
| (...skipping 17 matching lines...) Expand all Loading... |
| 690 /** Tests navigating into and out of iframes using nextButton */ | 690 /** Tests navigating into and out of iframes using nextButton */ |
| 691 TEST_F('BackgroundTest', 'ForwardNavigationThroughIframeButtons', function() { | 691 TEST_F('BackgroundTest', 'ForwardNavigationThroughIframeButtons', function() { |
| 692 var mockFeedback = this.createMockFeedback(); | 692 var mockFeedback = this.createMockFeedback(); |
| 693 | 693 |
| 694 var running = false; | 694 var running = false; |
| 695 var runTestIfIframeIsLoaded = function(rootNode) { | 695 var runTestIfIframeIsLoaded = function(rootNode) { |
| 696 if (running) | 696 if (running) |
| 697 return; | 697 return; |
| 698 | 698 |
| 699 // Return if the iframe hasn't loaded yet. | 699 // Return if the iframe hasn't loaded yet. |
| 700 var iframe = rootNode.find({role: RoleType.IFRAME}); | 700 var iframe = rootNode.find({role: RoleType.iframe}); |
| 701 var childDoc = iframe.firstChild; | 701 var childDoc = iframe.firstChild; |
| 702 if (!childDoc || childDoc.children.length == 0) | 702 if (!childDoc || childDoc.children.length == 0) |
| 703 return; | 703 return; |
| 704 | 704 |
| 705 running = true; | 705 running = true; |
| 706 var beforeButton = rootNode.find({role: RoleType.BUTTON, | 706 var beforeButton = rootNode.find({role: RoleType.button, |
| 707 name: 'Before'}); | 707 name: 'Before'}); |
| 708 beforeButton.focus(); | 708 beforeButton.focus(); |
| 709 mockFeedback.expectSpeech('Before', 'Button'); | 709 mockFeedback.expectSpeech('Before', 'Button'); |
| 710 mockFeedback.call(doCmd('nextButton')) | 710 mockFeedback.call(doCmd('nextButton')) |
| 711 .expectSpeech('Inside', 'Button'); | 711 .expectSpeech('Inside', 'Button'); |
| 712 mockFeedback.call(doCmd('nextButton')) | 712 mockFeedback.call(doCmd('nextButton')) |
| 713 .expectSpeech('After', 'Button'); | 713 .expectSpeech('After', 'Button'); |
| 714 mockFeedback.call(doCmd('previousButton')) | 714 mockFeedback.call(doCmd('previousButton')) |
| 715 .expectSpeech('Inside', 'Button'); | 715 .expectSpeech('Inside', 'Button'); |
| 716 mockFeedback.call(doCmd('previousButton')) | 716 mockFeedback.call(doCmd('previousButton')) |
| (...skipping 21 matching lines...) Expand all Loading... |
| 738 if (running) | 738 if (running) |
| 739 return; | 739 return; |
| 740 | 740 |
| 741 // Return if the iframe hasn't loaded yet. | 741 // Return if the iframe hasn't loaded yet. |
| 742 var iframe = rootNode.find({role: 'iframe'}); | 742 var iframe = rootNode.find({role: 'iframe'}); |
| 743 var childDoc = iframe.firstChild; | 743 var childDoc = iframe.firstChild; |
| 744 if (!childDoc || childDoc.children.length == 0) | 744 if (!childDoc || childDoc.children.length == 0) |
| 745 return; | 745 return; |
| 746 | 746 |
| 747 running = true; | 747 running = true; |
| 748 var beforeButton = rootNode.find({role: RoleType.BUTTON, | 748 var beforeButton = rootNode.find({role: RoleType.button, |
| 749 name: 'Before'}); | 749 name: 'Before'}); |
| 750 beforeButton.focus(); | 750 beforeButton.focus(); |
| 751 mockFeedback.expectSpeech('Before', 'Button'); | 751 mockFeedback.expectSpeech('Before', 'Button'); |
| 752 mockFeedback.call(doCmd('nextObject')) | 752 mockFeedback.call(doCmd('nextObject')) |
| 753 .expectSpeech('Inside', 'Button'); | 753 .expectSpeech('Inside', 'Button'); |
| 754 mockFeedback.call(doCmd('nextObject')) | 754 mockFeedback.call(doCmd('nextObject')) |
| 755 .expectSpeech('Inside', 'Heading 1'); | 755 .expectSpeech('Inside', 'Heading 1'); |
| 756 mockFeedback.call(doCmd('nextObject')) | 756 mockFeedback.call(doCmd('nextObject')) |
| 757 .expectSpeech('After', 'Button'); | 757 .expectSpeech('After', 'Button'); |
| 758 mockFeedback.call(doCmd('previousObject')) | 758 mockFeedback.call(doCmd('previousObject')) |
| (...skipping 18 matching lines...) Expand all Loading... |
| 777 | 777 |
| 778 TEST_F('BackgroundTest', 'SelectOptionSelected', function() { | 778 TEST_F('BackgroundTest', 'SelectOptionSelected', function() { |
| 779 var mockFeedback = this.createMockFeedback(); | 779 var mockFeedback = this.createMockFeedback(); |
| 780 this.runWithLoadedTree(function() {/*! | 780 this.runWithLoadedTree(function() {/*! |
| 781 <select> | 781 <select> |
| 782 <option>apple | 782 <option>apple |
| 783 <option>banana | 783 <option>banana |
| 784 <option>grapefruit | 784 <option>grapefruit |
| 785 </select> | 785 </select> |
| 786 */}, function(root) { | 786 */}, function(root) { |
| 787 var select = root.find({role: RoleType.POP_UP_BUTTON}); | 787 var select = root.find({role: RoleType.popUpButton}); |
| 788 var clickSelect = select.doDefault.bind(select); | 788 var clickSelect = select.doDefault.bind(select); |
| 789 var lastOption = select.lastChild.lastChild; | 789 var lastOption = select.lastChild.lastChild; |
| 790 var selectLastOption = lastOption.doDefault.bind(lastOption); | 790 var selectLastOption = lastOption.doDefault.bind(lastOption); |
| 791 | 791 |
| 792 mockFeedback.call(clickSelect) | 792 mockFeedback.call(clickSelect) |
| 793 .expectSpeech('apple') | 793 .expectSpeech('apple') |
| 794 .expectSpeech('Button') | 794 .expectSpeech('Button') |
| 795 .call(selectLastOption) | 795 .call(selectLastOption) |
| 796 .expectNextSpeechUtteranceIsNot('apple') | 796 .expectNextSpeechUtteranceIsNot('apple') |
| 797 .expectSpeech('grapefruit') | 797 .expectSpeech('grapefruit') |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 847 this.runWithLoadedTree(function() {/*! | 847 this.runWithLoadedTree(function() {/*! |
| 848 <div aria-label="Group" role="group" tabindex=0> | 848 <div aria-label="Group" role="group" tabindex=0> |
| 849 <input type="text"></input> | 849 <input type="text"></input> |
| 850 </div> | 850 </div> |
| 851 <ul> | 851 <ul> |
| 852 <li tabindex=0> | 852 <li tabindex=0> |
| 853 <button>ok</button> | 853 <button>ok</button> |
| 854 </li> | 854 </li> |
| 855 </ul> | 855 </ul> |
| 856 */}, function(root) { | 856 */}, function(root) { |
| 857 var listItem = root.find({role: RoleType.LIST_ITEM}); | 857 var listItem = root.find({role: RoleType.listItem}); |
| 858 | 858 |
| 859 mockFeedback.call(listItem.focus.bind(listItem)) | 859 mockFeedback.call(listItem.focus.bind(listItem)) |
| 860 .expectSpeech('List item') | 860 .expectSpeech('List item') |
| 861 .call(this.doCmd('nextObject')) | 861 .call(this.doCmd('nextObject')) |
| 862 .expectSpeech('Button') | 862 .expectSpeech('Button') |
| 863 .call(this.doCmd('previousObject')) | 863 .call(this.doCmd('previousObject')) |
| 864 .expectSpeech('List item') | 864 .expectSpeech('List item') |
| 865 .call(this.doCmd('previousObject')) | 865 .call(this.doCmd('previousObject')) |
| 866 .expectSpeech('Edit text') | 866 .expectSpeech('Edit text') |
| 867 .call(this.doCmd('previousObject')) | 867 .call(this.doCmd('previousObject')) |
| 868 .expectSpeech('Group') | 868 .expectSpeech('Group') |
| 869 .replay(); | 869 .replay(); |
| 870 }); | 870 }); |
| 871 }); | 871 }); |
| 872 | 872 |
| 873 /** Tests that navigation works when the current object disappears. */ | 873 /** Tests that navigation works when the current object disappears. */ |
| 874 TEST_F('BackgroundTest', 'DisappearingObject', function() { | 874 TEST_F('BackgroundTest', 'DisappearingObject', function() { |
| 875 var mockFeedback = this.createMockFeedback(); | 875 var mockFeedback = this.createMockFeedback(); |
| 876 this.runWithLoadedTree(this.disappearingObjectDoc, function(rootNode) { | 876 this.runWithLoadedTree(this.disappearingObjectDoc, function(rootNode) { |
| 877 var deleteButton = rootNode.find({role: RoleType.BUTTON, | 877 var deleteButton = rootNode.find({role: RoleType.button, |
| 878 attributes: { name: 'Delete' }}); | 878 attributes: { name: 'Delete' }}); |
| 879 var pressDelete = deleteButton.doDefault.bind(deleteButton); | 879 var pressDelete = deleteButton.doDefault.bind(deleteButton); |
| 880 mockFeedback.expectSpeech('start').expectBraille('start'); | 880 mockFeedback.expectSpeech('start').expectBraille('start'); |
| 881 | 881 |
| 882 mockFeedback.call(doCmd('nextObject')) | 882 mockFeedback.call(doCmd('nextObject')) |
| 883 .expectSpeech('Before1') | 883 .expectSpeech('Before1') |
| 884 .call(doCmd('nextObject')) | 884 .call(doCmd('nextObject')) |
| 885 .expectSpeech('Before2') | 885 .expectSpeech('Before2') |
| 886 .call(doCmd('nextObject')) | 886 .call(doCmd('nextObject')) |
| 887 .expectSpeech('Before3') | 887 .expectSpeech('Before3') |
| (...skipping 12 matching lines...) Expand all Loading... |
| 900 | 900 |
| 901 mockFeedback.replay(); | 901 mockFeedback.replay(); |
| 902 }); | 902 }); |
| 903 }); | 903 }); |
| 904 | 904 |
| 905 TEST_F('BackgroundTest', 'ButtonNameValueDescription', function() { | 905 TEST_F('BackgroundTest', 'ButtonNameValueDescription', function() { |
| 906 var mockFeedback = this.createMockFeedback(); | 906 var mockFeedback = this.createMockFeedback(); |
| 907 this.runWithLoadedTree(function(root) {/*! | 907 this.runWithLoadedTree(function(root) {/*! |
| 908 <input type="submit" aria-label="foo" value="foo"></input> | 908 <input type="submit" aria-label="foo" value="foo"></input> |
| 909 */}, function(root) { | 909 */}, function(root) { |
| 910 var btn = root.find({role: RoleType.BUTTON}); | 910 var btn = root.find({role: RoleType.button}); |
| 911 mockFeedback.call(btn.focus.bind(btn)) | 911 mockFeedback.call(btn.focus.bind(btn)) |
| 912 .expectSpeech('foo') | 912 .expectSpeech('foo') |
| 913 .expectSpeech('Button') | 913 .expectSpeech('Button') |
| 914 .replay(); | 914 .replay(); |
| 915 }); | 915 }); |
| 916 }); | 916 }); |
| 917 | 917 |
| 918 TEST_F('BackgroundTest', 'NameFromHeadingLink', function() { | 918 TEST_F('BackgroundTest', 'NameFromHeadingLink', function() { |
| 919 var mockFeedback = this.createMockFeedback(); | 919 var mockFeedback = this.createMockFeedback(); |
| 920 this.runWithLoadedTree(function(root) {/*! | 920 this.runWithLoadedTree(function(root) {/*! |
| 921 <p>before</p> | 921 <p>before</p> |
| 922 <h1><a href="google.com">go</a><p>here</p></h1> | 922 <h1><a href="google.com">go</a><p>here</p></h1> |
| 923 */}, function(root) { | 923 */}, function(root) { |
| 924 var link = root.find({role: RoleType.LINK}); | 924 var link = root.find({role: RoleType.link}); |
| 925 mockFeedback.call(link.focus.bind(link)) | 925 mockFeedback.call(link.focus.bind(link)) |
| 926 .expectSpeech('go') | 926 .expectSpeech('go') |
| 927 .expectSpeech('Link') | 927 .expectSpeech('Link') |
| 928 .expectSpeech('Heading 1') | 928 .expectSpeech('Heading 1') |
| 929 .replay(); | 929 .replay(); |
| 930 }); | 930 }); |
| 931 }); | 931 }); |
| 932 | 932 |
| 933 TEST_F('BackgroundTest', 'OptionChildIndexCount', function() { | 933 TEST_F('BackgroundTest', 'OptionChildIndexCount', function() { |
| 934 var mockFeedback = this.createMockFeedback(); | 934 var mockFeedback = this.createMockFeedback(); |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1193 }); | 1193 }); |
| 1194 }); | 1194 }); |
| 1195 | 1195 |
| 1196 TEST_F('BackgroundTest', 'NavigationMovesFocus', function() { | 1196 TEST_F('BackgroundTest', 'NavigationMovesFocus', function() { |
| 1197 this.runWithLoadedTree(function(root) {/*! | 1197 this.runWithLoadedTree(function(root) {/*! |
| 1198 <p>start</p> | 1198 <p>start</p> |
| 1199 <input type="text"></input> | 1199 <input type="text"></input> |
| 1200 */}, function(root) { | 1200 */}, function(root) { |
| 1201 this.listenOnce(root, 'focus', function(e) { | 1201 this.listenOnce(root, 'focus', function(e) { |
| 1202 var focus = ChromeVoxState.instance.currentRange.start.node; | 1202 var focus = ChromeVoxState.instance.currentRange.start.node; |
| 1203 assertEquals(RoleType.TEXT_FIELD, focus.role); | 1203 assertEquals(RoleType.textField, focus.role); |
| 1204 assertTrue(focus.state.focused); | 1204 assertTrue(focus.state.focused); |
| 1205 }); | 1205 }); |
| 1206 doCmd('nextEditText')(); | 1206 doCmd('nextEditText')(); |
| 1207 }); | 1207 }); |
| 1208 }); | 1208 }); |
| 1209 | 1209 |
| 1210 TEST_F('BackgroundTest', 'BrailleCaretNavigation', function() { | 1210 TEST_F('BackgroundTest', 'BrailleCaretNavigation', function() { |
| 1211 var mockFeedback = this.createMockFeedback(); | 1211 var mockFeedback = this.createMockFeedback(); |
| 1212 this.runWithLoadedTree(function(root) {/*! | 1212 this.runWithLoadedTree(function(root) {/*! |
| 1213 <p>This is a<em>test</em> of inline braille<br>with a second line</p> | 1213 <p>This is a<em>test</em> of inline braille<br>with a second line</p> |
| 1214 */}, function(root) { | 1214 */}, function(root) { |
| 1215 var text = 'This is a'; | 1215 var text = 'This is a'; |
| 1216 mockFeedback.call(doCmd('nextCharacter')) | 1216 mockFeedback.call(doCmd('nextCharacter')) |
| 1217 .expectBraille(text, {startIndex: 1, endIndex: 2}) // h | 1217 .expectBraille(text, {startIndex: 1, endIndex: 2}) // h |
| 1218 .call(doCmd('nextCharacter')) | 1218 .call(doCmd('nextCharacter')) |
| 1219 .expectBraille(text, {startIndex: 2, endIndex: 3}) // i | 1219 .expectBraille(text, {startIndex: 2, endIndex: 3}) // i |
| 1220 .call(doCmd('nextWord')) | 1220 .call(doCmd('nextWord')) |
| 1221 .expectBraille(text, {startIndex: 5, endIndex: 7}) // is | 1221 .expectBraille(text, {startIndex: 5, endIndex: 7}) // is |
| 1222 .call(doCmd('previousWord')) | 1222 .call(doCmd('previousWord')) |
| 1223 .expectBraille(text, {startIndex: 0, endIndex: 4}) // This | 1223 .expectBraille(text, {startIndex: 0, endIndex: 4}) // This |
| 1224 .call(doCmd('nextLine')) | 1224 .call(doCmd('nextLine')) |
| 1225 // Ensure nothing is selected when the range covers the entire line. | 1225 // Ensure nothing is selected when the range covers the entire line. |
| 1226 .expectBraille('with a second line', {startIndex: -1, endIndex: -1}) | 1226 .expectBraille('with a second line', {startIndex: -1, endIndex: -1}) |
| 1227 .replay(); | 1227 .replay(); |
| 1228 }); | 1228 }); |
| 1229 }); | 1229 }); |
| OLD | NEW |