1var tape = require('tape') 2 , EE = require('events').EventEmitter 3 , util = require('util') 4 5 6 , isStream = require('./') 7 , isReadable = require('./').isReadable 8 , isWritable = require('./').isWritable 9 , isDuplex = require('./').isDuplex 10 11 , CoreStreams = require('stream') 12 , ReadableStream10 = require('./readable-stream-1.0/') 13 , ReadableStream11 = require('./readable-stream-1.1/') 14 15 16function test (pass, type, stream) { 17 tape('isStream(' + type + ')', function (t) { 18 t.plan(1) 19 t.ok(pass === isStream(stream), type) 20 }) 21} 22 23 24function testReadable (pass, type, stream) { 25 tape('isReadable(' + type + ')', function (t) { 26 t.plan(1) 27 t.ok(pass === isReadable(stream), type) 28 }) 29} 30 31 32function testWritable (pass, type, stream) { 33 tape('isWritable(' + type + ')', function (t) { 34 t.plan(1) 35 t.ok(pass === isWritable(stream), type) 36 }) 37} 38 39 40function testDuplex (pass, type, stream) { 41 tape('isDuplex(' + type + ')', function (t) { 42 t.plan(1) 43 t.ok(pass === isDuplex(stream), type) 44 }) 45} 46 47 48[ undefined, null, '', true, false, 0, 1, 1.0, 'string', {}, function foo () {} ].forEach(function (o) { 49 test(false, 'non-stream / primitive: ' + (JSON.stringify(o) || (o && o.toString()) || o), o) 50}) 51 52 53test(false, 'fake stream obj', { pipe: function () {} }) 54 55 56;(function () { 57 58 // looks like a stream! 59 60 function Stream () { 61 EE.call(this) 62 } 63 util.inherits(Stream, EE) 64 Stream.prototype.pipe = function () {} 65 Stream.Stream = Stream 66 67 test(false, 'fake stream "new Stream()"', new Stream()) 68 69}()) 70 71 72test(true, 'CoreStreams.Stream', new (CoreStreams.Stream)()) 73test(true, 'CoreStreams.Readable', new (CoreStreams.Readable)()) 74test(true, 'CoreStreams.Writable', new (CoreStreams.Writable)()) 75test(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) 76test(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) 77test(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)()) 78 79test(true, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) 80test(true, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) 81test(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) 82test(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) 83test(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)()) 84 85test(true, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) 86test(true, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) 87test(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) 88test(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) 89test(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)()) 90 91 92testReadable(false, 'CoreStreams.Stream', new (CoreStreams.Stream)()) 93testReadable(true, 'CoreStreams.Readable', new (CoreStreams.Readable)()) 94testReadable(false, 'CoreStreams.Writable', new (CoreStreams.Writable)()) 95testReadable(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) 96testReadable(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) 97testReadable(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)()) 98 99testReadable(true, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) 100testReadable(false, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) 101testReadable(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) 102testReadable(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) 103testReadable(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)()) 104 105testReadable(true, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) 106testReadable(false, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) 107testReadable(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) 108testReadable(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) 109testReadable(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)()) 110 111 112testWritable(false, 'CoreStreams.Stream', new (CoreStreams.Stream)()) 113testWritable(false, 'CoreStreams.Readable', new (CoreStreams.Readable)()) 114testWritable(true, 'CoreStreams.Writable', new (CoreStreams.Writable)()) 115testWritable(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) 116testWritable(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) 117testWritable(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)()) 118 119testWritable(false, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) 120testWritable(true, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) 121testWritable(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) 122testWritable(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) 123testWritable(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)()) 124 125testWritable(false, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) 126testWritable(true, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) 127testWritable(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) 128testWritable(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) 129testWritable(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)()) 130 131 132testDuplex(false, 'CoreStreams.Stream', new (CoreStreams.Stream)()) 133testDuplex(false, 'CoreStreams.Readable', new (CoreStreams.Readable)()) 134testDuplex(false, 'CoreStreams.Writable', new (CoreStreams.Writable)()) 135testDuplex(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) 136testDuplex(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) 137testDuplex(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)()) 138 139testDuplex(false, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) 140testDuplex(false, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) 141testDuplex(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) 142testDuplex(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) 143testDuplex(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)()) 144 145testDuplex(false, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) 146testDuplex(false, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) 147testDuplex(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) 148testDuplex(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) 149testDuplex(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)()) 150 151 152;[ CoreStreams, ReadableStream10, ReadableStream11 ].forEach(function (p) { 153 [ 'Stream', 'Readable', 'Writable', 'Duplex', 'Transform', 'PassThrough' ].forEach(function (k) { 154 if (!p[k]) 155 return 156 157 function SubStream () { 158 p[k].call(this) 159 } 160 util.inherits(SubStream, p[k]) 161 162 test(true, 'Stream subclass: ' + p.name + '.' + k, new SubStream()) 163 164 }) 165}) 166 167 168 169