|
3 | 3 | const chai = require('chai'); |
4 | 4 | const assert = chai.assert; |
5 | 5 | const es = require('event-stream'); |
| 6 | +const devnull = require('dev-null'); |
| 7 | + |
6 | 8 | const PacedWorkStream = require('../lib/main'); |
7 | 9 |
|
8 | 10 | describe('PacedWorkStream', () => { |
@@ -30,7 +32,7 @@ describe('PacedWorkStream', () => { |
30 | 32 | }); |
31 | 33 |
|
32 | 34 | const reader = es.readArray([11, 12, 21, 22, 31]) |
33 | | - reader.pipe(pwStream); |
| 35 | + reader.pipe(pwStream).pipe(devnull({ objectMode: true })); |
34 | 36 | }); |
35 | 37 |
|
36 | 38 | it('raises done event', (done) => { |
@@ -67,4 +69,57 @@ describe('PacedWorkStream', () => { |
67 | 69 | reader.pipe(pwStream).pipe(writer); |
68 | 70 | }); |
69 | 71 | }); |
| 72 | + |
| 73 | + context('workPromise returns no promises sometimes', () => { |
| 74 | + it('raises done event', (done) => { |
| 75 | + const pwStream = new PacedWorkStream({ |
| 76 | + concurrency: 3, |
| 77 | + workMS: 0 |
| 78 | + }, function(item) { |
| 79 | + if (item % 10 === 2) { |
| 80 | + return Promise.resolve(item.toString()) |
| 81 | + .then((r) => { this.countTag('workDone'); return r; }); |
| 82 | + } |
| 83 | + }) |
| 84 | + .on('done', function() { |
| 85 | + assert.deepEqual(this.tagCounts, { workDone: 2 }); |
| 86 | + done(); |
| 87 | + }).on('error', (err) => { |
| 88 | + assert.ifError(err); |
| 89 | + done(); |
| 90 | + }); |
| 91 | + |
| 92 | + const reader = es.readArray([11, 12, 21, 22, 31]) |
| 93 | + const writer = es.writeArray(function(err, array) { |
| 94 | + assert.deepEqual(array, ['12', '22']); |
| 95 | + }); |
| 96 | + |
| 97 | + reader.pipe(pwStream).pipe(writer); |
| 98 | + }); |
| 99 | + }); |
| 100 | + |
| 101 | + context('workPromise does not return promises at all', () => { |
| 102 | + it('raises done event', (done) => { |
| 103 | + const pwStream = new PacedWorkStream({ |
| 104 | + concurrency: 3, |
| 105 | + workMS: 0 |
| 106 | + }, function(item) { |
| 107 | + return; |
| 108 | + }) |
| 109 | + .on('done', function() { |
| 110 | + assert.deepEqual(this.tagCounts, {}); |
| 111 | + done(); |
| 112 | + }).on('error', (err) => { |
| 113 | + assert.ifError(err); |
| 114 | + done(); |
| 115 | + }); |
| 116 | + |
| 117 | + const reader = es.readArray([11, 12, 21, 22, 31]) |
| 118 | + const writer = es.writeArray(function(err, array) { |
| 119 | + assert.deepEqual(array, []); |
| 120 | + }); |
| 121 | + |
| 122 | + reader.pipe(pwStream).pipe(writer); |
| 123 | + }); |
| 124 | + }); |
70 | 125 | }); |
0 commit comments