From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- .../tools/yaml/offscreen/the-offscreen-canvas.yaml | 269 +++++++++++++++++++++ 1 file changed, 269 insertions(+) create mode 100644 testing/web-platform/tests/html/canvas/tools/yaml/offscreen/the-offscreen-canvas.yaml (limited to 'testing/web-platform/tests/html/canvas/tools/yaml/offscreen/the-offscreen-canvas.yaml') diff --git a/testing/web-platform/tests/html/canvas/tools/yaml/offscreen/the-offscreen-canvas.yaml b/testing/web-platform/tests/html/canvas/tools/yaml/offscreen/the-offscreen-canvas.yaml new file mode 100644 index 0000000000..ccabe094b8 --- /dev/null +++ b/testing/web-platform/tests/html/canvas/tools/yaml/offscreen/the-offscreen-canvas.yaml @@ -0,0 +1,269 @@ +- name: 2d.canvas.host.reference + desc: canvas refers back to its canvas + code: | + @assert ctx.canvas === canvas; + t.done(); + +- name: 2d.canvas.host.readonly + desc: canvas is readonly + code: | + var offscreenCanvas2 = new OffscreenCanvas(100, 50); + var d = ctx.canvas; + @assert offscreenCanvas2 !== d; + ctx.canvas = offscreenCanvas2; + @assert ctx.canvas === d; + t.done(); + +- name: 2d.canvas.context.exists + desc: The 2D context is implemented + code: | + var offscreenCanvas2 = new OffscreenCanvas(100, 50); + @assert offscreenCanvas2.getContext('2d') !== null; + t.done(); + +- name: 2d.canvas.context.extraargs.create + desc: The 2D context doesn't throw with extra getContext arguments (new context) + code: | + @assert (new OffscreenCanvas(100, 50)).getContext('2d', false, {}, [], 1, "2") !== null; + @assert (new OffscreenCanvas(100, 50)).getContext('2d', 123) !== null; + @assert (new OffscreenCanvas(100, 50)).getContext('2d', "test") !== null; + @assert (new OffscreenCanvas(100, 50)).getContext('2d', undefined) !== null; + @assert (new OffscreenCanvas(100, 50)).getContext('2d', null) !== null; + @assert (new OffscreenCanvas(100, 50)).getContext('2d', Symbol.hasInstance) !== null; + t.done(); + +- name: 2d.canvas.context.extraargs.cache + desc: The 2D context doesn't throw with extra getContext arguments (cached) + code: | + @assert canvas.getContext('2d', false, {}, [], 1, "2") !== null; + @assert canvas.getContext('2d', 123) !== null; + @assert canvas.getContext('2d', "test") !== null; + @assert canvas.getContext('2d', undefined) !== null; + @assert canvas.getContext('2d', null) !== null; + @assert canvas.getContext('2d', Symbol.hasInstance) !== null; + t.done(); + +- name: 2d.canvas.context.unique + desc: getContext('2d') returns the same object + code: | + var offscreenCanvas2 = new OffscreenCanvas(100, 50); + @assert offscreenCanvas2.getContext('2d') === offscreenCanvas2.getContext('2d'); + t.done(); + +- name: 2d.canvas.context.shared + desc: getContext('2d') returns objects which share canvas state + code: | + var ctx2 = canvas.getContext('2d'); + ctx.fillStyle = '#f00'; + ctx2.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + @assert pixel 50,25 == 0,255,0,255; + t.done(); + +- name: 2d.canvas.context.emptystring + desc: getContext with empty string returns null + code: | + var offscreenCanvas2 = new OffscreenCanvas(100, 50); + @assert throws TypeError offscreenCanvas2.getContext(""); + t.done(); + +- name: 2d.canvas.context.unrecognised.badname + desc: getContext with unrecognised context name returns null + code: | + var offscreenCanvas2 = new OffscreenCanvas(100, 50); + @assert throws TypeError offscreenCanvas2.getContext('This is not an implemented context in any real browser'); + t.done(); + +- name: 2d.canvas.context.unrecognised.badsuffix + desc: Context name "2d" plus a suffix is unrecognised + code: | + var offscreenCanvas2 = new OffscreenCanvas(100, 50); + @assert throws TypeError offscreenCanvas2.getContext("2d#"); + t.done(); + +- name: 2d.canvas.context.unrecognised.nullsuffix + desc: Context name "2d" plus a "\0" suffix is unrecognised + code: | + var offscreenCanvas2 = new OffscreenCanvas(100, 50); + @assert throws TypeError offscreenCanvas2.getContext("2d\0"); + t.done(); + +- name: 2d.canvas.context.unrecognised.unicode + desc: Context name which kind of looks like "2d" is unrecognised + code: | + var offscreenCanvas2 = new OffscreenCanvas(100, 50); + @assert throws TypeError offscreenCanvas2.getContext("2\uFF44"); + t.done(); + +- name: 2d.canvas.context.casesensitive + desc: Context name "2D" is unrecognised; matching is case sensitive + code: | + var offscreenCanvas2 = new OffscreenCanvas(100, 50); + @assert throws TypeError offscreenCanvas2.getContext('2D'); + t.done(); + +- name: 2d.canvas.context.arguments.missing + code: | + var offscreenCanvas2 = new OffscreenCanvas(100, 50); + @assert throws TypeError offscreenCanvas2.getContext(); @moz-todo + t.done(); + + +- name: 2d.canvas.host.initial.color + desc: Initial state is transparent black + code: | + @assert pixel 20,20 == 0,0,0,0; + t.done(); + +- name: 2d.canvas.host.initial.reset.different + desc: Changing size resets canvas to transparent black + code: | + ctx.fillStyle = '#f00'; + ctx.fillRect(0, 0, 50, 50); + @assert pixel 20,20 == 255,0,0,255; + canvas.width = 50; + @assert pixel 20,20 == 0,0,0,0; + t.done(); + +- name: 2d.canvas.host.initial.reset.same + desc: Setting size (not changing the value) resets canvas to transparent black + code: | + canvas.width = 100; + ctx.fillStyle = '#f00'; + ctx.fillRect(0, 0, 50, 50); + @assert pixel 20,20 == 255,0,0,255; + canvas.width = 100; + @assert pixel 20,20 == 0,0,0,0; + t.done(); + +- name: 2d.canvas.host.initial.reset.path + desc: Resetting the canvas state resets the current path + code: | + canvas.width = 100; + ctx.rect(0, 0, 100, 50); + canvas.width = 100; + ctx.fillStyle = '#f00'; + ctx.fill(); + @assert pixel 20,20 == 0,0,0,0; + t.done(); + +- name: 2d.canvas.host.initial.reset.clip + desc: Resetting the canvas state resets the current clip region + code: | + canvas.width = 100; + ctx.rect(0, 0, 1, 1); + ctx.clip(); + canvas.width = 100; + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + @assert pixel 20,20 == 0,255,0,255; + t.done(); + +- name: 2d.canvas.host.initial.reset.transform + desc: Resetting the canvas state resets the current transformation matrix + code: | + canvas.width = 100; + ctx.scale(0.1, 0.1); + canvas.width = 100; + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 100, 50); + @assert pixel 20,20 == 0,255,0,255; + t.done(); + +- name: 2d.canvas.host.initial.reset.gradient + desc: Resetting the canvas state does not invalidate any existing gradients + code: | + canvas.width = 50; + var g = ctx.createLinearGradient(0, 0, 100, 0); + g.addColorStop(0, '#0f0'); + g.addColorStop(1, '#0f0'); + canvas.width = 100; + ctx.fillStyle = '#f00'; + ctx.fillRect(0, 0, 100, 50); + ctx.fillStyle = g; + ctx.fillRect(0, 0, 100, 50); + @assert pixel 50,25 == 0,255,0,255; + t.done(); + +- name: 2d.canvas.host.initial.reset.pattern + desc: Resetting the canvas state does not invalidate any existing patterns + code: | + canvas.width = 30; + ctx.fillStyle = '#0f0'; + ctx.fillRect(0, 0, 30, 50); + var p = ctx.createPattern(canvas, 'repeat-x'); + canvas.width = 100; + ctx.fillStyle = '#f00'; + ctx.fillRect(0, 0, 100, 50); + ctx.fillStyle = p; + ctx.fillRect(0, 0, 100, 50); + @assert pixel 50,25 == 0,255,0,255; + t.done(); + +- name: 2d.canvas.host.size.attributes.idl.set.zero + desc: Setting width/height IDL attributes to 0 + code: | + canvas.width = 0; + canvas.height = 0; + @assert canvas.width === 0; + @assert canvas.height === 0; + t.done(); + +- name: 2d.canvas.host.size.attributes.idl + desc: Getting/setting width/height IDL attributes + webidl: + - es-unsigned-long + code: | + canvas.width = "100"; + canvas.height = "100"; + @assert canvas.width === 100; + @assert canvas.height === 100; + canvas.width = "+1.5e2"; + canvas.height = "0x96"; + @assert canvas.width === 150; + @assert canvas.height === 150; + canvas.width = 301.999; + canvas.height = 301.001; + @assert canvas.width === 301; + @assert canvas.height === 301; + @assert throws TypeError canvas.width = "400x"; + @assert throws TypeError canvas.height = "foo"; + @assert canvas.width === 301; + @assert canvas.height === 301; + t.done(); + +- name: 2d.canvas.host.size.attributes.default + desc: Default width/height when attributes are missing + code: | + @assert canvas.width === 100; + @assert canvas.height === 50; + t.done(); + +- name: 2d.canvas.host.size.attributes.reflect.setidl + desc: Setting IDL attributes updates IDL and content attributes + code: | + canvas.width = 120; + canvas.height = 60; + @assert canvas.width === 120; + @assert canvas.height === 60; + t.done(); + +- name: 2d.canvas.host.size.attributes.reflect.setidlzero + desc: Setting IDL attributes to 0 updates IDL and content attributes + code: | + canvas.width = 0; + canvas.height = 0; + @assert canvas.width === 0; + @assert canvas.height === 0; + t.done(); + +- name: 2d.canvas.host.size.large + notes: Not sure how reasonable this is, but the spec doesn't say there's an upper + limit on the size. + code: | + var n = 2147483647; // 2^31 - 1, which should be supported by any sensible definition of "long" + canvas.width = n; + canvas.height = n; + @assert canvas.width === n; + @assert canvas.height === n; + t.done(); -- cgit v1.2.3