summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Frame-asyncPromise-01.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/debug/Frame-asyncPromise-01.js')
-rw-r--r--js/src/jit-test/tests/debug/Frame-asyncPromise-01.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/debug/Frame-asyncPromise-01.js b/js/src/jit-test/tests/debug/Frame-asyncPromise-01.js
new file mode 100644
index 0000000000..d8ac80a6ce
--- /dev/null
+++ b/js/src/jit-test/tests/debug/Frame-asyncPromise-01.js
@@ -0,0 +1,72 @@
+// Testing the promise property on async function frames.
+
+load(libdir + 'asserts.js');
+
+var g = newGlobal({ newCompartment: true });
+var dbg = Debugger(g);
+g.eval(`
+async function f() {
+ debugger;
+ await Promise.resolve();
+ debugger;
+}
+`);
+
+let frame;
+const promises = [];
+dbg.onEnterFrame = function(f) {
+ frame = f;
+ promises.push(["start", frame.asyncPromise]);
+
+ dbg.onEnterFrame = function(f) {
+ assertEq(f, frame);
+ promises.push(["resume", frame.asyncPromise]);
+ };
+
+ frame.onPop = function() {
+ promises.push(["suspend", frame.asyncPromise]);
+
+ frame.onPop = function() {
+ promises.push(["finish", frame.asyncPromise]);
+ };
+ };
+
+ dbg.onDebuggerStatement = function(f) {
+ assertEq(f, frame);
+ promises.push(["dbg", frame.asyncPromise]);
+ };
+};
+
+(async () => {
+ const resultPromise = g.f();
+
+ const framePromise = frame.asyncPromise;
+ assertEq(framePromise instanceof Debugger.Object, true);
+ assertEq(framePromise.unsafeDereference(), resultPromise);
+
+ assertEq(promises.length, 3);
+ assertEq(promises[0][0], "start");
+ assertEq(promises[0][1], null);
+
+ assertEq(promises[1][0], "dbg");
+ assertEq(promises[1][1], framePromise);
+
+ assertEq(promises[2][0], "suspend");
+ assertEq(promises[2][1], framePromise);
+
+ await resultPromise;
+
+ // Frame has terminated, so accessing the property throws.
+ assertThrowsInstanceOf(() => frame.asyncPromise, Error);
+
+ assertEq(promises.length, 6);
+
+ assertEq(promises[3][0], "resume");
+ assertEq(promises[3][1], framePromise);
+
+ assertEq(promises[4][0], "dbg");
+ assertEq(promises[4][1], framePromise);
+
+ assertEq(promises[5][0], "finish");
+ assertEq(promises[5][1], framePromise);
+})();