Blame view

node_modules/duplex/test/index.js 2.03 KB
f7563de62   Palak Handa   first commit
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
  var assert = require('assert')
  var duplex = require('..')
  
  function test(message, func) {
    console.log('#', message)
    func(duplex())
  }
  
  
  test("write(data) -> emit('_data', data)", function (d) {
    var a = null
    d.on('_data', function (d) {
      a = d
    })
    var e = Math.random()
    d.write(e)
    assert.equal(a, e)  
  })
  
  test("emit('pause') -> write(data) === false", function (d) {
    var a = null
    assert.equal(d.write(1), true)
    d.emit('pause')
    assert.equal(d.write(2), false)
    d.emit('drain')
    assert.equal(d.write(3), true)
  })
  
  test("_data(data) -> emit('data', data)", function (d) {
  
    var a = null, e
    d.on('data', function (d) {
      a = d
    })
    d.pause()
    assert.equal(a, null)  
    d._data(e = Math.random())
    assert.equal(a, null)
    d.resume()
    assert.equal(a, e) 
  })
  
  test("_end(data) -> emit('end', data)", function (d) {
  
    var a = false
  
    d.on('end', function (d) {
      a = true
    })
  
    d.pause()
    d._end()
    assert.equal(a, false, 'pause should buffer end')
    d.resume()
    assert.equal(a, true, 'resume should drain end')
    assert.equal(d.readable, false, 'emitting end should set readable = false')
  })
  
  test('end() -> emit(\'_end\')', function (d) {
  
    var a = false
    d.on('_end', function (d) {
      a = true
    })
  
    assert.equal(d.writable, true,'writable should start true')
    d.end()
    assert.equal(d.writable, false,'emitEnd should set writable=false')
    d.resume()
    assert.equal(a, true) 
  
  })
  
  test('end() & emit(\'end\') -> emit(\'close\')', function(d){
    var a = false
  
    d.on('close', function () {
      a = true
    })
  
    assert.equal(a, false)
    d._end()
    d.end()
    d.resume()
    process.nextTick(function () {
      assert(a, true, 'destroy is called after both ends finish')
    })
  })
  
  test('start in nextTick', function () {
    var a = null, e = null
    process.nextTick(function () {
      assert.equal(a, null)
    })
    //use this d, so I have a chance to set an earlier nextTick. 
    d = duplex()
  
    d.on('data', function (data) {
      a = data
    })
  
    d._data(e = Math.random())
    
    process.nextTick(function () {
      assert.equal(a, e)
    }) 
  
  })