summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/canvas/tools/yaml/offscreen/the-offscreen-canvas.yaml
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/html/canvas/tools/yaml/offscreen/the-offscreen-canvas.yaml')
-rw-r--r--testing/web-platform/tests/html/canvas/tools/yaml/offscreen/the-offscreen-canvas.yaml269
1 files changed, 269 insertions, 0 deletions
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();