From a0cbb4efb482736650277e5eb3e3b709b4036f84 Mon Sep 17 00:00:00 2001 From: Daniel Sabelnikov Date: Fri, 10 Apr 2015 12:10:59 +0300 Subject: [PATCH 1/2] #25: do not measure coverage for ?.spec.js --- lib/node-configurator.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/node-configurator.js b/lib/node-configurator.js index 1b2f644..c212738 100644 --- a/lib/node-configurator.js +++ b/lib/node-configurator.js @@ -127,9 +127,15 @@ exports.configure = function (config, options) { sourceSuffixes: ['spec.js'], filesTarget: '?.base.files' }], + [borschik, { + source: '?.pure.spec.js', + target: '?.resolved.spec.js', + freeze: true, + minify: false + }], [mergeFiles, { target: '?.pre.spec.js', - sources: ['?.browser.js', '?.browser.bemhtml.js', '?.pure.spec.js'] + sources: ['?.browser.js', '?.browser.bemhtml.js', '?.resolved.spec.js'] }] ]); From fbe6085f63572b34eb4cff69f4dec73ebd004746 Mon Sep 17 00:00:00 2001 From: Daniel Sabelnikov Date: Tue, 12 May 2015 16:09:21 +0300 Subject: [PATCH 2/2] Include uncovered files with zero coverage --- lib/plugin.js | 7 +++++-- lib/runner.js | 35 +++++++++++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/lib/plugin.js b/lib/plugin.js index faf18d9..8a5d9ff 100644 --- a/lib/plugin.js +++ b/lib/plugin.js @@ -13,7 +13,8 @@ module.exports = function (helper) { var root = helper.getRootPath(), dstpath = path.resolve(root, options.destPath), nodes = {}, - nodesToRun = {}; + nodesToRun = {}, + sources = []; options || (options = {}); options.sourceLevels || (options.sourceLevels = options.levels); @@ -49,6 +50,8 @@ module.exports = function (helper) { (nodesToRun[node] = true); } } + } else if (options.jsSuffixes.indexOf(file.suffix) !== -1) { + sources.push(path.relative(root, file.fullname)); } }); @@ -106,7 +109,7 @@ module.exports = function (helper) { var toRun = Object.keys(nodesToRun); - return toRun.length && runner.run(toRun, root); + return toRun.length && runner.run(toRun, root, sources); }); } }; diff --git a/lib/runner.js b/lib/runner.js index e53bd54..4e65dd7 100644 --- a/lib/runner.js +++ b/lib/runner.js @@ -11,11 +11,13 @@ var fs = require('fs'), covIdx; if (NEED_COVERAGE) { - covCollector = new (require('istanbul').Collector)(); + istanbul = require('istanbul') + covCollector = new (istanbul.Collector)(), + instrumenter = new (istanbul.Instrumenter)(), covIdx = 0; } -exports.run = function (targets, root) { +exports.run = function (targets, root, sources) { var isWinOS = path.sep === '\\', exec = require('child_process').exec, MOCHA_PHANTOM_BIN = path.resolve(__dirname, '../node_modules/.bin/mocha-phantomjs' + (isWinOS ? '.cmd' : '')), @@ -128,9 +130,34 @@ exports.run = function (targets, root) { function storeFinalCoverage() { var covFile = path.resolve(root, 'coverage.json'); - fs.writeFileSync(covFile, JSON.stringify(covCollector.getFinalCoverage()), 'utf8'); + // add all files not covered by specs with zero coverage + var store = covCollector.store, + transformer = instrumenter.instrumentSync.bind(instrumenter), + config = istanbul.config.loadFile(); + data = {}; - covCollector.dispose(); + istanbul.matcherFor({ + includes: sources, + excludes: store.keys().concat(config.instrumentation.excludes()) + }, function(err, matcher) { + matcher.files.forEach(function(file) { + // As implemented here: https://github.com/gotwarlost/istanbul/blob/master/lib/command/common/run-with-cover.js#L222 + var key = path.relative(root, file); + transformer(fs.readFileSync(file, 'utf-8'), key); + + Object.keys(instrumenter.coverState.s).forEach(function (key) { + instrumenter.coverState.s[key] = 0; + }); + + data[key] = instrumenter.coverState; + }); + + covCollector.add(data); + + fs.writeFileSync(covFile, JSON.stringify(covCollector.getFinalCoverage()), 'utf8'); + + covCollector.dispose(); + }); } return deferer.promise();