Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(464)

Side by Side Diff: conformance/more/unit.js

Issue 8342021: Add webgl conformance tests r15841. (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/webgl/sdk/tests/
Patch Set: Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « conformance/more/unit.css ('k') | conformance/more/util.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 /*
2 Unit testing library for the OpenGL ES 2.0 HTML Canvas context
3
4 Copyright (C) 2011 Ilmari Heikkinen <ilmari.heikkinen@gmail.com>
5
6 Permission is hereby granted, free of charge, to any person
7 obtaining a copy of this software and associated documentation
8 files (the "Software"), to deal in the Software without
9 restriction, including without limitation the rights to use,
10 copy, modify, merge, publish, distribute, sublicense, and/or sell
11 copies of the Software, and to permit persons to whom the
12 Software is furnished to do so, subject to the following
13 conditions:
14
15 The above copyright notice and this permission notice shall be
16 included in all copies or substantial portions of the Software.
17
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
20 OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
22 HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
23 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25 OTHER DEALINGS IN THE SOFTWARE.
26 */
27 Tests = {
28 autorun : true,
29 message : null,
30 delay : 0,
31
32 startUnit : function(){ return []; },
33 setup : function() { return arguments; },
34 teardown : function() {},
35 endUnit : function() {}
36 }
37
38 var __testSuccess__ = true;
39 var __testFailCount__ = 0;
40 var __testLog__;
41 var __backlog__ = [];
42
43 Object.toSource = function(a, seen){
44 if (a == null) return "null";
45 if (typeof a == 'boolean') return a ? "true" : "false";
46 if (typeof a == 'string') return '"' + a.replace(/"/g, '\\"') + '"';
47 if (a instanceof HTMLElement) return a.toString();
48 if (a.width && a.height && a.data) return "[ImageData]";
49 if (a instanceof Array) {
50 if (!seen) seen = [];
51 var idx = seen.indexOf(a);
52 if (idx != -1) return '#'+(idx+1)+'#';
53 seen.unshift(a);
54 var srcs = a.map(function(o){ return Object.toSource(o,seen) });
55 var prefix = '';
56 idx = seen.indexOf(a);
57 if (idx != -1) prefix = '#'+(idx+1)+'=';
58 return prefix + '[' + srcs.join(", ") + ']';
59 }
60 if (typeof a == 'object') {
61 if (!seen) seen = [];
62 var idx = seen.indexOf(a);
63 if (idx != -1) return '#'+(idx+1)+'#';
64 seen.unshift(a);
65 var members = [];
66 var name;
67 try {
68 for (var i in a) {
69 if (i.search(/^[a-zA-Z0-9]+$/) != -1)
70 name = i;
71 else
72 name = '"' + i.replace(/"/g, '\\"') + '"';
73 var ai;
74 try { ai = a[i]; }
75 catch(e) { ai = 'null /*ERROR_ACCESSING*/'; }
76 var s = name + ':' + Object.toSource(ai, seen);
77 members.push(s);
78 }
79 } catch (e) {}
80 var prefix = '';
81 idx = seen.indexOf(a);
82 if (idx != -1) prefix = '#'+(idx+1)+'=';
83 return prefix + '{' + members.join(", ") + '}'
84 }
85 if (typeof a == 'function')
86 return '('+a.toString().replace(/\n/g, " ").replace(/\s+/g, " ")+')';
87 return a.toString();
88 }
89
90 function formatError(e) {
91 if (window.console) console.log(e);
92 var pathSegs = location.href.toString().split("/");
93 var currentDoc = e.lineNumber != null ? pathSegs[pathSegs.length - 1] : null;
94 var trace = (e.filename || currentDoc) + ":" + e.lineNumber + (e.trace ? "\n"+ e.trace : "");
95 return e.message + "\n" + trace;
96 }
97
98 function runTests() {
99 var h = document.getElementById('test-status');
100 if (h == null) {
101 h = document.createElement('h1');
102 h.id = 'test-status';
103 document.body.appendChild(h);
104 }
105 h.textContent = "";
106 var log = document.getElementById('test-log');
107 if (log == null) {
108 log = document.createElement('div');
109 log.id = 'test-log';
110 document.body.appendChild(log);
111 }
112 while (log.childNodes.length > 0)
113 log.removeChild(log.firstChild);
114
115 var setup_args = [];
116
117 if (Tests.startUnit != null) {
118 __testLog__ = document.createElement('div');
119 try {
120 setup_args = Tests.startUnit();
121 if (__testLog__.childNodes.length > 0)
122 log.appendChild(__testLog__);
123 } catch(e) {
124 testFailed("startUnit", formatError(e));
125 log.appendChild(__testLog__);
126 printTestStatus();
127 return;
128 }
129 }
130
131 var testsRun = false;
132 var allTestsSuccessful = true;
133
134 for (var i in Tests) {
135 if (i.substring(0,4) != "test") continue;
136 __testLog__ = document.createElement('div');
137 __testSuccess__ = true;
138 try {
139 doTestNotify (i);
140 var args = setup_args;
141 if (Tests.setup != null)
142 args = Tests.setup.apply(Tests, setup_args);
143 Tests[i].apply(Tests, args);
144 if (Tests.teardown != null)
145 Tests.teardown.apply(Tests, args);
146 }
147 catch (e) {
148 testFailed(i, e.name, formatError(e));
149 }
150 if (__testSuccess__ == false) {
151 ++__testFailCount__;
152 }
153 var h = document.createElement('h2');
154 h.textContent = i;
155 __testLog__.insertBefore(h, __testLog__.firstChild);
156 log.appendChild(__testLog__);
157 allTestsSuccessful = allTestsSuccessful && __testSuccess__ == true;
158 reportTestResultsToHarness(__testSuccess__, i);
159 doTestNotify (i+"--"+(__testSuccess__?"OK":"FAIL"));
160 testsRun = true;
161 }
162
163 printTestStatus(testsRun);
164 if (Tests.endUnit != null) {
165 __testLog__ = document.createElement('div');
166 try {
167 Tests.endUnit.apply(Tests, setup_args);
168 if (__testLog__.childNodes.length > 0)
169 log.appendChild(__testLog__);
170 } catch(e) {
171 testFailed("endUnit", e.name, formatError(e));
172 log.appendChild(__testLog__);
173 }
174 }
175 notifyFinishedToHarness(allTestsSuccessful, "finished tests");
176 }
177
178 function doTestNotify(name) {
179 //try {
180 // var xhr = new XMLHttpRequest();
181 // xhr.open("GET", "http://localhost:8888/"+name, true);
182 // xhr.send(null);
183 //} catch(e) {}
184 }
185
186 function testFailed(assertName, name) {
187 var d = document.createElement('div');
188 var h = document.createElement('h3');
189 var d1 = document.createElement("span");
190 h.appendChild(d1);
191 d1.appendChild(document.createTextNode("FAIL: "));
192 d1.style.color = "red";
193 h.appendChild(document.createTextNode(
194 name==null ? assertName : name + " (in " + assertName + ")"));
195 d.appendChild(h);
196 var args = []
197 for (var i=2; i<arguments.length; i++) {
198 var a = arguments[i];
199 var p = document.createElement('p');
200 p.style.whiteSpace = 'pre';
201 p.textContent = (a == null) ? "null" :
202 (typeof a == 'boolean' || typeof a == 'string') ? a : Object .toSource(a);
203 args.push(p.textContent);
204 d.appendChild(p);
205 }
206 __testLog__.appendChild(d);
207 __testSuccess__ = false;
208 doTestNotify([assertName, name].concat(args).join("--"));
209 }
210
211 function testPassed(assertName, name) {
212 var d = document.createElement('div');
213 var h = document.createElement('h3');
214 var d1 = document.createElement("span");
215 h.appendChild(d1);
216 d1.appendChild(document.createTextNode("PASS: "));
217 d1.style.color = "green";
218 h.appendChild(document.createTextNode(
219 name==null ? assertName : name + " (in " + assertName + ")"));
220 d.appendChild(h);
221 var args = []
222 for (var i=2; i<arguments.length; i++) {
223 var a = arguments[i];
224 var p = document.createElement('p');
225 p.style.whiteSpace = 'pre';
226 p.textContent = (a == null) ? "null" :
227 (typeof a == 'boolean' || typeof a == 'string') ? a : Object .toSource(a);
228 args.push(p.textContent);
229 d.appendChild(p);
230 }
231 __testLog__.appendChild(d);
232 doTestNotify([assertName, name].concat(args).join("--"));
233 }
234
235 function checkTestSuccess() {
236 return __testFailCount__ == 0;
237 }
238
239 window.addEventListener('load', function(){
240 for (var i=0; i<__backlog__.length; i++)
241 log(__backlog__[i]);
242 }, false);
243
244 function log(msg) {
245 var p = document.createElement('p');
246 var a = [];
247 for (var i=0; i<arguments.length; i++)
248 a.push(arguments[i]);
249 p.textContent = a.join(", ");
250 if (!__testLog__) {
251 if (document.body)
252 document.body.appendChild(p);
253 else
254 __backlog__.push(msg);
255 } else {
256 __testLog__.appendChild(p);
257 }
258 }
259
260 function printTestStatus(testsRun) {
261 var status = document.getElementById('test-status');
262 if (testsRun) {
263 status.className = checkTestSuccess() ? 'ok' : 'fail';
264 status.textContent = checkTestSuccess() ? "PASS" : "FAIL";
265 } else {
266 status.className = 'fail';
267 status.textContent = "NO TESTS FOUND";
268 }
269 }
270
271 function assertFail(name, f) {
272 if (f == null) { f = name; name = null; }
273 var r = false;
274 try { f(); } catch(e) { r=true; }
275 if (!r) {
276 testFailed("assertFail", name, f);
277 return false;
278 } else {
279 testPassed("assertFail", name, f);
280 return true;
281 }
282 }
283
284 function assertOk(name, f) {
285 if (f == null) { f = name; name = null; }
286 var r = false;
287 var err;
288 try { f(); r=true; } catch(e) { err = e; }
289 if (!r) {
290 testFailed("assertOk", name, f, err.toString());
291 return false;
292 } else {
293 testPassed("assertOk", name, f);
294 return true;
295 }
296 }
297
298 function assert(name, v) {
299 if (v == null) { v = name; name = null; }
300 if (!v) {
301 testFailed("assert", name, v);
302 return false;
303 } else {
304 testPassed("assert", name, v);
305 return true;
306 }
307 }
308
309 function assertProperty(name, v, p) {
310 if (p == null) { p = v; v = name; name = p; }
311 if (v[p] == null) {
312 testFailed("assertProperty", name);
313 return false;
314 } else {
315 testPassed("assertProperty", name);
316 return true;
317 }
318 }
319
320 function compare(a,b) {
321 if (typeof a == 'number' && typeof b == 'number') {
322 return a == b;
323 } else {
324 return Object.toSource(a) == Object.toSource(b);
325 }
326 }
327
328 function assertEquals(name, v, p) {
329 if (p == null) { p = v; v = name; name = null; }
330 if (!compare(v, p)) {
331 testFailed("assertEquals", name, v, p);
332 return false;
333 } else {
334 testPassed("assertEquals", name, v, p);
335 return true;
336 }
337 }
338
339 function assertArrayEquals(name, v, p) {
340 if (p == null) { p = v; v = name; name = null; }
341 if (!v) {
342 testFailed("assertArrayEquals: first array undefined", name, v, p);
343 return false;
344 }
345 if (!p) {
346 testFailed("assertArrayEquals: second array undefined", name, v, p);
347 return false;
348 }
349 if (v.length != p.length) {
350 testFailed("assertArrayEquals", name, v, p);
351 return false;
352 }
353 for (var ii = 0; ii < v.length; ++ii) {
354 if (v[ii] != p[ii]) {
355 testFailed("assertArrayEquals", name, v, p);
356 return false;
357 }
358 }
359 testPassed("assertArrayEquals", name, v, p);
360 return true;
361 }
362
363 function assertNotEquals(name, v, p) {
364 if (p == null) { p = v; v = name; name = null; }
365 if (compare(v, p)) {
366 testFailed("assertNotEquals", name, v, p)
367 return false;
368 } else {
369 testPassed("assertNotEquals", name, v, p)
370 return true;
371 }
372 }
373
374 function time(elementId, f) {
375 var s = document.getElementById(elementId);
376 var t0 = new Date().getTime();
377 f();
378 var t1 = new Date().getTime();
379 s.textContent = 'Elapsed: '+(t1-t0)+' ms';
380 }
381
382 function randomFloat () {
383 // note that in fuzz-testing, this can used as the size of a buffer to alloc ate.
384 // so it shouldn't return astronomic values. The maximum value 10000000 is a lready quite big.
385 var fac = 1.0;
386 var r = Math.random();
387 if (r < 0.25)
388 fac = 10;
389 else if (r < 0.4)
390 fac = 100;
391 else if (r < 0.5)
392 fac = 1000;
393 else if (r < 0.6)
394 fac = 100000;
395 else if (r < 0.7)
396 fac = 10000000;
397 else if (r < 0.8)
398 fac = NaN;
399 return -0.5*fac + Math.random() * fac;
400 }
401 function randomFloatFromRange(lo, hi) {
402 var r = Math.random();
403 if (r < 0.05)
404 return lo;
405 else if (r > 0.95)
406 return hi;
407 else
408 return lo + Math.random()*(hi-lo);
409 }
410 function randomInt (sz) {
411 if (sz != null)
412 return Math.floor(Math.random()*sz);
413 else
414 return Math.floor(randomFloat());
415 }
416 function randomIntFromRange(lo, hi) {
417 return Math.floor(randomFloatFromRange(lo, hi));
418 }
419 function randomLength () {
420 var l = Math.floor(Math.random() * 256);
421 if (Math.random < 0.5) l = l / 10;
422 if (Math.random < 0.3) l = l / 10;
423 return l;
424 }
425 function randomSmallIntArray () {
426 var l = randomLength();
427 var s = new Array(l);
428 for (var i=0; i<l; i++)
429 s[i] = Math.floor(Math.random() * 256)-1;
430 return s;
431 }
432 function randomFloatArray () {
433 var l = randomLength();
434 var s = new Array(l);
435 for (var i=0; i<l; i++)
436 s[i] = randomFloat();
437 return s;
438 }
439 function randomIntArray () {
440 var l = randomLength();
441 var s = new Array(l);
442 for (var i=0; i<l; i++)
443 s[i] = randomFloat();
444 return s;
445 }
446 function randomMixedArray () {
447 var l = randomLength();
448 var s = new Array(l);
449 for (var i=0; i<l; i++)
450 s[i] = randomNonArray();
451 return s;
452 }
453 function randomArray () {
454 var r = Math.random();
455 if (r < 0.3)
456 return randomFloatArray();
457 else if (r < 0.6)
458 return randomIntArray();
459 else if (r < 0.8)
460 return randomSmallIntArray();
461 else
462 return randomMixedArray();
463 }
464 function randomString () {
465 return String.fromCharCode.apply(String, randomSmallIntArray());
466 }
467 function randomGLConstant () {
468 return GLConstants[Math.floor(Math.random() * GLConstants.length)];
469 }
470
471 function randomNonArray() {
472 var r = Math.random();
473 if (r < 0.25) {
474 return randomFloat();
475 } else if (r < 0.6) {
476 return randomInt();
477 } else if (r < 0.7) {
478 return (r < 0.65);
479 } else if (r < 0.87) {
480 return randomString();
481 } else if (r < 0.98) {
482 return randomGLConstant();
483 } else {
484 return null;
485 }
486 }
487
488 function generateRandomArg(pos, count) {
489 if (pos == 0 && Math.random() < 0.5)
490 return randomGLConstant();
491 if (pos == count-1 && Math.random() < 0.25)
492 if (Math.random() < 0.5)
493 return randomString();
494 else
495 return randomArray();
496 var r = Math.random();
497 if (r < 0.25) {
498 return randomFloat();
499 } else if (r < 0.6) {
500 return randomInt();
501 } else if (r < 0.7) {
502 return (r < 0.65);
503 } else if (r < 0.77) {
504 return randomString();
505 } else if (r < 0.84) {
506 return randomArray();
507 } else if (r < 0.98) {
508 return randomGLConstant();
509 } else {
510 return null;
511 }
512 }
513
514
515 function generateRandomArgs(count) {
516 var arr = new Array(count);
517 for (var i=0; i<count; i++)
518 arr[i] = generateRandomArg(i, count);
519 return arr;
520 }
521
522 // qc (arg1gen, arg2gen, ..., predicate)
523 // qc (randomString, randomInt, randomInt, function(s,i,j){ s.substring(i,j) })
524 function qc() {
525 }
526
527 GLConstants = [
528 1,
529 0x00000100,
530 0x00000400,
531 0x00004000,
532 0x0000,
533 0x0001,
534 0x0002,
535 0x0003,
536 0x0004,
537 0x0005,
538 0x0006,
539 0,
540 1,
541 0x0300,
542 0x0301,
543 0x0302,
544 0x0303,
545 0x0304,
546 0x0305,
547 0x0306,
548 0x0307,
549 0x0308,
550 0x8006,
551 0x8009,
552 0x8009,
553 0x883D,
554 0x800A,
555 0x800B,
556 0x80C8,
557 0x80C9,
558 0x80CA,
559 0x80CB,
560 0x8001,
561 0x8002,
562 0x8003,
563 0x8004,
564 0x8005,
565 0x8892,
566 0x8893,
567 0x8894,
568 0x8895,
569 0x88E0,
570 0x88E4,
571 0x88E8,
572 0x8764,
573 0x8765,
574 0x8626,
575 0x0404,
576 0x0405,
577 0x0408,
578 0x0DE1,
579 0x0B44,
580 0x0BE2,
581 0x0BD0,
582 0x0B90,
583 0x0B71,
584 0x0C11,
585 0x8037,
586 0x809E,
587 0x80A0,
588 0,
589 0x0500,
590 0x0501,
591 0x0502,
592 0x0505,
593 0x0900,
594 0x0901,
595 0x0B21,
596 0x846D,
597 0x846E,
598 0x0B45,
599 0x0B46,
600 0x0B70,
601 0x0B72,
602 0x0B73,
603 0x0B74,
604 0x0B91,
605 0x0B92,
606 0x0B94,
607 0x0B95,
608 0x0B96,
609 0x0B97,
610 0x0B93,
611 0x0B98,
612 0x8800,
613 0x8801,
614 0x8802,
615 0x8803,
616 0x8CA3,
617 0x8CA4,
618 0x8CA5,
619 0x0BA2,
620 0x0C10,
621 0x0C22,
622 0x0C23,
623 0x0CF5,
624 0x0D05,
625 0x0D33,
626 0x0D3A,
627 0x0D50,
628 0x0D52,
629 0x0D53,
630 0x0D54,
631 0x0D55,
632 0x0D56,
633 0x0D57,
634 0x2A00,
635 0x8038,
636 0x8069,
637 0x80A8,
638 0x80A9,
639 0x80AA,
640 0x80AB,
641 0x86A2,
642 0x86A3,
643 0x1100,
644 0x1101,
645 0x1102,
646 0x8192,
647 0x1400,
648 0x1401,
649 0x1402,
650 0x1403,
651 0x1404,
652 0x1405,
653 0x1406,
654 0x140C,
655 0x1902,
656 0x1906,
657 0x1907,
658 0x1908,
659 0x1909,
660 0x190A,
661 0x8033,
662 0x8034,
663 0x8363,
664 0x8B30,
665 0x8B31,
666 0x8869,
667 0x8DFB,
668 0x8DFC,
669 0x8B4D,
670 0x8B4C,
671 0x8872,
672 0x8DFD,
673 0x8B4F,
674 0x8B80,
675 0x8B82,
676 0x8B83,
677 0x8B85,
678 0x8B86,
679 0x8B87,
680 0x8B89,
681 0x8B8A,
682 0x8B8C,
683 0x8B8D,
684 0x0200,
685 0x0201,
686 0x0202,
687 0x0203,
688 0x0204,
689 0x0205,
690 0x0206,
691 0x0207,
692 0x1E00,
693 0x1E01,
694 0x1E02,
695 0x1E03,
696 0x150A,
697 0x8507,
698 0x8508,
699 0x1F00,
700 0x1F01,
701 0x1F02,
702 0x1F03,
703 0x2600,
704 0x2601,
705 0x2700,
706 0x2701,
707 0x2702,
708 0x2703,
709 0x2800,
710 0x2801,
711 0x2802,
712 0x2803,
713 0x1702,
714 0x8513,
715 0x8514,
716 0x8515,
717 0x8516,
718 0x8517,
719 0x8518,
720 0x8519,
721 0x851A,
722 0x851C,
723 0x84C0,
724 0x84C1,
725 0x84C2,
726 0x84C3,
727 0x84C4,
728 0x84C5,
729 0x84C6,
730 0x84C7,
731 0x84C8,
732 0x84C9,
733 0x84CA,
734 0x84CB,
735 0x84CC,
736 0x84CD,
737 0x84CE,
738 0x84CF,
739 0x84D0,
740 0x84D1,
741 0x84D2,
742 0x84D3,
743 0x84D4,
744 0x84D5,
745 0x84D6,
746 0x84D7,
747 0x84D8,
748 0x84D9,
749 0x84DA,
750 0x84DB,
751 0x84DC,
752 0x84DD,
753 0x84DE,
754 0x84DF,
755 0x84E0,
756 0x2901,
757 0x812F,
758 0x8370,
759 0x8B50,
760 0x8B51,
761 0x8B52,
762 0x8B53,
763 0x8B54,
764 0x8B55,
765 0x8B56,
766 0x8B57,
767 0x8B58,
768 0x8B59,
769 0x8B5A,
770 0x8B5B,
771 0x8B5C,
772 0x8B5E,
773 0x8B60,
774 0x8622,
775 0x8623,
776 0x8624,
777 0x8625,
778 0x886A,
779 0x8645,
780 0x889F,
781 0x8B9A,
782 0x8B9B,
783 0x8B81,
784 0x8B84,
785 0x8B88,
786 0x8DFA,
787 0x8DF8,
788 0x8DF9,
789 0x8DF0,
790 0x8DF1,
791 0x8DF2,
792 0x8DF3,
793 0x8DF4,
794 0x8DF5,
795 0x8D40,
796 0x8D41,
797 0x8056,
798 0x8057,
799 0x8D62,
800 0x81A5,
801 0x1901,
802 0x8D48,
803 0x8D42,
804 0x8D43,
805 0x8D44,
806 0x8D50,
807 0x8D51,
808 0x8D52,
809 0x8D53,
810 0x8D54,
811 0x8D55,
812 0x8CD0,
813 0x8CD1,
814 0x8CD2,
815 0x8CD3,
816 0x8CE0,
817 0x8D00,
818 0x8D20,
819 0,
820 0x8CD5,
821 0x8CD6,
822 0x8CD7,
823 0x8CD9,
824 0x8CDD,
825 0x8CA6,
826 0x8CA7,
827 0x84E8,
828 0x0506,
829 0x809D
830 ];
831
832 function reportTestResultsToHarness(success, msg) {
833 if (window.parent.webglTestHarness) {
834 window.parent.webglTestHarness.reportResults(success, msg);
835 }
836 }
837
838 function notifyFinishedToHarness() {
839 if (window.parent.webglTestHarness) {
840 window.parent.webglTestHarness.notifyFinished();
841 }
842 }
843
844 function initTests() {
845 if (Tests.message != null) {
846 var h = document.getElementById('test-message');
847 if (h == null) {
848 h = document.createElement('p');
849 h.id = 'test-message';
850 document.body.insertBefore(h, document.body.firstChild);
851 }
852 h.textContent = Tests.message;
853 }
854 if (Tests.autorun) {
855 runTests();
856 } else {
857 var h = document.getElementById('test-run');
858 if (h == null) {
859 h = document.createElement('input');
860 h.type = 'submit';
861 h.value = "Run tests";
862 h.addEventListener('click', function(ev){
863 runTests();
864 ev.preventDefault();
865 }, false);
866 h.id = 'test-run';
867 document.body.insertBefore(h, document.body.firstChild);
868 }
869 h.textContent = Tests.message;
870 }
871
872 }
873
874 window.addEventListener('load', function(){
875 // let the browser hopefully finish updating the gl canvas surfaces if we are given a delay
876 if (Tests.delay)
877 setTimeout(initTests, Tests.delay);
878 else
879 initTests()
880 }, false);
881
OLDNEW
« no previous file with comments | « conformance/more/unit.css ('k') | conformance/more/util.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698