• 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/*
9What you do
10const stream = new stream.Transform({
11  transform: function transformCallback(chunk, _, next) {
12    // part 1
13    this.push(chunk);
14    //part 2
15    next();
16  },
17  final: function endCallback(done) {
18    // part 1
19    process.nextTick(function () {
20      // part 2
21      done();
22    });
23  },
24  flush: function flushCallback(done) {
25    // part 1
26    process.nextTick(function () {
27      // part 2
28      done();
29    });
30  }
31});
32t.on('data', dataListener);
33t.on('end', endListener);
34t.on('finish', finishListener);
35t.write(1);
36t.write(4);
37t.end(7, endMethodCallback);
38
39The order things are called
40
411. transformCallback part 1
422. dataListener
433. transformCallback part 2
444. transformCallback part 1
455. dataListener
466. transformCallback part 2
477. transformCallback part 1
488. dataListener
499. transformCallback part 2
5010. finalCallback part 1
5111. finalCallback part 2
5212. flushCallback part 1
5313. finishListener
5414. endMethodCallback
5515. flushCallback part 2
5616. endListener
57*/
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    setTimeout(function() {
74      state++;
75      // finalCallback part 2
76      assert.strictEqual(state, 11);
77      done();
78    }, 100);
79  }, 1),
80  flush: common.mustCall(function(done) {
81    state++;
82    // flushCallback part 1
83    assert.strictEqual(state, 12);
84    process.nextTick(function() {
85      state++;
86      // flushCallback part 2
87      assert.strictEqual(state, 15);
88      done();
89    });
90  }, 1)
91});
92t.on('finish', common.mustCall(function() {
93  state++;
94  // finishListener
95  assert.strictEqual(state, 13);
96}, 1));
97t.on('end', common.mustCall(function() {
98  state++;
99  // end event
100  assert.strictEqual(state, 16);
101}, 1));
102t.on('data', common.mustCall(function(d) {
103  // dataListener
104  assert.strictEqual(++state, d + 1);
105}, 3));
106t.write(1);
107t.write(4);
108t.end(7, common.mustCall(function() {
109  state++;
110  // endMethodCallback
111  assert.strictEqual(state, 14);
112}, 1));
113