mirror of https://github.com/lukechilds/node.git
Browse Source
* test: check invalid chunk error for readable.push Test that passing invalid chunks to readable.push() in non-object mode throw errors. * test: add simple object mode + decoder stream test * test: add test for readable stream lacking _read Check that using a readable stream without a _read method will throw an error. * test: add basic test for piping to multiple dests Add a simple test for piping and unpiping from a readable stream to multiple writable streams. PR-URL: https://github.com/nodejs/node/pull/7260 Reviewed-By: Matteo Collina <matteo.collina@gmail.com>v6.x
Anna Henningsen
9 years ago
committed by
Evan Lucas
4 changed files with 90 additions and 0 deletions
@ -0,0 +1,19 @@ |
|||
'use strict'; |
|||
require('../common'); |
|||
const stream = require('stream'); |
|||
const assert = require('assert'); |
|||
|
|||
const readable = new stream.Readable({ |
|||
read: () => {}, |
|||
encoding: 'utf16le', |
|||
objectMode: true |
|||
}); |
|||
|
|||
readable.push(Buffer.from('abc', 'utf16le')); |
|||
readable.push(Buffer.from('def', 'utf16le')); |
|||
readable.push(null); |
|||
|
|||
// Without object mode, these would be concatenated into a single chunk.
|
|||
assert.strictEqual(readable.read(), 'abc'); |
|||
assert.strictEqual(readable.read(), 'def'); |
|||
assert.strictEqual(readable.read(), null); |
@ -0,0 +1,51 @@ |
|||
'use strict'; |
|||
const common = require('../common'); |
|||
const stream = require('stream'); |
|||
const assert = require('assert'); |
|||
|
|||
const readable = new stream.Readable({ |
|||
read: () => {} |
|||
}); |
|||
|
|||
const writables = []; |
|||
|
|||
for (let i = 0; i < 5; i++) { |
|||
const target = new stream.Writable({ |
|||
write: common.mustCall((chunk, encoding, callback) => { |
|||
target.output.push(chunk); |
|||
callback(); |
|||
}, 1) |
|||
}); |
|||
target.output = []; |
|||
|
|||
target.on('pipe', common.mustCall(() => {})); |
|||
readable.pipe(target); |
|||
|
|||
|
|||
writables.push(target); |
|||
} |
|||
|
|||
const input = Buffer.from([1, 2, 3, 4, 5]); |
|||
|
|||
readable.push(input); |
|||
|
|||
// The pipe() calls will postpone emission of the 'resume' event using nextTick,
|
|||
// so no data will be available to the writable streams until then.
|
|||
process.nextTick(common.mustCall(() => { |
|||
for (const target of writables) { |
|||
assert.deepStrictEqual(target.output, [input]); |
|||
|
|||
target.on('unpipe', common.mustCall(() => {})); |
|||
readable.unpipe(target); |
|||
} |
|||
|
|||
readable.push('something else'); // This does not get through.
|
|||
readable.push(null); |
|||
readable.resume(); // Make sure the 'end' event gets emitted.
|
|||
})); |
|||
|
|||
readable.on('end', common.mustCall(() => { |
|||
for (const target of writables) { |
|||
assert.deepStrictEqual(target.output, [input]); |
|||
} |
|||
})); |
@ -0,0 +1,12 @@ |
|||
'use strict'; |
|||
require('../common'); |
|||
const stream = require('stream'); |
|||
const assert = require('assert'); |
|||
|
|||
const readable = new stream.Readable({ |
|||
read: () => {} |
|||
}); |
|||
|
|||
assert.throws(() => readable.push([]), /Invalid non-string\/buffer chunk/); |
|||
assert.throws(() => readable.push({}), /Invalid non-string\/buffer chunk/); |
|||
assert.throws(() => readable.push(0), /Invalid non-string\/buffer chunk/); |
@ -0,0 +1,8 @@ |
|||
'use strict'; |
|||
require('../common'); |
|||
const stream = require('stream'); |
|||
const assert = require('assert'); |
|||
|
|||
const readable = new stream.Readable(); |
|||
|
|||
assert.throws(() => readable.read(), /not implemented/); |
Loading…
Reference in new issue