test-browser.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. var stream = require('stream')
  2. var pump = require('./index')
  3. var rs = new stream.Readable()
  4. var ws = new stream.Writable()
  5. rs._read = function (size) {
  6. this.push(Buffer(size).fill('abc'))
  7. }
  8. ws._write = function (chunk, encoding, cb) {
  9. setTimeout(function () {
  10. cb()
  11. }, 100)
  12. }
  13. var toHex = function () {
  14. var reverse = new (require('stream').Transform)()
  15. reverse._transform = function (chunk, enc, callback) {
  16. reverse.push(chunk.toString('hex'))
  17. callback()
  18. }
  19. return reverse
  20. }
  21. var wsClosed = false
  22. var rsClosed = false
  23. var callbackCalled = false
  24. var check = function () {
  25. if (wsClosed && rsClosed && callbackCalled) console.log('done')
  26. }
  27. ws.on('finish', function () {
  28. wsClosed = true
  29. check()
  30. })
  31. rs.on('end', function () {
  32. rsClosed = true
  33. check()
  34. })
  35. pump(rs, toHex(), toHex(), toHex(), ws, function () {
  36. callbackCalled = true
  37. check()
  38. })
  39. setTimeout(function () {
  40. rs.push(null)
  41. rs.emit('close')
  42. }, 1000)
  43. setTimeout(function () {
  44. if (!check()) throw new Error('timeout')
  45. }, 5000)