<!doctype html>
<meta charset=utf-8>
<title>Checking whether dynamic changes to visibility interact correctly with
  table anonymous boxes</title>
<script src=../../../../../resources/testharness.js></script>
<script src=../../../../../resources/testharnessreport.js></script>
<style>
#overlay {
  display: table;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: white;
  z-index: 999
}

#wrapper { position: relative; }
</style>
<div id=log></div>
<div id="wrapper">
  <div id="overlay"><div></div></div>
  <div id="target">Some text</div>
</div>
<script>
  test(function() {
    // Make sure we have boxes constructed already.
    document.body.offsetWidth;
    var overlay = document.querySelector("#overlay");
    overlay.insertBefore(document.createElement("div"), overlay.firstChild);
    overlay.appendChild(document.createElement("div"));
    // Make sure we have boxes constructed for those inserts/appends
    document.body.offsetWidth;
    overlay.firstChild.nextSibling.remove();
    var t = document.querySelector("#target");
    var rect = t.getBoundingClientRect();
    var hit = document.elementFromPoint(rect.x + rect.width/2,
                                        rect.y + rect.height/2);
    assert_equals(hit, t.previousElementSibling,
                  "Should hit the overlay first.");
    t.previousElementSibling.style.visibility = "hidden";
    hit = document.elementFromPoint(rect.x + rect.width/2,
                                    rect.y + rect.height/2);
    assert_equals(hit, t,
                  "Should hit our target now that the overlay is hidden.");
  });
</script>
