blob: 9b86ff653e8295e0e38ef28d4d4e6fa194c072ad [file] [log] [blame]
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
function pixelShouldBe(x, y, color) {
assert_array_equals(context.getImageData(x, y, 1, 1).data, color);
}
function createCanvasImage(width, height, color) {
var c = document.createElement("canvas");
c.width = width;
c.height = height;
var context = c.getContext("2d");
context.fillStyle = color;
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");
context.fillStyle="red";
context.fillRect(0, 0, 100, 50);
test(function () {
var pattern = context.createPattern(green1x1, null);
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]);
assert_throws_dom("SYNTAX_ERR", function() {
context.createPattern(green1x1, 'null');
});
assert_throws_dom("SYNTAX_ERR", function() {
context.createPattern(green1x1, undefined);
});
assert_throws_dom("SYNTAX_ERR", function() {
context.createPattern(green1x1, 'undefined');
});
assert_throws_dom("SYNTAX_ERR", function() {
context.createPattern(green1x1, {oString:function(){ return null;}});
});
assert_throws_js(TypeError, function() {
context.createPattern(null, '');
});
assert_throws_js(TypeError, function() {
context.createPattern(undefined, '');
});
assert_throws_js(TypeError, function() {
context.createPattern({}, '');
});
assert_throws_js(TypeError, function() {
context.createPattern([], '');
});
pattern = context.createPattern(green1x1, '');
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]);
pattern = context.createPattern(green1x1, {toString:function(){ return 'repeat';}});
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]);
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]);
}, "Test the behavior of pattern use and construction.");
</script>