From 9d1c32945cf08f3148df006ba1cbfa5f213cffac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 2 Aug 2023 03:19:44 +0200 Subject: fix: regression in workers using dynamic imports (#20006) Closes https://github.com/denoland/deno/issues/19903 --- cli/tests/integration/worker_tests.rs | 7 ++++++ .../workers/worker_doest_stall_event_loop.ts | 29 ++++++++++++++++++++++ .../workers/worker_doest_stall_event_loop.ts.out | 6 +++++ 3 files changed, 42 insertions(+) create mode 100644 cli/tests/testdata/workers/worker_doest_stall_event_loop.ts create mode 100644 cli/tests/testdata/workers/worker_doest_stall_event_loop.ts.out (limited to 'cli/tests') diff --git a/cli/tests/integration/worker_tests.rs b/cli/tests/integration/worker_tests.rs index 916e8c887..aa6d64d2b 100644 --- a/cli/tests/integration/worker_tests.rs +++ b/cli/tests/integration/worker_tests.rs @@ -108,3 +108,10 @@ itest!(worker_error_event { output: "workers/error_event.ts.out", exit_code: 1, }); + +// Regression test for https://github.com/denoland/deno/issues/19903 +itest!(worker_doest_stall_event_loop { + args: "run --quiet -A workers/worker_doest_stall_event_loop.ts", + output: "workers/worker_doest_stall_event_loop.ts.out", + exit_code: 0, +}); diff --git a/cli/tests/testdata/workers/worker_doest_stall_event_loop.ts b/cli/tests/testdata/workers/worker_doest_stall_event_loop.ts new file mode 100644 index 000000000..bfddee2ec --- /dev/null +++ b/cli/tests/testdata/workers/worker_doest_stall_event_loop.ts @@ -0,0 +1,29 @@ +const moduleCode = ` +console.log('module start'); +const hash = await crypto.subtle.digest('SHA-1', new TextEncoder().encode('data')); +const __default = {}; +export { __default as default }; +console.log('module finish'); +`; + +const workerCode = ` + console.log('worker!'); + + globalThis.onmessage = (msg) => { + const { moduleCode } = msg.data; + (async () => { + console.log('before import'); + await import(URL.createObjectURL(new Blob([ moduleCode ]))); + console.log('after import'); + self.postMessage('thanks'); + })(); + } +`; +const worker = new Worker(URL.createObjectURL(new Blob([workerCode])), { + type: "module", +}); +worker.onmessage = () => { + console.log("worker.terminate"); + worker.terminate(); +}; +worker.postMessage({ moduleCode }); diff --git a/cli/tests/testdata/workers/worker_doest_stall_event_loop.ts.out b/cli/tests/testdata/workers/worker_doest_stall_event_loop.ts.out new file mode 100644 index 000000000..5ed65b02f --- /dev/null +++ b/cli/tests/testdata/workers/worker_doest_stall_event_loop.ts.out @@ -0,0 +1,6 @@ +worker! +before import +module start +module finish +after import +worker.terminate -- cgit v1.2.3