• 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    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