summaryrefslogtreecommitdiff
path: root/tests/specs/run/fix_worker_dispatchevent
diff options
context:
space:
mode:
Diffstat (limited to 'tests/specs/run/fix_worker_dispatchevent')
-rw-r--r--tests/specs/run/fix_worker_dispatchevent/__test__.jsonc4
-rw-r--r--tests/specs/run/fix_worker_dispatchevent/fix_worker_dispatchevent.ts43
-rw-r--r--tests/specs/run/fix_worker_dispatchevent/fix_worker_dispatchevent.ts.out1
3 files changed, 48 insertions, 0 deletions
diff --git a/tests/specs/run/fix_worker_dispatchevent/__test__.jsonc b/tests/specs/run/fix_worker_dispatchevent/__test__.jsonc
new file mode 100644
index 000000000..45e49b87f
--- /dev/null
+++ b/tests/specs/run/fix_worker_dispatchevent/__test__.jsonc
@@ -0,0 +1,4 @@
+{
+ "args": "run --quiet --reload fix_worker_dispatchevent.ts",
+ "output": "fix_worker_dispatchevent.ts.out"
+}
diff --git a/tests/specs/run/fix_worker_dispatchevent/fix_worker_dispatchevent.ts b/tests/specs/run/fix_worker_dispatchevent/fix_worker_dispatchevent.ts
new file mode 100644
index 000000000..1b73b52dc
--- /dev/null
+++ b/tests/specs/run/fix_worker_dispatchevent/fix_worker_dispatchevent.ts
@@ -0,0 +1,43 @@
+const code = `
+addEventListener("message", () => {
+ postMessage("pong");
+});
+
+const context = new EventTarget();
+
+Object.defineProperty(globalThis, "dispatchEvent", {
+ value: context.dispatchEvent.bind(context),
+ writable: true,
+ enumerable: true,
+ configurable: true,
+});
+
+postMessage("start");
+`;
+
+const blob = new Blob([code], { type: "application/javascript" });
+
+const url = URL.createObjectURL(blob);
+
+const worker = new Worker(url, { type: "module" });
+
+let terminated = false;
+
+worker.addEventListener("message", (evt) => {
+ if (evt.data === "start") {
+ worker.postMessage("ping");
+ } else if (evt.data === "pong") {
+ worker.terminate();
+ terminated = true;
+ console.log("success");
+ } else {
+ throw new Error("unexpected message from worker");
+ }
+});
+
+setTimeout(() => {
+ if (!terminated) {
+ worker.terminate();
+ throw new Error("did not receive message from worker in time");
+ }
+}, 2000);
diff --git a/tests/specs/run/fix_worker_dispatchevent/fix_worker_dispatchevent.ts.out b/tests/specs/run/fix_worker_dispatchevent/fix_worker_dispatchevent.ts.out
new file mode 100644
index 000000000..2e9ba477f
--- /dev/null
+++ b/tests/specs/run/fix_worker_dispatchevent/fix_worker_dispatchevent.ts.out
@@ -0,0 +1 @@
+success