<!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 a gradient on top of a color.");

        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, 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 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();
                drawBackdropColorInContext(context);
                context.globalCompositeOperation = blendModes[i];
                drawSourceColorGradientInContext(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>
