Spaces:
Running
Running
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(); | |
} | |
}) |