pipe.js 884 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. var assert = require('assert');
  2. var Lazy = require('..');
  3. var EventEmitter = require('events').EventEmitter;
  4. function range(i, j) {
  5. var r = [];
  6. for (;i<j;i++) r.push(i);
  7. return r;
  8. }
  9. exports.pipe = function () {
  10. var em = new EventEmitter;
  11. var i = 0;
  12. var iv = setInterval(function () {
  13. em.emit('data', i++);
  14. }, 10);
  15. var caught = { pipe : 0, end : 0 };
  16. em.on('pipe', function () {
  17. caught.pipe ++;
  18. setTimeout(em.emit.bind(em, 'end'), 50);
  19. });
  20. em.on('end', function () { caught.end ++ });
  21. var joined = 0;
  22. Lazy(em).take(10).join(function (xs) {
  23. assert.deepEqual(xs, range(0, 10));
  24. clearInterval(iv);
  25. joined ++;
  26. });
  27. setTimeout(function () {
  28. assert.equal(joined, 1);
  29. assert.equal(caught.pipe, 1);
  30. assert.equal(caught.end, 1);
  31. }, 1000);
  32. }