diff options
Diffstat (limited to 'accessible/tests/browser/windows/uia/browser_gridPatterns.js')
-rw-r--r-- | accessible/tests/browser/windows/uia/browser_gridPatterns.js | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/accessible/tests/browser/windows/uia/browser_gridPatterns.js b/accessible/tests/browser/windows/uia/browser_gridPatterns.js new file mode 100644 index 0000000000..24c80a6340 --- /dev/null +++ b/accessible/tests/browser/windows/uia/browser_gridPatterns.js @@ -0,0 +1,161 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +/* eslint-disable camelcase */ +const RowOrColumnMajor_RowMajor = 0; +/* eslint-enable camelcase */ + +const SNIPPET = ` +<table id="table"> + <tr><th id="a">a</th><th id="b">b</th><th id="c">c</th></tr> + <tr><th id="dg" rowspan="2">dg</th><td id="ef" colspan="2" headers="b c">ef</td></tr> + <tr><th id="h">h</th><td id="i" headers="dg h">i</td></tr> + <tr><td id="jkl" colspan="3" headers="a b c">jkl</td></tr> +</table> +<button id="button">button</button> +`; + +async function testGridGetItem(row, col, cellId) { + is( + await runPython(`pattern.GetItem(${row}, ${col}).CurrentAutomationId`), + cellId, + `GetItem with row ${row} and col ${col} returned ${cellId}` + ); +} + +async function testGridItemProps(id, row, col, rowSpan, colSpan, gridId) { + await assignPyVarToUiaWithId(id); + await definePyVar("pattern", `getUiaPattern(${id}, "GridItem")`); + ok(await runPython(`bool(pattern)`), `${id} has GridItem pattern`); + is(await runPython(`pattern.CurrentRow`), row, `${id} has correct Row`); + is(await runPython(`pattern.CurrentColumn`), col, `${id} has correct Column`); + is( + await runPython(`pattern.CurrentRowSpan`), + rowSpan, + `${id} has correct RowSpan` + ); + is( + await runPython(`pattern.CurrentColumnSpan`), + colSpan, + `${id} has correct ColumnSpan` + ); + is( + await runPython(`pattern.CurrentContainingGrid.CurrentAutomationId`), + gridId, + `${id} ContainingGridItem is ${gridId}` + ); +} + +async function testTableItemProps(id, rowHeaders, colHeaders) { + await assignPyVarToUiaWithId(id); + await definePyVar("pattern", `getUiaPattern(${id}, "TableItem")`); + ok(await runPython(`bool(pattern)`), `${id} has TableItem pattern`); + await isUiaElementArray( + `pattern.GetCurrentRowHeaderItems()`, + rowHeaders, + `${id} has correct RowHeaderItems` + ); + await isUiaElementArray( + `pattern.GetCurrentColumnHeaderItems()`, + colHeaders, + `${id} has correct ColumnHeaderItems` + ); +} + +/** + * Test the Grid pattern. + */ +addUiaTask(SNIPPET, async function testGrid() { + await definePyVar("doc", `getDocUia()`); + await assignPyVarToUiaWithId("table"); + await definePyVar("pattern", `getUiaPattern(table, "Grid")`); + ok(await runPython(`bool(pattern)`), "table has Grid pattern"); + is( + await runPython(`pattern.CurrentRowCount`), + 4, + "table has correct RowCount" + ); + is( + await runPython(`pattern.CurrentColumnCount`), + 3, + "table has correct ColumnCount" + ); + await testGridGetItem(0, 0, "a"); + await testGridGetItem(0, 1, "b"); + await testGridGetItem(0, 2, "c"); + await testGridGetItem(1, 0, "dg"); + await testGridGetItem(1, 1, "ef"); + await testGridGetItem(1, 2, "ef"); + await testGridGetItem(2, 0, "dg"); + await testGridGetItem(2, 1, "h"); + await testGridGetItem(2, 2, "i"); + + await testPatternAbsent("button", "Grid"); +}); + +/** + * Test the GridItem pattern. + */ +addUiaTask(SNIPPET, async function testGridItem() { + await definePyVar("doc", `getDocUia()`); + await testGridItemProps("a", 0, 0, 1, 1, "table"); + await testGridItemProps("b", 0, 1, 1, 1, "table"); + await testGridItemProps("c", 0, 2, 1, 1, "table"); + await testGridItemProps("dg", 1, 0, 2, 1, "table"); + await testGridItemProps("ef", 1, 1, 1, 2, "table"); + await testGridItemProps("jkl", 3, 0, 1, 3, "table"); + + await testPatternAbsent("button", "GridItem"); +}); + +/** + * Test the Table pattern. + */ +addUiaTask( + SNIPPET, + async function testTable() { + await definePyVar("doc", `getDocUia()`); + await assignPyVarToUiaWithId("table"); + await definePyVar("pattern", `getUiaPattern(table, "Table")`); + ok(await runPython(`bool(pattern)`), "table has Table pattern"); + await isUiaElementArray( + `pattern.GetCurrentRowHeaders()`, + ["dg", "h"], + "table has correct RowHeaders" + ); + await isUiaElementArray( + `pattern.GetCurrentColumnHeaders()`, + ["a", "b", "c"], + "table has correct ColumnHeaders" + ); + is( + await runPython(`pattern.CurrentRowOrColumnMajor`), + RowOrColumnMajor_RowMajor, + "table has correct RowOrColumnMajor" + ); + + await testPatternAbsent("button", "Table"); + }, + // The IA2 -> UIA proxy doesn't support the Row/ColumnHeaders properties. + { uiaEnabled: true, uiaDisabled: false } +); + +/** + * Test the TableItem pattern. + */ +addUiaTask(SNIPPET, async function testTableItem() { + await definePyVar("doc", `getDocUia()`); + await testTableItemProps("a", [], []); + await testTableItemProps("b", [], []); + await testTableItemProps("c", [], []); + await testTableItemProps("dg", [], ["a"]); + await testTableItemProps("ef", ["dg"], ["b", "c"]); + await testTableItemProps("h", ["dg"], ["b"]); + await testTableItemProps("i", ["dg", "h"], ["c"]); + await testTableItemProps("jkl", [], ["a", "b", "c"]); + + await testPatternAbsent("button", "TableItem"); +}); |