You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.8 KiB
85 lines
2.8 KiB
/*! |
|
* node-sass: scripts/coverage.js |
|
*/ |
|
|
|
var Mocha = require('mocha'), |
|
fs = require('fs'), |
|
path = require('path'), |
|
mkdirp = require('mkdirp'), |
|
coveralls = require('coveralls'), |
|
istanbul = require('istanbul'), |
|
sourcefiles = ['index.js', 'binding.js', 'extensions.js', 'render.js', 'errors.js'], |
|
summary= istanbul.Report.create('text-summary'), |
|
lcov = istanbul.Report.create('lcovonly', { dir: path.join('coverage') }), |
|
html = istanbul.Report.create('html', { dir: path.join('coverage', 'html') }); |
|
|
|
function coverage() { |
|
var mocha = new Mocha(); |
|
var rep = function(runner) { |
|
runner.on('end', function(){ |
|
var cov = global.__coverage__, |
|
collector = new istanbul.Collector(); |
|
if (cov) { |
|
mkdirp(path.join('coverage', 'html'), function(err) { |
|
if (err) { throw err; } |
|
collector.add(cov); |
|
summary.writeReport(collector, true); |
|
html.writeReport(collector, true); |
|
lcov.on('done', function() { |
|
fs.readFile(path.join('coverage', 'lcov.info'), function(err, data) { |
|
if (err) { console.error(err); } |
|
coveralls.handleInput(data.toString(), |
|
function (err) { if (err) { console.error(err); } }); |
|
}); |
|
}); |
|
lcov.writeReport(collector, true); |
|
}); |
|
} else { |
|
console.warn('No coverage'); |
|
} |
|
}); |
|
}; |
|
var instrumenter = new istanbul.Instrumenter(); |
|
var instrumentedfiles = []; |
|
var processfile = function(source) { |
|
fs.readFile(path.join('lib', source), function(err, data) { |
|
if (err) { throw err; } |
|
mkdirp('lib-cov', function(err) { |
|
if (err) { throw err; } |
|
fs.writeFile(path.join('lib-cov', source), |
|
instrumenter.instrumentSync(data.toString(), |
|
path.join('lib', source)), |
|
function(err) { |
|
if (err) { throw err; } |
|
instrumentedfiles.push(source); |
|
if (instrumentedfiles.length === sourcefiles.length) { |
|
fs.readdirSync('test').filter(function(file){ |
|
return file.substr(-6) === 'api.js' || |
|
file.substr(-11) === 'runtime.js' || |
|
file.substr(-7) === 'spec.js'; |
|
}).forEach(function(file){ |
|
mocha.addFile( |
|
path.join('test', file) |
|
); |
|
}); |
|
process.env.NODESASS_COV = 1; |
|
mocha.reporter(rep).run(function(failures) { |
|
process.on('exit', function () { |
|
process.exit(failures); |
|
}); |
|
}); |
|
} |
|
}); |
|
}); |
|
}); |
|
}; |
|
for (var i in sourcefiles) { |
|
processfile(sourcefiles[i]); |
|
} |
|
} |
|
|
|
/** |
|
* Run |
|
*/ |
|
|
|
coverage();
|
|
|