summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/hero.mjs7
-rw-r--r--tests/js/hero.mjs21
2 files changed, 26 insertions, 2 deletions
diff --git a/src/hero.mjs b/src/hero.mjs
index 699e426..bcc4fdb 100644
--- a/src/hero.mjs
+++ b/src/hero.mjs
@@ -363,7 +363,7 @@ export const makePipeReaderFn = ({
lineFn: lineHandler
}) => path => {
mkfifo(path);
- // TODO
+ fs.createReadStream(path, "UTF-8").on("data", makeLineEmitter(lineFn));
};
export const makePipeReader = makePipeReaderFn();
@@ -397,7 +397,10 @@ export const promisifyServer = (name, serverHandle, socket, pipe) => ({
rmIf(socket);
return serverHandle.listen(socket, ...args)
}),
- close: util.promisify((...args) => serverHandle.close(...args)),
+ close: util.promisify((...args) => {
+ fs.createWriteStream(pipe).end();
+ return serverHandle.close(...args);
+ }),
events: serverHandle,
});
diff --git a/tests/js/hero.mjs b/tests/js/hero.mjs
index 67cf690..14d9a07 100644
--- a/tests/js/hero.mjs
+++ b/tests/js/hero.mjs
@@ -1378,6 +1378,12 @@ const test_makePipeReaderFn = async t => {
const lines = [];
const lineFn = x => lines.push(x);
const makePipeReader = makePipeReaderFn({ lineFn: null });
+
+ rmIf(path);
+ makePipeReader(path);
+ fs.createWriteStream(path).end();
+
+ assert.deepEqual(lines, []);
});
await t.test("closing on pipe EOF reopens", async () => {
@@ -1385,6 +1391,21 @@ const test_makePipeReaderFn = async t => {
const lines = [];
const lineFn = x => lines.push(x);
const makePipeReader = makePipeReaderFn({ lineFn });
+
+ rmIf(path);
+ makePipeReader(path);
+ const writer = fs.createWriteStream(path);
+ writer.end("first\nsecond\nthird\n");
+ return new Promise((resolve, reject) => {
+ writer.close(() => {
+ assert.deepEqual(lines, [
+ "first",
+ "second",
+ "third",
+ ]);
+ resolve();
+ });
+ });
});
};