1 var tape = require('tape')
2 , EE = require('events').EventEmitter
3 , util = require('util')
6 , isStream = require('./')
7 , isReadable = require('./').isReadable
8 , isWritable = require('./').isWritable
9 , isDuplex = require('./').isDuplex
11 , CoreStreams = require('stream')
12 , ReadableStream10 = require('./readable-stream-1.0/')
13 , ReadableStream11 = require('./readable-stream-1.1/')
16 function test (pass, type, stream) {
17 tape('isStream(' + type + ')', function (t) {
19 t.ok(pass === isStream(stream), type)
24 function testReadable (pass, type, stream) {
25 tape('isReadable(' + type + ')', function (t) {
27 t.ok(pass === isReadable(stream), type)
32 function testWritable (pass, type, stream) {
33 tape('isWritable(' + type + ')', function (t) {
35 t.ok(pass === isWritable(stream), type)
40 function testDuplex (pass, type, stream) {
41 tape('isDuplex(' + type + ')', function (t) {
43 t.ok(pass === isDuplex(stream), type)
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)
53 test(false, 'fake stream obj', { pipe: function () {} })
58 // looks like a stream!
63 util.inherits(Stream, EE)
64 Stream.prototype.pipe = function () {}
65 Stream.Stream = Stream
67 test(false, 'fake stream "new Stream()"', new Stream())
72 test(true, 'CoreStreams.Stream', new (CoreStreams.Stream)())
73 test(true, 'CoreStreams.Readable', new (CoreStreams.Readable)())
74 test(true, 'CoreStreams.Writable', new (CoreStreams.Writable)())
75 test(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)())
76 test(true, 'CoreStreams.Transform', new (CoreStreams.Transform)())
77 test(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)())
79 test(true, 'ReadableStream10.Readable', new (ReadableStream10.Readable)())
80 test(true, 'ReadableStream10.Writable', new (ReadableStream10.Writable)())
81 test(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)())
82 test(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)())
83 test(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)())
85 test(true, 'ReadableStream11.Readable', new (ReadableStream11.Readable)())
86 test(true, 'ReadableStream11.Writable', new (ReadableStream11.Writable)())
87 test(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)())
88 test(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)())
89 test(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)())
92 testReadable(false, 'CoreStreams.Stream', new (CoreStreams.Stream)())
93 testReadable(true, 'CoreStreams.Readable', new (CoreStreams.Readable)())
94 testReadable(false, 'CoreStreams.Writable', new (CoreStreams.Writable)())
95 testReadable(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)())
96 testReadable(true, 'CoreStreams.Transform', new (CoreStreams.Transform)())
97 testReadable(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)())
99 testReadable(true, 'ReadableStream10.Readable', new (ReadableStream10.Readable)())
100 testReadable(false, 'ReadableStream10.Writable', new (ReadableStream10.Writable)())
101 testReadable(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)())
102 testReadable(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)())
103 testReadable(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)())
105 testReadable(true, 'ReadableStream11.Readable', new (ReadableStream11.Readable)())
106 testReadable(false, 'ReadableStream11.Writable', new (ReadableStream11.Writable)())
107 testReadable(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)())
108 testReadable(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)())
109 testReadable(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)())
112 testWritable(false, 'CoreStreams.Stream', new (CoreStreams.Stream)())
113 testWritable(false, 'CoreStreams.Readable', new (CoreStreams.Readable)())
114 testWritable(true, 'CoreStreams.Writable', new (CoreStreams.Writable)())
115 testWritable(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)())
116 testWritable(true, 'CoreStreams.Transform', new (CoreStreams.Transform)())
117 testWritable(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)())
119 testWritable(false, 'ReadableStream10.Readable', new (ReadableStream10.Readable)())
120 testWritable(true, 'ReadableStream10.Writable', new (ReadableStream10.Writable)())
121 testWritable(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)())
122 testWritable(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)())
123 testWritable(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)())
125 testWritable(false, 'ReadableStream11.Readable', new (ReadableStream11.Readable)())
126 testWritable(true, 'ReadableStream11.Writable', new (ReadableStream11.Writable)())
127 testWritable(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)())
128 testWritable(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)())
129 testWritable(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)())
132 testDuplex(false, 'CoreStreams.Stream', new (CoreStreams.Stream)())
133 testDuplex(false, 'CoreStreams.Readable', new (CoreStreams.Readable)())
134 testDuplex(false, 'CoreStreams.Writable', new (CoreStreams.Writable)())
135 testDuplex(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)())
136 testDuplex(true, 'CoreStreams.Transform', new (CoreStreams.Transform)())
137 testDuplex(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)())
139 testDuplex(false, 'ReadableStream10.Readable', new (ReadableStream10.Readable)())
140 testDuplex(false, 'ReadableStream10.Writable', new (ReadableStream10.Writable)())
141 testDuplex(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)())
142 testDuplex(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)())
143 testDuplex(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)())
145 testDuplex(false, 'ReadableStream11.Readable', new (ReadableStream11.Readable)())
146 testDuplex(false, 'ReadableStream11.Writable', new (ReadableStream11.Writable)())
147 testDuplex(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)())
148 testDuplex(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)())
149 testDuplex(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)())
152 ;[ CoreStreams, ReadableStream10, ReadableStream11 ].forEach(function (p) {
153 [ 'Stream', 'Readable', 'Writable', 'Duplex', 'Transform', 'PassThrough' ].forEach(function (k) {
157 function SubStream () {
160 util.inherits(SubStream, p[k])
162 test(true, 'Stream subclass: ' + p.name + '.' + k, new SubStream())