<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><!-- webkit-test-runner [ experimental:WebAnimationsCSSIntegrationEnabled=false ] -->

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Combined transform translate() scale()</title>
  <style type="text/css" media="screen">
    #box {
      height: 100px;
      width: 100px;
      background-color: blue;
      -webkit-animation-duration: 1s;
      -webkit-animation-timing-function: linear;
      -webkit-animation-name: "anim";
    }
    @-webkit-keyframes "anim" {
        from { -webkit-transform: translate(0,0) scale(1,1); }
        to   { -webkit-transform: translate(100px, 200px) scale(2,4); }
    }
  </style>
  <script type="text/javascript" charset="utf-8">
    if (window.testRunner) {
      testRunner.dumpAsText();
      testRunner.waitUntilDone();
    }
    
    result = "";

    const expected =  [ [ 1.25,0,0,1.75,25,50 ],
                        [ 1.5,0,0,2.5,50,100 ] ];
    const tolerance = [ 0.2,0.2,0.2,0.3,8,15 ];
    const prop = [ "a", "b", "c", "d", "e", "f" ];
    
    function isEqual(actual, desired, tolerance)
    {
        var diff = Math.abs(actual - desired);
        return diff <= tolerance;
    }
    
    var numSnapshots = 0;
    
    function snapshot(which)
    {
        var t = new WebKitCSSMatrix(window.getComputedStyle(document.getElementById('box')).webkitTransform);
        for (i = 0; i < 6; ++i) {
            if (!isEqual(t[prop[i]], expected[which][i], tolerance[i]))
                result += "FAIL('"+prop[i]+"' was:"+t[prop[i]]+", expected:"+expected[which][i]+")";
        }
        
        numSnapshots++;
        if (numSnapshots == 2) {
            document.getElementById('result').innerHTML = result || "PASS";
            if (window.testRunner)
                testRunner.notifyDone();
        }
    }

    function start()
    {
        setTimeout("snapshot(0)", 250);
        setTimeout("snapshot(1)", 500);
    }
    
    document.addEventListener('webkitAnimationStart', start, false);
    
  </script>
</head>
<body>
This test performs an animation of the translate() and scale() operators. It animates over 1 seconds. 
At 0.25 and 0.5 seconds it takes a snapshot and expects the result to be within range.
<div id="box">
</div>
<div id="result">
</div>
</body>
</html>
