mirror of
https://github.com/oven-sh/bun
synced 2026-02-10 10:58:56 +00:00
105 lines
2.9 KiB
TypeScript
105 lines
2.9 KiB
TypeScript
import { bunEnv, bunRun, joinP, tempDirWithFiles } from "harness";
|
|
|
|
test("cloneable and transferable equals", () => {
|
|
const dir = tempDirWithFiles("bun-test", {
|
|
"index.ts": `
|
|
import cluster from "cluster";
|
|
import { expect } from "bun:test";
|
|
if (cluster.isPrimary) {
|
|
cluster.settings.serialization = "advanced";
|
|
const worker = cluster.fork();
|
|
const original = Uint8Array.from([21, 11, 96, 126, 243, 128, 164]);
|
|
const buf = Uint8Array.from([21, 11, 96, 126, 243, 128, 164]);
|
|
const ab = buf.buffer.transfer();
|
|
expect(ab).toBeInstanceOf(ArrayBuffer);
|
|
expect(new Uint8Array(ab)).toEqual(original);
|
|
worker.on("online", function () {
|
|
worker.send(ab);
|
|
});
|
|
worker.on("message", function (data) {
|
|
worker.kill();
|
|
expect(data).toBeInstanceOf(ArrayBuffer);
|
|
expect(new Uint8Array(data)).toEqual(original);
|
|
process.exit(0);
|
|
});
|
|
} else {
|
|
process.on("message", msg => {
|
|
console.log("W", msg);
|
|
process.send!(msg);
|
|
});
|
|
}
|
|
`,
|
|
});
|
|
bunRun(joinP(dir, "index.ts"), bunEnv);
|
|
});
|
|
|
|
test("cloneable and non-transferable not-equals (BunFile)", () => {
|
|
const dir = tempDirWithFiles("bun-test", {
|
|
"index.ts": `
|
|
import cluster from "cluster";
|
|
import { expect } from "bun:test";
|
|
if (cluster.isPrimary) {
|
|
cluster.settings.serialization = "advanced";
|
|
const worker = cluster.fork();
|
|
const file = Bun.file(import.meta.filename);
|
|
console.log("P", "O", file);
|
|
expect(file).toBeInstanceOf(Blob); // Bun.BunFile isnt exposed to JS
|
|
expect(file.name).toEqual(import.meta.filename);
|
|
expect(file.type).toEqual("text/javascript;charset=utf-8");
|
|
worker.on("online", function () {
|
|
worker.send({ file });
|
|
});
|
|
worker.on("message", function (data) {
|
|
worker.kill();
|
|
const { file } = data;
|
|
console.log("P", "M", file);
|
|
expect(file.name).toBeUndefined();
|
|
expect(file.type).toBeUndefined();
|
|
expect(file).toBeEmptyObject();
|
|
process.exit(0);
|
|
});
|
|
} else {
|
|
process.on("message", msg => {
|
|
console.log("W", msg);
|
|
process.send!(msg);
|
|
});
|
|
}
|
|
`,
|
|
});
|
|
bunRun(joinP(dir, "index.ts"), bunEnv);
|
|
});
|
|
|
|
test("cloneable and non-transferable not-equals (net.BlockList)", () => {
|
|
const dir = tempDirWithFiles("bun-test", {
|
|
"index.ts": `
|
|
import cluster from "cluster";
|
|
import net from "net";
|
|
import { expect } from "bun:test";
|
|
if (cluster.isPrimary) {
|
|
cluster.settings.serialization = "advanced";
|
|
const worker = cluster.fork();
|
|
const blocklist = new net.BlockList();
|
|
console.log("P", "O", blocklist);
|
|
blocklist.addAddress("123.123.123.123");
|
|
worker.on("online", function () {
|
|
worker.send({ blocklist });
|
|
});
|
|
worker.on("message", function (data) {
|
|
worker.kill();
|
|
const { blocklist } = data;
|
|
console.log("P", "M", blocklist);
|
|
expect(blocklist.rules).toBeUndefined();
|
|
expect(blocklist).toBeEmptyObject();
|
|
process.exit(0);
|
|
});
|
|
} else {
|
|
process.on("message", msg => {
|
|
console.log("W", msg);
|
|
process.send!(msg);
|
|
});
|
|
}
|
|
`,
|
|
});
|
|
bunRun(joinP(dir, "index.ts"), bunEnv);
|
|
});
|