summaryrefslogtreecommitdiffstats
path: root/accessible/tests/mochitest/table/test_sels_listbox.xul
diff options
context:
space:
mode:
Diffstat (limited to 'accessible/tests/mochitest/table/test_sels_listbox.xul')
-rw-r--r--accessible/tests/mochitest/table/test_sels_listbox.xul247
1 files changed, 247 insertions, 0 deletions
diff --git a/accessible/tests/mochitest/table/test_sels_listbox.xul b/accessible/tests/mochitest/table/test_sels_listbox.xul
new file mode 100644
index 000000000..83697e8d0
--- /dev/null
+++ b/accessible/tests/mochitest/table/test_sels_listbox.xul
@@ -0,0 +1,247 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
+ type="text/css"?>
+
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ title="nsIAccessibleTable selection methods on xul:listbox test.">
+
+ <script type="application/javascript"
+ src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
+
+ <script type="application/javascript"
+ src="../common.js"></script>
+ <script type="application/javascript"
+ src="../table.js"></script>
+
+ <script type="application/javascript">
+ <![CDATA[
+ function doTest()
+ {
+ var id = "listbox3";
+ var acc = getAccessible(id, [nsIAccessibleTable]);
+
+ var rowCount = acc.rows;
+ var colsCount = acc.columns;
+
+ // columns selection
+ testColumnSelection(id, acc, colsCount, 0, null);
+ acc.selectColumn(0);
+ testColumnSelection(id, acc, colsCount, 0, null);
+
+ // rows selection
+ testRowSelection(id, acc, rowCount, 0, null);
+ acc.selectRow(0);
+ testRowSelection(id, acc, rowCount, 1, [0]);
+ acc.selectRow(1);
+ testRowSelection(id, acc, rowCount, 1, [1]);
+ acc.unselectRow(1);
+ testRowSelection(id, acc, rowCount, 0, null);
+
+ // cells selection
+ testCellSelection(id, acc, rowCount, colsCount, 0, null);
+ acc.selectRow(2);
+ testCellSelection(id, acc, rowCount, colsCount, 3, [6, 7, 8]);
+ acc.unselectRow(2);
+ testCellSelection(id, acc, rowCount, colsCount, 0, null);
+
+ SimpleTest.finish();
+ }
+
+ /**
+ * Helper function to test isColumnSelected(), selectedColumnCount and
+ * getSelectedColumn() methods.
+ */
+ function testColumnSelection(aId, aAcc, aCount, aSelCount, aSelIndexesArray)
+ {
+ // isColumnSelected
+ for (var col = 0; col < aCount; col++) {
+ if (aSelIndexesArray && aSelIndexesArray.indexOf(col) != -1) {
+ is(aAcc.isColumnSelected(col), true,
+ aId + ": column " + col + " should be selected");
+ } else {
+ is(aAcc.isColumnSelected(col), false,
+ aId + ": column " + col + " shouldn't be selected");
+ }
+ }
+
+ // selectedColumnCount
+ is(aAcc.selectedColumnCount, aSelCount,
+ aId + ": wrong number of selected columns");
+
+ // getSelectedColumns
+ var selColsCount = {}, selCols = {};
+ aAcc.getSelectedColumnIndices(selColsCount, selCols);
+
+ is(selColsCount.value, aSelCount,
+ aId + ": wrong number of selected columns");
+
+ if (!aSelIndexesArray) {
+ is(selCols.value, undefined,
+ aId + ": no columns should be selected");
+ } else {
+ for (var i = 0; i < selCols.length; i++) {
+ is(selCols[i], aSelIndexesArray[i],
+ aId + ": wrong selected column index " + i);
+ }
+ }
+ }
+
+ /**
+ * Helper function to test isRowSelected(), selectedRowCount() and
+ * getSelectedRow() methods.
+ */
+ function testRowSelection(aId, aAcc, aCount, aSelCount, aSelIndexesArray)
+ {
+ // isRowSelected
+ for (var row = 0; row < aCount; row++) {
+ if (aSelIndexesArray && aSelIndexesArray.indexOf(row) != -1) {
+ is(aAcc.isRowSelected(row), true,
+ aId + ": row " + row + " should be selected");
+ } else {
+ is(aAcc.isRowSelected(row), false,
+ aId + ": row " + row + " shouldn't be selected");
+ }
+ }
+
+ // selectedRowCount
+ is(aAcc.selectedRowCount, aSelCount,
+ aId + ": wrong number of selected rows");
+
+ // getSelectedRows
+ var selColsCount = {}, selCols = {};
+ aAcc.getSelectedRowIndices(selColsCount, selCols);
+
+ is(selColsCount.value, aSelCount,
+ aId + ": wrong number of selected rows");
+
+ if (!aSelIndexesArray) {
+ is(selCols.value, undefined,
+ aId + ": no row should be selected");
+ } else {
+ for (var i = 0; i < selCols.length; i++) {
+ is(selCols[i], aSelIndexesArray[i],
+ aId + ": wrong selected row index " + i);
+ }
+ }
+ }
+
+ /**
+ * Helper function to test isCellSelected(), selectedCellCount() and
+ * getSelectedCells() methods.
+ */
+ function testCellSelection(aId, aAcc, aRowCount, aColCount,
+ aSelCount, aSelIndexesArray)
+ {
+ // isCellSelected
+ for (var row = 0; row < aRowCount; row++) {
+ for (var col = 0; col < aColCount; col++) {
+ var index = aAcc.getIndexAt(row, col);
+ if (aSelIndexesArray && aSelIndexesArray.indexOf(index) != -1) {
+ is(aAcc.isCellSelected(row, col), true,
+ aId + ": cell (" + row + ", " + col + ") should be selected");
+ } else {
+ is(aAcc.isCellSelected(row, col), false,
+ aId + ": cell (" + row + ", " + col + ") shouldn't be selected");
+ }
+ }
+ }
+
+ // selectedCellCount
+ is(aAcc.selectedCellCount, aSelCount,
+ aId + ": wrong number of selected cells");
+
+ // getSelectedCells
+ var selColsCount = {}, selCols = {};
+ aAcc.getSelectedCellIndices(selColsCount, selCols);
+
+ is(selColsCount.value, aSelCount,
+ aId + ": wrong number of selected cells");
+
+ if (!aSelIndexesArray) {
+ is(selCols.value, undefined,
+ aId + ": no cells should be selected");
+ } else {
+ for (var i = 0; i < selCols.length; i++) {
+ is(selCols[i], aSelIndexesArray[i],
+ aId + ": wrong selected cell index " + i);
+ }
+ }
+ }
+
+ SimpleTest.waitForExplicitFinish();
+ addA11yLoadEvent(doTest);
+ ]]>
+ </script>
+
+ <hbox style="overflow: auto;">
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ <a target="_blank"
+ href="https://bugzilla.mozilla.org/show_bug.cgi?id=418371"
+ title="implement the rest of methods of nsIAccessibleTable on xul:listbox">
+ Mozilla Bug 418371
+ </a>
+ <a target="_blank"
+ href="https://bugzilla.mozilla.org/show_bug.cgi?id=512424"
+ title="implement IAccessibleTable2">
+ Mozilla Bug 512424
+ </a>
+
+ <p id="display"></p>
+ <div id="content" style="display: none">
+ </div>
+ <pre id="test">
+ </pre>
+ </body>
+
+ <vbox flex="1">
+
+ <label control="listbox2" value="multicolumn listbox: "/>
+ <listbox id="listbox2">
+ <listcols>
+ <listcol flex="1"/>
+ <listcol flex="1"/>
+ </listcols>
+ <listitem>
+ <listcell label="cell1"/>
+ <listcell label="cell2"/>
+ </listitem>
+ <listitem>
+ <listcell label="cell1"/>
+ <listcell label="cell2"/>
+ </listitem>
+ </listbox>
+
+ <label control="listbox3" value="multicolumn listbox with header"/>
+ <listbox id="listbox3">
+ <listhead>
+ <listheader label="header1"/>
+ <listheader label="header2"/>
+ <listheader label="header3"/>
+ </listhead>
+ <listcols>
+ <listcol flex="1"/>
+ <listcol flex="1"/>
+ <listcol flex="1"/>
+ </listcols>
+ <listitem>
+ <listcell label="cell0"/>
+ <listcell label="cell1"/>
+ <listcell label="cell2"/>
+ </listitem>
+ <listitem>
+ <listcell label="cell3"/>
+ <listcell label="cell4"/>
+ <listcell label="cell5"/>
+ </listitem>
+ <listitem>
+ <listcell label="cell6"/>
+ <listcell label="cell7"/>
+ <listcell label="cell8"/>
+ </listitem>
+ </listbox>
+ </vbox>
+ </hbox>
+
+</window>
+