var tape = require('tape')
, EE = require('events').EventEmitter , util = require('util') , isStream = require('./') , isReadable = require('./').isReadable , isWritable = require('./').isWritable , isDuplex = require('./').isDuplex , CoreStreams = require('stream') , ReadableStream10 = require('./readable-stream-1.0/') , ReadableStream11 = require('./readable-stream-1.1/')
function test (pass, type, stream) {
tape('isStream(' + type + ')', function (t) { t.plan(1) t.ok(pass === isStream(stream), type) })
}
function testReadable (pass, type, stream) {
tape('isReadable(' + type + ')', function (t) { t.plan(1) t.ok(pass === isReadable(stream), type) })
}
function testWritable (pass, type, stream) {
tape('isWritable(' + type + ')', function (t) { t.plan(1) t.ok(pass === isWritable(stream), type) })
}
function testDuplex (pass, type, stream) {
tape('isDuplex(' + type + ')', function (t) { t.plan(1) t.ok(pass === isDuplex(stream), type) })
}
[ undefined, null, '', true, false, 0, 1, 1.0, 'string', {}, function foo () {} ].forEach(function (o) {
test(false, 'non-stream / primitive: ' + (JSON.stringify(o) || (o && o.toString()) || o), o)
})
test(false, 'fake stream obj', { pipe: function () {} })
;(function () {
// looks like a stream! function Stream () { EE.call(this) } util.inherits(Stream, EE) Stream.prototype.pipe = function () {} Stream.Stream = Stream test(false, 'fake stream "new Stream()"', new Stream())
}())
test(true, 'CoreStreams.Stream', new (CoreStreams.Stream)()) test(true, 'CoreStreams.Readable', new (CoreStreams.Readable)()) test(true, 'CoreStreams.Writable', new (CoreStreams.Writable)()) test(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) test(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) test(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)())
test(true, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) test(true, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) test(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) test(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) test(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)())
test(true, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) test(true, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) test(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) test(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) test(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)())
testReadable(false, 'CoreStreams.Stream', new (CoreStreams.Stream)()) testReadable(true, 'CoreStreams.Readable', new (CoreStreams.Readable)()) testReadable(false, 'CoreStreams.Writable', new (CoreStreams.Writable)()) testReadable(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) testReadable(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) testReadable(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)())
testReadable(true, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) testReadable(false, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) testReadable(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) testReadable(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) testReadable(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)())
testReadable(true, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) testReadable(false, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) testReadable(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) testReadable(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) testReadable(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)())
testWritable(false, 'CoreStreams.Stream', new (CoreStreams.Stream)()) testWritable(false, 'CoreStreams.Readable', new (CoreStreams.Readable)()) testWritable(true, 'CoreStreams.Writable', new (CoreStreams.Writable)()) testWritable(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) testWritable(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) testWritable(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)())
testWritable(false, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) testWritable(true, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) testWritable(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) testWritable(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) testWritable(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)())
testWritable(false, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) testWritable(true, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) testWritable(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) testWritable(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) testWritable(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)())
testDuplex(false, 'CoreStreams.Stream', new (CoreStreams.Stream)()) testDuplex(false, 'CoreStreams.Readable', new (CoreStreams.Readable)()) testDuplex(false, 'CoreStreams.Writable', new (CoreStreams.Writable)()) testDuplex(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) testDuplex(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) testDuplex(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)())
testDuplex(false, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) testDuplex(false, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) testDuplex(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) testDuplex(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) testDuplex(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)())
testDuplex(false, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) testDuplex(false, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) testDuplex(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) testDuplex(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) testDuplex(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)())
;[ CoreStreams, ReadableStream10, ReadableStream11 ].forEach(function (p) {
[ 'Stream', 'Readable', 'Writable', 'Duplex', 'Transform', 'PassThrough' ].forEach(function (k) { if (!p[k]) return function SubStream () { p[k].call(this) } util.inherits(SubStream, p[k]) test(true, 'Stream subclass: ' + p.name + '.' + k, new SubStream()) })
})