mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-10-22 18:24:51 +00:00
146 lines
5.3 KiB
JavaScript
146 lines
5.3 KiB
JavaScript
// Check to make sure that a worker can be attached to a toolbox
|
|
// and that the console works.
|
|
|
|
var TAB_URL = EXAMPLE_URL + "doc_WorkerActor.attachThread-tab.html";
|
|
var WORKER_URL = "code_WorkerActor.attachThread-worker.js";
|
|
|
|
function* initWorkerDebugger(TAB_URL, WORKER_URL) {
|
|
if (!DebuggerServer.initialized) {
|
|
DebuggerServer.init();
|
|
DebuggerServer.addBrowserActors();
|
|
}
|
|
|
|
let client = new DebuggerClient(DebuggerServer.connectPipe());
|
|
yield connect(client);
|
|
|
|
let tab = yield addTab(TAB_URL);
|
|
let { tabs } = yield listTabs(client);
|
|
let [, tabClient] = yield attachTab(client, findTab(tabs, TAB_URL));
|
|
|
|
yield createWorkerInTab(tab, WORKER_URL);
|
|
|
|
let { workers } = yield listWorkers(tabClient);
|
|
let [, workerClient] = yield attachWorker(tabClient,
|
|
findWorker(workers, WORKER_URL));
|
|
|
|
let toolbox = yield gDevTools.showToolbox(TargetFactory.forWorker(workerClient),
|
|
"jsdebugger",
|
|
Toolbox.HostType.WINDOW);
|
|
|
|
let debuggerPanel = toolbox.getCurrentPanel();
|
|
let gDebugger = debuggerPanel.panelWin;
|
|
|
|
return {client,tab,tabClient,workerClient,toolbox,gDebugger};
|
|
}
|
|
|
|
add_task(function* testNormalExecution() {
|
|
let {client,tab,tabClient,workerClient,toolbox,gDebugger} =
|
|
yield initWorkerDebugger(TAB_URL, WORKER_URL);
|
|
|
|
let jsterm = yield getSplitConsole(toolbox);
|
|
let executed = yield jsterm.execute("this.location.toString()");
|
|
ok(executed.textContent.includes(WORKER_URL),
|
|
"Evaluating the global's location works");
|
|
|
|
yield gDevTools.closeToolbox(TargetFactory.forWorker(workerClient));
|
|
terminateWorkerInTab(tab, WORKER_URL);
|
|
yield waitForWorkerClose(workerClient);
|
|
yield close(client);
|
|
yield removeTab(tab);
|
|
});
|
|
|
|
add_task(function* testWhilePaused() {
|
|
let {client,tab,tabClient,workerClient,toolbox,gDebugger} =
|
|
yield initWorkerDebugger(TAB_URL, WORKER_URL);
|
|
|
|
let gTarget = gDebugger.gTarget;
|
|
let gResumeButton = gDebugger.document.getElementById("resume");
|
|
let gResumeKey = gDebugger.document.getElementById("resumeKey");
|
|
|
|
// Execute some basic math to make sure evaluations are working.
|
|
let jsterm = yield getSplitConsole(toolbox);
|
|
let executed = yield jsterm.execute("10000+1");
|
|
ok(executed.textContent.includes("10001"), "Text for message appeared correct");
|
|
|
|
// Pause the worker by waiting for next execution and then sending a message to
|
|
// it from the main thread.
|
|
let oncePaused = gTarget.once("thread-paused");
|
|
EventUtils.sendMouseEvent({ type: "mousedown" }, gResumeButton, gDebugger);
|
|
once(gDebugger.gClient, "willInterrupt").then(() => {
|
|
info("Posting message to worker, then waiting for a pause");
|
|
postMessageToWorkerInTab(tab, WORKER_URL, "ping");
|
|
});
|
|
yield oncePaused;
|
|
|
|
let command1 = jsterm.execute("10000+2");
|
|
let command2 = jsterm.execute("10000+3");
|
|
let command3 = jsterm.execute("foobar"); // throw an error
|
|
|
|
info ("Trying to get the result of command1");
|
|
executed = yield command1;
|
|
ok(executed.textContent.includes("10002"),
|
|
"command1 executed successfully");
|
|
|
|
info ("Trying to get the result of command2");
|
|
executed = yield command2;
|
|
ok(executed.textContent.includes("10003"),
|
|
"command2 executed successfully");
|
|
|
|
info ("Trying to get the result of command3")
|
|
executed = yield command3;
|
|
// XXXworkers This is failing until Bug 1215120 is resolved.
|
|
todo(executed.textContent.includes("ReferenceError: foobar is not defined"),
|
|
"command3 executed successfully");
|
|
|
|
let onceResumed = gTarget.once("thread-resumed");
|
|
EventUtils.sendMouseEvent({ type: "mousedown" }, gResumeButton, gDebugger);
|
|
yield onceResumed;
|
|
|
|
yield gDevTools.closeToolbox(TargetFactory.forWorker(workerClient));
|
|
terminateWorkerInTab(tab, WORKER_URL);
|
|
yield waitForWorkerClose(workerClient);
|
|
yield close(client);
|
|
yield removeTab(tab);
|
|
});
|
|
|
|
// Test to see if creating the pause from the console works.
|
|
add_task(function* testPausedByConsole() {
|
|
let {client,tab,tabClient,workerClient,toolbox,gDebugger} =
|
|
yield initWorkerDebugger(TAB_URL, WORKER_URL);
|
|
|
|
let gTarget = gDebugger.gTarget;
|
|
let gResumeButton = gDebugger.document.getElementById("resume");
|
|
let gResumeKey = gDebugger.document.getElementById("resumeKey");
|
|
|
|
let jsterm = yield getSplitConsole(toolbox);
|
|
let executed = yield jsterm.execute("10000+1");
|
|
ok(executed.textContent.includes("10001"),
|
|
"Text for message appeared correct");
|
|
|
|
let oncePaused = gTarget.once("thread-paused");
|
|
EventUtils.sendMouseEvent({ type: "mousedown" }, gResumeButton, gDebugger);
|
|
let pausedExecution = jsterm.execute("10000+2");
|
|
|
|
info("Executed a command with 'break on next' active, waiting for pause");
|
|
yield oncePaused;
|
|
|
|
executed = yield jsterm.execute("10000+3");
|
|
ok(executed.textContent.includes("10003"),
|
|
"Text for message appeared correct");
|
|
|
|
info("Waiting for a resume");
|
|
let onceResumed = gTarget.once("thread-resumed");
|
|
EventUtils.sendMouseEvent({ type: "mousedown" }, gResumeButton, gDebugger);
|
|
yield onceResumed;
|
|
|
|
executed = yield pausedExecution;
|
|
ok(executed.textContent.includes("10002"),
|
|
"Text for message appeared correct");
|
|
|
|
yield gDevTools.closeToolbox(TargetFactory.forWorker(workerClient));
|
|
terminateWorkerInTab(tab, WORKER_URL);
|
|
yield waitForWorkerClose(workerClient);
|
|
yield close(client);
|
|
yield removeTab(tab);
|
|
});
|