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