// Quick and dirty testrunner hack, it's ugly but it works (function() { function TestRunner() { var suites = [], suiteUrls = [], actions = {}; var started, currentTest, testUrls = [], globalStats = {}; var coverObjects = []; function get(id) { return document.getElementById(id); } function addClass(elm, cls) { if (cls && !hasClass(elm, cls)) { elm.className += elm.className ? ' ' + cls : cls; } } function removeClass(elm, cls) { if (hasClass(elm, cls)) { elm.className = elm.className.replace(new RegExp("(^|\\s+)" + cls + "(\\s+|$)", "g"), ' '); } } function hasClass(elm, cls) { return elm && cls && (' ' + elm.className + ' ').indexOf(' ' + cls + ' ') !== -1; } function init() { function loadNext() { var url = suiteUrls.shift(); if (url) { loadSuite(url, function(json, url) { json.baseURL = url.substring(0, url.lastIndexOf('/')); if (json.baseURL) { json.baseURL += '/'; } suites.push(json); loadNext(); }); } else { render(); reflow(); hashToStates(); // WP wpTests(); // Auto-start started = true; start(); } } loadNext(); } function getHashData() { var pos, hash = location.hash, items, item, data = {}, i; pos = hash.indexOf('!'); if (pos > 0) { items = hash.substring(pos + 1).split('&'); for (i = 0; i < items.length; i++) { item = items[i].split('='); data[item[0]] = item[1]; } } return data; } function setHashData(data) { var name, hashItems = []; for (name in data) { if (data[name] !== null) { hashItems.push(name + '=' + data[name]); } } location.hash = '!' + hashItems.join('&'); } function statesToHash() { var i, checkboxes, states = [], hasDisabled; checkboxes = get('tests').getElementsByTagName("input"); for (i = 0; i < checkboxes.length; i++) { states[i] = checkboxes[i].checked ? '1' : '0'; hasDisabled = hasDisabled || states[i] === '0'; } setHashData({ min: get('min').checked, jsrobot: get('jsrobot').checked, tests: hasDisabled ? states.join('') : null }); } function hashToStates() { var i, data = getHashData(location.hash), checkboxes; if (typeof(data.min) != "undefined") { get('min').checked = data.min === "true"; } if (typeof(data.jsrobot) != "undefined") { get('jsrobot').checked = data.jsrobot === "true"; } if (typeof(data.tests) != "undefined") { checkboxes = get('tests').getElementsByTagName("input"); for (i = 0; i < checkboxes.length; i++) { checkboxes[i].checked = data.tests.substr(i, 1) === '1'; } } } function addAction(name, action) { actions[name] = action; } function toggleCheckboxes(elm, state) { var checkboxes = (elm || get('tests')).getElementsByTagName("input"), i; for (i = 0; i < checkboxes.length; i++) { checkboxes[i].checked = state; } } function start() { var si, ti, tests; testUrls = []; for (si = 0; si < suites.length; si++) { tests = suites[si].tests; for (ti = 0; ti < tests.length; ti++) { if (get('c' + si + '-' + ti).checked) { testUrls.push(tests[ti]); } removeClass(get('t' + si + '-' + ti), "passed"); removeClass(get('t' + si + '-' + ti), "failed"); } } globalStats = { total: 0, failed: 0 }; // Start first test currentTest = testUrls.shift(); if (currentTest) { get('testview').src = currentTest.url + "?min=" + get('min').checked; } get('coverage').disabled = true; } function stop() { started = false; get('testview').src = 'javascript:""'; get('start').innerHTML = 'start'; if (coverObjects.length) { get('coverage').disabled = false; } } addAction("start", function(elm) { started = !started; if (started) { start(); } else { stop(); reset(); } elm.innerHTML = started ? 'stop' : 'start'; }); addAction("select-none", function(elm) { toggleCheckboxes(get('s' + elm.getAttribute("data-suite")), false); reset(); }); addAction("select-all", function(elm) { toggleCheckboxes(get('s' + elm.getAttribute("data-suite")), true); reset(); }); addAction("select-failed", function(elm) { toggleCheckboxes(get('s' + elm.getAttribute("data-suite")), false); reset(); var targetIndex = elm.getAttribute("data-suite"); for (si = 0; si < suites.length; si++) { if (targetIndex !== null && targetIndex != si) { continue; } tests = suites[si].tests; for (ti = 0; ti < tests.length; ti++) { if (tests[ti].failed) { get('c' + si + '-' + ti).checked = true; } } } }); // WP function wpTests( element ) { var si, ti, tests, targetIndex = null; if ( element ) { targetIndex = element.getAttribute("data-suite"); } toggleCheckboxes( get( 's' + targetIndex ), false ); reset(); for ( si = 0; si < suites.length; si++ ) { if ( targetIndex !== null && targetIndex != si ) { continue; } tests = suites[si].tests; if ( si === 0 || si === 2 || si === 3 || si === 4 ) { for ( ti in tests ) { get( 'c' + si + '-' + ti ).checked = true; } } else if ( si === 1 ) { for ( ti in tests ) { if ( ti !== '1' ) { // No jQuery integration get( 'c' + si + '-' + ti ).checked = true; } } } else if ( si === 5 ) { for ( ti in tests ) { // Only the media and paste plugins if ( ti === '0' || ti === '2' ) { get( 'c' + si + '-' + ti ).checked = true; } } } } } // WP addAction("select-wordpress", wpTests ); addAction("coverage", function(elm) { if (elm.disabled) { return; } showCoverage(); }); function render() { var si, ti, tests, html = ''; var div = document.createElement('div'); addClass(div, "runner"); html += '
'; html += ''; // coverage html += ''; html += '