fune/devtools/server/tests/xpcshell/test_threadlifetime-02.js
Alexandre Poirot c29b020b4a Bug 1571212 - [devtools] Wait for resume to complete in all xpcshell tests. r=bomsy
test_stepping-12.js wasn't correctly waiting for thread to be resumed between each of its sub test.

Similarly, other tests weren't waiting for thread front's resume request to be resume.
I'm also spreading the usage of resumeAndWaitForPause to better ensure we resume and wait for next paused event
without any race condition. Listening to "paused" after calling "resume" is subject to race conditions.

Differential Revision: https://phabricator.services.mozilla.com/D136125
2022-01-19 17:43:00 +00:00

73 lines
1.8 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
/**
* Check that thread-lifetime grips last past a resume.
*/
add_task(
threadFrontTest(async ({ threadFront, debuggee, client }) => {
const packet = await executeOnNextTickAndWaitForPause(
() => evaluateTestCode(debuggee),
threadFront
);
const pauseGrip = packet.frame.arguments[0];
// Create a thread-lifetime actor for this object.
const response = await client.request({
to: pauseGrip.actor,
type: "threadGrip",
});
// Successful promotion won't return an error.
Assert.equal(response.error, undefined);
const packet2 = await resumeAndWaitForPause(threadFront);
// Verify that the promoted actor is returned again.
Assert.equal(pauseGrip.actor, packet2.frame.arguments[0].actor);
// Now that we've resumed, release the thread-lifetime grip.
const objFront = new ObjectFront(
threadFront.conn,
threadFront.targetFront,
threadFront,
pauseGrip
);
await objFront.release();
const objFront2 = new ObjectFront(
threadFront.conn,
threadFront.targetFront,
threadFront,
pauseGrip
);
try {
await objFront2
.request({ to: pauseGrip.actor, type: "bogusRequest" })
.catch(function(error) {
Assert.ok(!!error.message.match(/noSuchActor/));
threadFront.resume();
throw new Error();
});
ok(false, "bogusRequest should throw");
} catch (e) {
ok(true, "bogusRequest thrown");
}
})
);
function evaluateTestCode(debuggee) {
debuggee.eval(
"(" +
function() {
function stopMe(arg1) {
debugger;
debugger;
}
stopMe({ obj: true });
} +
")()"
);
}