direct-dev
Version:
Yandex Direct dev tools
49 lines (40 loc) • 1.9 kB
JavaScript
/** [empty-test-result](https://github.com/direct-adv-interfaces/direct-dev/TECHS.md#empty-test-result) */
var require2 = require('../utils/require2');
var vow = require2('enb/node_modules/vow', 'vow');
var vowFs = require2('enb/node_modules/vow-fs', 'vow-fs');
var buildFlow = require('enb/lib/build-flow');
var istanbul = require('istanbul');
var BlockFilter = require('../utils/block-filter');
function createEmptyResultString(coverage) {
var now = new Date();
return JSON.stringify({
result: {
stats: { suites: 0, tests: 0, passes: 0, pending: 0, failures: 0, start: now, end: now, duration: 0 },
tests: [],
pending: [],
failures: [],
passes: []
},
coverage: coverage
}, null, 2);
}
var withCoverage = buildFlow.create().name('empty-test-result').target('target', '?.test-result.json').defineOption('filter').useFileList('js').builder(function (paths) {
var filter = this.getOption('filter', BlockFilter.empty);
return vow.all(paths.filter(filter.enb).map(function (file) {
return vowFs.read(file.fullname, 'utf8').then(function (content) {
var instrumenter = new istanbul.Instrumenter({ embedSource: true });
instrumenter.instrumentSync(content, file.fullname);
return instrumenter.lastFileCoverage();
});
})).then(function (coverages) {
return createEmptyResultString(coverages.reduce(function (resultCoverage, coverage) {
resultCoverage[coverage.path] = coverage;
return resultCoverage;
}, {}));
});
}).createTech();
var noCoverage = buildFlow.create().name('empty-test-result').target('target', '?.test-result.json').builder(createEmptyResultString).createTech();
module.exports = function (needCoverage) {
return needCoverage ? withCoverage : noCoverage;
};
;