UNPKG

6.3 kBtext/coffeescriptView Raw
1fs = require 'fs'
2should = require 'should'
3esprima = require 'esprima'
4wrench = require 'wrench'
5_ = require 'underscore'
6jscov = require('./coverage').require 'jscov'
7
8output = "spec/.output"
9
10describe "rewriteSource", ->
11
12 [
13 { folder: 'scaffold' }
14 { folder: 'oss' }
15 { folder: 'js-v1.8', jsversion: '1.8' }
16 ].forEach ({ folder }) ->
17 return if process.env.NOOSS? && folder == 'oss'
18
19 wrench.readdirSyncRecursive('spec/scaffolding/' + folder).forEach (filename) ->
20
21 return if fs.lstatSync('spec/scaffolding/' + folder + '/' + filename).isDirectory() || !filename.match(/\.js$/)
22
23 it "should parse #{filename} the same way as jscoverage", ->
24 code = fs.readFileSync('spec/scaffolding/' + folder + '/' + filename, 'utf8')
25 newCode = jscov.rewriteSource(code, filename)
26 actualParse = esprima.parse(newCode)
27
28 expect = fs.readFileSync(output + '/' + 'expect/' + folder + '/' + filename, 'utf8')
29 expectedParse = esprima.parse(expect)
30
31 # comparing the first three lines of the generated source (to find type of line endings and other file-related stuff)
32 code3 = newCode.split('\n').slice(0, 3).map (x) -> x.replace(/generated by jscov /, 'generated by JSCoverage ')
33 exp3 = expect.split('\n').slice(0, 3)
34 code3.should.eql exp3
35
36 # if !_.isEqual(actualParse, expectedParse)
37 # console.log "WRITING!"
38 # escodegen = require 'escodegen'
39 # fs.writeFileSync('actual.js', escodegen.generate(actualParse, { indent: " " }), 'utf8')
40 # fs.writeFileSync('expected.js', escodegen.generate(expectedParse, { indent: " " }), 'utf8')
41
42 # comparing the ASTs of the files
43 _.isEqual(actualParse, expectedParse).should.be.true
44
45
46
47 it "should throw an exception if the source is not valid", ->
48 f = ->
49 jscov.rewriteSource("console.log 'test'")
50 f.should.throw()
51
52
53
54describe "rewriteFolder", ->
55
56 it "should rewrite entire folders recursively", (done) ->
57
58 wrench.rmdirSyncRecursive(output + '/scaffold-out', true)
59
60 jscov.rewriteFolder 'spec/scaffolding/scaffold', (output + '/scaffold-out'), (err) ->
61 should.not.exist err
62 fileCounter = 0
63
64 wrench.readdirSyncRecursive(output + '/scaffold-out').forEach (filename) ->
65 fullpath = output + '/scaffold-out/' + filename
66 return if fs.lstatSync(fullpath).isDirectory()
67 fileCounter++
68 fs.readFileSync(fullpath, 'utf8').split('\n')[0].should.eql '/* automatically generated by jscov - do not edit */'
69
70 fileCounter.should.eql 12
71 done()
72
73
74 it "should rewrite both javascript and coffee-script, but nothing else", (done) ->
75
76 wrench.rmdirSyncRecursive(output + '/coffee-out', true)
77
78 jscov.rewriteFolder 'spec/scaffolding/coffee', (output + '/coffee-out'), (err) ->
79 should.not.exist err
80 fileCounter = 0
81
82 wrench.readdirSyncRecursive(output + '/coffee-out').forEach (filename) ->
83 fileCounter++
84 fs.readFileSync(output + '/coffee-out/' + filename, 'utf8').split('\n')[0].should.eql '/* automatically generated by jscov - do not edit */'
85 filename.should.match /\.js$/
86
87 fileCounter.should.eql 2
88 done()
89
90
91 it "should not create a directory if it encounters an error when processing coffee-script", (done) ->
92
93 jscov.rewriteFolder 'spec/scaffolding/invalids/cs', output + '/invalids-out', (err) ->
94 should.exist err
95 fs.lstat (output + '/invalids-out'), (err) ->
96 err.code.should.eql 'ENOENT'
97 done()
98
99
100 it "should not create a directory if it encounters an error when processing javascript", (done) ->
101
102 jscov.rewriteFolder 'spec/scaffolding/invalids/js', (output + '/invalids-out'), (err) ->
103 should.exist err
104 fs.lstat (output + '/invalids-out'), (err) ->
105 err.code.should.eql 'ENOENT'
106 done()
107
108
109 it "should report on invalid files, skip them, and process the remaining", (done) ->
110 outdir = output + '/fail-out'
111 wrench.mkdirSyncRecursive(outdir)
112 jscov.rewriteFolder 'spec/scaffolding/fail', outdir, (err) ->
113 fs.exists "#{outdir}/valid.js", (exists) ->
114 exists.should.be.true
115 err.should.be.a 'object'
116 err.message.should.eql 'fail.coffee: missing ) on line 1\nfail.js: Line 2: Unexpected end of input'
117 done()
118
119
120 it "should overwrite the target directory and remove/replace all files in it", (done) ->
121
122 wrench.mkdirSyncRecursive(output + '/existing/subdir')
123 fs.writeFileSync(output + '/existing/foo.js', 'content', 'utf8')
124 fs.writeFileSync(output + '/existing/for.js', 'content', 'utf8')
125 fs.writeFileSync(output + '/existing/subdir/bar.js', 'content', 'utf8')
126
127 jscov.rewriteFolder 'spec/scaffolding/scaffold', (output + '/existing'), (err) ->
128 should.not.exist err
129 fileCounter = 0
130
131 wrench.readdirSyncRecursive(output + '/existing').forEach (filename) ->
132 fullpath = output + '/existing/' + filename
133 return if fs.lstatSync(fullpath).isDirectory()
134 fileCounter++
135 fs.readFileSync(fullpath, 'utf8').split('\n')[0].should.eql '/* automatically generated by jscov - do not edit */'
136
137 fileCounter.should.eql 12
138 done()
139
140
141 it "should not include hidden files", (done) ->
142 jscov.rewriteFolder 'spec/scaffolding/hidden', output + '/hidden-default', {}, (err) ->
143 should.not.exist err
144 wrench.readdirSyncRecursive(output + '/hidden-default').sort().should.eql ['subfolder', 'subfolder/vis.js', 'visible.js']
145 done()
146
147
148 it "should accept a flag for including hidden files", (done) ->
149 jscov.rewriteFolder 'spec/scaffolding/hidden', output + '/hidden-included', { hidden: true }, (err) ->
150 should.not.exist err
151 wrench.readdirSyncRecursive(output + '/hidden-included').sort().should.eql ['.hidden.js', '.hiddensub', '.hiddensub/.h.js', '.hiddensub/v.js', 'subfolder', 'subfolder/.hid.js', 'subfolder/vis.js', 'visible.js']
152 done()
153
154
155 it "should accept a flag for explicitly excluding hidden files", (done) ->
156 jscov.rewriteFolder 'spec/scaffolding/hidden', output + '/hidden-included', { hidden: false }, (err) ->
157 should.not.exist err
158 wrench.readdirSyncRecursive(output + '/hidden-included').sort().should.eql ['subfolder', 'subfolder/vis.js', 'visible.js']
159 done()