Remove "gopher" from list of special schemes in URLParser
[WebKit-https.git] / LayoutTests / imported / w3c / common / canvas-tests.js
1 if (window.testRunner)
2         testRunner.dumpAsText(true);
3
4 function _valToString(val)
5 {
6     if (val === undefined || val === null)
7         return '[' + typeof(val) + ']';
8     return val.toString() + '[' + typeof(val) + ']';
9 }
10
11 var _failed = false;
12 var _asserted = false;
13
14 function _warn(text)
15 {
16     document.getElementById('d').appendChild(document.createElement('li')).appendChild(document.createTextNode(text));
17 }
18
19 function _fail(text)
20 {
21     _warn(text);
22     _failed = true;
23 }
24
25 function _assert(cond, text)
26 {
27     _asserted = true;
28     if (! cond)
29         _fail('Failed assertion: ' + text);
30 }
31
32 function _assertSame(a, b, text_a, text_b)
33 {
34     _asserted = true;
35     if (a !== b)
36         _fail('Failed assertion ' + text_a + ' === ' + text_b +
37                 ' (got ' + _valToString(a) + ', expected ' + _valToString(b) + ')');
38 }
39
40 function _assertDifferent(a, b, text_a, text_b)
41 {
42     _asserted = true;
43     if (a === b)
44         _fail('Failed assertion ' + text_a + ' !== ' + text_b +
45                 ' (got ' + _valToString(a) + ', expected not ' + _valToString(b) + ')');
46 }
47
48 function _assertEqual(a, b, text_a, text_b)
49 {
50     _asserted = true;
51     if (a != b)
52         _fail('Failed assertion ' + text_a + ' == ' + text_b +
53                 ' (got ' + _valToString(a) + ', expected ' + _valToString(b) + ')');
54 }
55
56 function _assertMatch(a, b, text_a, text_b)
57 {
58     _asserted = true;
59     if (! a.match(b))
60         _fail('Failed assertion ' + text_a + ' matches ' + text_b +
61                 ' (got ' + _valToString(a) + ')');
62 }
63
64
65 var _manual_check = false;
66
67 function _requireManualCheck()
68 {
69     _manual_check = true;
70 }
71
72 function _crash()
73 {
74     _fail('Aborted due to predicted crash');
75 }
76
77 function _getPixel(canvas, x,y)
78 {
79     try
80     {
81         var ctx = canvas.getContext('2d');
82         var imgdata = ctx.getImageData(x, y, 1, 1);
83         return [ imgdata.data[0], imgdata.data[1], imgdata.data[2], imgdata.data[3] ];
84     }
85     catch (e)
86     {
87         // probably a security exception caused by having drawn
88         // data: URLs onto the canvas
89         _manual_check = true;
90         return undefined;
91     }
92 }
93
94 function _assertPixel(canvas, x,y, r,g,b,a, pos, colour)
95 {
96     _asserted = true;
97     var c = _getPixel(canvas, x,y);
98     if (c && ! (c[0] == r && c[1] == g && c[2] == b && c[3] == a))
99         _fail('Failed assertion: got pixel [' + c + '] at ('+x+','+y+'), expected ['+r+','+g+','+b+','+a+']');
100 }
101
102 function _assertPixelApprox(canvas, x,y, r,g,b,a, pos, colour, tolerance)
103 {
104     _asserted = true;
105     var c = _getPixel(canvas, x,y);
106     if (c)
107     {
108         var diff = Math.max(Math.abs(c[0]-r), Math.abs(c[1]-g), Math.abs(c[2]-b), Math.abs(c[3]-a));
109         if (diff > tolerance)
110             _fail('Failed assertion: got pixel [' + c + '] at ('+x+','+y+'), expected ['+r+','+g+','+b+','+a+'] +/- '+tolerance);
111     }
112 }
113
114 function _addTest(test)
115 {
116     var deferred = false;
117     window.deferTest = function () { deferred = true; };
118     function endTest()
119     {
120         if (_failed) // test failed
121         {
122             document.documentElement.className += ' fail';
123             window._testStatus = ['fail', document.getElementById('d').innerHTML];
124         }
125         else if (_manual_check || !_asserted)
126         { // test case explicitly asked for a manual check, or no automatic assertions were performed
127             document.getElementById('d').innerHTML += '<li>Cannot automatically verify result';
128             document.documentElement.className += ' needs_check';
129             window._testStatus = ['check', document.getElementById('d').innerHTML];
130         }
131         else // test succeeded
132         {
133             document.getElementById('d').innerHTML += '<li>Passed';
134             document.documentElement.className += ' pass';
135             window._testStatus = ['pass', document.getElementById('d').innerHTML];
136         }
137     };
138     window.endTest = endTest;
139     window.wrapFunction = function (f)
140     {
141         return function()
142         {
143             try
144             {
145                 f.apply(null, arguments);
146             }
147             catch (e)
148             {
149                 _fail('Aborted with exception: ' + e.message);
150             }
151             endTest();
152         };
153     };
154
155     window.onload = function ()
156     {
157         try
158         {
159             var canvas = document.getElementById('c');
160             var ctx = canvas.getContext('2d');
161             test(canvas, ctx);
162         }
163         catch (e)
164         {
165             _fail('Aborted with exception: ' + e.message);
166             deferred = false; // cancel any deference
167         }
168
169         if (! deferred)
170             endTest();
171     };
172 }
173
174 function _assertGreen(ctx, canvasWidth, canvasHeight)
175 {
176     var testColor = function(d, idx, expected) {
177         _assertEqual(d[idx], expected, "d[" + idx + "]", String(expected));
178     };
179     var imagedata = ctx.getImageData(0, 0, canvasWidth, canvasHeight);
180     var w = imagedata.width, h = imagedata.height, d = imagedata.data;
181     for (var i = 0; i < h; ++i) {
182         for (var j = 0; j < w; ++j) {
183             testColor(d, 4 * (w * i + j) + 0, 0);
184             testColor(d, 4 * (w * i + j) + 1, 255);
185             testColor(d, 4 * (w * i + j) + 2, 0);
186             testColor(d, 4 * (w * i + j) + 3, 255);
187         }
188     }
189 }