• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2const common = require('../common');
3const stream = require('stream');
4
5function test(throwCodeInbetween) {
6  // Check that a pipe does not stall if .read() is called unexpectedly
7  // (i.e. the stream is not resumed by the pipe).
8
9  const n = 1000;
10  let counter = n;
11  const rs = stream.Readable({
12    objectMode: true,
13    read: common.mustCallAtLeast(() => {
14      if (--counter >= 0)
15        rs.push({ counter });
16      else
17        rs.push(null);
18    }, n)
19  });
20
21  const ws = stream.Writable({
22    objectMode: true,
23    write: common.mustCall((data, enc, cb) => {
24      setImmediate(cb);
25    }, n)
26  });
27
28  setImmediate(() => throwCodeInbetween(rs, ws));
29
30  rs.pipe(ws);
31}
32
33test((rs) => rs.read());
34test((rs) => rs.resume());
35test(() => 0);
36