1 | fs = require 'fs'
|
2 | should = require 'should'
|
3 | esprima = require 'esprima'
|
4 | wrench = require 'wrench'
|
5 | _ = require 'underscore'
|
6 | jscov = require '../lib/coverage'
|
7 |
|
8 | describe "rewriteSource", ->
|
9 |
|
10 | wrench.readdirSyncRecursive('spec/scaffold').forEach (filename) ->
|
11 |
|
12 | return if fs.lstatSync('spec/scaffold/' + filename).isDirectory()
|
13 |
|
14 | code = fs.readFileSync('spec/scaffold/' + filename, 'utf8')
|
15 | newCode = jscov.rewriteSource(code, filename)
|
16 | actualParse = esprima.parse(newCode)
|
17 |
|
18 | expect = fs.readFileSync('spec/expect/' + filename, 'utf8')
|
19 | expectedParse = esprima.parse(expect)
|
20 |
|
21 | it "should parse #{filename} the same way as jscoverage", ->
|
22 | _.isEqual(actualParse, expectedParse).should.be.true
|
23 |
|
24 |
|
25 | it "should throw an exception if the source is not valid", ->
|
26 | f = ->
|
27 | jscov.rewriteSource("console.log 'test'")
|
28 | f.should.throw()
|
29 |
|
30 |
|
31 |
|
32 | describe "rewriteFolder", ->
|
33 |
|
34 | it "should rewrite entire folders recursively", (done) ->
|
35 |
|
36 | wrench.rmdirSyncRecursive('spec/scaffold-out', true)
|
37 |
|
38 | jscov.rewriteFolder 'spec/scaffold', 'spec/scaffold-out', (err) ->
|
39 | should.not.exist err
|
40 | fileCounter = 0
|
41 |
|
42 | wrench.readdirSyncRecursive('spec/scaffold-out').forEach (filename) ->
|
43 | fullpath = 'spec/scaffold-out/' + filename
|
44 | return if fs.lstatSync(fullpath).isDirectory()
|
45 | fileCounter++
|
46 | fs.readFileSync(fullpath, 'utf8').split('\n')[0].should.eql '/* automatically generated by jscov - do not edit */'
|
47 |
|
48 | fileCounter.should.eql 6
|
49 | done()
|
50 |
|
51 |
|
52 | it "should rewrite both javascript and coffee-script, but nothing else", (done) ->
|
53 |
|
54 | wrench.rmdirSyncRecursive('spec/coffee-out', true)
|
55 |
|
56 | jscov.rewriteFolder 'spec/coffee', 'spec/coffee-out', (err) ->
|
57 | should.not.exist err
|
58 | fileCounter = 0
|
59 |
|
60 | wrench.readdirSyncRecursive('spec/coffee-out').forEach (filename) ->
|
61 | fileCounter++
|
62 | fs.readFileSync('spec/coffee-out/' + filename, 'utf8').split('\n')[0].should.eql '/* automatically generated by jscov - do not edit */'
|
63 | filename.should.match /\.js$/
|
64 |
|
65 | fileCounter.should.eql 2
|
66 | done()
|
67 |
|
68 |
|
69 | it "should not create a directory if it encounters an error when processing coffee-script", (done) ->
|
70 |
|
71 | jscov.rewriteFolder 'spec/invalids/cs', 'spec/invalids-out', (err) ->
|
72 | should.exist err
|
73 | fs.lstat 'spec/invalids-out', (err) ->
|
74 | err.code.should.eql 'ENOENT'
|
75 | done()
|
76 |
|
77 |
|
78 | it "should not create a directory if it encounters an error when processing javascript", (done) ->
|
79 |
|
80 | jscov.rewriteFolder 'spec/invalids/js', 'spec/invalids-out', (err) ->
|
81 | should.exist err
|
82 | fs.lstat 'spec/invalids-out', (err) ->
|
83 | err.code.should.eql 'ENOENT'
|
84 | done()
|
85 |
|
86 |
|
87 | it "should overwrite the target directory and remove/replace all files in it", (done) ->
|
88 |
|
89 | wrench.mkdirSyncRecursive('spec/existing/subdir')
|
90 | fs.writeFileSync('spec/existing/foo.js', 'content', 'utf8')
|
91 | fs.writeFileSync('spec/existing/for.js', 'content', 'utf8')
|
92 | fs.writeFileSync('spec/existing/subdir/bar.js', 'content', 'utf8')
|
93 |
|
94 | jscov.rewriteFolder 'spec/scaffold', 'spec/existing', (err) ->
|
95 | should.not.exist err
|
96 | fileCounter = 0
|
97 |
|
98 | wrench.readdirSyncRecursive('spec/existing').forEach (filename) ->
|
99 | fullpath = 'spec/existing/' + filename
|
100 | return if fs.lstatSync(fullpath).isDirectory()
|
101 | fileCounter++
|
102 | fs.readFileSync(fullpath, 'utf8').split('\n')[0].should.eql '/* automatically generated by jscov - do not edit */'
|
103 |
|
104 | fileCounter.should.eql 6
|
105 | done()
|