summaryrefslogtreecommitdiff
path: root/cli/tests/workers/test.ts
diff options
context:
space:
mode:
authorTim Ramlot <42113979+inteon@users.noreply.github.com>2021-05-11 21:09:09 +0200
committerGitHub <noreply@github.com>2021-05-11 21:09:09 +0200
commit635253bd3a3895f49e6c9606beb852da22fee205 (patch)
treecec9d75354b4e985a376f888564ecb63c99f2643 /cli/tests/workers/test.ts
parent0d319161bc19a520df653bc0c8386f14a68efbdb (diff)
feat(runtime/worker): Structured cloning worker message passing (#9323)
This commit upgrade "Worker.postMessage()" implementation to use structured clone algorithm instead of non-spec compliant JSON serialization.
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();
+ },
+});