index.js
2.03 KB
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)
})
})