import { mustCall } from '../common/index.mjs'; import { ReadableStream } from 'stream/web'; import assert from 'assert'; { // Test tee() with close in the nextTick after enqueue async function read(stream) { const chunks = []; for await (const chunk of stream) chunks.push(chunk); return Buffer.concat(chunks).toString(); } const [r1, r2] = new ReadableStream({ start(controller) { process.nextTick(() => { controller.enqueue(new Uint8Array([102, 111, 111, 98, 97, 114])); process.nextTick(() => { controller.close(); }); }); } }).tee(); (async () => { const [dataReader1, dataReader2] = await Promise.all([ read(r1), read(r2), ]); assert.strictEqual(dataReader1, dataReader2); assert.strictEqual(dataReader1, 'foobar'); assert.strictEqual(dataReader2, 'foobar'); })().then(mustCall()); } { // Test ReadableByteStream.tee() with close in the nextTick after enqueue async function read(stream) { const chunks = []; for await (const chunk of stream) chunks.push(chunk); return Buffer.concat(chunks).toString(); } const [r1, r2] = new ReadableStream({ type: 'bytes', start(controller) { process.nextTick(() => { controller.enqueue(new Uint8Array([102, 111, 111, 98, 97, 114])); process.nextTick(() => { controller.close(); }); }); } }).tee(); (async () => { const [dataReader1, dataReader2] = await Promise.all([ read(r1), read(r2), ]); assert.strictEqual(dataReader1, dataReader2); assert.strictEqual(dataReader1, 'foobar'); assert.strictEqual(dataReader2, 'foobar'); })().then(mustCall()); }