<!DOCTYPE html>

<html>
<head>
    <style>
    #box {
        position: relative;
        height: 100px;
        width: 100px;
        background-color: blue;
        -webkit-transition-property: left;
        -webkit-transition-duration: 2s;
        -webkit-transition-timing-function: linear;
    }
    </style>
    <script>
    if (window.layoutTestController) {
        layoutTestController.dumpAsText();
        layoutTestController.waitUntilDone();
    }

    result = "PASS";
    
    function isEqual(actual, desired, tolerance)
    {
        var diff = Math.abs(actual - desired);
        return diff <= tolerance;
    }
    
    function snapshot(expected, tolerance)
    {
        if (result != "PASS")
            return;
            
        var left = parseInt(window.getComputedStyle(document.getElementById('box')).left);
        if (!isEqual(left, expected, tolerance))
            result = "FAIL(was:"+left+", expected:"+expected+")";
    }
    
    function reset()
    {
        document.getElementById('box').style.webkitTransitionDuration = "0s";
        document.getElementById('box').style.left = "0px";
    }
    
    function startTransition()
    {
        document.getElementById('box').style.left = "400px";
    }

    function start()
    {
        setTimeout("startTransition()", 0);
        setTimeout("snapshot(100, 80)", 500);
        setTimeout("reset()", 600);
        setTimeout("snapshot(0, 0)", 700);
        
        window.setTimeout(function() {
            document.getElementById('result').innerHTML = result;
            if (window.layoutTestController)
                layoutTestController.notifyDone();
        }, 800);
    }
    
    window.addEventListener('load', start, false)
  </script>
</head>
<body>

<p>
This tests changing a transitioning property while running and resetting its duration to 0.
The box should start moving left and after 500ms snap back to 0</p>
<div id="box">
</div>
<div id="result">
</div>
</body>
</html>
