<!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>
