1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
- name: 2d.canvas.context.exists
desc: The 2D context is implemented
code: |
@assert canvas.getContext('2d') !== null;
- name: 2d.canvas.context.invalid.args
desc: Calling getContext with invalid arguments.
code: |
@assert canvas.getContext('') === null;
@assert canvas.getContext('2d#') === null;
@assert canvas.getContext('This is clearly not a valid context name.') === null;
@assert canvas.getContext('2d\0') === null;
@assert canvas.getContext('2\uFF44') === null;
@assert canvas.getContext('2D') === null;
@assert throws TypeError canvas.getContext();
@assert canvas.getContext('null') === null;
@assert canvas.getContext('undefined') === null;
- name: 2d.canvas.context.extraargs.create
desc: The 2D context doesn't throw with extra getContext arguments (new context)
code: |
@assert document.createElement("canvas").getContext('2d', false, {}, [], 1, "2") !== null;
@assert document.createElement("canvas").getContext('2d', 123) !== null;
@assert document.createElement("canvas").getContext('2d', "test") !== null;
@assert document.createElement("canvas").getContext('2d', undefined) !== null;
@assert document.createElement("canvas").getContext('2d', null) !== null;
@assert document.createElement("canvas").getContext('2d', Symbol.hasInstance) !== null;
- 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;
- name: 2d.canvas.context.type.exists
desc: The 2D context interface is a property of 'window'
notes: &bindings Defined in "Web IDL" (draft)
code: |
@assert window.CanvasRenderingContext2D;
- name: 2d.canvas.context.type.prototype
desc: window.CanvasRenderingContext2D.prototype are not [[Writable]] and not [[Configurable]],
and its methods are [[Configurable]].
notes: *bindings
code: |
@assert window.CanvasRenderingContext2D.prototype;
@assert window.CanvasRenderingContext2D.prototype.fill;
window.CanvasRenderingContext2D.prototype = null;
@assert window.CanvasRenderingContext2D.prototype;
delete window.CanvasRenderingContext2D.prototype;
@assert window.CanvasRenderingContext2D.prototype;
window.CanvasRenderingContext2D.prototype.fill = 1;
@assert window.CanvasRenderingContext2D.prototype.fill === 1;
delete window.CanvasRenderingContext2D.prototype.fill;
@assert window.CanvasRenderingContext2D.prototype.fill === undefined;
- name: 2d.canvas.context.type.replace
desc: Interface methods can be overridden
notes: *bindings
code: |
var fillRect = window.CanvasRenderingContext2D.prototype.fillRect;
window.CanvasRenderingContext2D.prototype.fillRect = function (x, y, w, h)
{
this.fillStyle = '#0f0';
fillRect.call(this, x, y, w, h);
};
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 100, 50);
@assert pixel 50,25 == 0,255,0,255;
expected: green
- name: 2d.canvas.context.type.extend
desc: Interface methods can be added
notes: *bindings
code: |
window.CanvasRenderingContext2D.prototype.fillRectGreen = function (x, y, w, h)
{
this.fillStyle = '#0f0';
this.fillRect(x, y, w, h);
};
ctx.fillStyle = '#f00';
ctx.fillRectGreen(0, 0, 100, 50);
@assert pixel 50,25 == 0,255,0,255;
expected: green
- name: 2d.canvas.context.unique
desc: getContext('2d') returns the same object
code: |
@assert canvas.getContext('2d') === canvas.getContext('2d');
- 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;
expected: green
- name: 2d.canvas.host.scaled
desc: CSS-scaled canvases get drawn correctly
size: 50, 25
canvas: 'style="width: 100px; height: 50px"'
manual:
code: |
ctx.fillStyle = '#00f';
ctx.fillRect(0, 0, 50, 25);
ctx.fillStyle = '#0ff';
ctx.fillRect(0, 0, 25, 10);
expected: |
size 100 50
cr.set_source_rgb(0, 0, 1)
cr.rectangle(0, 0, 100, 50)
cr.fill()
cr.set_source_rgb(0, 1, 1)
cr.rectangle(0, 0, 50, 20)
cr.fill()
- name: 2d.canvas.host.reference
desc: CanvasRenderingContext2D.canvas refers back to its canvas
code: |
@assert ctx.canvas === canvas;
- name: 2d.canvas.host.readonly
desc: CanvasRenderingContext2D.canvas is readonly
code: |
var c = document.createElement('canvas');
var d = ctx.canvas;
@assert c !== d;
ctx.canvas = c;
@assert ctx.canvas === d;
- name: 2d.canvas.context.prototype
desc: checks CanvasRenderingContext2D prototype
code: |
@assert Object.getPrototypeOf(CanvasRenderingContext2D.prototype) === Object.prototype;
@assert Object.getPrototypeOf(ctx) === CanvasRenderingContext2D.prototype;
t.done();
|