69 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const tape = require('tape')
 | |
| const tee = require('./')
 | |
| const { Readable } = require('streamx')
 | |
| 
 | |
| tape('throttled by eachother', function (t) {
 | |
|   const r = new Readable()
 | |
| 
 | |
|   for (let i = 0; i < 1000; i++) {
 | |
|     r.push(Buffer.alloc(1000))
 | |
|   }
 | |
| 
 | |
|   const [a, b] = tee(r)
 | |
| 
 | |
|   let aTicks = 0
 | |
| 
 | |
|   a.on('data', function (data) {
 | |
|     aTicks++
 | |
|   })
 | |
| 
 | |
|   setTimeout(() => b.read(), 100)
 | |
| 
 | |
|   setTimeout(() => {
 | |
|     t.same(aTicks, 18)
 | |
|     t.end()
 | |
|   }, 200)
 | |
| })
 | |
| 
 | |
| tape('does not premature destroy', function (t) {
 | |
|   const r = new Readable()
 | |
| 
 | |
|   const [a, b] = tee(r)
 | |
| 
 | |
|   r.push('a')
 | |
|   r.push('b')
 | |
|   r.push('c')
 | |
|   r.push(null)
 | |
| 
 | |
|   setTimeout(() => {
 | |
|     const aSeen = []
 | |
|     const bSeen = []
 | |
| 
 | |
|     a.on('data', function (data) {
 | |
|       aSeen.push(data)
 | |
|     })
 | |
|     a.on('end', function () {
 | |
|       aSeen.push(null)
 | |
|     })
 | |
| 
 | |
|     b.on('data', function (data) {
 | |
|       bSeen.push(data)
 | |
|     })
 | |
|     b.on('end', function () {
 | |
|       bSeen.push(null)
 | |
|     })
 | |
| 
 | |
|     let missing = 2
 | |
|     a.on('close', onclose)
 | |
|     b.on('close', onclose)
 | |
| 
 | |
|     function onclose () {
 | |
|       if (--missing === 0) {
 | |
|         t.same(aSeen, ['a', 'b', 'c', null])
 | |
|         t.same(bSeen, ['a', 'b', 'c', null])
 | |
|         t.end()
 | |
|       }
 | |
|     }
 | |
|   }, 200)
 | |
| })
 |