// Automatically add doNextStepButton to document for manual tests. if (!window.testRunner) { setTimeout(function () { if (window.doNextStepButtonDisabled) return; doNextStepButton = document.body.insertBefore(document.createElement("button"), document.body.firstChild); doNextStepButton.onclick = doNextStep; doNextStepButton.innerText = "doNextStep button for manual testing. Use keyboard to select button and press (TAB, then SPACE)."; }, 0); } function runOnKeyPress(fn) { function keypressHandler() { document.removeEventListener('keypress', keypressHandler, false); fn(); } document.addEventListener('keypress', keypressHandler, false); if (window.testRunner) eventSender.keyDown(" ", []); } function doNextStep(args) { args = args || {}; if (!window.testRunner && args.withUserGesture) return; // Wait for human to press doNextStep button. if (typeof(currentStep) == "undefined") currentStep = 0; setTimeout(function () { var thisStep = currentStep++; if (thisStep < todo.length) if (args.withUserGesture) runOnKeyPress(todo[thisStep]); else todo[thisStep](); else if (thisStep == todo.length) setTimeout(function () { finishJSTest(); }, 0); // Deferred so that excessive doNextStep calls will be observed. else testFailed("doNextStep called too many times."); }, 0); } function doNextStepWithUserGesture() { doNextStep({withUserGesture: true}); } function eventExpected(eventHandlerName, message, expectedCalls, targetHanderNode) { targetHanderNode[eventHandlerName] = function () { switch (expectedCalls--) { case 0: testFailed(eventHandlerName + " received after: " + message); finishJSTest(); break; case 1: doNextStep(); default: testPassed(eventHandlerName + " received after: " + message); }; }; }; function expectOnlyChangeEvent(message, targetDocument) { debug(" " + message); targetDocument = targetDocument !== undefined ? targetDocument : document; eventExpected("onpointerlockchange", message, 1, targetDocument); eventExpected("onpointerlockerror", message, 0, targetDocument); }; function expectOnlyErrorEvent(message, targetDocument) { debug(" " + message); targetDocument = targetDocument !== undefined ? targetDocument : document; eventExpected("onpointerlockchange", message, 0, targetDocument); eventExpected("onpointerlockerror", message, 1, targetDocument); }; function expectNoEvents(message, targetDocument) { debug(" " + message); targetDocument = targetDocument !== undefined ? targetDocument : document; eventExpected("onpointerlockchange", message, 0, targetDocument); eventExpected("onpointerlockerror", message, 0, targetDocument); };