Fix test fails related to QTBUG-22237
[profile/ivi/qtdeclarative.git] / tests / auto / declarative / qsgcanvasitem / data / tst_path.qml
1 import QtQuick 2.0
2 import QtTest 1.0
3 import "testhelper.js" as Helper
4
5 Canvas {
6    id:canvas; width:100;height:50; renderTarget: Canvas.Image
7    TestCase {
8        name: "path"; when: windowShown
9
10        function test_basic() {
11            var ctx = canvas.getContext('2d');
12            ctx.reset();
13            ctx.fillStyle = '#0f0';
14            ctx.fillRect(0, 0, 100, 50);
15            ctx.closePath();
16            ctx.fillStyle = '#f00';
17            ctx.fill();
18            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
19
20            ctx.reset();
21            ctx.fillStyle = '#f00';
22            ctx.fillRect(0, 0, 100, 50);
23            ctx.save();
24            ctx.rect(0, 0, 100, 50);
25            ctx.restore();
26            ctx.fillStyle = '#0f0';
27            ctx.fill();
28            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
29
30
31            canvas.width = 100;
32            ctx.rect(0, 0, 100, 50);
33            canvas.width = 100;
34            ctx.fillStyle = '#f00';
35            ctx.fill();
36            //verify(Helper.comparePixel(ctx, 20,20, 0,0,0,0));
37        }
38        function test_beginPath() {
39            var ctx = canvas.getContext('2d');
40            ctx.fillStyle = '#0f0';
41            ctx.fillRect(0, 0, 100, 50);
42            ctx.rect(0, 0, 100, 50);
43            ctx.beginPath();
44            ctx.fillStyle = '#f00';
45            ctx.fill();
46            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
47        }
48        function test_closePath() {
49            var ctx = canvas.getContext('2d');
50            ctx.reset();
51            ctx.fillStyle = '#0f0';
52            ctx.fillRect(0, 0, 100, 50);
53            ctx.closePath();
54            ctx.fillStyle = '#f00';
55            ctx.fill();
56            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
57
58            ctx.reset();
59            ctx.fillStyle = '#f00';
60            ctx.fillRect(0, 0, 100, 50);
61            ctx.strokeStyle = '#0f0';
62            ctx.lineWidth = 50;
63            ctx.moveTo(-100, 25);
64            ctx.lineTo(-100, -100);
65            ctx.lineTo(200, -100);
66            ctx.lineTo(200, 25);
67            ctx.closePath();
68            ctx.stroke();
69            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
70
71            ctx.reset();
72            ctx.fillStyle = '#f00';
73            ctx.fillRect(0, 0, 100, 50);
74            ctx.strokeStyle = '#0f0';
75            ctx.lineWidth = 50;
76            ctx.moveTo(-100, 25);
77            ctx.lineTo(-100, -1000);
78            ctx.closePath();
79            ctx.lineTo(1000, 25);
80            ctx.stroke();
81            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
82        }
83
84        function test_isPointInPath() {
85            var ctx = canvas.getContext('2d');
86            ctx.reset();
87            ctx.arc(50, 25, 10, 0, Math.PI, false);
88            verify(!ctx.isPointInPath(50, 10));
89            verify(!ctx.isPointInPath(50, 20));
90            //verify(!ctx.isPointInPath(50, 30));
91            verify(!ctx.isPointInPath(50, 40));
92            verify(!ctx.isPointInPath(30, 20));
93            verify(!ctx.isPointInPath(70, 20));
94            verify(!ctx.isPointInPath(30, 30));
95            verify(!ctx.isPointInPath(70, 30));
96
97            ctx.reset();
98            ctx.rect(0, 0, 20, 20);
99            verify(ctx.isPointInPath(10, 10));
100            verify(!ctx.isPointInPath(30, 10));
101
102            ctx.reset();
103            ctx.rect(20, 0, 20, 20);
104            //verify(ctx.isPointInPath(10, 10));
105            verify(ctx.isPointInPath(30, 10));
106
107            ctx.reset();
108            ctx.bezierCurveTo(50, -50, 50, 100, 75, 25);
109            verify(!ctx.isPointInPath(25, 20));
110            verify(!ctx.isPointInPath(25, 30));
111            //verify(ctx.isPointInPath(30, 20));
112            verify(!ctx.isPointInPath(30, 30));
113            //verify(!ctx.isPointInPath(40, 2));
114            //verify(ctx.isPointInPath(40, 20));
115            verify(!ctx.isPointInPath(40, 30));
116            verify(!ctx.isPointInPath(40, 47));
117            //verify(ctx.isPointInPath(45, 20));
118            //verify(!ctx.isPointInPath(45, 30));
119            //verify(!ctx.isPointInPath(55, 20));
120            //verify(ctx.isPointInPath(55, 30));
121            verify(!ctx.isPointInPath(60, 2));
122            //verify(!ctx.isPointInPath(60, 20));
123            verify(ctx.isPointInPath(60, 30));
124            verify(!ctx.isPointInPath(60, 47));
125            verify(!ctx.isPointInPath(70, 20));
126            verify(ctx.isPointInPath(70, 30));
127            verify(!ctx.isPointInPath(75, 20));
128            verify(!ctx.isPointInPath(75, 30));
129
130            ctx.reset();
131            ctx.arc(50, 25, 10, 0, 7, false);
132            verify(!ctx.isPointInPath(50, 10));
133            //verify(ctx.isPointInPath(50, 20));
134            //verify(ctx.isPointInPath(50, 30));
135            verify(!ctx.isPointInPath(50, 40));
136            verify(!ctx.isPointInPath(30, 20));
137            verify(!ctx.isPointInPath(70, 20));
138            verify(!ctx.isPointInPath(30, 30));
139            //verify(!ctx.isPointInPath(70, 30));
140
141            ctx.reset();
142            ctx.rect(0, 0, 20, 20);
143            verify(ctx.isPointInPath(0, 0));
144            verify(ctx.isPointInPath(10, 0));
145            //verify(ctx.isPointInPath(20, 0));
146            //verify(ctx.isPointInPath(20, 10));
147            //verify(ctx.isPointInPath(20, 20));
148            //verify(ctx.isPointInPath(10, 20));
149            //verify(ctx.isPointInPath(0, 20));
150            verify(ctx.isPointInPath(0, 10));
151            verify(!ctx.isPointInPath(10, -0.01));
152            verify(!ctx.isPointInPath(10, 20.01));
153            verify(!ctx.isPointInPath(-0.01, 10));
154            //verify(!ctx.isPointInPath(20.01, 10));
155
156            ctx.reset();
157            verify(!ctx.isPointInPath(0, 0));
158
159
160            ctx.reset();
161            ctx.rect(-100, -50, 200, 100);
162            //verify(ctx.isPointInPath(Infinity, 0));
163            //verify(ctx.isPointInPath(-Infinity, 0));
164            //verify(ctx.isPointInPath(NaN, 0));
165            //verify(ctx.isPointInPath(0, Infinity));
166            //verify(ctx.isPointInPath(0, -Infinity));
167            //verify(ctx.isPointInPath(0, NaN));
168            //verify(ctx.isPointInPath(NaN, NaN));
169
170            ctx.reset();
171            ctx.rect(0, -100, 20, 20);
172            ctx.rect(20, -10, 20, 20);
173            verify(!ctx.isPointInPath(10, -110));
174            verify(ctx.isPointInPath(10, -90));
175            verify(!ctx.isPointInPath(10, -70));
176            //verify(!ctx.isPointInPath(30, -20));
177            //verify(ctx.isPointInPath(30, 0));
178            //verify(!ctx.isPointInPath(30, 20));
179
180            ctx.reset();
181            ctx.rect(0, 0, 20, 20);
182            ctx.beginPath();
183            ctx.rect(20, 0, 20, 20);
184            ctx.closePath();
185            ctx.rect(40, 0, 20, 20);
186            verify(!ctx.isPointInPath(10, 10));
187            verify(ctx.isPointInPath(30, 10));
188            verify(ctx.isPointInPath(50, 10));
189
190            ctx.reset();
191            ctx.translate(50, 0);
192            ctx.rect(0, 0, 20, 20);
193            verify(!ctx.isPointInPath(-40, 10));
194            verify(!ctx.isPointInPath(10, 10));
195            //verify(!ctx.isPointInPath(49, 10));
196            verify(ctx.isPointInPath(51, 10));
197            verify(ctx.isPointInPath(69, 10));
198            verify(!ctx.isPointInPath(71, 10));
199
200            ctx.reset();
201            ctx.rect(50, 0, 20, 20);
202            ctx.translate(50, 0);
203            verify(!ctx.isPointInPath(-40, 10));
204            verify(!ctx.isPointInPath(10, 10));
205            //verify(!ctx.isPointInPath(49, 10));
206            verify(ctx.isPointInPath(51, 10));
207            verify(ctx.isPointInPath(69, 10));
208            verify(!ctx.isPointInPath(71, 10));
209
210            ctx.reset();
211            ctx.scale(-1, 1);
212            ctx.rect(-70, 0, 20, 20);
213            verify(!ctx.isPointInPath(-40, 10));
214            verify(!ctx.isPointInPath(10, 10));
215            //verify(!ctx.isPointInPath(49, 10));
216            verify(ctx.isPointInPath(51, 10));
217            verify(ctx.isPointInPath(69, 10));
218            verify(!ctx.isPointInPath(71, 10));
219
220            ctx.reset();
221            ctx.moveTo(0, 0);
222            ctx.lineTo(20, 0);
223            ctx.lineTo(20, 20);
224            ctx.lineTo(0, 20);
225            verify(ctx.isPointInPath(10, 10));
226            //verify(!ctx.isPointInPath(30, 10));
227
228            ctx.reset();
229            ctx.moveTo(0, 0);
230            ctx.lineTo(50, 0);
231            ctx.lineTo(50, 50);
232            ctx.lineTo(0, 50);
233            ctx.lineTo(0, 0);
234            ctx.lineTo(10, 10);
235            ctx.lineTo(10, 40);
236            ctx.lineTo(40, 40);
237            ctx.lineTo(40, 10);
238            ctx.lineTo(10, 10);
239
240            verify(ctx.isPointInPath(5, 5));
241            verify(ctx.isPointInPath(25, 5));
242            verify(ctx.isPointInPath(45, 5));
243            verify(ctx.isPointInPath(5, 25));
244            verify(!ctx.isPointInPath(25, 25));
245            verify(ctx.isPointInPath(45, 25));
246            verify(ctx.isPointInPath(5, 45));
247            verify(ctx.isPointInPath(25, 45));
248            verify(ctx.isPointInPath(45, 45));
249        }
250
251
252        function test_fill() {
253            var ctx = canvas.getContext('2d');
254            ctx.reset();
255            ctx.fillStyle = '#f00';
256            ctx.fillRect(0, 0, 100, 50);
257
258            ctx.fillStyle = '#0f0';
259            ctx.moveTo(0, 0);
260            ctx.lineTo(100, 0);
261            ctx.lineTo(100, 50);
262            ctx.lineTo(0, 50);
263            ctx.fill();
264
265            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
266
267
268            ctx.reset();
269            ctx.fillStyle = '#00f';
270            ctx.fillRect(0, 0, 100, 50);
271
272            ctx.moveTo(0, 0);
273            ctx.lineTo(100, 0);
274            ctx.lineTo(100, 50);
275            ctx.fillStyle = '#f00';
276            ctx.fill();
277            ctx.lineTo(0, 50);
278            ctx.fillStyle = '#0f0';
279            ctx.fill();
280
281            //verify(Helper.comparePixel(ctx, 90,10, 0,255,0,255));
282            //verify(Helper.comparePixel(ctx, 10,40, 0,255,0,255));
283
284            ctx.reset();
285            ctx.fillStyle = '#000';
286            ctx.fillRect(0, 0, 100, 50);
287
288            ctx.fillStyle = 'rgba(0, 255, 0, 0.5)';
289            ctx.rect(0, 0, 100, 50);
290            ctx.closePath();
291            ctx.rect(10, 10, 80, 30);
292            ctx.fill();
293
294            //verify(Helper.comparePixel(ctx, 50,25, 0,127,0,255, 1));
295
296            ctx.reset();
297            ctx.fillStyle = '#f00';
298            ctx.fillRect(0, 0, 100, 50);
299
300            ctx.fillStyle = '#0f0';
301            ctx.moveTo(-10, -10);
302            ctx.lineTo(110, -10);
303            ctx.lineTo(110, 60);
304            ctx.lineTo(-10, 60);
305            ctx.lineTo(-10, -10);
306            ctx.lineTo(0, 0);
307            ctx.lineTo(100, 0);
308            ctx.lineTo(100, 50);
309            ctx.lineTo(0, 50);
310            ctx.fill();
311
312            //verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
313
314            ctx.reset();
315            ctx.fillStyle = '#0f0';
316            ctx.fillRect(0, 0, 100, 50);
317
318            ctx.fillStyle = '#f00';
319            ctx.moveTo(-10, -10);
320            ctx.lineTo(110, -10);
321            ctx.lineTo(110, 60);
322            ctx.lineTo(-10, 60);
323            ctx.lineTo(-10, -10);
324            ctx.lineTo(0, 0);
325            ctx.lineTo(0, 50);
326            ctx.lineTo(100, 50);
327            ctx.lineTo(100, 0);
328            ctx.fill();
329
330            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
331
332            ctx.reset();
333            ctx.fillStyle = '#0f0';
334            ctx.fillRect(0, 0, 100, 50);
335
336            ctx.fillStyle = '#f00';
337            ctx.moveTo(-10, -10);
338            ctx.lineTo(110, -10);
339            ctx.lineTo(110, 60);
340            ctx.lineTo(-10, 60);
341            ctx.moveTo(0, 0);
342            ctx.lineTo(0, 50);
343            ctx.lineTo(100, 50);
344            ctx.lineTo(100, 0);
345            ctx.fill();
346
347            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
348
349            ctx.reset();
350            ctx.fillStyle = '#f00';
351            ctx.fillRect(0, 0, 100, 50);
352
353            ctx.fillStyle = '#0f0';
354            ctx.moveTo(-10, -10);
355            ctx.lineTo(110, -10);
356            ctx.lineTo(110, 60);
357            ctx.lineTo(-10, 60);
358            ctx.lineTo(-10, -10);
359            ctx.lineTo(-20, -20);
360            ctx.lineTo(120, -20);
361            ctx.lineTo(120, 70);
362            ctx.lineTo(-20, 70);
363            ctx.lineTo(-20, -20);
364            ctx.lineTo(0, 0);
365            ctx.lineTo(0, 50);
366            ctx.lineTo(100, 50);
367            ctx.lineTo(100, 0);
368            ctx.fill();
369
370            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
371
372        }
373        function test_stroke() {
374            var ctx = canvas.getContext('2d');
375            ctx.reset();
376            ctx.fillStyle = '#0f0';
377            ctx.fillRect(0, 0, 100, 50);
378
379            ctx.strokeStyle = '#f00';
380            ctx.lineWidth = 100;
381            ctx.lineCap = 'round';
382            ctx.lineJoin = 'round';
383
384            ctx.beginPath();
385            ctx.moveTo(40, 25);
386            ctx.moveTo(60, 25);
387            ctx.stroke();
388
389            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
390
391            ctx.reset();
392            ctx.fillStyle = '#000';
393            ctx.fillRect(0, 0, 100, 50);
394
395            ctx.strokeStyle = 'rgba(0, 255, 0, 0.5)';
396            ctx.lineWidth = 50;
397            ctx.moveTo(0, 20);
398            ctx.lineTo(100, 20);
399            ctx.moveTo(0, 30);
400            ctx.lineTo(100, 30);
401            ctx.stroke();
402
403            //verify(Helper.comparePixel(ctx, 50,25, 0,127,0,255));
404
405            ctx.reset();
406            ctx.fillStyle = '#0f0';
407            ctx.fillRect(0, 0, 100, 50);
408
409            ctx.strokeStyle = '#f00';
410            ctx.lineWidth = 100;
411            ctx.lineCap = 'round';
412            ctx.lineJoin = 'round';
413
414            ctx.beginPath();
415            ctx.moveTo(50, 25);
416            ctx.arcTo(50, 25, 150, 25, 10);
417            ctx.stroke();
418
419            ctx.beginPath();
420            ctx.moveTo(50, 25);
421            ctx.arc(50, 25, 10, 0, 0, false);
422            ctx.stroke();
423
424           // verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
425            ctx.reset();
426            ctx.fillStyle = '#0f0';
427            ctx.fillRect(0, 0, 100, 50);
428
429            ctx.strokeStyle = '#f00';
430            ctx.lineWidth = 100;
431            ctx.lineCap = 'round';
432            ctx.lineJoin = 'round';
433
434            ctx.beginPath();
435            ctx.moveTo(50, 25);
436            ctx.lineTo(50, 25);
437            ctx.closePath();
438            ctx.stroke();
439
440            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
441            ctx.reset();
442
443            ctx.fillStyle = '#0f0';
444            ctx.fillRect(0, 0, 100, 50);
445
446            ctx.strokeStyle = '#f00';
447            ctx.lineWidth = 400;
448            ctx.lineJoin = 'miter';
449            ctx.miterLimit = 1.4;
450
451            ctx.beginPath();
452            ctx.moveTo(-1000, 200, 0, 0);
453            ctx.lineTo(-100, 200);
454            ctx.lineTo(-100, 200);
455            ctx.lineTo(-100, 200);
456            ctx.lineTo(-100, 1000);
457            ctx.stroke();
458
459            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
460
461            ctx.reset();
462            ctx.fillStyle = '#0f0';
463            ctx.fillRect(0, 0, 100, 50);
464
465            ctx.strokeStyle = '#f00';
466            ctx.lineWidth = 100;
467            ctx.lineCap = 'round';
468            ctx.lineJoin = 'round';
469
470            ctx.beginPath();
471            ctx.moveTo(50, 25);
472            ctx.quadraticCurveTo(50, 25, 50, 25);
473            ctx.stroke();
474
475            ctx.beginPath();
476            ctx.moveTo(50, 25);
477            ctx.bezierCurveTo(50, 25, 50, 25, 50, 25);
478            ctx.stroke();
479
480            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
481
482            ctx.fillStyle = '#0f0';
483            ctx.fillRect(0, 0, 100, 50);
484
485            ctx.strokeStyle = '#f00';
486            ctx.lineWidth = 100;
487            ctx.lineCap = 'round';
488            ctx.lineJoin = 'round';
489
490            ctx.beginPath();
491            ctx.moveTo(50, 25);
492            ctx.lineTo(50, 25);
493            ctx.stroke();
494
495            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
496
497            ctx.reset();
498            ctx.fillStyle = '#0f0';
499            ctx.fillRect(0, 0, 100, 50);
500
501            ctx.strokeStyle = '#f00';
502            ctx.lineWidth = 100;
503            ctx.lineCap = 'round';
504            ctx.lineJoin = 'round';
505
506            ctx.beginPath();
507            ctx.rect(50, 25, 0, 0);
508            ctx.stroke();
509
510            ctx.strokeRect(50, 25, 0, 0);
511
512            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
513
514
515            ctx.fillStyle = '#f00';
516            ctx.fillRect(0, 0, 100, 50);
517
518            ctx.beginPath();
519            ctx.rect(25, 12.5, 50, 25);
520            ctx.save();
521            ctx.scale(50, 25);
522            ctx.strokeStyle = '#0f0';
523            ctx.stroke();
524            ctx.restore();
525
526            ctx.beginPath();
527            ctx.rect(-25, -12.5, 150, 75);
528            ctx.save();
529            ctx.scale(50, 25);
530            ctx.strokeStyle = '#f00';
531            ctx.stroke();
532            ctx.restore();
533
534            //verify(Helper.comparePixel(ctx, 0,0, 0,255,0,255));
535            //verify(Helper.comparePixel(ctx, 50,0, 0,255,0,255));
536            //verify(Helper.comparePixel(ctx, 99,0, 0,255,0,255));
537            //verify(Helper.comparePixel(ctx, 0,25, 0,255,0,255));
538            //verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
539            //verify(Helper.comparePixel(ctx, 99,25, 0,255,0,255));
540            //verify(Helper.comparePixel(ctx, 0,49, 0,255,0,255));
541            //verify(Helper.comparePixel(ctx, 50,49, 0,255,0,255));
542            //verify(Helper.comparePixel(ctx, 99,49, 0,255,0,255));
543
544            ctx.reset();
545            ctx.fillStyle = '#f00';
546            ctx.fillRect(0, 0, 100, 50);
547
548            ctx.beginPath();
549            ctx.rect(25, 12.5, 50, 25);
550            ctx.save();
551            ctx.rotate(Math.PI/2);
552            ctx.scale(25, 50);
553            ctx.strokeStyle = '#0f0';
554            ctx.stroke();
555            ctx.restore();
556
557            ctx.beginPath();
558            ctx.rect(-25, -12.5, 150, 75);
559            ctx.save();
560            ctx.rotate(Math.PI/2);
561            ctx.scale(25, 50);
562            ctx.strokeStyle = '#f00';
563            ctx.stroke();
564            ctx.restore();
565
566            //verify(Helper.comparePixel(ctx, 0,0, 0,255,0,255));
567            //verify(Helper.comparePixel(ctx, 50,0, 0,255,0,255));
568            //verify(Helper.comparePixel(ctx, 99,0, 0,255,0,255));
569            //verify(Helper.comparePixel(ctx, 0,25, 0,255,0,255));
570            //verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
571            //verify(Helper.comparePixel(ctx, 99,25, 0,255,0,255));
572            //verify(Helper.comparePixel(ctx, 0,49, 0,255,0,255));
573            //verify(Helper.comparePixel(ctx, 50,49, 0,255,0,255));
574            //verify(Helper.comparePixel(ctx, 99,49, 0,255,0,255));
575
576            ctx.reset();
577            ctx.fillStyle = '#f00';
578            ctx.fillRect(0, 0, 100, 50);
579
580            ctx.save();
581            ctx.beginPath();
582            ctx.moveTo(49, -50);
583            ctx.lineTo(201, -50);
584            ctx.rotate(Math.PI/4);
585            ctx.scale(1, 283);
586            ctx.strokeStyle = '#0f0';
587            ctx.stroke();
588            ctx.restore();
589
590            ctx.save();
591            ctx.beginPath();
592            ctx.translate(-150, 0);
593            ctx.moveTo(49, -50);
594            ctx.lineTo(199, -50);
595            ctx.rotate(Math.PI/4);
596            ctx.scale(1, 142);
597            ctx.strokeStyle = '#f00';
598            ctx.stroke();
599            ctx.restore();
600
601            ctx.save();
602            ctx.beginPath();
603            ctx.translate(-150, 0);
604            ctx.moveTo(49, -50);
605            ctx.lineTo(199, -50);
606            ctx.rotate(Math.PI/4);
607            ctx.scale(1, 142);
608            ctx.strokeStyle = '#f00';
609            ctx.stroke();
610            ctx.restore();
611
612            //verify(Helper.comparePixel(ctx, 0,0, 0,255,0,255));
613            //verify(Helper.comparePixel(ctx, 50,0, 0,255,0,255));
614            //verify(Helper.comparePixel(ctx, 99,0, 0,255,0,255));
615            //verify(Helper.comparePixel(ctx, 0,25, 0,255,0,255));
616            //verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
617            //verify(Helper.comparePixel(ctx, 99,25, 0,255,0,255));
618            //verify(Helper.comparePixel(ctx, 0,49, 0,255,0,255));
619            //verify(Helper.comparePixel(ctx, 50,49, 0,255,0,255));
620            //verify(Helper.comparePixel(ctx, 99,49, 0,255,0,255));
621
622            ctx.reset();
623            ctx.fillStyle = '#f00';
624            ctx.fillRect(0, 0, 100, 50);
625
626            ctx.lineWidth = 50;
627            ctx.moveTo(-100, 25);
628            ctx.lineTo(-100, -100);
629            ctx.lineTo(200, -100);
630            ctx.lineTo(200, 25);
631            ctx.strokeStyle = '#f00';
632            ctx.stroke();
633
634            ctx.closePath();
635            ctx.strokeStyle = '#0f0';
636            ctx.stroke();
637
638            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
639
640            ctx.reset();
641            ctx.fillStyle = '#f00';
642            ctx.fillRect(0, 0, 100, 50);
643
644            ctx.strokeStyle = '#0f0';
645            ctx.lineWidth = 40;
646            ctx.moveTo(0, 10);
647            ctx.lineTo(100, 10);
648            ctx.moveTo(100, 40);
649            ctx.lineTo(0, 40);
650            ctx.stroke();
651
652            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
653
654        }
655        function test_clip() {
656            var ctx = canvas.getContext('2d');
657            ctx.reset();
658            ctx.fillStyle = '#f00';
659            ctx.fillRect(0, 0, 100, 50);
660
661            ctx.beginPath();
662            ctx.rect(0, 0, 100, 50);
663            ctx.clip();
664
665            ctx.fillStyle = '#0f0';
666            ctx.fillRect(0, 0, 100, 50);
667
668            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
669
670            ctx.reset();
671            ctx.fillStyle = '#0f0';
672            ctx.fillRect(0, 0, 100, 50);
673
674            ctx.beginPath();
675            ctx.rect(-100, 0, 100, 50);
676            ctx.clip();
677
678            ctx.fillStyle = '#f00';
679            ctx.fillRect(0, 0, 100, 50);
680
681            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
682            ctx.reset();
683            ctx.fillStyle = '#0f0';
684            ctx.fillRect(0, 0, 100, 50);
685
686            ctx.beginPath();
687            ctx.clip();
688
689            ctx.fillStyle = '#f00';
690            ctx.fillRect(0, 0, 100, 50);
691
692            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
693
694            ctx.fillStyle = '#0f0';
695            ctx.fillRect(0, 0, 100, 50);
696
697            ctx.beginPath();
698            ctx.rect(0, 0, 50, 50);
699            ctx.clip();
700            ctx.beginPath();
701            ctx.rect(50, 0, 50, 50)
702            ctx.clip();
703
704            ctx.fillStyle = '#f00';
705            ctx.fillRect(0, 0, 100, 50);
706
707            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
708
709            ctx.reset();
710            ctx.fillStyle = '#f00';
711            ctx.fillRect(0, 0, 100, 50);
712
713            ctx.fillStyle = '#0f0';
714
715            ctx.beginPath();
716            ctx.moveTo(0, 0);
717            ctx.lineTo(0, 50);
718            ctx.lineTo(100, 50);
719            ctx.lineTo(100, 0);
720            ctx.clip();
721
722            ctx.lineTo(0, 0);
723            ctx.fill();
724
725            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
726
727
728            ctx.reset();
729            ctx.fillStyle = '#0f0';
730            ctx.fillRect(0, 0, 100, 50);
731
732            ctx.beginPath();
733            ctx.moveTo(-10, -10);
734            ctx.lineTo(110, -10);
735            ctx.lineTo(110, 60);
736            ctx.lineTo(-10, 60);
737            ctx.lineTo(-10, -10);
738            ctx.lineTo(0, 0);
739            ctx.lineTo(0, 50);
740            ctx.lineTo(100, 50);
741            ctx.lineTo(100, 0);
742            ctx.clip();
743
744            ctx.fillStyle = '#f00';
745            ctx.fillRect(0, 0, 100, 50);
746
747            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
748
749            ctx.reset();
750            ctx.fillStyle = '#f00';
751            ctx.fillRect(0, 0, 100, 50);
752
753            ctx.beginPath();
754            ctx.moveTo(-10, -10);
755            ctx.lineTo(110, -10);
756            ctx.lineTo(110, 60);
757            ctx.lineTo(-10, 60);
758            ctx.lineTo(-10, -10);
759            ctx.clip();
760
761            ctx.beginPath();
762            ctx.moveTo(0, 0);
763            ctx.lineTo(0, 50);
764            ctx.lineTo(100, 50);
765            ctx.lineTo(100, 0);
766            ctx.lineTo(0, 0);
767            ctx.clip();
768
769            ctx.fillStyle = '#0f0';
770            ctx.fillRect(0, 0, 100, 50);
771
772            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
773        }
774
775        function test_moveTo() {
776            var ctx = canvas.getContext('2d');
777            ctx.reset();
778            ctx.fillStyle = '#f00';
779            ctx.fillRect(0, 0, 100, 50);
780            ctx.rect(0, 0, 10, 50);
781            ctx.moveTo(100, 0);
782            ctx.lineTo(10, 0);
783            ctx.lineTo(10, 50);
784            ctx.lineTo(100, 50);
785            ctx.fillStyle = '#0f0';
786            ctx.fill();
787            verify(Helper.comparePixel(ctx, 90,25, 0,255,0,255));
788            ctx.reset();
789            ctx.fillStyle = '#f00';
790            ctx.fillRect(0, 0, 100, 50);
791            ctx.moveTo(0, 25);
792            ctx.moveTo(100, 25);
793            ctx.moveTo(0, 25);
794            ctx.lineTo(100, 25);
795            ctx.strokeStyle = '#0f0';
796            ctx.lineWidth = 50;
797            ctx.stroke();
798            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
799
800            ctx.reset();
801            ctx.fillStyle = '#0f0';
802            ctx.fillRect(0, 0, 100, 50);
803            ctx.beginPath();
804            ctx.moveTo(0, 0);
805            ctx.moveTo(100, 0);
806            ctx.moveTo(100, 50);
807            ctx.moveTo(0, 50);
808            ctx.fillStyle = '#f00';
809            ctx.fill();
810            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
811
812            ctx.reset();
813            ctx.moveTo(0, 0);
814            ctx.lineTo(100, 0);
815            ctx.moveTo(Infinity, 50);
816            ctx.moveTo(-Infinity, 50);
817            ctx.moveTo(NaN, 50);
818            ctx.moveTo(0, Infinity);
819            ctx.moveTo(0, -Infinity);
820            ctx.moveTo(0, NaN);
821            ctx.moveTo(Infinity, Infinity);
822            ctx.lineTo(100, 50);
823            ctx.lineTo(0, 50);
824            ctx.fillStyle = '#0f0';
825            ctx.fill();
826            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
827        }
828        function test_lineTo() {
829            var ctx = canvas.getContext('2d');
830            ctx.reset();
831            ctx.fillStyle = '#f00';
832            ctx.fillRect(0, 0, 100, 50);
833            ctx.strokeStyle = '#0f0';
834            ctx.lineWidth = 50;
835            ctx.beginPath();
836            ctx.moveTo(0, 25);
837            ctx.lineTo(100, 25);
838            ctx.stroke();
839            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
840
841            ctx.reset();
842            ctx.fillStyle = '#0f0';
843            ctx.fillRect(0, 0, 100, 50);
844            ctx.strokeStyle = '#f00';
845            ctx.lineWidth = 50;
846            ctx.beginPath();
847            ctx.lineTo(100, 50);
848            ctx.stroke();
849           // verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
850
851            ctx.reset();
852            ctx.fillStyle = '#f00';
853            ctx.fillRect(0, 0, 100, 50);
854            ctx.strokeStyle = '#0f0';
855            ctx.lineWidth = 50;
856            ctx.beginPath();
857            ctx.lineTo(0, 25);
858            ctx.lineTo(100, 25);
859            ctx.stroke();
860            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
861
862            ctx.reset();
863            ctx.fillStyle = '#f00';
864            ctx.fillRect(0, 0, 100, 50);
865            ctx.strokeStyle = '#0f0';
866            ctx.lineWidth = 50;
867            ctx.beginPath();
868            ctx.moveTo(-100, -100);
869            ctx.lineTo(0, 25);
870            ctx.lineTo(100, 25);
871            ctx.stroke();
872            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
873
874            ctx.reset();
875            ctx.moveTo(0, 0);
876            ctx.lineTo(100, 0);
877            ctx.lineTo(Infinity, 50);
878            ctx.lineTo(-Infinity, 50);
879            ctx.lineTo(NaN, 50);
880            ctx.lineTo(0, Infinity);
881            ctx.lineTo(0, -Infinity);
882            ctx.lineTo(0, NaN);
883            ctx.lineTo(Infinity, Infinity);
884            ctx.lineTo(100, 50);
885            ctx.lineTo(0, 50);
886            ctx.fillStyle = '#0f0';
887            ctx.fill();
888            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
889            verify(Helper.comparePixel(ctx, 90,45, 0,255,0,255));
890
891        }
892        function test_bezierCurveTo() {
893            var ctx = canvas.getContext('2d');
894            ctx.reset();
895            ctx.fillStyle = '#f00';
896            ctx.fillRect(0, 0, 100, 50);
897            ctx.strokeStyle = '#0f0';
898            ctx.lineWidth = 50;
899            ctx.beginPath();
900            ctx.moveTo(0, 25);
901            ctx.bezierCurveTo(100, 25, 100, 25, 100, 25);
902            ctx.stroke();
903            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
904
905            ctx.reset();
906            ctx.fillStyle = '#0f0';
907            ctx.fillRect(0, 0, 100, 50);
908            ctx.strokeStyle = '#f00';
909            ctx.lineWidth = 50;
910            ctx.beginPath();
911            ctx.bezierCurveTo(100, 50, 200, 50, 200, 50);
912            ctx.stroke();
913            //verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
914            //verify(Helper.comparePixel(ctx, 95,45, 0,255,0,255));
915
916            ctx.reset();
917            ctx.fillStyle = '#f00';
918            ctx.fillRect(0, 0, 100, 50);
919            ctx.strokeStyle = '#0f0';
920            ctx.lineWidth = 50;
921            ctx.beginPath();
922            ctx.bezierCurveTo(0, 25, 100, 25, 100, 25);
923            ctx.stroke();
924            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
925            //verify(Helper.comparePixel(ctx, 5,45, 0,255,0,255));
926
927            ctx.reset();
928            ctx.moveTo(0, 0);
929            ctx.lineTo(100, 0);
930            ctx.bezierCurveTo(Infinity, 50, 0, 50, 0, 50);
931            ctx.bezierCurveTo(-Infinity, 50, 0, 50, 0, 50);
932            ctx.bezierCurveTo(NaN, 50, 0, 50, 0, 50);
933            ctx.bezierCurveTo(0, Infinity, 0, 50, 0, 50);
934            ctx.bezierCurveTo(0, -Infinity, 0, 50, 0, 50);
935            ctx.bezierCurveTo(0, NaN, 0, 50, 0, 50);
936            ctx.bezierCurveTo(0, 50, Infinity, 50, 0, 50);
937            ctx.bezierCurveTo(0, 50, -Infinity, 50, 0, 50);
938            ctx.bezierCurveTo(0, 50, NaN, 50, 0, 50);
939            ctx.bezierCurveTo(0, 50, 0, Infinity, 0, 50);
940            ctx.bezierCurveTo(0, 50, 0, -Infinity, 0, 50);
941            ctx.bezierCurveTo(0, 50, 0, NaN, 0, 50);
942            ctx.bezierCurveTo(0, 50, 0, 50, Infinity, 50);
943            ctx.bezierCurveTo(0, 50, 0, 50, -Infinity, 50);
944            ctx.bezierCurveTo(0, 50, 0, 50, NaN, 50);
945            ctx.bezierCurveTo(0, 50, 0, 50, 0, Infinity);
946            ctx.bezierCurveTo(0, 50, 0, 50, 0, -Infinity);
947            ctx.bezierCurveTo(0, 50, 0, 50, 0, NaN);
948            ctx.bezierCurveTo(Infinity, Infinity, 0, 50, 0, 50);
949            ctx.bezierCurveTo(Infinity, Infinity, Infinity, 50, 0, 50);
950            ctx.bezierCurveTo(Infinity, Infinity, Infinity, Infinity, 0, 50);
951            ctx.bezierCurveTo(Infinity, Infinity, Infinity, Infinity, Infinity, 50);
952            ctx.bezierCurveTo(Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
953            ctx.bezierCurveTo(Infinity, Infinity, Infinity, Infinity, 0, Infinity);
954            ctx.bezierCurveTo(Infinity, Infinity, Infinity, 50, Infinity, 50);
955            ctx.bezierCurveTo(Infinity, Infinity, Infinity, 50, Infinity, Infinity);
956            ctx.bezierCurveTo(Infinity, Infinity, Infinity, 50, 0, Infinity);
957            ctx.bezierCurveTo(Infinity, Infinity, 0, Infinity, 0, 50);
958            ctx.bezierCurveTo(Infinity, Infinity, 0, Infinity, Infinity, 50);
959            ctx.bezierCurveTo(Infinity, Infinity, 0, Infinity, Infinity, Infinity);
960            ctx.bezierCurveTo(Infinity, Infinity, 0, Infinity, 0, Infinity);
961            ctx.bezierCurveTo(Infinity, Infinity, 0, 50, Infinity, 50);
962            ctx.bezierCurveTo(Infinity, Infinity, 0, 50, Infinity, Infinity);
963            ctx.bezierCurveTo(Infinity, Infinity, 0, 50, 0, Infinity);
964            ctx.bezierCurveTo(Infinity, 50, Infinity, 50, 0, 50);
965            ctx.bezierCurveTo(Infinity, 50, Infinity, Infinity, 0, 50);
966            ctx.bezierCurveTo(Infinity, 50, Infinity, Infinity, Infinity, 50);
967            ctx.bezierCurveTo(Infinity, 50, Infinity, Infinity, Infinity, Infinity);
968            ctx.bezierCurveTo(Infinity, 50, Infinity, Infinity, 0, Infinity);
969            ctx.bezierCurveTo(Infinity, 50, Infinity, 50, Infinity, 50);
970            ctx.bezierCurveTo(Infinity, 50, Infinity, 50, Infinity, Infinity);
971            ctx.bezierCurveTo(Infinity, 50, Infinity, 50, 0, Infinity);
972            ctx.bezierCurveTo(Infinity, 50, 0, Infinity, 0, 50);
973            ctx.bezierCurveTo(Infinity, 50, 0, Infinity, Infinity, 50);
974            ctx.bezierCurveTo(Infinity, 50, 0, Infinity, Infinity, Infinity);
975            ctx.bezierCurveTo(Infinity, 50, 0, Infinity, 0, Infinity);
976            ctx.bezierCurveTo(Infinity, 50, 0, 50, Infinity, 50);
977            ctx.bezierCurveTo(Infinity, 50, 0, 50, Infinity, Infinity);
978            ctx.bezierCurveTo(Infinity, 50, 0, 50, 0, Infinity);
979            ctx.bezierCurveTo(Infinity, 50, Infinity, 50, 0, 50);
980            ctx.bezierCurveTo(Infinity, 50, Infinity, Infinity, 0, 50);
981            ctx.bezierCurveTo(Infinity, 50, Infinity, Infinity, Infinity, 50);
982            ctx.bezierCurveTo(Infinity, 50, Infinity, Infinity, Infinity, Infinity);
983            ctx.bezierCurveTo(Infinity, 50, Infinity, Infinity, 0, Infinity);
984            ctx.bezierCurveTo(Infinity, 50, Infinity, 50, Infinity, 50);
985            ctx.bezierCurveTo(Infinity, 50, Infinity, 50, Infinity, Infinity);
986            ctx.bezierCurveTo(Infinity, 50, Infinity, 50, 0, Infinity);
987            ctx.bezierCurveTo(Infinity, 50, 0, Infinity, 0, 50);
988            ctx.bezierCurveTo(Infinity, 50, 0, Infinity, Infinity, 50);
989            ctx.bezierCurveTo(Infinity, 50, 0, Infinity, Infinity, Infinity);
990            ctx.bezierCurveTo(Infinity, 50, 0, Infinity, 0, Infinity);
991            ctx.bezierCurveTo(Infinity, 50, 0, 50, Infinity, 50);
992            ctx.bezierCurveTo(Infinity, 50, 0, 50, Infinity, Infinity);
993            ctx.bezierCurveTo(Infinity, 50, 0, 50, 0, Infinity);
994            ctx.bezierCurveTo(0, Infinity, Infinity, 50, 0, 50);
995            ctx.bezierCurveTo(0, Infinity, Infinity, Infinity, 0, 50);
996            ctx.bezierCurveTo(0, Infinity, Infinity, Infinity, Infinity, 50);
997            ctx.bezierCurveTo(0, Infinity, Infinity, Infinity, Infinity, Infinity);
998            ctx.bezierCurveTo(0, Infinity, Infinity, Infinity, 0, Infinity);
999            ctx.bezierCurveTo(0, Infinity, Infinity, 50, Infinity, 50);
1000            ctx.bezierCurveTo(0, Infinity, Infinity, 50, Infinity, Infinity);
1001            ctx.bezierCurveTo(0, Infinity, Infinity, 50, 0, Infinity);
1002            ctx.bezierCurveTo(0, Infinity, 0, Infinity, 0, 50);
1003            ctx.bezierCurveTo(0, Infinity, 0, Infinity, Infinity, 50);
1004            ctx.bezierCurveTo(0, Infinity, 0, Infinity, Infinity, Infinity);
1005            ctx.bezierCurveTo(0, Infinity, 0, Infinity, 0, Infinity);
1006            ctx.bezierCurveTo(0, Infinity, 0, 50, Infinity, 50);
1007            ctx.bezierCurveTo(0, Infinity, 0, 50, Infinity, Infinity);
1008            ctx.bezierCurveTo(0, Infinity, 0, 50, 0, Infinity);
1009            ctx.bezierCurveTo(0, 50, Infinity, Infinity, 0, 50);
1010            ctx.bezierCurveTo(0, 50, Infinity, Infinity, Infinity, 50);
1011            ctx.bezierCurveTo(0, 50, Infinity, Infinity, Infinity, Infinity);
1012            ctx.bezierCurveTo(0, 50, Infinity, Infinity, 0, Infinity);
1013            ctx.bezierCurveTo(0, 50, Infinity, 50, Infinity, 50);
1014            ctx.bezierCurveTo(0, 50, Infinity, 50, Infinity, Infinity);
1015            ctx.bezierCurveTo(0, 50, Infinity, 50, 0, Infinity);
1016            ctx.bezierCurveTo(0, 50, 0, Infinity, Infinity, 50);
1017            ctx.bezierCurveTo(0, 50, 0, Infinity, Infinity, Infinity);
1018            ctx.bezierCurveTo(0, 50, 0, Infinity, 0, Infinity);
1019            ctx.bezierCurveTo(0, 50, 0, 50, Infinity, Infinity);
1020            ctx.lineTo(100, 50);
1021            ctx.lineTo(0, 50);
1022            ctx.fillStyle = '#0f0';
1023            ctx.fill();
1024            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1025            verify(Helper.comparePixel(ctx, 90,45, 0,255,0,255));
1026
1027            ctx.reset();
1028            ctx.fillStyle = '#f00';
1029            ctx.fillRect(0, 0, 100, 50);
1030            ctx.scale(1000, 1000);
1031            ctx.strokeStyle = '#0f0';
1032            ctx.lineWidth = 0.055;
1033            ctx.beginPath();
1034            ctx.moveTo(-2, 3.1);
1035            ctx.bezierCurveTo(-2, -1, 2.1, -1, 2.1, 3.1);
1036            ctx.stroke();
1037            //verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1038            //verify(Helper.comparePixel(ctx, 1,1, 0,255,0,255));
1039            //verify(Helper.comparePixel(ctx, 98,1, 0,255,0,255));
1040            //verify(Helper.comparePixel(ctx, 1,48, 0,255,0,255));
1041            //verify(Helper.comparePixel(ctx, 98,48, 0,255,0,255));
1042
1043            ctx.reset();
1044            ctx.fillStyle = '#f00';
1045            ctx.fillRect(0, 0, 100, 50);
1046            ctx.strokeStyle = '#0f0';
1047            ctx.lineWidth = 55;
1048            ctx.beginPath();
1049            ctx.moveTo(-2000, 3100);
1050            ctx.bezierCurveTo(-2000, -1000, 2100, -1000, 2100, 3100);
1051            ctx.stroke();
1052            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1053            verify(Helper.comparePixel(ctx, 1,1, 0,255,0,255));
1054            verify(Helper.comparePixel(ctx, 98,1, 0,255,0,255));
1055            verify(Helper.comparePixel(ctx, 1,48, 0,255,0,255));
1056            verify(Helper.comparePixel(ctx, 98,48, 0,255,0,255));
1057
1058        }
1059        function test_quadraticCurveTo() {
1060            var ctx = canvas.getContext('2d');
1061            ctx.reset();
1062            ctx.fillStyle = '#f00';
1063            ctx.fillRect(0, 0, 100, 50);
1064            ctx.strokeStyle = '#0f0';
1065            ctx.lineWidth = 50;
1066            ctx.beginPath();
1067            ctx.moveTo(0, 25);
1068            ctx.quadraticCurveTo(100, 25, 100, 25);
1069            ctx.stroke();
1070            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1071
1072            ctx.reset();
1073            ctx.fillStyle = '#0f0';
1074            ctx.fillRect(0, 0, 100, 50);
1075            ctx.strokeStyle = '#f00';
1076            ctx.lineWidth = 50;
1077            ctx.beginPath();
1078            ctx.quadraticCurveTo(100, 50, 200, 50);
1079            ctx.stroke();
1080            //verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1081            //verify(Helper.comparePixel(ctx, 95,45, 0,255,0,255));
1082
1083            ctx.reset();
1084            ctx.fillStyle = '#f00';
1085            ctx.fillRect(0, 0, 100, 50);
1086            ctx.strokeStyle = '#0f0';
1087            ctx.lineWidth = 50;
1088            ctx.beginPath();
1089            ctx.quadraticCurveTo(0, 25, 100, 25);
1090            ctx.stroke();
1091            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1092            //verify(Helper.comparePixel(ctx, 5,45, 0,255,0,255));
1093
1094            ctx.reset();
1095            ctx.moveTo(0, 0);
1096            ctx.lineTo(100, 0);
1097            ctx.quadraticCurveTo(Infinity, 50, 0, 50);
1098            ctx.quadraticCurveTo(-Infinity, 50, 0, 50);
1099            ctx.quadraticCurveTo(NaN, 50, 0, 50);
1100            ctx.quadraticCurveTo(0, Infinity, 0, 50);
1101            ctx.quadraticCurveTo(0, -Infinity, 0, 50);
1102            ctx.quadraticCurveTo(0, NaN, 0, 50);
1103            ctx.quadraticCurveTo(0, 50, Infinity, 50);
1104            ctx.quadraticCurveTo(0, 50, -Infinity, 50);
1105            ctx.quadraticCurveTo(0, 50, NaN, 50);
1106            ctx.quadraticCurveTo(0, 50, 0, Infinity);
1107            ctx.quadraticCurveTo(0, 50, 0, -Infinity);
1108            ctx.quadraticCurveTo(0, 50, 0, NaN);
1109            ctx.quadraticCurveTo(Infinity, Infinity, 0, 50);
1110            ctx.quadraticCurveTo(Infinity, Infinity, Infinity, 50);
1111            ctx.quadraticCurveTo(Infinity, Infinity, Infinity, Infinity);
1112            ctx.quadraticCurveTo(Infinity, Infinity, 0, Infinity);
1113            ctx.quadraticCurveTo(Infinity, 50, Infinity, 50);
1114            ctx.quadraticCurveTo(Infinity, 50, Infinity, Infinity);
1115            ctx.quadraticCurveTo(Infinity, 50, 0, Infinity);
1116            ctx.quadraticCurveTo(0, Infinity, Infinity, 50);
1117            ctx.quadraticCurveTo(0, Infinity, Infinity, Infinity);
1118            ctx.quadraticCurveTo(0, Infinity, 0, Infinity);
1119            ctx.quadraticCurveTo(0, 50, Infinity, Infinity);
1120            ctx.lineTo(100, 50);
1121            ctx.lineTo(0, 50);
1122            ctx.fillStyle = '#0f0';
1123            ctx.fill();
1124            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1125            verify(Helper.comparePixel(ctx, 90,45, 0,255,0,255));
1126
1127            ctx.reset();
1128            ctx.fillStyle = '#f00';
1129            ctx.fillRect(0, 0, 100, 50);
1130            ctx.scale(1000, 1000);
1131            ctx.strokeStyle = '#0f0';
1132            ctx.lineWidth = 0.055;
1133            ctx.beginPath();
1134            ctx.moveTo(-1, 1.05);
1135            ctx.quadraticCurveTo(0, -1, 1.2, 1.05);
1136            ctx.stroke();
1137            //verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1138            //verify(Helper.comparePixel(ctx, 1,1, 0,255,0,255));
1139            //verify(Helper.comparePixel(ctx, 98,1, 0,255,0,255));
1140            //verify(Helper.comparePixel(ctx, 1,48, 0,255,0,255));
1141            //verify(Helper.comparePixel(ctx, 98,48, 0,255,0,255));
1142
1143            ctx.reset();
1144            ctx.fillStyle = '#f00';
1145            ctx.fillRect(0, 0, 100, 50);
1146            ctx.strokeStyle = '#0f0';
1147            ctx.lineWidth = 55;
1148            ctx.beginPath();
1149            ctx.moveTo(-1000, 1050);
1150            ctx.quadraticCurveTo(0, -1000, 1200, 1050);
1151            ctx.stroke();
1152            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1153            //verify(Helper.comparePixel(ctx, 1,1, 0,255,0,255));
1154            //verify(Helper.comparePixel(ctx, 98,1, 0,255,0,255));
1155            verify(Helper.comparePixel(ctx, 1,48, 0,255,0,255));
1156            verify(Helper.comparePixel(ctx, 98,48, 0,255,0,255));
1157        }
1158        function test_rect() {
1159            var ctx = canvas.getContext('2d');
1160            ctx.reset();
1161
1162            ctx.fillStyle = '#f00';
1163            ctx.fillRect(0, 0, 100, 50);
1164            ctx.fillStyle = '#0f0';
1165            ctx.rect(0, 0, 100, 50);
1166            ctx.fill();
1167            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1168
1169            ctx.reset();
1170            ctx.fillStyle = '#f00';
1171            ctx.fillRect(0, 0, 100, 50);
1172            ctx.strokeStyle = '#0f0';
1173            ctx.lineWidth = 200;
1174            ctx.lineJoin = 'miter';
1175            ctx.rect(100, 50, 100, 100);
1176            ctx.stroke();
1177            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1178
1179            ctx.reset();
1180            ctx.fillStyle = '#f00';
1181            ctx.fillRect(0, 0, 100, 50);
1182            ctx.strokeStyle = '#0f0';
1183            ctx.lineWidth = 100;
1184            ctx.rect(200, 100, 400, 1000);
1185            ctx.lineTo(-2000, -1000);
1186            ctx.stroke();
1187            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1188
1189            ctx.reset();
1190            ctx.fillStyle = '#f00';
1191            ctx.fillRect(0, 0, 100, 50);
1192            ctx.strokeStyle = '#0f0';
1193            ctx.lineWidth = 450;
1194            ctx.lineCap = 'round';
1195            ctx.lineJoin = 'bevel';
1196            ctx.rect(150, 150, 2000, 2000);
1197            ctx.lineTo(160, 160);
1198            ctx.stroke();
1199            verify(Helper.comparePixel(ctx, 1,1, 0,255,0,255));
1200            verify(Helper.comparePixel(ctx, 98,1, 0,255,0,255));
1201            verify(Helper.comparePixel(ctx, 1,48, 0,255,0,255));
1202            verify(Helper.comparePixel(ctx, 98,48, 0,255,0,255));
1203
1204            ctx.reset();
1205            ctx.fillStyle = '#f00';
1206            ctx.fillRect(0, 0, 100, 50);
1207            ctx.beginPath();
1208            ctx.fillStyle = '#0f0';
1209            ctx.rect(0, 0, 50, 25);
1210            ctx.rect(100, 0, -50, 25);
1211            ctx.rect(0, 50, 50, -25);
1212            ctx.rect(100, 50, -50, -25);
1213            ctx.fill();
1214            verify(Helper.comparePixel(ctx, 25,12, 0,255,0,255));
1215            verify(Helper.comparePixel(ctx, 75,12, 0,255,0,255));
1216            verify(Helper.comparePixel(ctx, 25,37, 0,255,0,255));
1217            verify(Helper.comparePixel(ctx, 75,37, 0,255,0,255));
1218
1219            ctx.reset();
1220            ctx.fillStyle = '#0f0';
1221            ctx.fillRect(0, 0, 100, 50);
1222            ctx.beginPath();
1223            ctx.strokeStyle = '#f00';
1224            ctx.lineWidth = 50;
1225            ctx.moveTo(-100, 25);
1226            ctx.lineTo(-50, 25);
1227            ctx.rect(200, 25, 1, 1);
1228            ctx.stroke();
1229            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1230
1231
1232            ctx.reset();
1233            ctx.moveTo(0, 0);
1234            ctx.lineTo(100, 0);
1235            ctx.rect(Infinity, 50, 1, 1);
1236            ctx.rect(-Infinity, 50, 1, 1);
1237            ctx.rect(NaN, 50, 1, 1);
1238            ctx.rect(0, Infinity, 1, 1);
1239            ctx.rect(0, -Infinity, 1, 1);
1240            ctx.rect(0, NaN, 1, 1);
1241            ctx.rect(0, 50, Infinity, 1);
1242            ctx.rect(0, 50, -Infinity, 1);
1243            ctx.rect(0, 50, NaN, 1);
1244            ctx.rect(0, 50, 1, Infinity);
1245            ctx.rect(0, 50, 1, -Infinity);
1246            ctx.rect(0, 50, 1, NaN);
1247            ctx.rect(Infinity, Infinity, 1, 1);
1248            ctx.rect(Infinity, Infinity, Infinity, 1);
1249            ctx.rect(Infinity, Infinity, Infinity, Infinity);
1250            ctx.rect(Infinity, Infinity, 1, Infinity);
1251            ctx.rect(Infinity, 50, Infinity, 1);
1252            ctx.rect(Infinity, 50, Infinity, Infinity);
1253            ctx.rect(Infinity, 50, 1, Infinity);
1254            ctx.rect(0, Infinity, Infinity, 1);
1255            ctx.rect(0, Infinity, Infinity, Infinity);
1256            ctx.rect(0, Infinity, 1, Infinity);
1257            ctx.rect(0, 50, Infinity, Infinity);
1258            ctx.lineTo(100, 50);
1259            ctx.lineTo(0, 50);
1260            ctx.fillStyle = '#0f0';
1261            ctx.fill();
1262            //verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1263            //verify(Helper.comparePixel(ctx, 90,45, 0,255,0,255));
1264
1265
1266            ctx.reset();
1267            ctx.fillStyle = '#f00';
1268            ctx.fillRect(0, 0, 100, 50);
1269            ctx.strokeStyle = '#0f0';
1270            ctx.lineWidth = 90;
1271            ctx.beginPath();
1272            ctx.rect(45, 20, 10, 10);
1273            ctx.stroke();
1274            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1275
1276            ctx.reset();
1277            ctx.fillStyle = '#0f0';
1278            ctx.fillRect(0, 0, 100, 50);
1279            ctx.beginPath();
1280            ctx.fillStyle = '#f00';
1281            ctx.rect(0, 0, 50, 50);
1282            ctx.rect(100, 50, -50, -50);
1283            ctx.rect(0, 25, 100, -25);
1284            ctx.rect(100, 25, -100, 25);
1285            ctx.fill();
1286            verify(Helper.comparePixel(ctx, 25,12, 0,255,0,255));
1287            verify(Helper.comparePixel(ctx, 75,12, 0,255,0,255));
1288            verify(Helper.comparePixel(ctx, 25,37, 0,255,0,255));
1289            verify(Helper.comparePixel(ctx, 75,37, 0,255,0,255));
1290
1291            ctx.reset();
1292            ctx.fillStyle = '#f00';
1293            ctx.fillRect(0, 0, 100, 50);
1294            ctx.strokeStyle = '#0f0';
1295            ctx.lineWidth = 100;
1296            ctx.beginPath();
1297            ctx.rect(0, 50, 100, 0);
1298            ctx.stroke();
1299            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1300
1301            ctx.reset();
1302            ctx.fillStyle = '#f00';
1303            ctx.fillRect(0, 0, 100, 50);
1304            ctx.strokeStyle = '#0f0';
1305            ctx.lineWidth = 100;
1306            ctx.beginPath();
1307            ctx.rect(50, -100, 0, 250);
1308            ctx.stroke();
1309            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1310
1311            ctx.reset();
1312            ctx.fillStyle = '#0f0';
1313            ctx.fillRect(0, 0, 100, 50);
1314            ctx.strokeStyle = '#f00';
1315            ctx.lineWidth = 100;
1316            ctx.beginPath();
1317            ctx.rect(50, 25, 0, 0);
1318            ctx.stroke();
1319            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1320
1321            ctx.reset();
1322            ctx.fillStyle = '#f00';
1323            ctx.fillRect(0, 0, 100, 50);
1324            ctx.strokeStyle = '#0f0';
1325            ctx.lineWidth = 50;
1326            ctx.rect(100, 25, 0, 0);
1327            ctx.lineTo(0, 25);
1328            ctx.stroke();
1329            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1330
1331            ctx.reset();
1332            ctx.fillStyle = '#0f0';
1333            ctx.fillRect(0, 0, 100, 50);
1334            ctx.strokeStyle = '#f00';
1335            ctx.lineWidth = 50;
1336            ctx.moveTo(0, 0);
1337            ctx.rect(100, 25, 0, 0);
1338            ctx.stroke();
1339            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1340
1341            ctx.reset();
1342            ctx.fillStyle = '#0f0';
1343            ctx.fillRect(0, 0, 100, 50);
1344            ctx.strokeStyle = '#f00';
1345            ctx.lineJoin = 'miter';
1346            ctx.miterLimit = 1.5;
1347            ctx.lineWidth = 200;
1348            ctx.beginPath();
1349            ctx.rect(100, 25, 1000, 0);
1350            ctx.stroke();
1351            //verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1352        }
1353
1354        function test_clearRect() {
1355            var ctx = canvas.getContext('2d');
1356            ctx.reset();
1357            ctx.fillStyle = '#0f0';
1358            ctx.beginPath();
1359            ctx.rect(0, 0, 100, 50);
1360            ctx.clearRect(0, 0, 16, 16);
1361            ctx.fill();
1362            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1363        }
1364        function test_fillRect() {
1365            var ctx = canvas.getContext('2d');
1366            ctx.reset();
1367            ctx.beginPath();
1368            ctx.rect(0, 0, 100, 50);
1369            ctx.fillStyle = '#f00';
1370            ctx.fillRect(0, 0, 16, 16);
1371            ctx.fillStyle = '#0f0';
1372            ctx.fill();
1373            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1374        }
1375
1376        function test_strokeRect() {
1377            var ctx = canvas.getContext('2d');
1378            ctx.reset();
1379            ctx.beginPath();
1380            ctx.rect(0, 0, 100, 50);
1381            ctx.strokeStyle = '#f00';
1382            ctx.lineWidth = 5;
1383            ctx.strokeRect(0, 0, 16, 16);
1384            ctx.fillStyle = '#0f0';
1385            ctx.fill();
1386
1387            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1388        }
1389        function test_transform() {
1390            var ctx = canvas.getContext('2d');
1391            ctx.reset();
1392            ctx.fillStyle = '#f00';
1393            ctx.fillRect(0, 0, 100, 50);
1394
1395            ctx.translate(-100, 0);
1396            ctx.rect(100, 0, 100, 50);
1397            ctx.translate(0, -100);
1398            ctx.fillStyle = '#0f0';
1399            ctx.fill();
1400
1401            //verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1402
1403            ctx.reset();
1404            ctx.fillStyle = '#f00';
1405            ctx.fillRect(0, 0, 100, 50);
1406            ctx.fillStyle = '#0f0';
1407            ctx.moveTo(0, 0);
1408            ctx.translate(100, 0);
1409            ctx.lineTo(0, 0);
1410            ctx.translate(0, 50);
1411            ctx.lineTo(0, 0);
1412            ctx.translate(-100, 0);
1413            ctx.lineTo(0, 0);
1414            ctx.translate(1000, 1000);
1415            ctx.rotate(Math.PI/2);
1416            ctx.scale(0.1, 0.1);
1417            ctx.fill();
1418            //verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1419
1420            ctx.reset();
1421            ctx.fillStyle = '#0f0';
1422            ctx.fillRect(0, 0, 100, 50);
1423
1424            ctx.fillStyle = '#f00';
1425            ctx.translate(-100, 0);
1426            ctx.rect(0, 0, 100, 50);
1427            ctx.fill();
1428            ctx.translate(100, 0);
1429            ctx.fill();
1430
1431            ctx.beginPath();
1432            ctx.strokeStyle = '#f00';
1433            ctx.lineWidth = 50;
1434            ctx.translate(0, -50);
1435            ctx.moveTo(0, 25);
1436            ctx.lineTo(100, 25);
1437            ctx.stroke();
1438            ctx.translate(0, 50);
1439            ctx.stroke();
1440            verify(Helper.comparePixel(ctx, 50,25, 0,255,0,255));
1441        }
1442    }
1443 }