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.BrowserRunner;
23 import org.htmlunit.junit.annotation.Alerts;
24 import org.htmlunit.junit.annotation.HtmlUnitNYI;
25 import org.htmlunit.util.MimeType;
26 import org.junit.Test;
27 import org.junit.runner.RunWith;
28
29
30
31
32
33
34
35
36
37 @RunWith(BrowserRunner.class)
38 public class CanvasRenderingContext2DTest extends WebDriverTestCase {
39
40
41
42
43 @Test
44 @Alerts("done")
45 public void test() throws Exception {
46 final String html =
47 "<html><head><script>\n"
48 + LOG_TEXTAREA_FUNCTION
49 + "function test() {\n"
50 + " var canvas = document.getElementById('myCanvas');\n"
51 + " try {\n"
52 + " var ctx = canvas.getContext('2d');\n"
53 + " ctx.fillStyle = 'rgb(200,0,0)';\n"
54 + " ctx.fillRect(10, 10, 55, 50);\n"
55 + " ctx.fillStyle = 'rgba(0, 0, 200, 0.5)';\n"
56 + " ctx.fillRect(30, 30, 55, 50);\n"
57 + " ctx.drawImage(canvas, 1, 2);\n"
58 + " ctx.drawImage(canvas, 1, 2, 3, 4);\n"
59 + " ctx.drawImage(canvas, 1, 1, 1, 1, 1, 1, 1, 1);\n"
60 + " ctx.translate(10, 10);\n"
61 + " ctx.scale(10, 10);\n"
62 + " ctx.fillRect(30, 30, 55, 50);\n"
63 + " ctx.beginPath();\n"
64 + " ctx.moveTo(0, 10);\n"
65 + " ctx.lineTo(10, 10);\n"
66 + " ctx.quadraticCurveTo(0, 10, 15, 10);\n"
67 + " ctx.closePath();\n"
68 + " ctx.rotate(1.234);\n"
69 + " log('done');\n"
70 + " } catch(e) { logEx(e); }\n"
71 + "}\n"
72 + "</script>\n"
73 + "</head>\n"
74 + "<body onload='test()'>\n"
75 + " <canvas id='myCanvas'></canvas></body>\n"
76 + LOG_TEXTAREA
77 + "</html>";
78 loadPageVerifyTextArea2(html);
79 }
80
81
82
83
84 @Test
85 @Alerts({"addHitRegion", "drawCustomFocusRing", "drawSystemFocusRing", "removeHitRegion",
86 "scrollPathIntoView", "36 methods"})
87 public void methods() throws Exception {
88 final String[] methods = {"addHitRegion", "arc", "arcTo", "beginPath", "bezierCurveTo", "clearRect", "clip",
89 "closePath", "createImageData", "createLinearGradient", "createPattern", "createRadialGradient",
90 "drawImage", "drawCustomFocusRing", "drawSystemFocusRing", "ellipse", "fill", "fillRect", "fillText",
91 "getImageData", "getLineDash", "isPointInPath", "lineTo", "measureText", "moveTo", "putImageData",
92 "quadraticCurveTo", "rect", "removeHitRegion", "restore", "rotate", "save", "scale", "scrollPathIntoView",
93 "setLineDash", "setTransform", "stroke", "strokeRect", "strokeText", "transform", "translate" };
94 final String html = DOCTYPE_HTML
95 + "<html><body>\n"
96 + "<canvas id='myCanvas'></canvas>\n"
97 + LOG_TEXTAREA
98 + "<script>\n"
99 + LOG_TEXTAREA_FUNCTION
100 + " var canvas = document.getElementById('myCanvas');\n"
101 + " var nbMethods = 0;\n"
102 + " var methods = ['" + String.join("', '", methods) + "'];\n"
103 + " try {\n"
104 + " var ctx = canvas.getContext('2d');\n"
105 + " for (var i = 0; i < methods.length; i++) {\n"
106 + " if (typeof ctx[methods[i]] == 'function')\n"
107 + " nbMethods++;\n"
108 + " else\n"
109 + " log(methods[i]);\n"
110 + " }\n"
111 + " log(nbMethods + ' methods');\n"
112 + " } catch(e) { logEx(e); }\n"
113 + "</script></body></html>";
114
115 loadPageVerifyTextArea2(html);
116 }
117
118 private void drawImage(final String png, final String canvasSetup, final String drawJS) throws Exception {
119 try (InputStream is = getClass().getResourceAsStream(png)) {
120 final byte[] directBytes = IOUtils.toByteArray(is);
121 getMockWebConnection().setResponse(URL_SECOND, directBytes, 200, "ok",
122 MimeType.IMAGE_PNG, Collections.emptyList());
123 getMockWebConnection().setDefaultResponse("Test");
124 }
125
126 final String html = DOCTYPE_HTML
127 + "<html><head>\n"
128 + "<script>\n"
129 + LOG_TEXTAREA_FUNCTION
130 + " function test() {\n"
131 + " var img = document.getElementById('myImage');\n"
132 + " var canvas = document.createElement('canvas');\n"
133 + canvasSetup
134 + " if (canvas.getContext) {\n"
135 + " var context = canvas.getContext('2d');\n"
136 + drawJS
137 + " log(canvas.toDataURL());\n"
138 + " }\n"
139 + " }\n"
140 + "</script>\n"
141 + "</head><body onload='test()'>\n"
142 + " <img id='myImage' src='" + URL_SECOND + "'>\n"
143 + LOG_TEXTAREA
144 + "</body></html>";
145
146 loadPageVerifyTextArea2(html);
147 }
148
149
150
151
152 @Test
153 @Alerts(DEFAULT = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAutJREFUO"
154 + "E99k19sU1Ucxz/3du1du94tLcE1IjIUHlASRcEOtnVccWyIJWRmuhD02cBQlMTnvfsiIUQy9uIDCf+hWYFN3Q0mBAIJSCQy"
155 + "yIgORMtGHe1u71273T/m3qYN2wPn5OSc3znn90nO+X2/AsDF8XGp5vGT/QFJahBFEVEE0T14vtkwndfuf9Sp/Pj8tuAGF0Z"
156 + "GExveXferaVoIgoAggOD28qI8Ow6iKHD1xs3Dya4P+ioQD3AilVbaNzar86aF6AEqo5xcGQG/D8uyuHzlxnfdyc5v3VwPcC"
157 + "Y1rLRu2qDOmyaiIHoJmYJJtlS+EpFgZURC1wsYuo7P53P+fPRwfdeWLbeqgLaW91T3CaYNV/8tUQzIyLVBHBxkDMyiwVuxE"
158 + "HUBHwIOw+qVZG/39nQVkHABls21v3UyVpBwnUy0XiImWQTMWXIFg4fPSux8cwn+mhpSl0YXAVrj6jNjjsHbOfyhMCuW1LNU"
159 + "riXeKDKllZjRNCayM7yzPMrrS8OkLv6yENDeGlfHJgucvJcnFAoRDtaxIiLR0RQk7LO5l8lx7PcpNq+M0vVGI+cv/LwQsLk"
160 + "trv6R0bj56D86VkcY+Qf+0mws2+bjVUG0gs7315/wdUsT29bGOJdeDEg0q5pR4sDQGH3rGjhyd47peQHHceh6VWIiq3F7qs"
161 + "jgJ2/zWmMDZxcA0sOK0tKszhaLnLo+jjpR4Lenc95ngYNgWZ46e9ZEOLB1LXK9TOrST8meHdUqpBWlvU21TItsNsvZOxlOj"
162 + "+WYnjWxbYew5KN7TZTP17/CspdjSAGJ80MjyZ5KGY+dSCkfdiqqKxvbtjEMg+kZjQdPdWwHVr0kE4vKyLJMwO9HFH0cP51K"
163 + "7u7tLuvg0A9H3/9s16ejrgkqUva07jgIokDZYGJVpa4nDh4+suObL/cOeYB4IrF63xd7ByORSF3Vad5J2ZMLnClAbiY/u7/"
164 + "vqz2Tk4/veNf6+/tr8vm8f7GDXxTrum4ODAzM/w8TKTogggbXQgAAAABJRU5ErkJggg==",
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 + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAA1JREFUGFdj+M/A8B8ABQAB/6Zcm10A"
262 + "AAAASUVORK5CYII=",
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 + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAA1JREFUGFdj+M/A8B8ABQAB/6Zcm10A"
284 + "AAAASUVORK5CYII=",
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+AAAAAXNSR0IArs4c6QAAABdJREFUGFdj/M/A8J+RgYGRAQrgDOI"
301 + "FAIPmAgWeg1g2AAAAAElFTkSuQmCC",
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+AAAAAXNSR0IArs4c6QAAABpJREFUGFdjZEADjFgF/jMw/GdkYABL"
320 + "YqgAADfmAgXboMAzAAAAAElFTkSuQmCC",
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+AAAAAXNSR0IArs4c6QAAAC1JREFUGFc1yNENACAQwlAYxUllU0ep4aL9"
340 + "ap6RMEv4yJKdhJ2oDXQABtqHt76KMBEFpp4gUgAAAABJRU5ErkJggg==",
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 + "iVBORw0KGgoAAAANSUhEUgAAAAIAAAAFCAYAAABvsz2cAAAAAXNSR0IArs4c6QAAACpJREFUGFctyLERACAMxDD/KDTMGbbk0jC"
359 + "KKUClwlQ7RJANwaE5b1YV4buKVA5Xbm45TAAAAABJRU5ErkJggg==",
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+AAAAAXNSR0IArs4c6QAAABdJREFUGFdj/M/A8J+RgYGRAQrgDOI"
378 + "FAIPmAgWeg1g2AAAAAElFTkSuQmCC",
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+AAAAAXNSR0IArs4c6QAAABpJREFUGFdjZEADjFgF/jMw/GdkYABL"
397 + "YqgAADfmAgXboMAzAAAAAElFTkSuQmCC",
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+AAAAAXNSR0IArs4c6QAAACVJREFUGFdj/H+D4T+jBgMjAxQw/mdg+M/I"
416 + "gFfg////jIyMcC0AnzULBWgjtygAAAAASUVORK5CYII=",
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+AAAAAXNSR0IArs4c6QAAABZJREFUGFdj/M/A8J8BCTAic0BswgIAg"
435 + "2sCAzQ3b+cAAAAASUVORK5CYII=",
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 + "iVBORw0KGgoAAAANSUhEUgAAAAIAAAAFCAYAAABvsz2cAAAAAXNSR0IArs4c6QAAACpJREFUGFctyLERACAMxDD/KDTMGbbk0jC"
454 + "KKUClwlQ7RJANwaE5b1YV4buKVA5Xbm45TAAAAABJRU5ErkJggg==",
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+9AAAAAXNSR0IArs4c6QAAAJFJREFUKFONkMENAjEMBNclIBoIH0QF"
473 + "9z0XRA+Re6CgpZM0gO538DM4CaeDV1aRrI0mazuCQUnlzu66Evlh1dox1xpen4QAUkGPMwG49vhbr+EnQC4dhJ9c+UK2pSXm"
474 + "Q0u0BXH/k1hSwl21AjOJVMo2/Qbu93H3oGPI9urTQUL/S39BkmpmINnYwd+JOcc0DL4B84cwC7JlTrYAAAAASUVORK5CYII=",
475 FF = "data:image/png;base64,"
476 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAmElEQVQYV42PzQ3CMAyF7Q2QukC4ICbotR6IHTA7MJC9SRZA"
477 + "4kS5GdsKUWlVCSuS814+/wThz8DkTmbTS4AfnJKHll3TrOAQJmhxRr9cWvt7y6Hdx3MD0Y42yQxXfiZx40Pm0KTv3461FBCi"
478 + "BEgESq19+z56+R/zdWPN4L8+Riyh3LeBIkLMDKoa9hZcF/auew9rfzN6r/AD8z8wC6n68A8AAAAASUVORK5CYII=",
479 FF_ESR = "data:image/png;base64,"
480 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAkUlEQVQYV62PwQ0CMQwE7RIQDYQPooL7nguih8g9UJDpJA2c"
481 + "+AE/s3ai04GExAMrkbPWeLVh+rE4uaO73I3qoil1X7OHlocRIE7Q40x4nIf9ZfTQmPNpgOwHn+1JVW/dse66I7Rg/ubYSqGr"
482 + "SAKzGZXW1vQruP2PI26Y4fYtFEdtocw7QDMTVSX0zn6C3/T/wRfzizALwpK/7gAAAABJRU5ErkJggg==")
483 public void drawImage5ArgumentsStretchX() throws Exception {
484 drawImage("4x6.png",
485 "canvas.width = 10; canvas.height = 10;\n",
486 "context.drawImage(img, 1, 1, 8, 6);\n");
487 }
488
489
490
491
492 @Test
493 @Alerts(DEFAULT = "data:image/png;base64,"
494 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAAXNSR0IArs4c6QAAAFFJREFUKFNjZCASMILUNQg3/K+PbGBoXN7"
495 + "AAKIZpzCAxZEBRGGDwH/7AwYMBx0uMNQ3fACpwq4QpvP/////GxsbGRoaGvArxOdcDJ24FA8FhQDPFBULZWbihAAAAABJRU5Erk"
496 + "Jggg==",
497 FF = "data:image/png;base64,"
498 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAUElEQVQYV2NkIBIwgtTVC9f/b4hsZGhYXs8AohmnMIDFkQFY"
499 + "oKFe4L/9QQOGg/YXGOobP4BUYVcI0/kfCBoaGhgaGxvxK8TnXAyduBQPBYUAzvAVCzcdbJgAAAAASUVORK5CYII=",
500 FF_ESR = "data:image/png;base64,"
501 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAATklEQVQYV2NkIBIwgtQ1CDf8r49sYGhc3sAAohmnMIDFkQFE"
502 + "YYPAf/sDBgwHHS4w1Dd8AKnCrhCm8z8QNDY2AjU24FeIz7kYOnEpHgoKAc8UFQug8KnwAAAAAElFTkSuQmCC")
503 public void drawImage5ArgumentsShrinkY() throws Exception {
504 drawImage("4x6.png",
505 "canvas.width = 10; canvas.height = 10;\n",
506 "context.drawImage(img, 1, 1, 4, 3);\n");
507 }
508
509
510
511
512 @Test
513 @Alerts(DEFAULT = "data:image/png;base64,"
514 + "iVBORw0KGgoAAAANSUhEUgAAAAIAAAAFCAYAAABvsz2cAAAAAXNSR0IArs4c6QAAADhJREFUGFcBLQDS/wEAJv//QPbAAAFAHL/"
515 + "/MAfQAAG/CUD/ECfwAAG/QAj/EBj+AAFAvxn/MN76AI+DEbp3TIWcAAAAAElFTkSuQmCC",
516 FF = "data:image/png;base64,"
517 + "iVBORw0KGgoAAAANSUhEUgAAAAIAAAAFCAYAAABvsz2cAAAANUlEQVQIW2NkUPv/3/7bAQZGe5n9/w3YLjAw7ue0/y+g9gHI"
518 + "sOf4LyD5j4HRYb/Ef4O7vxgAjuARs3OGyksAAAAASUVORK5CYII=",
519 FF_ESR = "data:image/png;base64,"
520 + "iVBORw0KGgoAAAANSUhEUgAAAAIAAAAFCAYAAABvsz2cAAAANElEQVQIW2NkUPv/3+HbAQZGB5n9/w3YLzAw7ud0+C+g/gHI"
521 + "cOD4LyDxDyi1X/K/wb1fDACPgxG6JQ+97QAAAABJRU5ErkJggg==")
522 public void drawImage5ArgumentsStretchImageTooLarge() throws Exception {
523 drawImage("4x6.png",
524 "canvas.width = 2; canvas.height = 5;\n",
525 "context.drawImage(img, 0, 0, 8, 12);\n");
526 }
527
528
529
530
531 @Test
532 @Alerts(DEFAULT = "data:image/png;base64,"
533 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAAXNSR0IArs4c6QAAAFpJREFUKFO10EEKgDAMRNE/R+mm9JbGW4ob"
534 + "jzJiUFetdGM2A+GRwIjJ0aTjD1ht70LVZNL/IoPZgAZXqg0gLrYO5ELm18U1giUiCxjCpx7bTih1m3iXF7xNF57OsB8LLeYw9AAA"
535 + "AABJRU5ErkJggg==",
536 FF = "data:image/png;base64,"
537 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAX0lEQVQYV7WQQQqAMBADE3/SS+kvrb8UL/7EmIp62kovBkJg"
538 + "GXbDEoPiIIc/wCxpI5iFKxFfoQBhddNiO1k6IJV0cMekhJafG5daMdtNXfB5j5u6hUEretk7bODNhOAJzrgfCzJhsNQAAAAA"
539 + "SUVORK5CYII=",
540 FF_ESR = "data:image/png;base64,"
541 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAX0lEQVQYV7WQQQqAMBADE3/SS+kvrb8UL/7EmIp62kovBkJg"
542 + "GXbDEoPiIIc/wCxpI5iFKxFfoQBhddNiO1k6IJV0cMekhJafG5daMdtNXfB5j5u6hUEretk7bODNhOAJzrgfCzJhsNQAAAAA"
543 + "SUVORK5CYII=")
544 public void drawImage5ArgumentsNegativeWidth() throws Exception {
545 drawImage("4x6.png",
546 "canvas.width = 10; canvas.height = 10;\n",
547 "context.drawImage(img, 4, 4, -4, 6);\n");
548 }
549
550
551
552
553
554 @Test
555 @Alerts(DEFAULT = "data:image/png;base64,"
556 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAAXNSR0IArs4c6QAAAFlJREFUKFPFzkEKgDAMRNE/R+mm9JbGW4ob"
557 + "jzJiUChixZ0hZDaPJOJe1fYqVE0mR5+jtwazAA2OVBtAXGxtyIXMt41zBFNEHhrC6w3bTig9/9jD3qT+Uj/CHbu+Hws0CMhTAAAA"
558 + "AElFTkSuQmCC",
559 FF = "data:image/png;base64,"
560 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAX0lEQVQYV8WOQQqAMBADE3/SS+kvrb8UL/7EmJYKRap4M+w2"
561 + "sAxNiLuipI1gFKqjTHt6VoCw+pK8dqYHkAo6uGNSQPHXH5ecMXtb5Dj6quGmbuFoa9ixB3um0l/0I3gCu8YfCw1yrNcAAAAA"
562 + "SUVORK5CYII=",
563 FF_ESR = "data:image/png;base64,"
564 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAX0lEQVQYV8WOQQqAMBADE3/SS+kvrb8UL/7EmJYKRap4M+w2"
565 + "sAxNiLuipI1gFKqjTHt6VoCw+pK8dqYHkAo6uGNSQPHXH5ecMXtb5Dj6quGmbuFoa9ixB3um0l/0I3gCu8YfCw1yrNcAAAAA"
566 + "SUVORK5CYII=")
567 public void drawImage5ArgumentsNegativeHeight() throws Exception {
568 drawImage("4x6.png",
569 "canvas.width = 10; canvas.height = 10;\n",
570 "context.drawImage(img, 4, 6, 4, -6);\n");
571 }
572
573
574
575
576 @Test
577 @Alerts(DEFAULT = "data:image/png;base64,"
578 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAAXNSR0IArs4c6QAAAFxJREFUKFOl0EEKgDAMRNE/R+mm9JbGW4ob"
579 + "jzJiRSjUSsFsZvMIk4jJ0aSjh9n2LpRNTW7TQYPZgAJXqgwgTrYO5ETNr41rBEtErT+Ez3G2XaH03rGFrfnxnsFjT80oHwvhRbeC"
580 + "AAAAAElFTkSuQmCC",
581 FF = "data:image/png;base64,"
582 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAY0lEQVQYV6WQXQqAMAyDE2+yl+EtnbcUX7yJMf7BYJsMLJQ89KNJ"
583 + "S3QWOzmUYJS0EozCpbiZAhQgLJ6MbivHBkgF7dwwKODUz41zSpjcj2Xd+j3OSZ3C1q5qxhzMmR/vaTz2AM0wHwuiBt/PAAAAAElF"
584 + "TkSuQmCC",
585 FF_ESR = "data:image/png;base64,"
586 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAY0lEQVQYV6WQXQqAMAyDE2+yl+EtnbcUX7yJMf7BYJsMLJQ89KNJ"
587 + "S3QWOzmUYJS0EozCpbiZAhQgLJ6MbivHBkgF7dwwKODUz41zSpjcj2Xd+j3OSZ3C1q5qxhzMmR/vaTz2AM0wHwuiBt/PAAAAAElF"
588 + "TkSuQmCC")
589 public void drawImage9Arguments() throws Exception {
590 drawImage("4x6.png",
591 "canvas.width = 10; canvas.height = 10;\n",
592 "context.drawImage(img, 0, 0, img.width, img.height, 4, 2, img.width, img.height);\n");
593 }
594
595
596
597
598 @Test
599 @Alerts(DEFAULT = "data:image/png;base64,"
600 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAAXNSR0IArs4c6QAAAIpJREFUKFNjPBXA/p+BgYFhWgQfiGJY"
601 + "EPGaEcxAA4zrA0zACh8ovGAQ+PCBIXHBF+wKFyQkXGHl4OC2v3ZNVPrtW27Gq1dxKIyP1zaNiDBVkZDIYmNlNWXU0cGuEGTt"
602 + "////HYBU/YMHDxwUFRUJKzxw4ICDo6MjboXYfInha2IUgdRgtQZrOBJrIgAUwCcL+6R7MwAAAABJRU5ErkJggg==",
603 FF = "data:image/png;base64,"
604 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAgklEQVQYV2P8z8Dw/4A9B0NjgwDDQQdOhv+M9xkZsADG/Q4O"
605 + "/z/wf2F4oPCC4aPAF4aGxg/YFTY0NNxXevKEw+HiRQHZV684GB8+xK6wqalJ39/AwERNQiKDg5XVhNHQELtCkHP+//9vD6Qa"
606 + "gNiBEQiwupEkhdhMQBfDag1Oq6lqIgCfzScLcG6H/gAAAABJRU5ErkJggg==",
607 FF_ESR = "data:image/png;base64,"
608 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAiUlEQVQYV2M8FcD+nwEIpkXwgSiGBRGvGcEMNMC4IcAErPCB"
609 + "wgsGgQ8fGBIWfMGucEFCwhVWDg5u+2vXRKXfvuVmvHoVh8L4eG3TiAhTFQmJLDZWVlNGHR3sCkHW/v//3wFI1T948MBBUVGR"
610 + "sMIDBw44ODo64laIzZcYviZGEUgNVmuwhiOxJgIAFNAnC2GN/IoAAAAASUVORK5CYII=")
611 public void drawImage9ArgumentsCrop() throws Exception {
612 drawImage("4x6.png",
613 "canvas.width = 10; canvas.height = 10;\n",
614 "context.drawImage(img, 1, 2, 2, 4, 0, 0, img.width, img.height);\n");
615 }
616
617
618
619
620 @Test
621 @Alerts(DEFAULT = "data:image/png;base64,"
622 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAAXNSR0IArs4c6QAAAFxJREFUKFNjZCASMBKpjmHoKlT7/z/h0wK"
623 + "G+reNDIq/H4D9gdUz2WJT/ptLnWTwUtrGILLuLW6F+x04/kuo/mVQMPzDwJn1H7dC0Vdy/0PW/GQomPCNQf3WZ7BCAChZHAtgVD"
624 + "PiAAAAAElFTkSuQmCC",
625 FF = "data:image/png;base64,"
626 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAWUlEQVQYV2NkIBIwEqmOYegqVPufFvdhgcnCV4kgT6SBPIzV"
627 + "M3Fi81bbih8NSVGZy8C4HqIGq8L99uyrJVT/hWjY/WZgjMOjkOG/4uqEBZ9D5ie+AakCGwYAh4cWC3rmpLIAAAAASUVORK5C"
628 + "YII=",
629 FF_ESR = "data:image/png;base64,"
630 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAX0lEQVQYV2NkIBIwEqmOYegqVP+fn/hhoVbduwYGxd8P0kEe"
631 + "xuqZbPGpq8wlT4R6KW1jEFn3FqwGq8IDjpyrxFX+hCoY/mHgzPqPW6H4K7lVQWt+hhZM+MagfuszWCEAHxEcC87YTb4AAAAA"
632 + "SUVORK5CYII=")
633 public void drawImage9ArgumentsCropNegativStart() throws Exception {
634 drawImage("4x6.png",
635 "canvas.width = 10; canvas.height = 10;\n",
636 "context.drawImage(img, -1, -2, 3, 5, 4, 4, img.width, img.height);\n");
637 }
638
639
640
641
642 @Test
643 @Alerts(DEFAULT = "data:image/png;base64,"
644 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAAXNSR0IArs4c6QAAABdJREFUKFNjZCASMBKpjmFUId6QIjp4"
645 + "AAppAAuXjCs4AAAAAElFTkSuQmCC",
646 FF = "data:image/png;base64,"
647 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAF0lEQVQYV2NkIBIwEqmOYVQh3pAiOngACmkAC8i6MuwAAAAA"
648 + "SUVORK5CYII=",
649 FF_ESR = "data:image/png;base64,"
650 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAF0lEQVQYV2NkIBIwEqmOYVQh3pAiOngACmkAC8i6MuwAAAAA"
651 + "SUVORK5CYII=")
652 public void drawImage9ArgumentsCropNegativWidth() throws Exception {
653 drawImage("4x6.png",
654 "canvas.width = 10; canvas.height = 10;\n",
655 "context.drawImage(img, 0, 0, -3, 5, 4, 4, img.width, img.height);\n");
656 }
657
658
659
660
661 @Test
662 @Alerts(DEFAULT = "data:image/png;base64,"
663 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAAXNSR0IArs4c6QAAAEhJREFUKFNjnK+Z8J+BgYEh8foCRhCNCzDO"
664 + "r+aBKGz9gl/hAQeH/fYMDA6MBw7gVwgybf78+f8TExMJK8TnNpgcXlOQDRgKCgFraBALDri0wwAAAABJRU5ErkJggg==",
665 FF = "data:image/png;base64,"
666 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAR0lEQVQYV2Ocrxn/nwEIEq8vZATRuADj/CoeiMK2L/gV7ndw"
667 + "2O/w/78D48GD+BWCTJs/f/7/xMREwgrxuQ0mh9cUZAOGgkIA7moSC5sf8xAAAAAASUVORK5CYII=",
668 FF_ESR = "data:image/png;base64,"
669 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAASElEQVQYV2Ocr5nwnwEIEq8vYATRuADjgmoesMKE1i/4FR5w"
670 + "cNhvz8DgwHjgAH6FINPmz5//PzExkbBCfG6DyeE1BdmAoaAQAGtwEAvm0nZdAAAAAElFTkSuQmCC")
671 public void drawImage9ArgumentsStretch() throws Exception {
672 drawImage("4x6.png",
673 "canvas.width = 10; canvas.height = 10;\n",
674 "context.drawImage(img, 0, 0, img.width, img.height, 0, 0, 2, 4);\n");
675 }
676
677
678
679
680 @Test
681 @Alerts(DEFAULT = "data:image/png;base64,"
682 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAAXNSR0IArs4c6QAAAHBJREFUKFOd0LENglAUBdDzSmLNCO5g"
683 + "4QTG1jWo7JjCFehchgSdQxcg5BsSKPQHQ3j1efcmN6y8WOlkMLGfnovgMQd9wcQJFUo0wW0JvrDDgGdwyGDiiPuU1qPDOXiP"
684 + "+Le6xgUtrjPK4L8Fts+zlPoB1NMSC7MwsngAAAAASUVORK5CYII=",
685 FF = "data:image/png;base64,"
686 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAaklEQVQYV2NkIBIwEqmOAUPhfwYGVahmTqDkJZhBKAqBiryA"
687 + "EnlALArEi4CSE3EpfAuU4Abiv0B8GajQAkMh0DQboOBKqGm/gfRFIPYBKn4HUoxudTVQLBSIzwFxCUwRhkJ8IUB+8OAyFQDU"
688 + "0xILsSkm0QAAAABJRU5ErkJggg==",
689 FF_ESR = "data:image/png;base64,"
690 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAaklEQVQYV2NkIBIwEqmOAUPhfwYGVahmTqDkJZhBKAqBiryA"
691 + "EnlALArEi4CSE3EpfAuU4Abiv0B8GajQAkMh0DQboOBKqGm/gfRFIPYBKn4HUoxudTVQLBSIzwFxCUwRhkJ8IUB+8OAyFQDU"
692 + "0xILsSkm0QAAAABJRU5ErkJggg==")
693 public void drawImageDataUrlPng() throws Exception {
694 final String html = DOCTYPE_HTML
695 + "<html><head>\n"
696 + "<script>\n"
697 + LOG_TEXTAREA_FUNCTION
698 + " function test() {\n"
699 + " var img = document.getElementById('myImage');\n"
700 + " var canvas = document.createElement('canvas');\n"
701 + " canvas.width = img.width;\n"
702 + " canvas.height = img.height;\n"
703 + " if (canvas.getContext) {\n"
704 + " var context = canvas.getContext('2d');\n"
705 + " context.drawImage(img, 0, 0, canvas.width, canvas.height);\n"
706 + " log(canvas.toDataURL());\n"
707 + " }\n"
708 + " }\n"
709 + "</script>\n"
710 + "</head><body onload='test()'>\n"
711 + " <img id='myImage' src='data:image/png;base64,"
712 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGP"
713 + "C/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IA"
714 + "AAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1J"
715 + "REFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jq"
716 + "ch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0"
717 + "vr4MkhoXe0rZigAAAABJRU5ErkJggg==' alt='red dot' />\n"
718 + LOG_TEXTAREA
719 + "</body></html>";
720
721 loadPageVerifyTextArea2(html);
722 }
723
724
725
726
727 @Test
728 @Alerts(DEFAULT = "data:image/png;base64,"
729 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAL1JREFUOE9jZEAFjgwMDOZQoZMMDAz7"
730 + "0eQJchmhKnhFGBi2CDAw6AcwMHCDxDYwMHz9wMBw8Q0Dgw8DA8NngiZBFYANFGFgOJjAwGDVzcDAgqyxlIHhzwIGhmNvGBjs"
731 + "STHQUYWBYf1tBgZ+bJpUGRg+3mFgCCTW+yAXVpQwMDSjuw5mOMiVPQwMtQwMDB3EuJImBlLdy1SPFFDQUDfZIAU21RI2MRFI"
732 + "lBpYTiFKMTGKRg0kJpTwqxkNQ8rDEABatjIVyjXhJwAAAABJRU5ErkJggg==",
733 FF = "data:image/png;base64,"
734 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABF0lEQVQ4T+2SvUoDQRSFv5SC5UIUK30ACUFIbyws4wMsBkO6"
735 + "RJ9AiBhUsEqvstoKVgELwdRa5cc6pTbGLqTUM+saNsvGHUljkYFlmDn3fnvPvZNicmV13AiunrW3I3riMfUTkYYT0dwlcMzd"
736 + "G7x3wNN+mEgJBfjAZTjdhsoVLIaTd2HYhPMPOLKFGmB2C24fYC0uKQ/9R9iR1rWBGmB5DxqXsBCXUIKRKq9KU0jy8oGy1vCm"
737 + "AKWNbmBfcRfJODDAjCzfyfJqXMKmLLegIK1nC2QF6urVwXVkKK6Gcg9nA+k2MBMzfjaa9PE6FLU7n9/PZvAim69Qs4VNAIMk"
738 + "McnpM8wnW5vhH44r/EsVv8XOgbN3ct7Df9jDL+YBMhUCa42EAAAAAElFTkSuQmCC",
739 FF_ESR = "data:image/png;base64,"
740 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA4klEQVQ4T+2STQ4BQRCFPyT+V27AESQyC5cwQqzY2zuGvT0b"
741 + "QnAJCyGO4AhiIRgJUU1P4mdkesJSbzpV/frlvaoX4vlYUuZ1ayX3/OXdtwxpRCIDvR2UauCoZh9iSZhuoS7lwZdJA26EQjbM"
742 + "QXkB4cePBbisYbKBShBCKwozByJen2JwPkHR1L5S2BRP7S6Iw/fTgH0PUkEUmhC2hLBjQqoU/tyyWsooC/bSeyljWUrVRJ3C"
743 + "uLGJ69jYKjbqYSCxSd83rGJzDEro4n8WbFMBvjjXsi/QFPAnNJ3UZ9x/ht/P8AqUpzEVnisiKgAAAABJRU5ErkJggg==")
744 public void drawImageDataUrlSvg() throws Exception {
745 final String html = DOCTYPE_HTML
746 + "<html><head>\n"
747 + "<script>\n"
748 + LOG_TEXTAREA_FUNCTION
749 + " function test() {\n"
750 + " var img = document.getElementById('myImage');\n"
751 + " var canvas = document.createElement('canvas');\n"
752 + " canvas.width = 20;\n"
753 + " canvas.height = 20;\n"
754 + " if (canvas.getContext) {\n"
755 + " var context = canvas.getContext('2d');\n"
756 + " context.drawImage(img, 0, 0, img.width, img.height);\n"
757 + " log(canvas.toDataURL());\n"
758 + " }\n"
759 + " }\n"
760 + "</script>\n"
761 + "</head><body onload='test()'>\n"
762 + " <img id='myImage' src='data:image/svg+xml,"
763 + "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" "
764 + "overflow=\"hidden\" width=\"10\" height=\"10\">"
765 + " <circle cx=\"5\" cy=\"5\" r=\"4\" stroke=\"black\" stroke-width=\"1\" fill=\"red\" />"
766 + "</svg>' />\n"
767 + LOG_TEXTAREA
768 + "</body></html>";
769
770 loadPageVerifyTextArea2(html);
771 }
772
773
774
775
776 @Test
777 @Alerts({"TypeError", "0", "true", "true"})
778 public void measureText() throws Exception {
779 final String html = DOCTYPE_HTML
780 + "<html>\n"
781 + " <head>\n"
782 + " <script>\n"
783 + LOG_TEXTAREA_FUNCTION
784 + " function test() {\n"
785 + " var canvas = document.getElementById('myCanvas');\n"
786 + " if (canvas.getContext){\n"
787 + " ctx = canvas.getContext('2d');\n"
788 + " try {\n"
789 + " log(ctx.measureText());\n"
790 + " } catch(e) { logEx(e); }\n"
791
792 + " var metrics = ctx.measureText('');\n"
793 + " log(metrics.width);\n"
794
795 + " metrics = ctx.measureText('a');\n"
796 + " log(metrics.width > 5);\n"
797
798 + " metrics = ctx.measureText('abc');\n"
799 + " log(metrics.width > 10);\n"
800 + " }\n"
801 + " }\n"
802 + " </script>\n"
803 + " </head>\n"
804 + " <body onload='test()'>\n"
805 + " <canvas id='myCanvas'></canvas>\n"
806 + LOG_TEXTAREA
807 + " </body>\n"
808 + "</html>";
809
810 loadPageVerifyTextArea2(html);
811 }
812
813 private void draw(final String canvasSetup, final String drawJS) throws Exception {
814 final String html = DOCTYPE_HTML
815 + "<html><head>\n"
816 + "<script>\n"
817 + LOG_TEXTAREA_FUNCTION
818 + " function test() {\n"
819 + " var canvas = document.getElementById('myCanvas');\n"
820 + " if (canvas.getContext) {\n"
821 + " var context = canvas.getContext('2d');\n"
822 + drawJS
823 + " log(canvas.toDataURL());\n"
824 + " }\n"
825 + " }\n"
826 + "</script>\n"
827 + "</head><body onload='test()'>\n"
828 + canvasSetup
829 + LOG_TEXTAREA
830 + "</body></html>";
831
832 loadPageVerifyTextArea2(html);
833 }
834
835
836
837
838 @Test
839 @Alerts(DEFAULT = "data:image/png;base64,"
840 + "iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAAAAXNSR0IArs4c6QAAAVlJREFUWEftlK1OA0EUhb9a3qCGBIvA"
841 + "gKgqQdQBCsFPQusJCkENlh9N6+tIsOAJaLA8AIYH4AXYQ+4mw4Syu8lta+4mm+zO7D1z5rtntsXvax0YAKfJ8Lk93wCHwBPw"
842 + "mdXlr23gGjgBroAJ8GYfae4OOJiik9ZuAF+qbTUwOgZ0D2dsNLV0W26yiVEJiNKzGT4Ceqa6D4yAZWAXeK1J9Ni6tGY6ae0j"
843 + "cA98AJ2/jL4ASxlpUUyJqiVnhaHtwviWmewAGt8z6nVaL6OrQL9o785/tU2I5ka1gHJbLqDFyoxfNiD6XtQ9VNXOw6gOVElN"
844 + "jUo3poM6E6PKzQpwAeh01iEqc6rbtDj9ZM4OZJVRdVFR6uZEK/46i5sOo97sg2gQ9SbgrRcZDaLeBLz1IqNB1JuAt15kNIh6"
845 + "E/DWi4wGUW8C3nqR0SDqTcBbLzIaRL0JeOtFRoOoNwFvvW9NqWN35u+ZcQAAAABJRU5ErkJggg==",
846 FF = "data:image/png;base64,"
847 + "iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAABUklEQVRYR+2UPw4BQRTG7TU0Cu5Aq+EGFBqJhgsoFAolB6Bx"
848 + "AEdAodC4BImGY/B9yRt51vqz8YTE2+RlZ2Znvvnm995slLl+KugOECU1PJR2F+8Zoh5bk9TNY3CNyCI2iD5ioSae0I7u6Oi1"
849 + "bczZcW188jOjjzbQ+75jVOtcDpnGaA4KNcRRqJelT+EqYi47dPBevkiUGaJuUdZSZytrmdmxjBeSjIYN9clG6DD1gShTwnQy"
850 + "tbrNjLQQvRRG96JNHR4+cW0aonGjFGW9BnOhTRINZZTUpghdowc5JL+tEBOl8zWjvIxMb7iEJNdE8MJ+zChJ8CG1V4lyPi9F"
851 + "qEP2QyafGeV33oubGhUfv/e69y/7Oadu1DolTtSJWhOw1vMadaLWBKz1vEadqDUBaz2vUSdqTcBaz2vUiVoTsNbzGnWi1gSs"
852 + "9bxGnag1AWs9r9G/JXoGyiFdcUG+TPcAAAAASUVORK5CYII=",
853 FF_ESR = "data:image/png;base64,"
854 + "iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAABOUlEQVRYR+2UMW7CUBBE4R5UhGMALTlCSEWFBAeAJiUVB0iu"
855 + "QMEJUgYppzAUXARmpHW0WHYSKyORYiyt/jf2DvPfjtzt3F5D3L6gHtPPq9hvsb6ilpWeptsnPBjH+z/p1mnk/k63hdHPmkN8"
856 + "5/mvRrP2sI3ROTofUG+oj6C1CLUR1kPsp1h3qN8aPePdGWoS/WusnF7uL+qMln+YT8TmTJQiG9QgBMs9R/wc425rlHHro96T"
857 + "7ld02hCtGs35K83lLGajNMB8V7NPmrxKLe6LexqlgQuK0TmFORriyHtqo3sIHlE5o/wC5HE3EaU3PsuxqstiE9F+dfRx2P+3"
858 + "2Kh6JiZqomoCaj1n1ETVBNR6zqiJqgmo9ZxRE1UTUOs5oyaqJqDWc0ZNVE1AreeMmqiagFrPGTVRNQG13hX4a00ZAyWoGQAA"
859 + "AABJRU5ErkJggg==")
860 public void fillText() throws Exception {
861 draw("<canvas id='myCanvas' width='42' height='42'>\n",
862 "context.fillText('HtmlUnit', 3, 7);\n");
863 }
864
865
866
867
868 @Test
869 @Alerts("[object CanvasGradient]")
870 public void createLinearGradient() throws Exception {
871 final String html = DOCTYPE_HTML
872 + "<html><head><script>\n"
873 + LOG_TEXTAREA_FUNCTION
874 + "function test() {\n"
875 + " var canvas = document.getElementById('myCanvas');\n"
876 + " var ctx = canvas.getContext('2d');\n"
877 + " var gradient = ctx.createLinearGradient(0, 0, 200, 0);\n"
878 + " log(gradient);\n"
879 + "}\n"
880 + "</script>\n"
881 + "</head>\n"
882 + "<body onload='test()'>\n"
883 + " <canvas id='myCanvas'></canvas>\n"
884 + LOG_TEXTAREA
885 + "</body>\n"
886 + "</html>";
887
888 loadPageVerifyTextArea2(html);
889 }
890
891
892
893
894 @Test
895 @Alerts("[object CanvasGradient]")
896 public void createRadialGradient() throws Exception {
897 final String html = DOCTYPE_HTML
898 + "<html><head><script>\n"
899 + LOG_TEXTAREA_FUNCTION
900 + "function test() {\n"
901 + " var canvas = document.getElementById('myCanvas');\n"
902 + " var ctx = canvas.getContext('2d');\n"
903 + " var gradient = ctx.createRadialGradient(100, 100, 100, 100, 100, 0);\n"
904 + " log(gradient);\n"
905 + "}\n"
906 + "</script>\n"
907 + "</head>\n"
908 + "<body onload='test()'>\n"
909 + " <canvas id='myCanvas'></canvas>\n"
910 + LOG_TEXTAREA
911 + "</body>\n"
912 + "</html>";
913
914 loadPageVerifyTextArea2(html);
915 }
916
917
918
919
920 @Test
921 @Alerts(DEFAULT = {"1", "0.5", "0", "0.699999988079071", "0"},
922 CHROME = {"1", "0.5", "0", "0.7", "0"},
923 EDGE = {"1", "0.5", "0", "0.7", "0"})
924 @HtmlUnitNYI(CHROME = {"1", "0.5", "0", "0.699999988079071", "0"},
925 EDGE = {"1", "0.5", "0", "0.699999988079071", "0"})
926 public void globalAlpha() throws Exception {
927 final String html = DOCTYPE_HTML
928 + "<html><head><script>\n"
929 + LOG_TEXTAREA_FUNCTION
930 + "function test() {\n"
931 + " var canvas = document.getElementById('myCanvas');\n"
932 + " try {\n"
933 + " var ctx = canvas.getContext('2d');\n"
934 + " log(ctx.globalAlpha);\n"
935 + " ctx.globalAlpha = 0.5;\n"
936 + " log(ctx.globalAlpha);\n"
937 + " ctx.globalAlpha = 0;\n"
938 + " log(ctx.globalAlpha);\n"
939 + " ctx.globalAlpha = 0.7;\n"
940 + " log(ctx.globalAlpha);\n"
941 + " ctx.globalAlpha = null;\n"
942 + " log(ctx.globalAlpha);\n"
943 + " } catch(e) { logEx(e); }\n"
944 + "}\n"
945 + "</script>\n"
946 + "</head>\n"
947 + "<body onload='test()'>\n"
948 + " <canvas id='myCanvas'></canvas>\n"
949 + LOG_TEXTAREA
950 + "</body>\n"
951 + "</html>";
952
953 loadPageVerifyTextArea2(html);
954 }
955
956
957
958
959 @Test
960 @Alerts({"0.5", "0.5", "0.5", "0.5"})
961 public void globalAlphaInvalid() throws Exception {
962 final String html = DOCTYPE_HTML
963 + "<html><head><script>\n"
964 + LOG_TEXTAREA_FUNCTION
965 + "function test() {\n"
966 + " var canvas = document.getElementById('myCanvas');\n"
967 + " try {\n"
968 + " var ctx = canvas.getContext('2d');\n"
969 + " ctx.globalAlpha = 0.5;\n"
970 + " log(ctx.globalAlpha);\n"
971 + " ctx.globalAlpha = -1;\n"
972 + " log(ctx.globalAlpha);\n"
973 + " ctx.globalAlpha = 'test';\n"
974 + " log(ctx.globalAlpha);\n"
975 + " ctx.globalAlpha = undefined;\n"
976 + " log(ctx.globalAlpha);\n"
977 + " } catch(e) { logEx(e); }\n"
978 + "}\n"
979 + "</script>\n"
980 + "</head>\n"
981 + "<body onload='test()'>\n"
982 + " <canvas id='myCanvas'></canvas>\n"
983 + LOG_TEXTAREA
984 + "</body>\n"
985 + "</html>";
986
987 loadPageVerifyTextArea2(html);
988 }
989
990
991
992
993 @Test
994 @Alerts(DEFAULT = "data:image/png;base64,"
995 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAAXNSR0IArs4c6QAAADxJREFUOE9jZKAyYISa10AlcxtoZmA9"
996 + "AwMDyHByXQrTB3ch1Q2E20BmWGK4kGYGkulAuDbaxTKlLoPrBwDnlwwLU3fVIAAAAABJRU5ErkJggg==",
997 FF = "data:image/png;base64,"
998 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAS0lEQVQoU2NkoDJghJrnAKRBmBJwAKj5AMzABqiBIEFygD1Q"
999 + "00EgbkA2EGQQyGByQD1QE8iskW4gKGDJjRRQCkGJFKonG3JiFqseAAjhEgvKgKaUAAAAAElFTkSuQmCC",
1000 FF_ESR = "data:image/png;base64,"
1001 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAP0lEQVQoU2NkoDJghJrnAKRBmBJwAKj5AMzABiDHHogPkmki"
1002 + "TG8DsoEgs0AGkwNg+ka6gVSNFKonG3JiFqseAAklEgtbZz3HAAAAAElFTkSuQmCC")
1003 public void strokeRect() throws Exception {
1004 draw("<canvas id='myCanvas' width='20', height='10' style='border: 1px solid red;'></canvas>\n",
1005 "context.strokeRect(2, 2, 16, 6);\n");
1006 }
1007
1008
1009
1010
1011 @Test
1012 @Alerts(DEFAULT = "data:image/png;base64,"
1013 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAAXNSR0IArs4c6QAAAChJREFUOE9jZKAyYKSyeQzIBv6n0HCw"
1014 + "WaMGUhSKtA9DipwH00z1dAgAPKcGC8XskzoAAAAASUVORK5CYII=",
1015 FF = "data:image/png;base64,"
1016 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAKElEQVQoU2NkoDJgpLJ5DMgG/qfQcLBZowZSFIq0D0OKnAfT"
1017 + "TPV0CAA8pwYL+jNAvAAAAABJRU5ErkJggg==",
1018 FF_ESR = "data:image/png;base64,"
1019 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAKElEQVQoU2NkoDJgpLJ5DMgG/qfQcLBZowZSFIq0D0OKnAfT"
1020 + "TPV0CAA8pwYL+jNAvAAAAABJRU5ErkJggg==")
1021 public void fillRect() throws Exception {
1022 draw("<canvas id='myCanvas' width='20', height='10' style='border: 1px solid red;'></canvas>\n",
1023 "context.fillRect(2, 2, 16, 6);\n");
1024 }
1025
1026
1027
1028
1029 @Test
1030 @Alerts(DEFAULT = "data:image/png;base64,"
1031 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAACxJREFUOE9jZICA/1CaUoqRcdTA0TAk"
1032 + "OQRGkw3JQYahYTQMR8OQjBCgfrIBABkEFBUHz6OrAAAAAElFTkSuQmCC",
1033 FF = "data:image/png;base64,"
1034 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAALElEQVQ4T2NkgID/UJpSipFx1MDRMCQ5BEaTDclBhqFhNAxH"
1035 + "w5CMEKB+sgEAGQQUFQfPo6sAAAAASUVORK5CYII=",
1036 FF_ESR = "data:image/png;base64,"
1037 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAALElEQVQ4T2NkgID/UJpSipFx1MDRMCQ5BEaTDclBhqFhNAxH"
1038 + "w5CMEKB+sgEAGQQUFQfPo6sAAAAASUVORK5CYII=")
1039 public void fillRectWidthHeight() throws Exception {
1040 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1041 "context.fillRect(1, 0, 18, 20);\n");
1042 }
1043
1044
1045
1046
1047 @Test
1048 @Alerts(DEFAULT = "data:image/png;base64,"
1049 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAADdJREFUOE9jZKAyYKSyeQzIBv6n0HCw"
1050 + "WaMGUhSKtA9DipwH00zTdDjqQvJCYDRSyAs3ZF2DPwwBbfkGFYXESWwAAAAASUVORK5CYII=",
1051 FF = "data:image/png;base64,"
1052 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAN0lEQVQ4T2NkoDJgpLJ5DMgG/qfQcLBZowZSFIq0D0OKnAfT"
1053 + "TNN0OOpC8kJgNFLICzdkXYM/DAFt+QYVhcRJbAAAAABJRU5ErkJggg==",
1054 FF_ESR = "data:image/png;base64,"
1055 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAN0lEQVQ4T2NkoDJgpLJ5DMgG/qfQcLBZowZSFIq0D0OKnAfT"
1056 + "TNN0OOpC8kJgNFLICzdkXYM/DAFt+QYVhcRJbAAAAABJRU5ErkJggg==")
1057 public void fillRectRotate() throws Exception {
1058 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1059 "context.fillRect(2, 2, 16, 6); context.rotate(.5);\n");
1060 }
1061
1062
1063
1064
1065 @Test
1066 @Alerts(DEFAULT = "data:image/png;base64,"
1067 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAANRJREFUOE/d1CEPgUEYwPH/q/kCvoRA"
1068 + "kRQbCkUQTJFtNp2MpmmCTZIQRJIkapIoaT4A4bnt3c3dvffuCrfddtvz3O+e5267iMAjCuzxm2ATOKS9Cr3lEnAB9sBU1l62"
1069 + "Dm6BVkxYCnxPqsbBhqXVmcAvFxwHz0DZsuEp6NyGKrAHrFynS/wGTID1t3wFZoCRzGxC+ARU9Vz9UXKCDhOgNeDoAlU8L3DX"
1070 + "AG+Ajq1lU0EVgetaQgG4pgHVnjYwBorAAhiYKvD9HPofdAc8QoHOt/Kt8A/AN1+PHBVxaGY3AAAAAElFTkSuQmCC",
1071 FF = "data:image/png;base64,"
1072 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA60lEQVQ4T2NkoDJgpLJ5DEPTQCFgMLwjNyjQvawANOgyEC8B"
1073 + "4mYgfkaqwegGrgAaEA415DuQ7gfiDiD+TKzByAZaATUdxaLxFVCsCYhnAvEfQgYjGwgyDGQoLnATKFEJxOvxGQozMICQQiRD"
1074 + "QBaX4/ANPB2KAhXUAHE2EDMT8hZUvhWqB0U5eqSoAWW7gdiPCEM9gWp2oKvDlVOsgQo7gRhEYwM7gYIe2CQIZb1AoKZ2IFZH"
1075 + "06wL5F8hx0CQHhYgTgfiOiAWA+KVQByBK0gIuRBZHy+QA4rdOUD8gBoGEhFPDEO0+CLKa7gUAQCpFx4VDtwfyAAAAABJRU5E"
1076 + "rkJggg==",
1077 FF_ESR = "data:image/png;base64,"
1078 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA0ElEQVQ4T2NkoDJgpLJ5DEPTQFVgMNwmNyjQvWwKNOgUEG8E"
1079 + "4lYgPk2qwegGrgcaEIBkyBwguw2I7xNrMLKBXkBNW3FobIca/IWQwcgGHgEqtsaj4S3U0D58hsIMBHkT5F1iwE1o+C7GphjZ"
1080 + "hdVABSDMSYypQDULgDgRXS16pIgBFVQBcT4RhroA1ewlZCBMXgvq2igcBq8EikcQ8jI2eXuowa5okvpA/iVyDITpCYEGhSGQ"
1081 + "ngrEObiChNTCIQ1o0HIg/kwtAwnGFakuHAYGAgBd6xwVKif+GwAAAABJRU5ErkJggg==")
1082 public void rotateFillRect() throws Exception {
1083 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1084 "context.rotate(.5); context.fillRect(6, 2, 12, 6);\n");
1085 }
1086
1087
1088
1089
1090 @Test
1091 @Alerts(DEFAULT = "data:image/png;base64,"
1092 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAADdJREFUOE9jZKAyYKSyeQzIBv6n0HCw"
1093 + "WaMGUhSKtA9DipwH00zTdDjqQvJCYDRSyAs3ZF2DPwwBbfkGFYXESWwAAAAASUVORK5CYII=",
1094 FF = "data:image/png;base64,"
1095 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAN0lEQVQ4T2NkoDJgpLJ5DMgG/qfQcLBZowZSFIq0D0OKnAfT"
1096 + "TNN0OOpC8kJgNFLICzdkXYM/DAFt+QYVhcRJbAAAAABJRU5ErkJggg==",
1097 FF_ESR = "data:image/png;base64,"
1098 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAN0lEQVQ4T2NkoDJgpLJ5DMgG/qfQcLBZowZSFIq0D0OKnAfT"
1099 + "TNN0OOpC8kJgNFLICzdkXYM/DAFt+QYVhcRJbAAAAABJRU5ErkJggg==")
1100 public void fillRectTranslate() throws Exception {
1101 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1102 "context.fillRect(2, 2, 16, 6); context.translate(3, 4);\n");
1103 }
1104
1105
1106
1107
1108 @Test
1109 @Alerts(DEFAULT = "data:image/png;base64,"
1110 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAADFJREFUOE9jZKAyYKSyeQyjBlIeorjC"
1111 + "8D+5Ro8aCA+5wR+G5EbyaNYjO+QQGkdg8QUAebwGD4ULeHoAAAAASUVORK5CYII=",
1112 FF = "data:image/png;base64,"
1113 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAMUlEQVQ4T2NkoDJgpLJ5DKMGUh6iuMLwP7lGjxoID7nBH4bk"
1114 + "RvJo1iM75BAaR2DxBQB5vAYPhQt4egAAAABJRU5ErkJggg==",
1115 FF_ESR = "data:image/png;base64,"
1116 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAMUlEQVQ4T2NkoDJgpLJ5DKMGUh6iuMLwP7lGjxoID7nBH4bk"
1117 + "RvJo1iM75BAaR2DxBQB5vAYPhQt4egAAAABJRU5ErkJggg==")
1118 public void translateFillRect() throws Exception {
1119 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1120 "context.translate(3, 4); context.fillRect(2, 2, 16, 6);\n");
1121 }
1122
1123
1124
1125
1126 @Test
1127 @Alerts(DEFAULT = "data:image/png;base64,"
1128 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAMxJREFUOE/t1LEJAjEUxvH/gYKVjStY"
1129 + "WYlOYOMGCnYOYeEKYu8INo4gOICgnaWCYCEIghvIgzx4hODlTBrBQLjj8vJ7+VJcQeZRZPb4g+k3+lt3OAIOwCUluI18AjrA"
1130 + "w8FH95Qm19gmCjaB14dNd4Nro1uoXsEBsIs9hasT0KbYSzoFZ8CyImjLz0BbPii4BiYJ4AYYW3AF9IA+UPsCngMLC6ohJxZU"
1131 + "cXmXWTaGwDYEhjbWvQbSrOsVtoBnLBhq0vCSTG3EsjiV1rP/HN50hx8VahodiQAAAABJRU5ErkJggg==",
1132 FF = "data:image/png;base64,"
1133 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAyUlEQVQ4T2NkoDJgpLJ5DKMGUh6iQysMlYEefgbE3ynxOLKX"
1134 + "bwANUgHim0B8HglfALLfEWsJzEBOoIYvQMyEQ+MjNEtAFj7GphZmoD1Q8gCxroCqe41kyTkgexVIHGZgBZDdTqKByMpBwaSB"
1135 + "bOAKICecAgNXAvVGIBtYBeT4AbEBELOTYXApUE8PsoEwM1iADD0gNkXC2kA2MwFLPIHyO7AZiE0fKAUYo1kCSl4w8A/IkATi"
1136 + "V8QaiM0SfqCgGdQSWSCdCVM0+PMyAOlZHxXNWGcZAAAAAElFTkSuQmCC",
1137 FF_ESR = "data:image/png;base64,"
1138 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAxElEQVQ4T2NkoDJgpLJ5DKMGUh6iQysMtYAe/gHE9yjxOLKX"
1139 + "rwINAhn6GojPAfFZJPyQWEtgBvIBNXzEo+kF1HBki55gUw8z0BEouY9YV0DVgQxEtuAAkP8VZmAJkNNNooHIyu8COSogAZiB"
1140 + "y4DsSAoMXA3UG4ZsYDOQ4wrExkDMQobBFUA9ncgGwswAuRhkqBGUBrFBmBBwAyrYjc1AbBpZ0SwAWWaAplAYyH9HrIHYLOFA"
1141 + "8okCkF2M7EVC3iFJnuqFAwBzIx8VNVMmtgAAAABJRU5ErkJggg==")
1142 public void rotateTranslateFillRect() throws Exception {
1143 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1144 "context.rotate(0.2); context.translate(0, 4); context.fillRect(4, 4, 16, 6);\n");
1145 }
1146
1147
1148
1149
1150 @Test
1151 @Alerts(DEFAULT = "data:image/png;base64,"
1152 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAALZJREFUOE/tkjEKAjEQRd8ewXoLK23s"
1153 + "1kZ7j+IRbG3st/M6tlYq2CxYCl7CTgZ2liEMMm5WsDCQIiR5b+YnBQOPYmAef2B+ol/LcAzc8+uje+U1sAfOwMXM66cSbbkE"
1154 + "Hs7lZwu3orcSm+ERWAYqUol0oqJOYoFbYBcAekdqYCMbFjgHTj2BDTBLgbK+AdOeUAE23j8cAVUyIxJpuY5+bJVILCqbJJ0c"
1155 + "gFUU6KXgSRY5QDfq3we+AOdFHSeUoHcMAAAAAElFTkSuQmCC",
1156 FF = "data:image/png;base64,"
1157 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAxUlEQVQ4T2NkoDJgpLJ5DKMGUh6iNAtDaaDb3gHxd0rdCHNh"
1158 + "AtCgOUB8DYjPIOGLQPZPUiyBGSgF1PQEiNGD4A9Q7AqaJZeB/F+4LEE24ARQkTkRrgEZdgnNEpClf0F6kQ2sAPLbiTAQm5JO"
1159 + "oCBIP4qBGkD+dTINvAnUB9KPEWZ7gGL2QMxChsFaIAdhS4fsQAl9IDZBwiDFzAQsqQTKdxCbsDmBio3RLFFD8+FBIN+BWAOx"
1160 + "OY4XzRI9IN+CEgOxhsDgNxAAub8hIw8WPeEAAAAASUVORK5CYII=",
1161 FF_ESR = "data:image/png;base64,"
1162 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAoUlEQVQ4T2NkoDJgpLJ5DKMGUh6iNAtDAaDbPlDuPgZ4LCcA"
1163 + "DZsPxBuA+AEQXwTiC1BMkj0wL4Nc+B6HTpIsQQ7D+0ADFYh0Dk5LkA1sABpWT6SB6MoWAAUSQYLIBuLzNiF7QBEqiG4giL8f"
1164 + "iB0I6cYhrwiKUFzpMAAoaQDE+lCamLAtBKqdQErCJmTJAaCBjqQYiM2n6JYYUmoghiWD30AAk4cbJe1EwXcAAAAASUVORK5C"
1165 + "YII=")
1166 public void transformTranslateFillRect() throws Exception {
1167 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1168 "context.setTransform(1, .2, .3, 1, 0, 0); context.translate(-5, 4); context.fillRect(4, 4, 16, 6);\n");
1169 }
1170
1171
1172
1173
1174 @Test
1175 @Alerts(DEFAULT = "data:image/png;base64,"
1176 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAAXNSR0IArs4c6QAAAC1JREFUOE9jZKAyYKSyeQxwA88wMPyn"
1177 + "xHATBohZowaSH4q0D0Py3Yaqk+rpEAAqPQwLveqeQwAAAABJRU5ErkJggg==",
1178 FF = "data:image/png;base64,"
1179 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAALUlEQVQoU2NkoDJgpLJ5DHADzzAw/KfEcBMGiFmjBpIfirQP"
1180 + "Q/LdhqqT6ukQACo9DAtpppU3AAAAAElFTkSuQmCC",
1181 FF_ESR = "data:image/png;base64,"
1182 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAALUlEQVQoU2NkoDJgpLJ5DHADzzAw/KfEcBMGiFmjBpIfirQP"
1183 + "Q/LdhqqT6ukQACo9DAtpppU3AAAAAElFTkSuQmCC")
1184 public void fillStyleNullFillRect() throws Exception {
1185 draw("<canvas id='myCanvas' width='20', height='10' style='border: 1px solid red;'></canvas>\n",
1186 "context.fillStyle = '#cc0000'; context.fillStyle = null; context.fillRect(2, 2, 16, 6);\n");
1187 }
1188
1189
1190
1191
1192 @Test
1193 @Alerts(DEFAULT = "data:image/png;base64,"
1194 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAAXNSR0IArs4c6QAAAC1JREFUOE9jZKAyYKSyeQxwA88wMPyn"
1195 + "xHATBohZowaSH4q0D0Py3Yaqk+rpEAAqPQwLveqeQwAAAABJRU5ErkJggg==",
1196 FF = "data:image/png;base64,"
1197 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAALUlEQVQoU2NkoDJgpLJ5DHADzzAw/KfEcBMGiFmjBpIfirQP"
1198 + "Q/LdhqqT6ukQACo9DAtpppU3AAAAAElFTkSuQmCC",
1199 FF_ESR = "data:image/png;base64,"
1200 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAALUlEQVQoU2NkoDJgpLJ5DHADzzAw/KfEcBMGiFmjBpIfirQP"
1201 + "Q/LdhqqT6ukQACo9DAtpppU3AAAAAElFTkSuQmCC")
1202 public void fillStyleUndefinedFillRect() throws Exception {
1203 draw("<canvas id='myCanvas' width='20', height='10' style='border: 1px solid red;'></canvas>\n",
1204 "context.fillStyle = '#cc0000'; context.fillStyle = undefined; context.fillRect(2, 2, 16, 6);\n");
1205 }
1206
1207
1208
1209
1210 @Test
1211 @Alerts(DEFAULT = "data:image/png;base64,"
1212 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAAXNSR0IArs4c6QAAAC1JREFUOE9jZKAyYKSyeQxwA88wMPyn"
1213 + "xHATBohZowaSH4q0D0Py3Yaqk+rpEAAqPQwLveqeQwAAAABJRU5ErkJggg==",
1214 FF = "data:image/png;base64,"
1215 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAALUlEQVQoU2NkoDJgpLJ5DHADzzAw/KfEcBMGiFmjBpIfirQP"
1216 + "Q/LdhqqT6ukQACo9DAtpppU3AAAAAElFTkSuQmCC",
1217 FF_ESR = "data:image/png;base64,"
1218 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAALUlEQVQoU2NkoDJgpLJ5DHADzzAw/KfEcBMGiFmjBpIfirQP"
1219 + "Q/LdhqqT6ukQACo9DAtpppU3AAAAAElFTkSuQmCC")
1220 public void fillStyleUnknownFillRect() throws Exception {
1221 draw("<canvas id='myCanvas' width='20', height='10' style='border: 1px solid red;'></canvas>\n",
1222 "context.fillStyle = '#cc0000'; context.fillStyle = 'pipi'; context.fillRect(2, 2, 16, 6);\n");
1223 }
1224
1225
1226
1227
1228 @Test
1229 @Alerts(DEFAULT = "data:image/png;base64,"
1230 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAAXNSR0IArs4c6QAAAC1JREFUOE9jZKAyYKSyeQzIBv6n0HCw"
1231 + "WXQxEFcwEPIBTheOIAMpjGSIdqqnQwA/UgoLxnfNlgAAAABJRU5ErkJggg==",
1232 FF = "data:image/png;base64,"
1233 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAALUlEQVQoU2NkoDJgpLJ5DMgG/qfQcLBZdDEQVzAQ8gFOF44g"
1234 + "AymMZIh2qqdDAD9SCgsSO8biAAAAAElFTkSuQmCC",
1235 FF_ESR = "data:image/png;base64,"
1236 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAALUlEQVQoU2NkoDJgpLJ5DMgG/qfQcLBZdDEQVzAQ8gFOF44g"
1237 + "AymMZIh2qqdDAD9SCgsSO8biAAAAAElFTkSuQmCC")
1238 public void clearRect() throws Exception {
1239 draw("<canvas id='myCanvas' width='20', height='10' style='border: 1px solid red;'></canvas>\n",
1240 "context.fillRect(2, 2, 16, 6); context.clearRect(4, 4, 6, 6);\n");
1241 }
1242
1243
1244
1245
1246 @Test
1247 @Alerts(DEFAULT = "data:image/png;base64,"
1248 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAF1JREFUOE9j/O/C8J+BioBx1ECKQ3Mk"
1249 + "hyHjHgZGWABSkpTgYYhsILaYIdYSog0k1hKUWCbkSnxpCuaDIWYgupdICQKsXiYm3+GzBGQoVbIezBKqGYjsM6q4kKYGAgB9"
1250 + "kkg955Wz+gAAAABJRU5ErkJggg==",
1251 FF = "data:image/png;base64,"
1252 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABBklEQVQ4T2P878Lwn4GKgHHUQIpDc+iE4VOgX4WAmJNSP0O8"
1253 + "zMiwgEGAIYXhPYMW0EATMGYE4v8M+kA2OymWwMLwGcNuBhlGRtRE/r+BgYXhKIMO3BKIZbpAVWy4LEFEChODBeMuhpOEXPM/"
1254 + "FGjYBwY9FEv+gy1lBulFjuUOxj0MlYQMxCb/35WhHOjqDlQDGRluMO5m0CTLQA8GdYY/DDfQXQh0L4MLgzXDQcYGoDSJABi5"
1255 + "14BaNLEl7J9Agy8CvXAGqACCBRmuMa5m+IvPDqCB7UD5CmJzyneg4rNgw5mgeDvDLeRUAQxHe6AjDhBrIDbHfUax5B/DJaDP"
1256 + "TlBiINYQGPwGAgAm8mgw6jTe3wAAAABJRU5ErkJggg==",
1257 FF_ESR = "data:image/png;base64,"
1258 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAxUlEQVQ4T2P878Lwn4GKgHHUQIpDc+iE4QegXwUo9i/QAIiX"
1259 + "/zMsYNzLkPjfmSGAgZFBAcjXB9IGQHkQJgnAwvAD4x4GQWw6SbUEESksDIqMOxgeEOMcfJYgx3ID0JWNxBiIrua/K0MCMJjm"
1260 + "g8SRDcTpbUKW/HcARigLw3t0A0F8R6ArDxAyAEdY3wdFKK6EvQGo6QLQGxcZWBkuEBO2wNTSD9RTQEpOwWsJ0EAHoIH7STEQ"
1261 + "m09RLGH4w3CeUgMxLBn8BgIAZv1hLbrWWZAAAAAASUVORK5CYII=")
1262 public void transformTranslateClearRect() throws Exception {
1263 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1264 "context.fillStyle = '#ff4400'; context.fillRect(0, 0, 20, 20); "
1265 + "context.setTransform(1, .2, .3, 1, 0, 0); "
1266 + "context.translate(-5, 4); context.clearRect(4, 4, 16, 6);\n");
1267 }
1268
1269
1270
1271
1272 @Test
1273 @Alerts(DEFAULT = "data:image/png;base64,"
1274 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAAXNSR0IArs4c6QAAAHVJREFUOE9jZKAyYEQyL5GBgWEXAwPD"
1275 + "U0rsgBmozMDA0MLAwODGwMBwF2owyPBDpBqO7EKYXjuowSDDQRaBDIZhgq7HZiCyo6SRDHdnYGC4Q8j1hAxE9zHM9SDDlaCG"
1276 + "10CDCayWVAOxuX4+siAlBmKNr8FvIAB+fhILDX78/QAAAABJRU5ErkJggg==",
1277 FF = "data:image/png;base64,"
1278 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAY0lEQVQoU2NkoDJgRDIvGsjeDsTvKLED2cAlQIM8gfgO1OBt"
1279 + "QPoUqYYjGwjTawY12AtIq0ANB7mcKNdjMxDZUUJQw0EuJ8r1hAxE9zE218cgKyLVQGyuX0otA7HGFyUupI+BAC5XEQsxJDCz"
1280 + "AAAAAElFTkSuQmCC",
1281 FF_ESR = "data:image/png;base64,"
1282 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAAcElEQVQoU2NkoDJgRDLPF8g+B8RPKbEDZqAI0JDJQOwKxPeA"
1283 + "eBcUHyLVcGQXwvTaARluUKyMZDjIEoKux2YgsqOkkQwHWXKXkOsJGYjuY2TXKwEldwNxLhC/gSkk1UB01xsBBTYjC1JiINb4"
1284 + "GvwGAgB9VhILFc2B9QAAAABJRU5ErkJggg==")
1285 public void moveToLineToStroke() throws Exception {
1286 draw("<canvas id='myCanvas' width='20', height='10' style='border: 1px solid red;'></canvas>\n",
1287 "context.moveTo(2, 2); context.lineTo(16, 6); context.stroke();\n");
1288 }
1289
1290
1291
1292
1293 @Test
1294 @Alerts(DEFAULT = "data:image/png;base64,"
1295 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAOlJREFUOE+t0z1KRDEQAOBvS+32AHoI"
1296 + "EbzAoh7ARhAR3N6txUL8W7CzshEbwcbOxhU9idVaWNsoFoL6Igm8Qpbn20kzIWG+TEKmI3h0gj0F3M9wia3PKeAlvrHdWsqJ"
1297 + "dfAL/SjwAJ84jAKP8IHjKDBB7ziJAq8wg7UocAG3WMcrXnL8t1//2DtYRhdzeMMI9zk2wid1Sqp6FStYwg2uq/ndJLlp681i"
1298 + "CwM8Vbc4w8NfcFOwnpu6KX2z9ObD6qBxfbMNWPJPsYk9XJTFacBkLOI8P8MunqcFS2GpITYwHwUmuIfHSPC32nDwBzgGJBXR"
1299 + "dXO7AAAAAElFTkSuQmCC",
1300 FF = "data:image/png;base64,"
1301 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA4klEQVQ4T63TzwoBURSA8RmvwMpOUqxslaews7HyAv4nNhgp"
1302 + "SizY2nsCeQh7axt7C4UF39G9NVLTNHNufRlTfnMa97qO8nKVPceCI+A3jeM+wIIToBd5WmAT6ElbLVAme9BUC2yZCTdaYAco"
1303 + "QQstsA6Uo74WmAea05qudKF7FNy/sTMAXUpSmlJ0pIP5DOUHnRSZukwlqtDSbKtbkBz26MnUVZrRjnokB+FvhQX9P2zwpW0m"
1304 + "lnf+s6KAFlhxUTTv/WRvxgHFyNLe/GlDuREXtIMNuKhRQQsUWHbFWRP8TqsOfgB13yEV/GLnewAAAABJRU5ErkJggg==",
1305 FF_ESR = "data:image/png;base64,"
1306 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA3ElEQVQ4T2NkoDJgpLJ5DDADG4AG/wfiRkotgBkIMujfoDfw"
1307 + "L9CFTdT0MlUNrAa6jBOIa6jlwkygQXpADKIpArBYVgeacgqIs4D4HBA/BOJv5JiMnLBTgQZ4A7EGEMsD8XUgPgDFm4g1HF9O"
1308 + "sQIaYg/EDkBsDMSLgHgmEN/EZzixWU8VaEgcEBcA8XIg7of6AMNsYg2EaeQHMgqBuBKIu4G4DohBOQwOSDUQplEOyABlV1CQ"
1309 + "VADxKpgEuQbC9LtBvX8U6vKvlBoIMpgJiCcAMSiFKFPDQJSIGfwGAgAmkSMVCV26awAAAABJRU5ErkJggg==")
1310 public void moveToBezierCurveToStroke() throws Exception {
1311 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1312 "context.moveTo(2, 2); context.bezierCurveTo(2, 17, 1, 4, 19, 17); context.stroke();\n");
1313 }
1314
1315
1316
1317
1318 @Test
1319 @Alerts(DEFAULT = "data:image/png;base64,"
1320 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAOhJREFUOE/N1LErxVEUB/DP+xNke4OS"
1321 + "LAZlNkmxSIoy2ZRks5n0bDIoI6NNBmWQUW+RgZXF8AazySi/I7+6vXp63juDW3e59f3cM5xzGpJPo/B28YrnnzvQVyV4jElM"
1322 + "YQT3uMMtnvrVS7DMjGIW81jCO85xio/f8F5gd2YOm1jEIY56of2CdX4a+1WlTezgsRv+K1jnt3CCdVyV6KBgGAu4xgpuanQY"
1323 + "MIxlnGEGb/EwLBjGAcaxkQWG08EaHjIqDHAPY9jOAieqIWhHO2WBUeULVjPBy2oPXGSCsVw6mWALn5ng97D8f/ALi58fh0da"
1324 + "GhQAAAAASUVORK5CYII=",
1325 FF = "data:image/png;base64,"
1326 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA10lEQVQ4T83TMQ4BQRSAYRuFjqj2ANxAIdFzAEqN6BWipyHU"
1327 + "FBuF3hVcgEohGr0rqEThf5sZmWLEMq+wyZ/MbjLfTDKzUU75iRyvz3hPl5A1XHAD1KDYwILb7lkXcUE7p2xgwW1bxks6foJ9"
1328 + "oG9OjY9rOtOAbu/grKCd32OwohktfOi3oDXmDOrUoocL/wqK0aSpgV9mCCjImPI0sWIoKI5crREd5EUDLOJcqaQFijOkgpy8"
1329 + "xg4FbFOXOlpgBWxHVS1Qdil/T6wJpqetCSaAJ00wvdv/Dz4ByKocwaSTblsAAAAASUVORK5CYII=",
1330 FF_ESR = "data:image/png;base64,"
1331 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA4klEQVQ4T2NkoDJghJrHBKSzgPgaFL8g1x5kA6cCDdGC4r9A"
1332 + "+gQQ74DiB8RaADMQXb00UMAeiD2A2B2InwDxFCCeT8hgXAai6/MCCmQDsQbU4H5cBhNrIEy/FZBRA8T/gTgHiO+jG0yqgTD9"
1333 + "VUBGGRCHA/FOZEPJNRBkhj8QLwZiFyA+BTOUEgNBZiQCcQMQGwPxG5AApQaCzJgAdV0BtQwUgUaOJZC+Qg0XghxWB8R8QFxC"
1334 + "LQPNgYbNAWJdahkIciUoNzlR08DtQAMnUdPAhUAD91HTQFDiXk1NA8HJcfAbCABA6CBYte9o5AAAAABJRU5ErkJggg==")
1335 public void moveToQuadraticCurveToStroke() throws Exception {
1336 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1337 "context.moveTo(2, 2); context.quadraticCurveTo(19, 4, 19, 17); context.stroke();\n");
1338 }
1339
1340
1341
1342
1343 @Test
1344 @Alerts(DEFAULT = "data:image/png;base64,"
1345 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAADRJREFUOE9jZKAyYKSyeQyjBlIeokMr"
1346 + "DP9T6GGwb5G9PAINpDAIIdqHVrIZ9TJ5IUD1WAYAYokEFfnLcNAAAAAASUVORK5CYII=",
1347 FF = "data:image/png;base64,"
1348 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAANElEQVQ4T2NkoDJgpLJ5DKMGUh6iQysM/1PoYbBvkb08Ag2k"
1349 + "MAgh2odWshn1MnkhQPVYBgBiiQQV+ctw0AAAAABJRU5ErkJggg==",
1350 FF_ESR = "data:image/png;base64,"
1351 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAANElEQVQ4T2NkoDJgpLJ5DKMGUh6iQysM/1PoYbBvkb08Ag2k"
1352 + "MAgh2odWshn1MnkhQPVYBgBiiQQV+ctw0AAAAABJRU5ErkJggg==")
1353 public void lineWidthMoveToLineToStroke() throws Exception {
1354 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1355 "context.lineWidth = 4; context.moveTo(2, 10); context.lineTo(18, 10); context.stroke();\n");
1356 }
1357
1358
1359
1360
1361 @Test
1362 @Alerts(DEFAULT = "data:image/png;base64,"
1363 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAL9JREFUOE/tkr0NwkAMhb+0SNRQsAM/"
1364 + "PWILaGGMlClAbAEFDYzBAEAmgBK2QJZO4ohs4qCjw80V9/T5PdsZiStLzOPnwBYwAU7A4xv3msML0AeuAXwOr6uJBlwBueHu"
1365 + "FsGXmkYDjoGjI+4AKKs6ayl3oFMDlRRrL3ADzGuAkkIW+FaWwymwd8TuVq/BAraBHTACeh/AC2Ab/3sOW4DDAJcGcZMDMGsK"
1366 + "1AzGTYoUQHMKnsiO3bwkf2Cjcani5DN8AnFEGRVy9qdcAAAAAElFTkSuQmCC",
1367 FF = "data:image/png;base64,"
1368 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA0klEQVQ4T2NkoDJgpLJ5DDQ3kA3o4iggPgvE14D4L6k+wObC"
1369 + "E0BDzIH4OxBfgBoOsuAMEF8nZAk2AxuAmupxuOwH1JKjQLoUiP+jq8NmoAVQ0XEivGoJVAPyDQrAZiBI7AkQSxEwtBEoD/IN"
1370 + "QQNBCmYAcToBA08C5UG+IcrAAKCq9QQMBIWfDBA/Q1aHKx3yABX1ALEpEOsCMSsOw1OB4nOIMRBZDShtggw1RsIgPkh8IxCD"
1371 + "fAMH5OYUkGF6QKwOxEupYSDO4CXXhaMGUh7L9AtDAEzqHRUeyJjbAAAAAElFTkSuQmCC",
1372 FF_ESR = "data:image/png;base64,"
1373 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAApUlEQVQ4T2NkoDJgpLJ5DHQx0AHo6gPkuhybC+8DDVMA4gdA"
1374 + "fAGIL0ItIMoSbAb2Aw0owOFCZEsasKnBZqABUOF5IrysCPUFilJckQLzNj5zC4GSE9AV4DIQn7dhZoDC15BYAwOACteT421c"
1375 + "LhSAGghKQiR5m5iEDUpCoIgCYXsgRrZkA5AfiGwjMQZicyHMEhCNEjHkGogzGEYNJCLlEVAy+MMQAEwqFxVGqYQqAAAAAElF"
1376 + "TkSuQmCC")
1377 public void setTransformFillRect() throws Exception {
1378 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1379 "context.setTransform(1, .2, .3, 1, 0, 0); context.fillRect(3, 3, 10, 7);\n");
1380 }
1381
1382
1383
1384
1385 @Test
1386 @Alerts(DEFAULT = "data:image/png;base64,"
1387 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAL9JREFUOE/tkr0NwkAMhb+0SNRQsAM/"
1388 + "PWILaGGMlClAbAEFDYzBAEAmgBK2QJZO4ohs4qCjw80V9/T5PdsZiStLzOPnwBYwAU7A4xv3msML0AeuAXwOr6uJBlwBueHu"
1389 + "FsGXmkYDjoGjI+4AKKs6ayl3oFMDlRRrL3ADzGuAkkIW+FaWwymwd8TuVq/BAraBHTACeh/AC2Ab/3sOW4DDAJcGcZMDMGsK"
1390 + "1AzGTYoUQHMKnsiO3bwkf2Cjcani5DN8AnFEGRVy9qdcAAAAAElFTkSuQmCC",
1391 FF = "data:image/png;base64,"
1392 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA0klEQVQ4T2NkoDJgpLJ5DDQ3kA3o4iggPgvE14D4L6k+wObC"
1393 + "E0BDzIH4OxBfgBoOsuAMEF8nZAk2AxuAmupxuOwH1JKjQLoUiP+jq8NmoAVQ0XEivGoJVAPyDQrAZiBI7AkQSxEwtBEoD/IN"
1394 + "QQNBCmYAcToBA08C5UG+IcrAAKCq9QQMBIWfDBA/Q1aHKx3yABX1ALEpEOsCMSsOw1OB4nOIMRBZDShtggw1RsIgPkh8IxCD"
1395 + "fAMH5OYUkGF6QKwOxEupYSDO4CXXhaMGUh7L9AtDAEzqHRUeyJjbAAAAAElFTkSuQmCC",
1396 FF_ESR = "data:image/png;base64,"
1397 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAApUlEQVQ4T2NkoDJgpLJ5DHQx0AHo6gPkuhybC+8DDVMA4gdA"
1398 + "fAGIL0ItIMoSbAb2Aw0owOFCZEsasKnBZqABUOF5IrysCPUFilJckQLzNj5zC4GSE9AV4DIQn7dhZoDC15BYAwOACteT421c"
1399 + "LhSAGghKQiR5m5iEDUpCoIgCYXsgRrZkA5AfiGwjMQZicyHMEhCNEjHkGogzGEYNJCLlEVAy+MMQAEwqFxVGqYQqAAAAAElF"
1400 + "TkSuQmCC")
1401 public void transformFillRect() throws Exception {
1402 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1403 "context.transform(1, .2, .3, 1, 0, 0); context.fillRect(3, 3, 10, 7);\n");
1404 }
1405
1406
1407
1408
1409 @Test
1410 @Alerts(DEFAULT = "data:image/png;base64,"
1411 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAEFJREFUOE9jZKAyYKSyeQyjBlIeoiM4"
1412 + "DBUYGBiSSAjBOlxqkcOwiQQD5zEwMDzApn4ERwoJwYdf6WgYUh6UVA9DAJn9AxWRWUx3AAAAAElFTkSuQmCC",
1413 FF = "data:image/png;base64,"
1414 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAR0lEQVQ4T2NkoDJgpLJ5DKMGUh6iIzgMBYChV0BkCH4AqpuA"
1415 + "Sy1yGIIMBBlMDAAZCDIYA4zgSCEm3IhSMxqGRAUTXkVUD0MA33oEFT5oGBkAAAAASUVORK5CYII=",
1416 FF_ESR = "data:image/png;base64,"
1417 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAPUlEQVQ4T2NkoDJgpLJ5DKMGUh6iIzwMG0gIQZxqkcMQpIif"
1418 + "SEMbgeo+YFM7wiOFyODDr2w0DCkPRqqHIQCa5QMVIJiVTAAAAABJRU5ErkJggg==")
1419 public void moveToLineToTransformStroke() throws Exception {
1420 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1421 "context.moveTo(2, 10); context.lineTo(13, 10);"
1422 + "context.transform(1, .2, .3, 1, 0, 0); context.stroke();\n");
1423 }
1424
1425
1426
1427
1428 @Test
1429 @Alerts(DEFAULT = "data:image/png;base64,"
1430 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAGZJREFUOE9jZKAyYKSyeQyjBlIeoqNh"
1431 + "CA5DFgYGhj/khiauMHzAwMBwm4GB4QISvkqMJfgiRZuBgcEADSNbAGJjWEJqLKNbosrAwKCA7HJSDcTma5Qwp4aBKJaMGkhM"
1432 + "SsOvhuphCABLbg0VZ88YdgAAAABJRU5ErkJggg==",
1433 FF = "data:image/png;base64,"
1434 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAb0lEQVQ4T2NkoDJgpLJ5DKMGUh6io2FImzBkAxp7DYhvAPFF"
1435 + "IL4EpW8B6X+ErMQVKfxAjYZArAfE+lBaCUjfQ7IAZNF5IP6IbAkpscwE1KiGZAHIIg0g1gLiXzBDSTGQkG/B8qMGEhVMeBUN"
1436 + "/jAEAMq8DhXVLTYNAAAAAElFTkSuQmCC",
1437 FF_ESR = "data:image/png;base64,"
1438 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAZ0lEQVQ4T2NkoDJgpLJ5DKMGUh6io2EIDkMBIP5AbmjiCsP3"
1439 + "QAMPAPEDID4IxBegbIL24IsUB6BuBSDWB2IDIAbxNxCyhNRYRrcEZJEgsrNJNRCbl1HCnBoGolgyaiDBZEZQAdXDEABMtg0V"
1440 + "HTQi5gAAAABJRU5ErkJggg==")
1441 public void transformMoveToLineToStroke() throws Exception {
1442 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1443 "context.transform(1, .2, .3, 1, 0, 0); context.moveTo(2, 10);"
1444 + "context.lineTo(13, 10); context.stroke();\n");
1445 }
1446
1447
1448
1449
1450 @Test
1451 @Alerts(DEFAULT = "data:image/png;base64,"
1452 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAADNJREFUOE9jZKAyYKSyeQyjBlIeoiM8"
1453 + "DBsoDEGwfuQwpLqBFDoQon2Ex/JoGJIXAlRPNgCWIAIVwMrcFwAAAABJRU5ErkJggg==",
1454 FF = "data:image/png;base64,"
1455 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAM0lEQVQ4T2NkoDJgpLJ5DKMGUh6iIzwMGygMQbB+5DCkuoEU"
1456 + "OhCifYTH8mgYkhcCVE82AJYgAhXAytwXAAAAAElFTkSuQmCC",
1457 FF_ESR = "data:image/png;base64,"
1458 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAM0lEQVQ4T2NkoDJgpLJ5DKMGUh6iIzwMGygMQbB+5DCkuoEU"
1459 + "OhCifYTH8mgYkhcCVE82AJYgAhXAytwXAAAAAElFTkSuQmCC")
1460 public void moveToLineToRotateStroke() throws Exception {
1461 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1462 "context.moveTo(2, 10); context.lineTo(18, 10); context.rotate(90); context.stroke();\n");
1463 }
1464
1465
1466
1467
1468 @Test
1469 @Alerts(DEFAULT = "data:image/png;base64,"
1470 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAALBJREFUOE/t0rEJAkEUhOH/cjGwAhEs"
1471 + "wSYMLMEmNBCNNbcJ0RosQrAEMRYzOTCQB/Nkg3PZXQ0M7sU7H8OwFdADbvzoKmAP3IENcPnWNbADLIGF0DXwKIUN9OsDK2Ai"
1472 + "eFuChqDnR2o8FLzLgZtAz48FPwGb4ZgCx0DPTzXFWY1PMTgF9PxMjQ+Cr01wDmj5rtB58CPqEM4FPTsQbLta4/eVgh9nbMGU"
1473 + "rxt/0274hxu+AE0JGRUWB25NAAAAAElFTkSuQmCC",
1474 FF = "data:image/png;base64,"
1475 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAvklEQVQ4T2NkoDJgBJo3FYg/AXE3EL+j1HyQgZxAXATEaVDD"
1476 + "JwPp7+QaDDIQBkSBjAYg9gHiFiCeD8R/SDUY2UCYXjUgowuINYG4GojXAvF/Yg3GZiBMrzWQMQOIfwBxARAfJcZQfAaC9DMB"
1477 + "cRw0CM4B6SogvoLPYEIGwvTCIq4UKLARiOuB+AE2g4k1EKYXFnEJQIHZQNwKxK+RDSbVQPSIWwAU2EANA3EGI7kuHDUQEQKj"
1478 + "YUhM9sevhuphCAApYRoVT9kKewAAAABJRU5ErkJggg==",
1479 FF_ESR = "data:image/png;base64,"
1480 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAqklEQVQ4T2NkYGAQB+KXQEwVwAg0ZR4Q/wLiNiB+RKmpIAO5"
1481 + "gbgaiCuAuBVq8HdyDQYZCAMKQEYVEPtDDZ1IjqHIBsL0m0INVoUavIwUg7EZCNPvCQ2KP9Cg2E2MwfgMhOmPg7r4MtTF5/EZ"
1482 + "TIyBMP3FUINXQg1+gs1gUgwE6eeDGloCNbQJSIOCBA5INRCmUQlq8HogvZUaBuIMRnJdOGog5bE8GoY0DEMATKUZFZcLTogA"
1483 + "AAAASUVORK5CYII=")
1484 public void rotateMoveToLineToStroke() throws Exception {
1485 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1486 "context.rotate(.5); context.moveTo(1, 1); context.lineTo(18, 1); context.stroke();\n");
1487 }
1488
1489
1490
1491
1492 @Test
1493 @Alerts(DEFAULT = "data:image/png;base64,"
1494 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAADdJREFUOE9jZKAyYKSyeQzIBv6n0HCw"
1495 + "WaMGUhSKtA9DipwH00zTdDjqQvJCYDRSyAs3ZF2DPwwBbfkGFYXESWwAAAAASUVORK5CYII=",
1496 FF = "data:image/png;base64,"
1497 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAN0lEQVQ4T2NkoDJgpLJ5DMgG/qfQcLBZowZSFIq0D0OKnAfT"
1498 + "TNN0OOpC8kJgNFLICzdkXYM/DAFt+QYVhcRJbAAAAABJRU5ErkJggg==",
1499 FF_ESR = "data:image/png;base64,"
1500 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAN0lEQVQ4T2NkoDJgpLJ5DMgG/qfQcLBZowZSFIq0D0OKnAfT"
1501 + "TNN0OOpC8kJgNFLICzdkXYM/DAFt+QYVhcRJbAAAAABJRU5ErkJggg==")
1502 public void rectFill() throws Exception {
1503 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1504 "context.rect(2, 2, 16, 6); context.fill();\n");
1505 }
1506
1507
1508
1509
1510 @Test
1511 @Alerts(DEFAULT = "data:image/png;base64,"
1512 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAPxJREFUOE/F08EqRVEUAND1PkL5AEli"
1513 + "qgxRb2Cg5AswMREDmZqLwctE6T2lZCDlB0wYGBmIJF9ARr6Au3WVbq577uvGGZ7a6+x99t4tDZ9Ww54/Adf4fGgRT7jAGV5T"
1514 + "qilmGNg0dnJsEksYze/2q9AiuI4bXBUCx9HFIzbxXAYXwVu08VISsIcxTKWCpzjGeVVpqeAKZjHXFDiAa8zjrh/0pzmMLKOz"
1515 + "E02B4RzhDat10bJNGcRJNpOX2KqD/rZ6QzjAfZ1Mq3Y5Mt3GCJZTGlUFflUbjdrAA3r5JAznjdv9/iWpYMTESC1kazmDwA6z"
1516 + "/31Hp18wqTd1Mvwf8AMXuSUVr2KpOAAAAABJRU5ErkJggg==",
1517 FF = "data:image/png;base64,"
1518 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABAklEQVQ4T72UvQ4BQRRGbaOT6L2AQqHTeAK0HkAnkSgoJOIn"
1519 + "QYSEREGn0mppRCVRKMVPPIBapVBIOLeQyMTuzLKxySlm987ZOzvzreXz+LI89vn+IozSdQWCcIYpzE1XonYosi404AoyToMf"
1520 + "qrDRiVWhdDOAtTIxzLgEe+g7SVXhkuIibG0m5bgfgrKdVBWOKVzBxKGLFM9mpsIEhdJFUvetTIVSt4A8nL6RfjqHMURZyHgl"
1521 + "FI9szA1GbqVOSWkju0PNjVQXvQ4yScvQVKoTiqcAEejBUSc2EYpDNqoOD5A07SAAcWi9v8RU+Joj51SyLWm5QBMOvwh1K/7P"
1522 + "/1DbhVPBEzD3JBVTQqvpAAAAAElFTkSuQmCC",
1523 FF_ESR = "data:image/png;base64,"
1524 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABAElEQVQ4T72UPQuBURSAfazMTAblP4jBKCOF1eAPIJvB7iMx"
1525 + "KYMyIbKJzeRH2GxmVvKcQrlxP0pOPcP7vvc8nXPvPa/X8+Pw/tjn+YswQ9VlCMABdjC37UStUGSSXIMjxKAIfujCzCRWhQsS"
1526 + "tjBUEnM8N2EDdZ1UFUpCD9YfkoK8G4MPst+kqnDw2Le+pooQ3062wjwLK5Aw7ZWtUNbtoQ2yn87x6R4WsDQgCWdX47eLLRVG"
1527 + "QU7XKXSTssIUhriLUSeUSZnADUq27dvMcgtZGpqwNFVrIxSHHFQVrjAFmfEIdEA6eYWt8Jkg9zQFMuMXGMHbVLkKTR3/539o"
1528 + "rEK34A43YyQVd6W5xwAAAABJRU5ErkJggg==")
1529 public void ellipseStroke() throws Exception {
1530 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1531 "if (!context.ellipse) { log('context.ellipse not supported'); return; }\n"
1532 + "context.ellipse(10, 10, 8, 4, Math.PI / 4, 0, 1.5 * Math.PI); context.stroke();\n");
1533 }
1534
1535
1536
1537
1538 @Test
1539 @Alerts(DEFAULT = "data:image/png;base64,"
1540 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAOlJREFUOE/NlL0OAVEQRs+UCrVai8Qb"
1541 + "aK0HUCslOk+iU6hovQC1JyBCq9cqlMPdrGTt/dtNNmLqmXPnm/nmCjWH1MzjN0BVEqAJXEW4VFFhdajKHhjmICdgIcKmDPgL"
1542 + "mHW28xSah2Yi3ELgInAMbAMFTyAR4eDLKQJ7wDki7S5CqxTQJKlyBPoR6EgknbUVrqVMgHUEuBJhWgqYdWkWY6zjC69sp7FV"
1543 + "aUPqv0YA6pTtvRRVBpDOyQd1yg6eXgTqlB295Uz+0jNTS3YU+JmhKmb784KlLNmlgTlw931NHeDh8mJlYOyD+H/gC77COxVH"
1544 + "Ilo+AAAAAElFTkSuQmCC",
1545 FF = "data:image/png;base64,"
1546 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABKklEQVQ4T2NkoDJgpLJ5DPQx8P9/BmGgyxWB+CojI8N3UnyB"
1547 + "4kKgQcxAzVuA2ANqyF8gvRqIW4AGXyXGYHQD7YGaDmDR+B8oNheIS4AGf8RnMLqBPkDFm/FouAlyPdDQB7jUoBsICrd7BLz2"
1548 + "CCivADQU5GoMgBHLwHA8C1RlRMBQe6CBh4g10BGocB8BA6cADcwlykCQIqAr1wCpYDyGvgTKSWLzNtaEDTRQEKgB5HVQmOIC"
1549 + "dkADD6NL4swpQENVgIqPALE4DhMnAQ3MJ9pAqNflgfReIFbGYugLoJgUurcJ5mWgS4WAGruBOAmLobZAA0G+gAOCBsJUAg3W"
1550 + "BbKrgDgMiJmg4k1AA+vJMhDJYC4gWwuIuUFhDDQQlN9JdyGuqCYpUog1hKYuBAD36EAVpWqveAAAAABJRU5ErkJggg==",
1551 FF_ESR = "data:image/png;base64,"
1552 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA7ElEQVQ4T73UgQ2CMBQE0HYD3aAjOIIjwAayiU5g3MANYAPd"
1553 + "QDfQDXQDvEtKUuH3/5IQmhBMgMddafVu4eEX9tw6YN+7gOTBe3ef22CSENgZyAHHJmJEL8C7EvwPjMkeCZYaHdDaQsfgDg8Q"
1554 + "zI0nLjSAeRbHGGTNj5HiC3BbBPIm1GZCJtVGnZtT6aNYtfmiK8BGeqO4DpHyhpv3SsRs7RzIuSSqVRdrZ3dKXEIvJaVYW916"
1555 + "QJmwxREEWKxt7mWgrE9UmtNJbRMckgGu8JvbMk17wtc+pumLwQQmyKl4SztmNmgs+JX+D60U2vUf7SQ5FX401SMAAAAASUVO"
1556 + "RK5CYII=")
1557 public void ellipseFill() throws Exception {
1558 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1559 "if (!context.ellipse) { log('context.ellipse not supported'); return; }\n"
1560 + "context.fillStyle = 'yellow';"
1561 + "context.ellipse(10, 10, 8, 4, Math.PI / 4, 0, 1.5 * Math.PI); context.fill();\n");
1562 }
1563
1564
1565
1566
1567 @Test
1568 @Alerts(DEFAULT = "data:image/png;base64,"
1569 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAKhJREFUOE/t1CEOAjEUhOFvBRKB5wJY"
1570 + "DBqB5QIcAwFHAMEZUGgSLAKNwXIBPAKJgSZLQmB308LKrWsy/TMzr22m5pXVzNMACxtt4R7bdVWHbWywxboO4A5nzGJhQVfm"
1571 + "cIgV+imwKuAcnVR3/wCXuGLxmeDXyCdMcYgFBl3ZUIK7HsZF/cZcmy72+eERLpg8Hd5SgS99mPgg3xyLYr6Dm88h9V1862vv"
1572 + "8AEQFhYVPMxY1gAAAABJRU5ErkJggg==",
1573 FF = "data:image/png;base64,"
1574 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAArElEQVQ4T2NkoDJgpLJ5DKMGYg1RcaDoS2LDmlAYJgINegPE"
1575 + "m6lhYDfQkG9AXE+sYSB1uFxoAJRrB2JPUgzDZ2AeUFIZiPOpZWAa0CBjIE7HYeBsoPhJIJ6DLo/Py0VAxXE4DFwKFO8A4svE"
1576 + "GghSVwb1NrorQa66DsS92CwjlGxAhupBYxuklguIz+EyDF+kIFsOMtAciP9Dww3Dm8iKCbmQ1EgeLW1IDjFMDQCsfxYVL43f"
1577 + "UAAAAABJRU5ErkJggg==",
1578 FF_ESR = "data:image/png;base64,"
1579 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAt0lEQVQ4T2NkoDJgpLJ5DKMGUh6i+MKQE2j8TCDeD8TzibUK"
1580 + "n4GLgYaoA7EZsYaB1OEy0AQotxCItUkxDJ+BZUBJGSDOo5aBGUCDDIE4HYeBoLC9BMRT0eVxedkGqHARECvhMPAqUBxk6WFi"
1581 + "DQSp2wDEL6AakfVNAXKEgDgKm2WEst5aqNe3A2lTIBYE4pNAnAjEv8kxEKQHlGxAsc4DxLuB+DyOYAALE3IhPr1Y5UYNJDnI"
1582 + "MDQAAHzHFBVJ6doGAAAAAElFTkSuQmCC")
1583 public void arcStroke() throws Exception {
1584 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1585 "context.arc(10, 10, 4, 0, 4.3); context.stroke();\n");
1586 }
1587
1588
1589
1590
1591 @Test
1592 @Alerts(DEFAULT = "data:image/png;base64,"
1593 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAALRJREFUOE/l0qEKwlAYxfGfT2AWbCbB"
1594 + "brEYrAarj2EwqkX0ZQSzwWKxmC02wShis+g2loaDbcwgu3DL5Z4/5zvnq2Ee3CLnjVpSGD6EwKLQJG9eUeAsCHdRpJUvmqpm"
1595 + "+D972Ec3bu6IfYHmo5aX6KCJXQwZ4IoxnjnAEfCMLaYJ4RptDPMCb2ikiE6Bw0mO8SOHB/RSgKHLO1YZXf4GWPrIpZcSrs0I"
1596 + "dVzirFp4YINXxvyibx97bTIVviNnOwAAAABJRU5ErkJggg==",
1597 FF = "data:image/png;base64,"
1598 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAwklEQVQ4T2NkYGA4AMVAimJgzwg0ogGKKTYNaED9qIEUB+No"
1599 + "GFIchDROh0ZAB5pAHXkKSF8gw8HwWP4F1KwOxD+ghnAC6StA3EWioWAD9wLxTSDOQtM8E8i/S6KhYANBXjPA4ZIlUAMvEelS"
1600 + "sIFnkMIOXd90qPxcahk4G2jQSSCeQ4qBF4GK9XFoWAoU7wDiy6QYuBuo+B4Qp6NpArnqOhD3EmkYSBk4DPcD8W8gFgdiUPJh"
1601 + "AmJWIH4GxMdJMAyk1AEAvZs0gSroYl8AAAAASUVORK5CYII=",
1602 FF_ESR = "data:image/png;base64,"
1603 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAsUlEQVQ4T2NkYGDYD8QHgZgawJ4RaEoDFFPDwIZRAykOxtEw"
1604 + "pDgIGWgbhuZABxpBHXkOSJ8kw8FgF7YAsQwQhwHxUqgh0UB6FRBnAvF3EgwGG3geiH8DsRmaxlNA/jUgTiDVQJBhrDg0fQOK"
1605 + "O5LgfbALzwKxMQ4D5wDFU0h1ISgCYJGBrnc2UAAkP51IQ8EupLqXqR4poOKfD4h1gPgSEINcrQvEV4B4CxD/JdK7IGX2AF1J"
1606 + "M5M1IFdKAAAAAElFTkSuQmCC")
1607 public void arcCircleStroke() throws Exception {
1608 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1609 "context.arc(4, 16, 4, 0, 2 * Math.PI); context.stroke(); context.strokeRect(0, 0, 20, 20);\n");
1610 }
1611
1612
1613
1614
1615 @Test
1616 @Alerts(DEFAULT = "data:image/png;base64,"
1617 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAHVJREFUOE9jZKAyYKSyeQyjBmINUVsG"
1618 + "BgZrqMxJBgaG/fjCnZgwzGVgYJCBGuLKwMDwhIGBIZqBgeEzNoOJMRBdXycDA4MmAwODH7UMBJlzDujCYmzeJ8eFIANBrnzP"
1619 + "wMDQge5Kcg3EGS+jBlJeVIyG4SAMQwCdIwoVbWPYDQAAAABJRU5ErkJggg==",
1620 FF = "data:image/png;base64,"
1621 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAa0lEQVQ4T2NkoDJgpLJ5DKMGYg1RWaCoBxCDgucUEF/AF+7E"
1622 + "hGEt0ACQof+BmBOIrwBxFy5DiTEQXe9MoMBdXIaSYyDIgiVQAy+h20augbOABp0G4tnUMhBnvJDrwlEDESEwGoaUF7dUD0MA"
1623 + "jksLFQkR+1oAAAAASUVORK5CYII=",
1624 FF_ESR = "data:image/png;base64,"
1625 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAcElEQVQ4T2NkoDJgpLJ5DKMGYg1RSaCoExBLAfE6IL6LL9yJ"
1626 + "CcNKoAH6QPwBiIOB+AAQh+IylBgD0fUuBwp8BeIUbIaSYyDInEdA7ALEt9ANJdfAxUCDDgLxHGoZiDNeyHXhqIGIEBgNQ8qL"
1627 + "W6qHIQCR/wsV2AyBPAAAAABJRU5ErkJggg==")
1628 public void arcAnticlockwiseStroke() throws Exception {
1629 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1630 "context.arc(10, 10, 4, 0, 4.3, true); context.stroke();\n");
1631 }
1632
1633
1634
1635
1636 @Test
1637 @Alerts(DEFAULT = "data:image/png;base64,"
1638 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAKBJREFUOE/t1KENAkEQheHvCkDgaQCL"
1639 + "QSOwNEAZCCjhEJRBA1gEGoOlATyCBmCTO8Fl7xIuE9SNncy/772dTCG4imCeAZhNdIF51bni0pV7V4YjHDHBuYIs8cAarxy4"
1640 + "C3jCHdvG4B5TrH4BJpsHzFrs3T4KNzn7bQp3GGfU1fyk8omy+eDfgOGWk5PQT0nA8LWp8w5b7F6HaLg2vWL7GnoDgugeFeNK"
1641 + "vNUAAAAASUVORK5CYII=",
1642 FF = "data:image/png;base64,"
1643 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA0klEQVQ4T2NkoDJgpLJ5DKMGYg1RI6CoCVTmFJC+gC/cCYVh"
1644 + "FVCzOhD/gBrCCaSvAHEXLkPxGQgyTAaIs9A0zwTy7+IyFJeBIG/mA3E8DpcsgRp4CV0el4GpQIWGWFwH0z8LyDgNxLNJMdAU"
1645 + "qDgNhwtBBp0E4jnEGmgAVFgExHE4DFwKFO8A4svEGghSVwbEykCcjqYJ5KrrQNyLzTJCyQZkqB4QfwZiFiDmAuJzuAwDWUDI"
1646 + "QJAakIFmUNeAwg3Dm8guJcZAHMGIXXjUQJKCC6tiABZOHBWsf4c4AAAAAElFTkSuQmCC",
1647 FF_ESR = "data:image/png;base64,"
1648 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAsUlEQVQ4T2NkoDJgpLJ5DKMGYg1Rc6CoEVTmHJA+iS/c8YUh"
1649 + "J1DjdCAOA+KlUEOigfQqIM4E4u/YDMZn4AKgBi0gNkPTeArIvwbECaQYCPLmfiDmwuG9b0BxR2zex+VCkJdA4ZaKw8DZQHFQ"
1650 + "eIKCBAXgM9AYqDIFh4FzcMnhMpDqXgY5jKqRAjKQA4hnADEs2YB8EwXEoGSTAcQ/SIllZLVUS9g44gO/8GhpQ1awoWgCAGzL"
1651 + "HRVrJ2zIAAAAAElFTkSuQmCC")
1652 public void arcCircleAnticlockwiseStroke() throws Exception {
1653 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1654 "context.arc(10, 10, 4, 0, 2 * Math.PI, true); context.stroke();\n");
1655 }
1656
1657
1658
1659
1660 @Test
1661 @Alerts(DEFAULT = "data:image/png;base64,"
1662 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAIZJREFUOE/tlDEOQEAQRd+KhuuotVou"
1663 + "JCIuRKtVuw6NICuREEaxJtHYdjNv/r6ZrEH5GGUeP/C90WeHORE+OTPJ1sqjZaKiopday0AL8+gwBKfihZGZWILKwJKahfQ2"
1664 + "iaGhILu7k4EFwyXdTrApS8KPgepPVh+KFaS6No47/n8OjuIOZeoOVy24KBWsq37aAAAAAElFTkSuQmCC",
1665 FF = "data:image/png;base64,"
1666 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAn0lEQVQ4T2NkoDJgpLJ5DKMGUh6i+MOwgUECaMVsILaAWnWc"
1667 + "gZUhnaGa4Tkuq3Eb2MogyfCb4RRQowya5idAvj5DA8M7bIbiNrCBYQlQQzQOlywEGphAqoEvgBrEcRj4EmggKDgwAD4XUt1A"
1668 + "qntZCuifk1gjhZ1Bj6GS4T1pXgaphsT0TCDLEqr5BJBOBYYfKDiwgtG8TOu8TIb5VI8UAIOoHhWKBN6HAAAAAElFTkSuQmCC",
1669 FF_ESR = "data:image/png;base64,"
1670 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAfElEQVQ4T2NkoDJgpLJ5DKMGUh6i+MOwmkGegZVhItAaU6hV"
1671 + "pxl+M+QztDI8xGU1bgMhht0AauRA0/wDaKgGLkNxG9jAsAFokD8Ol2xkaGAIwCaHz8CnQA1SOAx8BjRQesANpLKXqR4poACi"
1672 + "arIhM42PFg5kBhySNqqHIQDrciAVd504BAAAAABJRU5ErkJggg==")
1673 public void arcFillPath() throws Exception {
1674 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1675 "context.fillStyle = 'green'; context.beginPath();"
1676 + "context.arc(10, 10, 4, 0, 2 * Math.PI); context.fill();\n");
1677 }
1678
1679
1680
1681
1682 @Test
1683 @Alerts(DEFAULT = "data:image/png;base64,"
1684 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAPRJREFUOE+91DtOw0AQgOHPFlyEAs4A"
1685 + "JQ2cghouES2IO8R1KjpKHgVFCnIAKigizkCFRETAASe2ceKHLLbdmX//nZndSM8r6plnPfDCvk8nOMTO78FTPIiNDEyqZKqB"
1686 + "wRCnNfaJ4Kwc8xcY3OKoYSnuBMf52CKwmVn5rILpCvhTs8eGZsWw2EFW0xWwm10GXlrmgc/Y7WTIi2Avzc0DP7DVETgTbPcF"
1687 + "vOJ7zIJxGdjmyu9IzCQupXnL1bYpr+aGImkT3ja/lE1jE5mYLyCjuhrXDfb1AnTuvg6U7Vc9vRtMxRIDT01B64FtCaX4f/wP"
1688 + "O5r2bvgFsto7Fc6TIKEAAAAASUVORK5CYII=",
1689 FF = "data:image/png;base64,"
1690 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABPElEQVQ4T83UzyuEQRzH8feiuHJyUy4S5e6u3PwBDpy4iBM5"
1691 + "iKndC1qJ1hEnB3EnRykXKfIjtVt7cuWg/OYz5Wlnxz7MPm3y1Pcw02deM8/MNClq/KVq7BEPZmjjlUFN2K/qUtnsqeqEBnLM"
1692 + "UKy0mO+gURxWVCOq+pg/eFb/Ai1kGOfJzZSD2wIu2VVgIHArDoX2uWg5aDQrTAZiUSyHYSxqlMA0HbxxXSVm4++qTqE3tlEC"
1693 + "DctqTyQA7ZBFgVM+eK6O7oTgmcAeH3xUR2NC8E5gsw9+JMDsmB3VksBjH8yroz0QfVBuXTc2619w91A2FBr+BbzVMa5qY9aY"
1694 + "5r5S1gV7FTiKAa8EzdPKFqO8/DSpf7E3FR5yBuwLyjLHQeBWeI+DoUkD91QF6gTNchEKRbk/fL6qXdpX/v+v8BPqrD0V/Gmy"
1695 + "MAAAAABJRU5ErkJggg==",
1696 FF_ESR = "data:image/png;base64,"
1697 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABBklEQVQ4T82UjRGCMAyFwwa6AW7gCDqBjuAIMoFhAmUC3UCd"
1698 + "QDaQDXQDGcEXpJgWKj/neebu3QGJX1/T1IC+HMGXeeQHMk2x2BJaQCGUQ3cog2Li4r0WdSDTCFUraAPJsy8Eym6yCXgsnXXp"
1699 + "RgrkXBfaQKY1ktsuJFVjOX0DXz27tGzTt9YETqW/6lCGuTML7ACMXKC4m/Xcrimveqm3fEM2HAjM4XDsOhwKTAGKAJT5tHp4"
1700 + "xbscTJeQoT5BiQGZH+ktMz7KMH8KASXQwZyqW6yBciseHpps61yCGq9c3aF84WKoZbhNCCiGMt/d9Ts0GaY9HkOoanRLG6z0"
1701 + "D/+++thStf/v8AmQKzYVpXVGrAAAAABJRU5ErkJggg==")
1702 public void arcFillPathAngle() throws Exception {
1703 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1704 "context.fillStyle = 'green'; context.beginPath();"
1705 + "context.arc(10, 10, 8, 2.3, 2 * Math.PI); context.fill();\n");
1706 }
1707
1708
1709
1710
1711 @Test
1712 @Alerts(DEFAULT = "data:image/png;base64,"
1713 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAALhJREFUOE/Fk7ENAjEMRd/NQsEOLMAC"
1714 + "tFQ3AQwCE1DRsgALsMMV7AKW7lAUYn8XEaSKlO/n7+RnoPMaOvP4CfAKPJPOV2/tvtTWDnfAGbgkgSNwAG6LvjXyAziVIgdu"
1715 + "zY/AJnJoZ01hA9ps7D2Kcuk29YDKpdswio1XFDaLgF5heB0q2HWxugr5U2qAeiwJtLQsENt/5a6Okxq5zKXtZeAzQANNs5O1"
1716 + "+pJZ4HYG3XsBFedznnX4P+ALwKAjFWklBKcAAAAASUVORK5CYII=",
1717 FF = "data:image/png;base64,"
1718 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAApElEQVQ4T+WT0Q2AIAxEwYncQDcxTmLcRCfRCVxJ2w8Iadoe"
1719 + "JsQfSfrV412BI4bGKzbmhU+Ay8up11IvJxyouVNtldCJdDPVmfTakQ9qsmsWGXA2Z93oTcg9VahAVWPrUdCUpqkFRFOahl5s"
1720 + "rE2umQe0NrrXgYItN6OrgD9FAtBjQSCnJUFuLXcyTujIZS4T0A18DZChF1VH1aMvWQtEnNz/IfABG4IjFfQNX+kAAAAASUVO"
1721 + "RK5CYII=",
1722 FF_ESR = "data:image/png;base64,"
1723 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAr0lEQVQ4T2NkoDJgpLJ5DDQ3sIFMF8P1obswBGhgPxDPJdLg"
1724 + "ZKC6QiBeA1OPzcvHgJJ9yIpwGA6yvAiIrZDlsRmIVSEWQ7FajCtSCLkSp6W4DCTkSpwW4ks2uDThtQyfgbg04g0OQgkbXTOh"
1725 + "oCCYU9ANIBRZBA0EpRaYISA2RrpDT06EvAxSD3MliE0wwRNjIMigm1CXqBPKksQaCHIlCMDzLC6DiTWQkMPg8oPfQAB2pSIV"
1726 + "qh5VTAAAAABJRU5ErkJggg==")
1727 public void closePath() throws Exception {
1728 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1729 "context.moveTo(4,4); context.lineTo(10,16);"
1730 + "context.lineTo(16,4); context.closePath(); context.stroke();\n");
1731 }
1732
1733
1734
1735
1736 @Test
1737 @Alerts(DEFAULT = "data:image/png;base64,"
1738 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAChJREFUOE9jZKAyYKSyeQyjBlIeoqNh"
1739 + "OBqGZITAaLIhI9DQtIzAMAQASMYAFTvklLAAAAAASUVORK5CYII=",
1740 FF = "data:image/png;base64,"
1741 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAKElEQVQ4T2NkoDJgpLJ5DKMGUh6io2E4GoZkhMBosiEj0NC0"
1742 + "jMAwBABIxgAVO+SUsAAAAABJRU5ErkJggg==",
1743 FF_ESR = "data:image/png;base64,"
1744 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAKElEQVQ4T2NkoDJgpLJ5DKMGUh6io2E4GoZkhMBosiEj0NC0"
1745 + "jMAwBABIxgAVO+SUsAAAAABJRU5ErkJggg==")
1746 public void closePathNoSubpath() throws Exception {
1747 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1748 "context.closePath();context.stroke();\n");
1749 }
1750
1751
1752
1753
1754 @Test
1755 @Alerts(DEFAULT = "data:image/png;base64,"
1756 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAChJREFUOE9jZKAyYKSyeQyjBlIeoqNh"
1757 + "OBqGZITAaLIhI9DQtIzAMAQASMYAFTvklLAAAAAASUVORK5CYII=",
1758 FF = "data:image/png;base64,"
1759 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAKElEQVQ4T2NkoDJgpLJ5DKMGUh6io2E4GoZkhMBosiEj0NC0"
1760 + "jMAwBABIxgAVO+SUsAAAAABJRU5ErkJggg==",
1761 FF_ESR = "data:image/png;base64,"
1762 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAKElEQVQ4T2NkoDJgpLJ5DKMGUh6io2E4GoZkhMBosiEj0NC0"
1763 + "jMAwBABIxgAVO+SUsAAAAABJRU5ErkJggg==")
1764 public void closePathPointOnly() throws Exception {
1765 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1766 "context.moveTo(4,4); context.closePath(); context.stroke();\n");
1767 }
1768
1769
1770
1771
1772 @Test
1773 @Alerts(DEFAULT = "data:image/png;base64,"
1774 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAChJREFUOE9jZKAyYKSyeQyjBlIeoqNh"
1775 + "OBqGZITAaLIhI9DQtIzAMAQASMYAFTvklLAAAAAASUVORK5CYII=",
1776 FF = "data:image/png;base64,"
1777 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAKElEQVQ4T2NkoDJgpLJ5DKMGUh6io2E4GoZkhMBosiEj0NC0"
1778 + "jMAwBABIxgAVO+SUsAAAAABJRU5ErkJggg==",
1779 FF_ESR = "data:image/png;base64,"
1780 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAKElEQVQ4T2NkoDJgpLJ5DKMGUh6io2E4GoZkhMBosiEj0NC0"
1781 + "jMAwBABIxgAVO+SUsAAAAABJRU5ErkJggg==")
1782 public void closePathTwice() throws Exception {
1783 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1784 "context.closePath(); context.closePath(); context.stroke();\n");
1785 }
1786
1787
1788
1789
1790 @Test
1791 @Alerts(DEFAULT = "data:image/png;base64,"
1792 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAK9JREFUOE/tk7ERgkAQRR+1ENiDDdgA"
1793 + "qREVYCFSgZGpDdiAPRDYCy5z66zLyeGsIRcx/89/t3yWij+fyvAOwN3xrXYFns6vX9rRagpsgBOwd4EHcE5aD1yc3wIdcFPd"
1794 + "TqhhNf0lJX9iWuCvAH/BDCiCfcVSBTn/Y0IB6pTyLN29u0kdlfwZUHJDCu++bNSibzvUvKyKHL9Cq/wcMLTqGzBUX3axw8Tt"
1795 + "o4QrzP7LIeoI3pwhFeJpA+wAAAAASUVORK5CYII=",
1796 FF = "data:image/png;base64,"
1797 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAiklEQVQ4T2NkoDJgJMG8ehxqG5HFYQbaAwVBEg5omvZDxf8D"
1798 + "6YVAvABNPh7ITwTiAzBxZBfCNMMk0S0hJA82E9lAUg1AtwDDQJAAshcJBQE2eRQXggyEuRIUZiAN8LCBhhEheQwDQfrOATET"
1799 + "EBvgiFW88qQkGxzmowqPGkhUMOFVNBqGo2FIRggAACy9IRWISF6KAAAAAElFTkSuQmCC",
1800 FF_ESR = "data:image/png;base64,"
1801 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAm0lEQVQ4T2NkoDJgJNK8BgLq4PIwA/mAGnYAsRWaxmNAvgcQ"
1802 + "uwFxPxDPRZNPBvILgXgNTBzZhSDNfUiSIUB2EZIlhOTBZiIbSKoB6BZgGAgSgCkCsZFdB/MRIXkUF4I0wVwJYiN7H2YgIXkM"
1803 + "A0Eab0J1q6NFAIyLVx5bsgG5AgTgMYdmMF55YtMhDsdiCo8aSHRQ4VQ4GoYjIQwBM+0eFQy1UnkAAAAASUVORK5CYII=")
1804 public void closePathClosesOnlyLastSubpath() throws Exception {
1805 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1806 "context.moveTo(2,2); context.lineTo(5,8); context.lineTo(8,2);"
1807 + "context.moveTo(10,2); context.lineTo(13,8); context.lineTo(16,2); context.closePath();"
1808 + "context.stroke();\n");
1809 }
1810
1811
1812
1813
1814 @Test
1815 @Alerts(DEFAULT = "data:image/png;base64,"
1816 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAGZJREFUOE9jZNjH/J8BGTj9ZUThE+Kg"
1817 + "6WekuoH7GFBd6MRAmgvR9TNS3UB4EFEallCDEBFAbQMp9TrMp3AXUt1AQsmNWHnSEjERpo4aSEQgEVAyEsIQozykNNiobSBG"
1818 + "eUixA9EKaAA0fyYV+TYpjQAAAABJRU5ErkJggg==",
1819 FF = "data:image/png;base64,"
1820 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAZklEQVQ4T2Nk2Mf8nwEZOP1lROET4qDpZ6S6gfsYUF3oxECa"
1821 + "C9H1M1LdQHgQURqWUIMQEUBtAyn1OsyncBdS3UBCyY1YedISMRGmjhpIRCARUDISwhCjPKQ02KhtIEZ5SLED0QpoADR/JhX5"
1822 + "NimNAAAAAElFTkSuQmCC",
1823 FF_ESR = "data:image/png;base64,"
1824 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAZklEQVQ4T2Nk2Mf8nwEZOP1lROET4qDpZ6S6gfsYUF3oxECa"
1825 + "C9H1M1LdQHgQURqWUIMQEUBtAyn1OsyncBdS3UBCyY1YedISMRGmjhpIRCARUDISwhCjPKQ02KhtIEZ5SLED0QpoADR/JhX5"
1826 + "NimNAAAAAElFTkSuQmCC")
1827 public void putImageDataInside() throws Exception {
1828 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1829 "if (typeof ImageData != 'function') { log('no ctor'); return; }\n"
1830 + " var arr = new Uint8ClampedArray(64);\n"
1831 + " for (var i = 0; i < 32; i += 4) {\n"
1832 + " arr[i + 0] = 0; arr[i + 1] = 190; arr[i + 2] = 3; arr[i + 3] = 255;\n"
1833 + " }\n"
1834 + " for (var i = 32; i < 64; i += 4) {\n"
1835 + " arr[i + 0] = 190; arr[i + 1] = 0; arr[i + 2] = 3; arr[i + 3] = 255;\n"
1836 + " }\n"
1837
1838 + " var imageData = new ImageData(arr, 4, 4);\n"
1839 + " context.putImageData(imageData, 0, 0);\n"
1840 + " context.putImageData(imageData, 2, 4);\n"
1841 + " context.putImageData(imageData, 16, 0);\n"
1842 + " context.putImageData(imageData, 16, 16);\n");
1843 }
1844
1845
1846
1847
1848 @Test
1849 @Alerts(DEFAULT = "data:image/png;base64,"
1850 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAGtJREFUOE9jZNjH/J+BgYFhnxOIRAAn"
1851 + "hr+MqCLE8RipbuA+BogLyXURursZqW4g3AZoWML5TuSGIcwEahsI8zrMfHLDFJ40qG4gcamMsCqyEi8+Y0cNJBzohFSMhiGh"
1852 + "ECIsT70whBYuVDcQAEALHZVK+V18AAAAAElFTkSuQmCC",
1853 FF = "data:image/png;base64,"
1854 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAaUlEQVQ4T2Nk2Mf8nwEI9jmBSARwYvjLiCpCHI+R6gbuY4C4"
1855 + "kFwXobubkeoGwm2AhiWc70RuGMJMoLaBMK/DzCc3TOFJg+oGEpfKCKsiK/HiM3bUQMKBTkjFaBgSCiHC8tQLQ2jhQnUDAUAL"
1856 + "HZUFr6Y/AAAAAElFTkSuQmCC",
1857 FF_ESR = "data:image/png;base64,"
1858 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAaUlEQVQ4T2Nk2Mf8nwEI9jmBSARwYvjLiCpCHI+R6gbuY4C4"
1859 + "kFwXobubkeoGwm2AhiWc70RuGMJMoLaBMK/DzCc3TOFJg+oGEpfKCKsiK/HiM3bUQMKBTkjFaBgSCiHC8tQLQ2jhQnUDAUAL"
1860 + "HZUFr6Y/AAAAAElFTkSuQmCC")
1861 public void putImageDataOutside() throws Exception {
1862 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1863 "if (typeof ImageData != 'function') { log('no ctor'); return; }\n"
1864 + " var arr = new Uint8ClampedArray(64);\n"
1865 + " for (var i = 0; i < 32; i += 4) {\n"
1866 + " arr[i + 0] = 0; arr[i + 1] = 190; arr[i + 2] = 3; arr[i + 3] = 255;\n"
1867 + " }\n"
1868 + " for (var i = 32; i < 64; i += 4) {\n"
1869 + " arr[i + 0] = 190; arr[i + 1] = 0; arr[i + 2] = 3; arr[i + 3] = 255;\n"
1870 + " }\n"
1871
1872 + " var imageData = new ImageData(arr, 4, 4);\n"
1873 + " context.putImageData(imageData, -2, 0);\n"
1874 + " context.putImageData(imageData, 2, -2);\n"
1875 + " context.putImageData(imageData, 2, 4);\n"
1876 + " context.putImageData(imageData, 18, 18);\n");
1877 }
1878
1879
1880
1881
1882 @Test
1883 @Alerts(DEFAULT = "data:image/png;base64,"
1884 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAF1JREFUOE/tkskJACAMBBPszMLTmSjR"
1885 + "jxBhPfap38AwDqtCfkrlWaodaJJqlvIMd84zZP4hHehwquES6Np+uG0aDOnAMCMbxpL3VoAb0oGHy8eGH4gK/IaoEL7TGzaf"
1886 + "lBRV53guuAAAAABJRU5ErkJggg==",
1887 FF = "data:image/png;base64,"
1888 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAXklEQVQ4T+2SQQoAIAgEjX7Ww/tZVHoKCrZyj3pUGNZhk5An"
1889 + "UXk1dwNWyb1Ic8OV44asH9KBCqcmPAI1th5+nW4J6cCtRrMKtit3LcAO6cDH5uOEAUQGwiEyhO90hwOflBRVULNh6QAAAABJ"
1890 + "RU5ErkJggg==",
1891 FF_ESR = "data:image/png;base64,"
1892 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAXklEQVQ4T+2SQQoAIAgEjX7Ww/tZVHoKCrZyj3pUGNZhk5An"
1893 + "UXk1dwNWyb1Ic8OV44asH9KBCqcmPAI1th5+nW4J6cCtRrMKtit3LcAO6cDH5uOEAUQGwiEyhO90hwOflBRVULNh6QAAAABJ"
1894 + "RU5ErkJggg==")
1895 public void putImageDataDirty() throws Exception {
1896 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1897 "if (typeof ImageData != 'function') { log('no ctor'); return; }\n"
1898 + " var arr = new Uint8ClampedArray(64);\n"
1899 + " for (var i = 0; i < 32; i += 4) {\n"
1900 + " arr[i + 0] = 0; arr[i + 1] = 190; arr[i + 2] = 3; arr[i + 3] = 255;\n"
1901 + " }\n"
1902 + " for (var i = 32; i < 64; i += 4) {\n"
1903 + " arr[i + 0] = 190; arr[i + 1] = 0; arr[i + 2] = 3; arr[i + 3] = 255;\n"
1904 + " }\n"
1905
1906 + " var imageData = new ImageData(arr, 4, 4);\n"
1907 + " context.putImageData(imageData, 0, 0, 1, 2, 1, 1);\n"
1908 + " context.putImageData(imageData, 4, 4, 0, 2, 2, 2);\n"
1909 + " context.putImageData(imageData, 8, 8, 0, 0, 2, 2);\n"
1910 + " context.putImageData(imageData, 18, 0, 1, 1, 2, 3);\n");
1911 }
1912
1913
1914
1915
1916 @Test
1917 @Alerts(DEFAULT = "data:image/png;base64,"
1918 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAYxJREFUOE+t1L9LV2EUx/HXl2gI+gPS"
1919 + "piBqMsFRoiGiEIKWIFAicNEahMIpUKPNxcYMoogIGhwFrSkQFUchiqBJlPYSDYf0OXCvPN2uelOf7d7nPO/z63NOyzGfVsa7"
1920 + "gQ8Vfvw7iemmfkvgbTxCd+XhV5xFF743geYRLmACU+jEIG4ioOcQTpcPgubAePAUq+jACXzCF/ShHfN4hpm9wDnwCR7jOeZq"
1921 + "ShD/VnAVLxIw7P85JTAurxew+4VVmX756DwW8QAPU70/1kED2INXuIBf+FYQLtYEEDV9jWuYTRH3V9MPYHh6g3cFIKQSpyqh"
1922 + "kj+MW5jEvSKzXd8B/JFq0pZFs31QJ7P7jUJqu90P4FvcPSRwE0N4Wb4PYDQk79j/RBi279F7XMDfGM8DOmrKawXsr5SP0pR1"
1923 + "XM5Hsk42TWu4lTS8hCu5KuqE3RQYQ3CnTtjhoBy9EPXPBjoMWCyJsaptdTkMpAk4sw/wD0J7ARvZbzmUdzHXo7iUNk/U6FT6"
1924 + "DkhEdDrtxM9FNnuurx0UblcV1Fz/YwAAAABJRU5ErkJggg==",
1925 FF = "data:image/png;base64,"
1926 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABgUlEQVQ4T62UuS9FQRSH3/MfWEIs0SoUtkhEQ6NBgiglKqIQ"
1927 + "nUQiYkskiKVQo6MRa9Q0hALR6RSWWGLXUOD7vcxNzrt5uO/lnuTLZOae+e6ZO3cmGgk5oiH7Ip6wBvEI1PpesEe/CLKCvthW"
1928 + "uOOku7Tp0APtoH4J1MHzf2IrVJXjcAZN8AYHcAFVUAHLMAiXv4mtsJKkbZiFfVet/QRbjJ1CMYzCSSKpJ5RsGCad6Nu1Wq6N"
1929 + "a1fpPO0AHPulEha6qlrdQyWlQWmCCnIZO4I8WIduuLJ5Ei7CKmhJQaKRpC5YgAbo8AsfGcgwg1pu0PggMRtevQmqcAL6UhQ+"
1930 + "MK8T1sISyjME2vVYqMIp6E2xQi25H2bCqvAWkTZowwqf6OioeZHMpnwyKRPerVDbvwn6rxTJCJfIbzPFxL5hAcxBS5LCc/Kr"
1931 + "4cYvVL8MxqA+YIUv5Oky0dmOC3s5lPNEN4lumr9CR03H9DBRkv/GzidpGprhHnQKvuAOcmAF9IvFLdOKfwCGhFAVxZXYrgAA"
1932 + "AABJRU5ErkJggg==",
1933 FF_ESR = "data:image/png;base64,"
1934 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABiElEQVQ4T62UTStHQRSH/RdkIRtLRUlslFIWLKQsWIjEJ/Cy"
1935 + "sUCSslI2skFZUN6+ALKwULL0XvKykFLiM1DewvOrMxrj3v4X99TT3Jk585uZe86ZTE7Klsmi18X8E2wl3dcJFrJgG+qDhVf0"
1936 + "i6EGbpKI+ifcZ8E0rEEujEAfnEEZ1MJrNlFfUNcbgzvogEc4hFvrF9FuwLD5RGr7gr14LNgJN2kHgl+wR/8B6kx0KUrRCUps"
1937 + "Biah1Rzd9d26cj4OYArGYQiWQ1EJlsIlNNuCa3OqjDiBNluFfhOror33/SS4DucwYRP6lzIFJ8oUrHbYgWroDAXfGciHF5v4"
1938 + "iBGKG1ZGvLlJnfAUlGfOfiOopG+EI19wkY7y7S+C2rwNvipJJ/yPoBJ9EObTurLysgmOfcHUgxKmTdKgKCAn0OCH3yX2BYMt"
1939 + "oEpIKviMbwX8SGxt0AOzoGpRzWYz5Z0eibnQ0X8cJKr61dsYZ7qmbDRKTBPhi13C2AoocopgngmoigpgF7rh2zX93T8BvvJW"
1940 + "FWV1b98AAAAASUVORK5CYII=")
1941 public void clip() throws Exception {
1942 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1943 "if (typeof ImageData != 'function') { log('no ctor'); return; }\n"
1944 + "context.moveTo(2,2); context.lineTo(5,8); context.lineTo(8,2);"
1945 + "context.arc(8, 12, 8, 0, 2 * Math.PI); context.stroke();"
1946 + "context.clip(); context.fillRect(4, 9, 19, 14);\n");
1947 }
1948
1949
1950
1951
1952 @Test
1953 @Alerts(DEFAULT = "data:image/png;base64,"
1954 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAKZJREFUOE9jZKAyYKSyeQw4DfwvNMWS"
1955 + "gel/HOOb3ExSLMVtoMjk/yCDGN/kkuSLUQMRwf9/+Ifhf5HJvxkYGFhgnoYlF5jXCaTFP4xvclnByQym8L/I5JsMDAxqZBp4"
1956 + "i/FNrjq6gdMZGBgyyDRwBixHIVwIyWrHyDLwH6MV47uc4yguBHH+i0yGu5KEMIS7DsNA5IAfAumQ2sUXKWUgslqSyjpiLAEA"
1957 + "O2tdFYccvt8AAAAASUVORK5CYII=",
1958 FF = "data:image/png;base64,"
1959 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAyUlEQVQ4T2NkoDJgpLJ5DDgN/C84UY6BiTGS8W1eJymW4jZQ"
1960 + "ZPJ/kEGMb3JJ8sWogYjg/z/8w/C/8OQPwFTJD/M0LLnAvI43Lf5n+Mj4NlcAnMxgCoEaLwDZ+mQZyPD/LOObPBNUA4UndTAw"
1961 + "MpaTZeD//53AHFWBaiDfRFUGVsZrQENZkHMIQS////+H4TezJuOn7DsoBoI4/4UmzQDm33SSDPz3fybju7wMuM9wBfYQSIfg"
1962 + "4ospApgcuqhSfJFiCLJakso6YiwBAMSpYxVbkG1GAAAAAElFTkSuQmCC",
1963 FF_ESR = "data:image/png;base64,"
1964 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAArUlEQVQ4T2NkoDJgpLJ5DDgN/C84UYeBmTmI8U1OEymW4jZQ"
1965 + "ZPJ/kEGMb3JJ8sWogYjg/z/8wxDoxadAD0vBPA1LLjCvE0iLz4DqpcHJDKbwv8ikTUCuL3kG/t/M+CbPD83AKXUMDP8byTOQ"
1966 + "sR6WoxAuBGc1pstkGfj3ny7j+/wrKC4Ecf6LTCkCkr3IWY5wGDIWA13XB3cIrsAeAumQ2sUXKWUgslqSyjpiLAEAdMteFUCj"
1967 + "kQkAAAAASUVORK5CYII=")
1968 public void clipWindingEvenOdd() throws Exception {
1969 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
1970 "if (typeof ImageData != 'function') { log('no ctor'); return; }\n"
1971 + "context.rect(6, 2, 2, 16); context.rect(2, 10, 16, 5); context.clip('evenodd');"
1972 + "context.beginPath(); context.arc(10, 10, 8, 0, 2 * Math.PI);"
1973 + "context.fillStyle = 'deeppink';context.fill();\n");
1974 }
1975
1976
1977
1978
1979 @Test
1980 @Alerts(DEFAULT = "data:image/png;base64,"
1981 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAOpJREFUOE/t1KFOA0EQxvHfiiIIqAYB"
1982 + "ElECJAheAEMdBIFCUF4A0YSkbYLBkdaSoHF9AzyiEoHlBUg9CnP0kr2wOZJyuSBvzJfszvwz++3sBtzhaKF5vEStLSFW5tA8"
1983 + "Cm2A1R1IPBx0GK+ii1xHhHGKyjiNPh/G9WFgkuaUgVs4wTqmuCB8FAUR2MfZYn8Ht+gFPoucMvDtp6vsAU+E1xJwN+8qYxP3"
1984 + "uF4GrNLhn8A42JdtblbY26bVYjhl8p76M6Czz8YVswPWHjk+53nOV3rkBNid05tVv9PfmUs8rIdtnl7z29SYnH8fm2/FgECV"
1985 + "q9xRJAAAAABJRU5ErkJggg==",
1986 FF = "data:image/png;base64,"
1987 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA40lEQVQ4T2NkYGBoAGJ7IGYE4gNATBEAGQIC9VADQYZTBEa2"
1988 + "gZNNGRhyvgIDMAwaiJnAeJqBHKD/GRiygPwEIAaqBYMeYJiVIqtBCkOwgUZAQ6QgCv4D9TPC5CEiUAOBgmZAtgpQ6DCQLYnP"
1989 + "QKALGcOhBp4A0tFA/l2YBqiBjkBDQqEWPCdkIDEuJGggKA0CE3aVNANDOhcDg5wMxEVTtwCD4Ayyd6YBw86cgUHRmIFhFUj8"
1990 + "EwNDCR8wHNG93IAwMPAXUM8aZAWkstEjBSkMSTUKon5k5xSw90ERRBEYDUPKwxAA2I49lItsoRgAAAAASUVORK5CYII=",
1991 FF_ESR = "data:image/png;base64,"
1992 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA20lEQVQ4T2NkYGBoAGJ7IAaBg1CabIoRqhNkKAjA6FEDiQ8B"
1993 + "pDCcbcHAkPIBqDUcqr2QgYFxArJR/xkYCoD8ECC2hor3Ag0oQVaDbqAW0BA5iIL/QP2MMHmICNRAoKANkG0EFNoAZEPVQ3Rh"
1994 + "cSFjBNTAI0A6D6jkHMwFUAMtgJrAaoD8R4QMJMaFBA0EpT1gwm6SYWCIZmdgUJKFuGjOTgaG1BPI4TObgcFCn4FBxoyBYQ1I"
1995 + "/D0DQ6EgA0M/ehgiGejxk4HBDKyYXIAnDMkzcjTrjZY2ZKQcqicbAN2xPZWYt5iSAAAAAElFTkSuQmCC")
1996 @HtmlUnitNYI(FF_ESR = "data:image/png;base64,"
1997 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAcElEQVR42mNgYGD4T2UMBygcaoCRaeB/EJ4NxO+AOBCPopVA"
1998 + "/AWIA4gxEKjovw8QX8ajyAeIg4D4FzEGsgExOxB/waOIGcYmxkAPIPYG4nO4FGFj4zNwGRC/BGJ3cg1ESuX/qZ1T/v8fzSmj"
1999 + "Bg4HAwGGsHedCdecqgAAAABJRU5ErkJggg==",
2000 FF = "data:image/png;base64,"
2001 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAcElEQVR42mNgYGD4T2UMBygcaoCRaeB/EJ4NxO+AOBCPopVA"
2002 + "/AWIA4gxEKjovw8QX8ajyAeIg4D4FzEGsgExOxB/waOIGcYmxkAPIPYG4nO4FGFj4zNwGRC/BGJ3cg1ESuX/qZ1T/v8fzSmj"
2003 + "Bg4HAwGGsHedCdecqgAAAABJRU5ErkJggg==")
2004 public void fillTextAndTransform() throws Exception {
2005 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
2006 "if (typeof ImageData != 'function') { log('no ctor'); return; }\n"
2007 + "context.moveTo(0, 0);\n"
2008 + " context.lineTo(20, 0);\n"
2009 + " context.moveTo(2, 0);\n"
2010 + " context.lineTo(2, 20);\n"
2011 + " context.moveTo(0, 10);\n"
2012 + " context.lineTo(20, 10);\n"
2013 + " context.stroke();\n"
2014
2015 + " context.fillStyle = 'blue';\n"
2016 + " context.fillText('p', 2, 10);\n"
2017
2018 + " context.fillStyle = 'red';\n"
2019 + " context.setTransform(1.0, 0.0, -0.0, 1.0, 11.0, 10.0);\n"
2020 + " context.fillText('n', 0, 0);\n");
2021 }
2022
2023
2024
2025
2026 @Test
2027 @Alerts(DEFAULT = "data:image/png;base64,"
2028 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAJBJREFUOE+t1FsOgCAMRNFhc7pmXZ0p"
2029 + "CQSkj6GhP4YQL+erBYenHO5hDD4AruQDL4Bb/h2DEpNoZiQm0Sko54yy67RgRtl1WnBXOems4I5y0llBVrnovCCjXHReMFKq"
2030 + "uijoKVVdFLSUpo4JakpTxwT/SlfHBkelq2ODTSnfulG8YfdhW2t1o5wIRp1+zwrp4Ac9kx4V/3bxXQAAAABJRU5ErkJggg==",
2031 FF = "data:image/png;base64,"
2032 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAj0lEQVQ4T63USw6AIAxFUViZunJxZ7YDCJ9+Hg2dGDG9nJE5"
2033 + "HZ58uJf6YKH4Fbzgo72bd/sgH7zB4EN7DBqC/B5RNp0UjCibTgruKgedFtxRDjotiCoXnRVElIvOCnpKUecFLaWo84KaUtUh"
2034 + "QUmp6pDgrDR1aLBXmjo0WJX85Lg56P+whsqpoNdp31EhHPwBPdMeFdd8Eu8AAAAASUVORK5CYII=",
2035 FF_ESR = "data:image/png;base64,"
2036 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAmUlEQVQ4T63U0Q2AIAxFUdjAUVzBzd3AVRzBPhMJSFseDU1M"
2037 + "NITr4YecFk9e3Et18JL4HvzBKfsO7K2DiCEaGcQQbYL4jiiLTgtGlEWnBWeVjc4KzigbnRVklZ3OCzLKTucFR0pVNwp6SlU3"
2038 + "ClpKU8cENaWpY4J/patjg7XS1bHBT3nLy3ujeMPeh1Bu8uDIS4KjTllnhXTwAVWiHxW3nihqAAAAAElFTkSuQmCC")
2039 public void pathFill() throws Exception {
2040 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
2041 "context.moveTo(2, 2);\n"
2042 + " context.lineTo(10, 18);\n"
2043 + " context.lineTo(18, 2);\n"
2044 + " context.closePath();\n"
2045 + " context.fill();\n");
2046 }
2047
2048
2049
2050
2051 @Test
2052 @Alerts(DEFAULT = "data:image/png;base64,"
2053 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAQxJREFUOE+11M8qRVEUx/HPfRMTychE"
2054 + "KEJKGchUUqKYmLolioFS8gIGDIgkMwNlYsRAeQhFEV6CXffUdjp/9qlrT3at9eu79vq3W7p8Wl3miYFPGE4McI6lIm0M3MFe"
2055 + "AvATQ3itAw7iOQG4jqMyXb6GDxirgN5itipoHriJg4RX5iVnWA7GPDA0JTSnyQm1nMRLETDY7jHVgLiGk0xfNIfb2E8EXmIx"
2056 + "1hYBR/GYAHzHCN7qgHHad781nSmB/0m1KuXg28UGJnCI6Rz0GvN1gx37x9GHY6x27sz/jQF8NAHG2p5sJDrGFZymbkqZ7gZz"
2057 + "uMJCk00p07axhX58dQMYNqgXF3Xj9K8fbF3wJP8PpH0mFcFq5PIAAAAASUVORK5CYII=",
2058 FF = "data:image/png;base64,"
2059 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA3ElEQVQ4T62UYQrCMAyFu8MIQ397Epm30CvofRyeQ/C3CB7C"
2060 + "M/gCnaRZ0r3CAmWwZl+Tt5d2aeXoVuYlDXwBviUPuCHv6OVq4BUJFwL4Rc4GS56z0ECpTqpcCqlMKnTDavjJp0f5d2wcaida"
2061 + "INu2Zf41tUC2bQ0sNPVss9S2ra7Q1AO2tD3T1AOybbv2iSbljb56rCfWPvirA96Pdi8CisHP2UIPx0qhfSKgtL3LBraa0pMS"
2062 + "+dVq2jQpEXSyUvOkREBp+5S1dC+F6UP2PtSa1ka5uA+riewmWyHLSz+ljSYVkapvPQAAAABJRU5ErkJggg==",
2063 FF_ESR = "data:image/png;base64,"
2064 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAzElEQVQ4T7WU0Q2DQAxDYQNGKJt0BTZgBDpJO0pH6AaMwAgw"
2065 + "AonUQyHEnE8CJMQH1ruz5aSuLn7qi3mVBU4Cf5AHfEXXRVoLfItgIICLaFp59Xt4LLCRvzMBfInmg3Q+w5xtaDUd4IGsbX/B"
2066 + "7SAPZG1b4C7TqDY52/52u0wjYIntQ6YRkLUd1gdNSrL9E39PUJGwPgiotvt/gcdggqhJsRdR2wrUAvtM6UlB5feZFk0KgqZM"
2067 + "iycFAW2m4VJAo3dmO2V6uj9uXbDE5spLVqfJJhVVgK1QAAAAAElFTkSuQmCC")
2068 public void pathFillTransform() throws Exception {
2069 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
2070 " context.moveTo(2, 2);\n"
2071 + " context.lineTo(6, 14);\n"
2072 + " context.lineTo(14, 2);\n"
2073 + " context.closePath();\n"
2074
2075 + " context.setTransform(1.0, 0.0, 0.0, 1.0, 4.0, 4.0);\n"
2076 + " context.moveTo(2, 2);\n"
2077 + " context.lineTo(6, 14);\n"
2078 + " context.lineTo(14, 2);\n"
2079 + " context.closePath();\n"
2080
2081 + " context.fill();\n");
2082 }
2083
2084
2085
2086
2087 @Test
2088 @Alerts(DEFAULT = "data:image/png;base64,"
2089 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAOZJREFUOE+tlNENwjAMRC/zVBVD8MkM"
2090 + "LMASMExX4AuGYA+GCLrIjYzrYlc0P0hteL13cVuw8yo786CBLwCH5AMmAGdvrwbeAFwTwDeAAQB/F0sDmY4po8VkTOgu22Gk"
2091 + "vao60y2wa0dkE28q0qkFdu1sodLlUKRTb2xauGyhPO2iOvWAW7S76lqHvJ7VbuMzq/4C8l7TPgL3J3BamZAv1QhI7QsTVODh"
2092 + "vEEL1QhI7ZEDXAF74K5qBOyWVXUqF13VNJAbq3TKxPMAZ189d59ot07tqdo/pL6Hoj3qAf4rYfT50fdTCbcAP2uOMhXdBSkP"
2093 + "AAAAAElFTkSuQmCC",
2094 FF = "data:image/png;base64,"
2095 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA7UlEQVQ4T62U0Q3CMAxE3WEq+OSTGZiADsEMMA5doCPACDAF"
2096 + "K8DZaqLUtYlBqVRVSk7PubPTjho/XWMelcAn4JtggRG6o6UtgRcIzgHgC5oeL39XTwncYvcRAA7QXD2dzrBm27WaCmhgtl0j"
2097 + "qxOOAEmmGphtRwOds+wBkkytsZHDRQOFdgAkZ2oBf7GdrXoZ8nrUtoxPsvoNyHtie0803YkOzogsrNaAbPvEJ3gT3RjudVUX"
2098 + "8+4y297xAAOoG25arZ0wFwZQN9y0GgayENA056uuRi0vdLNtyVR39V+gZFoOsNN586Z42tB68z/2B2u6MhWr0Q5cAAAAAElF"
2099 + "TkSuQmCC",
2100 FF_ESR = "data:image/png;base64,"
2101 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA7UlEQVQ4T62UwQ3CMAxF3Q24caXzcGIDRqCT0FF6YY6OwJUb"
2102 + "bADfVhOlrk0MSqWqUvL1nP/ttKPGT9eYRyXwDvghWGCC7mRpS+AVgksA+IKmx8vfzVMCd9h9BoADNKOn0xnWbLtWUwENzLZr"
2103 + "ZHXCCSDJVAOz7WigS5Y9QJKpNTZyuGig0A6A5Ewt4C+2s1UvQ16P2pbxSVa/AXlPbO+Jbg+iozMiK6s1INs+8wneRDPDva7q"
2104 + "Yt5dZtsMHAHUDTet1k6YCwOoG25aDQNZCGia801Xo5ZXusW2ZKq7+i9QMi0H2Om8eVM8bWi9+R/7A246MhXPMagrAAAAAElF"
2105 + "TkSuQmCC")
2106 public void pathFillTransform2() throws Exception {
2107 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
2108 " context.beginPath();\n"
2109 + " context.moveTo(2, 2);\n"
2110 + " context.lineTo(6, 14);\n"
2111 + " context.lineTo(14, 2);\n"
2112 + " context.closePath();\n"
2113 + " context.fill();\n"
2114
2115 + " context.setTransform(1.0, 0.0, 0.0, 1.0, 4.0, 4.0);\n"
2116 + " context.fillStyle = 'red';"
2117 + " context.beginPath();\n"
2118 + " context.moveTo(2, 2);\n"
2119 + " context.lineTo(6, 14);\n"
2120 + " context.lineTo(14, 2);\n"
2121 + " context.closePath();\n"
2122 + " context.fill();\n");
2123 }
2124
2125
2126
2127
2128 @Test
2129 @Alerts(DEFAULT = "data:image/png;base64,"
2130 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAHVJREFUOE/Vk8EOwFAEBNef+3M9lDY0"
2131 + "mhIOfccnmYwFYfjRMA9/BDLExcC1Lp4tbwGF/bgI30xTwzmgignOLClECtDrZqTFceCdoPipdw0XgX7aFoX9xumXT28NSGFP"
2132 + "oRfVNhwDXonGE9VC2XAPaORg2jdMgAdeyiQRQvsTZgAAAABJRU5ErkJggg==",
2133 FF = "data:image/png;base64,"
2134 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAeklEQVQ4T9WTUQ7AQAREubmbqzS0pdHsCh/dT5K3YwaE5ofN"
2135 + "PPgjkICdDbQ3xXvkKSCTj0t+XvI7VdgHVGFi5OklBkul8qk0bbYDbwfZp15VOAj0aZsVVo3pL63CEzkGxLCnoBdVVtgGvMaP"
2136 + "J6qNbYVzQCMHpXWFCfAAXsokEVEKzTkAAAAASUVORK5CYII=",
2137 FF_ESR = "data:image/png;base64,"
2138 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAeklEQVQ4T9WTUQ7AQAREubmbqzS0pdHsCh/dT5K3YwaE5ofN"
2139 + "PPgjkICdDbQ3xXvkKSCTj0t+XvI7VdgHVGFi5OklBkul8qk0bbYDbwfZp15VOAj0aZsVVo3pL63CEzkGxLCnoBdVVtgGvMaP"
2140 + "J6qNbYVzQCMHpXWFCfAAXsokEVEKzTkAAAAASUVORK5CYII=")
2141 public void saveRestore() throws Exception {
2142 draw("<canvas id='myCanvas' width='20', height='20' style='border: 1px solid red;'></canvas>\n",
2143 " context.fillStyle = 'green';\n"
2144 + " context.save();\n"
2145 + " context.fillRect(4, 4, 4, 4);\n"
2146
2147 + " context.fillStyle = 'red';\n"
2148 + " context.fillRect(6, 6, 4, 4);\n"
2149 + " context.save();\n"
2150
2151 + " context.fillStyle = 'blue';\n"
2152 + " context.fillRect(8, 8, 4, 4);\n"
2153
2154 + " context.restore();\n"
2155 + " context.fillRect(12, 12, 4, 4);\n"
2156
2157 + " context.restore();\n"
2158 + " context.fillRect(14, 14, 4, 4);\n"
2159
2160 + " context.restore();\n"
2161 + " context.fillRect(16, 16, 4, 4);\n");
2162 }
2163
2164
2165
2166
2167 @Test
2168 @Alerts(DEFAULT = "data:image/png;base64,"
2169 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAL1JREFUOE9jZEAFjgwMDOZQoZMMDAz7"
2170 + "0eQJchmhKnhFGBi2CDAw6AcwMHCDxDYwMHz9wMBw8Q0Dgw8DA8NngiZBFYANFGFgOJjAwGDVzcDAgqyxlIHhzwIGhmNvGBjs"
2171 + "STHQUYWBYf1tBgZ+bJpUGRg+3mFgCCTW+yAXVpQwMDSjuw5mOMiVPQwMtQwMDB3EuJImBlLdy1SPFFDQUDfZIAU21RI2MRFI"
2172 + "lBpYTiFKMTGKRg0kJpTwqxkNQ8rDEABatjIVyjXhJwAAAABJRU5ErkJggg==",
2173 FF = "data:image/png;base64,"
2174 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABF0lEQVQ4T+2SvUoDQRSFv5SC5UIUK30ACUFIbyws4wMsBkO6"
2175 + "RJ9AiBhUsEqvstoKVgELwdRa5cc6pTbGLqTUM+saNsvGHUljkYFlmDn3fnvPvZNicmV13AiunrW3I3riMfUTkYYT0dwlcMzd"
2176 + "G7x3wNN+mEgJBfjAZTjdhsoVLIaTd2HYhPMPOLKFGmB2C24fYC0uKQ/9R9iR1rWBGmB5DxqXsBCXUIKRKq9KU0jy8oGy1vCm"
2177 + "AKWNbmBfcRfJODDAjCzfyfJqXMKmLLegIK1nC2QF6urVwXVkKK6Gcg9nA+k2MBMzfjaa9PE6FLU7n9/PZvAim69Qs4VNAIMk"
2178 + "McnpM8wnW5vhH44r/EsVv8XOgbN3ct7Df9jDL+YBMhUCa42EAAAAAElFTkSuQmCC",
2179 FF_ESR = "data:image/png;base64,"
2180 + "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAA4klEQVQ4T+2STQ4BQRCFPyT+V27AESQyC5cwQqzY2zuGvT0b"
2181 + "QnAJCyGO4AhiIRgJUU1P4mdkesJSbzpV/frlvaoX4vlYUuZ1ayX3/OXdtwxpRCIDvR2UauCoZh9iSZhuoS7lwZdJA26EQjbM"
2182 + "QXkB4cePBbisYbKBShBCKwozByJen2JwPkHR1L5S2BRP7S6Iw/fTgH0PUkEUmhC2hLBjQqoU/tyyWsooC/bSeyljWUrVRJ3C"
2183 + "uLGJ69jYKjbqYSCxSd83rGJzDEro4n8WbFMBvjjXsi/QFPAnNJ3UZ9x/ht/P8AqUpzEVnisiKgAAAABJRU5ErkJggg==")
2184 public void imageOnLoad() throws Exception {
2185 final String html = DOCTYPE_HTML
2186 + "<html><head>\n"
2187 + "<script>\n"
2188 + LOG_TEXTAREA_FUNCTION
2189 + " function test() {\n"
2190 + " var img = new Image();\n"
2191 + " img.onload = function() {\n"
2192 + " var canvas = document.createElement('canvas');\n"
2193 + " canvas.width = 20;\n"
2194 + " canvas.height = 20;\n"
2195 + " var context = canvas.getContext('2d');\n"
2196 + " context.drawImage(img, 0, 0);\n"
2197
2198 + " log(canvas.toDataURL());\n"
2199 + " }\n"
2200
2201 + " img.src = 'data:image/svg+xml,"
2202 + "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" "
2203 + "overflow=\"hidden\" width=\"10\" height=\"10\">"
2204 + " <circle cx=\"5\" cy=\"5\" r=\"4\" stroke=\"black\" stroke-width=\"1\" fill=\"red\" />"
2205 + "</svg>';"
2206 + " }\n"
2207 + "</script>\n"
2208 + "</head>\n"
2209 + "<body onload='test()'>\n"
2210 + LOG_TEXTAREA
2211 + "</body></html>";
2212
2213 loadPageVerifyTextArea2(html);
2214 }
2215 }