tenfourfox/devtools/client/debugger/test/mochitest/browser_dbg_WorkerActor.attachThread.js
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

101 lines
3.9 KiB
JavaScript

var TAB_URL = EXAMPLE_URL + "doc_WorkerActor.attachThread-tab.html";
var WORKER_URL = "code_WorkerActor.attachThread-worker.js";
function test() {
Task.spawn(function* () {
DebuggerServer.init();
DebuggerServer.addBrowserActors();
let client1 = new DebuggerClient(DebuggerServer.connectPipe());
yield connect(client1);
let client2 = new DebuggerClient(DebuggerServer.connectPipe());
yield connect(client2);
let tab = yield addTab(TAB_URL);
let { tabs: tabs1 } = yield listTabs(client1);
let [, tabClient1] = yield attachTab(client1, findTab(tabs1, TAB_URL));
let { tabs: tabs2 } = yield listTabs(client2);
let [, tabClient2] = yield attachTab(client2, findTab(tabs2, TAB_URL));
yield listWorkers(tabClient1);
yield listWorkers(tabClient2);
yield createWorkerInTab(tab, WORKER_URL);
let { workers: workers1 } = yield listWorkers(tabClient1);
let [, workerClient1] = yield attachWorker(tabClient1,
findWorker(workers1, WORKER_URL));
let { workers: workers2 } = yield listWorkers(tabClient2);
let [, workerClient2] = yield attachWorker(tabClient2,
findWorker(workers2, WORKER_URL));
let location = { line: 5 };
let [, threadClient1] = yield attachThread(workerClient1);
let sources1 = yield getSources(threadClient1);
let sourceClient1 = threadClient1.source(findSource(sources1,
EXAMPLE_URL + WORKER_URL));
let [, breakpointClient1] = yield setBreakpoint(sourceClient1, location);
yield resume(threadClient1);
let [, threadClient2] = yield attachThread(workerClient2);
let sources2 = yield getSources(threadClient2);
let sourceClient2 = threadClient2.source(findSource(sources2,
EXAMPLE_URL + WORKER_URL));
let [, breakpointClient2] = yield setBreakpoint(sourceClient2, location);
yield resume(threadClient2);
let packet = yield source(sourceClient1);
let text = (yield new Promise(function (resolve) {
let request = new XMLHttpRequest();
request.open("GET", EXAMPLE_URL + WORKER_URL, true);
request.send();
request.onload = function () {
resolve(request.responseText);
};
}));
is(packet.source, text);
postMessageToWorkerInTab(tab, WORKER_URL, "ping");
yield Promise.all([
waitForPause(threadClient1).then((packet) => {
is(packet.type, "paused");
let why = packet.why;
is(why.type, "breakpoint");
is(why.actors.length, 1);
is(why.actors[0], breakpointClient1.actor);
let frame = packet.frame;
let where = frame.where;
is(where.source.actor, sourceClient1.actor);
is(where.line, location.line);
let variables = frame.environment.bindings.variables;
is(variables.a.value, 1);
is(variables.b.value.type, "undefined");
is(variables.c.value.type, "undefined");
return resume(threadClient1);
}),
waitForPause(threadClient2).then((packet) => {
is(packet.type, "paused");
let why = packet.why;
is(why.type, "breakpoint");
is(why.actors.length, 1);
is(why.actors[0], breakpointClient2.actor);
let frame = packet.frame;
let where = frame.where;
is(where.source.actor, sourceClient2.actor);
is(where.line, location.line);
let variables = frame.environment.bindings.variables;
is(variables.a.value, 1);
is(variables.b.value.type, "undefined");
is(variables.c.value.type, "undefined");
return resume(threadClient2);
}),
]);
terminateWorkerInTab(tab, WORKER_URL);
yield waitForWorkerClose(workerClient1);
yield waitForWorkerClose(workerClient2);
yield close(client1);
yield close(client2);
finish();
});
}