| Index: chrome/browser/resources/chromeos/chromevox/common/braille_util_test.js
|
| diff --git a/chrome/browser/resources/chromeos/chromevox/common/braille_util_test.js b/chrome/browser/resources/chromeos/chromevox/common/braille_util_test.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f0949838a9e6b33a7cdb66e27877dbfdc8269351
|
| --- /dev/null
|
| +++ b/chrome/browser/resources/chromeos/chromevox/common/braille_util_test.js
|
| @@ -0,0 +1,405 @@
|
| +// Copyright 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// Include test fixture.
|
| +GEN_INCLUDE(['../testing/chromevox_unittest_base.js']);
|
| +
|
| +/**
|
| + * Test fixture.
|
| + * @constructor
|
| + * @extends {ChromeVoxUnitTestBase}
|
| + */
|
| +function CvoxBrailleUtilUnitTest() {}
|
| +
|
| +CvoxBrailleUtilUnitTest.prototype = {
|
| + __proto__: ChromeVoxUnitTestBase.prototype,
|
| +
|
| + /** @override */
|
| + closureModuleDeps: [
|
| + 'cvox.BrailleUtil',
|
| + 'cvox.CursorSelection',
|
| + 'cvox.NavigationShifter',
|
| + ],
|
| +
|
| + /** @override */
|
| + setUp: function() {
|
| + /** Simple mock. */
|
| + cvox.ChromeVox.msgs = {};
|
| +
|
| + /**
|
| + * Simply return the message id.
|
| + * @param {string} msg Message id.
|
| + * @return {string} Message id.
|
| + */
|
| + cvox.ChromeVox.msgs.getMsg = function(msg) {
|
| + return msg;
|
| + };
|
| + },
|
| +
|
| + /**
|
| + * @param {!Node} expectedParent Expected parent node.
|
| + * @param {!Node} node Node to examine.
|
| + * @private
|
| + */
|
| + assertTextNodeChildOf_: function(expectedParent, node) {
|
| + this.assertEquals(Node.TEXT_NODE, node.nodeType);
|
| + this.assertEquals(expectedParent, node.parentNode);
|
| + },
|
| +
|
| + /**
|
| + * Helper to retrieve braille for testing.
|
| + * @param {!cvox.CursorSelection} prevSel Previous selection.
|
| + * @param {!cvox.CursorSelection} sel Current selection.
|
| + * @return {!cvox.NavBraille} Resulting braille.
|
| + * @private
|
| + */
|
| + getBraille_: function(prevSel, sel) {
|
| + return (new cvox.NavigationShifter).getBraille(prevSel, sel);
|
| + },
|
| +
|
| + /**
|
| + * Asserts that two NavBraille objects are equal, ignoring spans.
|
| + * @param {Object} expected Expected result, should have no spans.
|
| + * @param {cvox.NavBraille} actual Actual result.
|
| + */
|
| + assertBrailleEquals: function(expected, actual) {
|
| + actual = new cvox.NavBraille({
|
| + text: actual.text.toString(),
|
| + startIndex: actual.startIndex,
|
| + endIndex: actual.endIndex
|
| + });
|
| + assertThat(new cvox.NavBraille(expected), eqJSON(actual));
|
| + }
|
| +};
|
| +
|
| +TEST_F('CvoxBrailleUtilUnitTest', 'BrailleName', function() {
|
| + this.loadHtml(
|
| + '<div id="navbar">' +
|
| + '<a id="1" href="one.com">one</a>' +
|
| + '<a id="2" href="two.com">two</a>' +
|
| + '<a id="3" href="three.com">three</a>' +
|
| + '</div>');
|
| + var navbar = cvox.CursorSelection.fromNode($('navbar'));
|
| + var braille = this.getBraille_(navbar, navbar);
|
| + this.assertBrailleEquals(
|
| + {text: 'one lnk two lnk three lnk',
|
| + startIndex: 0,
|
| + endIndex: 1
|
| + }, braille);
|
| +
|
| + var one =
|
| + cvox.CursorSelection.fromNode($('1').firstChild);
|
| + braille = this.getBraille_(one, one);
|
| + this.assertBrailleEquals(
|
| + {text: 'one lnk two lnk three lnk',
|
| + startIndex: 0,
|
| + endIndex: 1
|
| + }, braille);
|
| +
|
| + var two =
|
| + cvox.CursorSelection.fromNode($('2').firstChild);
|
| + braille = this.getBraille_(one, two);
|
| + this.assertBrailleEquals(
|
| + {text: 'one lnk two lnk three lnk',
|
| + startIndex: 8,
|
| + endIndex: 9
|
| + }, braille);
|
| +
|
| + var three =
|
| + cvox.CursorSelection.fromNode($('3').firstChild);
|
| + braille = this.getBraille_(two, three);
|
| + this.assertBrailleEquals(
|
| + {text: 'one lnk two lnk three lnk',
|
| + startIndex: 16,
|
| + endIndex: 17
|
| + }, braille);
|
| +});
|
| +
|
| +
|
| +/**
|
| + * @export
|
| + */
|
| +TEST_F('CvoxBrailleUtilUnitTest', 'NameTemplate', function() {
|
| + this.loadHtml(
|
| + '<button id="1">Submit</button>' +
|
| + '<input id="2" type="text" aria-label="Search">'
|
| + );
|
| +
|
| + var button = cvox.CursorSelection.fromNode($('1'));
|
| +
|
| + this.assertBrailleEquals(
|
| + {text: '[Submit]',
|
| + startIndex: 0,
|
| + endIndex: 1
|
| + }, this.getBraille_(button, button));
|
| +
|
| + var inputElement = $('2');
|
| + var input = cvox.CursorSelection.fromNode(inputElement);
|
| +
|
| + // Note: the cursor appears where text would be typed.
|
| + this.assertBrailleEquals(
|
| + {text: 'Search: edtxt',
|
| + startIndex: 0,
|
| + endIndex: 1
|
| + }, this.getBraille_(input, input));
|
| + inputElement.focus();
|
| + this.assertBrailleEquals(
|
| + {text: 'Search: edtxt',
|
| + startIndex: 8,
|
| + endIndex: 8
|
| + }, this.getBraille_(input, input));
|
| +});
|
| +
|
| +
|
| +/**
|
| + * @export
|
| + */
|
| +TEST_F('CvoxBrailleUtilUnitTest', 'TextField', function() {
|
| + this.loadHtml(
|
| + '<input id="1" type="text" aria-label="Search" value="larry">'
|
| + );
|
| +
|
| + var inputElement = $('1');
|
| + var input = cvox.CursorSelection.fromNode(inputElement);
|
| +
|
| + // Note: the cursor appears where text would be typed.
|
| + // The cursor is at the beginning by default.
|
| + this.assertBrailleEquals(
|
| + {text: 'Search: larry edtxt',
|
| + startIndex: 0,
|
| + endIndex: 1
|
| + }, this.getBraille_(input, input));
|
| + inputElement.focus();
|
| + this.assertBrailleEquals(
|
| + {text: 'Search: larry edtxt',
|
| + startIndex: 8,
|
| + endIndex: 13
|
| + }, this.getBraille_(input, input));
|
| +});
|
| +
|
| +
|
| +/**
|
| + * @export
|
| + */
|
| +TEST_F('CvoxBrailleUtilUnitTest', 'TextFieldEmpty', function() {
|
| + this.loadHtml(
|
| + '<input id="1" type="text">'
|
| + );
|
| +
|
| + var inputElement = $('1');
|
| + var input = cvox.CursorSelection.fromNode($('1'));
|
| +
|
| + this.assertBrailleEquals(
|
| + {text: ': edtxt',
|
| + startIndex: 0,
|
| + endIndex: 1
|
| + }, this.getBraille_(input, input));
|
| + inputElement.focus();
|
| + this.assertBrailleEquals(
|
| + {text: ': edtxt',
|
| + startIndex: 2,
|
| + endIndex: 2
|
| + }, this.getBraille_(input, input));
|
| +});
|
| +
|
| +
|
| +/**
|
| + * @export
|
| + */
|
| +TEST_F('CvoxBrailleUtilUnitTest', 'TextFieldSelection', function() {
|
| + this.loadHtml(
|
| + '<input id="1" type="text" value="strawberry">'
|
| + );
|
| +
|
| + var inputElem = $('1');
|
| + var input = cvox.CursorSelection.fromNode(inputElem);
|
| +
|
| + // Selection.
|
| + inputElem.selectionStart = 2;
|
| + inputElem.selectionEnd = 5;
|
| + this.assertBrailleEquals(
|
| + {text: ': strawberry edtxt',
|
| + startIndex: 4,
|
| + endIndex: 7
|
| + }, this.getBraille_(input, input));
|
| +
|
| + // Cursor at end.
|
| + inputElem.selectionStart = 10;
|
| + inputElem.selectionEnd = 10;
|
| + this.assertBrailleEquals(
|
| + {text: ': strawberry edtxt',
|
| + startIndex: 12,
|
| + endIndex: 12
|
| + }, this.getBraille_(input, input));
|
| +});
|
| +
|
| +
|
| +/**
|
| + * @export
|
| + */
|
| +TEST_F('CvoxBrailleUtilUnitTest', 'StateTemplate', function() {
|
| + this.loadHtml(
|
| + '<input id="1" type="checkbox" aria-label="Save">');
|
| +
|
| + var checkbox = cvox.CursorSelection.fromNode($('1'));
|
| +
|
| + this.assertBrailleEquals(
|
| + {text: 'Save ( )',
|
| + startIndex: 0,
|
| + endIndex: 1
|
| + }, this.getBraille_(checkbox, checkbox));
|
| +
|
| + $('1').checked = true;
|
| +
|
| + this.assertBrailleEquals(
|
| + {text: 'Save (x)',
|
| + startIndex: 0,
|
| + endIndex: 1
|
| + }, this.getBraille_(checkbox, checkbox));
|
| +});
|
| +
|
| +
|
| +/**
|
| + * @export
|
| + */
|
| +TEST_F('CvoxBrailleUtilUnitTest', 'AccessKey', function() {
|
| + this.loadHtml(
|
| + '<a href="http://www.google.com" id="1" accesskey="g">Google</a>');
|
| +
|
| + var link = cvox.CursorSelection.fromNode($('1'));
|
| +
|
| + this.assertBrailleEquals(
|
| + {text: 'Google lnk access key:g',
|
| + startIndex: 0,
|
| + endIndex: 1
|
| + }, this.getBraille_(link, link));
|
| +});
|
| +
|
| +
|
| +/**
|
| + * @export
|
| + */
|
| +TEST_F('CvoxBrailleUtilUnitTest', 'ContainerTemplate', function() {
|
| + this.loadHtml(
|
| + '<h1>' +
|
| + '<a id="1" href="#menu">Skip To Menu</a>' +
|
| + '</h1>'
|
| + );
|
| +
|
| + var link = cvox.CursorSelection.fromNode($('1'));
|
| +
|
| + var navBraille = this.getBraille_(
|
| + cvox.CursorSelection.fromBody(), link);
|
| + this.assertBrailleEquals(
|
| + {text: 'h1 Skip To Menu int lnk',
|
| + startIndex: 0,
|
| + endIndex: 1
|
| + }, navBraille);
|
| +});
|
| +
|
| +
|
| +/**
|
| + * @export
|
| + */
|
| +TEST_F('CvoxBrailleUtilUnitTest', 'LinkSpans', function() {
|
| + this.loadHtml('<p><a id="1" href="#1">Hello</a> from' +
|
| + ' <a id="2" href="//www.google.com/">ChromeVox</a>');
|
| + var link1 = $('1');
|
| + var link2 = $('2');
|
| + var navBraille = this.getBraille_(
|
| + cvox.CursorSelection.fromBody(), cvox.CursorSelection.fromNode(link1));
|
| + this.assertEquals('Hello int lnk from ChromeVox lnk',
|
| + navBraille.text.toString());
|
| + this.assertEquals(link1, navBraille.text.getSpan(0));
|
| + this.assertEquals(link1, navBraille.text.getSpan(12));
|
| + this.assertEquals('undefined', typeof navBraille.text.getSpan(13));
|
| + this.assertEquals('undefined', typeof navBraille.text.getSpan(18));
|
| + this.assertEquals(link2, navBraille.text.getSpan(19));
|
| + this.assertEquals(link2, navBraille.text.getSpan(31));
|
| +});
|
| +
|
| +
|
| +/**
|
| + * @export
|
| + */
|
| +TEST_F('CvoxBrailleUtilUnitTest', 'NestedElements', function() {
|
| + this.loadHtml('<h1 id="test-h1">Larry, ' +
|
| + '<a href="#batman" id="batman-link">Sergey</a> and Eric</h1>');
|
| + var h1 = $('test-h1');
|
| + var link = $('batman-link');
|
| + var navBraille = this.getBraille_(
|
| + cvox.CursorSelection.fromBody(), cvox.CursorSelection.fromNode(h1));
|
| + this.assertEquals('h1 Larry, Sergey int lnk and Eric',
|
| + navBraille.text.toString());
|
| + this.assertTextNodeChildOf_(h1, navBraille.text.getSpan(0));
|
| + this.assertTextNodeChildOf_(h1, navBraille.text.getSpan(5));
|
| + this.assertEquals(link, navBraille.text.getSpan(15));
|
| + this.assertTextNodeChildOf_(h1, navBraille.text.getSpan(30));
|
| +});
|
| +
|
| +
|
| +/**
|
| + * @export
|
| + */
|
| +TEST_F('CvoxBrailleUtilUnitTest', 'GetTemplatedOverride', function() {
|
| + assertEquals('Menu mnu',
|
| + cvox.BrailleUtil.getTemplated(null, null,
|
| + { 'name': 'Menu',
|
| + 'roleMsg': 'aria_role_menu' }));
|
| + assertEquals('alrt: Watch out!',
|
| + cvox.BrailleUtil.getTemplated(null, null,
|
| + { 'name': 'Watch out!',
|
| + 'roleMsg': 'aria_role_alert' }));
|
| + // Test all properties. role, if present, overrides roleMsg.
|
| + assertEquals('Name Value Role State',
|
| + cvox.BrailleUtil.getTemplated(null, null,
|
| + { 'name': 'Name',
|
| + 'role': 'Role',
|
| + 'roleMsg': 'excluded',
|
| + 'value': 'Value',
|
| + 'state': 'State'
|
| + }));
|
| +});
|
| +
|
| +
|
| +/**
|
| + * @export
|
| + */
|
| +TEST_F('CvoxBrailleUtilUnitTest', 'CreateValue', function() {
|
| + var s;
|
| + var valueSpan;
|
| + var selectiponSpan;
|
| +
|
| + // Value without a selection.
|
| + s = cvox.BrailleUtil.createValue('value');
|
| + assertEquals('value', s.toString());
|
| + assertUndefined(s.getSpanInstanceOf(cvox.BrailleUtil.ValueSelectionSpan));
|
| + valueSpan = s.getSpanInstanceOf(cvox.BrailleUtil.ValueSpan);
|
| + assertEquals(0, s.getSpanStart(valueSpan));
|
| + assertEquals(s.getLength(), s.getSpanEnd(valueSpan));
|
| +
|
| + // Value with a carret at the start of the text.
|
| + s = cvox.BrailleUtil.createValue('value', 0);
|
| + selectionSpan = s.getSpanInstanceOf(cvox.BrailleUtil.ValueSelectionSpan);
|
| + assertEquals(0, s.getSpanStart(selectionSpan));
|
| + assertEquals(0, s.getSpanEnd(selectionSpan));
|
| +
|
| + // Value with a carret inside the text.
|
| + s = cvox.BrailleUtil.createValue('value', 1);
|
| + selectionSpan = s.getSpanInstanceOf(cvox.BrailleUtil.ValueSelectionSpan);
|
| + assertEquals(1, s.getSpanStart(selectionSpan));
|
| + assertEquals(1, s.getSpanEnd(selectionSpan));
|
| +
|
| + // Value with a carret at the end of the text.
|
| + s = cvox.BrailleUtil.createValue('value', 5);
|
| + selectionSpan = s.getSpanInstanceOf(cvox.BrailleUtil.ValueSelectionSpan);
|
| + assertEquals(5, s.getSpanStart(selectionSpan));
|
| + assertEquals(5, s.getSpanEnd(selectionSpan));
|
| +
|
| + // All of the value selected selected with reversed start and end.
|
| + s = cvox.BrailleUtil.createValue('value', 5, 0);
|
| + selectionSpan = s.getSpanInstanceOf(cvox.BrailleUtil.ValueSelectionSpan);
|
| + assertEquals(0, s.getSpanStart(selectionSpan));
|
| + assertEquals(5, s.getSpanEnd(selectionSpan));
|
| +});
|
|
|