1'use strict';
2const common = require('../common');
3
4// Testing Readable Stream resumeScheduled state
5
6const assert = require('assert');
7const { Readable, Writable } = require('stream');
8
9{
10  // pipe() test case
11  const r = new Readable({ read() {} });
12  const w = new Writable();
13
14  // resumeScheduled should start = `false`.
15  assert.strictEqual(r._readableState.resumeScheduled, false);
16
17  // Calling pipe() should change the state value = true.
18  r.pipe(w);
19  assert.strictEqual(r._readableState.resumeScheduled, true);
20
21  process.nextTick(common.mustCall(() => {
22    assert.strictEqual(r._readableState.resumeScheduled, false);
23  }));
24}
25
26{
27  // 'data' listener test case
28  const r = new Readable({ read() {} });
29
30  // resumeScheduled should start = `false`.
31  assert.strictEqual(r._readableState.resumeScheduled, false);
32
33  r.push(Buffer.from([1, 2, 3]));
34
35  // Adding 'data' listener should change the state value
36  r.on('data', common.mustCall(() => {
37    assert.strictEqual(r._readableState.resumeScheduled, false);
38  }));
39  assert.strictEqual(r._readableState.resumeScheduled, true);
40
41  process.nextTick(common.mustCall(() => {
42    assert.strictEqual(r._readableState.resumeScheduled, false);
43  }));
44}
45
46{
47  // resume() test case
48  const r = new Readable({ read() {} });
49
50  // resumeScheduled should start = `false`.
51  assert.strictEqual(r._readableState.resumeScheduled, false);
52
53  // Calling resume() should change the state value.
54  r.resume();
55  assert.strictEqual(r._readableState.resumeScheduled, true);
56
57  r.on('resume', common.mustCall(() => {
58    // The state value should be `false` again
59    assert.strictEqual(r._readableState.resumeScheduled, false);
60  }));
61
62  process.nextTick(common.mustCall(() => {
63    assert.strictEqual(r._readableState.resumeScheduled, false);
64  }));
65}
66