| <!DOCTYPE html> | |
| <html> | |
| <body> | |
| <script src="../../resources/js-test.js"></script> | |
| <script src="../../resources/accessibility-helper.js"></script> | |
| <custom-table id="table-1"> | |
| <custom-row id="row-header" aria-rowindex="1"> | |
| <custom-cell id="header-1" role="columnheader" aria-sort="ascending"></custom-cell> | |
| </custom-row> | |
| <custom-row id="row-1"> | |
| <custom-cell id="cell1"></custom-cell> | |
| <custom-cell id="cell2" aria-colindex="3"></custom-cell> | |
| <custom-rowspan-cell id="cell3"></custom-rowspan-cell> | |
| <custom-rowspan-cell id="cell4" aria-colindex="5" aria-rowspan="3"></custom-rowspan-cell> | |
| </custom-row> | |
| <custom-row id="row-2" role="row" aria-rowindex="8"> | |
| <custom-colspan-cell id="cell5"></custom-colspan-cell> | |
| </custom-row> | |
| <custom-row id="row-3" role="row" aria-rowindex="9"> | |
| <custom-colspan-cell id="cell6" aria-colspan="3"></custom-colspan-cell> | |
| </custom-row> | |
| </custom-table> | |
| <script> | |
| customElements.define('custom-table', class CustomTable extends HTMLElement { | |
| constructor() | |
| { | |
| super(); | |
| const internals = this.attachInternals(); | |
| internals.role = 'grid'; | |
| internals.ariaColCount = '4'; | |
| internals.ariaRowCount = '8'; | |
| } | |
| }); | |
| customElements.define('custom-row', class CustomRow extends HTMLElement { | |
| constructor() | |
| { | |
| super(); | |
| const internals = this.attachInternals(); | |
| internals.role = 'row'; | |
| internals.ariaRowIndex = 7; | |
| } | |
| }); | |
| customElements.define('custom-cell', class CustomCell extends HTMLElement { | |
| constructor() | |
| { | |
| super(); | |
| const internals = this.attachInternals(); | |
| internals.role = 'gridcell'; | |
| internals.ariaColIndex = 2; | |
| } | |
| }); | |
| customElements.define('custom-rowspan-cell', class CustomRowspanCell extends HTMLElement { | |
| constructor() | |
| { | |
| super(); | |
| const internals = this.attachInternals(); | |
| internals.role = 'gridcell'; | |
| internals.ariaColIndex = 4; | |
| internals.ariaRowSpan = 2; | |
| } | |
| }); | |
| customElements.define('custom-colspan-cell', class CustomColspanCell extends HTMLElement { | |
| constructor() | |
| { | |
| super(); | |
| const internals = this.attachInternals(); | |
| internals.role = 'gridcell'; | |
| internals.ariaColIndex = 2; | |
| internals.ariaColSpan = 2; | |
| } | |
| }); | |
| description("This tests that aria fallback roles work correctly."); | |
| if (!window.accessibilityController) | |
| debug('This test requires accessibilityController'); | |
| else { | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("table-1").role', 'AXRole: AXTable'); | |
| shouldBe('accessibilityController.accessibleElementById("table-1").rowCount', '4'); | |
| shouldBe('accessibilityController.accessibleElementById("table-1").columnCount', '4'); | |
| shouldBe('accessibilityController.accessibleElementById("table-1").numberAttributeValue("AXARIAColumnCount")', '4'); | |
| shouldBe('accessibilityController.accessibleElementById("table-1").numberAttributeValue("AXARIARowCount")', '8'); | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("row-header").role', 'AXRole: AXRow'); | |
| if (accessibilityController.platformName == "atspi") | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("header-1").role', 'AXRole: AXColumnHeader'); | |
| else | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("header-1").role', 'AXRole: AXCell'); | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("header-1").sortDirection', 'AXAscendingSortDirection'); | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("row-1").role', 'AXRole: AXRow'); | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("cell1").role', 'AXRole: AXCell'); | |
| shouldBe('accessibilityController.accessibleElementById("cell1").numberAttributeValue("AXARIARowIndex")', '7'); | |
| shouldBe('accessibilityController.accessibleElementById("cell1").numberAttributeValue("AXARIAColumnIndex")', '2'); | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("cell2").role', 'AXRole: AXCell'); | |
| shouldBe('accessibilityController.accessibleElementById("cell2").numberAttributeValue("AXARIARowIndex")', '7'); | |
| shouldBe('accessibilityController.accessibleElementById("cell2").numberAttributeValue("AXARIAColumnIndex")', '3'); | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("cell3").role', 'AXRole: AXCell'); | |
| shouldBe('accessibilityController.accessibleElementById("cell3").numberAttributeValue("AXARIARowIndex")', '7'); | |
| shouldBe('accessibilityController.accessibleElementById("cell3").numberAttributeValue("AXARIAColumnIndex")', '4'); | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("cell3").rowIndexRange()', '{1, 2}'); | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("cell4").role', 'AXRole: AXCell'); | |
| shouldBe('accessibilityController.accessibleElementById("cell4").numberAttributeValue("AXARIARowIndex")', '7'); | |
| shouldBe('accessibilityController.accessibleElementById("cell4").numberAttributeValue("AXARIAColumnIndex")', '5'); | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("cell4").rowIndexRange()', '{1, 3}'); | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("row-2").role', 'AXRole: AXRow'); | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("cell5").role', 'AXRole: AXCell'); | |
| shouldBe('accessibilityController.accessibleElementById("cell5").numberAttributeValue("AXARIARowIndex")', '8'); | |
| shouldBe('accessibilityController.accessibleElementById("cell5").numberAttributeValue("AXARIAColumnIndex")', '2'); | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("cell5").rowIndexRange()', '{2, 1}'); | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("cell5").columnIndexRange()', '{0, 2}'); | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("row-3").role', 'AXRole: AXRow'); | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("cell6").role', 'AXRole: AXCell'); | |
| shouldBe('accessibilityController.accessibleElementById("cell6").numberAttributeValue("AXARIARowIndex")', '9'); | |
| shouldBe('accessibilityController.accessibleElementById("cell6").numberAttributeValue("AXARIAColumnIndex")', '2'); | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("cell6").rowIndexRange()', '{3, 1}'); | |
| shouldBeEqualToString('accessibilityController.accessibleElementById("cell6").columnIndexRange()', '{0, 3}'); | |
| } | |
| </script> | |
| </body> | |
| </html> |