• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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