diff options
Diffstat (limited to 'test/bun.js/child-process-stdio.test.js')
-rw-r--r-- | test/bun.js/child-process-stdio.test.js | 71 |
1 files changed, 50 insertions, 21 deletions
diff --git a/test/bun.js/child-process-stdio.test.js b/test/bun.js/child-process-stdio.test.js index 9969473be..a023a6e03 100644 --- a/test/bun.js/child-process-stdio.test.js +++ b/test/bun.js/child-process-stdio.test.js @@ -5,53 +5,82 @@ const CHILD_PROCESS_FILE = import.meta.dir + "/spawned-child.js"; const OUT_FILE = import.meta.dir + "/stdio-test-out.txt"; describe("process.stdout", () => { - it("should allow us to write to it", () => { - process.stdout.write("Bun is cool\n"); + it("should allow us to write to it", (done) => { + const child = spawn("bun", [CHILD_PROCESS_FILE, "STDOUT"]); + child.stdout.setEncoding("utf8"); + child.stdout.on("data", (data) => { + try { + expect(data).toBe("stdout_test"); + done(); + } catch (err) { + done(err); + } + }); }); }); describe("process.stdin", () => { it("should allow us to read from stdin in readable mode", (done) => { + const input = "hello\n"; // Child should read from stdin and write it back const child = spawn("bun", [CHILD_PROCESS_FILE, "STDIN", "READABLE"]); + let data = ""; child.stdout.setEncoding("utf8"); - child.stdout.on("data", (data) => { - expect(data.trim()).toBe("data: hello"); - done(); + child.stdout.on("data", (chunk) => { + data += chunk; + }).on("end", function() { + try { + expect(data).toBe(`data: ${input}`); + done(); + } catch (err) { + done(err); + } }); - child.stdin.write("hello\n"); + child.stdin.write(input); child.stdin.end(); }); it("should allow us to read from stdin via flowing mode", (done) => { + const input = "hello\n"; // Child should read from stdin and write it back const child = spawn("bun", [CHILD_PROCESS_FILE, "STDIN", "FLOWING"]); + let data = ""; child.stdout.setEncoding("utf8"); - child.stdout.on("data", (data) => { - expect(data.trim()).toBe("data: hello"); - done(); + child.stdout.on("readable", () => { + let chunk; + while ((chunk = child.stdout.read()) !== null) { + data += chunk; + } + }).on("end", function() { + try { + expect(data).toBe(`data: ${input}`); + done(); + } catch (err) { + done(err); + } }); - child.stdin.write("hello\n"); + child.stdin.write(input); child.stdin.end(); }); it("should allow us to read > 65kb from stdin", (done) => { - // Child should read from stdin and write it back - const child = spawn("bun", [CHILD_PROCESS_FILE, "STDIN", "FLOWING"]); - child.stdout.setEncoding("utf8"); - const numReps = Math.ceil((66 * 1024) / 5); const input = "hello".repeat(numReps); - + // Child should read from stdin and write it back + const child = spawn("bun", [CHILD_PROCESS_FILE, "STDIN", "FLOWING"]); let data = ""; - child.stdout.on("end", () => { - expect(data).toBe(`data: ${input}`); - done(); - }); + child.stdout.setEncoding("utf8"); child.stdout.on("readable", () => { let chunk; while ((chunk = child.stdout.read()) !== null) { - data += chunk.trim(); + data += chunk; + } + }).on("end", function() { + try { + expect(data).toBe(`data: ${input}`); + done(); + } catch (err) { + done(err); } }); child.stdin.write(input); @@ -65,6 +94,6 @@ describe("process.stdin", () => { }/readFileSync.txt`, { encoding: "utf8" }, ); - expect(result.trim()).toEqual("data: File read successfully"); + expect(result).toEqual("data: File read successfully"); }); }); |