| 'use strict'; |
| const common = require('../common'); |
| const { Readable, Writable } = require('stream'); |
| |
| // Tests that calling .unpipe() un-blocks a stream that is paused because |
| // it is waiting on the writable side to finish a write(). |
| |
| const rs = new Readable({ |
| highWaterMark: 1, |
| // That this gets called at least 20 times is the real test here. |
| read: common.mustCallAtLeast(() => rs.push('foo'), 20) |
| }); |
| |
| const ws = new Writable({ |
| highWaterMark: 1, |
| write: common.mustCall(() => { |
| // Ignore the callback, this write() simply never finishes. |
| setImmediate(() => rs.unpipe(ws)); |
| }) |
| }); |
| |
| let chunks = 0; |
| rs.on('data', common.mustCallAtLeast(() => { |
| chunks++; |
| if (chunks >= 20) |
| rs.pause(); // Finish this test. |
| })); |
| |
| rs.pipe(ws); |