Move parseFontFaceDescriptor to CSSPropertyParser.cpp
[chromium-blink-merge.git] / third_party / WebKit / LayoutTests / fast / canvas / script-tests / canvas-currentTransform.js
blob23f0854cd502bfe475c5539ac06fff022385a9cf
1 description("Series of tests to ensure correct behaviour of canvas.currentTransform");
2 var ctx = document.createElement('canvas').getContext('2d');
4 var matrix = ctx.currentTransform;
6 debug("Check initial currentTransform values");
7 shouldBe("matrix.a", "1");
8 shouldBe("matrix.b", "0");
9 shouldBe("matrix.c", "0");
10 shouldBe("matrix.d", "1");
11 shouldBe("matrix.e", "0");
12 shouldBe("matrix.f", "0");
14 function setCurrentTransform(ctx, a, b, c, d, e, f)
16     matrix.a = a;
17     matrix.b = b;
18     matrix.c = c;
19     matrix.d = d;
20     matrix.e = e;
21     matrix.f = f;
22     ctx.currentTransform = matrix;
23     matrix.a = NaN;
24     matrix.b = NaN;
25     matrix.c = NaN;
26     matrix.d = NaN;
27     matrix.e = NaN;
28     matrix.f = NaN;
29     matrix = ctx.currentTransform;
30     shouldBe("matrix.a", "" + a);
31     shouldBe("matrix.b", "" + b);
32     shouldBe("matrix.c", "" + c);
33     shouldBe("matrix.d", "" + d);
34     shouldBe("matrix.e", "" + e);
35     shouldBe("matrix.f", "" + f);
38 matrix.a = 2;
39 debug("Changing matrix should not affect the CTM");
40 shouldBe("ctx.currentTransform.a", "1");
41 shouldBe("ctx.currentTransform.b", "0");
42 shouldBe("ctx.currentTransform.c", "0");
43 shouldBe("ctx.currentTransform.d", "1");
44 shouldBe("ctx.currentTransform.e", "0");
45 shouldBe("ctx.currentTransform.f", "0");
47 debug("Reset the CTM to the initial matrix");
48 ctx.beginPath();
49 ctx.scale(0.5, 0.5);
50 matrix = ctx.currentTransform;
51 shouldBe("matrix.a", "0.5");
52 shouldBe("matrix.b", "0");
53 shouldBe("matrix.c", "0");
54 shouldBe("matrix.d", "0.5");
55 shouldBe("matrix.e", "0");
56 shouldBe("matrix.f", "0");
57 setCurrentTransform(ctx, 1, 0, 0, 1, 0, 0);
58 ctx.fillStyle = 'green';
59 ctx.fillRect(0, 0, 100, 100);
61 var imageData = ctx.getImageData(1, 1, 98, 98);
62 var imgdata = imageData.data;
63 shouldBe("imgdata[4]", "0");
64 shouldBe("imgdata[5]", "128");
65 shouldBe("imgdata[6]", "0");
67 debug("currentTransform should not affect the current path");
68 ctx.beginPath();
69 ctx.rect(0,0,100,100);
70 ctx.save();
71 setCurrentTransform(ctx, 0.5, 0, 0, 0.5, 10, 10);
72 ctx.fillStyle = 'red';
73 ctx.fillRect(0, 0, 100, 100);
74 ctx.restore();
75 matrix = ctx.currentTransform;
76 shouldBe("matrix.a", "1");
77 shouldBe("matrix.b", "0");
78 shouldBe("matrix.c", "0");
79 shouldBe("matrix.d", "1");
80 shouldBe("matrix.e", "0");
81 shouldBe("matrix.f", "0");
82 ctx.fillStyle = 'green';
83 ctx.fillRect(0, 0, 100, 100);
85 imageData = ctx.getImageData(1, 1, 98, 98);
86 imgdata = imageData.data;
87 shouldBe("imgdata[4]", "0");
88 shouldBe("imgdata[5]", "128");
89 shouldBe("imgdata[6]", "0");
91 debug("currentTransform should not affect the CTM outside of save() and restore()");
92 ctx.beginPath();
93 ctx.fillStyle = 'green';
94 ctx.save();
95 setCurrentTransform(ctx, 0.5, 0, 0, 0.5, 0, 0);
96 ctx.fillStyle = 'red';
97 ctx.fillRect(0, 0, 100, 100);
98 ctx.restore();
99 matrix = ctx.currentTransform;
100 shouldBe("matrix.a", "1");
101 shouldBe("matrix.b", "0");
102 shouldBe("matrix.c", "0");
103 shouldBe("matrix.d", "1");
104 shouldBe("matrix.e", "0");
105 shouldBe("matrix.f", "0");
106 ctx.fillRect(0, 0, 100, 100);
108 imageData = ctx.getImageData(1, 1, 98, 98);
109 imgdata = imageData.data;
110 shouldBe("imgdata[4]", "0");
111 shouldBe("imgdata[5]", "128");
112 shouldBe("imgdata[6]", "0");
114 debug("stop drawing on not-invertible CTM");
115 ctx.beginPath();
116 ctx.fillStyle = 'green';
117 ctx.fillRect(0, 0, 100, 100);
118 setCurrentTransform(ctx, 0, 0, 0, 0, 0, 0);
119 ctx.fillStyle = 'red';
120 ctx.fillRect(0, 0, 100, 100);
122 imageData = ctx.getImageData(1, 1, 98, 98);
123 imgdata = imageData.data;
124 shouldBe("imgdata[4]", "0");
125 shouldBe("imgdata[5]", "128");
126 shouldBe("imgdata[6]", "0");
128 debug("currentTransform with a not-invertible matrix should only stop the drawing up to the next restore()");
129 ctx.beginPath();
130 ctx.resetTransform();
131 matrix = ctx.currentTransform;
132 shouldBe("matrix.a", "1");
133 shouldBe("matrix.b", "0");
134 shouldBe("matrix.c", "0");
135 shouldBe("matrix.d", "1");
136 shouldBe("matrix.e", "0");
137 shouldBe("matrix.f", "0");
138 ctx.save();
139 setCurrentTransform(ctx, 0, 0, 0, 0, 0, 0);
140 ctx.fillStyle = 'red';
141 ctx.fillRect(0, 0, 100, 100);
142 ctx.restore();
143 matrix = ctx.currentTransform;
144 shouldBe("matrix.a", "1");
145 shouldBe("matrix.b", "0");
146 shouldBe("matrix.c", "0");
147 shouldBe("matrix.d", "1");
148 shouldBe("matrix.e", "0");
149 shouldBe("matrix.f", "0");
150 ctx.fillStyle = 'blue';
151 ctx.fillRect(0, 0, 100, 100);
153 imageData = ctx.getImageData(1, 1, 98, 98);
154 imgdata = imageData.data;
155 shouldBe("imgdata[4]", "0");
156 shouldBe("imgdata[5]", "0");
157 shouldBe("imgdata[6]", "255");
159 debug("currentTransform should set transform although CTM is not-invertible");
160 ctx.beginPath();
161 ctx.fillStyle = 'red';
162 ctx.fillRect(0, 0, 100, 100);
163 setCurrentTransform(ctx, 0, 0, 0, 0, 0, 0);
164 ctx.fillStyle = 'green';
165 ctx.fillRect(0, 0, 100, 100);
166 setCurrentTransform(ctx, 1, 0, 0, 1, 0, 0);
167 ctx.fillStyle = 'blue';
168 ctx.fillRect(0, 0, 100, 100);
170 imageData = ctx.getImageData(1, 1, 98, 98);
171 imgdata = imageData.data;
172 shouldBe("imgdata[4]", "0");
173 shouldBe("imgdata[5]", "0");
174 shouldBe("imgdata[6]", "255");
176 debug("Check that non-invertible transforms are reflected in currentTransform");
177 setCurrentTransform(ctx, 1, 0, 0, 1, 1, 2);
178 ctx.scale(0, 0);
179 matrix = ctx.currentTransform;
180 shouldBe("matrix.a", "0");
181 shouldBe("matrix.b", "0");
182 shouldBe("matrix.c", "0");
183 shouldBe("matrix.d", "0");
184 shouldBe("matrix.e", "1");
185 shouldBe("matrix.f", "2");
186 setCurrentTransform(ctx, 1, 0, 0, 1, 0, 0);
188 debug("Check assigning an invalid object throws exception as expected");
189 shouldThrow("ctx.currentTransform = ctx", '"TypeError: Failed to set the \'currentTransform\' property on \'CanvasRenderingContext2D\': The provided value is not of type \'SVGMatrix\'."');
190 shouldThrow("ctx.currentTransform = undefined", '"TypeError: Failed to set the \'currentTransform\' property on \'CanvasRenderingContext2D\': The provided value is not of type \'SVGMatrix\'."');
191 shouldThrow("ctx.currentTransform = null", '"TypeError: Failed to set the \'currentTransform\' property on \'CanvasRenderingContext2D\': The provided value is not of type \'SVGMatrix\'."');
193 debug("Check handling non-finite values. see 2d.transformation.setTransform.nonfinite.html");
194 ctx.fillStyle = 'red';
195 ctx.fillRect(0, 0, 100, 100);
197 function setCurrentTransformToNonfinite(ctx, a, b, c, d, e, f)
199     matrix.a = a;
200     matrix.b = b;
201     matrix.c = c;
202     matrix.d = d;
203     matrix.e = e;
204     matrix.f = f;
205     ctx.currentTransform = matrix;
206     matrix.a = NaN;
207     matrix.b = NaN;
208     matrix.c = NaN;
209     matrix.d = NaN;
210     matrix.e = NaN;
211     matrix.f = NaN;
212     matrix = ctx.currentTransform;
213     shouldBe("matrix.a", "1");
214     shouldBe("matrix.b", "0");
215     shouldBe("matrix.c", "0");
216     shouldBe("matrix.d", "1");
217     shouldBe("matrix.e", "100");
218     shouldBe("matrix.f", "10");
221 ctx.translate(100, 10);
222 matrix = ctx.currentTransform;
223 shouldBe("matrix.a", "1");
224 shouldBe("matrix.b", "0");
225 shouldBe("matrix.c", "0");
226 shouldBe("matrix.d", "1");
227 shouldBe("matrix.e", "100");
228 shouldBe("matrix.f", "10");
229 setCurrentTransformToNonfinite(ctx, Infinity, 0, 0, 0, 0, 0);
230 setCurrentTransformToNonfinite(ctx, -Infinity, 0, 0, 0, 0, 0);
231 setCurrentTransformToNonfinite(ctx, NaN, 0, 0, 0, 0, 0);
232 setCurrentTransformToNonfinite(ctx, 0, Infinity, 0, 0, 0, 0);
233 setCurrentTransformToNonfinite(ctx, 0, -Infinity, 0, 0, 0, 0);
234 setCurrentTransformToNonfinite(ctx, 0, NaN, 0, 0, 0, 0);
235 setCurrentTransformToNonfinite(ctx, 0, 0, Infinity, 0, 0, 0);
236 setCurrentTransformToNonfinite(ctx, 0, 0, -Infinity, 0, 0, 0);
237 setCurrentTransformToNonfinite(ctx, 0, 0, NaN, 0, 0, 0);
238 setCurrentTransformToNonfinite(ctx, 0, 0, 0, Infinity, 0, 0);
239 setCurrentTransformToNonfinite(ctx, 0, 0, 0, -Infinity, 0, 0);
240 setCurrentTransformToNonfinite(ctx, 0, 0, 0, NaN, 0, 0);
241 setCurrentTransformToNonfinite(ctx, 0, 0, 0, 0, Infinity, 0);
242 setCurrentTransformToNonfinite(ctx, 0, 0, 0, 0, -Infinity, 0);
243 setCurrentTransformToNonfinite(ctx, 0, 0, 0, 0, NaN, 0);
244 setCurrentTransformToNonfinite(ctx, 0, 0, 0, 0, 0, Infinity);
245 setCurrentTransformToNonfinite(ctx, 0, 0, 0, 0, 0, -Infinity);
246 setCurrentTransformToNonfinite(ctx, 0, 0, 0, 0, 0, NaN);
247 setCurrentTransformToNonfinite(ctx, Infinity, Infinity, 0, 0, 0, 0);
248 setCurrentTransformToNonfinite(ctx, Infinity, Infinity, Infinity, 0, 0, 0);
249 setCurrentTransformToNonfinite(ctx, Infinity, Infinity, Infinity, Infinity, 0, 0);
250 setCurrentTransformToNonfinite(ctx, Infinity, Infinity, Infinity, Infinity, Infinity, 0);
251 setCurrentTransformToNonfinite(ctx, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
252 setCurrentTransformToNonfinite(ctx, Infinity, Infinity, Infinity, Infinity, 0, Infinity);
253 setCurrentTransformToNonfinite(ctx, Infinity, Infinity, Infinity, 0, Infinity, 0);
254 setCurrentTransformToNonfinite(ctx, Infinity, Infinity, Infinity, 0, Infinity, Infinity);
255 setCurrentTransformToNonfinite(ctx, Infinity, Infinity, Infinity, 0, 0, Infinity);
256 setCurrentTransformToNonfinite(ctx, Infinity, Infinity, 0, Infinity, 0, 0);
257 setCurrentTransformToNonfinite(ctx, Infinity, Infinity, 0, Infinity, Infinity, 0);
258 setCurrentTransformToNonfinite(ctx, Infinity, Infinity, 0, Infinity, Infinity, Infinity);
259 setCurrentTransformToNonfinite(ctx, Infinity, Infinity, 0, Infinity, 0, Infinity);
260 setCurrentTransformToNonfinite(ctx, Infinity, Infinity, 0, 0, Infinity, 0);
261 setCurrentTransformToNonfinite(ctx, Infinity, Infinity, 0, 0, Infinity, Infinity);
262 setCurrentTransformToNonfinite(ctx, Infinity, Infinity, 0, 0, 0, Infinity);
263 setCurrentTransformToNonfinite(ctx, Infinity, 0, Infinity, 0, 0, 0);
264 setCurrentTransformToNonfinite(ctx, Infinity, 0, Infinity, Infinity, 0, 0);
265 setCurrentTransformToNonfinite(ctx, Infinity, 0, Infinity, Infinity, Infinity, 0);
266 setCurrentTransformToNonfinite(ctx, Infinity, 0, Infinity, Infinity, Infinity, Infinity);
267 setCurrentTransformToNonfinite(ctx, Infinity, 0, Infinity, Infinity, 0, Infinity);
268 setCurrentTransformToNonfinite(ctx, Infinity, 0, Infinity, 0, Infinity, 0);
269 setCurrentTransformToNonfinite(ctx, Infinity, 0, Infinity, 0, Infinity, Infinity);
270 setCurrentTransformToNonfinite(ctx, Infinity, 0, Infinity, 0, 0, Infinity);
271 setCurrentTransformToNonfinite(ctx, Infinity, 0, 0, Infinity, 0, 0);
272 setCurrentTransformToNonfinite(ctx, Infinity, 0, 0, Infinity, Infinity, 0);
273 setCurrentTransformToNonfinite(ctx, Infinity, 0, 0, Infinity, Infinity, Infinity);
274 setCurrentTransformToNonfinite(ctx, Infinity, 0, 0, Infinity, 0, Infinity);
275 setCurrentTransformToNonfinite(ctx, Infinity, 0, 0, 0, Infinity, 0);
276 setCurrentTransformToNonfinite(ctx, Infinity, 0, 0, 0, Infinity, Infinity);
277 setCurrentTransformToNonfinite(ctx, Infinity, 0, 0, 0, 0, Infinity);
278 setCurrentTransformToNonfinite(ctx, 0, Infinity, Infinity, 0, 0, 0);
279 setCurrentTransformToNonfinite(ctx, 0, Infinity, Infinity, Infinity, 0, 0);
280 setCurrentTransformToNonfinite(ctx, 0, Infinity, Infinity, Infinity, Infinity, 0);
281 setCurrentTransformToNonfinite(ctx, 0, Infinity, Infinity, Infinity, Infinity, Infinity);
282 setCurrentTransformToNonfinite(ctx, 0, Infinity, Infinity, Infinity, 0, Infinity);
283 setCurrentTransformToNonfinite(ctx, 0, Infinity, Infinity, 0, Infinity, 0);
284 setCurrentTransformToNonfinite(ctx, 0, Infinity, Infinity, 0, Infinity, Infinity);
285 setCurrentTransformToNonfinite(ctx, 0, Infinity, Infinity, 0, 0, Infinity);
286 setCurrentTransformToNonfinite(ctx, 0, Infinity, 0, Infinity, 0, 0);
287 setCurrentTransformToNonfinite(ctx, 0, Infinity, 0, Infinity, Infinity, 0);
288 setCurrentTransformToNonfinite(ctx, 0, Infinity, 0, Infinity, Infinity, Infinity);
289 setCurrentTransformToNonfinite(ctx, 0, Infinity, 0, Infinity, 0, Infinity);
290 setCurrentTransformToNonfinite(ctx, 0, Infinity, 0, 0, Infinity, 0);
291 setCurrentTransformToNonfinite(ctx, 0, Infinity, 0, 0, Infinity, Infinity);
292 setCurrentTransformToNonfinite(ctx, 0, Infinity, 0, 0, 0, Infinity);
293 setCurrentTransformToNonfinite(ctx, 0, 0, Infinity, Infinity, 0, 0);
294 setCurrentTransformToNonfinite(ctx, 0, 0, Infinity, Infinity, Infinity, 0);
295 setCurrentTransformToNonfinite(ctx, 0, 0, Infinity, Infinity, Infinity, Infinity);
296 setCurrentTransformToNonfinite(ctx, 0, 0, Infinity, Infinity, 0, Infinity);
297 setCurrentTransformToNonfinite(ctx, 0, 0, Infinity, 0, Infinity, 0);
298 setCurrentTransformToNonfinite(ctx, 0, 0, Infinity, 0, Infinity, Infinity);
299 setCurrentTransformToNonfinite(ctx, 0, 0, Infinity, 0, 0, Infinity);
300 setCurrentTransformToNonfinite(ctx, 0, 0, 0, Infinity, Infinity, 0);
301 setCurrentTransformToNonfinite(ctx, 0, 0, 0, Infinity, Infinity, Infinity);
302 setCurrentTransformToNonfinite(ctx, 0, 0, 0, Infinity, 0, Infinity);
303 setCurrentTransformToNonfinite(ctx, 0, 0, 0, 0, Infinity, Infinity);
304 matrix = ctx.currentTransform;
305 shouldBe("matrix.a", "1");
306 shouldBe("matrix.b", "0");
307 shouldBe("matrix.c", "0");
308 shouldBe("matrix.d", "1");
309 shouldBe("matrix.e", "100");
310 shouldBe("matrix.f", "10");
312 ctx.fillStyle = 'green';
313 ctx.fillRect(-100, -10, 100, 100);
315 imageData = ctx.getImageData(1, 1, 98, 98);
316 imgdata = imageData.data;
317 shouldBe("imgdata[4]", "0");
318 shouldBe("imgdata[5]", "128");
319 shouldBe("imgdata[6]", "0");