aboutsummaryrefslogtreecommitdiff
path: root/test/bun.js/child-process-stdio.test.js
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-12-04 06:54:56 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-12-04 06:54:56 -0800
commit23c90a76c2335e954b0faf2aad4e818462367b2c (patch)
tree4f07ac8bed9e1e37a5412aff66357060af8feacb /test/bun.js/child-process-stdio.test.js
parent714ce7619d27dd162d72ce6b26358449fe280da2 (diff)
downloadbun-23c90a76c2335e954b0faf2aad4e818462367b2c.tar.gz
bun-23c90a76c2335e954b0faf2aad4e818462367b2c.tar.zst
bun-23c90a76c2335e954b0faf2aad4e818462367b2c.zip
Rename file
Diffstat (limited to 'test/bun.js/child-process-stdio.test.js')
-rw-r--r--test/bun.js/child-process-stdio.test.js80
1 files changed, 80 insertions, 0 deletions
diff --git a/test/bun.js/child-process-stdio.test.js b/test/bun.js/child-process-stdio.test.js
new file mode 100644
index 000000000..75ab0e49f
--- /dev/null
+++ b/test/bun.js/child-process-stdio.test.js
@@ -0,0 +1,80 @@
+import { describe, it, expect, beforeAll } from "bun:test";
+import { spawn, execSync } from "node:child_process";
+
+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 use a file as stdout", () => {
+// // const output = "Bun is cool\n";
+// // execSync(`rm -f ${OUT_FILE}`);
+// // const result = execSync(`bun ${CHILD_PROCESS_FILE} STDOUT > ${OUT_FILE}`, {
+// // encoding: "utf8",
+// // stdin,
+// // });
+// // expect(result).toBe(output);
+// // expect(readSync(OUT_FILE)).toBe(output);
+// // });
+// });
+
+describe("process.stdin", () => {
+ it("should allow us to read from stdin in readable mode", (done) => {
+ // Child should read from stdin and write it back
+ const child = spawn("bun", [CHILD_PROCESS_FILE, "STDIN", "READABLE"]);
+ child.stdout.setEncoding("utf8");
+ child.stdout.on("data", (data) => {
+ expect(data.trim()).toBe("data: hello");
+ done();
+ });
+ child.stdin.write("hello\n");
+ child.stdin.end();
+ });
+
+ it("should allow us to read from stdin via flowing mode", (done) => {
+ // Child should read from stdin and write it back
+ const child = spawn("bun", [CHILD_PROCESS_FILE, "STDIN", "FLOWING"]);
+ child.stdout.setEncoding("utf8");
+ child.stdout.on("data", (data) => {
+ expect(data.trim()).toBe("data: hello");
+ done();
+ });
+ child.stdin.write("hello\n");
+ 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);
+
+ let data = "";
+ child.stdout.on("end", () => {
+ expect(data).toBe(`data: ${input}`);
+ done();
+ });
+ child.stdout.on("readable", () => {
+ let chunk;
+ while ((chunk = child.stdout.read()) !== null) {
+ data += chunk.trim();
+ }
+ });
+ child.stdin.write(input);
+ child.stdin.end();
+ });
+
+ it("should allow us to read from a file", () => {
+ const result = execSync(
+ `bun ${CHILD_PROCESS_FILE} STDIN FLOWING < ${
+ import.meta.dir
+ }/readFileSync.txt`,
+ { encoding: "utf8" },
+ );
+ expect(result.trim()).toEqual("File read successfully");
+ });
+});