<!DOCTYPE html>

<html>
<head>
  <style>
    #target {
      position: absolute;
      left: 100px;
      height: 200px;
      width: 200px;
      background-color: red;
      -webkit-transition-property: left;
      -webkit-transition-duration: 4s;
      -webkit-transition-timing-function: linear;
    }
    
    .dot {
        width: 10px;
        height: 10px;
        top: 100px;
        background-color: yellow;
        position:absolute;
    }
     </style>
   <script>
        function checkResult(pos, isIn)
        {
            var elt = document.elementFromPoint(pos, 150);
            var good = isIn ? "inside" : "outside";
            var bad = isIn ? "outside" : "inside";
            return (isIn == (elt.id == "target")) ?
                "<span style='color:green'>PASS</span> - " + pos + "px was " + good + " as it should be" + "<br>" :
                "<span style='color:red'>FAIL</span> - " + pos + "px was " + bad + " and should have been " + good + "<br>";
        }
        
        function checkResults()
        {
            // Test before (150), in (300) and after (450)
            var result = "";
            result += checkResult(150, false);
            result += checkResult(300, true);
            result += checkResult(450, false);
            document.getElementById('result').innerHTML = result;
        }
     
        function doTest()
        {
            if (window.testRunner) {
                var target = document.getElementById('target');
                internals.pauseAnimations(2);
        
                checkResults();
                testRunner.notifyDone();
            }
            else {
                window.setTimeout("checkResults()", 2000);
            }
        }
    
        function startTest()
        {
            if (window.testRunner) {
                testRunner.dumpAsText();
                testRunner.waitUntilDone();
            }
      
            document.getElementById("target").style.left = "300px";
            window.setTimeout(doTest, 0);
        }
   </script>
</head>
<body onload="startTest()">
    <div>
        This test starts a transition of the 'left' property and then does elementFromPoint calls
        at the shown yellow dots to see if hit testing works
    </div>
    <div id="target"></div>
    <div class="dot" style="left:150px"></div>
    <div class="dot" style="left:300px"></div>
    <div class="dot" style="left:450px"></div>
    <div id="result"></div>
</body>
</html>
