<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../resources/js-test-pre.js"></script>
</head>
<body id="body">

<div id="content">

<!-- First row is hidden -->
<table id="table1" border=1>
  <tr><th hidden>header 1</th><th hidden>header 2</th></tr>
  <tr><td id="table1cell">foo</td><td>bar</td></tr>
</table>

<!-- First section is hidden -->
<table id="table2" border=1>
  <thead><th hidden>header 1</th><th hidden>header 2</th></thead>
  <tr><td id="table2cell">foo</td><td>bar</td></tr>
</table>

<!-- First and middle section is hidden -->
<table id="table3" border=1>
  <thead><tr><th hidden>header 1</th><th hidden>header 2</th></tr></thead>
  <tr><td hidden>foo</td><td hidden>bar</td></tr>
  <tfoot><tr><td id="table3cell">foot</td><td>foot</td></tr></tfoot>
</table>

</div>

<script>

    description("This tests that cellForRowAndColumn work as expected when cells are hidden in sections and rows.");

    if (window.accessibilityController) {

        debug("\nTable1 has a hidden first row. Verify accessing cells works as expected.");
        var table1 = accessibilityController.accessibleElementById("table1");
        shouldBe("table1.rowCount", "2");
        var table1cell1 = table1.cellForColumnAndRow(0, 0);
        shouldBeTrue("!table1cell1 || !table1cell1.isValid");
        var table1cell2 = table1.cellForColumnAndRow(0, 1);
        shouldBeTrue("table1cell2.isEqual(accessibilityController.accessibleElementById('table1cell'))");
        shouldBe("table1cell2.rowIndexRange()", "'{1, 1}'");
        shouldBe("table1cell2.columnIndexRange()", "'{0, 1}'");

        debug("\nTable2 has a hidden first section. Verify accessing cells works as expected.");
        var table2 = accessibilityController.accessibleElementById("table2");
        shouldBe("table2.rowCount", "2");
        var table2cell1 = table2.cellForColumnAndRow(0, 0);
        shouldBeTrue("!table2cell1 || !table2cell1.isValid");
        var table2cell2 = table2.cellForColumnAndRow(0, 1);
        shouldBeTrue("table2cell2.isEqual(accessibilityController.accessibleElementById('table2cell'))");
        shouldBe("table2cell2.rowIndexRange()", "'{1, 1}'");
        shouldBe("table2cell2.columnIndexRange()", "'{0, 1}'");

        debug("\nTable3 only has a footer section.");
        var table3 = accessibilityController.accessibleElementById("table3");
        shouldBe("table3.rowCount", "3");
        var table3cell1 = table3.cellForColumnAndRow(0, 0);
        shouldBeTrue("!table3cell1 || !table3cell1.isValid");
        var table3cell2 = table3.cellForColumnAndRow(0, 2);
        shouldBeTrue("table3cell2.isEqual(accessibilityController.accessibleElementById('table3cell'))");
        shouldBe("table3cell2.rowIndexRange()", "'{2, 1}'");
        shouldBe("table3cell2.columnIndexRange()", "'{0, 1}'");
      
        // Clear the HTML for better results.
        document.getElementById("content").innerHTML = "";  
    }


</script>

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

