Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
<html>
<head>
  <title>test HTMLTableAccessible::IsProbablyForLayout implementation</title>
  <link rel="stylesheet" type="text/css"
  <script type="application/javascript"
          src="../common.js"></script>
  <script type="application/javascript"
          src="../attributes.js"></script>
  <script type="application/javascript">
    function isLayoutTable(id) {
      // This helps us know if the absence of layout-guess is simply because
      // it is not a table.
      ok(isAccessible(id, nsIAccessibleTable), `${id} has table interface`);
      testAttrs(id, { "layout-guess": "true" }, true);
    }
    function isDataTable(id) {
      testAbsentAttrs(id, { "layout-guess": "true" });
    }
    function doTest() {
      // table with role of grid
      isDataTable("table1");
      // table with role of grid and datatable="0"
      isDataTable("table1.1");
      // table with landmark role
      isDataTable("table2");
      // table with summary
      isDataTable("table3");
      // table with caption
      isDataTable("table4");
      // layout table with empty caption
      isLayoutTable("table4.2");
      // table with thead element
      isDataTable("table5");
      // table with tfoot element
      isDataTable("table5.1");
      // table with colgroup or col elements
      isDataTable("table5.2");
      isDataTable("table5.3");
      // table with th element
      isDataTable("table6");
      // table with headers attribute
      isDataTable("table6.2");
      // table with scope attribute
      isDataTable("table6.2.2");
      // table with abbr attribute
      isDataTable("table6.2.3");
      // table with abbr element
      isDataTable("table6.3");
      // table with abbr element having empty text node
      isDataTable("table6.4");
      // table with abbr element and non-empty text node
      isLayoutTable("table6.5");
      // layout table with nested table
      isLayoutTable("table9");
      // layout table with 1 column
      isLayoutTable("table10");
      // layout table with 1 row
      isLayoutTable("table11");
      // table with 5 columns
      isDataTable("table12");
      // table with a bordered cell
      isDataTable("table13");
      // table with alternating row background colors
      isDataTable("table14");
      // table with 3 columns and 21 rows
      isDataTable("table15");
      // layout table that has a 100% width
      isLayoutTable("table16");
      // layout table that has a 95% width in pixels
      isLayoutTable("table17");
      // layout table with less than 10 columns
      isLayoutTable("table18");
      // layout table with embedded iframe
      isLayoutTable("table19");
      // tree grid, no layout table
      isDataTable("table20");
      // layout table containing nested data table (having data structures)
      isLayoutTable("table21");
      isLayoutTable("table21.2");
      isLayoutTable("table21.3");
      isLayoutTable("table21.4");
      isLayoutTable("table21.5");
      isLayoutTable("table21.6");
      // layout table having datatable="0" attribute and containing data table structure (tfoot element)
      isLayoutTable("table22");
      // repurposed table for tabbed UI
      isLayoutTable("table23");
      // data table that has a nested table but has non-zero border width on a cell
      isDataTable("table24");
      // layout display:block table with 1 column
      isLayoutTable("displayblock_table1");
      // matrix
      isDataTable("mtable1");
      SimpleTest.finish();
    }
    SimpleTest.waitForExplicitFinish();
    addA11yLoadEvent(doTest);
  </script>
