mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 18:38:55 +00:00
* fix(stream): get Duplex working * feat(process): add stdin,stdout,stderr in a semi-broken state (pipes??) * test(NodeTestHelpers): fix test names * test(NodeTestHelpers): add test for createDoneDotAll done called w error * test(NodeTestHelpers): remove stray console.log * fix(stream): fix bug in Duplex, Readable * test(process.stdio): rename test * fix(process.stdio): change onData listener to onReadable * refactor(streams): add file-wide debug fn, destructure opts * fix(child_process): check isCallable on promise * fix: get stdio streams mostly working (mostly) * fix(child_process): wait until stream is drained before calling end? * fix(child_process): change to result?.then * debug(child_process,streams): add EE id tracking, add shim for stdio after handle is dead * test(child_process): fix double pipe test, temp fix for ChildProcess.kill() return val * fix(child_process): remove immediate emit of exit on kill * debug(streams): add more debug log * debug(streams): add more debug logs part 2 * feat(streams,fs): add NativeWritable, adapt fs.WriteStream and fs.ReadStream to native
170 lines
4.4 KiB
JavaScript
170 lines
4.4 KiB
JavaScript
import { describe, it, expect } from "bun:test";
|
|
import {
|
|
throws,
|
|
assert,
|
|
strictEqual,
|
|
createCallCheckCtx,
|
|
createDoneDotAll,
|
|
} from "./node-test-helpers";
|
|
|
|
describe("NodeTestHelpers.throws()", () => {
|
|
it("should pass when the function throws", () => {
|
|
throws(() => {
|
|
throw new Error("THROWN!");
|
|
});
|
|
});
|
|
|
|
it("should fail when the function doesn't throw", () => {
|
|
let err;
|
|
try {
|
|
throws(() => {}, Error);
|
|
} catch (e) {
|
|
err = e;
|
|
}
|
|
|
|
expect(err instanceof Error).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe("NodeTestHelpers.assert()", () => {
|
|
it("should pass when the provided value is true", () => {
|
|
assert(true);
|
|
});
|
|
|
|
it("should fail when the provided value is false", () => {
|
|
let err;
|
|
try {
|
|
assert(false);
|
|
} catch (e) {
|
|
err = e;
|
|
}
|
|
expect(err instanceof Error).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe("NodeTestHelpers.strictEqual()", () => {
|
|
it("should pass when the provided values are deeply equal", () => {
|
|
strictEqual(1, 1);
|
|
strictEqual("hello", "hello");
|
|
const testing = { hello: "world" };
|
|
const testing2 = testing;
|
|
testing2.hello = "bla";
|
|
strictEqual(testing, testing2);
|
|
strictEqual(NaN, NaN);
|
|
strictEqual(Infinity, Infinity);
|
|
strictEqual(-Infinity, -Infinity);
|
|
strictEqual(null, null);
|
|
strictEqual(undefined, undefined);
|
|
});
|
|
|
|
it("should fail when the provided values are not deeply equal", () => {
|
|
let err = null;
|
|
try {
|
|
strictEqual(1, 5);
|
|
} catch (e) {
|
|
err = e;
|
|
}
|
|
expect(err instanceof Error).toBe(true);
|
|
err = null;
|
|
try {
|
|
strictEqual({ foo: "bar" }, { foo: "bar" });
|
|
} catch (e) {
|
|
err = e;
|
|
}
|
|
expect(err instanceof Error).toBe(true);
|
|
err = null;
|
|
try {
|
|
strictEqual("1", 1);
|
|
} catch (e) {
|
|
err = e;
|
|
}
|
|
expect(err instanceof Error).toBe(true);
|
|
err = null;
|
|
const obj1 = { foo: "bar" };
|
|
const obj2 = JSON.parse(JSON.stringify(obj1));
|
|
try {
|
|
strictEqual(obj1, obj2);
|
|
} catch (e) {
|
|
err = e;
|
|
}
|
|
expect(err instanceof Error).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe("NodeTestHelpers.createCallCheckCtx", () => {
|
|
it("should pass when all mustCall marked callbacks have been called", (done) => {
|
|
const { mustCall } = createCallCheckCtx(done);
|
|
const fn1 = mustCall(() => {});
|
|
const fn2 = mustCall(() => {});
|
|
fn1();
|
|
fn2();
|
|
});
|
|
|
|
it("should fail when all mustCall marked callbacks have NOT been called", (done) => {
|
|
const mockDone = (result) => {
|
|
expect(result instanceof Error).toBe(true);
|
|
done();
|
|
};
|
|
const { mustCall } = createCallCheckCtx(mockDone, 600);
|
|
const fn1 = mustCall(() => {});
|
|
mustCall(() => {});
|
|
fn1();
|
|
});
|
|
|
|
it("should allow us to get the args of the wrapped callback from mustCall", (done) => {
|
|
const { mustCall } = createCallCheckCtx(done);
|
|
const fn1 = mustCall((arg1, arg2) => {
|
|
expect(arg1).toBe("hello");
|
|
expect(arg2).toBe("world");
|
|
});
|
|
fn1("hello", "world");
|
|
});
|
|
});
|
|
|
|
describe("NodeTestHelpers.createDoneDotAll()", () => {
|
|
it("should pass when all dones have been called", (done) => {
|
|
const createDone = createDoneDotAll(done);
|
|
const done1 = createDone(600);
|
|
const done2 = createDone(600);
|
|
setTimeout(() => done1(), 300);
|
|
setTimeout(() => done2(), 450);
|
|
});
|
|
|
|
it("should fail when all dones have NOT been called before timeout", (done) => {
|
|
const mockDone = (result) => {
|
|
expect(result instanceof Error).toBe(true);
|
|
done();
|
|
};
|
|
const createDone = createDoneDotAll(mockDone);
|
|
const done1 = createDone(400);
|
|
createDone(400);
|
|
setTimeout(() => done1(), 200);
|
|
});
|
|
|
|
it("should allow us to combine mustCall and multiple dones", (done) => {
|
|
const createDone = createDoneDotAll(done);
|
|
const { mustCall } = createCallCheckCtx(createDone(600));
|
|
const done1 = createDone(600);
|
|
const done2 = createDone(600);
|
|
const fn1 = mustCall(() => {});
|
|
const fn2 = mustCall(() => {});
|
|
setTimeout(() => done1(), 300);
|
|
setTimeout(() => done2(), 450);
|
|
setTimeout(() => fn1(), 200);
|
|
setTimeout(() => fn2(), 200);
|
|
});
|
|
|
|
it("should fail if a done is called with an error", (done) => {
|
|
const mockDone = (result) => {
|
|
expect(result instanceof Error).toBe(true);
|
|
done();
|
|
};
|
|
const createDone = createDoneDotAll(mockDone);
|
|
|
|
const done1 = createDone(600);
|
|
const done2 = createDone(600);
|
|
setTimeout(() => done1(), 300);
|
|
setTimeout(() => done2(new Error("ERROR!")), 450);
|
|
});
|
|
});
|