-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathtest.js
106 lines (87 loc) · 2.25 KB
/
test.js
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
'use strict';
var assert = require('assert')
var duplexify = require('duplexify')
var stream = require('stream')
var StreamEvents = require('./')
var util = require('util')
var tests = []
function FakeStream(_read, _write) {
stream.Transform.call(this)
this._read = _read || function() {}
this._write = _write || function() {}
StreamEvents.call(this)
}
util.inherits(FakeStream, stream.Transform)
test('is a function', function() {
assert.equal(typeof StreamEvents, 'function')
})
test('overwrites _read and _write', function() {
var _readCalled = false
var _writeCalled = false
var fs = new FakeStream(function() {
_readCalled = true
}, function() {
_writeCalled = true
})
assert.strictEqual(_readCalled, false)
fs._read()
assert.strictEqual(_readCalled, true)
assert.strictEqual(_writeCalled, false)
fs._write()
assert.strictEqual(_writeCalled, true)
})
test('emits reading and writing events', function() {
var eventsCalled = 0
var fs = new FakeStream()
fs.on('reading', function() {
assert.equal(++eventsCalled, 1)
})
fs._read()
fs.on('writing', function() {
assert.equal(++eventsCalled, 2)
})
fs._write()
})
test('works with existing stream', function() {
var dup = StreamEvents(duplexify())
var called = false
dup.on('reading', function() {
called = true
})
dup._read()
assert(called)
})
function test(message, fn) {
try {
fn()
tests.push({ success: true, fail: false, message: message })
} catch(e) {
tests.push({ success: false, fail: true, message: message, error: e })
}
}
tests.forEach(function(test, index) {
function black(message) {
return '\u001b[30m' + message + '\u001b[39m'
}
function greenBg(message) {
return '\u001b[42m' + message + '\u001b[49m'
}
function redBg(message) {
return '\u001b[41m' + message + '\u001b[49m'
}
function bold(message) {
return '\u001b[1m' + message + '\u001b[22m'
}
var icon, message
if (test.success) {
icon = '✔︎'
message = greenBg(black(' ' + icon + ' ' + test.message + ' '))
} else {
icon = '✖'
message = redBg(bold(' ' + icon + ' ' + test.message + ' '))
}
console.log((index > 0 ? '\n' : '') + message)
if (test.error) {
console.log(' ' + test.error.stack)
}
})