-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathtest.coffee
141 lines (112 loc) · 4.8 KB
/
test.coffee
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# run with `mocha --compilers coffee:coffee-script/register gulp/util/test`
assert = require 'assert'
PassThrough = require('stream').PassThrough
path = require 'path'
stripColor = require 'strip-ansi'
Vinyl = require 'vinyl'
count = require './index.coffee'
# create a Vinyl file instance that may or not be a file :P
makeFile = (contents, path) ->
return new Vinyl {path, contents}
# test count() plugin with given options, files, and expected output
test = (options, files, expectedMessage, done) ->
message = ''
options.logger = (msg) -> message += stripColor(msg)
stream = count(options)
stream.on 'data', -> # no op
stream.on 'end', ->
assert.equal message, expectedMessage
done()
stream.write(file) for file in files
stream.end()
return stream
describe 'gulp-count', ->
it 'should count 1 buffer in stream', (done) ->
test {}, [
makeFile(new Buffer('hello world'))
], '1 file', done
it 'should count 3 buffers in stream', (done) ->
test {}, [
makeFile(new Buffer('hello world'))
makeFile(new Buffer('hello friend'))
makeFile(new Buffer('hello goodbye'))
], '3 files', done
it 'should work in stream mode', (done) ->
test {}, [
makeFile(new PassThrough())
makeFile(new PassThrough())
makeFile(new PassThrough())
], '3 files', done
describe 'message', ->
it 'formats logged message', (done) ->
test {message: 'Oh wow, <%= counter %> files'}, [
makeFile(new Buffer('hello world'))
makeFile(new Buffer('hello friend'))
makeFile(new Buffer('hello goodbye'))
], 'Oh wow, 3 files', done
it 'gets `counter` and `files` variables', (done) ->
test {message: 'Look, <%= files %>! A whole <%= counter %>.'}, [
makeFile(new PassThrough())
makeFile(new PassThrough())
makeFile(new PassThrough())
], 'Look, 3 files! A whole 3.', done
it 'explicit false logs nothing', (done) ->
test {message: false}, [
makeFile(new Buffer('hello world'))
], '', done
it 'explicit true logs default message', (done) ->
test {message: true}, [
makeFile(new Buffer('hello world'))
], '1 file', done
it 'can pass message as first argument', (done) ->
message = null
stream = count '## sources updated',
logger: (msg) -> message = stripColor(msg)
stream.on 'data', -> # no op
stream.on 'end', ->
assert.equal message, '1 sources updated'
done()
stream.end makeFile(new PassThrough())
describe 'logEmpty', ->
it 'prints nothing when false', (done) ->
test {logEmpty: false}, [], '', done
it 'uses message when true', (done) ->
test {logEmpty: true}, [], '0 files', done
it 'has no effect if stream not empty', (done) ->
test {logEmpty: true}, [
makeFile(new PassThrough())
], '1 file', done
it 'string is used as template', (done) ->
test {logEmpty: 'NO FILES'}, [], 'NO FILES', done
it 'message=false logs only when stream is empty', (done) ->
test {message: false, logEmpty: true}, [makeFile(new PassThrough())], '', ->
test {message: false, logEmpty: true}, [], '0 files', done
describe 'logFiles', ->
it 'logs each relative file path', (done) ->
filenames = ['one.txt', 'two.csv', 'three.php']
files = filenames.map (f) -> makeFile(new PassThrough(), f)
message = filenames.join('') + '3 files'
test {logFiles: true}, files, message, done
it 'string is used as template', (done) ->
filenames = ['one.txt', 'two.csv', 'three.php']
files = filenames.map (f) -> makeFile(new PassThrough(), f)
message = filenames.map((f) -> "write #{f}").join('') + '3 files'
test {logFiles: "write <%= file.path %>"}, files, message, done
describe 'cwd', ->
it 'affects relative path to each file', (done) ->
filenames = ['boom/pow/one.txt', 'boom/pow/crunch/two.csv', 'boom/three.php']
files = filenames.map (f) -> makeFile(new PassThrough(), f)
message = 'one.txt' + 'crunch/two.csv' + '../three.php' + '3 files'
test {logFiles: true, cwd: 'boom/pow'}, files, message, done
it '"/" provides absolute path', (done) ->
filenames = ['boom/pow/one.txt', 'boom/pow/crunch/two.csv', 'boom/three.php']
files = filenames.map (f) -> makeFile(new PassThrough(), f)
message = filenames.map((f) -> path.join(__dirname, f).substring(1)).join('')
message += '3 files'
test {logFiles: true, cwd: '/'}, files, message, done
describe 'title', ->
it 'is prepended to every message', (done) ->
filenames = ['one.txt', 'two.csv', 'three.php']
files = filenames.map (f) -> makeFile(new PassThrough(), f)
message = filenames.map((f) -> 'test: ' + f).join('') + 'test: 3 files'
test {title: 'test', logFiles: true}, files, message, done