blob: a476571334fba9bf261497124defaff686ab12e7 [file] [log] [blame]
description("This test covers the behaviour of pattern use and construction");
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 = context.getImageData(x,y,1,1);
if (!data) // getImageData failed, which should never happen
return [-1,-1,-1,-1];
return dataToArray(data.data);
}
function pixelShouldBe(x, y, colour) {
shouldBe("getPixel(" + [x, y] +")", "["+colour+"]");
}
function createCanvasImage(width, height, colour) {
var c = document.createElement("canvas");
c.width = width;
c.height = height;
var context = c.getContext("2d");
context.fillStyle = colour;
context.fillRect(0,0,width,height);
return c;
}
var green1x1 = createCanvasImage(1, 1, "green");
var green100x50 = createCanvasImage(100, 50, "green");
var canvas = document.createElement("canvas");
canvas.width = 100;
canvas.height = 50;
var context = canvas.getContext("2d");
var tests = [
function () {
var didThrow = false;
try {
var pattern = context.createPattern(green1x1, null);
} catch (e) {
didThrow = true;
testFailed("context.createPattern(green1x1, null) threw exception "+e)
}
if (!didThrow)
testPassed("context.createPattern(green1x1, null) did not throw an exception");
context.fillStyle = pattern;
context.fillRect(0, 0, 100, 50);
pixelShouldBe(1, 1, [0,128,0,255]);
pixelShouldBe(98, 1, [0,128,0,255]);
pixelShouldBe(1, 48, [0,128,0,255]);
pixelShouldBe(98, 48, [0,128,0,255]);
},
function () {
shouldThrow("context.createPattern(green1x1, 'null')");
},
function () {
shouldThrow("context.createPattern(green1x1, undefined)");
},
function () {
shouldThrow("context.createPattern(green1x1, 'undefined')");
},
function () {
shouldThrow("context.createPattern(green1x1, {toString:function(){ return null;}})");
},
function () {
var didThrow = false;
try {
var pattern = context.createPattern(green1x1, '');
} catch (e) {
didThrow = true;
testFailed("context.createPattern(green1x1, '') threw exception "+e)
}
if (!didThrow)
testPassed("context.createPattern(green1x1, '') did not throw an exception");
context.fillStyle = pattern;
context.fillRect(0, 0, 100, 50);
pixelShouldBe(1, 1, [0,128,0,255]);
pixelShouldBe(98, 1, [0,128,0,255]);
pixelShouldBe(1, 48, [0,128,0,255]);
pixelShouldBe(98, 48, [0,128,0,255]);
},
function () {
var didThrow = false;
try {
var pattern = context.createPattern(green1x1, {toString:function(){ return 'repeat';}});
} catch (e) {
didThrow = true;
testFailed("context.createPattern(green1x1, {toString:function(){ return 'repeat';}}) threw exception "+e)
}
if (!didThrow)
testPassed("context.createPattern(green1x1, {toString:function(){ return 'repeat';}}) did not throw an exception");
context.fillStyle = pattern;
context.fillRect(0, 0, 100, 50);
pixelShouldBe(1, 1, [0,128,0,255]);
pixelShouldBe(98, 1, [0,128,0,255]);
pixelShouldBe(1, 48, [0,128,0,255]);
pixelShouldBe(98, 48, [0,128,0,255]);
},
function () {
context.fillStyle = "green";
context.fillRect(0, 0, 50, 50);
var pattern = context.createPattern(green100x50, "no-repeat");
context.fillStyle = pattern;
context.translate(50, 0);
context.fillRect(-50, 0, 100, 50);
pixelShouldBe(1, 1, [0,128,0,255]);
pixelShouldBe(98, 1, [0,128,0,255]);
pixelShouldBe(1, 48, [0,128,0,255]);
pixelShouldBe(98, 48, [0,128,0,255]);
},
];
for (var i = 0; i < tests.length; i++) {
context.fillStyle="red";
context.fillRect(0,0,100,50);
tests[i]();
}