<!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 rectangle with shadow.");

        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);

            var expectedShadowColor = blendColors([192 / 255, 192 / 255, 192 / 255, 1], [1, 129 / 255, 129 / 255, 1], i);
            var ac = "actualColor(11, 11)";
            shouldBeCloseTo(ac + "[0]", expectedShadowColor[0], sigma);
            shouldBeCloseTo(ac + "[1]", expectedShadowColor[1], sigma);
            shouldBeCloseTo(ac + "[2]", expectedShadowColor[2], sigma);
            shouldBeCloseTo(ac + "[3]", expectedShadowColor[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, 12, 12);
                context.save();
                drawBackdropColorWithShadowInContext(context);
                context.globalCompositeOperation = blendModes[i];
                drawSourceColorRectOverShadow(context);
                checkBlendModeResult(i, context, sigma);
                context.restore();
                debug('');
            }
        }

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

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