From ded14024983f328620d68d2a51d059d883250ccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Zaefferer?= Date: Tue, 5 Sep 2006 19:50:13 +0000 Subject: [PATCH] Refactored the testsuite code with the hope in mind to make the test suite run faster --- build/test/js/test.js | 212 +++++++++++++++++++----------------------- 1 file changed, 98 insertions(+), 114 deletions(-) diff --git a/build/test/js/test.js b/build/test/js/test.js index 3f5030e9..98c5791b 100644 --- a/build/test/js/test.js +++ b/build/test/js/test.js @@ -1,13 +1,10 @@ var queue = []; var blocking = false; -var fixture; -function reset() { - if(fixture) { - $("#main").html(fixture); - } else { - fixture = $("#main").html(); - } +function reset(fixture) { + synchronize(function() { + document.getElementById('main').innerHTML = fixture; + }); } function synchronize(callback) { @@ -26,14 +23,15 @@ function process() { } function runTests(files) { - var fixture = null; - reset(); + var fixture = document.getElementById('main').innerHTML; var startTime = new Date(); for( var i=0; i < files.length; i++) { runTest( files, i ); + reset(fixture); } synchronize(function() { var runTime = new Date() - startTime; + // lets use jQuery for this, its not important anyway $('body').append('
Tests completed in ' + runTime + ' milliseconds.'); }); } @@ -41,118 +39,104 @@ function runTests(files) { function runTest( files, num ) { synchronize(function() { blocking = true; - $.get(files[num],function(js){ - js = js.replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&"); - - try { - eval(js); - } catch(e) { - if(typeof console != "undefined") - console.error(e); - Test.push( [ false, "Died on test #" + (Test.length+1) + ": " + e ] ); - } - - var good = 0, bad = 0; - var ol = document.createElement("ol"); - - var li = "", state = "pass"; - for ( var i = 0; i < Test.length; i++ ) { - var li = document.createElement("li"); - li.className = Test[i][0] ? "pass" : "fail"; - li.innerHTML = Test[i][1]; - ol.appendChild( li ); - - if ( !Test[i][0] ) { - state = "fail"; - bad++; - } else good++; - } - - var li = document.createElement("li"); - li.className = state; - - var b = document.createElement("b"); - b.innerHTML = files[num] + " (" + bad + ", " + good + ", " + Test.length + ")"; - b.onclick = function(){ - var n = this.nextSibling; - if ( jQuery.css( n, "display" ) == "none" ) - n.style.display = "block"; - else - n.style.display = "none"; - }; - li.appendChild( b ); - - li.appendChild( ol ); - - document.getElementById("tests").appendChild( li ); - - Test = []; - reset(); - blocking = false; - process(); + $.get(files[num],function(js) { + evaluateTest(files, num, js); }); }); } -var Test = []; +function evaluateTest(files, num, js) { + var Test = []; + js = js.replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&"); + + try { + eval(js); + } catch(e) { + if(typeof console != "undefined") + console.error(e); + console.debug(js); + Test.push( [ false, "Died on test #" + (Test.length+1) + ": " + e ] ); + } -function ok(a, msg) { - Test.push( [ !!a, msg ] ); -} + var good = 0, bad = 0; + var ol = document.createElement("ol"); -function cmpOK( a, c, b, msg ) { - var res; - eval( "res = (a " + c + " b)" ); - Test.push( [ res, msg ] ); -} + var li = "", state = "pass"; + for ( var i = 0; i < Test.length; i++ ) { + var li = document.createElement("li"); + li.className = Test[i][0] ? "pass" : "fail"; + li.innerHTML = Test[i][1]; + ol.appendChild( li ); -function isSet(a, b, msg) { - var ret = true; + if ( !Test[i][0] ) { + state = "fail"; + bad++; + } else good++; + } - if ( a && b && a.length == b.length ) { - for ( var i in a ) - if ( a[i] != b[i] ) - ret = false; - } else - ret = false; - - if ( !ret && console ) - console.log( msg, a, b ); - - Test.push( [ ret, msg ] ); -} - -function q() { - var r = []; - - for ( var i = 0; i < arguments.length; i++ ) - r.push( document.getElementById( arguments[i] ) ); - - return r; -} - -function t(a,b,c) { - var f = jQuery.find(b); - - var s = ""; - for ( var i = 0; i < f.length; i++ ) - s += (s && ",") + '"' + f[i].id + '"'; - - isSet(f, q.apply(q,c), a + " (" + b + ")"); -} - -function o(a) { var li = document.createElement("li"); - li.innerHTML = a; - if ( a.indexOf("#") == 0 ) - li.className = "comment"; - else if ( a.indexOf("TODO") >= 0 ) - li.className = "todo"; - else if ( a.indexOf("not ok") == 0 ) - li.classname = "fail"; - else - li.className = "pass"; - document.getElementById("test").appendChild(li); -} + li.className = state; -//plan({noPlan: true}); + var b = document.createElement("b"); + b.innerHTML = files[num] + " (" + bad + ", " + good + ", " + Test.length + ")"; + b.onclick = function(){ + var n = this.nextSibling; + if ( jQuery.css( n, "display" ) == "none" ) + n.style.display = "block"; + else + n.style.display = "none"; + }; + li.appendChild( b ); + + li.appendChild( ol ); + + document.getElementById("tests").appendChild( li ); + + blocking = false; + process(); + + function ok(a, msg) { + Test.push( [ !!a, msg ] ); + } + + function cmpOK( a, c, b, msg ) { + var res; + eval( "res = (a " + c + " b)" ); + Test.push( [ res, msg ] ); + } + + function isSet(a, b, msg) { + var ret = true; + + if ( a && b && a.length == b.length ) { + for ( var i in a ) + if ( a[i] != b[i] ) + ret = false; + } else + ret = false; + + if ( !ret && console ) + console.log( msg, a, b ); + + Test.push( [ ret, msg ] ); + } + + function q() { + var r = []; + + for ( var i = 0; i < arguments.length; i++ ) + r.push( document.getElementById( arguments[i] ) ); + + return r; + } + + function t(a,b,c) { + var f = jQuery.find(b); + + var s = ""; + for ( var i = 0; i < f.length; i++ ) + s += (s && ",") + '"' + f[i].id + '"'; + + isSet(f, q.apply(q,c), a + " (" + b + ")"); + } +} \ No newline at end of file