<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script type="text/javascript" src="canvas-blending-helpers.js"></script>

<script>
function checkBlendModeResult(i, context, sigma) {
    var expectedColor = blendColors([129 / 255, 1, 129 / 255, 1], [1, 129 / 255, 129 / 255, 0.1], i);
    var ac = context.getImageData(0, 0, 1, 1).data;
    assert_approx_equals(ac[0], expectedColor[0], sigma);
    assert_approx_equals(ac[1], expectedColor[1], sigma);
    assert_approx_equals(ac[2], expectedColor[2], sigma);
    assert_approx_equals(ac[3], expectedColor[3], sigma);
}

test(function(t) {
    var canvas = document.createElement("canvas");
    var sigma = 5;
    canvas.width = 10;
    canvas.height = 10;
    context = canvas.getContext("2d");

    for (var i = 0; i < blendModes.length; ++i) {
        context.clearRect(0, 0, 10, 10);
        context.save();
        drawBackdropColorInContext(context);
        context.globalCompositeOperation = blendModes[i];
        context.globalAlpha = 0.1;
        drawSourceColorInContext(context);
        checkBlendModeResult(i, context, sigma);
        context.restore();
    }
}, 'Series of tests to ensure correct results on applying different blend modes when globalAlpha is set.');
</script>
