From 2585b72c9bdd5ca36b6b43cf5b5609419081c7a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Mon, 13 Apr 2020 22:18:31 +0200 Subject: feat: implement EventTarget for worker scope (#4737) --- cli/tests/subdir/event_worker_scope.js | 43 ++++++++++++++++++++++++++++++++++ cli/tests/workers_test.out | 5 ++-- cli/tests/workers_test.ts | 27 +++++++++++++++++++++ 3 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 cli/tests/subdir/event_worker_scope.js (limited to 'cli/tests') diff --git a/cli/tests/subdir/event_worker_scope.js b/cli/tests/subdir/event_worker_scope.js new file mode 100644 index 000000000..0381801a8 --- /dev/null +++ b/cli/tests/subdir/event_worker_scope.js @@ -0,0 +1,43 @@ +let messageHandlersCalled = 0; +let errorHandlersCalled = 0; + +onmessage = function (e) { + if (e.data === "boom") { + throw new Error("boom error!"); + } + messageHandlersCalled++; +}; + +self.addEventListener("message", (_e) => { + messageHandlersCalled++; +}); + +self.addEventListener("message", (_e) => { + messageHandlersCalled++; +}); + +self.addEventListener("message", (_e) => { + messageHandlersCalled++; + + postMessage({ + messageHandlersCalled, + errorHandlersCalled, + }); +}); + +onerror = function (_e) { + errorHandlersCalled++; +}; + +self.addEventListener("error", (_e) => { + errorHandlersCalled++; +}); + +self.addEventListener("error", (_e) => { + errorHandlersCalled++; +}); + +self.addEventListener("error", (e) => { + errorHandlersCalled++; + e.preventDefault(); +}); diff --git a/cli/tests/workers_test.out b/cli/tests/workers_test.out index 541adc20f..d3c25d3dd 100644 --- a/cli/tests/workers_test.out +++ b/cli/tests/workers_test.out @@ -1,4 +1,4 @@ -running 7 tests +running 8 tests test worker terminate ... ok [WILDCARD] test worker nested ... ok [WILDCARD] test worker throws when executing ... ok [WILDCARD] @@ -6,5 +6,6 @@ test worker fetch API ... ok [WILDCARD] test worker terminate busy loop ... ok [WILDCARD] test worker race condition ... ok [WILDCARD] test worker is event listener ... ok [WILDCARD] +test worker scope is event listener ... ok [WILDCARD] -test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out [WILDCARD] +test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out [WILDCARD] diff --git a/cli/tests/workers_test.ts b/cli/tests/workers_test.ts index bb00d67fd..d18186658 100644 --- a/cli/tests/workers_test.ts +++ b/cli/tests/workers_test.ts @@ -231,3 +231,30 @@ Deno.test({ worker.terminate(); }, }); + +Deno.test({ + name: "worker scope is event listener", + fn: async function (): Promise { + const promise1 = createResolvable(); + + const worker = new Worker("../tests/subdir/event_worker_scope.js", { + type: "module", + }); + + worker.onmessage = (e: MessageEvent): void => { + const { messageHandlersCalled, errorHandlersCalled } = e.data; + assertEquals(messageHandlersCalled, 4); + assertEquals(errorHandlersCalled, 4); + promise1.resolve(); + }; + + worker.onerror = (_e): void => { + throw new Error("unreachable"); + }; + + worker.postMessage("boom"); + worker.postMessage("ping"); + await promise1; + worker.terminate(); + }, +}); -- cgit v1.2.3