<!DOCTYPE HTML>
<html>
<head>
    <script type="text/javascript">
        if (window.testRunner)
            testRunner.waitUntilDone();
    </script>
</head>
<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 a pattern on top of an image.");

        var context;
        var hardwareAcceleratedTestsDone = false;
        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, 0)";
            shouldBeCloseTo(ac + "[0]", expectedColor[0], sigma);
            shouldBeCloseTo(ac + "[1]", expectedColor[1], sigma);
            shouldBeCloseTo(ac + "[2]", expectedColor[2], sigma);
            shouldBeCloseTo(ac + "[3]", expectedColor[3], sigma);
        }

        function drawElement(context, i) {
            if (i >= blendModes.length) {
                if (hardwareAcceleratedTestsDone) {
                    var scriptElement = document.createElement("script");
                    scriptElement.src = "../../resources/js-test-post-async.js";
                    document.body.appendChild(scriptElement);
                    return;
                }
                hardwareAcceleratedTestsDone = true;
                debug('Running test in hardware accelerated mode\n');
                runTest(100, 100);
                return;
            }
            debug("Testing blend mode " + blendModes[i]);

            context.clearRect(0, 0, 10, 10);
            context.save();
            drawBackdropColorImageInContext(context, function() {
                context.globalCompositeOperation = blendModes[i];

                drawSourceColorPatternInContext(context, function() {
                    checkBlendModeResult(i, context, 5);
                    context.restore();
                    debug('');
                    drawElement(context, ++i);
                });
            });
        }

        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);
            drawElement(context, 0);
        }

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

    </script>
</body>
</html>
