1'use strict'; 2require('../common'); 3const assert = require('assert'); 4const { Readable, Writable, Duplex, Transform } = require('stream'); 5 6const readable = new Readable({ read() {} }); 7const writable = new Writable({ write() {} }); 8const duplex = new Duplex({ read() {}, write() {} }); 9const transform = new Transform({ transform() {} }); 10 11assert.ok(readable instanceof Readable); 12assert.ok(!(writable instanceof Readable)); 13assert.ok(duplex instanceof Readable); 14assert.ok(transform instanceof Readable); 15 16assert.ok(!(readable instanceof Writable)); 17assert.ok(writable instanceof Writable); 18assert.ok(duplex instanceof Writable); 19assert.ok(transform instanceof Writable); 20 21assert.ok(!(readable instanceof Duplex)); 22assert.ok(!(writable instanceof Duplex)); 23assert.ok(duplex instanceof Duplex); 24assert.ok(transform instanceof Duplex); 25 26assert.ok(!(readable instanceof Transform)); 27assert.ok(!(writable instanceof Transform)); 28assert.ok(!(duplex instanceof Transform)); 29assert.ok(transform instanceof Transform); 30 31assert.ok(!(null instanceof Writable)); 32assert.ok(!(undefined instanceof Writable)); 33 34// Simple inheritance check for `Writable` works fine in a subclass constructor. 35function CustomWritable() { 36 assert.ok( 37 this instanceof CustomWritable, 38 `${this} does not inherit from CustomWritable` 39 ); 40 assert.ok( 41 this instanceof Writable, 42 `${this} does not inherit from Writable` 43 ); 44} 45 46Object.setPrototypeOf(CustomWritable, Writable); 47Object.setPrototypeOf(CustomWritable.prototype, Writable.prototype); 48 49new CustomWritable(); 50 51assert.throws( 52 CustomWritable, 53 { 54 code: 'ERR_ASSERTION', 55 constructor: assert.AssertionError, 56 message: 'undefined does not inherit from CustomWritable' 57 } 58); 59 60class OtherCustomWritable extends Writable {} 61 62assert(!(new OtherCustomWritable() instanceof CustomWritable)); 63assert(!(new CustomWritable() instanceof OtherCustomWritable)); 64