</head>
<body>
  <a target="_blank"
     title="Don't treat tables that have a landmark role as layout table">
  </a>
  <a target="_blank"
     title="Data table elements used to determine layout-guess attribute shouldn't be picked from nested tables">
  </a>
  <a target="_blank"
     title="Extend the list of legitimate data table structures">
  </a>
  <p id="display"></p>
  <div id="content" style="display: none"></div>
  <pre id="test">
  </pre>
  <!-- Table with role of grid -->
  <table id="table1" role="grid">
    <tr>
      <th>Sender</th>
      <th>Subject</th>
      <th>Date</th>
    </tr>
    <tr>
      <td>Marco</td>
      <td>Test</td>
      <td>June 12</td>
    </tr>
    <tr>
      <td>David</td>
      <td>Another test</td>
      <td>June 12</td>
    </tr>
    <tr>
      <td>Alex</td>
      <td>Third test</td>
      <td>June 12</td>
    </tr>
  </table>
   <!-- table with role of grid and datatable="0"-->
  <table id="table1.1" role="grid" datatable="0">
    <tr>
      <td>Cell1</td><td>cell2</td>
    </tr>
  </table>
  <!-- table with landmark role -->
  <table id="table2" role="main">
    <tr>
      <th>Sender</th>
      <th>Subject</th>
      <th>Date</th>
    </tr>
    <tr>
      <td>Marco</td>
      <td>Test</td>
      <td>June 12</td>
    </tr>
    <tr>
      <td>David</td>
      <td>Another test</td>
      <td>June 12</td>
    </tr>
    <tr>
      <td>Alex</td>
      <td>Third test</td>
      <td>June 12</td>
    </tr>
  </table>
  <!-- table with summary -->
  <table id="table3" summary="This is a table">
    <tr>
      <td>Cell1</td><td>cell2</td>
    </tr>
  </table>
  <!-- table with caption -->
  <table id="table4">
    <caption>This is a table</caption>
    <tr>
      <td>Cell1</td><td>cell2</td>
    </tr>
  </table>
  <!-- layout table with empty caption -->
  <table id="table4.2">
    <caption> </caption>
    <tr>
      <td>Cell1</td><td>cell2</td>
    </tr>
  </table>
  <!-- table with thead element -->
  <table id="table5">
    <thead>
      <tr>
        <td>Cell1</td><td>cell2</td>
      </tr>
    </thead>
  </table>
  <!-- table with tfoot element -->
  <table id="table5.1">
    <tfoot>
      <tr>
        <td>Cell1</td><td>cell2</td>
      </tr>
    </tfoot>
  </table>
  <!-- table with colgroup and col elements -->
  <table id="table5.2">
    <colgroup width="20"></colgroup>
    <tr>
      <td>Cell1</td><td>cell2</td>
    </tr>
  </table>
  <table id="table5.3">
    <col width="20">
    <tr>
      <td>Cell1</td><td>cell2</td>
    </tr>
  </table>
  <!-- table with th element -->
  <table id="table6">
    <tr>
      <th>Cell1</th><th>cell2</th>
    </tr>
  </table>
  <!-- table with headers attribute -->
  <table id="table6.2">
    <tr>
      <td headers="a">table6.2 cell</td>
    </tr>
  </table>
  <!-- table with scope attribute -->
  <table id="table6.2.2">
    <tr>
      <td scope="a">table6.2.2 cell</td>
    </tr>
  </table>
  <!-- table with abbr attribute -->
  <table id="table6.2.3">
    <tr>
      <td abbr="table6.2.3">table6.2.3 cell1</td>
    </tr>
  </table>
  <!-- table with abbr element -->
  <table id="table6.3">
    <tr>
      <td>table6.3 cell1</td>
      <td><abbr>table6.3 cell2</abbr></td>
    </tr>
  </table>
  <!-- table with abbr element having empty text node -->
  <table id="table6.4">
    <tr>
      <td>
        <abbr>abbr</abbr>
      </td>
    </tr>
  </table>
  <!-- table with abbr element and non-empty text node -->
  <table id="table6.5">
    <tr>
      <td>
        This is a really long text (<abbr>tiarlt</abbr>) inside layout table 
      </td>
    </tr>
  </table>
  <!-- layout table with nested table -->
  <table id="table9">
    <tr>
      <td><table><tr><td>Cell</td></tr></table></td>
    </tr>
  </table>
  <!-- layout table with 1 column -->
  <table id="table10">
    <tr><td>Row1</td></tr>
    <tr><td>Row2</td></tr>
  </table>
  <!-- layout table with 1 row and purposely many columns -->
  <table id="table11">
    <tr><td>Col1</td><td>Col2</td><td>Col3</td><td>Col4</td><td>Col5</td></tr>
  </table>
  <!-- table with 5 columns -->
  <table id="table12">
    <tr><td>Col1</td><td>Col2</td><td>Col3</td><td>Col4</td><td>Col5</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td><td>Col4</td><td>Col5</td></tr>
  </table>
  <!-- table with a bordered cell -->
  <table id="table13" border="1" width="100%" bordercolor="#0000FF">
    <tr>
      <td bordercolor="#000000"> </td>
      <td bordercolor="#000000"> </td>
      <td bordercolor="#000000"> </td>
    </tr>
    <tr>
      <td bordercolor="#000000"> </td>
      <td bordercolor="#000000"> </td>
      <td bordercolor="#000000"> </td>
    </tr>
  </table> 
  <!-- table with alternating row background colors -->
  <table id="table14" width="100%">
    <tr style="background-color: #0000FF;">
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr style="background-color: #00FF00;">
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
  </table> 
  <!-- table with 3 columns and 21 rows -->
  <table id="table15" border="0">
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
  </table>
  <!-- layout table that has a 100% width -->
  <table id="table16" width="100%">
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
  </table>
  <!-- layout table that has a 95% width in pixels -->
  <table id="table17" width="98%">
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
    <tr><td>Col1</td><td>Col2</td><td>Col3</td></tr>
  </table>
  <!-- layout table with less than 10 columns -->
  <table id="table18">
    <tr>
      <td>Marco</td>
      <td>Test</td>
      <td>June 12</td>
    </tr>
    <tr>
      <td>David</td>
      <td>Another test</td>
      <td>June 12</td>
    </tr>
    <tr>
      <td>Alex</td>
      <td>Third test</td>
      <td>June 12</td>
    </tr>
  </table>
  <!-- layout table with embedded iframe -->
  <table id="table19">
    <tr><td><iframe id="frame"></iframe></td><td> </td><td> </td></tr>
    <tr><td> </td><td> </td><td> </td></tr>
    <tr><td> </td><td> </td><td> </td></tr>
    <tr><td> </td><td> </td><td> </td></tr>
  </table>
  <!-- tree grid, no layout table -->
  <table id="table20" role="treegrid">
    <tr role="treeitem"><td>Cell1</td><td>Cell2</td></tr>
  </table>
  <!-- layout table with nested data table containing data table elements -->
  <table id="table21">
    <tr>
      <td>
        <table>
          <caption>table</caption>
          <tr><td>Cell</td></tr>
        </table>
      </td>
    </tr>
  </table>
  <table id="table21.2">
    <tr>
      <td>
        <table>
          <colgroup width="20"></colgroup>
          <tr><th>Cell</th></tr>
        </table>
      </td>
    </tr>
  </table>
  <table id="table21.3">
    <tr>
      <td>
        <table>
          <col width="20"></col>
          <tr><th>Cell</th></tr>
        </table>
      </td>
    </tr>
  </table>
  <table id="table21.4">
    <tr>
      <td>
        <table>
          <tr><th>Cell</th></tr>
        </table>
      </td>
    </tr>
  </table>
  <table id="table21.5">
    <tr>
      <td>
        <table>
          <thead>
            <tr><td>Cell</td></tr>
          </thead>
        </table>
      </td>
    </tr>
  </table>
  <table id="table21.6">
    <tr>
      <td>
        <table>
          <tfoot>
            <tr><td>Cell</td></tr>
          </tfoot>
        </table>
      </td>
    </tr>
  </table>
  <!-- layout table with datatable="0" and tfoot element-->
  <table id="table22" datatable="0">
    <tfoot>
      <tr>
        <td>Cell1</td><td>cell2</td>
      </tr>
    </tfoot>
  </table>
  <table id="table23" border="1">
    <tr role="tablist">
      <td role="tab">Tab 1</td><td role="tab">Tab 2</td>
    </tr>
    <tr>
      <td role="tabpanel" colspan="2">Hello</td>
    </tr>
  </table>
  <table id="table24">↩
    <tr></tr>↩
    <tr>↩
      <td style="width: 1px;"></td>↩
      <td>↩
        <table></table>↩
      </td>↩
    </tr>↩
  </table>
  <!-- display:block table -->
  <table id="displayblock_table1" style="display:block">
    <tr><td>Row1</td></tr>
    <tr><td>Row2</td></tr>
  </table>
  <!-- MathML matrix -->
  <math>
    <mtable id="mtable1">
      <mtr>
        <mtd>
          <mn>1</mn>
        </mtd>
        <mtd>
          <mn>0</mn>
        </mtd>
      </mtr>
      <mtr>
        <mtd>
          <mn>0</mn>
        </mtd>
        <mtd>
          <mn>1</mn>
        </mtd>
      </mtr>
    </mtable>
  </math>
</body>
</html>