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

<div id="grid" role="grid" aria-colcount="16" aria-rowcount="30">
  <div role="rowgroup">
    <div role="row" aria-rowindex="7">
      <span id="cell1" role="columnheader" aria-colindex="2">First Name</span>
      <span role="columnheader" aria-colindex="3">Last Name</span>
      <span role="columnheader" aria-colindex="4">Company</span>
      <span role="columnheader" aria-colindex="5">Address</span>
    </div>
  </div>
  <div role="rowgroup">
    <div role="row" aria-rowindex="8">
      <span role="gridcell" aria-colindex="2" aria-rowindex="8">Fred</span>
      <span role="gridcell" aria-colindex="3" aria-rowindex="8">Jackson</span>
      <span id="cell2" role="gridcell" aria-colindex="4" aria-rowindex="8" aria-rowspan="2">Acme, Inc.</span>
      <span id="cell3" role="gridcell" aria-colindex="5" aria-rowindex="8" aria-rowspan="0">123 Broad St.</span>
    </div>
    <div role="row" aria-rowindex="9">
      <span role="gridcell" aria-colindex="2">Sara</span>
      <span role="gridcell" aria-colindex="3">James</span>
    </div>
  </div>
  <div role="rowgroup">
    <div role="row" aria-rowindex="15">
      <span role="gridcell" aria-colindex="2">Footer 1</span>
      <span role="gridcell" aria-colindex="3">Footer 2</span>
      <span role="gridcell" aria-colindex="4" aria-colspan="2">Footer 3</span>
    </div>
  </div>
</div>

<div id="grid2" role="grid" aria-colcount="16">
  <div role="rowgroup">
    <div role="row" aria-colindex="2">
      <span role="columnheader">Name</span>
      <span id="cell4" role="columnheader">Company</span>
      <span id="cell5" role="columnheader" aria-colspan="3">Address</span>
    </div>
  </div>
</div>

<div id="grid3" role="grid">
  <div role="row">
    <span role="gridcell">Cell</span>
    <span id="cell6" role="gridcell" aria-rowspan="0">Span Cell</span>
  </div>
  <div role="row">
    <span role="gridcell">Cell</span>
  </div>
</div>

<table role="grid">
  <tr>
    <td>January</td>
    <td id="cell7" rowspan="2" aria-rowspan="3">$100</td>
  </tr>
  <tr><td>February</td></tr>
</table>

<script>

    description("This tests that attributes related to aria table/grid are working correctly.");

    if (window.accessibilityController) {
    
          var grid = accessibilityController.accessibleElementById("grid");
          var cell1 = accessibilityController.accessibleElementById("cell1");
          var cell2 = accessibilityController.accessibleElementById("cell2");
          var cell3 = accessibilityController.accessibleElementById("cell3");
          var cell4 = accessibilityController.accessibleElementById("cell4");
          var cell5 = accessibilityController.accessibleElementById("cell5");
          var cell6 = accessibilityController.accessibleElementById("cell6");
          var cell7 = accessibilityController.accessibleElementById("cell7");
          
          // aria-colcount and aria-rowcount
          shouldBe("grid.numberAttributeValue('AXARIAColumnCount')", "16");
          shouldBe("grid.numberAttributeValue('AXARIARowCount')", "30");
          if (accessibilityController.platformName == "atk") {
              shouldBe("grid.rowCount", "30");
              shouldBe("grid.columnCount", "16");
          } else {
              shouldBe("grid.rowCount", "4");
              shouldBe("grid.columnCount", "4");
          }
          
          // aria-colindex and aria-rowindex
          shouldBe("cell1.numberAttributeValue('AXARIAColumnIndex')", "2");
          shouldBe("cell1.numberAttributeValue('AXARIARowIndex')", "7");
          shouldBe("cell2.numberAttributeValue('AXARIAColumnIndex')", "4");
          shouldBe("cell2.numberAttributeValue('AXARIARowIndex')", "8");
          // aria-colindex from parent row
          shouldBe("cell4.numberAttributeValue('AXARIAColumnIndex')", "3");
          
          // aria-colspan and aria-rowspan, including aria-rowspan="0"
          if (accessibilityController.platformName == "atk") {
              // 0-based because these methods use the AtkTableCell interface
              shouldBe("cell2.rowIndexRange()", "'{7, 2}'");
              shouldBe("cell5.columnIndexRange()", "'{3, 3}'");
              shouldBe("cell3.rowIndexRange()", "'{7, 2}'");
          } else {
              shouldBe("cell2.rowIndexRange()", "'{1, 2}'");
              shouldBe("cell5.columnIndexRange()", "'{2, 3}'");
              shouldBe("cell3.rowIndexRange()", "'{1, 2}'");
          }
          shouldBe("cell6.rowIndexRange()", "'{0, 2}'");
          // use rowspan for native table
          shouldBe("cell7.rowIndexRange()", "'{0, 2}'");
    }

</script>

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