12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /*!
- * 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', '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();
|