<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<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: 2s;
      -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.layoutTestController) {
      layoutTestController.dumpAsText();
      layoutTestController.waitUntilDone();
    }
    
    result = "PASS";
    const defaultTolerance = 0.2;
    
    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.2,5,5 ];
    const prop = [ "a", "b", "c", "d", "e", "f" ];
    
    function isEqual(actual, desired, tolerance)
    {
        if (tolerance == undefined || tolerance == 0)
            tolerance = defaultTolerance;
        var diff = Math.abs(actual - desired);
        return diff <= tolerance;
    }
    
    function snapshot(which)
    {
        if (result != "PASS")
            return;
        
        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]+")";
                return;
            }
    }

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