| 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', '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();
 |