<!DOCTYPE HTML>
<html>
<body>
    <script src="../../resources/js-test-pre.js"></script>
    <script type="text/javascript" src="canvas-blending-helpers.js"></script>
    <script type="text/javascript">

        description("Series of tests to ensure correct results on applying different blend modes when drawing in a transformed context.");

        var context;
        function actualColor(x, y) {
            return context.getImageData(x, y, 1, 1).data;
        }

        function checkBlendModeResult(i, context, sigma) {
            var expectedColor = blendColors([129 / 255, 1, 129 / 255, 1], [1, 129 / 255, 129 / 255, 1], i);
            var ac = "actualColor(0, 1)";
            shouldBeCloseTo(ac + "[0]", expectedColor[0], sigma);
            shouldBeCloseTo(ac + "[1]", expectedColor[1], sigma);
            shouldBeCloseTo(ac + "[2]", expectedColor[2], sigma);
            shouldBeCloseTo(ac + "[3]", expectedColor[3], sigma);

            ac = "actualColor(9, 9)";
            shouldBeCloseTo(ac + "[0]", 0, sigma);
            shouldBeCloseTo(ac + "[1]", 0, sigma);
            shouldBeCloseTo(ac + "[2]", 0, sigma);
            shouldBeCloseTo(ac + "[3]", 0, sigma);
        }

        function runTest(width, height) {
            var canvas = document.createElement("canvas");
            var sigma = 5;
            canvas.width = width;
            canvas.height = height;
            context = canvas.getContext("2d");
            document.body.appendChild(canvas);

            for (var i = 0; i < blendModes.length; ++i) {
                debug("Testing blend mode " + blendModes[i]);

                context.clearRect(0, 0, 10, 10);
                context.save();
                applyTransformsToContext(context);
                drawBackdropColorInContext(context);
                context.globalCompositeOperation = blendModes[i];
                drawSourceColorInContext(context);
                checkBlendModeResult(i, context, sigma);
                context.restore();
                debug('');
            }
        }

        debug('Running test in non accelerated mode\n');
        runTest(10, 10);
        debug('Running test in hardware accelerated mode\n');
        runTest(100, 100);

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