schangxiang@126.com
2025-09-19 0821aa23eabe557c0d9ef5dbe6989c68be35d1fe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 
var Readable = require('../lib/lazystream').Readable;
var DummyReadable = require('./helper').DummyReadable;
 
exports.readable = {
  dummy: function(test) {
    var expected = [ 'line1\n', 'line2\n' ];
    var actual = [];
 
    test.expect(1);
 
    new DummyReadable([].concat(expected))
      .on('data', function(chunk) {
        actual.push(chunk.toString());
      })
      .on('end', function() {
        test.equal(actual.join(''), expected.join(''), 'DummyReadable should produce the data it was created with');
        test.done();
      });
  },
  options: function(test) {
    test.expect(3);
 
    var readable = new Readable(function(options) {
       test.ok(this instanceof Readable, "Readable should bind itself to callback's this");
       test.equal(options.encoding, "utf-8", "Readable should make options accessible to callback");
       this.ok = true;
       return new DummyReadable(["test"]);
    }, {encoding: "utf-8"});
 
    readable.read(4);
 
    test.ok(readable.ok);
 
    test.done();
  },
  streams2: function(test) {
    var expected = [ 'line1\n', 'line2\n' ];
    var actual = [];
    var instantiated = false;
 
    test.expect(2);
 
    var readable = new Readable(function() {
      instantiated = true;
      return new DummyReadable([].concat(expected));
    });
 
    test.equal(instantiated, false, 'DummyReadable should only be instantiated when it is needed');
 
    readable.on('readable', function() {
      var chunk;
      while ((chunk = readable.read())) {
        actual.push(chunk.toString());
      }
    });
    readable.on('end', function() {
      test.equal(actual.join(''), expected.join(''), 'Readable should not change the data of the underlying stream');
      test.done();
    });
 
    readable.read(0);
  },
  resume: function(test) {
    var expected = [ 'line1\n', 'line2\n' ];
    var actual = [];
    var instantiated = false;
 
    test.expect(2);
 
    var readable = new Readable(function() {
      instantiated = true;
      return new DummyReadable([].concat(expected));
    });
 
    readable.pause();
 
    readable.on('data', function(chunk) {
      actual.push(chunk.toString());
    });
    readable.on('end', function() {
      test.equal(actual.join(''), expected.join(''), 'Readable should not change the data of the underlying stream');
      test.done();
    });
 
    test.equal(instantiated, false, 'DummyReadable should only be instantiated when it is needed');
 
    readable.resume();
  }
};