1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.javascript.host.canvas;
16
17 import java.io.InputStream;
18 import java.util.Collections;
19
20 import org.apache.commons.io.IOUtils;
21 import org.htmlunit.WebDriverTestCase;
22 import org.htmlunit.junit.annotation.Alerts;
23 import org.htmlunit.junit.annotation.HtmlUnitNYI;
24 import org.htmlunit.util.MimeType;
25 import org.junit.jupiter.api.Test;
26 import org.junit.jupiter.api.condition.DisabledOnOs;
27 import org.junit.jupiter.api.condition.OS;
28
29
30
31
32
33
34
35
36
37 public class CanvasRenderingContext2DTest extends WebDriverTestCase {
38
39
40
41
42 @Test
43 @Alerts("done")
44 public void test() throws Exception {
45 final String html =
46 "<html><head><script>\n"
47 + LOG_TEXTAREA_FUNCTION
48 + "function test() {\n"
49 + " var canvas = document.getElementById('myCanvas');\n"
50 + " try {\n"
51 + " var ctx = canvas.getContext('2d');\n"
52 + " ctx.fillStyle = 'rgb(200,0,0)';\n"
53 + " ctx.fillRect(10, 10, 55, 50);\n"
54 + " ctx.fillStyle = 'rgba(0, 0, 200, 0.5)';\n"
55 + " ctx.fillRect(30, 30, 55, 50);\n"
56 + " ctx.drawImage(canvas, 1, 2);\n"
57 + " ctx.drawImage(canvas, 1, 2, 3, 4);\n"
58 + " ctx.drawImage(canvas, 1, 1, 1, 1, 1, 1, 1, 1);\n"
59 + " ctx.translate(10, 10);\n"
60 + " ctx.scale(10, 10);\n"
61 + " ctx.fillRect(30, 30, 55, 50);\n"
62 + " ctx.beginPath();\n"
63 + " ctx.moveTo(0, 10);\n"
64 + " ctx.lineTo(10, 10);\n"
65 + " ctx.quadraticCurveTo(0, 10, 15, 10);\n"
66 + " ctx.closePath();\n"
67 + " ctx.rotate(1.234);\n"
68 + " log('done');\n"
69 + " } catch(e) { logEx(e); }\n"
70 + "}\n"
71 + "</script>\n"
72 + "</head>\n"
73 + "<body onload='test()'>\n"
74 + " <canvas id='myCanvas'></canvas></body>\n"
75 + LOG_TEXTAREA
76 + "</html>";
77 loadPageVerifyTextArea2(html);
78 }
79
80
81
82
83 @Test
84 @Alerts({"addHitRegion", "drawCustomFocusRing", "drawSystemFocusRing", "removeHitRegion",
85 "scrollPathIntoView", "36 methods"})
86 public void methods() throws Exception {
87 final String[] methods = {"addHitRegion", "arc", "arcTo", "beginPath", "bezierCurveTo", "clearRect", "clip",
88 "closePath", "createImageData", "createLinearGradient", "createPattern", "createRadialGradient",
89 "drawImage", "drawCustomFocusRing", "drawSystemFocusRing", "ellipse", "fill", "fillRect", "fillText",
90 "getImageData", "getLineDash", "isPointInPath", "lineTo", "measureText", "moveTo", "putImageData",
91 "quadraticCurveTo", "rect", "removeHitRegion", "restore", "rotate", "save", "scale", "scrollPathIntoView",
92 "setLineDash", "setTransform", "stroke", "strokeRect", "strokeText", "transform", "translate" };
93 final String html = DOCTYPE_HTML
94 + "<html><body>\n"
95 + "<canvas id='myCanvas'></canvas>\n"
96 + LOG_TEXTAREA
97 + "<script>\n"
98 + LOG_TEXTAREA_FUNCTION
99 + " var canvas = document.getElementById('myCanvas');\n"
100 + " var nbMethods = 0;\n"
101 + " var methods = ['" + String.join("', '", methods) + "'];\n"
102 + " try {\n"
103 + " var ctx = canvas.getContext('2d');\n"
104 + " for (var i = 0; i < methods.length; i++) {\n"
105 + " if (typeof ctx[methods[i]] == 'function')\n"
106 + " nbMethods++;\n"
107 + " else\n"
108 + " log(methods[i]);\n"
109 + " }\n"
110 + " log(nbMethods + ' methods');\n"
111 + " } catch(e) { logEx(e); }\n"
112 + "</script></body></html>";
113
114 loadPageVerifyTextArea2(html);
115 }
116
117 private void drawImage(final String png, final String canvasSetup, final String drawJS) throws Exception {
118 try (InputStream is = getClass().getResourceAsStream(png)) {
119 final byte[] directBytes = IOUtils.toByteArray(is);
120 getMockWebConnection().setResponse(URL_SECOND, directBytes, 200, "ok",
121 MimeType.IMAGE_PNG, Collections.emptyList());
122 getMockWebConnection().setDefaultResponse("Test");
123 }
124
125 final String html = DOCTYPE_HTML
126 + "<html><head>\n"
127 + "<script>\n"
128 + LOG_TEXTAREA_FUNCTION
129 + " function test() {\n"
130 + " var img = document.getElementById('myImage');\n"
131 + " var canvas = document.createElement('canvas');\n"
132 + canvasSetup
133 + " if (canvas.getContext) {\n"
134 + " var context = canvas.getContext('2d');\n"
135 + drawJS
136 + " log(canvas.toDataURL());\n"
137 + " }\n"
138 + " }\n"
139 + "</script>\n"
140 + "</head><body onload='test()'>\n"
141 + " <img id='myImage' src='" + URL_SECOND + "'>\n"
142 + LOG_TEXTAREA
143 + "</body></html>";
144
145 loadPageVerifyTextArea2(html);
146 }
147
148
149
150
151 @Test
152 @Alerts(DEFAULT = "data:image/png;base64,"
153 + "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC8ElEQVR4AVyRy08TURTGvzsz7QgYKUawAkH64GHEhKCEEIO"
154 + "JLBDcsDHGjfIH6NLEdGsiPha4MXFLotHEBTEBhBJepQ+gMj5YSUC0vEuhUgpl2k6nnpmGgp6Zb87cc8/3u3PncqD4ND8vDo"
155 + "25H437/J0TUzOdHv9Mp+9/Ub3POdZB7f/cOiC9uNRQe+nis0qrxVFhKXfYy8sdtnKLw26xOuxWq6PCZnNU2K2Oxvra7t7B4"
156 + "VfHCTpgTz7gVVVFiqRlVU1DTWtSkaasCYxBEHhcbbh8v6fX+eIQogMECDTPSCBpmWF9T8HsloLvIQWBSFKv70R2EQxuoqba"
157 + "9nBwZKQOFDqAst7AMQ6KCriWZczu5yAqnMauYEI4ZcT0yj54MQ9m8zkUFRaynYhcrPmOADRijGFmLYZtMjDOCOMJAefzOZj"
158 + "zeJwUeYwu7oLnOYiiSN2ZOwugT0A0kcLUuoy1vSTiigIlmUJJHoc0J9A0A9QElnbioAEOIwugaQSjCRwkk2SMIxiJIbq/D6"
159 + "YqsJ1iyOFUfNmIYWErRn6tO4M4AlBN+9vWnCTu2jnk4gD+pTAejy9jOhDGSjiKr6sR0LEQIGPWnlmAVi0zifAEIght/4F/M"
160 + "Yi5tS3Mr2/jWyCEkbkgUok4qgtzQGtpXl0ZAA+9aODSaDLzeDm5Ad/CBn6uhrC4FsJrbwDO+TCuFYsozNWaGXgBemQAKQWg"
161 + "EzAajLhRfRYNJbk4I4JWlJGUZRhp/7cvmNBxpQTiCRGMLpAFFDpAllNUYhAEAUVFRbjXWIHuW9XoarWgq82Kd3dq8OB6FUq"
162 + "KzTAaDGCMIU7bIT90QDi8yRgDGMdgMAgwmfJhLStFS10l2uqrUGUpRUFBAZmNZOZIwObmOjmQAbx9/2a5r39gwuudlNwenz"
163 + "Th9koTHpJ3SnK5JyWXyyuNjbmlkVGXNDw6Ln3o+eh5/uTpb1BwJLQ1N/+SPk+1Dg8NNGXlpHdnf9Mwaei4Bvub/D5PS3v7z"
164 + "R+a9y8AAAD//4c5aowAAAAGSURBVAMAjetKO7d7dGIAAAAASUVORK5CYII=",
165 FF = "data:image/png;base64,"
166 + "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC6UlEQVQ4T12TXUgUURTH//s57rqj7Yq5VKaWgpbRl7p+rl+"
167 + "ZWihi6VP1qqREJvTsey9FBIIS9CBEZbVpqJkTihgKpSSlsYWa2ppu6u7sjrs6M9ud2davGc69d+7c8+Occ/9HAfLY7XZqZm"
168 + "Hpdhili1QqyQYZpGn/43Kz38sv5D/Zva+QPt72DVrTz58a5HkBCoWCGEBGeU2m4BwIEK4CI2PjjyrKihpDEBnQ2d1bmJORx"
169 + "mwRgFIGhCzoHDKtRgVBEDA0PHavqqL0ruS7Dci1pBMATwBK2cHh4eH0B48YKSCBDF6vB5zXC7VaHfg5t5hWVmz9vA3Iy8xg"
170 + "pBR4ERj57YdPS4MO0yFAXhoceB+H02Y9wrUqggygf2i4oqbycvc2wCoBBBEf571wCDoYwmmYIiiYKQFafgPrHg5za35UnYy"
171 + "CRq1Gd//ADsBGapCdZWHWuE20T6xDozcgLioC0XQYLDFKLLN+uFkWs043zsWacDzagO537/dGkE8AU388eDbtgl6vh0EXjj"
172 + "iSd0k8iUYlYtqxjo4vyyhIMKHsRAy6+j4QQOlOCgXZFuarg8WnX39RkmRE3yIww4oQRBFXEnVgPV7cH11CU048ylPNeNPbv"
173 + "zeCgpxMhuX8aO6aQuPZSLR+28TqFikXuf+yoxQJn8XEsg/ttWdwLCYStt5dEUg1yCOADZ8Pz0ftYGY9GF/ZlItFFAQFuXtJ"
174 + "oTUpRjRfTAUdQcPWw+xNoTA3ixHINTqdTrycdODF1DpWN3iIYgAGSoXqFBNupB3B4UNmUFoKr3v6dlLo6LQVXiouZCTZiCR"
175 + "njuOw6mbxY8UL4o/EgzTMJqILmoZWoyHRqPD0la3iWk11sIgP2x4XXa+9OiA1QUjKstZJ/gqif6XUXJL9V6nUEw9a2yrvNN"
176 + "R3yQCr1ZpUV9/QfsBkDN/uNPlPsCf3d6bb7d5obrp1c2FhYVI+1tLSona5XJqgcyxiY3c37N71/Py8vJGcnMzX1dVt/QNcN"
177 + "Toga4nOWgAAAABJRU5ErkJggg==",
178 FF_ESR = "data:image/png;base64,"
179 + "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC6UlEQVQ4T12TXUgUURTH//s57rqj7Yq5VKaWgpbRl7p+rl+"
180 + "ZWihi6VP1qqREJvTsey9FBIIS9CBEZbVpqJkTihgKpSSlsYWa2ppu6u7sjrs6M9ud2davGc69d+7c8+Occ/9HAfLY7XZqZm"
181 + "Hpdhili1QqyQYZpGn/43Kz38sv5D/Zva+QPt72DVrTz58a5HkBCoWCGEBGeU2m4BwIEK4CI2PjjyrKihpDEBnQ2d1bmJORx"
182 + "mwRgFIGhCzoHDKtRgVBEDA0PHavqqL0ruS7Dci1pBMATwBK2cHh4eH0B48YKSCBDF6vB5zXC7VaHfg5t5hWVmz9vA3Iy8xg"
183 + "pBR4ERj57YdPS4MO0yFAXhoceB+H02Y9wrUqggygf2i4oqbycvc2wCoBBBEf571wCDoYwmmYIiiYKQFafgPrHg5za35UnYy"
184 + "CRq1Gd//ADsBGapCdZWHWuE20T6xDozcgLioC0XQYLDFKLLN+uFkWs043zsWacDzagO537/dGkE8AU388eDbtgl6vh0EXjj"
185 + "iSd0k8iUYlYtqxjo4vyyhIMKHsRAy6+j4QQOlOCgXZFuarg8WnX39RkmRE3yIww4oQRBFXEnVgPV7cH11CU048ylPNeNPbv"
186 + "zeCgpxMhuX8aO6aQuPZSLR+28TqFikXuf+yoxQJn8XEsg/ttWdwLCYStt5dEUg1yCOADZ8Pz0ftYGY9GF/ZlItFFAQFuXtJ"
187 + "oTUpRjRfTAUdQcPWw+xNoTA3ixHINTqdTrycdODF1DpWN3iIYgAGSoXqFBNupB3B4UNmUFoKr3v6dlLo6LQVXiouZCTZiCR"
188 + "njuOw6mbxY8UL4o/EgzTMJqILmoZWoyHRqPD0la3iWk11sIgP2x4XXa+9OiA1QUjKstZJ/gqif6XUXJL9V6nUEw9a2yrvNN"
189 + "R3yQCr1ZpUV9/QfsBkDN/uNPlPsCf3d6bb7d5obrp1c2FhYVI+1tLSona5XJqgcyxiY3c37N71/Py8vJGcnMzX1dVt/QNcN"
190 + "Toga4nOWgAAAABJRU5ErkJggg==")
191 public void drawImage() throws Exception {
192 drawImage("html.png",
193 "canvas.width = img.width; canvas.height = img.height;\n",
194 "context.drawImage(img, 0, 0, canvas.width, canvas.height);\n");
195 }
196
197
198
199
200 @Test
201 @Alerts({"rendering...", "...done"})
202 public void drawImage_noImage() throws Exception {
203 final String html = DOCTYPE_HTML
204 + "<html><body>\n"
205 + "<img id='myImage'>\n"
206 + "<canvas id='myCanvas'></canvas>\n"
207 + LOG_TEXTAREA
208 + "<script>\n"
209 + LOG_TEXTAREA_FUNCTION
210 + "try {\n"
211 + " var img = document.getElementById('myImage');\n"
212 + " var canvas = document.getElementById('myCanvas');\n"
213 + " var context = canvas.getContext('2d');\n"
214 + " log('rendering...');\n"
215 + " context.drawImage(img, 0, 0, 10, 10);\n"
216 + " log('...done');\n"
217 + "} catch(e) { logEx(e); }\n"
218 + "</script></body></html>";
219
220 loadPageVerifyTextArea2(html);
221 }
222
223
224
225
226 @Test
227 @Alerts({"rendering...", "...done"})
228 public void drawImage_invalidImage() throws Exception {
229 try (InputStream is = getClass().getResourceAsStream("invalid.png")) {
230 final byte[] directBytes = IOUtils.toByteArray(is);
231 getMockWebConnection().setResponse(URL_SECOND, directBytes, 200, "ok",
232 MimeType.IMAGE_PNG, Collections.emptyList());
233 getMockWebConnection().setDefaultResponse("Test");
234 }
235
236 final String html = DOCTYPE_HTML
237 + "<html><body>\n"
238 + "<img id='myImage'>\n"
239 + "<canvas id='myCanvas'></canvas>\n"
240 + LOG_TEXTAREA
241 + "<script>\n"
242 + LOG_TEXTAREA_FUNCTION
243 + "try {\n"
244 + " var img = document.getElementById('myImage');\n"
245 + " var canvas = document.getElementById('myCanvas');\n"
246 + " var context = canvas.getContext('2d');\n"
247 + " log('rendering...');\n"
248 + " context.drawImage(img, 0, 0, 10, 10);\n"
249 + " log('...done');\n"
250 + "} catch(e) { logEx(e); }\n"
251 + "</script></body></html>";
252
253 loadPageVerifyTextArea2(html);
254 }
255
256
257
258
259 @Test
260 @Alerts(DEFAULT = "data:image/png;base64,"
261 + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR4AWL6z8DwHwAAAP//A3ONEwAAAAZJREFUAwAFCgIB"
262 + "yRpMngAAAABJRU5ErkJggg==",
263 FF = "data:image/png;base64,"
264 + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P4z8DwHwAFAAH/F1FwBgAAAABJRU5ErkJggg==",
265 FF_ESR = "data:image/png;base64,"
266 + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P4z8DwHwAFAAH/F1FwBgAAAABJRU5ErkJggg==")
267
268
269
270
271
272 public void drawImage_1x1_32bits() throws Exception {
273 drawImage("1x1red_32_bit_depth.png",
274 "canvas.width = img.width; canvas.height = img.height;\n",
275 "context.drawImage(img, 0, 0, canvas.width, canvas.height);\n");
276 }
277
278
279
280
281 @Test
282 @Alerts(DEFAULT = "data:image/png;base64,"
283 + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR4AWL6z8DwHwAAAP//A3ONEwAAAAZJREFUAwAFCgIB"
284 + "yRpMngAAAABJRU5ErkJggg==",
285 FF = "data:image/png;base64,"
286 + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P4z8DwHwAFAAH/F1FwBgAAAABJRU5ErkJggg==",
287 FF_ESR = "data:image/png;base64,"
288 + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P4z8DwHwAFAAH/F1FwBgAAAABJRU5ErkJggg==")
289 public void drawImage_1x1_24bits() throws Exception {
290 drawImage("1x1red_24_bit_depth.png",
291 "canvas.width = img.width; canvas.height = img.height;\n",
292 "context.drawImage(img, 0, 0, canvas.width, canvas.height);\n");
293 }
294
295
296
297
298 @Test
299 @Alerts(DEFAULT = "data:image/png;base64,"
300 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAIklEQVR4AWSIsQ0AAAiDsP//rB1MlxIGghYsQQOWoNRHjQMA"
301 + "AP//SMpI1gAAAAZJREFUAwCEdgIJz8+ExgAAAABJRU5ErkJggg==",
302 FF = "data:image/png;base64,"
303 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAF0lEQVQIW2P8z8Dwn5GBAYggAM4gXgAAg+YCBUgKw5EAAAAA"
304 + "SUVORK5CYII=",
305 FF_ESR = "data:image/png;base64,"
306 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAF0lEQVQIW2P8z8Dwn5GBAYggAM4gXgAAg+YCBUgKw5EAAAAA"
307 + "SUVORK5CYII=")
308 public void drawImage3Arguments() throws Exception {
309 drawImage("1x1red_32_bit_depth.png",
310 "canvas.width = 4; canvas.height = 4;\n",
311 "context.drawImage(img, 0, 0);\n");
312 }
313
314
315
316
317 @Test
318 @Alerts(DEFAULT = "data:image/png;base64,"
319 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAIklEQVR4AWyKsQ0AAAiD0P9/1qZupoSJ0DxyGJC3+iiQmAUA"
320 + "AP//C9I1QgAAAAZJREFUAwA4dgIJmGt15AAAAABJRU5ErkJggg==",
321 FF = "data:image/png;base64,"
322 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGUlEQVQIW2NkQAOMWAX+MzD8B8qAJTFUAAA35gIFxQ+VugAA"
323 + "AABJRU5ErkJggg==",
324 FF_ESR = "data:image/png;base64,"
325 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGUlEQVQIW2NkQAOMWAX+MzD8B8qAJTFUAAA35gIFxQ+VugAA"
326 + "AABJRU5ErkJggg==")
327 public void drawImage3ArgumentsPlacement() throws Exception {
328 drawImage("1x1red_32_bit_depth.png",
329 "canvas.width = 4; canvas.height = 4;\n",
330 "context.drawImage(img, 1, 2);\n");
331 }
332
333
334
335
336
337 @Test
338 @Alerts(DEFAULT = "data:image/png;base64,"
339 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAMElEQVR4ASSJgQkAMRDC4m3ym/qTdhR7WJAoZgIhX9rA/DbR"
340 + "2fkytkV9+ky5kLSECwAA//99UEdwAAAABklEQVQDAKv1DwQf8pyHAAAAAElFTkSuQmCC",
341 FF = "data:image/png;base64,"
342 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAL0lEQVQIWzXI0REAEBAD0Y1OVCqd6kQ4w/vaWQXS0lmaCCTb"
343 + "GTbljoocd5Q/XmoDijQRBTzmAeYAAAAASUVORK5CYII=",
344 FF_ESR = "data:image/png;base64,"
345 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAL0lEQVQIWzXI0REAEBAD0Y1OVCqd6kQ4w/vaWQXS0lmaCCTb"
346 + "GTbljoocd5Q/XmoDijQRBTzmAeYAAAAASUVORK5CYII=")
347 public void drawImage3ArgumentsPlacementNegative() throws Exception {
348 drawImage("4x6.png",
349 "canvas.width = 4; canvas.height = 4;\n",
350 "context.drawImage(img, -1, -2);\n");
351 }
352
353
354
355
356 @Test
357 @Alerts(DEFAULT = "data:image/png;base64,"
358 + "iVBORw0KGgoAAAANSUhEUgAAAAIAAAAFCAYAAABvsz2cAAAAOUlEQVR4AQAtANL/AgAm////AAD/Av/aAQAA2AAAAgH/IQAA"
359 + "KAAAAv8B3wCBgIAAAgEAAAGAgIABAAAA//+kky/SAAAABklEQVQDAFRaDQuxWv84AAAAAElFTkSuQmCC",
360 FF = "data:image/png;base64,"
361 + "iVBORw0KGgoAAAANSUhEUgAAAAIAAAAFCAYAAABvsz2cAAAAK0lEQVQIWy3IsRUAEBQEwd1SJOr8uvQkOnECJhzpSZYYCBM0"
362 + "Lcf9ZlQh3wWKWA5Xk6MBwQAAAABJRU5ErkJggg==",
363 FF_ESR = "data:image/png;base64,"
364 + "iVBORw0KGgoAAAANSUhEUgAAAAIAAAAFCAYAAABvsz2cAAAAK0lEQVQIWy3IsRUAEBQEwd1SJOr8uvQkOnECJhzpSZYYCBM0"
365 + "Lcf9ZlQh3wWKWA5Xk6MBwQAAAABJRU5ErkJggg==")
366 public void drawImage3ArgumentsImageTooLarge() throws Exception {
367 drawImage("4x6.png",
368 "canvas.width = 2; canvas.height = 5;\n",
369 "context.drawImage(img, 0, 0);\n");
370 }
371
372
373
374
375 @Test
376 @Alerts(DEFAULT = "data:image/png;base64,"
377 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAIklEQVR4AWSIsQ0AAAiDsP//rB1MlxIGghYsQQOWoNRHjQMA"
378 + "AP//SMpI1gAAAAZJREFUAwCEdgIJz8+ExgAAAABJRU5ErkJggg==",
379 FF = "data:image/png;base64,"
380 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAF0lEQVQIW2P8z8Dwn5GBAYggAM4gXgAAg+YCBUgKw5EAAAAA"
381 + "SUVORK5CYII=",
382 FF_ESR = "data:image/png;base64,"
383 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAF0lEQVQIW2P8z8Dwn5GBAYggAM4gXgAAg+YCBUgKw5EAAAAA"
384 + "SUVORK5CYII=")
385 public void drawImage5Arguments() throws Exception {
386 drawImage("1x1red_32_bit_depth.png",
387 "canvas.width = 4; canvas.height = 4;\n",
388 "context.drawImage(img, 0, 0, img.width, img.height);\n");
389 }
390
391
392
393
394 @Test
395 @Alerts(DEFAULT = "data:image/png;base64,"
396 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAIklEQVR4AWyKsQ0AAAiD0P9/1qZupoSJ0DxyGJC3+iiQmAUA"
397 + "AP//C9I1QgAAAAZJREFUAwA4dgIJmGt15AAAAABJRU5ErkJggg==",
398 FF = "data:image/png;base64,"
399 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGUlEQVQIW2NkQAOMWAX+MzD8B8qAJTFUAAA35gIFxQ+VugAA"
400 + "AABJRU5ErkJggg==",
401 FF_ESR = "data:image/png;base64,"
402 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGUlEQVQIW2NkQAOMWAX+MzD8B8qAJTFUAAA35gIFxQ+VugAA"
403 + "AABJRU5ErkJggg==")
404 public void drawImage5ArgumentsPlacement() throws Exception {
405 drawImage("1x1red_32_bit_depth.png",
406 "canvas.width = 4; canvas.height = 4;\n",
407 "context.drawImage(img, 1, 2, img.width, img.height);\n");
408 }
409
410
411
412
413 @Test
414 @Alerts(DEFAULT = "data:image/png;base64,"
415 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAJklEQVR4AVSLMQ0AAAzCGtTMv5q5YTuBQEKPyouJiAn6q19VuAwO"
416 + "AAD//wnhEpIAAAAGSURBVAMA4FAFBQG8BCwAAAAASUVORK5CYII=",
417 FF = "data:image/png;base64,"
418 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAJElEQVQIW2P8f4PhP6MGAyMDFDD+ZwAKMOAV+P//PyMQwLQAAJ81"
419 + "CwUd8tccAAAAAElFTkSuQmCC",
420 FF_ESR = "data:image/png;base64,"
421 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAJElEQVQIW2P8f4PhP6MGAyMDFDD+ZwAKMOAV+P//PyMQwLQAAJ81"
422 + "CwUd8tccAAAAAElFTkSuQmCC")
423 public void drawImage5ArgumentsPlacementNegative() throws Exception {
424 drawImage("4x6.png",
425 "canvas.width = 4; canvas.height = 4;\n",
426 "context.drawImage(img, -3, -1, img.width, img.height);\n");
427 }
428
429
430
431
432 @Test
433 @Alerts(DEFAULT = "data:image/png;base64,"
434 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAIElEQVR4AWTIsQ0AAAzCsMD/P9MVlUhe4kCaBWrmNeMAAAD/"
435 + "/zfOO90AAAAGSURBVAMA3R8ICcQj3MsAAAAASUVORK5CYII=",
436 FF = "data:image/png;base64,"
437 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAFklEQVQIW2P8z8AARAjAiMwBsQkLAACDawID+0h1rgAAAABJ"
438 + "RU5ErkJggg==",
439 FF_ESR = "data:image/png;base64,"
440 + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAFklEQVQIW2P8z8AARAjAiMwBsQkLAACDawID+0h1rgAAAABJ"
441 + "RU5ErkJggg==")
442 public void drawImageStretch() throws Exception {
443 drawImage("1x1red_32_bit_depth.png",
444 "canvas.width = 4; canvas.height = 4;\n",
445 "context.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, img.height);\n");
446 }
447
448
449
450
451 @Test
452 @Alerts(DEFAULT = "data:image/png;base64,"
453 + "iVBORw0KGgoAAAANSUhEUgAAAAIAAAAFCAYAAABvsz2cAAAAOUlEQVR4AQAtANL/AgAm////AAD/Av/aAQAA2AAAAgH/IQAAKAA"
454 + "AAv8B3wCBgIAAAgEAAAGAgIABAAAA//+kky/SAAAABklEQVQDAFRaDQuxWv84AAAAAElFTkSuQmCC",
455 FF = "data:image/png;base64,"
456 + "iVBORw0KGgoAAAANSUhEUgAAAAIAAAAFCAYAAABvsz2cAAAAK0lEQVQIWy3IsRUAEBQEwd1SJOr8uvQkOnECJhzpSZYYCBM0Lcf"
457 + "9ZlQh3wWKWA5Xk6MBwQAAAABJRU5ErkJggg==",
458 FF_ESR = "data:image/png;base64,"
459 + "iVBORw0KGgoAAAANSUhEUgAAAAIAAAAFCAYAAABvsz2cAAAAK0lEQVQIWy3IsRUAEBQEwd1SJOr8uvQkOnECJhzpSZYYCBM0Lcf"
460 + "9ZlQh3wWKWA5Xk6MBwQAAAABJRU5ErkJggg==")
461 public void drawImage5ArgumentsImageTooLarge() throws Exception {
462 drawImage("4x6.png",
463 "canvas.width = 2; canvas.height = 5;\n",
464 "context.drawImage(img, 0, 0, 4, 6);\n");
465 }
466
467
468
469
470 @Test
471 @Alerts(DEFAULT = "data:image/png;base64,"
472 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAr0lEQVR4AYyOsQ3CQAxFv2mAEUAUSYMY47wFHTAOI9CQbHIe"
473 + "A9EkVKxAZ2wfSIkiJE5+vu/zl88z/HmKcauaNlnzMgWuHa8VsADCqHdCXjPSRQLXjte4lS/DSFqDzyvIdRG4drzGbmBU6tCc"
474 + "5nhU+8B15ieSvIrLcpkIUN33dGxbOjQNV10nUFvtC1B2tHsSIgJmBhFFLyaG+iQiEoPtkJnJnp3fE80wisnEUXdQvAEAAP//"
475 + "VmhWRgAAAAZJREFUAwCOaUMVSmui5AAAAABJRU5ErkJggg==",
476 FF = "data:image/png;base64,"
477 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAmElEQVQYV42PzQ3CMAyF7Q2QukC4ICbotR6IHTA7MJC9SRZA"
478 + "4kS5GdsKUWlVCSuS814+/wThz8DkTmbTS4AfnJKHll3TrOAQJmhxRr9cWvt7y6Hdx3MD0Y42yQxXfiZx40Pm0KTv3461FBCi"
479 + "BEgESq19+z56+R/zdWPN4L8+Riyh3LeBIkLMDKoa9hZcF/auew9rfzN6r/AD8z8wC6n68A8AAAAASUVORK5CYII=",
480 FF_ESR = "data:image/png;base64,"
481 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAmElEQVQYV42PzQ3CMAyF7Q2QukC4ICbotR6IHTA7MJC9SRZA"
482 + "4kS5GdsKUWlVCSuS814+/wThz8DkTmbTS4AfnJKHll3TrOAQJmhxRr9cWvt7y6Hdx3MD0Y42yQxXfiZx40Pm0KTv3461FBCi"
483 + "BEgESq19+z56+R/zdWPN4L8+Riyh3LeBIkLMDKoa9hZcF/auew9rfzN6r/AD8z8wC6n68A8AAAAASUVORK5CYII=")
484 public void drawImage5ArgumentsStretchX() throws Exception {
485 drawImage("4x6.png",
486 "canvas.width = 10; canvas.height = 10;\n",
487 "context.drawImage(img, 1, 1, 8, 6);\n");
488 }
489
490
491
492
493 @Test
494 @Alerts(DEFAULT = "data:image/png;base64,"
495 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAW0lEQVR4AdTLwQ2AQAgEwMUWbEj70Rpu7cCHBVGEfWgHqCQk"
496 + "p+Hh9/gsZIcOP8che5pNsMjs1yHmFboPeBJbxgCH5CmjqpRyYCFT6TAauYekxF3nC9bFd28BXgAAAP//HA3MPwAAAAZJREFU"
497 + "AwD/kxYV5nc6CgAAAABJRU5ErkJggg==",
498 FF = "data:image/png;base64,"
499 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAUElEQVQYV2NkIBIwgtTVC9f/b4hsZGhYXs8AohmnMIDFkQFY"
500 + "oKFe4L/9QQOGg/YXGOobP4BUYVcI0/kfCBoaGhgaGxvxK8TnXAyduBQPBYUAzvAVCzcdbJgAAAAASUVORK5CYII=",
501 FF_ESR = "data:image/png;base64,"
502 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAUElEQVQYV2NkIBIwgtTVC9f/b4hsZGhYXs8AohmnMIDFkQFY"
503 + "oKFe4L/9QQOGg/YXGOobP4BUYVcI0/kfCBoaGhgaGxvxK8TnXAyduBQPBYUAzvAVCzcdbJgAAAAASUVORK5CYII=")
504 public void drawImage5ArgumentsShrinkY() throws Exception {
505 drawImage("4x6.png",
506 "canvas.width = 10; canvas.height = 10;\n",
507 "context.drawImage(img, 1, 1, 4, 3);\n");
508 }
509
510
511
512
513 @Test
514 @Alerts(DEFAULT = "data:image/png;base64,"
515 + "iVBORw0KGgoAAAANSUhEUgAAAAIAAAAFCAYAAABvsz2cAAAAOUlEQVR4AQAtANL/AgAm//9AHL//AkD2wAAwB9AAAn/tgQBf"
516 + "DaEAAgA3yAAAKNYAAoF/EQChRQ0AAAAA//8ndWI0AAAABklEQVQDAHWwDkGwhZlYAAAAAElFTkSuQmCC",
517 FF = "data:image/png;base64,"
518 + "iVBORw0KGgoAAAANSUhEUgAAAAIAAAAFCAYAAABvsz2cAAAANUlEQVQIW2NkUPv/3/7bAQZGe5n9/w3YLjAw7ue0/y+g9gHI"
519 + "sOf4LyD5j4HRYb/Ef4O7vxgAjuARs3OGyksAAAAASUVORK5CYII=",
520 FF_ESR = "data:image/png;base64,"
521 + "iVBORw0KGgoAAAANSUhEUgAAAAIAAAAFCAYAAABvsz2cAAAANUlEQVQIW2NkUPv/3/7bAQZGe5n9/w3YLjAw7ue0/y+g9gHI"
522 + "sOf4LyD5j4HRYb/Ef4O7vxgAjuARs3OGyksAAAAASUVORK5CYII=")
523 public void drawImage5ArgumentsStretchImageTooLarge() throws Exception {
524 drawImage("4x6.png",
525 "canvas.width = 2; canvas.height = 5;\n",
526 "context.drawImage(img, 0, 0, 8, 12);\n");
527 }
528
529
530
531
532 @Test
533 @Alerts(DEFAULT = "data:image/png;base64,"
534 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAWUlEQVR4AcSQQQqAQAwDJ/2JF/GZ9ZfixafEddGDsAVv5tBA"
535 + "mNLQ4KN+BWfbYB4vOod3wdbI2wuOkCdY4HEKhXWwZnJ5wfQ42mFlpuhN3cPReP1RamsjCjgBAAD//8KC5xQAAAAGSURBVAMA"
536 + "atMbENm3LJ4AAAAASUVORK5CYII=",
537 FF = "data:image/png;base64,"
538 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAX0lEQVQYV7WQQQqAMBADE3/SS+kvrb8UL/7EmIp62kovBkJg"
539 + "GXbDEoPiIIc/wCxpI5iFKxFfoQBhddNiO1k6IJV0cMekhJafG5daMdtNXfB5j5u6hUEretk7bODNhOAJzrgfCzJhsNQAAAAA"
540 + "SUVORK5CYII=",
541 FF_ESR = "data:image/png;base64,"
542 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAX0lEQVQYV7WQQQqAMBADE3/SS+kvrb8UL/7EmIp62kovBkJg"
543 + "GXbDEoPiIIc/wCxpI5iFKxFfoQBhddNiO1k6IJV0cMekhJafG5daMdtNXfB5j5u6hUEretk7bODNhOAJzrgfCzJhsNQAAAAA"
544 + "SUVORK5CYII=")
545 public void drawImage5ArgumentsNegativeWidth() throws Exception {
546 drawImage("4x6.png",
547 "canvas.width = 10; canvas.height = 10;\n",
548 "context.drawImage(img, 4, 4, -4, 6);\n");
549 }
550
551
552
553
554
555 @Test
556 @Alerts(DEFAULT = "data:image/png;base64,"
557 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAZUlEQVR4AazOQQ6AIAxE0V9v4sZ4zHpL48ajjIUUE23c2QAT"
558 + "4BE68a5FEoiReV+gDoM9ZGY6CjTNsMJIsgqUnWzutEzTo8D42Nzd6J2qo7YU2A7HNItnufmEFhXmlp8w0GP8Dy8AAAD//z4L"
559 + "JNsAAAAGSURBVAMAB4kbFQG6XKkAAAAASUVORK5CYII=",
560 FF = "data:image/png;base64,"
561 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAX0lEQVQYV8WOQQqAMBADE3/SS+kvrb8UL/7EmJYKRap4M+w2"
562 + "sAxNiLuipI1gFKqjTHt6VoCw+pK8dqYHkAo6uGNSQPHXH5ecMXtb5Dj6quGmbuFoa9ixB3um0l/0I3gCu8YfCw1yrNcAAAAA"
563 + "SUVORK5CYII=",
564 FF_ESR = "data:image/png;base64,"
565 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAX0lEQVQYV8WOQQqAMBADE3/SS+kvrb8UL/7EmJYKRap4M+w2"
566 + "sAxNiLuipI1gFKqjTHt6VoCw+pK8dqYHkAo6uGNSQPHXH5ecMXtb5Dj6quGmbuFoa9ixB3um0l/0I3gCu8YfCw1yrNcAAAAA"
567 + "SUVORK5CYII=")
568 public void drawImage5ArgumentsNegativeHeight() throws Exception {
569 drawImage("4x6.png",
570 "canvas.width = 10; canvas.height = 10;\n",
571 "context.drawImage(img, 4, 6, 4, -6);\n");
572 }
573
574
575
576
577 @Test
578 @Alerts(DEFAULT = "data:image/png;base64,"
579 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAZklEQVR4AaTO0QqAIAyF4X+9STfRY663jG56lNOUGcQIgoZ6UD6d"
580 + "Ex/rB1wkgRiZHcuLOgz2kJnpKNA0wwojySpQdrK50zJNjwKjsbm70X+qjtpSYDsc0yyu5eYVWlSYW77CQI9xAQAA///FOIgeAAAA"
581 + "BklEQVQDAGECGxXylwAXAAAAAElFTkSuQmCC",
582 FF = "data:image/png;base64,"
583 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAY0lEQVQYV6WQXQqAMAyDE2+yl+EtnbcUX7yJMf7BYJsMLJQ89KNJ"
584 + "S3QWOzmUYJS0EozCpbiZAhQgLJ6MbivHBkgF7dwwKODUz41zSpjcj2Xd+j3OSZ3C1q5qxhzMmR/vaTz2AM0wHwuiBt/PAAAAAElF"
585 + "TkSuQmCC",
586 FF_ESR = "data:image/png;base64,"
587 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAY0lEQVQYV6WQXQqAMAyDE2+yl+EtnbcUX7yJMf7BYJsMLJQ89KNJ"
588 + "S3QWOzmUYJS0EozCpbiZAhQgLJ6MbivHBkgF7dwwKODUz41zSpjcj2Xd+j3OSZ3C1q5qxhzMmR/vaTz2AM0wHwuiBt/PAAAAAElF"
589 + "TkSuQmCC")
590 public void drawImage9Arguments() throws Exception {
591 drawImage("4x6.png",
592 "canvas.width = 10; canvas.height = 10;\n",
593 "context.drawImage(img, 0, 0, img.width, img.height, 4, 2, img.width, img.height);\n");
594 }
595
596
597
598
599 @Test
600 @Alerts(DEFAULT = "data:image/png;base64,"
601 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAk0lEQVR4AayKIQ6DQBBFZ1cUgakhqWtS2bTpivqmDkdNU7tX"
602 + "6RE4Ag5ugEQSSHCgx3AABCAXBgWEcfzkJfPnP5l9LEPo0DEEMJE13IF4pBa84p7RAGRzvJXd6Ynf4tLq/MyLYMxPed7f8f0K"
603 + "oogXdRCUV9fFg1It2jYvzhdEnNfFLakJIZKR9xhBfYtJ3BrWv/3FAQAA//92obYoAAAABklEQVQDAK0fJxWpARh1AAAAAElF"
604 + "TkSuQmCC",
605 FF = "data:image/png;base64,"
606 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAgklEQVQYV2P8z8Dw/4A9B0NjgwDDQQdOhv+M9xkZsADG/Q4O"
607 + "/z/wf2F4oPCC4aPAF4aGxg/YFTY0NNxXevKEw+HiRQHZV684GB8+xK6wqalJ39/AwERNQiKDg5XVhNHQELtCkHP+//9vD6Qa"
608 + "gNiBEQiwupEkhdhMQBfDag1Oq6lqIgCfzScLcG6H/gAAAABJRU5ErkJggg==",
609 FF_ESR = "data:image/png;base64,"
610 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAgklEQVQYV2P8z8Dw/4A9B0NjgwDDQQdOhv+M9xkZsADG/Q4O"
611 + "/z/wf2F4oPCC4aPAF4aGxg/YFTY0NNxXevKEw+HiRQHZV684GB8+xK6wqalJ39/AwERNQiKDg5XVhNHQELtCkHP+//9vD6Qa"
612 + "gNiBEQiwupEkhdhMQBfDag1Oq6lqIgCfzScLcG6H/gAAAABJRU5ErkJggg==")
613 public void drawImage9ArgumentsCrop() throws Exception {
614 drawImage("4x6.png",
615 "canvas.width = 10; canvas.height = 10;\n",
616 "context.drawImage(img, 1, 2, 2, 4, 0, 0, img.width, img.height);\n");
617 }
618
619
620
621
622 @Test
623 @Alerts(DEFAULT = "data:image/png;base64,"
624 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAZElEQVR4AeTQIQqAMBjF8YdgUotBFk0Gm2EXEKtNzHarBxHB"
625 + "bBUP4VUEDzAGO8C3tKUx1vfyr7x/gsBFABuihV30pTWZKM7XqzzRsxfFqIyDE07tBs5vZIPww/mpcHQl/j23UAMAAP//0Pds"
626 + "sAAAAAZJREFUAwD2WBFROHUfbwAAAABJRU5ErkJggg==",
627 FF = "data:image/png;base64,"
628 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAWUlEQVQYV2NkIBIwEqmOYegqVPufFvdhgcnCV4kgT6SBPIzV"
629 + "M3Fi81bbih8NSVGZy8C4HqIGq8L99uyrJVT/hWjY/WZgjMOjkOG/4uqEBZ9D5ie+AakCGwYAh4cWC3rmpLIAAAAASUVORK5C"
630 + "YII=",
631 FF_ESR = "data:image/png;base64,"
632 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAWUlEQVQYV2NkIBIwEqmOYegqVPufFvdhgcnCV4kgT6SBPIzV"
633 + "M3Fi81bbih8NSVGZy8C4HqIGq8L99uyrJVT/hWjY/WZgjMOjkOG/4uqEBZ9D5ie+AakCGwYAh4cWC3rmpLIAAAAASUVORK5C"
634 + "YII=")
635 public void drawImage9ArgumentsCropNegativStart() throws Exception {
636 drawImage("4x6.png",
637 "canvas.width = 10; canvas.height = 10;\n",
638 "context.drawImage(img, -1, -2, 3, 5, 4, 4, img.width, img.height);\n");
639 }
640
641
642
643
644 @Test
645 @Alerts(DEFAULT = "data:image/png;base64,"
646 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAIElEQVR4AezQoQ0AAADCMML/R/MBQSA3PVVrjLFC/XkCAAD/"
647 + "/3Nn3qIAAAAGSURBVAMAEzgAFbNrw9wAAAAASUVORK5CYII=",
648 FF = "data:image/png;base64,"
649 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAF0lEQVQYV2NkIBIwEqmOYVQh3pAiOngACmkAC8i6MuwAAAAA"
650 + "SUVORK5CYII=",
651 FF_ESR = "data:image/png;base64,"
652 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAF0lEQVQYV2NkIBIwEqmOYVQh3pAiOngACmkAC8i6MuwAAAAA"
653 + "SUVORK5CYII=")
654 public void drawImage9ArgumentsCropNegativWidth() throws Exception {
655 drawImage("4x6.png",
656 "canvas.width = 10; canvas.height = 10;\n",
657 "context.drawImage(img, 0, 0, -3, 5, 4, 4, img.width, img.height);\n");
658 }
659
660
661
662
663 @Test
664 @Alerts(DEFAULT = "data:image/png;base64,"
665 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAATElEQVR4AdTKMREAIQxE0b04uZIeAWABAxBlIAARadAFEyoq"
666 + "UpOZPyn2UXVlajCOkDp2FvyHlzK8wQAKIrHlbEMVzPzpv0W38dxegAsAAP//XAhpcAAAAAZJREFUAwCP3w4VdtN2awAAAABJ"
667 + "RU5ErkJggg==",
668 FF = "data:image/png;base64,"
669 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAR0lEQVQYV2Ocrxn/nwEIEq8vZATRuADj/CoeiMK2L/gV7ndw"
670 + "2O/w/78D48GD+BWCTJs/f/7/xMREwgrxuQ0mh9cUZAOGgkIA7moSC5sf8xAAAAAASUVORK5CYII=",
671 FF_ESR = "data:image/png;base64,"
672 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAR0lEQVQYV2Ocrxn/nwEIEq8vZATRuADj/CoeiMK2L/gV7ndw"
673 + "2O/w/78D48GD+BWCTJs/f/7/xMREwgrxuQ0mh9cUZAOGgkIA7moSC5sf8xAAAAAASUVORK5CYII=")
674 public void drawImage9ArgumentsStretch() throws Exception {
675 drawImage("4x6.png",
676 "canvas.width = 10; canvas.height = 10;\n",
677 "context.drawImage(img, 0, 0, img.width, img.height, 0, 0, 2, 4);\n");
678 }
679
680
681
682
683 @Test
684 @Alerts(DEFAULT = "data:image/png;base64,"
685 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAfUlEQVR4AZyNwQ1AQBBFhxL0IHESBThwFQ246kUFEg240Ica"
686 + "lOHshLdiJ/Yg2dj8l83+eZkNxfP8F0+R+CF9f+ZsRKgY9jBBCRpHpB2hgAQa0KjItpx2B9sddBHvO7aUQGShGWCFGWq6jfuO"
687 + "iubFoIMMWlDJzBzRFF94ixcAAAD///gP/JcAAAAGSURBVAMAeyASFSc4nisAAAAASUVORK5CYII=",
688 FF = "data:image/png;base64,"
689 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAaklEQVQYV2NkIBIwEqmOAUPhfwYGVahmTqDkJZhBKAqBiryA"
690 + "EnlALArEi4CSE3EpfAuU4Abiv0B8GajQAkMh0DQboOBKqGm/gfRFIPYBKn4HUoxudTVQLBSIzwFxCUwRhkJ8IUB+8OAyFQDU"
691 + "0xILsSkm0QAAAABJRU5ErkJggg==",
692 FF_ESR = "data:image/png;base64,"
693 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAaklEQVQYV2NkIBIwEqmOAUPhfwYGVahmTqDkJZhBKAqBiryA"
694 + "EnlALArEi4CSE3EpfAuU4Abiv0B8GajQAkMh0DQboOBKqGm/gfRFIPYBKn4HUoxudTVQLBSIzwFxCUwRhkJ8IUB+8OAyFQDU"
695 + "0xILsSkm0QAAAABJRU5ErkJggg==")
696 public void drawImageDataUrlPng() throws Exception {
697 final String html = DOCTYPE_HTML
698 + "<html><head>\n"
699 + "<script>\n"
700 + LOG_TEXTAREA_FUNCTION
701 + " function test() {\n"
702 + " var img = document.getElementById('myImage');\n"
703 + " var canvas = document.createElement('canvas');\n"
704 + " canvas.width = img.width;\n"
705 + " canvas.height = img.height;\n"
706 + " if (canvas.getContext) {\n"
707 + " var context = canvas.getContext('2d');\n"
708 + " context.drawImage(img, 0, 0, canvas.width, canvas.height);\n"
709 + " log(canvas.toDataURL());\n"
710 + " }\n"
711 + " }\n"
712 + "</script>\n"
713 + "</head><body onload='test()'>\n"
714 + " <img id='myImage' src='data:image/png;base64,"
715 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGP"
716 + "C/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IA"
717 + "AAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1J"
718 + "REFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jq"
719 + "ch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0"
720 + "vr4MkhoXe0rZigAAAABJRU5ErkJggg==' alt='red dot' />\n"
721 + LOG_TEXTAREA
722 + "</body></html>";
723
724 loadPageVerifyTextArea2(html);
725 }
726
727
728
729
730 @Test
731 @Alerts(DEFAULT = "data:image/png;base64,"
732 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA8ElEQVR4AeyQMYoCQRREH7LZIrvBHmE33lDYZJncQG/gIRRM"
733 + "jEwEPYQ30MBcTARDYz2CgSJmBlbJTGAzA92YOvyC6qrfD6ZrPH6Zjv1c9rJpUwDrX7D6hlkXhpa9M+HqUvTcgbq46MDfDj7G"
734 + "8GbZO3MXTdNiTco+4dcQ+Ydx5k5hJkWNgY0WvFdt512jqg9zA8PsqbOBmzlcqih5t6nqw9zA5RG2PbiGpTN3ypdS1BjIAZpT"
735 + "WP/AyRDL3pm7KFK+dAfKn3Xxfw/tCQwse2fupOgpgMUF/9pIB8teNm1CYNrtku0XsORREqPXGyY+WMn6DQAA//9HegNzAAAA"
736 + "BklEQVQDALe2MilY1lPyAAAAAElFTkSuQmCC",
737 FF = "data:image/png;base64,"
738 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABF0lEQVQ4T+2SvUoDQRSFv5SC5UIUK30ACUFIbyws4wMsBkO6"
739 + "RJ9AiBhUsEqvstoKVgELwdRa5cc6pTbGLqTUM+saNsvGHUljkYFlmDn3fnvPvZNicmV13AiunrW3I3riMfUTkYYT0dwlcMzd"
740 + "G7x3wNN+mEgJBfjAZTjdhsoVLIaTd2HYhPMPOLKFGmB2C24fYC0uKQ/9R9iR1rWBGmB5DxqXsBCXUIKRKq9KU0jy8oGy1vCm"
741 + "AKWNbmBfcRfJODDAjCzfyfJqXMKmLLegIK1nC2QF6urVwXVkKK6Gcg9nA+k2MBMzfjaa9PE6FLU7n9/PZvAim69Qs4VNAIMk"
742 + "McnpM8wnW5vhH44r/EsVv8XOgbN3ct7Df9jDL+YBMhUCa42EAAAAAElFTkSuQmCC",
743 FF_ESR = "data:image/png;base64,"
744 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABF0lEQVQ4T+2SvUoDQRSFv5SC5UIUK30ACUFIbyws4wMsBkO6"
745 + "RJ9AiBhUsEqvstoKVgELwdRa5cc6pTbGLqTUM+saNsvGHUljkYFlmDn3fnvPvZNicmV13AiunrW3I3riMfUTkYYT0dwlcMzd"
746 + "G7x3wNN+mEgJBfjAZTjdhsoVLIaTd2HYhPMPOLKFGmB2C24fYC0uKQ/9R9iR1rWBGmB5DxqXsBCXUIKRKq9KU0jy8oGy1vCm"
747 + "AKWNbmBfcRfJODDAjCzfyfJqXMKmLLegIK1nC2QF6urVwXVkKK6Gcg9nA+k2MBMzfjaa9PE6FLU7n9/PZvAim69Qs4VNAIMk"
748 + "McnpM8wnW5vhH44r/EsVv8XOgbN3ct7Df9jDL+YBMhUCa42EAAAAAElFTkSuQmCC")
749 public void drawImageDataUrlSvg() throws Exception {
750 final String html = DOCTYPE_HTML
751 + "<html><head>\n"
752 + "<script>\n"
753 + LOG_TEXTAREA_FUNCTION
754 + " function test() {\n"
755 + " var img = document.getElementById('myImage');\n"
756 + " var canvas = document.createElement('canvas');\n"
757 + " canvas.width = 20;\n"
758 + " canvas.height = 20;\n"
759 + " if (canvas.getContext) {\n"
760 + " var context = canvas.getContext('2d');\n"
761 + " context.drawImage(img, 0, 0, img.width, img.height);\n"
762 + " log(canvas.toDataURL());\n"
763 + " }\n"
764 + " }\n"
765 + "</script>\n"
766 + "</head><body onload='test()'>\n"
767 + " <img id='myImage' src='data:image/svg+xml,"
768 + "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" "
769 + "overflow=\"hidden\" width=\"10\" height=\"10\">"
770 + " <circle cx=\"5\" cy=\"5\" r=\"4\" stroke=\"black\" stroke-width=\"1\" fill=\"red\" />"
771 + "</svg>' />\n"
772 + LOG_TEXTAREA
773 + "</body></html>";
774
775 loadPageVerifyTextArea2(html);
776 }
777
778
779
780
781 @Test
782 @Alerts({"TypeError", "0", "true", "true"})
783 public void measureText() throws Exception {
784 final String html = DOCTYPE_HTML
785 + "<html>\n"
786 + " <head>\n"
787 + " <script>\n"
788 + LOG_TEXTAREA_FUNCTION
789 + " function test() {\n"
790 + " var canvas = document.getElementById('myCanvas');\n"
791 + " if (canvas.getContext){\n"
792 + " ctx = canvas.getContext('2d');\n"
793 + " try {\n"
794 + " log(ctx.measureText());\n"
795 + " } catch(e) { logEx(e); }\n"
796
797 + " var metrics = ctx.measureText('');\n"
798 + " log(metrics.width);\n"
799
800 + " metrics = ctx.measureText('a');\n"
801 + " log(metrics.width > 5);\n"
802
803 + " metrics = ctx.measureText('abc');\n"
804 + " log(metrics.width > 10);\n"
805 + " }\n"
806 + " }\n"
807 + " </script>\n"
808 + " </head>\n"
809 + " <body onload='test()'>\n"
810 + " <canvas id='myCanvas'></canvas>\n"
811 + LOG_TEXTAREA
812 + " </body>\n"
813 + "</html>";
814
815 loadPageVerifyTextArea2(html);
816 }
817
818 private void draw(final String canvasSetup, final String drawJS) throws Exception {
819 final String html = DOCTYPE_HTML
820 + "<html><head>\n"
821 + "<script>\n"
822 + LOG_TEXTAREA_FUNCTION
823 + " function test() {\n"
824 + " var canvas = document.getElementById('myCanvas');\n"
825 + " if (canvas.getContext) {\n"
826 + " var context = canvas.getContext('2d');\n"
827 + drawJS
828 + " log(canvas.toDataURL());\n"
829 + " }\n"
830 + " }\n"
831 + "</script>\n"
832 + "</head><body onload='test()'>\n"
833 + canvasSetup
834 + LOG_TEXTAREA
835 + "</body></html>";
836
837 loadPageVerifyTextArea2(html);
838 }
839
840
841
842
843 @Test
844 @Alerts(DEFAULT = "data:image/png;base64,"
845 + "iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAABtElEQVR4AeyUPS8EURSGh5YIlWzlR6xCqVNR+EhQkGh9tPwE"
846 + "arQSGo2IRKEVlWYTfoJEbC8kOp53MjdZY8adk9yCzdmcZ+7Hue+Zu++9u4PZ90+b4SH0xi4DQZOt8mhBLLTmlEXDoHqqSzcP"
847 + "5W7pqaX5EZoP2mmyuba8UeZrQy+dqc2mS3QptQ5vsAB5WDa6iWINzmEJruC9YJb2CT5BfZpGoZN6ZKV0QtrgqN6xRe4SWlUb"
848 + "3SAhUWCfseKYxxmswAeMwjgswxFMwRwsgiUeWDwAZe0Nc6o7T9ut2ugJCQkDe4yrQoV0PMrpzunIXhi8giUuisW/aqs2WuiS"
849 + "Nc9U2oEQk3R0TfTF6DYL60YnKHsPY9A0dGWkC1dJx1l3SuWaI0zcQbu80Q6T29AbBwyEjll/F3qp7qrmSGXXPPQrpcmCXm5p"
850 + "ThohXbhK0iuv9aohvfpVWtUYItkpb5S5vxm+0dTn4o66o6kdSF3P76g7mtqB1PX8jrqjqR1IXa/v7mhqg8z13FGzZRGBOxox"
851 + "yJx2R82WRQTuaMQgc9odNVsWEbijEYPMaXfUbFlE4I5GDDKn/42jXwAAAP//4JrchgAAAAZJREFUAwDXF0VVgodBgAAAAABJ"
852 + "RU5ErkJggg==",
853 FF = "data:image/png;base64,"
854 + "iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAABUklEQVRYR+2UPw4BQRTG7TU0Cu5Aq+EGFBqJhgsoFAolB6Bx"
855 + "AEdAodC4BImGY/B9yRt51vqz8YTE2+RlZ2Znvvnm995slLl+KugOECU1PJR2F+8Zoh5bk9TNY3CNyCI2iD5ioSae0I7u6Oi1"
856 + "bczZcW188jOjjzbQ+75jVOtcDpnGaA4KNcRRqJelT+EqYi47dPBevkiUGaJuUdZSZytrmdmxjBeSjIYN9clG6DD1gShTwnQy"
857 + "tbrNjLQQvRRG96JNHR4+cW0aonGjFGW9BnOhTRINZZTUpghdowc5JL+tEBOl8zWjvIxMb7iEJNdE8MJ+zChJ8CG1V4lyPi9F"
858 + "qEP2QyafGeV33oubGhUfv/e69y/7Oadu1DolTtSJWhOw1vMadaLWBKz1vEadqDUBaz2vUSdqTcBaz2vUiVoTsNbzGnWi1gSs"
859 + "9bxGnag1AWs9r9G/JXoGyiFdcUG+TPcAAAAASUVORK5CYII=",
860 FF_ESR = "data:image/png;base64,"
861 + "iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAABUklEQVRYR+2UPw4BQRTG7TU0Cu5Aq+EGFBqJhgsoFAolB6Bx"
862 + "AEdAodC4BImGY/B9yRt51vqz8YTE2+RlZ2Znvvnm995slLl+KugOECU1PJR2F+8Zoh5bk9TNY3CNyCI2iD5ioSae0I7u6Oi1"
863 + "bczZcW188jOjjzbQ+75jVOtcDpnGaA4KNcRRqJelT+EqYi47dPBevkiUGaJuUdZSZytrmdmxjBeSjIYN9clG6DD1gShTwnQy"
864 + "tbrNjLQQvRRG96JNHR4+cW0aonGjFGW9BnOhTRINZZTUpghdowc5JL+tEBOl8zWjvIxMb7iEJNdE8MJ+zChJ8CG1V4lyPi9F"
865 + "qEP2QyafGeV33oubGhUfv/e69y/7Oadu1DolTtSJWhOw1vMadaLWBKz1vEadqDUBaz2vUSdqTcBaz2vUiVoTsNbzGnWi1gSs"
866 + "9bxGnag1AWs9r9G/JXoGyiFdcUG+TPcAAAAASUVORK5CYII=")
867 public void fillText() throws Exception {
868 draw("<canvas id='myCanvas' width='42' height='42'>\n",
869 "context.fillText('HtmlUnit', 3, 7);\n");
870 }
871
872
873
874
875 @Test
876 @Alerts("[object CanvasGradient]")
877 public void createLinearGradient() throws Exception {
878 final String html = DOCTYPE_HTML
879 + "<html><head><script>\n"
880 + LOG_TEXTAREA_FUNCTION
881 + "function test() {\n"
882 + " var canvas = document.getElementById('myCanvas');\n"
883 + " var ctx = canvas.getContext('2d');\n"
884 + " var gradient = ctx.createLinearGradient(0, 0, 200, 0);\n"
885 + " log(gradient);\n"
886 + "}\n"
887 + "</script>\n"
888 + "</head>\n"
889 + "<body onload='test()'>\n"
890 + " <canvas id='myCanvas'></canvas>\n"
891 + LOG_TEXTAREA
892 + "</body>\n"
893 + "</html>";
894
895 loadPageVerifyTextArea2(html);
896 }
897
898
899
900
901 @Test
902 @Alerts("[object CanvasGradient]")
903 public void createRadialGradient() throws Exception {
904 final String html = DOCTYPE_HTML
905 + "<html><head><script>\n"
906 + LOG_TEXTAREA_FUNCTION
907 + "function test() {\n"
908 + " var canvas = document.getElementById('myCanvas');\n"
909 + " var ctx = canvas.getContext('2d');\n"
910 + " var gradient = ctx.createRadialGradient(100, 100, 100, 100, 100, 0);\n"
911 + " log(gradient);\n"
912 + "}\n"
913 + "</script>\n"
914 + "</head>\n"
915 + "<body onload='test()'>\n"
916 + " <canvas id='myCanvas'></canvas>\n"
917 + LOG_TEXTAREA
918 + "</body>\n"
919 + "</html>";
920
921 loadPageVerifyTextArea2(html);
922 }
923
924
925
926
927 @Test
928 @Alerts(DEFAULT = {"1", "0.5", "0", "0.699999988079071", "0"},
929 CHROME = {"1", "0.5", "0", "0.7", "0"},
930 EDGE = {"1", "0.5", "0", "0.7", "0"})
931 @HtmlUnitNYI(CHROME = {"1", "0.5", "0", "0.699999988079071", "0"},
932 EDGE = {"1", "0.5", "0", "0.699999988079071", "0"})
933 public void globalAlpha() throws Exception {
934 final String html = DOCTYPE_HTML
935 + "<html><head><script>\n"
936 + LOG_TEXTAREA_FUNCTION
937 + "function test() {\n"
938 + " var canvas = document.getElementById('myCanvas');\n"
939 + " try {\n"
940 + " var ctx = canvas.getContext('2d');\n"
941 + " log(ctx.globalAlpha);\n"
942 + " ctx.globalAlpha = 0.5;\n"
943 + " log(ctx.globalAlpha);\n"
944 + " ctx.globalAlpha = 0;\n"
945 + " log(ctx.globalAlpha);\n"
946 + " ctx.globalAlpha = 0.7;\n"
947 + " log(ctx.globalAlpha);\n"
948 + " ctx.globalAlpha = null;\n"
949 + " log(ctx.globalAlpha);\n"
950 + " } catch(e) { logEx(e); }\n"
951 + "}\n"
952 + "</script>\n"
953 + "</head>\n"
954 + "<body onload='test()'>\n"
955 + " <canvas id='myCanvas'></canvas>\n"
956 + LOG_TEXTAREA
957 + "</body>\n"
958 + "</html>";
959
960 loadPageVerifyTextArea2(html);
961 }
962
963
964
965
966 @Test
967 @Alerts({"0.5", "0.5", "0.5", "0.5"})
968 public void globalAlphaInvalid() throws Exception {
969 final String html = DOCTYPE_HTML
970 + "<html><head><script>\n"
971 + LOG_TEXTAREA_FUNCTION
972 + "function test() {\n"
973 + " var canvas = document.getElementById('myCanvas');\n"
974 + " try {\n"
975 + " var ctx = canvas.getContext('2d');\n"
976 + " ctx.globalAlpha = 0.5;\n"
977 + " log(ctx.globalAlpha);\n"
978 + " ctx.globalAlpha = -1;\n"
979 + " log(ctx.globalAlpha);\n"
980 + " ctx.globalAlpha = 'test';\n"
981 + " log(ctx.globalAlpha);\n"
982 + " ctx.globalAlpha = undefined;\n"
983 + " log(ctx.globalAlpha);\n"
984 + " } catch(e) { logEx(e); }\n"
985 + "}\n"
986 + "</script>\n"
987 + "</head>\n"
988 + "<body onload='test()'>\n"
989 + " <canvas id='myCanvas'></canvas>\n"
990 + LOG_TEXTAREA
991 + "</body>\n"
992 + "</html>";
993
994 loadPageVerifyTextArea2(html);
995 }
996
997
998
999
1000 @Test
1001 @Alerts(DEFAULT = "data:image/png;base64,"
1002 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAATklEQVR4AcSRQQ4AEAwEl5fzcnroqkgcaIWQ9GDHaDOCF4FF"
1003 + "uBEHBAovZhPYFHdrqXG8M0zjCWfBLzsxFl+BX3rIAZrWVNHwxKxKfncfHQAA//82wWCHAAAABklEQVQDACTVIhXYHwYXAAAA"
1004 + "AElFTkSuQmCC",
1005 FF = "data:image/png;base64,"
1006 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAS0lEQVQoU2NkoDJghJrnAKRBmBJwAKj5AMzABqiBIEFygD1Q"
1007 + "00EgbkA2EGQQyGByQD1QE8iskW4gKGDJjRRQCkGJFKonG3JiFqseAAjhEgvKgKaUAAAAAElFTkSuQmCC",
1008 FF_ESR = "data:image/png;base64,"
1009 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAS0lEQVQoU2NkoDJghJrnAKRBmBJwAKj5AMzABqiBIEFygD1Q"
1010 + "00EgbkA2EGQQyGByQD1QE8iskW4gKGDJjRRQCkGJFKonG3JiFqseAAjhEgvKgKaUAAAAAElFTkSuQmCC")
1011 public void strokeRect() throws Exception {
1012 draw("<canvas id='myCanvas' width='20', height='10' style='border: 1px solid red;'></canvas>\n",
1013 "context.strokeRect(2, 2, 16, 6);\n");
1014 }
1015
1016
1017
1018
1019 @Test
1020 @Alerts(DEFAULT = "data:image/png;base64,"
1021 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAMklEQVR4AeSRwQkAAAgCrf13LmkF9VVgP+vQhnmiB4ewimgH"
1022 + "ooT3QV3PCYv5KaId/pYXAAD//7KhJgoAAAAGSURBVAMA6cMQFanju38AAAAASUVORK5CYII=",
1023 FF = "data:image/png;base64,"
1024 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAKElEQVQoU2NkoDJgpLJ5DMgG/qfQcLBZowZSFIq0D0OKnAfT"
1025 + "TPV0CAA8pwYL+jNAvAAAAABJRU5ErkJggg==",
1026 FF_ESR = "data:image/png;base64,"
1027 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAKElEQVQoU2NkoDJgpLJ5DMgG/qfQcLBZowZSFIq0D0OKnAfT"
1028 + "TPV0CAA8pwYL+jNAvAAAAABJRU5ErkJggg==")
1029 public void fillRect() throws Exception {
1030 draw("<canvas id='myCanvas' width='20', height='10' style='border: 1px solid red;'></canvas>\n",
1031 "context.fillRect(2, 2, 16, 6);\n");
1032 }
1033
1034
1035
1036
1037 @Test
1038 @Alerts(DEFAULT = "data:image/png;base64,"
1039 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAANklEQVR4AezSMQ4AAAQDQPH/PyMRi7G6qRCTDhduXVGLMTaB"
1040 + "lcdpBd4dZShDQEBvA6Ctk4eGCQAA//89UfTWAAAABklEQVQDABbFEhevU8KSAAAAAElFTkSuQmCC",
1041 FF = "data:image/png;base64,"
1042 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAALElEQVQ4T2NkgID/UJpSipFx1MDRMCQ5BEaTDclBhqFhNAxH"
1043 + "w5CMEKB+sgEAGQQUFQfPo6sAAAAASUVORK5CYII=",
1044 FF_ESR = "data:image/png;base64,"
1045 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAALElEQVQ4T2NkgID/UJpSipFx1MDRMCQ5BEaTDclBhqFhNAxH"
1046 + "w5CMEKB+sgEAGQQUFQfPo6sAAAAASUVORK5CYII=")
1047 public void fillRectWidthHeight() throws Exception {
1048 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1049 "context.fillRect(1, 0, 18, 20);\n");
1050 }
1051
1052
1053
1054
1055 @Test
1056 @Alerts(DEFAULT = "data:image/png;base64,"
1057 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAQElEQVR4AeySwQ0AIAgDq/vvrA1xg5NXIaG/QnOw9blaBx6H"
1058 + "JW271JqwNlAJT7jMj7TtmisXBSbhf8jgPXcgwwsAAP//gPpVDQAAAAZJREFUAwDyABApkn0/fwAAAABJRU5ErkJggg==",
1059 FF = "data:image/png;base64,"
1060 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAN0lEQVQ4T2NkoDJgpLJ5DMgG/qfQcLBZowZSFIq0D0OKnAfT"
1061 + "TNN0OOpC8kJgNFLICzdkXYM/DAFt+QYVhcRJbAAAAABJRU5ErkJggg==",
1062 FF_ESR = "data:image/png;base64,"
1063 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAN0lEQVQ4T2NkoDJgpLJ5DMgG/qfQcLBZowZSFIq0D0OKnAfT"
1064 + "TNN0OOpC8kJgNFLICzdkXYM/DAFt+QYVhcRJbAAAAABJRU5ErkJggg==")
1065 public void fillRectRotate() throws Exception {
1066 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1067 "context.fillRect(2, 2, 16, 6); context.rotate(.5);\n");
1068 }
1069
1070
1071
1072
1073 @Test
1074 @Alerts(DEFAULT = "data:image/png;base64,"
1075 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA+UlEQVR4AezQrw8BYRzHcZM1/wBJUQSKpAgEimSmSJJpbBqa"
1076 + "IJigsdlsgqCZTdXMZpNMs/kHNPM+893O3T33wwSBfV7n7r7Pffbs8fu+/PsXPg80+7x+eDGeYZyeJRZIwHOMhc1XQ47/LUYI"
1077 + "w3X0hRm+ykOfCg8ndBGAY/SFsjurjxq8PKMO20hhmVVJ2CXIsIcjSrCMFE6YtnCDUyIsGGMNU6TwzqSNEPpwE+1cTeukUAZX"
1078 + "bmqIYgpVZgxsd8j8LQeeikhhBWMsd6ctMu5Qe6e34SGNAnbQMuCyh2WcCuWjOTcxVNGBMm4LpWDIzQXKeC1UFsng9wsfAAAA"
1079 + "//9zeQ59AAAABklEQVQDAGucHykhpMwKAAAAAElFTkSuQmCC",
1080 FF = "data:image/png;base64,"
1081 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA60lEQVQ4T2NkoDJgpLJ5DEPTQCFgMLwjNyjQvawANOgyEC8B"
1082 + "4mYgfkaqwegGrgAaEA415DuQ7gfiDiD+TKzByAZaATUdxaLxFVCsCYhnAvEfQgYjGwgyDGQoLnATKFEJxOvxGQozMICQQiRD"
1083 + "QBaX4/ANPB2KAhXUAHE2EDMT8hZUvhWqB0U5eqSoAWW7gdiPCEM9gWp2oKvDlVOsgQo7gRhEYwM7gYIe2CQIZb1AoKZ2IFZH"
1084 + "06wL5F8hx0CQHhYgTgfiOiAWA+KVQByBK0gIuRBZHy+QA4rdOUD8gBoGEhFPDEO0+CLKa7gUAQCpFx4VDtwfyAAAAABJRU5E"
1085 + "rkJggg==",
1086 FF_ESR = "data:image/png;base64,"
1087 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA60lEQVQ4T2NkoDJgpLJ5DEPTQCFgMLwjNyjQvawANOgyEC8B"
1088 + "4mYgfkaqwegGrgAaEA415DuQ7gfiDiD+TKzByAZaATUdxaLxFVCsCYhnAvEfQgYjGwgyDGQoLnATKFEJxOvxGQozMICQQiRD"
1089 + "QBaX4/ANPB2KAhXUAHE2EDMT8hZUvhWqB0U5eqSoAWW7gdiPCEM9gWp2oKvDlVOsgQo7gRhEYwM7gYIe2CQIZb1AoKZ2IFZH"
1090 + "06wL5F8hx0CQHhYgTgfiOiAWA+KVQByBK0gIuRBZHy+QA4rdOUD8gBoGEhFPDEO0+CLKa7gUAQCpFx4VDtwfyAAAAABJRU5E"
1091 + "rkJggg==")
1092 public void rotateFillRect() throws Exception {
1093 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1094 "context.rotate(.5); context.fillRect(6, 2, 12, 6);\n");
1095 }
1096
1097
1098
1099
1100 @Test
1101 @Alerts(DEFAULT = "data:image/png;base64,"
1102 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAQElEQVR4AeySwQ0AIAgDq/vvrA1xg5NXIaG/QnOw9blaBx6H"
1103 + "JW271JqwNlAJT7jMj7TtmisXBSbhf8jgPXcgwwsAAP//gPpVDQAAAAZJREFUAwDyABApkn0/fwAAAABJRU5ErkJggg==",
1104 FF = "data:image/png;base64,"
1105 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAN0lEQVQ4T2NkoDJgpLJ5DMgG/qfQcLBZowZSFIq0D0OKnAfT"
1106 + "TNN0OOpC8kJgNFLICzdkXYM/DAFt+QYVhcRJbAAAAABJRU5ErkJggg==",
1107 FF_ESR = "data:image/png;base64,"
1108 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAN0lEQVQ4T2NkoDJgpLJ5DMgG/qfQcLBZowZSFIq0D0OKnAfT"
1109 + "TNN0OOpC8kJgNFLICzdkXYM/DAFt+QYVhcRJbAAAAABJRU5ErkJggg==")
1110 public void fillRectTranslate() throws Exception {
1111 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1112 "context.fillRect(2, 2, 16, 6); context.translate(3, 4);\n");
1113 }
1114
1115
1116
1117
1118 @Test
1119 @Alerts(DEFAULT = "data:image/png;base64,"
1120 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAOUlEQVR4AeyQwQkAAAgCq/13Ll8NYNEnQ6GXHBe2fBqcCz1z"
1121 + "mGClekYIQC4ibG+Oj6ocwtwwDx0WAAAA//9NhoXGAAAABklEQVQDANhvDynTI/KmAAAAAElFTkSuQmCC",
1122 FF = "data:image/png;base64,"
1123 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAMUlEQVQ4T2NkoDJgpLJ5DKMGUh6iuMLwP7lGjxoID7nBH4bk"
1124 + "RvJo1iM75BAaR2DxBQB5vAYPhQt4egAAAABJRU5ErkJggg==",
1125 FF_ESR = "data:image/png;base64,"
1126 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAMUlEQVQ4T2NkoDJgpLJ5DKMGUh6iuMLwP7lGjxoID7nBH4bk"
1127 + "RvJo1iM75BAaR2DxBQB5vAYPhQt4egAAAABJRU5ErkJggg==")
1128 public void translateFillRect() throws Exception {
1129 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1130 "context.translate(3, 4); context.fillRect(2, 2, 16, 6);\n");
1131 }
1132
1133
1134
1135
1136 @Test
1137 @Alerts(DEFAULT = "data:image/png;base64,"
1138 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABC0lEQVR4AezQz+pBQRTAcf0Wv/ptfjtloZSlnX9l4QGUopS9"
1139 + "slCUB7AQCw8gZWGhPICilCewUMgLKGWhKFkqiu+RGbqkm2vH7XzuPTN35sxpfmxvfr4FrV/oh99hkht0w1Lc3mGJSjOs0EcF"
1140 + "CbhgOlTBf3Z4IGHnFUEBbcyxRA9lxOHEw1AF/Q//XicdpFEU0cHiostX5uSfNGIzW5B9dyFdxpiVrqt819AFfTKwYKL2qg63"
1141 + "TAxxwCsxVptUwSwTIfwiiAwa0AvJn8Vdh2rxkWQEKSZFA+RyiByWI29iCmPog1WHxgW34z0DuY463zS8+EMYebSwwTnMFDwv"
1142 + "NLx2jAeoIQUdrxbUBYzJCQAA//8yJyR8AAAABklEQVQDAF8lJymD/dqYAAAAAElFTkSuQmCC",
1143 FF = "data:image/png;base64,"
1144 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAyUlEQVQ4T2NkoDJgpLJ5DKMGUh6iQysMlYEefgbE3ynxOLKX"
1145 + "bwANUgHim0B8HglfALLfEWsJzEBOoIYvQMyEQ+MjNEtAFj7GphZmoD1Q8gCxroCqe41kyTkgexVIHGZgBZDdTqKByMpBwaSB"
1146 + "bOAKICecAgNXAvVGIBtYBeT4AbEBELOTYXApUE8PsoEwM1iADD0gNkXC2kA2MwFLPIHyO7AZiE0fKAUYo1kCSl4w8A/IkATi"
1147 + "V8QaiM0SfqCgGdQSWSCdCVM0+PMyAOlZHxXNWGcZAAAAAElFTkSuQmCC",
1148 FF_ESR = "data:image/png;base64,"
1149 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAyUlEQVQ4T2NkoDJgpLJ5DKMGUh6iQysMlYEefgbE3ynxOLKX"
1150 + "bwANUgHim0B8HglfALLfEWsJzEBOoIYvQMyEQ+MjNEtAFj7GphZmoD1Q8gCxroCqe41kyTkgexVIHGZgBZDdTqKByMpBwaSB"
1151 + "bOAKICecAgNXAvVGIBtYBeT4AbEBELOTYXApUE8PsoEwM1iADD0gNkXC2kA2MwFLPIHyO7AZiE0fKAUYo1kCSl4w8A/IkATi"
1152 + "V8QaiM0SfqCgGdQSWSCdCVM0+PMyAOlZHxXNWGcZAAAAAElFTkSuQmCC")
1153 public void rotateTranslateFillRect() throws Exception {
1154 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1155 "context.rotate(0.2); context.translate(0, 4); context.fillRect(4, 4, 16, 6);\n");
1156 }
1157
1158
1159
1160
1161 @Test
1162 @Alerts(DEFAULT = "data:image/png;base64,"
1163 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA4ElEQVR4AeyQsQ4BQRCGNxq9B6Aj0aipKbwBpZqad0BHreYF"
1164 + "qJSoJGpqLa3SNyeTbNaKc3uN5C7z7d3M7fz/zuZMyk8mGH6h/3OHpfBhXwo6cov0ATuYQQ9q8HOo4IbOPDRgAAs4gZjsecc2"
1165 + "UcErTQdwQ0zqFH0mc+pvk6gg/4ycUt7fUJM+G3WSKd9R2ILrqJJsaWubLXikeIYkUaVJMLYgNVNhKUAThrCEuCbRKV1B+s2d"
1166 + "ZQsT6IJtMiJfwQXc+CjobpRcTcYkHSiDTqImRan5Tkg9VvhMbiGCXtfUBZ8AAAD//zEggMEAAAAGSURBVAMA7bomKdvSkgUA"
1167 + "AAAASUVORK5CYII=",
1168 FF = "data:image/png;base64,"
1169 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAxUlEQVQ4T2NkoDJgpLJ5DKMGUh6iNAtDaaDb3gHxd0rdCHNh"
1170 + "AtCgOUB8DYjPIOGLQPZPUiyBGSgF1PQEiNGD4A9Q7AqaJZeB/F+4LEE24ARQkTkRrgEZdgnNEpClf0F6kQ2sAPLbiTAQm5JO"
1171 + "oCBIP4qBGkD+dTINvAnUB9KPEWZ7gGL2QMxChsFaIAdhS4fsQAl9IDZBwiDFzAQsqQTKdxCbsDmBio3RLFFD8+FBIN+BWAOx"
1172 + "OY4XzRI9IN+CEgOxhsDgNxAAub8hIw8WPeEAAAAASUVORK5CYII=",
1173 FF_ESR = "data:image/png;base64,"
1174 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAxUlEQVQ4T2NkoDJgpLJ5DKMGUh6iNAtDaaDb3gHxd0rdCHNh"
1175 + "AtCgOUB8DYjPIOGLQPZPUiyBGSgF1PQEiNGD4A9Q7AqaJZeB/F+4LEE24ARQkTkRrgEZdgnNEpClf0F6kQ2sAPLbiTAQm5JO"
1176 + "oCBIP4qBGkD+dTINvAnUB9KPEWZ7gGL2QMxChsFaIAdhS4fsQAl9IDZBwiDFzAQsqQTKdxCbsDmBio3RLFFD8+FBIN+BWAOx"
1177 + "OY4XzRI9IN+CEgOxhsDgNxAAub8hIw8WPeEAAAAASUVORK5CYII=")
1178 public void transformTranslateFillRect() throws Exception {
1179 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1180 "context.setTransform(1, .2, .3, 1, 0, 0); context.translate(-5, 4); context.fillRect(4, 4, 16, 6);\n");
1181 }
1182
1183
1184
1185
1186 @Test
1187 @Alerts(DEFAULT = "data:image/png;base64,"
1188 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAANUlEQVR4AeSQOw0AQAhD350m/CvAEyygoDDRpOnW32cYe4YO"
1189 + "obCH7jXsBFUvNzR4CimMf5gAAAD//8jOg4wAAAAGSURBVAMA0CMgFVJk6gcAAAAASUVORK5CYII=",
1190 FF = "data:image/png;base64,"
1191 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAALUlEQVQoU2NkoDJgpLJ5DHADzzAw/KfEcBMGiFmjBpIfirQP"
1192 + "Q/LdhqqT6ukQACo9DAtpppU3AAAAAElFTkSuQmCC",
1193 FF_ESR = "data:image/png;base64,"
1194 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAALUlEQVQoU2NkoDJgpLJ5DHADzzAw/KfEcBMGiFmjBpIfirQP"
1195 + "Q/LdhqqT6ukQACo9DAtpppU3AAAAAElFTkSuQmCC")
1196 public void fillStyleNullFillRect() throws Exception {
1197 draw("<canvas id='myCanvas' width='20', height='10' style='border: 1px solid red;'></canvas>\n",
1198 "context.fillStyle = '#cc0000'; context.fillStyle = null; context.fillRect(2, 2, 16, 6);\n");
1199 }
1200
1201
1202
1203
1204 @Test
1205 @Alerts(DEFAULT = "data:image/png;base64,"
1206 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAANUlEQVR4AeSQOw0AQAhD350m/CvAEyygoDDRpOnW32cYe4YO"
1207 + "obCH7jXsBFUvNzR4CimMf5gAAAD//8jOg4wAAAAGSURBVAMA0CMgFVJk6gcAAAAASUVORK5CYII=",
1208 FF = "data:image/png;base64,"
1209 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAALUlEQVQoU2NkoDJgpLJ5DHADzzAw/KfEcBMGiFmjBpIfirQP"
1210 + "Q/LdhqqT6ukQACo9DAtpppU3AAAAAElFTkSuQmCC",
1211 FF_ESR = "data:image/png;base64,"
1212 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAALUlEQVQoU2NkoDJgpLJ5DHADzzAw/KfEcBMGiFmjBpIfirQP"
1213 + "Q/LdhqqT6ukQACo9DAtpppU3AAAAAElFTkSuQmCC")
1214 public void fillStyleUndefinedFillRect() throws Exception {
1215 draw("<canvas id='myCanvas' width='20', height='10' style='border: 1px solid red;'></canvas>\n",
1216 "context.fillStyle = '#cc0000'; context.fillStyle = undefined; context.fillRect(2, 2, 16, 6);\n");
1217 }
1218
1219
1220
1221
1222 @Test
1223 @Alerts(DEFAULT = "data:image/png;base64,"
1224 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAANUlEQVR4AeSQOw0AQAhD350m/CvAEyygoDDRpOnW32cYe4YO"
1225 + "obCH7jXsBFUvNzR4CimMf5gAAAD//8jOg4wAAAAGSURBVAMA0CMgFVJk6gcAAAAASUVORK5CYII=",
1226 FF = "data:image/png;base64,"
1227 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAALUlEQVQoU2NkoDJgpLJ5DHADzzAw/KfEcBMGiFmjBpIfirQP"
1228 + "Q/LdhqqT6ukQACo9DAtpppU3AAAAAElFTkSuQmCC",
1229 FF_ESR = "data:image/png;base64,"
1230 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAALUlEQVQoU2NkoDJgpLJ5DHADzzAw/KfEcBMGiFmjBpIfirQP"
1231 + "Q/LdhqqT6ukQACo9DAtpppU3AAAAAElFTkSuQmCC")
1232 public void fillStyleUnknownFillRect() throws Exception {
1233 draw("<canvas id='myCanvas' width='20', height='10' style='border: 1px solid red;'></canvas>\n",
1234 "context.fillStyle = '#cc0000'; context.fillStyle = 'pipi'; context.fillRect(2, 2, 16, 6);\n");
1235 }
1236
1237
1238
1239
1240 @Test
1241 @Alerts(DEFAULT = "data:image/png;base64,"
1242 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAQklEQVR4AbyQSQoAMAgD0/7/z20QPKYeahQXcB3caBbrwkPY"
1243 + "H+M4YCWMC3RLGNO1jhDWGI8OK2H+Tt3Puoox1054AQAA//8XBWeFAAAABklEQVQDAPFbEBXPTi1HAAAAAElFTkSuQmCC",
1244 FF = "data:image/png;base64,"
1245 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAALUlEQVQoU2NkoDJgpLJ5DMgG/qfQcLBZdDEQVzAQ8gFOF44g"
1246 + "AymMZIh2qqdDAD9SCgsSO8biAAAAAElFTkSuQmCC",
1247 FF_ESR = "data:image/png;base64,"
1248 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAALUlEQVQoU2NkoDJgpLJ5DMgG/qfQcLBZdDEQVzAQ8gFOF44g"
1249 + "AymMZIh2qqdDAD9SCgsSO8biAAAAAElFTkSuQmCC")
1250 public void clearRect() throws Exception {
1251 draw("<canvas id='myCanvas' width='20', height='10' style='border: 1px solid red;'></canvas>\n",
1252 "context.fillRect(2, 2, 16, 6); context.clearRect(4, 4, 6, 6);\n");
1253 }
1254
1255
1256
1257
1258 @Test
1259 @Alerts(DEFAULT = "data:image/png;base64,"
1260 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAeUlEQVR4AeyTSwqAMAxE257NY3u3ShavzCIGNXEhWAhJy+Tl"
1261 + "Ax1za7PSRis+PzC/0A/tsO+tY5nB3ZEBq79axAV6yQon9nQLaN/PE0RvgM2jW0Aesv5doI2t9qTbsEOFE58VYY8h0EsGrF51"
1262 + "t4GaTAzc7iVAA2HlwAMAAP//TK1liwAAAAZJREFUAwBzV2BR34pW7AAAAABJRU5ErkJggg==",
1263 FF = "data:image/png;base64,"
1264 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABBklEQVQ4T2P878Lwn4GKgHHUQIpDc+iE4VOgX4WAmJNSP0O8"
1265 + "zMiwgEGAIYXhPYMW0EATMGYE4v8M+kA2OymWwMLwGcNuBhlGRtRE/r+BgYXhKIMO3BKIZbpAVWy4LEFEChODBeMuhpOEXPM/"
1266 + "FGjYBwY9FEv+gy1lBulFjuUOxj0MlYQMxCb/35WhHOjqDlQDGRluMO5m0CTLQA8GdYY/DDfQXQh0L4MLgzXDQcYGoDSJABi5"
1267 + "14BaNLEl7J9Agy8CvXAGqACCBRmuMa5m+IvPDqCB7UD5CmJzyneg4rNgw5mgeDvDLeRUAQxHe6AjDhBrIDbHfUax5B/DJaDP"
1268 + "TlBiINYQGPwGAgAm8mgw6jTe3wAAAABJRU5ErkJggg==",
1269 FF_ESR = "data:image/png;base64,"
1270 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABBklEQVQ4T2P878Lwn4GKgHHUQIpDc+iE4VOgX4WAmJNSP0O8"
1271 + "zMiwgEGAIYXhPYMW0EATMGYE4v8M+kA2OymWwMLwGcNuBhlGRtRE/r+BgYXhKIMO3BKIZbpAVWy4LEFEChODBeMuhpOEXPM/"
1272 + "FGjYBwY9FEv+gy1lBulFjuUOxj0MlYQMxCb/35WhHOjqDlQDGRluMO5m0CTLQA8GdYY/DDfQXQh0L4MLgzXDQcYGoDSJABi5"
1273 + "14BaNLEl7J9Agy8CvXAGqACCBRmuMa5m+IvPDqCB7UD5CmJzyneg4rNgw5mgeDvDLeRUAQxHe6AjDhBrIDbHfUax5B/DJaDP"
1274 + "TlBiINYQGPwGAgAm8mgw6jTe3wAAAABJRU5ErkJggg==")
1275 public void transformTranslateClearRect() throws Exception {
1276 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1277 "context.fillStyle = '#ff4400'; context.fillRect(0, 0, 20, 20); "
1278 + "context.setTransform(1, .2, .3, 1, 0, 0); "
1279 + "context.translate(-5, 4); context.clearRect(4, 4, 16, 6);\n");
1280 }
1281
1282
1283
1284
1285 @Test
1286 @Alerts(DEFAULT = "data:image/png;base64,"
1287 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAoklEQVR4AayQKw6DUBBFmy6hlZX1dUUi2QOSPSCRSFgDkj0g"
1288 + "kUjQSCR74EyG4ZOQAAFyz7wZ8ubm5j0fN39LwwDvD1ySGX5x8aCGCmJw4bTMsGXThzeEIEooPeRwOL0ZsjOppIvAgR8UIOkb"
1289 + "zt30W4bsTeroMpD0L05Ln9JbenkuRtWeod6aq6X/88vSy3Mxqs4a6pZWS6/TWK8Yjhbr43bDAQAA//8nEaLcAAAABklEQVQD"
1290 + "AC1bFhX1lozgAAAAAElFTkSuQmCC",
1291 FF = "data:image/png;base64,"
1292 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAY0lEQVQoU2NkoDJgRDIvGsjeDsTvKLED2cAlQIM8gfgO1OBt"
1293 + "QPoUqYYjGwjTawY12AtIq0ANB7mcKNdjMxDZUUJQw0EuJ8r1hAxE9zE218cgKyLVQGyuX0otA7HGFyUupI+BAC5XEQsxJDCz"
1294 + "AAAAAElFTkSuQmCC",
1295 FF_ESR = "data:image/png;base64,"
1296 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAY0lEQVQoU2NkoDJgRDIvGsjeDsTvKLED2cAlQIM8gfgO1OBt"
1297 + "QPoUqYYjGwjTawY12AtIq0ANB7mcKNdjMxDZUUJQw0EuJ8r1hAxE9zE218cgKyLVQGyuX0otA7HGFyUupI+BAC5XEQsxJDCz"
1298 + "AAAAAElFTkSuQmCC")
1299 public void moveToLineToStroke() throws Exception {
1300 draw("<canvas id='myCanvas' width='20', height='10' style='border: 1px solid red;'></canvas>\n",
1301 "context.moveTo(2, 2); context.lineTo(16, 6); context.stroke();\n");
1302 }
1303
1304
1305
1306
1307 @Test
1308 @Alerts(DEFAULT = "data:image/png;base64,"
1309 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABBUlEQVR4AbTTP29BYRTH8du+g3br0D9Tp05NmjRNGpOE8A5s"
1310 + "IvEOBJPJYsAiIbEQs8VoMzCIwWKW2EwWMeH7Gx65REScS87nHFecn+cSj17Aj7sFFjioMGzlTvhGzCvM5QIVtFOzcoELguYw"
1311 + "lwvU3JrTCFAQw3ugBXrL+kG+CTWXO2GFpF/84wtPuKlc4ITtErJoYIoZyojg6nKBWqjSYviDvoIEc4kcNmgjiovlDzx9o05d"
1312 + "5MUQnjGEPrTHDONsXQr0L6y5qOETXbRQxweO6tpA/1KTixesMEIKh7ol0C1neBJHGh28w7MEan9M+4H+tgOmOVAZkqclEVig"
1313 + "svpq1ltWxpE9AAAA//8k+PvOAAAABklEQVQDAJ6ZIin8P6DKAAAAAElFTkSuQmCC",
1314 FF = "data:image/png;base64,"
1315 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA4klEQVQ4T63TzwoBURSA8RmvwMpOUqxslaews7HyAv4nNhgp"
1316 + "SizY2nsCeQh7axt7C4UF39G9NVLTNHNufRlTfnMa97qO8nKVPceCI+A3jeM+wIIToBd5WmAT6ElbLVAme9BUC2yZCTdaYAco"
1317 + "QQstsA6Uo74WmAea05qudKF7FNy/sTMAXUpSmlJ0pIP5DOUHnRSZukwlqtDSbKtbkBz26MnUVZrRjnokB+FvhQX9P2zwpW0m"
1318 + "lnf+s6KAFlhxUTTv/WRvxgHFyNLe/GlDuREXtIMNuKhRQQsUWHbFWRP8TqsOfgB13yEV/GLnewAAAABJRU5ErkJggg==",
1319 FF_ESR = "data:image/png;base64,"
1320 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA4klEQVQ4T63TzwoBURSA8RmvwMpOUqxslaews7HyAv4nNhgp"
1321 + "SizY2nsCeQh7axt7C4UF39G9NVLTNHNufRlTfnMa97qO8nKVPceCI+A3jeM+wIIToBd5WmAT6ElbLVAme9BUC2yZCTdaYAco"
1322 + "QQstsA6Uo74WmAea05qudKF7FNy/sTMAXUpSmlJ0pIP5DOUHnRSZukwlqtDSbKtbkBz26MnUVZrRjnokB+FvhQX9P2zwpW0m"
1323 + "lnf+s6KAFlhxUTTv/WRvxgHFyNLe/GlDuREXtIMNuKhRQQsUWHbFWRP8TqsOfgB13yEV/GLnewAAAABJRU5ErkJggg==")
1324 public void moveToBezierCurveToStroke() throws Exception {
1325 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1326 "context.moveTo(2, 2); context.bezierCurveTo(2, 17, 1, 4, 19, 17); context.stroke();\n");
1327 }
1328
1329
1330
1331
1332 @Test
1333 @Alerts(DEFAULT = "data:image/png;base64,"
1334 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA+klEQVR4AazSPcuBURjA8btnfIZnf8iCQbJQZFM2RZRMJmX3"
1335 + "EmUio08gm5VMBspiNFmYLcxSfAH/S+FE5OXS9TsOOf9O3X4s5ZcZLNNOwYOPxww6qOQxwg5j1ODHy2MGS5yKwwk32vjHAHMU"
1336 + "8YunYwbNH275MEQBLlQQxBpVPJxHwdsDU77IIoowZgjgbl4Nng8u2KTRhUTlIbK9zrvB88kOmwR6iOEynwYlMGHJQG5r4/00"
1337 + "3wQlIA9ObtuSD+LboDTqLBGEYGkEpSP/2ZxstIJ9Ykmo3XBF7ACf1g1pWUsWr2ZwQ9CuGdwT/NMMNgg2NYP0LLWnfIrJcgQA"
1338 + "AP//BP9DGwAAAAZJREFUAwBBPSApbk+eOwAAAABJRU5ErkJggg==",
1339 FF = "data:image/png;base64,"
1340 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA10lEQVQ4T83TMQ4BQRSAYRuFjqj2ANxAIdFzAEqN6BWipyHU"
1341 + "FBuF3hVcgEohGr0rqEThf5sZmWLEMq+wyZ/MbjLfTDKzUU75iRyvz3hPl5A1XHAD1KDYwILb7lkXcUE7p2xgwW1bxks6foJ9"
1342 + "oG9OjY9rOtOAbu/grKCd32OwohktfOi3oDXmDOrUoocL/wqK0aSpgV9mCCjImPI0sWIoKI5crREd5EUDLOJcqaQFijOkgpy8"
1343 + "xg4FbFOXOlpgBWxHVS1Qdil/T6wJpqetCSaAJ00wvdv/Dz4ByKocwaSTblsAAAAASUVORK5CYII=",
1344 FF_ESR = "data:image/png;base64,"
1345 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA10lEQVQ4T83TMQ4BQRSAYRuFjqj2ANxAIdFzAEqN6BWipyHU"
1346 + "FBuF3hVcgEohGr0rqEThf5sZmWLEMq+wyZ/MbjLfTDKzUU75iRyvz3hPl5A1XHAD1KDYwILb7lkXcUE7p2xgwW1bxks6foJ9"
1347 + "oG9OjY9rOtOAbu/grKCd32OwohktfOi3oDXmDOrUoocL/wqK0aSpgV9mCCjImPI0sWIoKI5crREd5EUDLOJcqaQFijOkgpy8"
1348 + "xg4FbFOXOlpgBWxHVS1Qdil/T6wJpqetCSaAJ00wvdv/Dz4ByKocwaSTblsAAAAASUVORK5CYII=")
1349 public void moveToQuadraticCurveToStroke() throws Exception {
1350 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1351 "context.moveTo(2, 2); context.quadraticCurveTo(19, 4, 19, 17); context.stroke();\n");
1352 }
1353
1354
1355
1356
1357 @Test
1358 @Alerts(DEFAULT = "data:image/png;base64,"
1359 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAOElEQVR4AezSsQ0AQAhCUe7231mJK2D3NcEOixe/lucO5qBw"
1360 + "w7JgEtcluOEzQhLXRTccg3QB/7ABAAD//9S22NcAAAAGSURBVAMAml4QKQrN4ykAAAAASUVORK5CYII=",
1361 FF = "data:image/png;base64,"
1362 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAANElEQVQ4T2NkoDJgpLJ5DKMGUh6iQysM/1PoYbBvkb08Ag2k"
1363 + "MAgh2odWshn1MnkhQPVYBgBiiQQV+ctw0AAAAABJRU5ErkJggg==",
1364 FF_ESR = "data:image/png;base64,"
1365 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAANElEQVQ4T2NkoDJgpLJ5DKMGUh6iQysM/1PoYbBvkb08Ag2k"
1366 + "MAgh2odWshn1MnkhQPVYBgBiiQQV+ctw0AAAAABJRU5ErkJggg==")
1367 public void lineWidthMoveToLineToStroke() throws Exception {
1368 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1369 "context.lineWidth = 4; context.moveTo(2, 10); context.lineTo(18, 10); context.stroke();\n");
1370 }
1371
1372
1373
1374
1375 @Test
1376 @Alerts(DEFAULT = "data:image/png;base64,"
1377 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA0ElEQVR4AeySPQrCQBCFg6UXsBL0BN7A3kZBj2OjIHgZbRT0"
1378 + "AN7BUhsLrQVrvwcSsjubNSzbCIb5sn+z702GtIrMz+8JtunACDqQFP4nv1BZwx0usIE5NDbxBblbHPSCPsxgBdqTyZX5FmTC"
1379 + "YCMkeLRp5U6P2RRkMmA0ERI8kfWAb6E2mJyQoJJiVepcZBccomr+hliFOy7cIBamyjrBJyoT6H4YMy7AN2ksyN0yVOWe1RJ8"
1380 + "kzN7TtRV6CQFFlUT5zhV0BGpLv6C1W6kzbP38A0AAP//p8YVwwAAAAZJREFUAwDiUB0pG3Y4HQAAAABJRU5ErkJggg==",
1381 FF = "data:image/png;base64,"
1382 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA0klEQVQ4T2NkoDJgpLJ5DDQ3kA3o4iggPgvE14D4L6k+wObC"
1383 + "E0BDzIH4OxBfgBoOsuAMEF8nZAk2AxuAmupxuOwH1JKjQLoUiP+jq8NmoAVQ0XEivGoJVAPyDQrAZiBI7AkQSxEwtBEoD/IN"
1384 + "QQNBCmYAcToBA08C5UG+IcrAAKCq9QQMBIWfDBA/Q1aHKx3yABX1ALEpEOsCMSsOw1OB4nOIMRBZDShtggw1RsIgPkh8IxCD"
1385 + "fAMH5OYUkGF6QKwOxEupYSDO4CXXhaMGUh7L9AtDAEzqHRUeyJjbAAAAAElFTkSuQmCC",
1386 FF_ESR = "data:image/png;base64,"
1387 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA0klEQVQ4T2NkoDJgpLJ5DDQ3kA3o4iggPgvE14D4L6k+wObC"
1388 + "E0BDzIH4OxBfgBoOsuAMEF8nZAk2AxuAmupxuOwH1JKjQLoUiP+jq8NmoAVQ0XEivGoJVAPyDQrAZiBI7AkQSxEwtBEoD/IN"
1389 + "QQNBCmYAcToBA08C5UG+IcrAAKCq9QQMBIWfDBA/Q1aHKx3yABX1ALEpEOsCMSsOw1OB4nOIMRBZDShtggw1RsIgPkh8IxCD"
1390 + "fAMH5OYUkGF6QKwOxEupYSDO4CXXhaMGUh7L9AtDAEzqHRUeyJjbAAAAAElFTkSuQmCC")
1391 public void setTransformFillRect() throws Exception {
1392 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1393 "context.setTransform(1, .2, .3, 1, 0, 0); context.fillRect(3, 3, 10, 7);\n");
1394 }
1395
1396
1397
1398
1399 @Test
1400 @Alerts(DEFAULT = "data:image/png;base64,"
1401 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA0ElEQVR4AeySPQrCQBCFg6UXsBL0BN7A3kZBj2OjIHgZbRT0"
1402 + "AN7BUhsLrQVrvwcSsjubNSzbCIb5sn+z702GtIrMz+8JtunACDqQFP4nv1BZwx0usIE5NDbxBblbHPSCPsxgBdqTyZX5FmTC"
1403 + "YCMkeLRp5U6P2RRkMmA0ERI8kfWAb6E2mJyQoJJiVepcZBccomr+hliFOy7cIBamyjrBJyoT6H4YMy7AN2ksyN0yVOWe1RJ8"
1404 + "kzN7TtRV6CQFFlUT5zhV0BGpLv6C1W6kzbP38A0AAP//p8YVwwAAAAZJREFUAwDiUB0pG3Y4HQAAAABJRU5ErkJggg==",
1405 FF = "data:image/png;base64,"
1406 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA0klEQVQ4T2NkoDJgpLJ5DDQ3kA3o4iggPgvE14D4L6k+wObC"
1407 + "E0BDzIH4OxBfgBoOsuAMEF8nZAk2AxuAmupxuOwH1JKjQLoUiP+jq8NmoAVQ0XEivGoJVAPyDQrAZiBI7AkQSxEwtBEoD/IN"
1408 + "QQNBCmYAcToBA08C5UG+IcrAAKCq9QQMBIWfDBA/Q1aHKx3yABX1ALEpEOsCMSsOw1OB4nOIMRBZDShtggw1RsIgPkh8IxCD"
1409 + "fAMH5OYUkGF6QKwOxEupYSDO4CXXhaMGUh7L9AtDAEzqHRUeyJjbAAAAAElFTkSuQmCC",
1410 FF_ESR = "data:image/png;base64,"
1411 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA0klEQVQ4T2NkoDJgpLJ5DDQ3kA3o4iggPgvE14D4L6k+wObC"
1412 + "E0BDzIH4OxBfgBoOsuAMEF8nZAk2AxuAmupxuOwH1JKjQLoUiP+jq8NmoAVQ0XEivGoJVAPyDQrAZiBI7AkQSxEwtBEoD/IN"
1413 + "QQNBCmYAcToBA08C5UG+IcrAAKCq9QQMBIWfDBA/Q1aHKx3yABX1ALEpEOsCMSsOw1OB4nOIMRBZDShtggw1RsIgPkh8IxCD"
1414 + "fAMH5OYUkGF6QKwOxEupYSDO4CXXhaMGUh7L9AtDAEzqHRUeyJjbAAAAAElFTkSuQmCC")
1415 public void transformFillRect() throws Exception {
1416 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1417 "context.transform(1, .2, .3, 1, 0, 0); context.fillRect(3, 3, 10, 7);\n");
1418 }
1419
1420
1421
1422
1423 @Test
1424 @Alerts(DEFAULT = "data:image/png;base64,"
1425 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAT0lEQVR4AeyRsQ0AIAgEjZM4qYWTOopPQWIBiQLlG7DwzYUc"
1426 + "vRUfAvNC6bDO4QBqfTS+2qVL2XbsvsoAZqhACSeu13YHuIHg5YtAOgwYOAAAAP//3hzLLwAAAAZJREFUAwDgrQ0pRqECRAAA"
1427 + "AABJRU5ErkJggg==",
1428 FF = "data:image/png;base64,"
1429 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAR0lEQVQ4T2NkoDJgpLJ5DKMGUh6iIzgMBYChV0BkCH4AqpuA"
1430 + "Sy1yGIIMBBlMDAAZCDIYA4zgSCEm3IhSMxqGRAUTXkVUD0MA33oEFT5oGBkAAAAASUVORK5CYII=",
1431 FF_ESR = "data:image/png;base64,"
1432 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAR0lEQVQ4T2NkoDJgpLJ5DKMGUh6iIzgMBYChV0BkCH4AqpuA"
1433 + "Sy1yGIIMBBlMDAAZCDIYA4zgSCEm3IhSMxqGRAUTXkVUD0MA33oEFT5oGBkAAAAASUVORK5CYII=")
1434 public void moveToLineToTransformStroke() throws Exception {
1435 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1436 "context.moveTo(2, 10); context.lineTo(13, 10);"
1437 + "context.transform(1, .2, .3, 1, 0, 0); context.stroke();\n");
1438 }
1439
1440
1441
1442
1443 @Test
1444 @Alerts(DEFAULT = "data:image/png;base64,"
1445 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAi0lEQVR4AeyRvQ2AIBBGjXEFe3sbl3AKl7BxChuXcAqXsLG3"
1446 + "dwUL3zVcJPgXsMPwyEngXfhIk8BfFPoHGjP8J8PMR+t6lB3hChP00EAJr4ZLKAcLphZmqGCADR6bXAk5myxMI3RQQw52E7kJ"
1447 + "yzruhLpLK7uJ3OSU+VehqrWSzM1fCKGRSRGFkoIfBwAAAP//6D4DfwAAAAZJREFUAwA4kBEpb4W4rAAAAABJRU5ErkJggg==",
1448 FF = "data:image/png;base64,"
1449 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAb0lEQVQ4T2NkoDJgpLJ5DKMGUh6io2FImzBkAxp7DYhvAPFF"
1450 + "IL4EpW8B6X+ErMQVKfxAjYZArAfE+lBaCUjfQ7IAZNF5IP6IbAkpscwE1KiGZAHIIg0g1gLiXzBDSTGQkG/B8qMGEhVMeBUN"
1451 + "/jAEAMq8DhXVLTYNAAAAAElFTkSuQmCC",
1452 FF_ESR = "data:image/png;base64,"
1453 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAb0lEQVQ4T2NkoDJgpLJ5DKMGUh6io2FImzBkAxp7DYhvAPFF"
1454 + "IL4EpW8B6X+ErMQVKfxAjYZArAfE+lBaCUjfQ7IAZNF5IP6IbAkpscwE1KiGZAHIIg0g1gLiXzBDSTGQkG/B8qMGEhVMeBUN"
1455 + "/jAEAMq8DhXVLTYNAAAAAElFTkSuQmCC")
1456 public void transformMoveToLineToStroke() throws Exception {
1457 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1458 "context.transform(1, .2, .3, 1, 0, 0); context.moveTo(2, 10);"
1459 + "context.lineTo(13, 10); context.stroke();\n");
1460 }
1461
1462
1463
1464
1465 @Test
1466 @Alerts(DEFAULT = "data:image/png;base64,"
1467 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAVUlEQVR4AexRQQoAIAgbvbxeXiYlUhdJDx0MbCpsjFkQ/FLQ"
1468 + "H2hmGJthJTlPER04j9J5C2xcox204HTXiKpx9tYi6u2Ql55PO/ToCDcFJYrn5v8MBwAAAP//H/lLYwAAAAZJREFUAwC5wBIp"
1469 + "ffEUgQAAAABJRU5ErkJggg==",
1470 FF = "data:image/png;base64,"
1471 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAM0lEQVQ4T2NkoDJgpLJ5DKMGUh6iIzwMGygMQbB+5DCkuoEU"
1472 + "OhCifYTH8mgYkhcCVE82AJYgAhXAytwXAAAAAElFTkSuQmCC",
1473 FF_ESR = "data:image/png;base64,"
1474 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAM0lEQVQ4T2NkoDJgpLJ5DKMGUh6iIzwMGygMQbB+5DCkuoEU"
1475 + "OhCifYTH8mgYkhcCVE82AJYgAhXAytwXAAAAAElFTkSuQmCC")
1476 public void moveToLineToRotateStroke() throws Exception {
1477 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1478 "context.moveTo(2, 10); context.lineTo(18, 10); context.rotate(90); context.stroke();\n");
1479 }
1480
1481
1482
1483
1484 @Test
1485 @Alerts(DEFAULT = "data:image/png;base64,"
1486 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA1UlEQVR4AeySIQsCQRBGF4tYLYKIoEGz3WCxGbSatVhsIkax"
1487 + "2kRMBpvYTQajYDWLv8Ag/gDfhIFdOI7b9eLB95jZ8L0wbM4YU4TUIsItth1U4e+IcITlDS9YQQGCI8Iv7QXUoQQinjKDIkIt"
1488 + "imjMowcdeMAQvGILtXhnGcAMJnCFLiRKlFCLZ5Y27GEDJ2hBbOKEWjywNOEGF5BfUWFGJolQi2uWGnxA7r1k5sGJj1CKIpuz"
1489 + "NKAMfXDiK9Tyk0X+75HpJFToSOxHJrSvEbZnNwy7m936AQAA//9brpUoAAAABklEQVQDAI8+GinfMmcuAAAAAElFTkSuQmCC",
1490 FF = "data:image/png;base64,"
1491 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAvklEQVQ4T2NkoDJgBJo3FYg/AXE3EL+j1HyQgZxAXATEaVDD"
1492 + "JwPp7+QaDDIQBkSBjAYg9gHiFiCeD8R/SDUY2UCYXjUgowuINYG4GojXAvF/Yg3GZiBMrzWQMQOIfwBxARAfJcZQfAaC9DMB"
1493 + "cRw0CM4B6SogvoLPYEIGwvTCIq4UKLARiOuB+AE2g4k1EKYXFnEJQIHZQNwKxK+RDSbVQPSIWwAU2EANA3EGI7kuHDUQEQKj"
1494 + "YUhM9sevhuphCAApYRoVT9kKewAAAABJRU5ErkJggg==",
1495 FF_ESR = "data:image/png;base64,"
1496 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAvklEQVQ4T2NkoDJgBJo3FYg/AXE3EL+j1HyQgZxAXATEaVDD"
1497 + "JwPp7+QaDDIQBkSBjAYg9gHiFiCeD8R/SDUY2UCYXjUgowuINYG4GojXAvF/Yg3GZiBMrzWQMQOIfwBxARAfJcZQfAaC9DMB"
1498 + "cRw0CM4B6SogvoLPYEIGwvTCIq4UKLARiOuB+AE2g4k1EKYXFnEJQIHZQNwKxK+RDSbVQPSIWwAU2EANA3EGI7kuHDUQEQKj"
1499 + "YUhM9sevhuphCAApYRoVT9kKewAAAABJRU5ErkJggg==")
1500 public void rotateMoveToLineToStroke() throws Exception {
1501 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1502 "context.rotate(.5); context.moveTo(1, 1); context.lineTo(18, 1); context.stroke();\n");
1503 }
1504
1505
1506
1507
1508 @Test
1509 @Alerts(DEFAULT = "data:image/png;base64,"
1510 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAQElEQVR4AeySwQ0AIAgDq/vvrA1xg5NXIaG/QnOw9blaBx6H"
1511 + "JW271JqwNlAJT7jMj7TtmisXBSbhf8jgPXcgwwsAAP//gPpVDQAAAAZJREFUAwDyABApkn0/fwAAAABJRU5ErkJggg==",
1512 FF = "data:image/png;base64,"
1513 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAN0lEQVQ4T2NkoDJgpLJ5DMgG/qfQcLBZowZSFIq0D0OKnAfT"
1514 + "TNN0OOpC8kJgNFLICzdkXYM/DAFt+QYVhcRJbAAAAABJRU5ErkJggg==",
1515 FF_ESR = "data:image/png;base64,"
1516 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAN0lEQVQ4T2NkoDJgpLJ5DMgG/qfQcLBZowZSFIq0D0OKnAfT"
1517 + "TNN0OOpC8kJgNFLICzdkXYM/DAFt+QYVhcRJbAAAAABJRU5ErkJggg==")
1518 public void rectFill() throws Exception {
1519 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1520 "context.rect(2, 2, 16, 6); context.fill();\n");
1521 }
1522
1523
1524
1525
1526 @Test
1527 @Alerts(DEFAULT = "data:image/png;base64,"
1528 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABG0lEQVR4AdTSsStFURwH8Jt/wCT+BpFBKQMlZTCIwSBlUMoi"
1529 + "MtjNDGSxMCgZJDIYlMmglEEWyR9AJn+A8vkNhnt653n39pb3+n7Offe+c76dd+/tKtr86czCdXdhg2fOWaWHlpL+5SibtPKJ"
1530 + "KU6Z5oEodmietDBm7xju+eSKGeZY5oQ+skkLY9Fbg9kvro3wzRnZpIVRNpqdXRRrfpsgm7TwzszYpUO9pIUXavoZpFbSwi8t"
1531 + "uxxRK2lhlBwaXjmgchoVRsmWYYBtKiVX+KFlhXEq7TRXqKd4NyzQzSMtPahmhTqK2OmSL8dccs0svYyxSSn/Ff5NjgcVL/yN"
1532 + "C4vcMswPpbRaGIvilYrieSdD7LFPKVUKSwtzJ20v/AUAAP//tDEvlAAAAAZJREFUAwDytSgpRne/fwAAAABJRU5ErkJggg==",
1533 FF = "data:image/png;base64,"
1534 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABAklEQVQ4T72UvQ4BQRRGbaOT6L2AQqHTeAK0HkAnkSgoJOIn"
1535 + "QYSEREGn0mppRCVRKMVPPIBapVBIOLeQyMTuzLKxySlm987ZOzvzreXz+LI89vn+IozSdQWCcIYpzE1XonYosi404AoyToMf"
1536 + "qrDRiVWhdDOAtTIxzLgEe+g7SVXhkuIibG0m5bgfgrKdVBWOKVzBxKGLFM9mpsIEhdJFUvetTIVSt4A8nL6RfjqHMURZyHgl"
1537 + "FI9szA1GbqVOSWkju0PNjVQXvQ4yScvQVKoTiqcAEejBUSc2EYpDNqoOD5A07SAAcWi9v8RU+Joj51SyLWm5QBMOvwh1K/7P"
1538 + "/1DbhVPBEzD3JBVTQqvpAAAAAElFTkSuQmCC",
1539 FF_ESR = "data:image/png;base64,"
1540 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABAklEQVQ4T72UvQ4BQRRGbaOT6L2AQqHTeAK0HkAnkSgoJOIn"
1541 + "QYSEREGn0mppRCVRKMVPPIBapVBIOLeQyMTuzLKxySlm987ZOzvzreXz+LI89vn+IozSdQWCcIYpzE1XonYosi404AoyToMf"
1542 + "qrDRiVWhdDOAtTIxzLgEe+g7SVXhkuIibG0m5bgfgrKdVBWOKVzBxKGLFM9mpsIEhdJFUvetTIVSt4A8nL6RfjqHMURZyHgl"
1543 + "FI9szA1GbqVOSWkju0PNjVQXvQ4yScvQVKoTiqcAEejBUSc2EYpDNqoOD5A07SAAcWi9v8RU+Joj51SyLWm5QBMOvwh1K/7P"
1544 + "/1DbhVPBEzD3JBVTQqvpAAAAAElFTkSuQmCC")
1545 public void ellipseStroke() throws Exception {
1546 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1547 "if (!context.ellipse) { log('context.ellipse not supported'); return; }\n"
1548 + "context.ellipse(10, 10, 8, 4, Math.PI / 4, 0, 1.5 * Math.PI); context.stroke();\n");
1549 }
1550
1551
1552
1553
1554 @Test
1555 @Alerts(DEFAULT = "data:image/png;base64,"
1556 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABBklEQVR4AdSTMQ6CMBSGq5uDq7uzJnoCV2HTQVfdTLyMV5BV"
1557 + "DoCzJ9AE4sgxHPGrgcTSvgoJi+T/81r6+vFegb7q+PpTYFGoAG/wpO2JWC0DuQJJ8AWnzO94x7iRDCAbA3Yt8bdmTM6sJXjM"
1558 + "2CsDSOYQS9IPy4AupAR9vw586pseD1iLsSgD2OuplMwH9mlElbpaZ44BLDNOZfSFtbRoAakyIlm/aYKolbRiAcvEI/GFJYlt"
1559 + "O4FUmUPS5+SDOtt2AoEpoDeiD+psWwQCq6D693OdqbNtL7CE5lQbMt7j+idltf0TCOQjoBGeM5niLQ6ZH4iGGgOrXUAyHGPX"
1560 + "MajWwAosxc6BbwAAAP//HE25RwAAAAZJREFUAwAtrTgpYLf2KQAAAABJRU5ErkJggg==",
1561 FF = "data:image/png;base64,"
1562 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABKklEQVQ4T2NkoDJgpLJ5DPQx8P9/BmGgyxWB+CojI8N3UnyB"
1563 + "4kKgQcxAzVuA2ANqyF8gvRqIW4AGXyXGYHQD7YGaDmDR+B8oNheIS4AGf8RnMLqBPkDFm/FouAlyPdDQB7jUoBsICrd7BLz2"
1564 + "CCivADQU5GoMgBHLwHA8C1RlRMBQe6CBh4g10BGocB8BA6cADcwlykCQIqAr1wCpYDyGvgTKSWLzNtaEDTRQEKgB5HVQmOIC"
1565 + "dkADD6NL4swpQENVgIqPALE4DhMnAQ3MJ9pAqNflgfReIFbGYugLoJgUurcJ5mWgS4WAGruBOAmLobZAA0G+gAOCBsJUAg3W"
1566 + "BbKrgDgMiJmg4k1AA+vJMhDJYC4gWwuIuUFhDDQQlN9JdyGuqCYpUog1hKYuBAD36EAVpWqveAAAAABJRU5ErkJggg==",
1567 FF_ESR = "data:image/png;base64,"
1568 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABKklEQVQ4T2NkoDJgpLJ5DPQx8P9/BmGgyxWB+CojI8N3UnyB"
1569 + "4kKgQcxAzVuA2ANqyF8gvRqIW4AGXyXGYHQD7YGaDmDR+B8oNheIS4AGf8RnMLqBPkDFm/FouAlyPdDQB7jUoBsICrd7BLz2"
1570 + "CCivADQU5GoMgBHLwHA8C1RlRMBQe6CBh4g10BGocB8BA6cADcwlykCQIqAr1wCpYDyGvgTKSWLzNtaEDTRQEKgB5HVQmOIC"
1571 + "dkADD6NL4swpQENVgIqPALE4DhMnAQ3MJ9pAqNflgfReIFbGYugLoJgUurcJ5mWgS4WAGruBOAmLobZAA0G+gAOCBsJUAg3W"
1572 + "BbKrgDgMiJmg4k1AA+vJMhDJYC4gWwuIuUFhDDQQlN9JdyGuqCYpUog1hKYuBAD36EAVpWqveAAAAABJRU5ErkJggg==")
1573 public void ellipseFill() throws Exception {
1574 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1575 "if (!context.ellipse) { log('context.ellipse not supported'); return; }\n"
1576 + "context.fillStyle = 'yellow';"
1577 + "context.ellipse(10, 10, 8, 4, Math.PI / 4, 0, 1.5 * Math.PI); context.fill();\n");
1578 }
1579
1580
1581
1582
1583 @Test
1584 @Alerts(DEFAULT = "data:image/png;base64,"
1585 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAvUlEQVR4AeyQsREBQRSGjRmhDjSgArFAqgG6EFACVYg0IBWI"
1586 + "JVINyAUa8H0zBDfrrd0hczf/d7f33rvv7rbb+fHRCr/f0JI97NW8JifsI9rDHIqTE+6wXGALxYmEYwwDWEJVIuEIywGqEwk/"
1587 + "iTYMrCBJJDwxOYEo9pxJ+pHwyOQV/BIujViz50yj4U0ktDfjNIQzKBHX1uxRTpMT3hmfwgJuT1xbs0cpTU74mvbX1tyIa5Zx"
1588 + "SoTx0286fyh8AAAA//8Yjg1hAAAABklEQVQDAE+RGClJbfH3AAAAAElFTkSuQmCC",
1589 FF = "data:image/png;base64,"
1590 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAArElEQVQ4T2NkoDJgpLJ5DKMGYg1RcaDoS2LDmlAYJgINegPE"
1591 + "m6lhYDfQkG9AXE+sYSB1uFxoAJRrB2JPUgzDZ2AeUFIZiPOpZWAa0CBjIE7HYeBsoPhJIJ6DLo/Py0VAxXE4DFwKFO8A4svE"
1592 + "GghSVwb1NrorQa66DsS92CwjlGxAhupBYxuklguIz+EyDF+kIFsOMtAciP9Dww3Dm8iKCbmQ1EgeLW1IDjFMDQCsfxYVL43f"
1593 + "UAAAAABJRU5ErkJggg==",
1594 FF_ESR = "data:image/png;base64,"
1595 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAArElEQVQ4T2NkoDJgpLJ5DKMGYg1RcaDoS2LDmlAYJgINegPE"
1596 + "m6lhYDfQkG9AXE+sYSB1uFxoAJRrB2JPUgzDZ2AeUFIZiPOpZWAa0CBjIE7HYeBsoPhJIJ6DLo/Py0VAxXE4DFwKFO8A4svE"
1597 + "GghSVwb1NrorQa66DsS92CwjlGxAhupBYxuklguIz+EyDF+kIFsOMtAciP9Dww3Dm8iKCbmQ1EgeLW1IDjFMDQCsfxYVL43f"
1598 + "UAAAAABJRU5ErkJggg==")
1599 public void arcStroke() throws Exception {
1600 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1601 "context.arc(10, 10, 4, 0, 4.3); context.stroke();\n");
1602 }
1603
1604
1605
1606
1607 @Test
1608 @Alerts(DEFAULT = "data:image/png;base64,"
1609 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA10lEQVR4AcyUPQ5BQRRGh0JHotfZgUat0Esshg6lwjKUGq1C"
1610 + "o9FLVDqJ3gY4J5nCk5CZZCSS72Tu3J/PHcWrhxDmIZ8ZM+Js5dTwQdFCDgtmxJnXM2hYo1hMGrphUcP/37DYczXyPyz+ZI2L"
1611 + "4YbFzDT6qeGAX5hGjAnz5YYNxrawgnbE2FyTe5Y0HDNxhh5MIsbm1tyzpGGLCY04KjLXIZP1fA0vDH3SjkIfkqVhcnNKo4bd"
1612 + "L41DakdIloZ3upfwLnNXkntIloYbukdwg0PE2NyJu1/lVMITAAD//2CzrtYAAAAGSURBVAMAHHMxPWQvHuMAAAAASUVORK5C"
1613 + "YII=",
1614 FF = "data:image/png;base64,"
1615 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAwklEQVQ4T2NkYGA4AMVAimJgzwg0ogGKKTYNaED9qIEUB+No"
1616 + "GFIchDROh0ZAB5pAHXkKSF8gw8HwWP4F1KwOxD+ghnAC6StA3EWioWAD9wLxTSDOQtM8E8i/S6KhYANBXjPA4ZIlUAMvEelS"
1617 + "sIFnkMIOXd90qPxcahk4G2jQSSCeQ4qBF4GK9XFoWAoU7wDiy6QYuBuo+B4Qp6NpArnqOhD3EmkYSBk4DPcD8W8gFgdiUPJh"
1618 + "AmJWIH4GxMdJMAyk1AEAvZs0gSroYl8AAAAASUVORK5CYII=",
1619 FF_ESR = "data:image/png;base64,"
1620 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAwklEQVQ4T2NkYGA4AMVAimJgzwg0ogGKKTYNaED9qIEUB+No"
1621 + "GFIchDROh0ZAB5pAHXkKSF8gw8HwWP4F1KwOxD+ghnAC6StA3EWioWAD9wLxTSDOQtM8E8i/S6KhYANBXjPA4ZIlUAMvEelS"
1622 + "sIFnkMIOXd90qPxcahk4G2jQSSCeQ4qBF4GK9XFoWAoU7wDiy6QYuBuo+B4Qp6NpArnqOhD3EmkYSBk4DPcD8W8gFgdiUPJh"
1623 + "AmJWIH4GxMdJMAyk1AEAvZs0gSroYl8AAAAASUVORK5CYII=")
1624 public void arcCircleStroke() throws Exception {
1625 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1626 "context.arc(4, 16, 4, 0, 2 * Math.PI); context.stroke(); context.strokeRect(0, 0, 20, 20);\n");
1627 }
1628
1629
1630
1631
1632 @Test
1633 @Alerts(DEFAULT = "data:image/png;base64,"
1634 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAgUlEQVR4AeyQsQ2AIBBFib2FvUMYGysLp9IRbKycwQVsHcR1"
1635 + "fCRUcjEHUh75n0su3AN+5QovA/4PVJPhyDVL8ET9lAbYQWiCN+qJayxKA9yZnIN76o0PLEoDfA96eEtT/H4OEJa72AYcKRfo"
1636 + "X7lGNBq5QEZlGVDOJaVrGaakJZ99AAAA///kBf+kAAAABklEQVQDAHKaCSkUoB16AAAAAElFTkSuQmCC",
1637 FF = "data:image/png;base64,"
1638 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAa0lEQVQ4T2NkoDJgpLJ5DKMGYg1RWaCoBxCDgucUEF/AF+7E"
1639 + "hGEt0ACQof+BmBOIrwBxFy5DiTEQXe9MoMBdXIaSYyDIgiVQAy+h20augbOABp0G4tnUMhBnvJDrwlEDESEwGoaUF7dUD0MA"
1640 + "jksLFQkR+1oAAAAASUVORK5CYII=",
1641 FF_ESR = "data:image/png;base64,"
1642 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAa0lEQVQ4T2NkoDJgpLJ5DKMGYg1RWaCoBxCDgucUEF/AF+7E"
1643 + "hGEt0ACQof+BmBOIrwBxFy5DiTEQXe9MoMBdXIaSYyDIgiVQAy+h20augbOABp0G4tnUMhBnvJDrwlEDESEwGoaUF7dUD0MA"
1644 + "jksLFQkR+1oAAAAASUVORK5CYII=")
1645 public void arcAnticlockwiseStroke() throws Exception {
1646 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1647 "context.arc(10, 10, 4, 0, 4.3, true); context.stroke();\n");
1648 }
1649
1650
1651
1652
1653 @Test
1654 @Alerts(DEFAULT = "data:image/png;base64,"
1655 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA0klEQVR4AeyQoRECMRREb/AIPA1gMWgElgYoAwElgKAMGsAi"
1656 + "0BgsDeARNMB7M0HchZ/JDDi42b372d3sTdJrvvz8Cz+/0Jo7nPKbdaIzY4xSYZ9tB7iDg0RnNT2kHKXCPfErHMNVorOaHlKO"
1657 + "qNCjDYlbxKcFNT0zLcNFVDjBPMIIemYyPyrMgrVCVHimYAYj6JnJ/KjwRPIGt7ALNT0zXa+JCg0ueI3gBVoindX0kHOUCh/E"
1658 + "53AJ74nOanpIOUqFr7RH27CQzowxagrj3W+cHyx8AgAA//89TZ+gAAAABklEQVQDAF0MHikQ7OLGAAAAAElFTkSuQmCC",
1659 FF = "data:image/png;base64,"
1660 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA0klEQVQ4T2NkoDJgpLJ5DKMGYg1RI6CoCVTmFJC+gC/cCYVh"
1661 + "FVCzOhD/gBrCCaSvAHEXLkPxGQgyTAaIs9A0zwTy7+IyFJeBIG/mA3E8DpcsgRp4CV0el4GpQIWGWFwH0z8LyDgNxLNJMdAU"
1662 + "qDgNhwtBBp0E4jnEGmgAVFgExHE4DFwKFO8A4svEGghSVwbEykCcjqYJ5KrrQNyLzTJCyQZkqB4QfwZiFiDmAuJzuAwDWUDI"
1663 + "QJAakIFmUNeAwg3Dm8guJcZAHMGIXXjUQJKCC6tiABZOHBWsf4c4AAAAAElFTkSuQmCC",
1664 FF_ESR = "data:image/png;base64,"
1665 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA0klEQVQ4T2NkoDJgpLJ5DKMGYg1RI6CoCVTmFJC+gC/cCYVh"
1666 + "FVCzOhD/gBrCCaSvAHEXLkPxGQgyTAaIs9A0zwTy7+IyFJeBIG/mA3E8DpcsgRp4CV0el4GpQIWGWFwH0z8LyDgNxLNJMdAU"
1667 + "qDgNhwtBBp0E4jnEGmgAVFgExHE4DFwKFO8A4svEGghSVwbEykCcjqYJ5KrrQNyLzTJCyQZkqB4QfwZiFiDmAuJzuAwDWUDI"
1668 + "QJAakIFmUNeAwg3Dm8guJcZAHMGIXXjUQJKCC6tiABZOHBWsf4c4AAAAAElFTkSuQmCC")
1669 public void arcCircleAnticlockwiseStroke() throws Exception {
1670 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1671 "context.arc(10, 10, 4, 0, 2 * Math.PI, true); context.stroke();\n");
1672 }
1673
1674
1675
1676
1677 @Test
1678 @Alerts(DEFAULT = "data:image/png;base64,"
1679 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAr0lEQVR4AeyRMQ6CUBBEH8RGr2Nta6sXIoRwIWltrb2ONgZ0"
1680 + "Fip+5odEY8UmC8vMnxeyv+THtQK/X+ifd1ixp+FCzSNaszR8+T9UsOTGwImCbbRmafIM0wM3VAGZBwWXN9enbw/sOU5n0lfG"
1681 + "88AUs0jxwJKrJWQ8D3zRMvBMoNLkJcYoeGDLnZ7D52K6AAtU0IUmb8wnTw/UUQVrzjTsojVLw1ce6HPWWYF2NYuNNwAAAP//"
1682 + "XYrofwAAAAZJREFUAwCFiigpn6iF9wAAAABJRU5ErkJggg==",
1683 FF = "data:image/png;base64,"
1684 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAn0lEQVQ4T2NkoDJgpLJ5DKMGUh6i+MOwgUECaMVsILaAWnWc"
1685 + "gZUhnaGa4Tkuq3Eb2MogyfCb4RRQowya5idAvj5DA8M7bIbiNrCBYQlQQzQOlywEGphAqoEvgBrEcRj4EmggKDgwAD4XUt1A"
1686 + "qntZCuifk1gjhZ1Bj6GS4T1pXgaphsT0TCDLEqr5BJBOBYYfKDiwgtG8TOu8TIb5VI8UAIOoHhWKBN6HAAAAAElFTkSuQmCC",
1687 FF_ESR = "data:image/png;base64,"
1688 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAn0lEQVQ4T2NkoDJgpLJ5DKMGUh6i+MOwgUECaMVsILaAWnWc"
1689 + "gZUhnaGa4Tkuq3Eb2MogyfCb4RRQowya5idAvj5DA8M7bIbiNrCBYQlQQzQOlywEGphAqoEvgBrEcRj4EmggKDgwAD4XUt1A"
1690 + "qntZCuifk1gjhZ1Bj6GS4T1pXgaphsT0TCDLEqr5BJBOBYYfKDiwgtG8TOu8TIb5VI8UAIOoHhWKBN6HAAAAAElFTkSuQmCC")
1691 public void arcFillPath() throws Exception {
1692 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1693 "context.fillStyle = 'green'; context.beginPath();"
1694 + "context.arc(10, 10, 4, 0, 2 * Math.PI); context.fill();\n");
1695 }
1696
1697
1698
1699
1700 @Test
1701 @Alerts(DEFAULT = "data:image/png;base64,"
1702 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABLElEQVR4AcyQoU4DQRRFDxv+AQ2CoPAgQWywOAzYJSgUrjwI"
1703 + "CoWiaBQO2yAQCPgAVA3hG1AkkLZvdmf7ptt222mapjdz983OvHtmMglz1gKB1+wgNNVt9Z+3mzdxe4zW6Bs6UId3jWTqTfWq"
1704 + "t5tnuD3Xo4vVMQwUWtrkQFpqR0bRS6hBYHFqGjZMmKcUGUoZsHiXaW5WZsuahW9qwA7HZUd0DbIGhL1okAX62RC4YfvRs342"
1705 + "BEZTfOBJ6746HyHwK1+Z7vOrbXf8s4VwpH7DKwS++rW68k2XC21YQzjnhjYVGTDhsbJnvyt86M8JwjpX3Gr9YYwM2MhDD5W+"
1706 + "Z71RyiW7SM2BmAzo1oRTLS31PQnbCId6oxciNAh0QeEA4YwGn8ygYeAMkDCy/MAeAAAA//+6th9mAAAABklEQVQDAAx2OinL"
1707 + "04YhAAAAAElFTkSuQmCC",
1708 FF = "data:image/png;base64,"
1709 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABPElEQVQ4T83UzyuEQRzH8feiuHJyUy4S5e6u3PwBDpy4iBM5"
1710 + "iKndC1qJ1hEnB3EnRykXKfIjtVt7cuWg/OYz5Wlnxz7MPm3y1Pcw02deM8/MNClq/KVq7BEPZmjjlUFN2K/qUtnsqeqEBnLM"
1711 + "UKy0mO+gURxWVCOq+pg/eFb/Ai1kGOfJzZSD2wIu2VVgIHArDoX2uWg5aDQrTAZiUSyHYSxqlMA0HbxxXSVm4++qTqE3tlEC"
1712 + "DctqTyQA7ZBFgVM+eK6O7oTgmcAeH3xUR2NC8E5gsw9+JMDsmB3VksBjH8yroz0QfVBuXTc2619w91A2FBr+BbzVMa5qY9aY"
1713 + "5r5S1gV7FTiKAa8EzdPKFqO8/DSpf7E3FR5yBuwLyjLHQeBWeI+DoUkD91QF6gTNchEKRbk/fL6qXdpX/v+v8BPqrD0V/Gmy"
1714 + "MAAAAABJRU5ErkJggg==",
1715 FF_ESR = "data:image/png;base64,"
1716 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABPElEQVQ4T83UzyuEQRzH8feiuHJyUy4S5e6u3PwBDpy4iBM5"
1717 + "iKndC1qJ1hEnB3EnRykXKfIjtVt7cuWg/OYz5Wlnxz7MPm3y1Pcw02deM8/MNClq/KVq7BEPZmjjlUFN2K/qUtnsqeqEBnLM"
1718 + "UKy0mO+gURxWVCOq+pg/eFb/Ai1kGOfJzZSD2wIu2VVgIHArDoX2uWg5aDQrTAZiUSyHYSxqlMA0HbxxXSVm4++qTqE3tlEC"
1719 + "DctqTyQA7ZBFgVM+eK6O7oTgmcAeH3xUR2NC8E5gsw9+JMDsmB3VksBjH8yroz0QfVBuXTc2619w91A2FBr+BbzVMa5qY9aY"
1720 + "5r5S1gV7FTiKAa8EzdPKFqO8/DSpf7E3FR5yBuwLyjLHQeBWeI+DoUkD91QF6gTNchEKRbk/fL6qXdpX/v+v8BPqrD0V/Gmy"
1721 + "MAAAAABJRU5ErkJggg==")
1722 public void arcFillPathAngle() throws Exception {
1723 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1724 "context.fillStyle = 'green'; context.beginPath();"
1725 + "context.arc(10, 10, 8, 2.3, 2 * Math.PI); context.fill();\n");
1726 }
1727
1728
1729
1730
1731 @Test
1732 @Alerts(DEFAULT = "data:image/png;base64,"
1733 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA60lEQVR4AdSQyxHCMBBDPbRAQVAEdXCgAiqgCa40QB9QAfQB"
1734 + "epNRsB3/DrmQWcWaXa2sZBNWfv7T8Kq/cB4EWkl/lX/yQaO9MFIfiXYCOzqmyg1var+Eh9BL+ZTmLbCjY6rckO5Fr5PQKzRo"
1735 + "E13J0Dcmn5JsheCZtfO4ZMiQm0kAL4EZmsWsZuibnSRedM+aeBZqhohIQBJ4DHrM4t7MW4ZO4EQsmXtGL0HLECFJSAQHcHrw"
1736 + "InqGTkIygIl78AV6hiyQiGQATq+KEUMSbeUA4KL1GjFk+6gX0NGuUcO7bICOdo0atl2i6eqGXwAAAP//15WmRAAAAAZJREFU"
1737 + "AwAtpCcpojzDOAAAAABJRU5ErkJggg==",
1738 FF = "data:image/png;base64,"
1739 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAApElEQVQ4T+WT0Q2AIAxEwYncQDcxTmLcRCfRCVxJ2w8Iadoe"
1740 + "JsQfSfrV412BI4bGKzbmhU+Ay8up11IvJxyouVNtldCJdDPVmfTakQ9qsmsWGXA2Z93oTcg9VahAVWPrUdCUpqkFRFOahl5s"
1741 + "rE2umQe0NrrXgYItN6OrgD9FAtBjQSCnJUFuLXcyTujIZS4T0A18DZChF1VH1aMvWQtEnNz/IfABG4IjFfQNX+kAAAAASUVO"
1742 + "RK5CYII=",
1743 FF_ESR = "data:image/png;base64,"
1744 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAApElEQVQ4T+WT0Q2AIAxEwYncQDcxTmLcRCfRCVxJ2w8Iadoe"
1745 + "JsQfSfrV412BI4bGKzbmhU+Ay8up11IvJxyouVNtldCJdDPVmfTakQ9qsmsWGXA2Z93oTcg9VahAVWPrUdCUpqkFRFOahl5s"
1746 + "rE2umQe0NrrXgYItN6OrgD9FAtBjQSCnJUFuLXcyTujIZS4T0A18DZChF1VH1aMvWQtEnNz/IfABG4IjFfQNX+kAAAAASUVO"
1747 + "RK5CYII=")
1748 public void closePath() throws Exception {
1749 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1750 "context.moveTo(4,4); context.lineTo(10,16);"
1751 + "context.lineTo(16,4); context.closePath(); context.stroke();\n");
1752 }
1753
1754
1755
1756
1757 @Test
1758 @Alerts(DEFAULT = "data:image/png;base64,"
1759 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAALklEQVR4AezSIRIAAAgCQcf/P9pOPIlnM0DYYad8Fv5BNdQQ"
1760 + "CDgbgBYRDQMEvAcAAP//GaAxmgAAAAZJREFUAwCLOAAp5PB2EAAAAABJRU5ErkJggg==",
1761 FF = "data:image/png;base64,"
1762 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAKElEQVQ4T2NkoDJgpLJ5DKMGUh6io2E4GoZkhMBosiEj0NC0"
1763 + "jMAwBABIxgAVO+SUsAAAAABJRU5ErkJggg==",
1764 FF_ESR = "data:image/png;base64,"
1765 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAKElEQVQ4T2NkoDJgpLJ5DKMGUh6io2E4GoZkhMBosiEj0NC0"
1766 + "jMAwBABIxgAVO+SUsAAAAABJRU5ErkJggg==")
1767 public void closePathNoSubpath() throws Exception {
1768 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1769 "context.closePath();context.stroke();\n");
1770 }
1771
1772
1773
1774
1775 @Test
1776 @Alerts(DEFAULT = "data:image/png;base64,"
1777 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAALklEQVR4AezSIRIAAAgCQcf/P9pOPIlnM0DYYad8Fv5BNdQQ"
1778 + "CDgbgBYRDQMEvAcAAP//GaAxmgAAAAZJREFUAwCLOAAp5PB2EAAAAABJRU5ErkJggg==",
1779 FF = "data:image/png;base64,"
1780 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAKElEQVQ4T2NkoDJgpLJ5DKMGUh6io2E4GoZkhMBosiEj0NC0"
1781 + "jMAwBABIxgAVO+SUsAAAAABJRU5ErkJggg==",
1782 FF_ESR = "data:image/png;base64,"
1783 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAKElEQVQ4T2NkoDJgpLJ5DKMGUh6io2E4GoZkhMBosiEj0NC0"
1784 + "jMAwBABIxgAVO+SUsAAAAABJRU5ErkJggg==")
1785 public void closePathPointOnly() throws Exception {
1786 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1787 "context.moveTo(4,4); context.closePath(); context.stroke();\n");
1788 }
1789
1790
1791
1792
1793 @Test
1794 @Alerts(DEFAULT = "data:image/png;base64,"
1795 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAALklEQVR4AezSIRIAAAgCQcf/P9pOPIlnM0DYYad8Fv5BNdQQ"
1796 + "CDgbgBYRDQMEvAcAAP//GaAxmgAAAAZJREFUAwCLOAAp5PB2EAAAAABJRU5ErkJggg==",
1797 FF = "data:image/png;base64,"
1798 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAKElEQVQ4T2NkoDJgpLJ5DKMGUh6io2E4GoZkhMBosiEj0NC0"
1799 + "jMAwBABIxgAVO+SUsAAAAABJRU5ErkJggg==",
1800 FF_ESR = "data:image/png;base64,"
1801 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAKElEQVQ4T2NkoDJgpLJ5DKMGUh6io2E4GoZkhMBosiEj0NC0"
1802 + "jMAwBABIxgAVO+SUsAAAAABJRU5ErkJggg==")
1803 public void closePathTwice() throws Exception {
1804 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1805 "context.closePath(); context.closePath(); context.stroke();\n");
1806 }
1807
1808
1809
1810
1811 @Test
1812 @Alerts(DEFAULT = "data:image/png;base64,"
1813 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA1ElEQVR4AeyQ0Q3CMBBDK1ZgIPhjAebggwVgApbglwXYgw3o"
1814 + "IPVLZPUaXaV89LPVueezT06Uw7DxFwMvSXbU3vKfDdAkzeXAq6SH0BYaHji3puaTgKdWy4GfOg7RNMcDf+38BN8SPmrGU6vl"
1815 + "QKaXfnfBBUfzDEfzDEfzXHoM9EncDLBgLXI8EDV4QQxE4EROBnC0CDQ8AI9e4W0gNzrKAXDRRaHhAfjCZGgD0W76AbW08EBq"
1816 + "ZoFfbQK1tPBAamaB6WKvuAf2vtT63v6G62/T62z+hhMAAAD//yTOSwYAAAAGSURBVAMAxcwiKYpExDIAAAAASUVORK5CYII=",
1817 FF = "data:image/png;base64,"
1818 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAiklEQVQ4T2NkoDJgJMG8ehxqG5HFYQbaAwVBEg5omvZDxf8D"
1819 + "6YVAvABNPh7ITwTiAzBxZBfCNMMk0S0hJA82E9lAUg1AtwDDQJAAshcJBQE2eRQXggyEuRIUZiAN8LCBhhEheQwDQfrOATET"
1820 + "EBvgiFW88qQkGxzmowqPGkhUMOFVNBqGo2FIRggAACy9IRWISF6KAAAAAElFTkSuQmCC",
1821 FF_ESR = "data:image/png;base64,"
1822 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAiklEQVQ4T2NkoDJgJMG8ehxqG5HFYQbaAwVBEg5omvZDxf8D"
1823 + "6YVAvABNPh7ITwTiAzBxZBfCNMMk0S0hJA82E9lAUg1AtwDDQJAAshcJBQE2eRQXggyEuRIUZiAN8LCBhhEheQwDQfrOATET"
1824 + "EBvgiFW88qQkGxzmowqPGkhUMOFVNBqGo2FIRggAACy9IRWISF6KAAAAAElFTkSuQmCC")
1825 public void closePathClosesOnlyLastSubpath() throws Exception {
1826 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1827 "context.moveTo(2,2); context.lineTo(5,8); context.lineTo(8,2);"
1828 + "context.moveTo(10,2); context.lineTo(13,8); context.lineTo(16,2); context.closePath();"
1829 + "context.stroke();\n");
1830 }
1831
1832
1833
1834
1835 @Test
1836 @Alerts(DEFAULT = "data:image/png;base64,"
1837 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAdklEQVR4AexU0QrAIAi8tT/rw/2zsWXgcMIIUWEPCw4tvLwO"
1838 + "soH28wE4l+E3J31Z3qgDGkuGKdBczvMVdhzbBAF94PbTKHnbTq7cMWK+QunM79eQc2+sU2i98CqT+jqF0iEaf4VRB4EPelg+"
1839 + "D6Ou6f/PebqHFwAAAP//nUdSmAAAAAZJREFUAwCqLTcpdpR/5AAAAABJRU5ErkJggg==",
1840 FF = "data:image/png;base64,"
1841 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAZklEQVQ4T2Nk2Mf8nwEZOP1lROET4qDpZ6S6gfsYUF3oxECa"
1842 + "C9H1M1LdQHgQURqWUIMQEUBtAyn1OsyncBdS3UBCyY1YedISMRGmjhpIRCARUDISwhCjPKQ02KhtIEZ5SLED0QpoADR/JhX5"
1843 + "NimNAAAAAElFTkSuQmCC",
1844 FF_ESR = "data:image/png;base64,"
1845 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAZklEQVQ4T2Nk2Mf8nwEZOP1lROET4qDpZ6S6gfsYUF3oxECa"
1846 + "C9H1M1LdQHgQURqWUIMQEUBtAyn1OsyncBdS3UBCyY1YedISMRGmjhpIRCARUDISwhCjPKQ02KhtIEZ5SLED0QpoADR/JhX5"
1847 + "NimNAAAAAElFTkSuQmCC")
1848 public void putImageDataInside() throws Exception {
1849 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1850 "if (typeof ImageData != 'function') { log('no ctor'); return; }\n"
1851 + " var arr = new Uint8ClampedArray(64);\n"
1852 + " for (var i = 0; i < 32; i += 4) {\n"
1853 + " arr[i + 0] = 0; arr[i + 1] = 190; arr[i + 2] = 3; arr[i + 3] = 255;\n"
1854 + " }\n"
1855 + " for (var i = 32; i < 64; i += 4) {\n"
1856 + " arr[i + 0] = 190; arr[i + 1] = 0; arr[i + 2] = 3; arr[i + 3] = 255;\n"
1857 + " }\n"
1858
1859 + " var imageData = new ImageData(arr, 4, 4);\n"
1860 + " context.putImageData(imageData, 0, 0);\n"
1861 + " context.putImageData(imageData, 2, 4);\n"
1862 + " context.putImageData(imageData, 16, 0);\n"
1863 + " context.putImageData(imageData, 16, 16);\n");
1864 }
1865
1866
1867
1868
1869 @Test
1870 @Alerts(DEFAULT = "data:image/png;base64,"
1871 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAaklEQVR4AeyUQQoAIQhF/9TNOrg3GxqE+WALidJ2BR8hEx9v"
1872 + "UYHUrhHUboPNUzbn3LEiDdA0vI+NOzFp5BOSSj0OmZB47XxCblKPNrxfrecI6ZJ1lYzvzxFyQ7RewqhB4DoMOPx//nSHHwAA"
1873 + "AP//+UMdZQAAAAZJREFUAwDnWCep6qrEzgAAAABJRU5ErkJggg==",
1874 FF = "data:image/png;base64,"
1875 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAaUlEQVQ4T2Nk2Mf8nwEI9jmBSARwYvjLiCpCHI+R6gbuY4C4"
1876 + "kFwXobubkeoGwm2AhiWc70RuGMJMoLaBMK/DzCc3TOFJg+oGEpfKCKsiK/HiM3bUQMKBTkjFaBgSCiHC8tQLQ2jhQnUDAUAL"
1877 + "HZUFr6Y/AAAAAElFTkSuQmCC",
1878 FF_ESR = "data:image/png;base64,"
1879 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAaUlEQVQ4T2Nk2Mf8nwEI9jmBSARwYvjLiCpCHI+R6gbuY4C4"
1880 + "kFwXobubkeoGwm2AhiWc70RuGMJMoLaBMK/DzCc3TOFJg+oGEpfKCKsiK/HiM3bUQMKBTkjFaBgSCiHC8tQLQ2jhQnUDAUAL"
1881 + "HZUFr6Y/AAAAAElFTkSuQmCC")
1882 public void putImageDataOutside() throws Exception {
1883 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1884 "if (typeof ImageData != 'function') { log('no ctor'); return; }\n"
1885 + " var arr = new Uint8ClampedArray(64);\n"
1886 + " for (var i = 0; i < 32; i += 4) {\n"
1887 + " arr[i + 0] = 0; arr[i + 1] = 190; arr[i + 2] = 3; arr[i + 3] = 255;\n"
1888 + " }\n"
1889 + " for (var i = 32; i < 64; i += 4) {\n"
1890 + " arr[i + 0] = 190; arr[i + 1] = 0; arr[i + 2] = 3; arr[i + 3] = 255;\n"
1891 + " }\n"
1892
1893 + " var imageData = new ImageData(arr, 4, 4);\n"
1894 + " context.putImageData(imageData, -2, 0);\n"
1895 + " context.putImageData(imageData, 2, -2);\n"
1896 + " context.putImageData(imageData, 2, 4);\n"
1897 + " context.putImageData(imageData, 18, 18);\n");
1898 }
1899
1900
1901
1902
1903 @Test
1904 @Alerts(DEFAULT = "data:image/png;base64,"
1905 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAd0lEQVR4AeySUQoAIQhE3e1mHdybLW3jRwRSSsxnwUTo9JDB"
1906 + "V8iHC9TSDKhSGmNQrSIGrPI9DCAYBsSDIQxGBWIoB0SeEJoncsATyPzHAZEDNEx9FQQahf3DAff2uBsDa18pKGaZIwaaLX9d"
1907 + "YD6rlfNmuEomX/8BAAD//wdK4uwAAAAGSURBVAMAVhUTKWG0g3UAAAAASUVORK5CYII=",
1908 FF = "data:image/png;base64,"
1909 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAXklEQVQ4T+2SQQoAIAgEjX7Ww/tZVHoKCrZyj3pUGNZhk5An"
1910 + "UXk1dwNWyb1Ic8OV44asH9KBCqcmPAI1th5+nW4J6cCtRrMKtit3LcAO6cDH5uOEAUQGwiEyhO90hwOflBRVULNh6QAAAABJ"
1911 + "RU5ErkJggg==",
1912 FF_ESR = "data:image/png;base64,"
1913 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAXklEQVQ4T+2SQQoAIAgEjX7Ww/tZVHoKCrZyj3pUGNZhk5An"
1914 + "UXk1dwNWyb1Ic8OV44asH9KBCqcmPAI1th5+nW4J6cCtRrMKtit3LcAO6cDH5uOEAUQGwiEyhO90hwOflBRVULNh6QAAAABJ"
1915 + "RU5ErkJggg==")
1916 public void putImageDataDirty() throws Exception {
1917 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1918 "if (typeof ImageData != 'function') { log('no ctor'); return; }\n"
1919 + " var arr = new Uint8ClampedArray(64);\n"
1920 + " for (var i = 0; i < 32; i += 4) {\n"
1921 + " arr[i + 0] = 0; arr[i + 1] = 190; arr[i + 2] = 3; arr[i + 3] = 255;\n"
1922 + " }\n"
1923 + " for (var i = 32; i < 64; i += 4) {\n"
1924 + " arr[i + 0] = 190; arr[i + 1] = 0; arr[i + 2] = 3; arr[i + 3] = 255;\n"
1925 + " }\n"
1926
1927 + " var imageData = new ImageData(arr, 4, 4);\n"
1928 + " context.putImageData(imageData, 0, 0, 1, 2, 1, 1);\n"
1929 + " context.putImageData(imageData, 4, 4, 0, 2, 2, 2);\n"
1930 + " context.putImageData(imageData, 8, 8, 0, 0, 2, 2);\n"
1931 + " context.putImageData(imageData, 18, 0, 1, 1, 2, 3);\n");
1932 }
1933
1934
1935
1936
1937 @Test
1938 @Alerts(DEFAULT = "data:image/png;base64,"
1939 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABnElEQVR4AayUyyttYRiH1zmjMzinMzh/wmFGRkaM5JIyc5kY"
1940 + "YSADikxFJhK5lMjExGVkqFwyRiHJQImZkSglxADPg/Vte1tk7+x+z3ov3/f+Wpf29zP65t9bw6oEb3s1Cf0PW7FhHTt6IVNj"
1941 + "NBYgD76k2HDxdbfGpkVcpuA3bMEy2CN8rtjQXSNc+mENVqAWNmEDlLlr1RYf8dawgE0+2iGxHY6hAfogH3bhHGbAHuG9YkM3"
1942 + "VLLcAsXQBd4xIaiJrAI6wL3OkKZLQx+hlbZfdJb475X4vVI+yzvWdJKqDZxxljQlDTspu+EKlHcg5pks0RiECXDGWdKUNCyk"
1943 + "nIdYfhB5pJHEEP1SmIMSSPv6Gq7TzFU/GPSdE16k4clLmtP1F1NlEKRhKHJI7pg5giAN/4cq++SCkVMI0rA8VNknfxnZhiAN"
1944 + "D6gaIVvdM7AH+xCk4SjVMPyBbOT7G8gc0NCTZJqFVfiqqX8Cb8RZxlLS0Mr/pSdJ2hdzIYMH6msYh6TzM4oNWY80bY6iyPPv"
1945 + "hngJPtYt8Qzs7RDroQcS9QQAAP//GDiSeAAAAAZJREFUAwBHcUv73HC01wAAAABJRU5ErkJggg==",
1946 FF = "data:image/png;base64,"
1947 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABgUlEQVQ4T62UuS9FQRSH3/MfWEIs0SoUtkhEQ6NBgiglKqIQ"
1948 + "nUQiYkskiKVQo6MRa9Q0hALR6RSWWGLXUOD7vcxNzrt5uO/lnuTLZOae+e6ZO3cmGgk5oiH7Ip6wBvEI1PpesEe/CLKCvthW"
1949 + "uOOku7Tp0APtoH4J1MHzf2IrVJXjcAZN8AYHcAFVUAHLMAiXv4mtsJKkbZiFfVet/QRbjJ1CMYzCSSKpJ5RsGCad6Nu1Wq6N"
1950 + "a1fpPO0AHPulEha6qlrdQyWlQWmCCnIZO4I8WIduuLJ5Ei7CKmhJQaKRpC5YgAbo8AsfGcgwg1pu0PggMRtevQmqcAL6UhQ+"
1951 + "MK8T1sISyjME2vVYqMIp6E2xQi25H2bCqvAWkTZowwqf6OioeZHMpnwyKRPerVDbvwn6rxTJCJfIbzPFxL5hAcxBS5LCc/Kr"
1952 + "4cYvVL8MxqA+YIUv5Oky0dmOC3s5lPNEN4lumr9CR03H9DBRkv/GzidpGprhHnQKvuAOcmAF9IvFLdOKfwCGhFAVxZXYrgAA"
1953 + "AABJRU5ErkJggg==",
1954 FF_ESR = "data:image/png;base64,"
1955 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABgUlEQVQ4T62UuS9FQRSH3/MfWEIs0SoUtkhEQ6NBgiglKqIQ"
1956 + "nUQiYkskiKVQo6MRa9Q0hALR6RSWWGLXUOD7vcxNzrt5uO/lnuTLZOae+e6ZO3cmGgk5oiH7Ip6wBvEI1PpesEe/CLKCvthW"
1957 + "uOOku7Tp0APtoH4J1MHzf2IrVJXjcAZN8AYHcAFVUAHLMAiXv4mtsJKkbZiFfVet/QRbjJ1CMYzCSSKpJ5RsGCad6Nu1Wq6N"
1958 + "a1fpPO0AHPulEha6qlrdQyWlQWmCCnIZO4I8WIduuLJ5Ei7CKmhJQaKRpC5YgAbo8AsfGcgwg1pu0PggMRtevQmqcAL6UhQ+"
1959 + "MK8T1sISyjME2vVYqMIp6E2xQi25H2bCqvAWkTZowwqf6OioeZHMpnwyKRPerVDbvwn6rxTJCJfIbzPFxL5hAcxBS5LCc/Kr"
1960 + "4cYvVL8MxqA+YIUv5Oky0dmOC3s5lPNEN4lumr9CR03H9DBRkv/GzidpGprhHnQKvuAOcmAF9IvFLdOKfwCGhFAVxZXYrgAA"
1961 + "AABJRU5ErkJggg==")
1962 public void clip() throws Exception {
1963 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1964 "if (typeof ImageData != 'function') { log('no ctor'); return; }\n"
1965 + "context.moveTo(2,2); context.lineTo(5,8); context.lineTo(8,2);"
1966 + "context.arc(8, 12, 8, 0, 2 * Math.PI); context.stroke();"
1967 + "context.clip(); context.fillRect(4, 9, 19, 14);\n");
1968 }
1969
1970
1971
1972
1973 @Test
1974 @Alerts(DEFAULT = "data:image/png;base64,"
1975 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAuElEQVR4AeySzQ3CMAyFcUdALAMTUQmmAYmeGYQjbMEEiAUq"
1976 + "NbwgXn4OJnKgPbXKk+s072vspFn8+ZkO6JbHtVsdTtYC9B027grYFjINHWjCxMUzMPai9m28HuLO9ZCj5LEXL+aF2LOidId3"
1977 + "TlbE4E2BlwoQLcEbgYOc+dUcE28AynN3A6iDrKP7eN++APQZDqGFssNg/iW23ktlQE7+EnXgIBuAzS1Qgb4vKDMrBz8oDhVY"
1978 + "dCoLXgAAAP//d8fzjgAAAAZJREFUAwAZhFYp0xyimQAAAABJRU5ErkJggg==",
1979 FF = "data:image/png;base64,"
1980 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAyUlEQVQ4T2NkoDJgpLJ5DDgN/C84UY6BiTGS8W1eJymW4jZQ"
1981 + "ZPJ/kEGMb3JJ8sWogYjg/z/8w/C/8OQPwFTJD/M0LLnAvI43Lf5n+Mj4NlcAnMxgCoEaLwDZ+mQZyPD/LOObPBNUA4UndTAw"
1982 + "MpaTZeD//53AHFWBaiDfRFUGVsZrQENZkHMIQS////+H4TezJuOn7DsoBoI4/4UmzQDm33SSDPz3fybju7wMuM9wBfYQSIfg"
1983 + "4ospApgcuqhSfJFiCLJakso6YiwBAMSpYxVbkG1GAAAAAElFTkSuQmCC",
1984 FF_ESR = "data:image/png;base64,"
1985 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAyUlEQVQ4T2NkoDJgpLJ5DDgN/C84UY6BiTGS8W1eJymW4jZQ"
1986 + "ZPJ/kEGMb3JJ8sWogYjg/z/8w/C/8OQPwFTJD/M0LLnAvI43Lf5n+Mj4NlcAnMxgCoEaLwDZ+mQZyPD/LOObPBNUA4UndTAw"
1987 + "MpaTZeD//53AHFWBaiDfRFUGVsZrQENZkHMIQS////+H4TezJuOn7DsoBoI4/4UmzQDm33SSDPz3fybju7wMuM9wBfYQSIfg"
1988 + "4ospApgcuqhSfJFiCLJakso6YiwBAMSpYxVbkG1GAAAAAElFTkSuQmCC")
1989 public void clipWindingEvenOdd() throws Exception {
1990 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1991 "if (typeof ImageData != 'function') { log('no ctor'); return; }\n"
1992 + "context.rect(6, 2, 2, 16); context.rect(2, 10, 16, 5); context.clip('evenodd');"
1993 + "context.beginPath(); context.arc(10, 10, 8, 0, 2 * Math.PI);"
1994 + "context.fillStyle = 'deeppink';context.fill();\n");
1995 }
1996
1997
1998
1999
2000 @Test
2001 @Alerts(DEFAULT = "data:image/png;base64,"
2002 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABKElEQVR4AeyTsS4EURRAz1OoSHR2fYBOKBQKhUah8AEKUfoA"
2003 + "yW6iQSOxn+ELthOJBIVSYXXbSmw0IrIainGuWLv7KplVkJjck/vem/vOvLmZGQP2gXO5kD2JeWl6wktFITwwl5bF3hCafy7+"
2004 + "lLA2C0VTXqSQet4IF9flWopPanlN/spTFkzLjKwprZrzeHJhUhZlSfGE+Sty4QmkrnSAWwmxaShOE1jDvavPMhS5ME7lE4s4"
2005 + "2ZyVscn0/QhhfHcr0FFwU4G3R7crqkvadhz3P7CpG8ewGmvzsHMFCxXYjXmPEDrGVkRq3cH4ISQ/8Eab7GpAewv0QAu6y9B8"
2006 + "gNfBshDG0/1TqvZs88ybMS9NCHVExInSUYxGYUA4iqa/91/Y70XZ0e/v4TsAAAD//xxf2nEAAAAGSURBVAMAiWBcKTpY08sA"
2007 + "AAAASUVORK5CYII=",
2008 FF = "data:image/png;base64,"
2009 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA40lEQVQ4T2NkYGBoAGJ7IGYE4gNATBEAGQIC9VADQYZTBEa2"
2010 + "gZNNGRhyvgIDMAwaiJnAeJqBHKD/GRiygPwEIAaqBYMeYJiVIqtBCkOwgUZAQ6QgCv4D9TPC5CEiUAOBgmZAtgpQ6DCQLYnP"
2011 + "QKALGcOhBp4A0tFA/l2YBqiBjkBDQqEWPCdkIDEuJGggKA0CE3aVNANDOhcDg5wMxEVTtwCD4Ayyd6YBw86cgUHRmIFhFUj8"
2012 + "EwNDCR8wHNG93IAwMPAXUM8aZAWkstEjBSkMSTUKon5k5xSw90ERRBEYDUPKwxAA2I49lItsoRgAAAAASUVORK5CYII=",
2013 FF_ESR = "data:image/png;base64,"
2014 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA40lEQVQ4T2NkYGBoAGJ7IGYE4gNATBEAGQIC9VADQYZTBEa2"
2015 + "gZNNGRhyvgIDMAwaiJnAeJqBHKD/GRiygPwEIAaqBYMeYJiVIqtBCkOwgUZAQ6QgCv4D9TPC5CEiUAOBgmZAtgpQ6DCQLYnP"
2016 + "QKALGcOhBp4A0tFA/l2YBqiBjkBDQqEWPCdkIDEuJGggKA0CE3aVNANDOhcDg5wMxEVTtwCD4Ayyd6YBw86cgUHRmIFhFUj8"
2017 + "EwNDCR8wHNG93IAwMPAXUM8aZAWkstEjBSkMSTUKon5k5xSw90ERRBEYDUPKwxAA2I49lItsoRgAAAAASUVORK5CYII=")
2018 @HtmlUnitNYI(FF_ESR = "data:image/png;base64,"
2019 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAcElEQVR42mNgYGD4T2UMBygcaoCRaeB/EJ4NxO+AOBCPopVA"
2020 + "/AWIA4gxEKjovw8QX8ajyAeIg4D4FzEGsgExOxB/waOIGcYmxkAPIPYG4nO4FGFj4zNwGRC/BGJ3cg1ESuX/qZ1T/v8fzSmj"
2021 + "Bg4HAwGGsHedCdecqgAAAABJRU5ErkJggg==",
2022 FF = "data:image/png;base64,"
2023 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAcElEQVR42mNgYGD4T2UMBygcaoCRaeB/EJ4NxO+AOBCPopVA"
2024 + "/AWIA4gxEKjovw8QX8ajyAeIg4D4FzEGsgExOxB/waOIGcYmxkAPIPYG4nO4FGFj4zNwGRC/BGJ3cg1ESuX/qZ1T/v8fzSmj"
2025 + "Bg4HAwGGsHedCdecqgAAAABJRU5ErkJggg==")
2026 @DisabledOnOs(OS.LINUX)
2027 public void fillTextAndTransform() throws Exception {
2028 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
2029 "if (typeof ImageData != 'function') { log('no ctor'); return; }\n"
2030 + "context.moveTo(0, 0);\n"
2031 + " context.lineTo(20, 0);\n"
2032 + " context.moveTo(2, 0);\n"
2033 + " context.lineTo(2, 20);\n"
2034 + " context.moveTo(0, 10);\n"
2035 + " context.lineTo(20, 10);\n"
2036 + " context.stroke();\n"
2037
2038 + " context.fillStyle = 'blue';\n"
2039 + " context.fillText('p', 2, 10);\n"
2040
2041 + " context.fillStyle = 'red';\n"
2042 + " context.setTransform(1.0, 0.0, -0.0, 1.0, 11.0, 10.0);\n"
2043 + " context.fillText('n', 0, 0);\n");
2044 }
2045
2046
2047
2048
2049 @Test
2050 @Alerts(DEFAULT = "data:image/png;base64,"
2051 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAxUlEQVR4AbSOCw7DIAhAze6/A22X23gkElSktGmXPqd8Hrza"
2052 + "zb9HhR9Z9ncReqW1Nb/hWyPXDuv1wq+4QP5OffSANnkhAZvEo8jQMwuZBEVXoxasfhaSGCYSSFhqIyETIfFoihrQRz8iIbll"
2053 + "MsGJsGYnZDJMDnuSAwv0y05IPtyAhLDNZUI2AOkfPmIwBPsjE1ITbRLFqFWOhGwCWiwHd5Br/B0J6fIb+Tu5hYqQjTyLxAcq"
2054 + "QurZDLinVIV9w1RGsiqktsQfAAD///+F28sAAAAGSURBVAMA3NsuKRKJJt4AAAAASUVORK5CYII=",
2055 FF = "data:image/png;base64,"
2056 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAj0lEQVQ4T63USw6AIAxFUViZunJxZ7YDCJ9+Hg2dGDG9nJE5"
2057 + "HZ58uJf6YKH4Fbzgo72bd/sgH7zB4EN7DBqC/B5RNp0UjCibTgruKgedFtxRDjotiCoXnRVElIvOCnpKUecFLaWo84KaUtUh"
2058 + "QUmp6pDgrDR1aLBXmjo0WJX85Lg56P+whsqpoNdp31EhHPwBPdMeFdd8Eu8AAAAASUVORK5CYII=",
2059 FF_ESR = "data:image/png;base64,"
2060 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAj0lEQVQ4T63USw6AIAxFUViZunJxZ7YDCJ9+Hg2dGDG9nJE5"
2061 + "HZ58uJf6YKH4Fbzgo72bd/sgH7zB4EN7DBqC/B5RNp0UjCibTgruKgedFtxRDjotiCoXnRVElIvOCnpKUecFLaWo84KaUtUh"
2062 + "QUmp6pDgrDR1aLBXmjo0WJX85Lg56P+whsqpoNdp31EhHPwBPdMeFdd8Eu8AAAAASUVORK5CYII=")
2063 public void pathFill() throws Exception {
2064 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
2065 "context.moveTo(2, 2);\n"
2066 + " context.lineTo(10, 18);\n"
2067 + " context.lineTo(18, 2);\n"
2068 + " context.closePath();\n"
2069 + " context.fill();\n");
2070 }
2071
2072
2073
2074
2075 @Test
2076 @Alerts(DEFAULT = "data:image/png;base64,"
2077 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABGklEQVR4AbST3UoCURSFo9frYeoioiCI6CG6qIuIiOgyioJU"
2078 + "/AUFL3wDRUFRwQtfQL91wOHMzJ7jGVBZ33bPPmsW54zO6cmBP0cN7LLZTSSv+Ez5O/wxHfnhnNEtmPIDf01HfnjPaAym/MA+"
2079 + "jjaEpFM8hgx+oHzfKgHOWLOe8wtzp2xg3U3LFR1fj8HdlQ3sMa1BGT1gHoJTNlDDqkok7/ieIZEV2EhWw82U5WtIyQrs4Ngd"
2080 + "+4++SHcsTCAlK1AG7XJNcwP/kNUng9RRuXYqCtSvfYljALqZr0RLugswVRTYxP0EUkXF44p+BqaKAn3ziIsvkD4oyZ+YPqeY"
2081 + "QN3UoqzgHIIqE6iwRTCNxdhAvUFv+PcqNnBv0M6wBQAA//+T4a7rAAAABklEQVQDAL2YOinNYVJ0AAAAAElFTkSuQmCC",
2082 FF = "data:image/png;base64,"
2083 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA3ElEQVQ4T62UYQrCMAyFu8MIQ397Epm30CvofRyeQ/C3CB7C"
2084 + "M/gCnaRZ0r3CAmWwZl+Tt5d2aeXoVuYlDXwBviUPuCHv6OVq4BUJFwL4Rc4GS56z0ECpTqpcCqlMKnTDavjJp0f5d2wcaida"
2085 + "INu2Zf41tUC2bQ0sNPVss9S2ra7Q1AO2tD3T1AOybbv2iSbljb56rCfWPvirA96Pdi8CisHP2UIPx0qhfSKgtL3LBraa0pMS"
2086 + "+dVq2jQpEXSyUvOkREBp+5S1dC+F6UP2PtSa1ka5uA+riewmWyHLSz+ljSYVkapvPQAAAABJRU5ErkJggg==",
2087 FF_ESR = "data:image/png;base64,"
2088 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA3ElEQVQ4T62UYQrCMAyFu8MIQ397Epm30CvofRyeQ/C3CB7C"
2089 + "M/gCnaRZ0r3CAmWwZl+Tt5d2aeXoVuYlDXwBviUPuCHv6OVq4BUJFwL4Rc4GS56z0ECpTqpcCqlMKnTDavjJp0f5d2wcaida"
2090 + "INu2Zf41tUC2bQ0sNPVss9S2ra7Q1AO2tD3T1AOybbv2iSbljb56rCfWPvirA96Pdi8CisHP2UIPx0qhfSKgtL3LBraa0pMS"
2091 + "+dVq2jQpEXSyUvOkREBp+5S1dC+F6UP2PtSa1ka5uA+riewmWyHLSz+ljSYVkapvPQAAAABJRU5ErkJggg==")
2092 public void pathFillTransform() throws Exception {
2093 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
2094 " context.moveTo(2, 2);\n"
2095 + " context.lineTo(6, 14);\n"
2096 + " context.lineTo(14, 2);\n"
2097 + " context.closePath();\n"
2098
2099 + " context.setTransform(1.0, 0.0, 0.0, 1.0, 4.0, 4.0);\n"
2100 + " context.moveTo(2, 2);\n"
2101 + " context.lineTo(6, 14);\n"
2102 + " context.lineTo(14, 2);\n"
2103 + " context.closePath();\n"
2104
2105 + " context.fill();\n");
2106 }
2107
2108
2109
2110
2111 @Test
2112 @Alerts(DEFAULT = "data:image/png;base64,"
2113 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABBElEQVR4AbSRsRHCMAxFBXPSsAIrQQ8NJRULwBwZIvznO/mc"
2114 + "WDIpgNOPiSQ/9MXefvz5K/ClYeeNOqsvjHbCW9jRJyelTlIYLfAadvRJYED7ijIt8K13pCONiypIRxwtkI5qO1noQUueA9Wd"
2115 + "roHVdiXzM2NhnzWUrjUQy8gqubQNH6edGdDStAaSLMNBRSQGugi22GkErMMVck5jqmrV2yIggyF7mt29MTgXVr0eAakx3PQw"
2116 + "O+qlwHW20Vn1YgbENnawBdz7OclR43unDMhUvmzg7cXQqjdkQK+b/kXgiFxqlSL6CqRJwvbQqnpKbAVie2i10PTYBMS25DvV"
2117 + "tTw2AfPrfeUDAAD//0zqw3cAAAAGSURBVAMAkVVLKYjWD1YAAAAASUVORK5CYII=",
2118 FF = "data:image/png;base64,"
2119 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA7UlEQVQ4T62U0Q3CMAxE3WEq+OSTGZiADsEMMA5doCPACDAF"
2120 + "K8DZaqLUtYlBqVRVSk7PubPTjho/XWMelcAn4JtggRG6o6UtgRcIzgHgC5oeL39XTwncYvcRAA7QXD2dzrBm27WaCmhgtl0j"
2121 + "qxOOAEmmGphtRwOds+wBkkytsZHDRQOFdgAkZ2oBf7GdrXoZ8nrUtoxPsvoNyHtie0803YkOzogsrNaAbPvEJ3gT3RjudVUX"
2122 + "8+4y297xAAOoG25arZ0wFwZQN9y0GgayENA056uuRi0vdLNtyVR39V+gZFoOsNN586Z42tB68z/2B2u6MhWr0Q5cAAAAAElF"
2123 + "TkSuQmCC",
2124 FF_ESR = "data:image/png;base64,"
2125 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA7UlEQVQ4T62U0Q3CMAxE3WEq+OSTGZiADsEMMA5doCPACDAF"
2126 + "K8DZaqLUtYlBqVRVSk7PubPTjho/XWMelcAn4JtggRG6o6UtgRcIzgHgC5oeL39XTwncYvcRAA7QXD2dzrBm27WaCmhgtl0j"
2127 + "qxOOAEmmGphtRwOds+wBkkytsZHDRQOFdgAkZ2oBf7GdrXoZ8nrUtoxPsvoNyHtie0803YkOzogsrNaAbPvEJ3gT3RjudVUX"
2128 + "8+4y297xAAOoG25arZ0wFwZQN9y0GgayENA056uuRi0vdLNtyVR39V+gZFoOsNN586Z42tB68z/2B2u6MhWr0Q5cAAAAAElF"
2129 + "TkSuQmCC")
2130 public void pathFillTransform2() throws Exception {
2131 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
2132 " context.beginPath();\n"
2133 + " context.moveTo(2, 2);\n"
2134 + " context.lineTo(6, 14);\n"
2135 + " context.lineTo(14, 2);\n"
2136 + " context.closePath();\n"
2137 + " context.fill();\n"
2138
2139 + " context.setTransform(1.0, 0.0, 0.0, 1.0, 4.0, 4.0);\n"
2140 + " context.fillStyle = 'red';"
2141 + " context.beginPath();\n"
2142 + " context.moveTo(2, 2);\n"
2143 + " context.lineTo(6, 14);\n"
2144 + " context.lineTo(14, 2);\n"
2145 + " context.closePath();\n"
2146 + " context.fill();\n");
2147 }
2148
2149
2150
2151
2152 @Test
2153 @Alerts(DEFAULT = "data:image/png;base64,"
2154 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAe0lEQVR4AeyTWwrAIAwEJz15bm43pqUPECqI/nRhVER0iLox"
2155 + "OP+GKqhTuENf5tWwOFTUFfHVc4KhYwRkTCUNJBmiIudb7QTD42gDC+jMPMNLrIqGbEVFLHeudTlaYZgnv1tzCHA9g4DMekOj"
2156 + "cfthKdYbcsZ5/KhzerjhDgAA//9EkkqJAAAABklEQVQDACUWJCWDyd5BAAAAAElFTkSuQmCC",
2157 FF = "data:image/png;base64,"
2158 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAeklEQVQ4T9WTUQ7AQAREubmbqzS0pdHsCh/dT5K3YwaE5ofN"
2159 + "PPgjkICdDbQ3xXvkKSCTj0t+XvI7VdgHVGFi5OklBkul8qk0bbYDbwfZp15VOAj0aZsVVo3pL63CEzkGxLCnoBdVVtgGvMaP"
2160 + "J6qNbYVzQCMHpXWFCfAAXsokEVEKzTkAAAAASUVORK5CYII=",
2161 FF_ESR = "data:image/png;base64,"
2162 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAeklEQVQ4T9WTUQ7AQAREubmbqzS0pdHsCh/dT5K3YwaE5ofN"
2163 + "PPgjkICdDbQ3xXvkKSCTj0t+XvI7VdgHVGFi5OklBkul8qk0bbYDbwfZp15VOAj0aZsVVo3pL63CEzkGxLCnoBdVVtgGvMaP"
2164 + "J6qNbYVzQCMHpXWFCfAAXsokEVEKzTkAAAAASUVORK5CYII=")
2165 public void saveRestore() throws Exception {
2166 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
2167 " context.fillStyle = 'green';\n"
2168 + " context.save();\n"
2169 + " context.fillRect(4, 4, 4, 4);\n"
2170
2171 + " context.fillStyle = 'red';\n"
2172 + " context.fillRect(6, 6, 4, 4);\n"
2173 + " context.save();\n"
2174
2175 + " context.fillStyle = 'blue';\n"
2176 + " context.fillRect(8, 8, 4, 4);\n"
2177
2178 + " context.restore();\n"
2179 + " context.fillRect(12, 12, 4, 4);\n"
2180
2181 + " context.restore();\n"
2182 + " context.fillRect(14, 14, 4, 4);\n"
2183
2184 + " context.restore();\n"
2185 + " context.fillRect(16, 16, 4, 4);\n");
2186 }
2187
2188
2189
2190
2191 @Test
2192 @Alerts(DEFAULT = "data:image/png;base64,"
2193 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA8ElEQVR4AeyQMYoCQRREH7LZIrvBHmE33lDYZJncQG/gIRRM"
2194 + "jEwEPYQ30MBcTARDYz2CgSJmBlbJTGAzA92YOvyC6qrfD6ZrPH6Zjv1c9rJpUwDrX7D6hlkXhpa9M+HqUvTcgbq46MDfDj7G"
2195 + "8GbZO3MXTdNiTco+4dcQ+Ydx5k5hJkWNgY0WvFdt512jqg9zA8PsqbOBmzlcqih5t6nqw9zA5RG2PbiGpTN3ypdS1BjIAZpT"
2196 + "WP/AyRDL3pm7KFK+dAfKn3Xxfw/tCQwse2fupOgpgMUF/9pIB8teNm1CYNrtku0XsORREqPXGyY+WMn6DQAA//9HegNzAAAA"
2197 + "BklEQVQDALe2MilY1lPyAAAAAElFTkSuQmCC",
2198 FF = "data:image/png;base64,"
2199 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABF0lEQVQ4T+2SvUoDQRSFv5SC5UIUK30ACUFIbyws4wMsBkO6"
2200 + "RJ9AiBhUsEqvstoKVgELwdRa5cc6pTbGLqTUM+saNsvGHUljkYFlmDn3fnvPvZNicmV13AiunrW3I3riMfUTkYYT0dwlcMzd"
2201 + "G7x3wNN+mEgJBfjAZTjdhsoVLIaTd2HYhPMPOLKFGmB2C24fYC0uKQ/9R9iR1rWBGmB5DxqXsBCXUIKRKq9KU0jy8oGy1vCm"
2202 + "AKWNbmBfcRfJODDAjCzfyfJqXMKmLLegIK1nC2QF6urVwXVkKK6Gcg9nA+k2MBMzfjaa9PE6FLU7n9/PZvAim69Qs4VNAIMk"
2203 + "McnpM8wnW5vhH44r/EsVv8XOgbN3ct7Df9jDL+YBMhUCa42EAAAAAElFTkSuQmCC",
2204 FF_ESR = "data:image/png;base64,"
2205 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABF0lEQVQ4T+2SvUoDQRSFv5SC5UIUK30ACUFIbyws4wMsBkO6"
2206 + "RJ9AiBhUsEqvstoKVgELwdRa5cc6pTbGLqTUM+saNsvGHUljkYFlmDn3fnvPvZNicmV13AiunrW3I3riMfUTkYYT0dwlcMzd"
2207 + "G7x3wNN+mEgJBfjAZTjdhsoVLIaTd2HYhPMPOLKFGmB2C24fYC0uKQ/9R9iR1rWBGmB5DxqXsBCXUIKRKq9KU0jy8oGy1vCm"
2208 + "AKWNbmBfcRfJODDAjCzfyfJqXMKmLLegIK1nC2QF6urVwXVkKK6Gcg9nA+k2MBMzfjaa9PE6FLU7n9/PZvAim69Qs4VNAIMk"
2209 + "McnpM8wnW5vhH44r/EsVv8XOgbN3ct7Df9jDL+YBMhUCa42EAAAAAElFTkSuQmCC")
2210 public void imageOnLoad() throws Exception {
2211 final String html = DOCTYPE_HTML
2212 + "<html><head>\n"
2213 + "<script>\n"
2214 + LOG_TEXTAREA_FUNCTION
2215 + " function test() {\n"
2216 + " var img = new Image();\n"
2217 + " img.onload = function() {\n"
2218 + " var canvas = document.createElement('canvas');\n"
2219 + " canvas.width = 20;\n"
2220 + " canvas.height = 20;\n"
2221 + " var context = canvas.getContext('2d');\n"
2222 + " context.drawImage(img, 0, 0);\n"
2223
2224 + " log(canvas.toDataURL());\n"
2225 + " }\n"
2226
2227 + " img.src = 'data:image/svg+xml,"
2228 + "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" "
2229 + "overflow=\"hidden\" width=\"10\" height=\"10\">"
2230 + " <circle cx=\"5\" cy=\"5\" r=\"4\" stroke=\"black\" stroke-width=\"1\" fill=\"red\" />"
2231 + "</svg>';"
2232 + " }\n"
2233 + "</script>\n"
2234 + "</head>\n"
2235 + "<body onload='test()'>\n"
2236 + LOG_TEXTAREA
2237 + "</body></html>";
2238
2239 loadPageVerifyTextArea2(html);
2240 }
2241 }