mirror of
https://github.com/nodejs/node.git
synced 2026-10-28 10:15:07 +08:00
Signed-off-by: jakecastelli <38635403+jakecastelli@users.noreply.github.com> PR-URL: https://github.com/nodejs/node/pull/65515 Reviewed-By: Jason Zhang <xzha4350@gmail.com> Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
88 lines
1.8 KiB
JavaScript
88 lines
1.8 KiB
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const { Readable } = require('stream');
|
|
const { finished } = require('stream/promises');
|
|
|
|
const expectedError = {
|
|
code: 'ERR_STREAM_NULL_VALUES',
|
|
name: 'TypeError',
|
|
message: 'May not write null values to stream'
|
|
};
|
|
|
|
async function rejectsNull(iterable, expectedChunks = []) {
|
|
const stream = Readable.from(iterable);
|
|
const chunks = [];
|
|
const completion = finished(stream);
|
|
|
|
stream.on('data', (chunk) => chunks.push(chunk));
|
|
|
|
await assert.rejects(completion, expectedError);
|
|
assert.deepStrictEqual(chunks, expectedChunks);
|
|
assert.strictEqual(stream.destroyed, true);
|
|
}
|
|
|
|
async function asyncIteratorYieldsNull() {
|
|
const cleanup = common.mustCall();
|
|
|
|
async function* generate() {
|
|
try {
|
|
yield null;
|
|
} finally {
|
|
cleanup();
|
|
}
|
|
}
|
|
|
|
await rejectsNull(generate());
|
|
}
|
|
|
|
async function syncIteratorYieldsNull() {
|
|
const cleanup = common.mustCall();
|
|
|
|
function* generate() {
|
|
try {
|
|
yield null;
|
|
} finally {
|
|
cleanup();
|
|
}
|
|
}
|
|
|
|
await rejectsNull(generate());
|
|
}
|
|
|
|
async function firstSyncValueResolvesToNull() {
|
|
const cleanup = common.mustCall();
|
|
|
|
function* generate() {
|
|
try {
|
|
yield Promise.resolve(null);
|
|
} finally {
|
|
cleanup();
|
|
}
|
|
}
|
|
|
|
await rejectsNull(generate());
|
|
}
|
|
|
|
async function laterSyncValueResolvesToNull() {
|
|
const cleanup = common.mustCall();
|
|
|
|
function* generate() {
|
|
try {
|
|
yield Promise.resolve('first');
|
|
yield Promise.resolve(null);
|
|
} finally {
|
|
cleanup();
|
|
}
|
|
}
|
|
|
|
await rejectsNull(generate(), ['first']);
|
|
}
|
|
|
|
Promise.all([
|
|
asyncIteratorYieldsNull(),
|
|
syncIteratorYieldsNull(),
|
|
firstSyncValueResolvesToNull(),
|
|
laterSyncValueResolvesToNull(),
|
|
]).then(common.mustCall());
|