summaryrefslogtreecommitdiff
path: root/cli/tests/workers/test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tests/workers/test.ts')
-rw-r--r--cli/tests/workers/test.ts40
1 files changed, 36 insertions, 4 deletions
diff --git a/cli/tests/workers/test.ts b/cli/tests/workers/test.ts
index c3ccebfbb..41988d204 100644
--- a/cli/tests/workers/test.ts
+++ b/cli/tests/workers/test.ts
@@ -198,15 +198,12 @@ Deno.test({
);
racyWorker.onmessage = (e): void => {
- assertEquals(e.data.buf.length, 999999);
- racyWorker.onmessage = (_e): void => {
- throw new Error("unreachable");
- };
setTimeout(() => {
promise.resolve();
}, 100);
};
+ racyWorker.postMessage("START");
await promise;
},
});
@@ -726,3 +723,38 @@ Deno.test({
worker.terminate();
},
});
+
+Deno.test({
+ name: "structured cloning postMessage",
+ fn: async function (): Promise<void> {
+ const result = deferred();
+ const worker = new Worker(
+ new URL("worker_structured_cloning.ts", import.meta.url).href,
+ { type: "module" },
+ );
+
+ worker.onmessage = (e): void => {
+ // self field should reference itself (circular ref)
+ const value = e.data.self.self.self;
+
+ // fields a and b refer to the same array
+ assertEquals(value.a, ["a", true, 432]);
+ assertEquals(value.a, ["a", true, 432]);
+ value.b[0] = "b";
+ value.a[2] += 5;
+ assertEquals(value.a, ["b", true, 437]);
+ assertEquals(value.b, ["b", true, 437]);
+
+ const len = value.c.size;
+ value.c.add(1); // This value is already in the set.
+ value.c.add(2);
+ assertEquals(len + 1, value.c.size);
+
+ result.resolve();
+ };
+
+ worker.postMessage("START");
+ await result;
+ worker.terminate();
+ },
+});