mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
8f742bb13f
PR-URL: https://github.com/nodejs/node/pull/50318 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Moshe Atlow <moshe@atlow.co.il> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Filip Skokan <panva.ip@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
263 lines
5.6 KiB
JavaScript
263 lines
5.6 KiB
JavaScript
// Flags: --no-warnings
|
|
'use strict';
|
|
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
|
|
const {
|
|
arrayBuffer,
|
|
blob,
|
|
buffer,
|
|
text,
|
|
json,
|
|
} = require('stream/consumers');
|
|
|
|
const {
|
|
Readable,
|
|
PassThrough
|
|
} = require('stream');
|
|
|
|
const {
|
|
TransformStream,
|
|
} = require('stream/web');
|
|
|
|
const buf = Buffer.from('hellothere');
|
|
const kArrayBuffer =
|
|
buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
|
|
|
|
{
|
|
const passthrough = new PassThrough();
|
|
|
|
blob(passthrough).then(common.mustCall(async (blob) => {
|
|
assert.strictEqual(blob.size, 10);
|
|
assert.deepStrictEqual(await blob.arrayBuffer(), kArrayBuffer);
|
|
}));
|
|
|
|
passthrough.write('hello');
|
|
setTimeout(() => passthrough.end('there'), 10);
|
|
}
|
|
|
|
{
|
|
const passthrough = new PassThrough();
|
|
|
|
arrayBuffer(passthrough).then(common.mustCall(async (ab) => {
|
|
assert.strictEqual(ab.byteLength, 10);
|
|
assert.deepStrictEqual(ab, kArrayBuffer);
|
|
}));
|
|
|
|
passthrough.write('hello');
|
|
setTimeout(() => passthrough.end('there'), 10);
|
|
}
|
|
|
|
{
|
|
const passthrough = new PassThrough();
|
|
|
|
buffer(passthrough).then(common.mustCall(async (buf) => {
|
|
assert.strictEqual(buf.byteLength, 10);
|
|
assert.deepStrictEqual(buf.buffer, kArrayBuffer);
|
|
}));
|
|
|
|
passthrough.write('hello');
|
|
setTimeout(() => passthrough.end('there'), 10);
|
|
}
|
|
|
|
|
|
{
|
|
const passthrough = new PassThrough();
|
|
|
|
text(passthrough).then(common.mustCall(async (str) => {
|
|
assert.strictEqual(str.length, 10);
|
|
assert.strictEqual(str, 'hellothere');
|
|
}));
|
|
|
|
passthrough.write('hello');
|
|
setTimeout(() => passthrough.end('there'), 10);
|
|
}
|
|
|
|
{
|
|
const readable = new Readable({
|
|
read() {}
|
|
});
|
|
|
|
text(readable).then((data) => {
|
|
assert.strictEqual(data, 'foo\ufffd\ufffd\ufffd');
|
|
});
|
|
|
|
readable.push(new Uint8Array([0x66, 0x6f, 0x6f, 0xed, 0xa0, 0x80]));
|
|
readable.push(null);
|
|
}
|
|
|
|
{
|
|
const passthrough = new PassThrough();
|
|
|
|
json(passthrough).then(common.mustCall(async (str) => {
|
|
assert.strictEqual(str.length, 10);
|
|
assert.strictEqual(str, 'hellothere');
|
|
}));
|
|
|
|
passthrough.write('"hello');
|
|
setTimeout(() => passthrough.end('there"'), 10);
|
|
}
|
|
|
|
{
|
|
const { writable, readable } = new TransformStream();
|
|
|
|
blob(readable).then(common.mustCall(async (blob) => {
|
|
assert.strictEqual(blob.size, 10);
|
|
assert.deepStrictEqual(await blob.arrayBuffer(), kArrayBuffer);
|
|
}));
|
|
|
|
const writer = writable.getWriter();
|
|
writer.write('hello');
|
|
setTimeout(() => {
|
|
writer.write('there');
|
|
writer.close();
|
|
}, 10);
|
|
|
|
assert.rejects(blob(readable), { code: 'ERR_INVALID_STATE' }).then(common.mustCall());
|
|
}
|
|
|
|
{
|
|
const { writable, readable } = new TransformStream();
|
|
|
|
arrayBuffer(readable).then(common.mustCall(async (ab) => {
|
|
assert.strictEqual(ab.byteLength, 10);
|
|
assert.deepStrictEqual(ab, kArrayBuffer);
|
|
}));
|
|
|
|
const writer = writable.getWriter();
|
|
writer.write('hello');
|
|
setTimeout(() => {
|
|
writer.write('there');
|
|
writer.close();
|
|
}, 10);
|
|
|
|
assert.rejects(arrayBuffer(readable), { code: 'ERR_INVALID_STATE' }).then(common.mustCall());
|
|
}
|
|
|
|
{
|
|
const { writable, readable } = new TransformStream();
|
|
|
|
text(readable).then(common.mustCall(async (str) => {
|
|
assert.strictEqual(str.length, 10);
|
|
assert.strictEqual(str, 'hellothere');
|
|
}));
|
|
|
|
const writer = writable.getWriter();
|
|
writer.write('hello');
|
|
setTimeout(() => {
|
|
writer.write('there');
|
|
writer.close();
|
|
}, 10);
|
|
|
|
assert.rejects(text(readable), { code: 'ERR_INVALID_STATE' }).then(common.mustCall());
|
|
}
|
|
|
|
{
|
|
const { writable, readable } = new TransformStream();
|
|
|
|
json(readable).then(common.mustCall(async (str) => {
|
|
assert.strictEqual(str.length, 10);
|
|
assert.strictEqual(str, 'hellothere');
|
|
}));
|
|
|
|
const writer = writable.getWriter();
|
|
writer.write('"hello');
|
|
setTimeout(() => {
|
|
writer.write('there"');
|
|
writer.close();
|
|
}, 10);
|
|
|
|
assert.rejects(json(readable), { code: 'ERR_INVALID_STATE' }).then(common.mustCall());
|
|
}
|
|
|
|
{
|
|
const stream = new PassThrough({
|
|
readableObjectMode: true,
|
|
writableObjectMode: true,
|
|
});
|
|
|
|
blob(stream).then(common.mustCall((blob) => {
|
|
assert.strictEqual(blob.size, 30);
|
|
}));
|
|
|
|
stream.write({});
|
|
stream.end({});
|
|
}
|
|
|
|
{
|
|
const stream = new PassThrough({
|
|
readableObjectMode: true,
|
|
writableObjectMode: true,
|
|
});
|
|
|
|
arrayBuffer(stream).then(common.mustCall((ab) => {
|
|
assert.strictEqual(ab.byteLength, 30);
|
|
assert.strictEqual(
|
|
Buffer.from(ab).toString(),
|
|
'[object Object][object Object]');
|
|
}));
|
|
|
|
stream.write({});
|
|
stream.end({});
|
|
}
|
|
|
|
{
|
|
const stream = new PassThrough({
|
|
readableObjectMode: true,
|
|
writableObjectMode: true,
|
|
});
|
|
|
|
buffer(stream).then(common.mustCall((buf) => {
|
|
assert.strictEqual(buf.byteLength, 30);
|
|
assert.strictEqual(
|
|
buf.toString(),
|
|
'[object Object][object Object]');
|
|
}));
|
|
|
|
stream.write({});
|
|
stream.end({});
|
|
}
|
|
|
|
{
|
|
const stream = new PassThrough({
|
|
readableObjectMode: true,
|
|
writableObjectMode: true,
|
|
});
|
|
|
|
assert.rejects(text(stream), {
|
|
code: 'ERR_INVALID_ARG_TYPE',
|
|
}).then(common.mustCall());
|
|
|
|
stream.write({});
|
|
stream.end({});
|
|
}
|
|
|
|
{
|
|
const stream = new PassThrough({
|
|
readableObjectMode: true,
|
|
writableObjectMode: true,
|
|
});
|
|
|
|
assert.rejects(json(stream), {
|
|
code: 'ERR_INVALID_ARG_TYPE',
|
|
}).then(common.mustCall());
|
|
|
|
stream.write({});
|
|
stream.end({});
|
|
}
|
|
|
|
{
|
|
const stream = new TransformStream();
|
|
text(stream.readable).then(common.mustCall((str) => {
|
|
// Incomplete utf8 character is flushed as a replacement char
|
|
assert.strictEqual(str.charCodeAt(0), 0xfffd);
|
|
}));
|
|
const writer = stream.writable.getWriter();
|
|
Promise.all([
|
|
writer.write(new Uint8Array([0xe2])),
|
|
writer.write(new Uint8Array([0x82])),
|
|
writer.close(),
|
|
]).then(common.mustCall());
|
|
}
|