'use strict'; const common = require('../common'); // This test ensures that Readable stream will call _read() for streams // with highWaterMark === 0 upon .read(0) instead of just trying to // emit 'readable' event. const assert = require('assert'); const { Readable } = require('stream'); const r = new Readable({ // Must be called only once upon setting 'readable' listener read: common.mustCall(), highWaterMark: 0, }); let pushedNull = false; // This will trigger read(0) but must only be called after push(null) // because the we haven't pushed any data r.on('readable', common.mustCall(() => { assert.strictEqual(r.read(), null); assert.strictEqual(pushedNull, true); })); r.on('end', common.mustCall()); process.nextTick(() => { assert.strictEqual(r.read(), null); pushedNull = true; r.push(null); });