Index: chrome/browser/resources/chromeos/chromevox/common/aria_util_test.js |
diff --git a/chrome/browser/resources/chromeos/chromevox/common/aria_util_test.js b/chrome/browser/resources/chromeos/chromevox/common/aria_util_test.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e6f1a26b8c765eede3f9bf27e760d7ea70ee3e7d |
--- /dev/null |
+++ b/chrome/browser/resources/chromeos/chromevox/common/aria_util_test.js |
@@ -0,0 +1,144 @@ |
+// Copyright 2014 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 for aria_util.js. |
+ * @constructor |
+ * @extends {ChromeVoxUnitTestBase} |
+ */ |
+function CvoxAriaUtilUnitTest() {} |
+ |
+CvoxAriaUtilUnitTest.prototype = { |
+ __proto__: ChromeVoxUnitTestBase.prototype, |
+ |
+ /** @override */ |
+ extraLibraries: [ |
+ 'aria_util.js', |
+ 'dom_util.js', |
+ 'node_state.js', |
+ 'chromevox.js', |
+ '../host/interface/abstract_earcons.js'] |
+}; |
+ |
+TEST_F('CvoxAriaUtilUnitTest', 'GetStateGridWithActiveCell', function() { |
+ this.loadDoc(function() {/*! |
+ <div id="grid" role="grid" aria-activedescendant="cell"> |
+ <div role="row"> |
+ <div id="cell" role="gridcell"> |
+ </div> |
+ </div> |
+ */}); |
+ assertThat( |
+ cvox.AriaUtil.getStateMsgs($('grid'), true), |
+ eqJSON([['aria_role_gridcell_pos', 1, 1]])); |
+}); |
+ |
+TEST_F('CvoxAriaUtilUnitTest', 'GetActiveDescendant', function() { |
+ this.loadDoc(function() {/*! |
+ <div id="top" aria-activedescendant="child"> |
+ <div id="child" /> |
+ </div> |
+ <div id="top_2" aria-activedescendant="child_2"> |
+ <div id="child_2" aria-activedescendant="grandchild_2"> |
+ <div id="grandchild_2" /> |
+ </div> |
+ </div> |
+ |
+ <h1>The buggy cases.</h1> |
+ <div id="loop" aria-activedescendant="loop" /> |
+ <div id="circleA" aria-activedescendant="circleB"> |
+ <div id="circleB" aria-activedescendant="circleA" /> |
+ </div> |
+ */}); |
+ |
+ // The typical case. |
+ var topElt = $('top'); |
+ var childElt = $('child'); |
+ assertEquals(childElt, cvox.AriaUtil.getActiveDescendant(topElt)); |
+ |
+ // childElt has not aria-activedescendant, so return null. |
+ assertEquals(null, cvox.AriaUtil.getActiveDescendant(childElt)); |
+ |
+ // The chained case. |
+ var top2Elt = $('top_2'); |
+ var grandchild2Elt = $('grandchild_2'); |
+ assertEquals(grandchild2Elt, cvox.AriaUtil.getActiveDescendant(top2Elt)); |
+ |
+ // The buggy cases. These are invalid, so return null as if the |
+ // aria-activedescendant tags did not exist. |
+ var loopElt = $('loop'); |
+ assertEquals(null, cvox.AriaUtil.getActiveDescendant(loopElt)); |
+ |
+ var circleAElt = $('circleA'); |
+ assertEquals(null, cvox.AriaUtil.getActiveDescendant(circleAElt)); |
+}); |
+ |
+TEST_F('CvoxAriaUtilUnitTest', 'ListIndexAndState', function() { |
+ this.loadDoc(function() {/*! |
+ <div id="l" role="listbox" tabindex="0" aria-activedescendant="l2"> |
+ <div id="l1" role="option">A</div> |
+ <div id="l2" role="option">B</div> |
+ <div id="l3" role="option">C</div> |
+ </div> |
+ <div id="a" role="listbox" tabindex="0" aria-activedescendant="a2"> |
+ <div id="a1" role="option" aria-setsize="10" aria-posinset="5">A</div> |
+ <div id="a2" role="option" aria-setsize="20" aria-posinset="15">B</div> |
+ <div id="a3" role="option" aria-setsize="30" aria-posinset="25">C</div> |
+ </div> |
+ <div id="b" role="listbox" tabindex="0" aria-activedescendant="b2"> |
+ <div id="b1" role="option" aria-posinset="3">A</div> |
+ <div id="b2" role="option" aria-posinset="2">B</div> |
+ <div id="b3" role="option" aria-posinset="1">C</div> |
+ </div> |
+ */}); |
+ |
+ var optionElt = $('l2'); |
+ assertThat( |
+ cvox.AriaUtil.getStateMsgs(optionElt), |
+ eqJSON([['list_position', 2, 3]])); |
+ |
+ var ariaOptionElt = $('a2'); |
+ assertThat( |
+ cvox.AriaUtil.getStateMsgs(ariaOptionElt), |
+ eqJSON([['list_position', 15, 20]])); |
+ |
+ ariaOptionElt = $('b3'); |
+ assertThat( |
+ cvox.AriaUtil.getStateMsgs(ariaOptionElt), |
+ eqJSON([['list_position', 1, 3]])); |
+}); |
+ |
+TEST_F('CvoxAriaUtilUnitTest', 'GetLiveRegions', function() { |
+ this.loadDoc(function() {/*! |
+ <div id="outer"> |
+ <div id="progress" role="progressbar" aria-live="polite" aria-valuenow="1"> |
+ <div id="ptext"> |
+ 1% complete. |
+ </div> |
+ </div> |
+ <div id="progress2" role="progressbar" aria-live="polite" aria-valuenow="1"> |
+ <div id="ptext2"> |
+ 1% complete. |
+ </div> |
+ </div> |
+ </div> |
+ */}); |
+ |
+ var progressLiveRegions = cvox.AriaUtil.getLiveRegions(progress); |
+ assertEquals(1, progressLiveRegions.length); |
+ assertNotEquals(-1, progressLiveRegions.indexOf(progress)); |
+ |
+ var outerLiveRegions = cvox.AriaUtil.getLiveRegions(outer); |
+ assertEquals(2, outerLiveRegions.length); |
+ assertNotEquals(-1, outerLiveRegions.indexOf(progress)); |
+ assertNotEquals(-1, outerLiveRegions.indexOf(progress2)); |
+ |
+ // getLiveRegions works walking up the tree as well. |
+ var ptextLiveRegions = cvox.AriaUtil.getLiveRegions(ptext); |
+ assertEquals(1, ptextLiveRegions.length); |
+ assertNotEquals(-1, ptextLiveRegions.indexOf(progress)); |
+}); |