diff options
Diffstat (limited to 'js/src/jit-test/tests/modules/failure-on-resume.js')
-rw-r--r-- | js/src/jit-test/tests/modules/failure-on-resume.js | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/modules/failure-on-resume.js b/js/src/jit-test/tests/modules/failure-on-resume.js new file mode 100644 index 0000000000..d0e716b0bb --- /dev/null +++ b/js/src/jit-test/tests/modules/failure-on-resume.js @@ -0,0 +1,79 @@ +const dbgGlobal = newGlobal({ newCompartment: true }); +dbgGlobal.parent = this; +dbgGlobal.eval(` +var entered = 0; +var forceReturn = false; +Debugger(parent).onEnterFrame = function () { + entered++; + if (forceReturn) { + return { return: "force return" }; + } + return undefined; +}; +`); + +{ + function* f1() { yield 10; }; + + dbgGlobal.entered = 0; + let g = f1(); + assertEq(dbgGlobal.entered, 1); + dbgGlobal.forceReturn = true; + let ret = g.next(); + dbgGlobal.forceReturn = false; + assertEq(dbgGlobal.entered, 2); + + assertEq(ret.value, "force return"); +} + +{ + async function f2() { await {}; } + + dbgGlobal.entered = 0; + let p = f2(); + assertEq(dbgGlobal.entered, 1); + dbgGlobal.forceReturn = true; + drainJobQueue(); + dbgGlobal.forceReturn = false; + assertEq(dbgGlobal.entered, 2); + + let ret = null; + p.then(x => ret = x); + drainJobQueue(); + assertEq(ret, "force return"); +} + +{ + async function* f3() { await {}; } + + dbgGlobal.entered = 0; + let g = f3(); + assertEq(dbgGlobal.entered, 1); + dbgGlobal.forceReturn = true; + let p = g.next(); + dbgGlobal.forceReturn = false; + assertEq(dbgGlobal.entered, 2); + + let ret = null; + p.then(v => ret = v); + drainJobQueue(); + assertEq(ret.value, "force return"); +} + +{ + let m = registerModule("1", parseModule("await {};")); + moduleLink(m); + + dbgGlobal.entered = 0; + let p = moduleEvaluate(m); + assertEq(dbgGlobal.entered, 1); + dbgGlobal.forceReturn = true; + drainJobQueue(); + dbgGlobal.forceReturn = false; + assertEq(dbgGlobal.entered, 2); + + let ret = null; + p.then(x => ret = x); + drainJobQueue(); + assertEq(ret, undefined); +} |