Spaces:
Paused
Paused
| import { test } from 'tap' | |
| import TextLineStream from '../dist/textlinestream.es.mjs' | |
| function concatArray() { | |
| const chunks = [] | |
| return new TransformStream({ | |
| transform(chunk) { | |
| chunks.push(chunk) | |
| }, | |
| flush(controller) { | |
| controller.enqueue(chunks) | |
| } | |
| }); | |
| } | |
| test('split two lines on end', async function (t) { | |
| const {readable, writable} = new TextLineStream() | |
| const readStream = readable | |
| .pipeThrough(concatArray()) | |
| const writer = writable.getWriter(); | |
| writer.write('hello\nworld'); | |
| writer.close(); | |
| for await (const list of readStream) { | |
| t.same(list, ['hello', 'world']); | |
| t.end(); | |
| } | |
| }) | |
| test('split two lines on two writes', async function (t) { | |
| const {readable, writable} = new TextLineStream() | |
| const readStream = readable | |
| .pipeThrough(concatArray()) | |
| const writer = writable.getWriter(); | |
| writer.write('hello'); | |
| writer.write('\nworld'); | |
| writer.close(); | |
| for await (const list of readStream) { | |
| t.same(list, ['hello', 'world']); | |
| t.end(); | |
| } | |
| }) | |
| test('split four lines on three writes', async function (t) { | |
| const {readable, writable} = new TextLineStream() | |
| const readStream = readable | |
| .pipeThrough(concatArray()) | |
| const writer = writable.getWriter(); | |
| writer.write('hello\nwor'); | |
| writer.write('ld\nbye\nwo'); | |
| writer.write('rld'); | |
| writer.close(); | |
| for await (const list of readStream) { | |
| t.same(list, ['hello', 'world', 'bye', 'world']); | |
| t.end(); | |
| } | |
| }) | |
| test('accumulate multiple writes', async function (t) { | |
| const {readable, writable} = new TextLineStream() | |
| const readStream = readable | |
| .pipeThrough(concatArray()) | |
| const writer = writable.getWriter(); | |
| writer.write('hello'); | |
| writer.write('world'); | |
| writer.close(); | |
| for await (const list of readStream) { | |
| t.same(list, ['helloworld']); | |
| t.end(); | |
| } | |
| }) | |
| test('support a mapper function', async function (t) { | |
| const {readable, writable} = new TextLineStream({ | |
| mapperFun: JSON.parse | |
| }) | |
| const readStream = readable | |
| .pipeThrough(concatArray()) | |
| const a = { a: '42' } | |
| const b = { b: '24' } | |
| const writer = writable.getWriter(); | |
| writer.write(JSON.stringify(a)); | |
| writer.write('\n'); | |
| writer.write(JSON.stringify(b)); | |
| writer.close(); | |
| for await (const list of readStream) { | |
| t.same(list, [a,b]); | |
| t.end(); | |
| } | |
| }) | |
| test('split lines windows-style', async function (t) { | |
| const {readable, writable} = new TextLineStream() | |
| const readStream = readable | |
| .pipeThrough(concatArray()) | |
| const writer = writable.getWriter(); | |
| writer.write('hello\r\nworld'); | |
| writer.close(); | |
| for await (const list of readStream) { | |
| t.same(list, ['hello', 'world']); | |
| t.end(); | |
| } | |
| }) | |
| test('do not return empty lines (default)', async function (t) { | |
| const {readable, writable} = new TextLineStream() | |
| const readStream = readable | |
| .pipeThrough(concatArray()) | |
| const writer = writable.getWriter(); | |
| writer.write('hello\n\nworld'); | |
| writer.close(); | |
| for await (const list of readStream) { | |
| t.same(list, ['hello', 'world']); | |
| t.end(); | |
| } | |
| }) | |
| test('return empty lines - returnEmptyLines option', async function (t) { | |
| const {readable, writable} = new TextLineStream({ | |
| returnEmptyLines: true | |
| }) | |
| const readStream = readable | |
| .pipeThrough(concatArray()) | |
| const writer = writable.getWriter(); | |
| writer.write('hello\n\nworld'); | |
| writer.close(); | |
| for await (const list of readStream) { | |
| t.same(list, ['hello', '', 'world']); | |
| t.end(); | |
| } | |
| }) |