deno.land / std@0.166.0 / node / _tools / test / parallel / test-stream-readable-reading-readingMore.js
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179// deno-fmt-ignore-file// deno-lint-ignore-file
// Copyright Joyent and Node contributors. All rights reserved. MIT license.// Taken from Node 18.12.0// This file is automatically generated by "node/_tools/setup.ts". Do not modify this file manually
'use strict';const common = require('../common');const assert = require('assert');const Readable = require('stream').Readable;
{ const readable = new Readable({ read(size) {} });
const state = readable._readableState;
// Starting off with false initially. assert.strictEqual(state.reading, false); assert.strictEqual(state.readingMore, false);
readable.on('data', common.mustCall((data) => { // While in a flowing state with a 'readable' listener // we should not be reading more if (readable.readableFlowing) assert.strictEqual(state.readingMore, true);
// Reading as long as we've not ended assert.strictEqual(state.reading, !state.ended); }, 2));
function onStreamEnd() { // End of stream; state.reading is false // And so should be readingMore. assert.strictEqual(state.readingMore, false); assert.strictEqual(state.reading, false); }
const expectedReadingMore = [true, true, false]; readable.on('readable', common.mustCall(() => { // There is only one readingMore scheduled from on('data'), // after which everything is governed by the .read() call assert.strictEqual(state.readingMore, expectedReadingMore.shift());
// If the stream has ended, we shouldn't be reading assert.strictEqual(state.ended, !state.reading);
// Consume all the data while (readable.read() !== null);
if (expectedReadingMore.length === 0) // Reached end of stream process.nextTick(common.mustCall(onStreamEnd, 1)); }, 3));
readable.on('end', common.mustCall(onStreamEnd)); readable.push('pushed');
readable.read(6);
// reading assert.strictEqual(state.reading, true); assert.strictEqual(state.readingMore, true);
// add chunk to front readable.unshift('unshifted');
// end readable.push(null);}
{ const readable = new Readable({ read(size) {} });
const state = readable._readableState;
// Starting off with false initially. assert.strictEqual(state.reading, false); assert.strictEqual(state.readingMore, false);
readable.on('data', common.mustCall((data) => { // While in a flowing state without a 'readable' listener // we should be reading more if (readable.readableFlowing) assert.strictEqual(state.readingMore, true);
// Reading as long as we've not ended assert.strictEqual(state.reading, !state.ended); }, 2));
function onStreamEnd() { // End of stream; state.reading is false // And so should be readingMore. assert.strictEqual(state.readingMore, false); assert.strictEqual(state.reading, false); }
readable.on('end', common.mustCall(onStreamEnd)); readable.push('pushed');
// Stop emitting 'data' events assert.strictEqual(state.flowing, true); readable.pause();
// paused assert.strictEqual(state.reading, false); assert.strictEqual(state.flowing, false);
readable.resume(); assert.strictEqual(state.reading, false); assert.strictEqual(state.flowing, true);
// add chunk to front readable.unshift('unshifted');
// end readable.push(null);}
{ const readable = new Readable({ read(size) {} });
const state = readable._readableState;
// Starting off with false initially. assert.strictEqual(state.reading, false); assert.strictEqual(state.readingMore, false);
const onReadable = common.mustNotCall();
readable.on('readable', onReadable);
readable.on('data', common.mustCall((data) => { // Reading as long as we've not ended assert.strictEqual(state.reading, !state.ended); }, 2));
readable.removeListener('readable', onReadable);
function onStreamEnd() { // End of stream; state.reading is false // And so should be readingMore. assert.strictEqual(state.readingMore, false); assert.strictEqual(state.reading, false); }
readable.on('end', common.mustCall(onStreamEnd)); readable.push('pushed');
// We are still not flowing, we will be resuming in the next tick assert.strictEqual(state.flowing, false);
// Wait for nextTick, so the readableListener flag resets process.nextTick(function() { readable.resume();
// Stop emitting 'data' events assert.strictEqual(state.flowing, true); readable.pause();
// paused assert.strictEqual(state.flowing, false);
readable.resume(); assert.strictEqual(state.flowing, true);
// add chunk to front readable.unshift('unshifted');
// end readable.push(null); });}
Version Info