summaryrefslogtreecommitdiff
path: root/cli/tests
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2022-07-04 21:14:58 +0200
committerGitHub <noreply@github.com>2022-07-04 21:14:58 +0200
commitf7af0b01a59aaac91473e2f920137004d39a310a (patch)
treef04bdb8c0acba2730cff47a91b249e15543435a8 /cli/tests
parent691d67b3ed788e30b17600d1dc472ecfa83b6585 (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.rs5
-rw-r--r--cli/tests/testdata/unhandled_rejection.js11
-rw-r--r--cli/tests/testdata/unhandled_rejection.js.out8
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