|  | var stream = require('stream') | 
|  | var pump = require('./index') | 
|  |  | 
|  | var rs = new stream.Readable() | 
|  | var ws = new stream.Writable() | 
|  |  | 
|  | rs._read = function (size) { | 
|  | this.push(Buffer(size).fill('abc')) | 
|  | } | 
|  |  | 
|  | ws._write = function (chunk, encoding, cb) { | 
|  | setTimeout(function () { | 
|  | cb() | 
|  | }, 100) | 
|  | } | 
|  |  | 
|  | var toHex = function () { | 
|  | var reverse = new (require('stream').Transform)() | 
|  |  | 
|  | reverse._transform = function (chunk, enc, callback) { | 
|  | reverse.push(chunk.toString('hex')) | 
|  | callback() | 
|  | } | 
|  |  | 
|  | return reverse | 
|  | } | 
|  |  | 
|  | var wsClosed = false | 
|  | var rsClosed = false | 
|  | var callbackCalled = false | 
|  |  | 
|  | var check = function () { | 
|  | if (wsClosed && rsClosed && callbackCalled) { | 
|  | console.log('test-browser.js passes') | 
|  | clearTimeout(timeout) | 
|  | } | 
|  | } | 
|  |  | 
|  | ws.on('finish', function () { | 
|  | wsClosed = true | 
|  | check() | 
|  | }) | 
|  |  | 
|  | rs.on('end', function () { | 
|  | rsClosed = true | 
|  | check() | 
|  | }) | 
|  |  | 
|  | var res = pump(rs, toHex(), toHex(), toHex(), ws, function () { | 
|  | callbackCalled = true | 
|  | check() | 
|  | }) | 
|  |  | 
|  | if (res !== ws) { | 
|  | throw new Error('should return last stream') | 
|  | } | 
|  |  | 
|  | setTimeout(function () { | 
|  | rs.push(null) | 
|  | rs.emit('close') | 
|  | }, 1000) | 
|  |  | 
|  | var timeout = setTimeout(function () { | 
|  | check() | 
|  | throw new Error('timeout') | 
|  | }, 5000) |