diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2022-07-04 21:14:58 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-04 21:14:58 +0200 |
commit | f7af0b01a59aaac91473e2f920137004d39a310a (patch) | |
tree | f04bdb8c0acba2730cff47a91b249e15543435a8 /cli/tests | |
parent | 691d67b3ed788e30b17600d1dc472ecfa83b6585 (diff) |
feat: add "unhandledrejection" event support (#12994)
This commit adds support for "unhandledrejection" event.
This event will trigger event listeners registered using:
"globalThis.addEventListener("unhandledrejection")
"globalThis.onunhandledrejection"
This is done by registering a default handler using
"Deno.core.setPromiseRejectCallback" that allows to
handle rejected promises in JavaScript instead of Rust.
This commit will make it possible to polyfill
"process.on("unhandledRejection")" in the Node compat
layer.
Co-authored-by: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'cli/tests')
-rw-r--r-- | cli/tests/integration/run_tests.rs | 5 | ||||
-rw-r--r-- | cli/tests/testdata/unhandled_rejection.js | 11 | ||||
-rw-r--r-- | cli/tests/testdata/unhandled_rejection.js.out | 8 |
3 files changed, 24 insertions, 0 deletions
diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs index 1cd1db0ef..7ac577d02 100644 --- a/cli/tests/integration/run_tests.rs +++ b/cli/tests/integration/run_tests.rs @@ -2744,3 +2744,8 @@ itest!(followup_dyn_import_resolved { args: "run --unstable --allow-read followup_dyn_import_resolves/main.ts", output: "followup_dyn_import_resolves/main.ts.out", }); + +itest!(unhandled_rejection { + args: "run --allow-read unhandled_rejection.js", + output: "unhandled_rejection.js.out", +}); diff --git a/cli/tests/testdata/unhandled_rejection.js b/cli/tests/testdata/unhandled_rejection.js new file mode 100644 index 000000000..352e861b4 --- /dev/null +++ b/cli/tests/testdata/unhandled_rejection.js @@ -0,0 +1,11 @@ +globalThis.addEventListener("unhandledrejection", (e) => { + console.log("unhandled rejection at:", e.promise, "reason:", e.reason); + e.preventDefault(); +}); + +function Foo() { + this.bar = Promise.reject(new Error("bar not available")); +} + +new Foo(); +Promise.reject(); diff --git a/cli/tests/testdata/unhandled_rejection.js.out b/cli/tests/testdata/unhandled_rejection.js.out new file mode 100644 index 000000000..4c41795ce --- /dev/null +++ b/cli/tests/testdata/unhandled_rejection.js.out @@ -0,0 +1,8 @@ +unhandled rejection at: Promise { + <rejected> Error: bar not available + at new Foo (file:///[WILDCARD]/testdata/unhandled_rejection.js:7:29) + at file:///[WILDCARD]/testdata/unhandled_rejection.js:10:1 +} reason: Error: bar not available + at new Foo (file:///[WILDCARD]/testdata/unhandled_rejection.js:7:29) + at file:///[WILDCARD]/testdata/unhandled_rejection.js:10:1 +unhandled rejection at: Promise { <rejected> undefined } reason: undefined |