mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-11 18:50:50 +00:00
LibWeb: Add OffscreenCanvas tests
The tests cover working in Worker and some basic functionality
This commit is contained in:
parent
f1a096d6e4
commit
8404df55d8
Notes:
github-actions[bot]
2025-06-30 15:47:29 +00:00
Author: https://github.com/Totto16
Commit: 8404df55d8
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3788
Reviewed-by: https://github.com/ADKaster ✅
Reviewed-by: https://github.com/tcl3
9 changed files with 110 additions and 4 deletions
|
@ -116,10 +116,7 @@ public:
|
||||||
if (!font_list)
|
if (!font_list)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (font_list->is_empty())
|
my_drawing_state().current_font_cascade_list = font_list;
|
||||||
return;
|
|
||||||
|
|
||||||
my_drawing_state().current_font_cascade_list = font_list->first();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Bindings::CanvasTextAlign text_align() const { return my_drawing_state().text_align; }
|
Bindings::CanvasTextAlign text_align() const { return my_drawing_state().text_align; }
|
||||||
|
|
|
@ -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"
|
|
@ -0,0 +1 @@
|
||||||
|
FAIL: NotSupportedError: (STUBBED) OffscreenCanvasRenderingContext2D::create_image_data(int, int)
|
|
@ -0,0 +1,2 @@
|
||||||
|
1.Success: {"size":119,"type":"image/png"}
|
||||||
|
2.Success: {"size":823,"type":"image/jpeg"}
|
|
@ -0,0 +1,3 @@
|
||||||
|
{"w":10,"h":10}
|
||||||
|
normal normal 20px SerenitySans
|
||||||
|
normal normal 20px SerenitySans
|
36
Tests/LibWeb/Text/input/Worker/Worker-offscreencanvas.html
Normal file
36
Tests/LibWeb/Text/input/Worker/Worker-offscreencanvas.html
Normal 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>
|
|
@ -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>
|
32
Tests/LibWeb/Text/input/canvas/export-offscreencanvas.html
Normal file
32
Tests/LibWeb/Text/input/canvas/export-offscreencanvas.html
Normal 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>
|
13
Tests/LibWeb/Text/input/canvas/offscreencanvas-basic.html
Normal file
13
Tests/LibWeb/Text/input/canvas/offscreencanvas-basic.html
Normal 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>
|
Loading…
Add table
Add a link
Reference in a new issue