<!DOCTYPE>
<html>
<script src="../../resources/js-test-pre.js"></script>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Table test</title>
    <style>
    table {border: 1px solid;}
    table th {background-color: #eeeeee;}
    table td {background-color: #dddddd;}
    .table thead {display:block;}
    .table tbody {display:block;}
    .table2 thead {display:block;}
    .table2 tbody {display:block;}
    </style>
</head>
<body id="body">

<table role="grid" class="table" id="table">
    <caption>Table with CSS and ARIA</caption>
    <thead>
        <tr role="row">
            <th role="gridcell">Heading one</th>
            <th role="gridcell">Heading two</th>
        </tr>
    </thead>
    <tbody>
        <tr role="row">
            <td role="gridcell">a</td>
            <td role="gridcell">b</td>
        </tr>
    </tbody>
</table>

<table class="table2" id="table2">
    <caption>Table with CSS and no ARIA</caption>
    <thead>
        <tr>
            <th>Heading one</th>
            <th>Heading two</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>a</td>
            <td>b</td>
        </tr>
    <tbody>
</table>

<p id="description"></p>
<div id="console"></div>

<script>

    description("This tests that contents in malformed tables are accessible.");

    if (window.accessibilityController) {
        var table1 = accessibilityController.accessibleElementById("table");
        var table2 = accessibilityController.accessibleElementById("table2");
        var tableArray = [table1, table2];
        // check for table role
        shouldBe("table1.role", "'AXRole: AXTable'");
        shouldBe("table2.role", "'AXRole: AXTable'");

        // check for correct column and row count
        var table1ColumnCount = table1.numberAttributeValue("AXColumnCount");
        var table1RowCount = table1.numberAttributeValue("AXRowCount");
        var table2ColumnCount = table2.numberAttributeValue("AXColumnCount");
        var table2RowCount = table2.numberAttributeValue("AXRowCount");
        shouldBe("table1ColumnCount", "2");
        shouldBe("table1RowCount", "2");
        shouldBe("table2ColumnCount", "2");
        shouldBe("table2RowCount", "2");

        // check rows
        for (var tableIndex = 0; tableIndex < 2; tableIndex++) {
            debug("\nCheck rows for Table" + (tableIndex+1));
            var table = tableArray[tableIndex];
            for (var i = 0; i < 2; i++) {
                var rowa = table.rowAtIndex(i);
                var rowb = table.childAtIndex(i);
                shouldBeTrue("rowa.isEqual(rowb)");
                shouldBe("rowa.role", "'AXRole: AXRow'");
            }
        }

        // check cells
        for (var tableIndex = 0; tableIndex < 2; tableIndex++) {
            debug("\nCheck cells for Table" + (tableIndex+1));
            var table = tableArray[tableIndex];
            for (var i = 0; i < 2; i++) {
                for (var j = 0; j < 2; j++) {
                    var cella = table.cellForColumnAndRow(i, j);
                    var cellb = table.childAtIndex(j).childAtIndex(i);
                    shouldBeTrue("cella.isEqual(cellb)");
                    shouldBe("cella.role", "'AXRole: AXCell'");
                }
            }
        }
    }

</script>

<script src="../../resources/js-test-post.js"></script>
</body>
</html>
