blob: 57e1e3cd8c1608090323d9c34df77ea092cfaddd [file] [log] [blame]
<!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 an image on top of a color.");
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();
drawBackdropColorInContext(context);
context.globalCompositeOperation = blendModes[i];
drawSourceColorImageInContext(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>