Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
test: make assertions on duplex.from instead of internal.duplexify
Signed-off-by: Erick Wendel <erick.workspace@gmail.com>
  • Loading branch information
ErickWendel committed Feb 7, 2022
commit 38c8b4e1a9cb01ad06a6f4ed5a9fc2fc1ae1e6fb
135 changes: 135 additions & 0 deletions test/parallel/test-stream-duplex-from.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
const common = require('../common');
const assert = require('assert');
const { Duplex, Readable, Writable, pipeline } = require('stream');
const { Blob } = require('buffer');

{
const d = Duplex.from({
Expand Down Expand Up @@ -144,3 +145,137 @@ const { Duplex, Readable, Writable, pipeline } = require('stream');
common.mustCall(() => {}),
);
}

// Ensure that isDuplexNodeStream was called
{
const duplex = new Duplex();
assert.deepStrictEqual(Duplex.from(duplex), duplex);
Comment thread
ErickWendel marked this conversation as resolved.
Outdated
}

// Ensure that Duplex.from works for blobs
{
const blob = new Blob(['blob']);
const expecteByteLength = blob.size;
const duplex = Duplex.from(blob);
duplex.on('data', common.mustCall((arrayBuffer) => {
assert.deepStrictEqual(arrayBuffer.byteLength, expecteByteLength);
}));
}

// Ensure that given a promise rejection it emits an error
{
const myErrorMessage = 'myCustomError';
Duplex.from(Promise.reject(myErrorMessage))
.on('error', common.mustCall((error) => {
assert.deepStrictEqual(error, myErrorMessage);
}));
}

// Ensure that given a promise rejection on an async function it emits an error
{
const myErrorMessage = 'myCustomError';
async function asyncFn() {
return Promise.reject(myErrorMessage);
}

Duplex.from(asyncFn)
.on('error', common.mustCall((error) => {
assert.deepStrictEqual(error, myErrorMessage);
}));
}

// Ensure that Duplex.from throws an Invalid return value when function is void
{
assert.throws(() => Duplex.from(() => {}), {
code: 'ERR_INVALID_RETURN_VALUE',
});
}

// Ensure data if a sub object has a readable stream it's duplexified
{
const msg = Buffer.from('hello');
const duplex = Duplex.from({
readable: Readable({
read() {
this.push(msg);
this.push(null);
}
})
}).on('data', common.mustCall((data) => {
assert.deepStrictEqual(data, msg);
}));

assert.strictEqual(duplex.writable, false);
}

// Ensure data if a sub object has a writable stream it's duplexified
{
const msg = Buffer.from('hello');
const duplex = Duplex.from({
writable: Writable({
write: common.mustCall((data) => {
assert.deepStrictEqual(data, msg);
})
})
});

duplex.write(msg);
assert.strictEqual(duplex.readable, false);
}

// Ensure data if a sub object has a writable and readable stream it's duplexified
{
const msg = Buffer.from('hello');

const duplex = Duplex.from({
readable: Readable({
read() {
this.push(msg);
this.push(null);
}
}),
writable: Writable({
write: common.mustCall((data) => {
assert.deepStrictEqual(data, msg);
})
})
});

duplex.pipe(duplex)
.on('data', common.mustCall((data) => {
assert.deepStrictEqual(data, msg);
assert.strictEqual(duplex.readable, true);
assert.strictEqual(duplex.writable, true);
}))
.on('end', common.mustCall());

}

// Ensure that given readable stream that throws an error it calls destroy
{
const myErrorMessage = 'error!';
const duplex = Duplex.from(Readable({
read() {
throw new Error(myErrorMessage);
}
}));
duplex.on('error', common.mustCall((msg) => {
assert.deepStrictEqual(msg.message, myErrorMessage);
}));
}

// Ensure that given writable stream that throws an error it calls destroy
{
const myErrorMessage = 'error!';
const duplex = Duplex.from(Writable({
write(chunk, enc, cb) {
cb(myErrorMessage);
}
}));

duplex.on('error', common.mustCall((msg) => {
assert.deepStrictEqual(msg, myErrorMessage);
}));

duplex.write('test');
}
148 changes: 0 additions & 148 deletions test/parallel/test-stream-duplexify.js

This file was deleted.