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

<table tabindex=0 id="grid-1" role="treegrid" aria-labelledby="grid-1-header" border="1" aria-activedescendant="row1">
<thead>
    <tr ca="tr" role="row" aria-level="1" id="row1">
        <th id="grid-1-isbn_id">Book Name / ISBN</th><th id="grid-1-author_id">Author</th><th id="grid-1-price_id" class="numeric" >Price ($)</th>
    </tr>
</thead>
<tbody>
    <tr ca="to" role="row" aria-level="1" aria-expanded="true">
         <td headers="grid-1-title_id" id="table_entry" role="gridcell" colspan="3"  tabindex="0">
         <span class="expand">+</span> A Question of Love</td>                  
     </tr>
     <tr ca="ti" role="row"  aria-level="2" aria-expanded="true">
         <td headers="grid-1-isbn_id" role="gridcell">978-3-453-40540-0</td>
         <td headers="grid-1-author_id" role="gridcell">Nora Roberts</td>
         <td headers="grid-1-price_id" class="numeric" role="gridcell" ca="te"><div>9.99</div></td>
     </tr>
</tbody>
</table>

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

<script>

    description("This tests that the treegrid ARIA role does what it should (be exposed as a AXTable and support AXSelectedRows)");

    if (window.accessibilityController) {

          document.getElementById("grid-1").focus();
          var treegrid = accessibilityController.focusedElement;
          var selectedRow = treegrid.childAtIndex(0);
          shouldBe("treegrid.isAttributeSupported('AXSelectedRows')", "true");
          shouldBe("treegrid.selectedRowAtIndex(0).isEqual(selectedRow)", "true");
          shouldBe("selectedRow.isExpanded", "false");
          shouldBe("selectedRow.hierarchicalLevel", "0");

          var secondRow = treegrid.childAtIndex(1);
          shouldBe("secondRow.isExpanded", "true");
          shouldBe("secondRow.hierarchicalLevel", "0");

          var thirdRow = treegrid.childAtIndex(2);
          shouldBe("thirdRow.isExpanded", "true");
          shouldBe("thirdRow.hierarchicalLevel", "1");

          // Make sure that the row disclosure works correctly.
          shouldBe("thirdRow.disclosedByRow().isEqual(secondRow)", "true");
          shouldBe("secondRow.disclosedRowAtIndex(0).isEqual(thirdRow)", "true");
    }

</script>

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