var consoleDiv = null; var printFullTestDetails = true; // This is optionaly switched of by test whose tested values can differ. (see disableFullTestDetailsPrinting()) var runPixelTests; logConsole(); if (window.testRunner) { testRunner.dumpAsText(runPixelTests); testRunner.waitUntilDone(); } function runWithKeyDown(fn) { // FIXME: WKTR does not yet support the keyDown() message. Do a mouseDown here // instead until keyDown support is added. var eventName = !window.testRunner || eventSender.keyDown ? 'keypress' : 'mousedown' function thunk() { document.removeEventListener(eventName, thunk, false); fn(); } document.addEventListener(eventName, thunk, false); if (window.testRunner) { if (eventSender.keyDown) eventSender.keyDown(" ", []); else eventSender.mouseDown(); } } function logConsole() { if (!consoleDiv && document.body) { consoleDiv = document.createElement('div'); document.body.appendChild(consoleDiv); } return consoleDiv; } function testAndEnd(testFuncString) { test(testFuncString, true); } function test(testFuncString, endit) { logResult(eval(testFuncString), "TEST(" + testFuncString + ")"); if (endit) endTest(); } function testExpected(testFuncString, expected, comparison) { try { var observed = eval(testFuncString); } catch (ex) { consoleWrite(ex); return; } if (comparison === undefined) comparison = '=='; var success = false; switch (comparison) { case '<': success = observed < expected; break; case '<=': success = observed <= expected; break; case '>': success = observed > expected; break; case '>=': success = observed >= expected; break; case '!=': success = observed != expected; break; case '==': success = observed == expected; break; } reportExpected(success, testFuncString, comparison, expected, observed) } var testNumber = 0; function reportExpected(success, testFuncString, comparison, expected, observed) { testNumber++; var msg = "Test " + testNumber; if (printFullTestDetails || !success) msg = "EXPECTED (" + testFuncString + " " + comparison + " '" + expected + "')"; if (!success) msg += ", OBSERVED '" + observed + "'"; logResult(success, msg); } function run(testFuncString) { consoleWrite("RUN(" + testFuncString + ")"); try { eval(testFuncString); } catch (ex) { consoleWrite(ex); } } function waitForEventAndEnd(element, eventName, funcString) { waitForEvent(element, eventName, funcString, true) } function waitForEventOnce(element, eventName, func, endit) { waitForEvent(element, eventName, func, endit, true) } function waitForEvent(element, eventName, func, endit, once) { function _eventCallback(event) { if (once) element.removeEventListener(eventName, _eventCallback); consoleWrite("EVENT(" + eventName + ")"); if (func) func(event); if (endit) endTest(); } element.addEventListener(eventName, _eventCallback); } function waitForEventAndTest(element, eventName, testFuncString, endit) { function _eventCallback(event) { logResult(eval(testFuncString), "EVENT(" + eventName + ") TEST(" + testFuncString + ")"); if (endit) endTest(); } element.addEventListener(eventName, _eventCallback); } function waitFor(element, type, silent) { return new Promise(resolve => { element.addEventListener(type, event => { if (!silent) consoleWrite(`EVENT(${event.type})`); resolve(event); }, { once: true }); }); } function waitForEventTestAndEnd(element, eventName, testFuncString) { waitForEventAndTest(element, eventName, testFuncString, true); } var testEnded = false; function endTest() { consoleWrite("END OF TEST"); testEnded = true; if (window.testRunner) testRunner.notifyDone(); } function logResult(success, text) { if (success) consoleWrite(text + " OK"); else consoleWrite(text + " FAIL"); } function consoleWrite(text) { if (testEnded) return; logConsole().innerHTML += text + "
"; }