diff options
-rw-r--r-- | src/hero.mjs | 7 | ||||
-rw-r--r-- | tests/js/hero.mjs | 21 |
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(); + }); + }); }); }; |