Files
ladybird/Tests/LibWeb/Screenshot/input/canvas-implict-moves-and-lines.html
Aliaksandr Kalenik d2528dd5ce LibWeb: Compare Screenshot tests directly against expected PNGs
Instead of rendering a reference HTML page that wraps an <img> tag
pointing to a PNG, Screenshot tests now load the expected PNG directly
from disk and compare it against the rendered screenshot. This
eliminates the indirection of loading and rendering a second page just
to display a static image.

This also means --rebaseline now works for Screenshot tests, generating
the expected PNG automatically instead of requiring manual screenshot
capture and placement.

Changes:
- Add TestMode::Screenshot with its own collector and runner
- Move PNGs from Screenshot/images/ to Screenshot/expected/ with
  normalized names matching input filenames
- Remove all 92 reference HTML wrapper files and the images/
  directory
- Remove <link rel="match"> from all 94 Screenshot input HTML
  files
- Update add_libweb_test.py Screenshot boilerplate accordingly
- Add Screenshot mode to results viewer image comparison tabs
2026-02-24 09:55:14 +01:00

48 lines
1.3 KiB
HTML

<!DOCTYPE html>
<meta name="fuzzy" content="maxDifference=0-2;totalPixels=0-106">
<canvas id="canvas" width="300" height="300"></canvas>
<style>
#canvas {
border: 1px solid black;
}
body {
background: white;
}
</style>
<script>
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
{
ctx.beginPath();
ctx.moveTo(NaN, 0); // Do nothing.
ctx.lineTo(25, 25); // Equivalent to moveTo(25, 25)
ctx.lineTo(100, 25); // Line (25, 25) -> (100, 25)
ctx.stroke();
}
{
let cp1 = { x: 25, y: 75 };
let cp2 = { x: 114.6, y: 113.4 };
let end = { x: 119.72, y: 87.8 };
ctx.beginPath();
ctx.bezierCurveTo(cp1.x, cp1.y, NaN, cp2.y, end.x, end.y); // Do nothing.
ctx.bezierCurveTo(cp1.x, cp1.y, cp2.x, cp2.y, end.x, end.y); // Curve from cp1.
ctx.stroke();
}
{
let cp = { x: 230, y: 230 };
let end = { x: 50, y: 200 };
ctx.beginPath();
ctx.quadraticCurveTo(cp.x, cp.y, 1000, NaN); // Do nothing.
ctx.quadraticCurveTo(cp.x, cp.y, end.x, end.y); // Appears as line from cp to end.
ctx.stroke();
}
{
ctx.beginPath();
ctx.moveTo(200, 95);
ctx.ellipse(200, 100, 50, 75, Math.PI / 0, 0, 2 * Math.PI); // Do nothing.
ctx.ellipse(200, 100, 50, 75, Math.PI / 4, 0, 2 * Math.PI); // Ellipse with line from centre.
ctx.stroke();
}
</script>