diff options
author | Nayeem Rahman <nayeemrmn99@gmail.com> | 2022-04-13 10:50:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-13 11:50:57 +0200 |
commit | 4d18f558e4cfebc5b8d9d594401e3ce74fc3226b (patch) | |
tree | ad13a194d22b3318cf862d9ae5214143f891930a /cli/tests | |
parent | d621ce1cf01ea9bb5562ea3bbed7c2d1db799c91 (diff) |
feat(ext/web): Add error events for event listener and timer errors (#14159)
- feat: Add handleable error event for even listener errors
- feat: Add handleable error event for setTimeout()/setInterval() errors
- feat: Add Deno.core.destructureError()
- feat: Add Deno.core.terminate()
- fix: Don't throw listener errors from dispatchEvent()
- fix: Use biased mode when selecting between mod_evaluate() and
run_event_loop() results
Diffstat (limited to 'cli/tests')
24 files changed, 158 insertions, 18 deletions
diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs index a56e3f0f1..969a57a9f 100644 --- a/cli/tests/integration/run_tests.rs +++ b/cli/tests/integration/run_tests.rs @@ -2685,3 +2685,32 @@ itest!(future_check2 { output: "future_check2.out", envs: vec![("DENO_FUTURE_CHECK".to_string(), "1".to_string())], }); + +itest!(event_listener_error { + args: "run --quiet event_listener_error.ts", + output: "event_listener_error.ts.out", + exit_code: 1, +}); + +itest!(event_listener_error_handled { + args: "run --quiet event_listener_error_handled.ts", + output: "event_listener_error_handled.ts.out", +}); + +// https://github.com/denoland/deno/pull/14159#issuecomment-1092285446 +itest!(event_listener_error_immediate_exit { + args: "run --quiet event_listener_error_immediate_exit.ts", + output: "event_listener_error_immediate_exit.ts.out", + exit_code: 1, +}); + +itest!(set_timeout_error { + args: "run --quiet set_timeout_error.ts", + output: "set_timeout_error.ts.out", + exit_code: 1, +}); + +itest!(set_timeout_error_handled { + args: "run --quiet set_timeout_error_handled.ts", + output: "set_timeout_error_handled.ts.out", +}); diff --git a/cli/tests/testdata/event_listener_error.ts b/cli/tests/testdata/event_listener_error.ts new file mode 100644 index 000000000..1cbdf7bc2 --- /dev/null +++ b/cli/tests/testdata/event_listener_error.ts @@ -0,0 +1,6 @@ +addEventListener("foo", () => { + throw new Error("bar"); +}); +console.log(1); +dispatchEvent(new CustomEvent("foo")); +console.log(2); diff --git a/cli/tests/testdata/event_listener_error.ts.out b/cli/tests/testdata/event_listener_error.ts.out new file mode 100644 index 000000000..a20a91dfd --- /dev/null +++ b/cli/tests/testdata/event_listener_error.ts.out @@ -0,0 +1,7 @@ +1 +error: Uncaught Error: bar + throw new Error("bar"); + ^ + at [WILDCARD]/event_listener_error.ts:2:9 + at [WILDCARD] + at [WILDCARD]/event_listener_error.ts:5:1 diff --git a/cli/tests/testdata/event_listener_error_handled.ts b/cli/tests/testdata/event_listener_error_handled.ts new file mode 100644 index 000000000..c4c8fd1cd --- /dev/null +++ b/cli/tests/testdata/event_listener_error_handled.ts @@ -0,0 +1,23 @@ +addEventListener("error", (event) => { + console.log({ + cancelable: event.cancelable, + message: event.message, + filename: event.filename?.slice?.(-100), + lineno: event.lineno, + colno: event.colno, + error: event.error, + }); + event.preventDefault(); +}); + +onerror = (event) => { + console.log("onerror() called", event.error); +}; + +addEventListener("foo", () => { + throw new Error("bar"); +}); + +console.log(1); +dispatchEvent(new CustomEvent("foo")); +console.log(2); diff --git a/cli/tests/testdata/event_listener_error_handled.ts.out b/cli/tests/testdata/event_listener_error_handled.ts.out new file mode 100644 index 000000000..d3cf525c3 --- /dev/null +++ b/cli/tests/testdata/event_listener_error_handled.ts.out @@ -0,0 +1,17 @@ +1 +{ + cancelable: true, + message: "Uncaught Error: bar", + filename: "[WILDCARD]/event_listener_error_handled.ts", + lineno: 18, + colno: 9, + error: Error: bar + at [WILDCARD]/event_listener_error_handled.ts:18:9 + at [WILDCARD] + at [WILDCARD]/event_listener_error_handled.ts:22:1 +} +onerror() called Error: bar + at [WILDCARD]/event_listener_error_handled.ts:18:9 + at [WILDCARD] + at [WILDCARD]/event_listener_error_handled.ts:22:1 +2 diff --git a/cli/tests/testdata/event_listener_error_immediate_exit.ts b/cli/tests/testdata/event_listener_error_immediate_exit.ts new file mode 100644 index 000000000..c9e94c01b --- /dev/null +++ b/cli/tests/testdata/event_listener_error_immediate_exit.ts @@ -0,0 +1,12 @@ +addEventListener("foo", () => { + queueMicrotask(() => console.log("queueMicrotask")); + setTimeout(() => console.log("timer"), 0); + throw new Error("bar"); +}); +console.log(1); +// @ts-ignore Deno.core +Deno.core.setNextTickCallback(() => console.log("nextTick")); +// @ts-ignore Deno.core +Deno.core.setHasTickScheduled(true); +dispatchEvent(new CustomEvent("foo")); +console.log(2); diff --git a/cli/tests/testdata/event_listener_error_immediate_exit.ts.out b/cli/tests/testdata/event_listener_error_immediate_exit.ts.out new file mode 100644 index 000000000..8f03f71b8 --- /dev/null +++ b/cli/tests/testdata/event_listener_error_immediate_exit.ts.out @@ -0,0 +1,6 @@ +1 +error: Uncaught Error: bar + throw new Error("bar"); + ^ + at [WILDCARD]/event_listener_error_immediate_exit.ts:4:9[WILDCARD] + at [WILDCARD]/event_listener_error_immediate_exit.ts:11:1 diff --git a/cli/tests/testdata/set_timeout_error.ts b/cli/tests/testdata/set_timeout_error.ts new file mode 100644 index 000000000..2864574e7 --- /dev/null +++ b/cli/tests/testdata/set_timeout_error.ts @@ -0,0 +1,3 @@ +setTimeout(() => { + throw new Error("foo"); +}, 0); diff --git a/cli/tests/testdata/set_timeout_error.ts.out b/cli/tests/testdata/set_timeout_error.ts.out new file mode 100644 index 000000000..9db053f6c --- /dev/null +++ b/cli/tests/testdata/set_timeout_error.ts.out @@ -0,0 +1,5 @@ +error: Uncaught Error: foo + throw new Error("foo"); + ^ + at [WILDCARD]/set_timeout_error.ts:2:9 + at [WILDCARD] diff --git a/cli/tests/testdata/set_timeout_error_handled.ts b/cli/tests/testdata/set_timeout_error_handled.ts new file mode 100644 index 000000000..aee2d97d2 --- /dev/null +++ b/cli/tests/testdata/set_timeout_error_handled.ts @@ -0,0 +1,19 @@ +addEventListener("error", (event) => { + console.log({ + cancelable: event.cancelable, + message: event.message, + filename: event.filename?.slice?.(-100), + lineno: event.lineno, + colno: event.colno, + error: event.error, + }); + event.preventDefault(); +}); + +onerror = (event) => { + console.log("onerror() called", event.error); +}; + +setTimeout(() => { + throw new Error("foo"); +}, 0); diff --git a/cli/tests/testdata/set_timeout_error_handled.ts.out b/cli/tests/testdata/set_timeout_error_handled.ts.out new file mode 100644 index 000000000..054dd9b6b --- /dev/null +++ b/cli/tests/testdata/set_timeout_error_handled.ts.out @@ -0,0 +1,13 @@ +{ + cancelable: true, + message: "Uncaught Error: foo", + filename: "[WILDCARD]/set_timeout_error_handled.ts", + lineno: 18, + colno: 9, + error: Error: foo + at [WILDCARD]/set_timeout_error_handled.ts:18:9 + at [WILDCARD] +} +onerror() called Error: foo + at [WILDCARD]/set_timeout_error_handled.ts:18:9 + at [WILDCARD] diff --git a/cli/tests/testdata/worker_drop_handle_race.js.out b/cli/tests/testdata/worker_drop_handle_race.js.out index 34c2d5be2..a81684bfa 100644 --- a/cli/tests/testdata/worker_drop_handle_race.js.out +++ b/cli/tests/testdata/worker_drop_handle_race.js.out @@ -4,5 +4,5 @@ error: Uncaught (in worker "") Error at [WILDCARD]/workers/drop_handle_race.js:2:9 at Object.action (deno:ext/web/02_timers.js:[WILDCARD]) at handleTimerMacrotask (deno:ext/web/02_timers.js:[WILDCARD]) -error: Uncaught (in promise) Error: Unhandled error event in child worker. +error: Uncaught (in promise) Error: Unhandled error in child worker. at Worker.#pollControl (deno:runtime/js/11_workers.js:[WILDCARD]) diff --git a/cli/tests/testdata/worker_event_handler_test.js.out b/cli/tests/testdata/worker_event_handler_test.js.out index 5556633b1..b3eed7f6c 100644 --- a/cli/tests/testdata/worker_event_handler_test.js.out +++ b/cli/tests/testdata/worker_event_handler_test.js.out @@ -1,10 +1,10 @@ Target from self.onmessage: [object DedicatedWorkerGlobalScope] Target from message event listener: [object DedicatedWorkerGlobalScope] Arguments from self.onerror: [ - "Some error message", - "", - 0, - 0, + "Uncaught Error: Some error message", + "[WILDCARD]/worker_event_handlers.js", + 9, + 9, Error: Some error message at [WILDCARD] ] diff --git a/cli/tests/testdata/workers/nonexistent_worker.out b/cli/tests/testdata/workers/nonexistent_worker.out index 1b5111b14..08a7e74e7 100644 --- a/cli/tests/testdata/workers/nonexistent_worker.out +++ b/cli/tests/testdata/workers/nonexistent_worker.out @@ -1,3 +1,3 @@ [WILDCARD]error: Uncaught (in worker "") Module not found "file:///[WILDCARD]/workers/doesnt_exist.js". -error: Uncaught (in promise) Error: Unhandled error event in child worker. +error: Uncaught (in promise) Error: Unhandled error in child worker. at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/testdata/workers/permissions_blob_local.ts.out b/cli/tests/testdata/workers/permissions_blob_local.ts.out index ee19c7ab5..9d5336bfe 100644 --- a/cli/tests/testdata/workers/permissions_blob_local.ts.out +++ b/cli/tests/testdata/workers/permissions_blob_local.ts.out @@ -1,4 +1,4 @@ error: Uncaught (in worker "") Requires read access to "[WILDCARD]local_file.ts", run again with the --allow-read flag at blob:null/[WILDCARD]:1:8 -error: Uncaught (in promise) Error: Unhandled error event in child worker. +error: Uncaught (in promise) Error: Unhandled error in child worker. at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/testdata/workers/permissions_blob_remote.ts.out b/cli/tests/testdata/workers/permissions_blob_remote.ts.out index 597e5bf1e..ac06e6ccb 100644 --- a/cli/tests/testdata/workers/permissions_blob_remote.ts.out +++ b/cli/tests/testdata/workers/permissions_blob_remote.ts.out @@ -1,4 +1,4 @@ error: Uncaught (in worker "") Requires net access to "example.com", run again with the --allow-net flag at blob:null/[WILDCARD]:1:8 -error: Uncaught (in promise) Error: Unhandled error event in child worker. +error: Uncaught (in promise) Error: Unhandled error in child worker. at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/testdata/workers/permissions_data_local.ts.out b/cli/tests/testdata/workers/permissions_data_local.ts.out index 5c9bcf1c1..96711f9a0 100644 --- a/cli/tests/testdata/workers/permissions_data_local.ts.out +++ b/cli/tests/testdata/workers/permissions_data_local.ts.out @@ -1,4 +1,4 @@ error: Uncaught (in worker "") Requires read access to "[WILDCARD]local_file.ts", run again with the --allow-read flag at data:application/javascript;base64,[WILDCARD]:1:8 -error: Uncaught (in promise) Error: Unhandled error event in child worker. +error: Uncaught (in promise) Error: Unhandled error in child worker. at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/testdata/workers/permissions_data_remote.ts.out b/cli/tests/testdata/workers/permissions_data_remote.ts.out index 0273664bd..a9ed5c240 100644 --- a/cli/tests/testdata/workers/permissions_data_remote.ts.out +++ b/cli/tests/testdata/workers/permissions_data_remote.ts.out @@ -1,4 +1,4 @@ error: Uncaught (in worker "") Requires net access to "example.com", run again with the --allow-net flag at data:application/javascript;base64,aW1wb3J0ICJodHRwczovL2V4YW1wbGUuY29tL3NvbWUvZmlsZS50cyI7:1:8 -error: Uncaught (in promise) Error: Unhandled error event in child worker. +error: Uncaught (in promise) Error: Unhandled error in child worker. at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/testdata/workers/permissions_dynamic_remote.ts.out b/cli/tests/testdata/workers/permissions_dynamic_remote.ts.out index e5015abff..cbddb61e0 100644 --- a/cli/tests/testdata/workers/permissions_dynamic_remote.ts.out +++ b/cli/tests/testdata/workers/permissions_dynamic_remote.ts.out @@ -2,5 +2,5 @@ error: Uncaught (in worker "") (in promise) TypeError: Requires net access to "e await import("https://example.com/some/file.ts"); ^ at async http://localhost:4545/workers/dynamic_remote.ts:2:1 -[WILDCARD]error: Uncaught (in promise) Error: Unhandled error event in child worker. +[WILDCARD]error: Uncaught (in promise) Error: Unhandled error in child worker. at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/testdata/workers/permissions_remote_remote.ts.out b/cli/tests/testdata/workers/permissions_remote_remote.ts.out index 42602cf71..be96b5d4e 100644 --- a/cli/tests/testdata/workers/permissions_remote_remote.ts.out +++ b/cli/tests/testdata/workers/permissions_remote_remote.ts.out @@ -1,4 +1,4 @@ error: Uncaught (in worker "") Requires net access to "example.com", run again with the --allow-net flag at http://localhost:4545/workers/static_remote.ts:2:8 -error: Uncaught (in promise) Error: Unhandled error event in child worker. +error: Uncaught (in promise) Error: Unhandled error in child worker. at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/testdata/workers/worker_async_error.ts.out b/cli/tests/testdata/workers/worker_async_error.ts.out index 0a05534c5..16f6a6b84 100644 --- a/cli/tests/testdata/workers/worker_async_error.ts.out +++ b/cli/tests/testdata/workers/worker_async_error.ts.out @@ -3,5 +3,5 @@ error: Uncaught (in worker "foo") (in promise) Error: bar ^ at [WILDCARD]/async_error.ts:[WILDCARD] at [WILDCARD]/async_error.ts:[WILDCARD] -error: Uncaught (in promise) Error: Unhandled error event in child worker. +error: Uncaught (in promise) Error: Unhandled error in child worker. at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/testdata/workers/worker_error.ts.out b/cli/tests/testdata/workers/worker_error.ts.out index cb0a02550..e7b0ea14d 100644 --- a/cli/tests/testdata/workers/worker_error.ts.out +++ b/cli/tests/testdata/workers/worker_error.ts.out @@ -1,5 +1,5 @@ [WILDCARD]error: Uncaught (in worker "bar") Error: foo[WILDCARD] at foo ([WILDCARD]) at [WILDCARD] -error: Uncaught (in promise) Error: Unhandled error event in child worker. +error: Uncaught (in promise) Error: Unhandled error in child worker. at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/testdata/workers/worker_message_handler_error.ts.out b/cli/tests/testdata/workers/worker_message_handler_error.ts.out index 56458d5e4..0c51ca9d2 100644 --- a/cli/tests/testdata/workers/worker_message_handler_error.ts.out +++ b/cli/tests/testdata/workers/worker_message_handler_error.ts.out @@ -1,7 +1,7 @@ -error: Uncaught (in worker "foo") (in promise) Error: bar +error: Uncaught (in worker "foo") Error: bar throw new Error("bar"); ^ at onmessage ([WILDCARD]/message_handler_error.ts:[WILDCARD]) at [WILDCARD] -error: Uncaught (in promise) Error: Unhandled error event in child worker. +error: Uncaught (in promise) Error: Unhandled error in child worker. at Worker.#pollControl ([WILDCARD]) diff --git a/cli/tests/testdata/workers/worker_nested_error.ts.out b/cli/tests/testdata/workers/worker_nested_error.ts.out index 5c978ca9b..afd9f59e2 100644 --- a/cli/tests/testdata/workers/worker_nested_error.ts.out +++ b/cli/tests/testdata/workers/worker_nested_error.ts.out @@ -3,7 +3,7 @@ ^ at foo ([WILDCARD]/workers/error.ts:[WILDCARD]) at [WILDCARD]/workers/error.ts:[WILDCARD] -error: Uncaught (in worker "baz") (in promise) Error: Unhandled error event in child worker. +error: Uncaught (in worker "baz") (in promise) Error: Unhandled error in child worker. at Worker.#pollControl ([WILDCARD]) -error: Uncaught (in promise) Error: Unhandled error event in child worker. +error: Uncaught (in promise) Error: Unhandled error in child worker. at Worker.#pollControl ([WILDCARD]) |