blob: 7962d013eb0b87dd347f491e5a1e1f153e47bee5 [file] [log] [blame]
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
// Create image
var myImage = new Image();
var img_src = '../canvas/resources/apple.gif';
myImage.src = img_src;
var bitmap;
var ctx = document.createElement("canvas").getContext('2d');
function draw() {
// No arguments should get exception
assert_throws(new TypeError(), function() {
ctx.drawImage();
});
// image argument only should get exception
assert_throws(new TypeError(), function() {
ctx.drawImage(myImage);
});
// image argument plus one number should get exception
assert_throws(new TypeError(), function() {
ctx.drawImage(myImage, 0);
});
// image argument plus 2 numbers
ctx.drawImage(myImage, 0, 0);
// image argument plus 4 numbers
ctx.drawImage(myImage, 0, 0, 20, 20);
// image argument plus 8 numbers
ctx.drawImage(myImage, 0, 0, 20, 20, 0, 0, 20, 20);
// image argument plus zero size
ctx.drawImage(myImage, 0, 0, 0, 0);
// image argument plus 8 numbers, zero size
ctx.drawImage(myImage, 0, 0, 20, 20, 0, 0, 0, 0);
// imageRect does not contain sourceRect on the left side
ctx.drawImage(myImage, -10, 0, 52, 64, 0, 0, 20, 20);
// imageRect does not contain sourceRect on the right side
ctx.drawImage(myImage, 10, 0, 52, 64, 0, 0, 20, 20);
// imageRect does not contain sourceRect on top
ctx.drawImage(myImage, 0, -10, 52, 64, 0, 0, 20, 20);
// imageRect does not contain sourceRect on bottom
ctx.drawImage(myImage, 0, 10, 52, 64, 0, 0, 20, 20);
// sourceRect is bigger than imageSource on every side
ctx.drawImage(myImage, -10, -10, 72, 84, 0, 0, 20, 20);
// negative size of source, imageRect does not contain sourceRect on the left side
ctx.drawImage(myImage, 42, 64, -52, -64, 0, 0, 20, 20);
// negative size of source, imageRect does not contain sourceRect on the right side
ctx.drawImage(myImage, 62, 64, -52, -64, 0, 0, 20, 20);
// negative size of source, imageRect does not contain sourceRect on top
ctx.drawImage(myImage, 52, 54, -52, -64, 0, 0, 20, 20);
// negative size of source, imageRect does not contain sourceRect on bottom
ctx.drawImage(myImage, 52, 74, -52, -64, 0, 0, 20, 20);
// negative size of source, imageRect does not contain sourceRect on every side
ctx.drawImage(myImage, 62, 74, -72, -84, 0, 0, 20, 20);
// images with no src can be drawn
ctx.drawImage(new Image(), 0, 0);
ctx.drawImage(new Image(), 0, 0, 20, 20);
ctx.drawImage(new Image(), 0, 0, 20, 20, 0, 0, 20, 20);
// images with no src exit early before IndexSizeError is thrown
ctx.drawImage(new Image(), 0, 0);
ctx.drawImage(new Image(), 0, 0, 0, 20);
ctx.drawImage(new Image(), 0, 0, 0, 20, 0, 0, 20, 20);
}
function drawBitmap(imageBitmap) {
bitmap = imageBitmap;
// bitmap argument plus 2 numbers
ctx.drawImage(bitmap, 0, 0);
// bitmap argument plus 4 numbers
ctx.drawImage(bitmap, 0, 0, 20, 20);
// bitmap argument plus 8 numbers
ctx.drawImage(bitmap, 0, 0, 20, 20, 0, 0, 20, 20);
// bitmap argument plus zero size
ctx.drawImage(bitmap, 0, 0, 0, 0);
// bitmap argument plus 8 numbers, zero size
ctx.drawImage(bitmap, 0, 0, 20, 20, 0, 0, 0, 0);
// bitmap argument plus 8 numbers, negative size of source, zero size
ctx.drawImage(bitmap, 20, 20, -20, 0, 0, 0, 20, 20);
// bitmap argument plus 8 numbers, negative size of destination, zero size
ctx.drawImage(bitmap, 0, 0, 20, 0, 20, 20, -20, -20);
// bitmap argument plus 8 numbers, negative size of source and destination, zero size
ctx.drawImage(bitmap, 20, 20, -20, 0, 20, 20, -20, -20);
// imageRect does not contain sourceRect on the left side
ctx.drawImage(bitmap, -10, 0, 52, 64, 0, 0, 20, 20);
// imageRect does not contain sourceRect on the right side
ctx.drawImage(bitmap, 10, 0, 52, 64, 0, 0, 20, 20);
// imageRect does not contain sourceRect on top
ctx.drawImage(bitmap, 0, -10, 52, 64, 0, 0, 20, 20);
// imageRect does not contain sourceRect on bottom
ctx.drawImage(bitmap, 0, 10, 52, 64, 0, 0, 20, 20);
// sourceRect is bigger than imageSource on every side
ctx.drawImage(bitmap, -10, -10, 72, 84, 0, 0, 20, 20);
// negative size of source, imageRect does not contain sourceRect on the left side
ctx.drawImage(bitmap, 42, 64, -52, -64, 0, 0, 20, 20);
// negative size of source, imageRect does not contain sourceRect on the right side
ctx.drawImage(bitmap, 62, 64, -52, -64, 0, 0, 20, 20);
// negative size of source, imageRect does not contain sourceRect on top
ctx.drawImage(bitmap, 52, 54, -52, -64, 0, 0, 20, 20);
// negative size of source, imageRect does not contain sourceRect on bottom
ctx.drawImage(bitmap, 52, 74, -52, -64, 0, 0, 20, 20);
// negative size of source, imageRect does not contain sourceRect on every side
ctx.drawImage(bitmap, 62, 74, -72, -84, 0, 0, 20, 20);
}
async_test(t => {
myImage.onload = function() {
t.step(draw);
createImageBitmap(myImage).then(t.step_func(function(image) {
drawBitmap(image);
}));
t.done();
}
}, "This test checks behavior of valid arguments to Canvas::drawImage that use a valid source image.");
</script>