X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=build%2Ftest%2Fjs%2Ftest.js;h=d478b63678da7a7f96eda6150975f7ce25ff1e25;hb=acf102237f9e26c1b864bf6e432f65040b477851;hp=e4da77b36294da255c1c216bdd6bdf4360e49121;hpb=7448c61ee2199f6f7002e33e533cebc42b000c89;p=jquery.git diff --git a/build/test/js/test.js b/build/test/js/test.js index e4da77b..d478b63 100644 --- a/build/test/js/test.js +++ b/build/test/js/test.js @@ -1,115 +1,143 @@ -function runTests(files) { - runTest( files, 0 ); -} - -function runTest( files, num ) { - $.get(files[num],function(js){ - js = js.replace(/</g, "<").replace(/>/g, ">"); - - try { - eval(js); - } catch(e) { - Test.push( [ false, "Died on test #" + Test.length + ": " + 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 ); +var queue = []; +var blocking = false; - 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 = []; - if ( ++num < files.length ) runTest( files, num ); +function reset(fixture) { + synchronize(function() { + document.getElementById('main').innerHTML = fixture; }); } -var Test = []; - -function ok(a, msg) { - Test.push( [ !!a, msg ] ); +function synchronize(callback) { + queue[queue.length] = callback; + if(!blocking) { + process(); + } } -function cmpOK( a, c, b, msg ) { - var res; - eval( "res = (a " + c + " b)" ); - Test.push( [ res, msg ] ); +function process() { + while(queue.length && !blocking) { + var call = queue[0]; + queue = queue.slice(1); + call(); + } } -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 runTests(files) { + 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.'); + }); } -function q() { - var r = []; - - for ( var i = 0; i < arguments.length; i++ ) - r.push( document.getElementById( arguments[i] ) ); - - return r; +function runTest( files, num ) { + synchronize(function() { + blocking = true; + $.get(files[num],function(js) { + evaluateTest(files, num, js); + }); + }); } -function t(a,b,c) { - var f = jQuery.find(b); +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 ] ); + } - var s = ""; - for ( var i = 0; i < f.length; i++ ) - s += (s && ",") + '"' + f[i].id + '"'; + var good = 0, bad = 0; + var ol = document.createElement("ol"); - isSet(f, q.apply(q,c), a + " (" + b + ")"); -} + 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 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); -} + if ( !Test[i][0] ) { + state = "fail"; + bad++; + } else good++; + } -//plan({noPlan: true}); + 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 ); + + 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