mirror of
https://github.com/servo/servo.git
synced 2025-08-24 06:45:33 +01:00
Update web-platform-tests to revision c26470dac73f2df9d4822a0d3482f7eb1ebf57d9
This commit is contained in:
parent
7de87c487b
commit
4d3c932c47
648 changed files with 9014 additions and 4821 deletions
|
@ -1,58 +1,107 @@
|
|||
function testCanvasDisplayingPattern(canvas)
|
||||
{
|
||||
var tolerance = 5; // for creating ImageBitmap from a video, the tolerance needs to be high
|
||||
_assertPixelApprox(canvas, 5,5, 255,0,0,255, "5,5", "255,0,0,255", tolerance);
|
||||
_assertPixelApprox(canvas, 15,5, 0,255,0,255, "15,5", "0,255,0,255", tolerance);
|
||||
_assertPixelApprox(canvas, 5,15, 0,0,255,255, "5,15", "0,0,255,255", tolerance);
|
||||
_assertPixelApprox(canvas, 15,15, 0,0,0,255, "15,15", "0,0,0,255", tolerance);
|
||||
}
|
||||
|
||||
function testDrawImageBitmap(source)
|
||||
{
|
||||
var canvas = document.createElement("canvas");
|
||||
canvas.width = 20;
|
||||
canvas.height = 20;
|
||||
var ctx = canvas.getContext("2d");
|
||||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||
return createImageBitmap(source).then(imageBitmap => {
|
||||
ctx.drawImage(imageBitmap, 0, 0);
|
||||
testCanvasDisplayingPattern(canvas);
|
||||
function makeCanvas() {
|
||||
return new Promise(resolve => {
|
||||
var testCanvas = document.createElement("canvas");
|
||||
testCanvas.width = 20;
|
||||
testCanvas.height = 20;
|
||||
var testCtx = testCanvas.getContext("2d");
|
||||
testCtx.fillStyle = "rgb(255, 0, 0)";
|
||||
testCtx.fillRect(0, 0, 10, 10);
|
||||
testCtx.fillStyle = "rgb(0, 255, 0)";
|
||||
testCtx.fillRect(10, 0, 10, 10);
|
||||
testCtx.fillStyle = "rgb(0, 0, 255)";
|
||||
testCtx.fillRect(0, 10, 10, 10);
|
||||
testCtx.fillStyle = "rgb(0, 0, 0)";
|
||||
testCtx.fillRect(10, 10, 10, 10);
|
||||
resolve(testCanvas);
|
||||
});
|
||||
}
|
||||
|
||||
function initializeTestCanvas(testCanvas)
|
||||
{
|
||||
testCanvas.width = 20;
|
||||
testCanvas.height = 20;
|
||||
var testCtx = testCanvas.getContext("2d");
|
||||
testCtx.fillStyle = "rgb(255, 0, 0)";
|
||||
testCtx.fillRect(0, 0, 10, 10);
|
||||
testCtx.fillStyle = "rgb(0, 255, 0)";
|
||||
testCtx.fillRect(10, 0, 10, 10);
|
||||
testCtx.fillStyle = "rgb(0, 0, 255)";
|
||||
testCtx.fillRect(0, 10, 10, 10);
|
||||
testCtx.fillStyle = "rgb(0, 0, 0)";
|
||||
testCtx.fillRect(10, 10, 10, 10);
|
||||
function makeOffscreenCanvas() {
|
||||
return new Promise(resolve => {
|
||||
let canvas = new OffscreenCanvas(20, 20);
|
||||
var testCtx = canvas.getContext("2d");
|
||||
testCtx.fillStyle = "rgb(255, 0, 0)";
|
||||
testCtx.fillRect(0, 0, 10, 10);
|
||||
testCtx.fillStyle = "rgb(0, 255, 0)";
|
||||
testCtx.fillRect(10, 0, 10, 10);
|
||||
testCtx.fillStyle = "rgb(0, 0, 255)";
|
||||
testCtx.fillRect(0, 10, 10, 10);
|
||||
testCtx.fillStyle = "rgb(0, 0, 0)";
|
||||
testCtx.fillRect(10, 10, 10, 10);
|
||||
resolve(canvas);
|
||||
});
|
||||
}
|
||||
|
||||
function initializeImageData(imgData, width, height)
|
||||
{
|
||||
for (var i = 0; i < width * height * 4; i+=4) {
|
||||
imgData.data[i] = 0;
|
||||
imgData.data[i + 1] = 0;
|
||||
imgData.data[i + 2] = 0;
|
||||
imgData.data[i + 3] = 255; //alpha channel: 255
|
||||
}
|
||||
var halfWidth = width/2;
|
||||
var halfHeight = height/2;
|
||||
// initialize to R, G, B, Black, with each one 10*10 pixels
|
||||
for (var i = 0; i < halfHeight; i++)
|
||||
for (var j = 0; j < halfWidth; j++)
|
||||
imgData.data[i * width * 4 + j * 4] = 255;
|
||||
for (var i = 0; i < halfHeight; i++)
|
||||
for (var j = halfWidth; j < width; j++)
|
||||
imgData.data[i * width * 4 + j * 4 + 1] = 255;
|
||||
for (var i = halfHeight; i < height; i++)
|
||||
for (var j = 0; j < halfWidth; j++)
|
||||
imgData.data[i * width * 4 + j * 4 + 2] = 255;
|
||||
function makeVideo() {
|
||||
return new Promise(function(resolve, reject) {
|
||||
var video = document.createElement("video");
|
||||
video.oncanplaythrough = function() {
|
||||
resolve(video);
|
||||
};
|
||||
video.src = "/images/pattern.ogv";
|
||||
});
|
||||
}
|
||||
|
||||
function makeImage() {
|
||||
return new Promise(resolve => {
|
||||
var img = new Image();
|
||||
img.onload = function() {
|
||||
resolve(img);
|
||||
};
|
||||
img.src = "/images/pattern.png";
|
||||
});
|
||||
}
|
||||
|
||||
function makeImageData() {
|
||||
return new Promise(function(resolve, reject) {
|
||||
var width = 20, height = 20;
|
||||
var imgData = new ImageData(width, height);
|
||||
for (var i = 0; i < width * height * 4; i += 4) {
|
||||
imgData.data[i] = 0;
|
||||
imgData.data[i + 1] = 0;
|
||||
imgData.data[i + 2] = 0;
|
||||
imgData.data[i + 3] = 255; //alpha channel: 255
|
||||
}
|
||||
var halfWidth = width / 2;
|
||||
var halfHeight = height / 2;
|
||||
// initialize to R, G, B, Black, with each one 10*10 pixels
|
||||
for (var i = 0; i < halfHeight; i++)
|
||||
for (var j = 0; j < halfWidth; j++)
|
||||
imgData.data[i * width * 4 + j * 4] = 255;
|
||||
for (var i = 0; i < halfHeight; i++)
|
||||
for (var j = halfWidth; j < width; j++)
|
||||
imgData.data[i * width * 4 + j * 4 + 1] = 255;
|
||||
for (var i = halfHeight; i < height; i++)
|
||||
for (var j = 0; j < halfWidth; j++)
|
||||
imgData.data[i * width * 4 + j * 4 + 2] = 255;
|
||||
resolve(imgData);
|
||||
});
|
||||
}
|
||||
|
||||
function makeImageBitmap() {
|
||||
return makeCanvas().then(canvas => {
|
||||
return createImageBitmap(canvas);
|
||||
});
|
||||
}
|
||||
|
||||
function makeBlob() {
|
||||
return new Promise(function(resolve, reject) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("GET", '/images/pattern.png');
|
||||
xhr.responseType = 'blob';
|
||||
xhr.send();
|
||||
xhr.onload = function() {
|
||||
resolve(xhr.response);
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
var imageSourceTypes = [
|
||||
{ name: 'an HTMLCanvasElement', factory: makeCanvas },
|
||||
{ name: 'an HTMLVideoElement', factory: makeVideo },
|
||||
{ name: 'an HTMLImageElement', factory: makeImage },
|
||||
{ name: 'an OffscreenCanvas', factory: makeOffscreenCanvas },
|
||||
{ name: 'an ImageData', factory: makeImageData },
|
||||
{ name: 'an ImageBitmap', factory: makeImageBitmap },
|
||||
{ name: 'a Blob', factory: makeBlob },
|
||||
];
|
||||
|
|
|
@ -8,68 +8,41 @@
|
|||
<link rel="stylesheet" href="/common/canvas-tests.css">
|
||||
<body>
|
||||
<script>
|
||||
(function() {
|
||||
function testCanvasDisplayingPattern(canvas)
|
||||
{
|
||||
var tolerance = 5; // for creating ImageBitmap from a video, the tolerance needs to be high
|
||||
_assertPixelApprox(canvas, 5,5, 255,0,0,255, "5,5", "255,0,0,255", tolerance);
|
||||
_assertPixelApprox(canvas, 15,5, 0,255,0,255, "15,5", "0,255,0,255", tolerance);
|
||||
_assertPixelApprox(canvas, 5,15, 0,0,255,255, "5,15", "0,0,255,255", tolerance);
|
||||
_assertPixelApprox(canvas, 15,15, 0,0,0,255, "15,15", "0,0,0,255", tolerance);
|
||||
}
|
||||
|
||||
function testDrawImageBitmap(source, args = [])
|
||||
{
|
||||
var canvas = document.createElement("canvas");
|
||||
canvas.width = 20;
|
||||
canvas.height = 20;
|
||||
var ctx = canvas.getContext("2d");
|
||||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||
return createImageBitmap(source, ...args).then(imageBitmap => {
|
||||
ctx.drawImage(imageBitmap, 0, 0);
|
||||
testCanvasDisplayingPattern(canvas);
|
||||
});
|
||||
}
|
||||
|
||||
for (let { name, factory } of imageSourceTypes) {
|
||||
promise_test(function() {
|
||||
return new Promise(function(resolve, reject) {
|
||||
var img = new Image();
|
||||
img.onload = function() { resolve(img); };
|
||||
img.src = "/images/pattern.png";
|
||||
}).then(function(img) {
|
||||
return factory().then(function(img) {
|
||||
return testDrawImageBitmap(img);
|
||||
});
|
||||
}, "createImageBitmap from a HTMLImageElement, and drawImage on the created ImageBitmap");
|
||||
}, `createImageBitmap from ${name}, and drawImage on the created ImageBitmap`);
|
||||
|
||||
promise_test(function() {
|
||||
return new Promise(function(resolve, reject) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("GET", '/images/pattern.png');
|
||||
xhr.responseType = 'blob';
|
||||
xhr.send();
|
||||
xhr.onload = function() {
|
||||
blob = xhr.response;
|
||||
resolve(blob);
|
||||
};
|
||||
}).then(function(blob) {
|
||||
return testDrawImageBitmap(blob);
|
||||
return factory().then(function(img) {
|
||||
return testDrawImageBitmap(img, [20, 20, -20, -20]);
|
||||
});
|
||||
}, "createImageBitmap from a Blob, and drawImage on the created ImageBitmap");
|
||||
|
||||
promise_test(function() {
|
||||
var testCanvas = document.createElement("canvas");
|
||||
initializeTestCanvas(testCanvas);
|
||||
return testDrawImageBitmap(testCanvas);
|
||||
}, "createImageBitmap from a HTMLCanvasElement, and drawImage on the created ImageBitmap");
|
||||
|
||||
promise_test(function() {
|
||||
var testCanvas = document.createElement("canvas");
|
||||
initializeTestCanvas(testCanvas);
|
||||
return new Promise(function(resolve, reject) {
|
||||
createImageBitmap(testCanvas).then(function(bitmap) {
|
||||
resolve(bitmap);
|
||||
});
|
||||
}).then(function(bitmap) {
|
||||
return testDrawImageBitmap(bitmap);
|
||||
});
|
||||
}, "createImageBitmap from an ImageBitmap, and drawImage on the created ImageBitmap");
|
||||
|
||||
promise_test(function() {
|
||||
var imgData = new ImageData(20, 20);
|
||||
initializeImageData(imgData, 20, 20);
|
||||
return testDrawImageBitmap(imgData);
|
||||
}, "createImageBitmap from an ImageData, and drawImage on the created ImageBitmap");
|
||||
|
||||
promise_test(function() {
|
||||
return new Promise(function(resolve, reject) {
|
||||
var video = document.createElement("video");
|
||||
video.oncanplaythrough = function() {
|
||||
resolve(video);
|
||||
};
|
||||
video.src = "/images/pattern.ogv";
|
||||
}).then(function(video) {
|
||||
return testDrawImageBitmap(video);
|
||||
});
|
||||
}, "createImageBitmap from a HTMLVideoElement, and drawImage on the created ImageBitmap");
|
||||
})();
|
||||
}, `createImageBitmap from ${name} with negative sw/sh, and drawImage on the created ImageBitmap`);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,24 +1,9 @@
|
|||
<!doctype html>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="common.js"></script>
|
||||
<script>
|
||||
|
||||
function makeCanvas() {
|
||||
return new Promise(resolve => {
|
||||
let canvas = document.createElement('canvas');
|
||||
canvas.setAttribute('width', '10');
|
||||
canvas.setAttribute('height', '10');
|
||||
resolve(canvas);
|
||||
});
|
||||
}
|
||||
|
||||
function makeOffscreenCanvas() {
|
||||
return new Promise(resolve => {
|
||||
let canvas = new OffscreenCanvas(10, 10);
|
||||
resolve(canvas);
|
||||
});
|
||||
}
|
||||
|
||||
function makeOversizedCanvas() {
|
||||
|
||||
return new Promise(resolve => {
|
||||
|
@ -36,46 +21,6 @@ function makeOversizedOffscreenCanvas() {
|
|||
});
|
||||
}
|
||||
|
||||
function makeVideo() {
|
||||
return new Promise(resolve => {
|
||||
let video = document.createElement('video');
|
||||
video.addEventListener('canplaythrough', resolve.bind(undefined, video), false);
|
||||
video.src = '/media/A4.ogv';
|
||||
});
|
||||
}
|
||||
|
||||
function makeImage() {
|
||||
return makeCanvas().then(canvas => {
|
||||
let image = new Image();
|
||||
image.src = canvas.toDataURL();
|
||||
return new Promise(resolve => {
|
||||
image.onload = resolve.bind(undefined, image);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function makeImageData() {
|
||||
return makeCanvas().then(canvas => {
|
||||
return new Promise(function(resolve, reject) {
|
||||
resolve(canvas.getContext('2d').getImageData(0, 0, 10, 10));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function makeImageBitmap() {
|
||||
return makeCanvas().then(canvas => {
|
||||
return createImageBitmap(canvas);
|
||||
});
|
||||
}
|
||||
|
||||
function makeBlob() {
|
||||
return makeCanvas().then(canvas => {
|
||||
return new Promise(resolve => {
|
||||
canvas.toBlob(resolve);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function makeInvalidBlob() {
|
||||
return new Promise(resolve => {
|
||||
resolve(new Blob()); // Blob with no data cannot be decoded.
|
||||
|
@ -85,33 +30,23 @@ function makeInvalidBlob() {
|
|||
function makeBrokenImage() {
|
||||
return new Promise(resolve => {
|
||||
const image = new Image();
|
||||
image.src = "data,x";
|
||||
image.src = "data:,x";
|
||||
image.onerror = () => resolve(image);
|
||||
});
|
||||
}
|
||||
|
||||
function makeAvailableButBrokenImage() {
|
||||
return new Promise(resolve => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const image = new Image();
|
||||
image.src = "/images/broken.png";
|
||||
image.onload = () => resolve(image);
|
||||
image.onerror = reject;
|
||||
});
|
||||
}
|
||||
|
||||
imageSourceTypes = [
|
||||
{ name: 'HTMLImageElement', factory: makeImage },
|
||||
{ name: 'HTMLVideoElement', factory: makeVideo },
|
||||
{ name: 'HTMLCanvasElement', factory: makeCanvas },
|
||||
{ name: 'OffscreenCanvas', factory: makeOffscreenCanvas },
|
||||
{ name: 'ImageData', factory: makeImageData },
|
||||
{ name: 'ImageBitmap', factory: makeImageBitmap },
|
||||
{ name: 'Blob', factory: makeBlob },
|
||||
];
|
||||
|
||||
testCases = [
|
||||
{
|
||||
description: 'createImageBitmap with a <sourceType> source and sw set to ' +
|
||||
'0 rejects with a RangeError.',
|
||||
description: 'createImageBitmap with a <sourceType> source and sw set to 0',
|
||||
promiseTestFunction:
|
||||
(source, t) => {
|
||||
return promise_rejects(t, new RangeError(),
|
||||
|
@ -119,8 +54,7 @@ testCases = [
|
|||
}
|
||||
},
|
||||
{
|
||||
description: 'createImageBitmap with a <sourceType> source and sh set to ' +
|
||||
'0 rejects with a RangeError.',
|
||||
description: 'createImageBitmap with a <sourceType> source and sh set to 0',
|
||||
promiseTestFunction:
|
||||
(source, t) => {
|
||||
return promise_rejects(t, new RangeError(),
|
||||
|
@ -130,10 +64,11 @@ testCases = [
|
|||
{
|
||||
// This case is not explicitly documented in the specification for
|
||||
// createImageBitmap, but it is expected that internal failures cause
|
||||
// InvalidStateError.
|
||||
//
|
||||
// Note: https://bugs.chromium.org/p/chromium/issues/detail?id=799025
|
||||
description: 'createImageBitmap with a <sourceType> source and oversized ' +
|
||||
'(unallocatable) crop region rejects with an InvalidStateError ' +
|
||||
'DOMException.',
|
||||
'(unallocatable) crop region',
|
||||
promiseTestFunction:
|
||||
(source, t) => {
|
||||
return promise_rejects(t, new DOMException('', 'InvalidStateError'),
|
||||
|
@ -157,55 +92,61 @@ imageSourceTypes.forEach(imageSourceType => {
|
|||
|
||||
promise_test( t => {
|
||||
return promise_rejects(t, new TypeError(), createImageBitmap(undefined));
|
||||
}, "createImageBitmap with undefined image source rejects with a TypeError.");
|
||||
}, "createImageBitmap with undefined image source.");
|
||||
|
||||
promise_test( t => {
|
||||
return promise_rejects(t, new TypeError(), createImageBitmap(null));
|
||||
}, "createImageBitmap with null image source rejects with a TypeError.");
|
||||
}, "createImageBitmap with null image source.");
|
||||
|
||||
promise_test( t => {
|
||||
return promise_rejects(t, "InvalidStateError",
|
||||
createImageBitmap(new Image()));
|
||||
}, "createImageBitmap with empty image source rejects with a InvalidStateError.");
|
||||
}, "createImageBitmap with empty image source.");
|
||||
|
||||
promise_test( t => {
|
||||
return promise_rejects(t, "InvalidStateError",
|
||||
createImageBitmap(document.createElement('video')));
|
||||
}, "createImageBitmap with empty video source rejects with a InvalidStateError.");
|
||||
}, "createImageBitmap with empty video source.");
|
||||
|
||||
promise_test( t => {
|
||||
return makeOversizedCanvas().then(canvas => {
|
||||
return promise_rejects(t, "InvalidStateError",
|
||||
createImageBitmap(canvas));
|
||||
});
|
||||
}, "createImageBitmap with an oversized canvas source rejects with a RangeError.");
|
||||
}, "createImageBitmap with an oversized canvas source.");
|
||||
|
||||
promise_test( t => {
|
||||
return makeOversizedOffscreenCanvas().then(offscreenCanvas => {
|
||||
return promise_rejects(t, "InvalidStateError",
|
||||
createImageBitmap(offscreenCanvas));
|
||||
});
|
||||
}, "createImageBitmap with an invalid OffscreenCanvas source rejects with a RangeError.");
|
||||
}, "createImageBitmap with an invalid OffscreenCanvas source.");
|
||||
|
||||
promise_test( t => {
|
||||
return makeInvalidBlob().then(blob => {
|
||||
return promise_rejects(t, "InvalidStateError",
|
||||
createImageBitmap(blob));
|
||||
});
|
||||
}, "createImageBitmap with an undecodable blob source rejects with an InvalidStateError.");
|
||||
}, "createImageBitmap with an undecodable blob source.");
|
||||
|
||||
promise_test( t => {
|
||||
return makeBrokenImage().then(image => {
|
||||
return promise_rejects(t, "InvalidStateError",
|
||||
createImageBitmap(image));
|
||||
});
|
||||
}, "createImageBitmap with a broken image source rejects with an InvalidStateError.");
|
||||
}, "createImageBitmap with a broken image source.");
|
||||
|
||||
promise_test( t => {
|
||||
return makeAvailableButBrokenImage().then(image => {
|
||||
return promise_rejects(t, "InvalidStateError",
|
||||
createImageBitmap(image));
|
||||
});
|
||||
}, "createImageBitmap with an available but undecodable image source rejects with an InvalidStateError.");
|
||||
}, "createImageBitmap with an available but undecodable image source.");
|
||||
|
||||
promise_test( t => {
|
||||
return makeImageBitmap().then(bitmap => {
|
||||
bitmap.close()
|
||||
return promise_rejects(t, "InvalidStateError", createImageBitmap(bitmap));
|
||||
});
|
||||
}, "createImageBitmap with a closed ImageBitmap.");
|
||||
</script>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue