LibWeb: Add OffscreenCanvas tests

The tests cover working in Worker and some basic functionality
This commit is contained in:
Totto16 2025-03-06 23:41:43 +01:00
parent 23b003f729
commit fb264f120b
No known key found for this signature in database
GPG key ID: AE3227CAF0EB3573
8 changed files with 109 additions and 0 deletions

View file

@ -0,0 +1,3 @@
Message received from worker: "{\"w\":10,\"h\":10}"
Message received from worker: "normal normal 20px SerenitySans"
Message received from worker: "normal normal 20px SerenitySans"

View file

@ -0,0 +1 @@
FAIL: NotSupportedError: (STUBBED) OffscreenCanvasRenderingContext2D::create_image_data(int, int)

View file

@ -0,0 +1,2 @@
1.Success: {"size":119,"type":"image/png"}
2.Success: {"size":823,"type":"image/jpeg"}

View file

@ -0,0 +1,3 @@
{"w":10,"h":10}
normal normal 20px SerenitySans
normal normal 20px SerenitySans

View file

@ -0,0 +1,36 @@
<!DOCTYPE html>
<script src="../include.js"></script>
<script>
asyncTest(done => {
const workerScript = `
self.onmessage = function(evt) {
try{
let canvas = new OffscreenCanvas(10, 10);
self.postMessage(JSON.stringify({ w: canvas.width, h: canvas.height }));
let context = canvas.getContext("2d");
context.font = "20px SerenitySans";
self.postMessage(context.font);
context.font = "!!!"; // Invalid value, should be ignored.
self.postMessage(context.font);
self.postMessage(null);
}catch(err){
self.postMessage("Error: " + err);
self.postMessage(null);
}
};
`;
const blob = new Blob([workerScript], { type: "application/javascript" });
const workerScriptURL = URL.createObjectURL(blob);
const worker = new Worker(workerScriptURL);
worker.onmessage = function (evt) {
if (evt.data === null) {
done();
}
println("Message received from worker: " + JSON.stringify(evt.data));
};
// Send a message to the worker
worker.postMessage("Hello from main script");
});
</script>

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<script src="../include.js"></script>
<script>
test(() => {
try {
const canvas = new OffscreenCanvas(75, 75);
const context = canvas.getContext("2d");
const existing_image_data = context.createImageData(75, 75);
const image_data = context.createImageData(existing_image_data);
if (image_data.width === 75 && image_data.height === 75) {
println("PASS");
} else {
println("FAIL");
}
} catch (err) {
println(`FAIL: ${err}`);
}
});
</script>

View file

@ -0,0 +1,32 @@
<!DOCTYPE html>
<script src="../include.js"></script>
<script>
asyncTest(async done => {
let testCounter = 1;
async function testPart(part) {
const currentTest = testCounter++;
try {
const result = await part();
println(`${currentTest}.Success: ${JSON.stringify(result)}`);
} catch (err) {
println(`${currentTest}.Error: ${err}`);
}
}
// 1. Export a OffscreenCanvas to a PNG blob
await testPart(async () => {
const offscreenCanvas = new OffscreenCanvas(100, 100);
const result = await offscreenCanvas.convertToBlob({ type: "image/png" });
return { size: result.size, type: result.type };
});
// 2. Export a OffscreenCanvas to a JPEG blob
await testPart(async () => {
const offscreenCanvas = new OffscreenCanvas(100, 100);
const result = await offscreenCanvas.convertToBlob({ type: "image/jpeg" });
return { size: result.size, type: result.type };
});
done();
});
</script>

View file

@ -0,0 +1,13 @@
<!DOCTYPE html>
<script src="../include.js"></script>
<script>
test(() => {
let canvas = new OffscreenCanvas(10, 10);
println(JSON.stringify({ w: canvas.width, h: canvas.height }));
let context = canvas.getContext("2d");
context.font = "20px SerenitySans";
println(context.font);
context.font = "!!!"; // Invalid value, should be ignored.
println(context.font);
});
</script>