1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
import { test, describe, expect } from "bun:test";
import { Console } from "node:console";
import { Writable } from "node:stream";
function writable() {
let intoString = "";
const { promise, resolve } = Promise.withResolvers();
const stream = new Writable({
write(chunk) {
intoString += chunk.toString();
},
destroy() {
resolve(intoString);
},
autoDestroy: true,
});
(stream as any).write = (chunk: any) => {
intoString += Buffer.from(chunk).toString("utf-8");
};
return [stream, () => promise] as const;
}
describe("console.Console", () => {
test("global instanceof Console", () => {
expect(global.console).toBeInstanceOf(Console);
});
test("new Console instanceof Console", () => {
const c = new Console({ stdout: process.stdout, stderr: process.stderr });
expect(c).toBeInstanceOf(Console);
});
test("it can write to a stream", async () => {
console.log();
const [stream, value] = writable();
const c = new Console({ stdout: stream, stderr: stream, colorMode: false });
c.log("hello");
c.log({ foo: "bar" });
stream.end();
expect(await value()).toBe("hello\n{ foo: 'bar' }\n");
});
test("can enable colors", async () => {
const [stream, value] = writable();
const c = new Console({ stdout: stream, stderr: stream, colorMode: true });
c.log("hello");
c.log({ foo: "bar" });
stream.end();
expect(await value()).toBe("hello\n{ foo: \u001B[32m'bar'\u001B[39m }\n");
});
test("stderr and stdout are separate", async () => {
const [out, outValue] = writable();
const [err, errValue] = writable();
const c = new Console({ stdout: out, stderr: err });
c.log("hello world!");
c.error("uh oh!");
out.end();
err.end();
expect(await outValue()).toBe("hello world!\n");
expect(await errValue()).toBe("uh oh!\n");
});
});
test("console._stdout", () => {
// @ts-ignore
expect(console._stdout).toBe(process.stdout);
expect(Object.getOwnPropertyDescriptor(console, "_stdout")).toEqual({
value: process.stdout,
writable: true,
enumerable: false,
configurable: true,
});
});
test("console._stderr", () => {
// @ts-ignore
expect(console._stderr).toBe(process.stderr);
expect(Object.getOwnPropertyDescriptor(console, "_stderr")).toEqual({
value: process.stderr,
writable: true,
enumerable: false,
configurable: true,
});
});
|