'use strict'; const common = require('../common'); const assert = require('assert'); const { Readable, Writable, Duplex, Transform } = require('stream'); const readable = new Readable({ read() {} }); const writable = new Writable({ write() {} }); const duplex = new Duplex({ read() {}, write() {} }); const transform = new Transform({ transform() {} }); assert.ok(readable instanceof Readable); assert.ok(!(writable instanceof Readable)); assert.ok(duplex instanceof Readable); assert.ok(transform instanceof Readable); assert.ok(!(readable instanceof Writable)); assert.ok(writable instanceof Writable); assert.ok(duplex instanceof Writable); assert.ok(transform instanceof Writable); assert.ok(!(readable instanceof Duplex)); assert.ok(!(writable instanceof Duplex)); assert.ok(duplex instanceof Duplex); assert.ok(transform instanceof Duplex); assert.ok(!(readable instanceof Transform)); assert.ok(!(writable instanceof Transform)); assert.ok(!(duplex instanceof Transform)); assert.ok(transform instanceof Transform); assert.ok(!(null instanceof Writable)); assert.ok(!(undefined instanceof Writable)); // Simple inheritance check for `Writable` works fine in a subclass constructor. function CustomWritable() { assert.ok( this instanceof CustomWritable, `${this} does not inherit from CustomWritable` ); assert.ok( this instanceof Writable, `${this} does not inherit from Writable` ); } Object.setPrototypeOf(CustomWritable, Writable); Object.setPrototypeOf(CustomWritable.prototype, Writable.prototype); new CustomWritable(); common.expectsError( CustomWritable, { code: 'ERR_ASSERTION', type: assert.AssertionError, message: 'undefined does not inherit from CustomWritable' } ); class OtherCustomWritable extends Writable {} assert(!(new OtherCustomWritable() instanceof CustomWritable)); assert(!(new CustomWritable() instanceof OtherCustomWritable));