<!DOCTYPE html><!-- webkit-test-runner [ experimental:WebAnimationsCSSIntegrationEnabled=false ] -->

<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.testRunner) {
        testRunner.dumpAsText();
        testRunner.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.testRunner)
                testRunner.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>
