commit aa9a7983ca1b2a3ed6e6b409d7b321ce9121a4f9
parent fb4da3f6d80d2cfb097f8c7e0f87dca6fd6f63e3
Author: Jean-Philippe Gravel <jpgravel@chromium.org>
Date: Thu, 4 Dec 2025 16:55:53 +0000
Bug 2003466 [wpt PR 56377] - Split 2d.canvas.host.initial.reset.2dstate into atomic tests, a=testonly
Automatic update from web-platform-tests
Split 2d.canvas.host.initial.reset.2dstate into atomic tests
This test was validating a long list of states in the same test body.
It was implemented using a Jinja `for` statement to unroll code. Other
tests are using `variant:` to split variants into different test bodies.
This is usually preferable because it prevents cross talk between tests
and makes error diagnostics easier if one of the test fails.
Change-Id: I1e1d4b3796dfc270f207db6d4afab66ae40ec9b3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7211301
Reviewed-by: Andres Ricardo Perez <andresrperez@chromium.org>
Commit-Queue: Jean-Philippe Gravel <jpgravel@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1553407}
--
wpt-commits: 2c520e9c18dd0111af8f3dee6b2c76eabb29aa32
wpt-pr: 56377
Diffstat:
4 files changed, 269 insertions(+), 92 deletions(-)
diff --git a/testing/web-platform/tests/html/canvas/element/canvas-host/2d.canvas.host.initial.reset.2dstate.html b/testing/web-platform/tests/html/canvas/element/canvas-host/2d.canvas.host.initial.reset.2dstate.html
@@ -6,98 +6,189 @@
<script src="/resources/testharnessreport.js"></script>
<script src="/html/canvas/resources/canvas-tests.js"></script>
<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
-<body class="show_output">
<h1>2d.canvas.host.initial.reset.2dstate</h1>
-<p class="desc">Resetting the canvas state resets 2D state variables</p>
-
-<p class="output">Actual output:</p>
-<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
-
-<ul id="d"></ul>
<script>
-var t = async_test("Resetting the canvas state resets 2D state variables");
-_addTest(function(canvas, ctx) {
+test(t => {
+ const canvas = document.createElement('canvas');
canvas.width = 100;
- var default_val;
+ canvas.height = 50;
+ const ctx = canvas.getContext('2d');
- default_val = ctx.strokeStyle;
+ const default_val = ctx.strokeStyle;
ctx.strokeStyle = "#ff0000";
canvas.width = 100;
_assertSame(ctx.strokeStyle, default_val, "ctx.strokeStyle", "default_val");
+}, "Resetting the canvas state resets strokeStyle");
+
+test(t => {
+ const canvas = document.createElement('canvas');
+ canvas.width = 100;
+ canvas.height = 50;
+ const ctx = canvas.getContext('2d');
- default_val = ctx.fillStyle;
+ const default_val = ctx.fillStyle;
ctx.fillStyle = "#ff0000";
canvas.width = 100;
_assertSame(ctx.fillStyle, default_val, "ctx.fillStyle", "default_val");
+}, "Resetting the canvas state resets fillStyle");
- default_val = ctx.globalAlpha;
+test(t => {
+ const canvas = document.createElement('canvas');
+ canvas.width = 100;
+ canvas.height = 50;
+ const ctx = canvas.getContext('2d');
+
+ const default_val = ctx.globalAlpha;
ctx.globalAlpha = 0.5;
canvas.width = 100;
_assertSame(ctx.globalAlpha, default_val, "ctx.globalAlpha", "default_val");
+}, "Resetting the canvas state resets globalAlpha");
+
+test(t => {
+ const canvas = document.createElement('canvas');
+ canvas.width = 100;
+ canvas.height = 50;
+ const ctx = canvas.getContext('2d');
- default_val = ctx.lineWidth;
+ const default_val = ctx.lineWidth;
ctx.lineWidth = 0.5;
canvas.width = 100;
_assertSame(ctx.lineWidth, default_val, "ctx.lineWidth", "default_val");
+}, "Resetting the canvas state resets lineWidth");
- default_val = ctx.lineCap;
+test(t => {
+ const canvas = document.createElement('canvas');
+ canvas.width = 100;
+ canvas.height = 50;
+ const ctx = canvas.getContext('2d');
+
+ const default_val = ctx.lineCap;
ctx.lineCap = "round";
canvas.width = 100;
_assertSame(ctx.lineCap, default_val, "ctx.lineCap", "default_val");
+}, "Resetting the canvas state resets lineCap");
+
+test(t => {
+ const canvas = document.createElement('canvas');
+ canvas.width = 100;
+ canvas.height = 50;
+ const ctx = canvas.getContext('2d');
- default_val = ctx.lineJoin;
+ const default_val = ctx.lineJoin;
ctx.lineJoin = "round";
canvas.width = 100;
_assertSame(ctx.lineJoin, default_val, "ctx.lineJoin", "default_val");
+}, "Resetting the canvas state resets lineJoin");
- default_val = ctx.miterLimit;
+test(t => {
+ const canvas = document.createElement('canvas');
+ canvas.width = 100;
+ canvas.height = 50;
+ const ctx = canvas.getContext('2d');
+
+ const default_val = ctx.miterLimit;
ctx.miterLimit = 0.5;
canvas.width = 100;
_assertSame(ctx.miterLimit, default_val, "ctx.miterLimit", "default_val");
+}, "Resetting the canvas state resets miterLimit");
+
+test(t => {
+ const canvas = document.createElement('canvas');
+ canvas.width = 100;
+ canvas.height = 50;
+ const ctx = canvas.getContext('2d');
- default_val = ctx.shadowOffsetX;
+ const default_val = ctx.shadowOffsetX;
ctx.shadowOffsetX = 5;
canvas.width = 100;
_assertSame(ctx.shadowOffsetX, default_val, "ctx.shadowOffsetX", "default_val");
+}, "Resetting the canvas state resets shadowOffsetX");
- default_val = ctx.shadowOffsetY;
+test(t => {
+ const canvas = document.createElement('canvas');
+ canvas.width = 100;
+ canvas.height = 50;
+ const ctx = canvas.getContext('2d');
+
+ const default_val = ctx.shadowOffsetY;
ctx.shadowOffsetY = 5;
canvas.width = 100;
_assertSame(ctx.shadowOffsetY, default_val, "ctx.shadowOffsetY", "default_val");
+}, "Resetting the canvas state resets shadowOffsetY");
+
+test(t => {
+ const canvas = document.createElement('canvas');
+ canvas.width = 100;
+ canvas.height = 50;
+ const ctx = canvas.getContext('2d');
- default_val = ctx.shadowBlur;
+ const default_val = ctx.shadowBlur;
ctx.shadowBlur = 5;
canvas.width = 100;
_assertSame(ctx.shadowBlur, default_val, "ctx.shadowBlur", "default_val");
+}, "Resetting the canvas state resets shadowBlur");
- default_val = ctx.shadowColor;
+test(t => {
+ const canvas = document.createElement('canvas');
+ canvas.width = 100;
+ canvas.height = 50;
+ const ctx = canvas.getContext('2d');
+
+ const default_val = ctx.shadowColor;
ctx.shadowColor = "#ff0000";
canvas.width = 100;
_assertSame(ctx.shadowColor, default_val, "ctx.shadowColor", "default_val");
+}, "Resetting the canvas state resets shadowColor");
+
+test(t => {
+ const canvas = document.createElement('canvas');
+ canvas.width = 100;
+ canvas.height = 50;
+ const ctx = canvas.getContext('2d');
- default_val = ctx.globalCompositeOperation;
+ const default_val = ctx.globalCompositeOperation;
ctx.globalCompositeOperation = "copy";
canvas.width = 100;
_assertSame(ctx.globalCompositeOperation, default_val, "ctx.globalCompositeOperation", "default_val");
+}, "Resetting the canvas state resets globalCompositeOperation");
- default_val = ctx.font;
+test(t => {
+ const canvas = document.createElement('canvas');
+ canvas.width = 100;
+ canvas.height = 50;
+ const ctx = canvas.getContext('2d');
+
+ const default_val = ctx.font;
ctx.font = "25px serif";
canvas.width = 100;
_assertSame(ctx.font, default_val, "ctx.font", "default_val");
+}, "Resetting the canvas state resets font");
+
+test(t => {
+ const canvas = document.createElement('canvas');
+ canvas.width = 100;
+ canvas.height = 50;
+ const ctx = canvas.getContext('2d');
- default_val = ctx.textAlign;
+ const default_val = ctx.textAlign;
ctx.textAlign = "center";
canvas.width = 100;
_assertSame(ctx.textAlign, default_val, "ctx.textAlign", "default_val");
+}, "Resetting the canvas state resets textAlign");
- default_val = ctx.textBaseline;
+test(t => {
+ const canvas = document.createElement('canvas');
+ canvas.width = 100;
+ canvas.height = 50;
+ const ctx = canvas.getContext('2d');
+
+ const default_val = ctx.textBaseline;
ctx.textBaseline = "bottom";
canvas.width = 100;
_assertSame(ctx.textBaseline, default_val, "ctx.textBaseline", "default_val");
+}, "Resetting the canvas state resets textBaseline");
-});
</script>
-
diff --git a/testing/web-platform/tests/html/canvas/offscreen/canvas-host/2d.canvas.host.initial.reset.2dstate.html b/testing/web-platform/tests/html/canvas/offscreen/canvas-host/2d.canvas.host.initial.reset.2dstate.html
@@ -7,83 +7,127 @@
<script src="/html/canvas/resources/canvas-tests.js"></script>
<h1>2d.canvas.host.initial.reset.2dstate</h1>
-<p class="desc">Resetting the canvas state resets 2D state variables</p>
-
<script>
-var t = async_test("Resetting the canvas state resets 2D state variables");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
-
- var canvas = new OffscreenCanvas(100, 50);
- var ctx = canvas.getContext('2d');
- canvas.width = 100;
- var default_val;
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
- default_val = ctx.strokeStyle;
+ const default_val = ctx.strokeStyle;
ctx.strokeStyle = "#ff0000";
canvas.width = 100;
_assertSame(ctx.strokeStyle, default_val, "ctx.strokeStyle", "default_val");
+}, "Resetting the canvas state resets strokeStyle");
+
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
- default_val = ctx.fillStyle;
+ const default_val = ctx.fillStyle;
ctx.fillStyle = "#ff0000";
canvas.width = 100;
_assertSame(ctx.fillStyle, default_val, "ctx.fillStyle", "default_val");
+}, "Resetting the canvas state resets fillStyle");
- default_val = ctx.globalAlpha;
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
+
+ const default_val = ctx.globalAlpha;
ctx.globalAlpha = 0.5;
canvas.width = 100;
_assertSame(ctx.globalAlpha, default_val, "ctx.globalAlpha", "default_val");
+}, "Resetting the canvas state resets globalAlpha");
+
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
- default_val = ctx.lineWidth;
+ const default_val = ctx.lineWidth;
ctx.lineWidth = 0.5;
canvas.width = 100;
_assertSame(ctx.lineWidth, default_val, "ctx.lineWidth", "default_val");
+}, "Resetting the canvas state resets lineWidth");
+
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
- default_val = ctx.lineCap;
+ const default_val = ctx.lineCap;
ctx.lineCap = "round";
canvas.width = 100;
_assertSame(ctx.lineCap, default_val, "ctx.lineCap", "default_val");
+}, "Resetting the canvas state resets lineCap");
- default_val = ctx.lineJoin;
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
+
+ const default_val = ctx.lineJoin;
ctx.lineJoin = "round";
canvas.width = 100;
_assertSame(ctx.lineJoin, default_val, "ctx.lineJoin", "default_val");
+}, "Resetting the canvas state resets lineJoin");
+
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
- default_val = ctx.miterLimit;
+ const default_val = ctx.miterLimit;
ctx.miterLimit = 0.5;
canvas.width = 100;
_assertSame(ctx.miterLimit, default_val, "ctx.miterLimit", "default_val");
+}, "Resetting the canvas state resets miterLimit");
- default_val = ctx.shadowOffsetX;
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
+
+ const default_val = ctx.shadowOffsetX;
ctx.shadowOffsetX = 5;
canvas.width = 100;
_assertSame(ctx.shadowOffsetX, default_val, "ctx.shadowOffsetX", "default_val");
+}, "Resetting the canvas state resets shadowOffsetX");
+
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
- default_val = ctx.shadowOffsetY;
+ const default_val = ctx.shadowOffsetY;
ctx.shadowOffsetY = 5;
canvas.width = 100;
_assertSame(ctx.shadowOffsetY, default_val, "ctx.shadowOffsetY", "default_val");
+}, "Resetting the canvas state resets shadowOffsetY");
- default_val = ctx.shadowBlur;
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
+
+ const default_val = ctx.shadowBlur;
ctx.shadowBlur = 5;
canvas.width = 100;
_assertSame(ctx.shadowBlur, default_val, "ctx.shadowBlur", "default_val");
+}, "Resetting the canvas state resets shadowBlur");
+
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
- default_val = ctx.shadowColor;
+ const default_val = ctx.shadowColor;
ctx.shadowColor = "#ff0000";
canvas.width = 100;
_assertSame(ctx.shadowColor, default_val, "ctx.shadowColor", "default_val");
+}, "Resetting the canvas state resets shadowColor");
+
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
- default_val = ctx.globalCompositeOperation;
+ const default_val = ctx.globalCompositeOperation;
ctx.globalCompositeOperation = "copy";
canvas.width = 100;
_assertSame(ctx.globalCompositeOperation, default_val, "ctx.globalCompositeOperation", "default_val");
- t.done();
+}, "Resetting the canvas state resets globalCompositeOperation");
-});
</script>
diff --git a/testing/web-platform/tests/html/canvas/offscreen/canvas-host/2d.canvas.host.initial.reset.2dstate.worker.js b/testing/web-platform/tests/html/canvas/offscreen/canvas-host/2d.canvas.host.initial.reset.2dstate.worker.js
@@ -1,83 +1,129 @@
// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py.
// OffscreenCanvas test in a worker:2d.canvas.host.initial.reset.2dstate
-// Description:Resetting the canvas state resets 2D state variables
+// Description:
// Note:
importScripts("/resources/testharness.js");
importScripts("/html/canvas/resources/canvas-tests.js");
-var t = async_test("Resetting the canvas state resets 2D state variables");
-var t_pass = t.done.bind(t);
-var t_fail = t.step_func(function(reason) {
- throw reason;
-});
-t.step(function() {
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
- var canvas = new OffscreenCanvas(100, 50);
- var ctx = canvas.getContext('2d');
-
- canvas.width = 100;
- var default_val;
-
- default_val = ctx.strokeStyle;
+ const default_val = ctx.strokeStyle;
ctx.strokeStyle = "#ff0000";
canvas.width = 100;
_assertSame(ctx.strokeStyle, default_val, "ctx.strokeStyle", "default_val");
+}, "Resetting the canvas state resets strokeStyle");
+
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
- default_val = ctx.fillStyle;
+ const default_val = ctx.fillStyle;
ctx.fillStyle = "#ff0000";
canvas.width = 100;
_assertSame(ctx.fillStyle, default_val, "ctx.fillStyle", "default_val");
+}, "Resetting the canvas state resets fillStyle");
- default_val = ctx.globalAlpha;
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
+
+ const default_val = ctx.globalAlpha;
ctx.globalAlpha = 0.5;
canvas.width = 100;
_assertSame(ctx.globalAlpha, default_val, "ctx.globalAlpha", "default_val");
+}, "Resetting the canvas state resets globalAlpha");
+
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
- default_val = ctx.lineWidth;
+ const default_val = ctx.lineWidth;
ctx.lineWidth = 0.5;
canvas.width = 100;
_assertSame(ctx.lineWidth, default_val, "ctx.lineWidth", "default_val");
+}, "Resetting the canvas state resets lineWidth");
- default_val = ctx.lineCap;
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
+
+ const default_val = ctx.lineCap;
ctx.lineCap = "round";
canvas.width = 100;
_assertSame(ctx.lineCap, default_val, "ctx.lineCap", "default_val");
+}, "Resetting the canvas state resets lineCap");
+
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
- default_val = ctx.lineJoin;
+ const default_val = ctx.lineJoin;
ctx.lineJoin = "round";
canvas.width = 100;
_assertSame(ctx.lineJoin, default_val, "ctx.lineJoin", "default_val");
+}, "Resetting the canvas state resets lineJoin");
- default_val = ctx.miterLimit;
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
+
+ const default_val = ctx.miterLimit;
ctx.miterLimit = 0.5;
canvas.width = 100;
_assertSame(ctx.miterLimit, default_val, "ctx.miterLimit", "default_val");
+}, "Resetting the canvas state resets miterLimit");
+
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
- default_val = ctx.shadowOffsetX;
+ const default_val = ctx.shadowOffsetX;
ctx.shadowOffsetX = 5;
canvas.width = 100;
_assertSame(ctx.shadowOffsetX, default_val, "ctx.shadowOffsetX", "default_val");
+}, "Resetting the canvas state resets shadowOffsetX");
- default_val = ctx.shadowOffsetY;
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
+
+ const default_val = ctx.shadowOffsetY;
ctx.shadowOffsetY = 5;
canvas.width = 100;
_assertSame(ctx.shadowOffsetY, default_val, "ctx.shadowOffsetY", "default_val");
+}, "Resetting the canvas state resets shadowOffsetY");
+
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
- default_val = ctx.shadowBlur;
+ const default_val = ctx.shadowBlur;
ctx.shadowBlur = 5;
canvas.width = 100;
_assertSame(ctx.shadowBlur, default_val, "ctx.shadowBlur", "default_val");
+}, "Resetting the canvas state resets shadowBlur");
- default_val = ctx.shadowColor;
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
+
+ const default_val = ctx.shadowColor;
ctx.shadowColor = "#ff0000";
canvas.width = 100;
_assertSame(ctx.shadowColor, default_val, "ctx.shadowColor", "default_val");
+}, "Resetting the canvas state resets shadowColor");
+
+test(t => {
+ const canvas = new OffscreenCanvas(100, 50);
+ const ctx = canvas.getContext('2d');
- default_val = ctx.globalCompositeOperation;
+ const default_val = ctx.globalCompositeOperation;
ctx.globalCompositeOperation = "copy";
canvas.width = 100;
_assertSame(ctx.globalCompositeOperation, default_val, "ctx.globalCompositeOperation", "default_val");
- t.done();
-});
+}, "Resetting the canvas state resets globalCompositeOperation");
+
done();
diff --git a/testing/web-platform/tests/html/canvas/tools/yaml/the-canvas-state.yaml b/testing/web-platform/tests/html/canvas/tools/yaml/the-canvas-state.yaml
@@ -166,16 +166,12 @@
value: '"bottom"'
- name: 2d.canvas.host.initial.reset.2dstate
- desc: Resetting the canvas state resets 2D state variables
+ desc: Resetting the canvas state resets {{ variant_name }}
code: |
+ const default_val = ctx.{{ variant_name }};
+ ctx.{{ variant_name }} = {{ value }};
canvas.width = 100;
- var default_val;
- {% for state, params in states.items()
- if not params['canvas_types'] or canvas_type in params['canvas_types'] %}
-
- default_val = ctx.{{ state }};
- ctx.{{ state }} = {{ params['value'] }};
- canvas.width = 100;
- @assert ctx.{{ state }} === default_val;
- {% endfor %}
- states: *2d_state_test_cases
+ @assert ctx.{{ variant_name }} === default_val;
+ variants_layout: [single_file]
+ variants:
+ - *2d_state_test_cases