169 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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())
 | |
| 
 | |
|   })
 | |
| })
 | |
| 
 | |
| 
 | |
| 
 |