blob: 93220c82659ef2e11fe64fcb840d31741c247579 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
description("Test that compositing does not influence the gradient space to context space mapping.");
var ctx = document.createElement('canvas').getContext('2d');
const tolerance = 3;
function dataToArray(data) {
var result = new Array(data.length)
for (var i = 0; i < data.length; i++)
result[i] = data[i];
return result;
}
function getPixel(x, y) {
var data = ctx.getImageData(x,y,1,1);
if (!data) // getImageData failed, which should never happen
return [-1,-1,-1,-1];
return dataToArray(data.data);
}
function pixelShouldBeNear(x, y, colour) {
var c = getPixel(x, y);
var diff = Math.max(Math.abs(c[0]-colour[0]), Math.abs(c[1]-colour[1]), Math.abs(c[2]-colour[2]), Math.abs(c[3]-colour[3]));
if (diff < tolerance)
testPassed("getPixel(" + [x, y] + ") is close to [" + colour + "].");
else
testFailed("getPixel(" + [x, y] + ") should be close to [" + colour + "]. Was [" + c + "].");
}
var grad = ctx.createLinearGradient(100,0,200,0);
grad.addColorStop(0, 'rgba(0,0,0,0)');
grad.addColorStop(0.5, 'rgba(0,0,0,0)');
grad.addColorStop(0.5, 'rgba(0,128,0,1)');
grad.addColorStop(1, 'rgba(0,128,0,1)');
ctx.fillStyle = "rgba(0,0,0,0)";
ctx.beginPath();
ctx.moveTo(100,0);
ctx.rect(100,0,100,100);
ctx.closePath();
ctx.fill();
ctx.globalCompositeOperation = 'destination-atop';
ctx.fillStyle = grad;
ctx.beginPath();
ctx.moveTo(100,0);
ctx.rect(100,0,100,100);
ctx.closePath();
ctx.fill();
pixelShouldBeNear(125,50,[0,0,0,0]);
pixelShouldBeNear(175,50,[0,128,0,255]);
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>