X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=build%2Ftest%2Fjs%2Ftest.js;h=ec6f9c07e09c7cc776add61c0b2f8410a441f268;hb=f6ecc6a95c4046f53d1f0d75af213305c2bd7ea7;hp=82469f720f066e0bfb28d93a65175bf96b999ab1;hpb=97ea47492fe13ddb1108045c244d5af6570ace92;p=jquery.git diff --git a/build/test/js/test.js b/build/test/js/test.js index 82469f7..ec6f9c0 100644 --- a/build/test/js/test.js +++ b/build/test/js/test.js @@ -1,159 +1,121 @@ -var queue = []; -var blocking = false; - -function reset() { - synchronize(function() { - blocking = true; - $.get('index.html', function(content) { - var div = $(document.createElement('div')).html(content) - // search for main div - .find('[@id=main]').html(); - $('#main').html(div); - blocking = false; - process(); - }); - }); -} - -function synchronize(callback) { - queue[queue.length] = callback; - if(!blocking) { - process(); - } -} - -function process() { - while(queue.length && !blocking) { - var call = queue[0]; - queue = queue.slice(1); - call(); - } -} - -function runTests(files) { +function runTest(file) { var startTime = new Date(); - for( var i=0; i < files.length; i++) { - runTest( files, i ); - reset(); - } - synchronize(function() { + var Test; + var stats = { + all: 0, + bad: 0 + }; + var fixture = document.getElementById('main').innerHTML; + $.get(file,function(js) { + js = js.replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&"); + eval(js); var runTime = new Date() - startTime; - $('body').append('
Tests completed in ' + runTime + ' milliseconds.'); + var result = document.createElement("div"); + result.innerHTML = 'Tests completed in ' + runTime + ' milliseconds.
' + + stats.bad + ' tests of ' + stats.all + ' failed.'; + document.getElementsByTagName("body")[0].appendChild(result); }); -} - -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) { - Test.push( [ false, "Died on test #" + (Test.length+1) + ": " + e ] ); + function test(name, callback) { + Test = []; + try { + callback(); + } catch(e) { + if(typeof console != "undefined") { + console.error("Test " + name + " died, exception and test follows"); + console.error(e); + console.warn(callback.toString()); } + Test.push( [ false, "Died on test #" + (Test.length+1) + ": " + e ] ); + } + reset(); + + var good = 0, bad = 0; + var ol = document.createElement("ol"); - 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 ); + + stats.all++; + if ( !Test[i][0] ) { + state = "fail"; + bad++; + stats.bad++; + } else good++; + } - 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 li = document.createElement("li"); + li.className = state; - if ( !Test[i][0] ) { - state = "fail"; - bad++; - } else good++; - } + var b = document.createElement("b"); + b.innerHTML = name + " (" + 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 ); - var li = document.createElement("li"); - li.className = state; + document.getElementById("tests").appendChild( li ); + } - 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 ); + function reset() { + document.getElementById('main').innerHTML = fixture; + } - li.appendChild( ol ); + /** + * Asserts true. + * @example ok( $("a").size() > 5, "There must be at least 5 anchors" ); + */ + function ok(a, msg) { + Test.push( [ !!a, msg ] ); + } + + /** + * Asserts that two arrays are the same + */ + 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 ] ); + } - document.getElementById("tests").appendChild( li ); + /** + * Returns an array of elements with the given IDs, eg. + * @example q("main", "foo", "bar") + * @result [
, , ] + */ + function q() { + var r = []; + for ( var i = 0; i < arguments.length; i++ ) + r.push( document.getElementById( arguments[i] ) ); + return r; + } - Test = []; - blocking = false; - process(); - }); - }); -} - -var Test = []; - -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 + ")"); -} - -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); + /** + * Asserts that a select matches the given IDs + * @example t("Check for something", "//[a]", ["foo", "baar"]); + * @result returns true if "//[a]" return two elements with the IDs 'foo' and 'baar' + */ + 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 + ")"); + } } - -//plan({noPlan: true});