chromium/third_party/blink/web_tests/tables/hittesting/filltable-emptycells.html

<html>
<head>
  <title>Hit Test: Table with empty cells</title>
  <style>
    table.testtable {background-color: green; border: 0px; border-collapse: collapse;}
    table.testtable td { font-size: 20px; border: none; background-color: red; border-spacing:0px; width:30px; height:30px;}
    body { margin: 0px 0px 0px 0px; }
  </style>
  <script language="JavaScript" type="text/javascript">
    var cellHeight = 30;
    var cellWidth = 30;
    var logMsg = "";
    var lastSuccess = 0;
    var failed = false;

   if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
    }

    function isEmpty(row, col) {
      return row == 0 && col > 0;
    }

    function cellHit(cell) {
      var cellId = 3 * cell.parentNode.rowIndex  + cell.cellIndex;
      // If we see an even number of moves then the cell's bit is 1 else 0
      lastSuccess = cellId;
    }

    function doTest() {
      var ypos = cellHeight / 2;
      for (var row = 0; row < 2; row++) {
        var xpos = cellWidth / 2;
        for (var col = 0; col < 3; col++) {
          var oldLastSuccess = lastSuccess;
          var elem = document.elementFromPoint(xpos, ypos);
          if (elem && elem.onmousemove) elem.onmousemove();
          var cellId = 3 * row + col;
          logMsg += "Hit cell at row: " + row + ", column: " + col + ": ";     
          var success = lastSuccess == cellId;
          var empty = isEmpty(row, col);
          if (!success && !empty) failed = true;
          logMsg += (success ? "SUCCESS" : ((empty &&  lastSuccess == oldLastSuccess)? "EMPTY" : "FAIL")) + "<br />";
          xpos += cellWidth;
        }
        ypos += cellHeight;
      }
      document.body.innerHTML = (failed ? "FAIL!!!<br/>" : "SUCCESS!!!<br/>") +logMsg;
      if (window.testRunner) {
          testRunner.notifyDone();
      }
    }
  </script>
</head>
  <body onload="doTest()">

    <table class="testtable">
      <tr>
        <td align="right" onmousemove="cellHit(this)">
        </td>
      </tr>
      <tr>
        <td onmousemove="cellHit(this)">
        </td>
        <td onmousemove="cellHit(this)">
        </td>
        <td onmousemove="cellHit(this)">
        </td>
      </tr>
    </table>
  </body>
</html>