1'use strict'; 2const common = require('../common'); 3const assert = require('assert'); 4 5const stream = require('stream'); 6let state = 0; 7 8 9// What you do 10// 11// const stream = new stream.Transform({ 12// transform: function transformCallback(chunk, _, next) { 13// // part 1 14// this.push(chunk); 15// //part 2 16// next(); 17// }, 18// final: function endCallback(done) { 19// // part 1 20// process.nextTick(function () { 21// // part 2 22// done(); 23// }); 24// }, 25// flush: function flushCallback(done) { 26// // part 1 27// process.nextTick(function () { 28// // part 2 29// done(); 30// }); 31// } 32// }); 33// t.on('data', dataListener); 34// t.on('end', endListener); 35// t.on('finish', finishListener); 36// t.write(1); 37// t.write(4); 38// t.end(7, endMethodCallback); 39// 40// The order things are called 41// 42// 1. transformCallback part 1 43// 2. dataListener 44// 3. transformCallback part 2 45// 4. transformCallback part 1 46// 5. dataListener 47// 6. transformCallback part 2 48// 7. transformCallback part 1 49// 8. dataListener 50// 9. transformCallback part 2 51// 10. finalCallback part 1 52// 11. finalCallback part 2 53// 12. flushCallback part 1 54// 13. finishListener 55// 14. endMethodCallback 56// 15. flushCallback part 2 57// 16. endListener 58 59const t = new stream.Transform({ 60 objectMode: true, 61 transform: common.mustCall(function(chunk, _, next) { 62 // transformCallback part 1 63 assert.strictEqual(++state, chunk); 64 this.push(state); 65 // transformCallback part 2 66 assert.strictEqual(++state, chunk + 2); 67 process.nextTick(next); 68 }, 3), 69 final: common.mustCall(function(done) { 70 state++; 71 // finalCallback part 1 72 assert.strictEqual(state, 10); 73 state++; 74 // finalCallback part 2 75 assert.strictEqual(state, 11); 76 done(); 77 }, 1), 78 flush: common.mustCall(function(done) { 79 state++; 80 // fluchCallback part 1 81 assert.strictEqual(state, 12); 82 process.nextTick(function() { 83 state++; 84 // fluchCallback part 2 85 assert.strictEqual(state, 15); 86 done(); 87 }); 88 }, 1) 89}); 90t.on('finish', common.mustCall(function() { 91 state++; 92 // finishListener 93 assert.strictEqual(state, 13); 94}, 1)); 95t.on('end', common.mustCall(function() { 96 state++; 97 // endEvent 98 assert.strictEqual(state, 16); 99}, 1)); 100t.on('data', common.mustCall(function(d) { 101 // dataListener 102 assert.strictEqual(++state, d + 1); 103}, 3)); 104t.write(1); 105t.write(4); 106t.end(7, common.mustCall(function() { 107 state++; 108 // endMethodCallback 109 assert.strictEqual(state, 14); 110}, 1)); 111