<!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 with clipped regions.");

        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]", 0, sigma);
            shouldBeCloseTo(ac + "[1]", 0, sigma);
            shouldBeCloseTo(ac + "[2]", 0, sigma);
            shouldBeCloseTo(ac + "[3]", 0, sigma);

            ac = "actualColor(5, 5)";
            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();
                context.beginPath();
                context.moveTo(3, 3);
                context.lineTo(3, 7);
                context.lineTo(7, 7);
                context.lineTo(7, 3);
                context.lineTo(3, 3);
                context.clip();

                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>
