Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5901)

Unified Diff: chrome/browser/resources/chromeos/chromevox/common/braille_util_test.js

Issue 339923002: ChromeVox braille_util_test (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/chromeos/chromevox/chromevox_tests.gypi ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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));
+});
« no previous file with comments | « chrome/browser/resources/chromeos/chromevox/chromevox_tests.gypi ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698