diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /js/src/jit-test/tests/debug/Object-getPromiseReactions-02.js | |
parent | Initial commit. (diff) | |
download | firefox-esr-upstream.tar.xz firefox-esr-upstream.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/jit-test/tests/debug/Object-getPromiseReactions-02.js')
-rw-r--r-- | js/src/jit-test/tests/debug/Object-getPromiseReactions-02.js | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/debug/Object-getPromiseReactions-02.js b/js/src/jit-test/tests/debug/Object-getPromiseReactions-02.js new file mode 100644 index 0000000000..9922dd3389 --- /dev/null +++ b/js/src/jit-test/tests/debug/Object-getPromiseReactions-02.js @@ -0,0 +1,49 @@ +// Debugger.Object.protoype.getPromiseReactions reports directly resolved promises. + +load(libdir + 'array-compare.js'); + +var g = newGlobal({ newCompartment: true }); +var dbg = new Debugger; +var DOg = dbg.addDebuggee(g); + +g.eval(` + var pResolve, pReject; + var p = new Promise((resolve, reject) => { pResolve = resolve; pReject = reject }); + var p2 = new Promise((resolve, reject) => { resolve(p); }); + var p3 = new Promise((resolve, reject) => { resolve(p); }); + var p4 = new Promise((resolve, reject) => { resolve(p2); }); +`); + +var [DOp, DOp2, DOp3, DOp4] = [g.p, g.p2, g.p3, g.p4].map(p => DOg.makeDebuggeeValue(p)); + +// Since the standard resolving functions enqueue a job to do the `then` call, +// none of the reactions should be visible yet. +assertEq(true, arraysEqual(DOp.getPromiseReactions(), [])); +assertEq(true, arraysEqual(DOp2.getPromiseReactions(), [])); +assertEq(true, arraysEqual(DOp3.getPromiseReactions(), [])); +assertEq(true, arraysEqual(DOp4.getPromiseReactions(), [])); + +// This should let them all appear in place. +drainJobQueue(); + +assertEq(true, arraysEqual(DOp.getPromiseReactions(), [DOp2, DOp3])); +assertEq(true, arraysEqual(DOp2.getPromiseReactions(), [DOp4])); +assertEq(true, arraysEqual(DOp3.getPromiseReactions(), [])); +assertEq(true, arraysEqual(DOp4.getPromiseReactions(), [])); + +// Resolving the initial promise should kick off its reactions, but propagating +// that the rest of the way requires microtasks. +g.pResolve(42); + +assertEq(true, arraysEqual(DOp.getPromiseReactions(), [])); +assertEq(true, arraysEqual(DOp2.getPromiseReactions(), [DOp4])); +assertEq(true, arraysEqual(DOp3.getPromiseReactions(), [])); +assertEq(true, arraysEqual(DOp4.getPromiseReactions(), [])); + +// Let the propagation complete. +drainJobQueue(); + +assertEq(true, arraysEqual(DOp.getPromiseReactions(), [])); +assertEq(true, arraysEqual(DOp2.getPromiseReactions(), [])); +assertEq(true, arraysEqual(DOp3.getPromiseReactions(), [])); +assertEq(true, arraysEqual(DOp4.getPromiseReactions(), [])); |