var asyncTimeout = 2 // seconds for async timeout var fixture; var Test; var stats = { all: 0, bad: 0 }; var queue = []; var blocking = false; var timeout; 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 stop() { blocking = true; timeout = setTimeout(start, asyncTimeout * 1000); } function start() { if(timeout) clearTimeout(timeout); blocking = false; process(); } function runTest(tests) { var startTime = new Date(); fixture = document.getElementById('main').innerHTML; tests(); synchronize(function() { var runTime = new Date() - startTime; var result = document.createElement("div"); result.innerHTML = ['

Tests completed in ', runTime, ' milliseconds.
', stats.bad, ' tests of ', stats.all, ' failed.

'].join(''); document.getElementsByTagName("body")[0].appendChild(result); $("