 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<!-- Test based on that found at
     http://http://philip.html5.org/tests/canvas/suite/tests/index.2d.composite.globalAlpha.html
  -->
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<canvas id="canvas" width="100" height="100"></canvas>
<script>

function assertPixelApprox(ctx, x,y, r,g,b,a, pos, colour, tolerance)
{
    var imgdata = ctx.getImageData(x, y, 1, 1);
    var diff = Math.max(Math.abs(r-imgdata.data[0]), Math.abs(g-imgdata.data[1]), Math.abs(b-imgdata.data[2]), Math.abs(a-imgdata.data[3]));
    shouldBeFalse((diff > tolerance).toString());
}

description("The test to ensure correct sync behaviour with globalAlpha and fillPath() in accelerated-2d-canvas mode.");
var ctx = document.getElementById('canvas').getContext('2d');

ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 100, 100);
ctx.globalAlpha = 0.01; // avoid any potential alpha=0 optimisations
ctx.beginPath();
ctx.fillStyle = '#f00';
ctx.rect(0, 0, 100, 100);
ctx.fill();
assertPixelApprox(ctx, 50,25, 2,253,0,255, "50,25", "2,253,0,255", 2);

</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>

