GT2/GT2-Android/node_modules/istanbul-api/lib/reporter.js

90 lines
2.6 KiB
JavaScript

/*
Copyright 2012-2015, Yahoo Inc.
Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
*/
var path = require('path'),
configuration = require('./config'),
inputError = require('./input-error'),
libReport = require('istanbul-lib-report'),
libReports = require('istanbul-reports');
function Reporter(cfg, opts) {
opts = opts || {};
this.config = cfg || configuration.loadFile();
this.dir = path.resolve(this.config.reporting.dir());
this.reports = {};
var summarizer = opts.summarizer,
s = this.config.reporting.summarizer();
if (summarizer && typeof summarizer === 'function') {
this.summarizer = summarizer;
} else {
summarizer = libReport.summarizers[s];
if (!summarizer) {
throw inputError.create('Invalid summarizer in report config: ' + s);
}
this.summarizer = summarizer;
}
}
Reporter.prototype = {
/**
* adds a report to be generated. Must be one of the entries returned
* by `Report.getReportList()`
* @method add
* @param {String} fmt the format of the report to generate
*/
add: function (fmt) {
if (this.reports[fmt]) { // already added
return;
}
var config = this.config,
rptConfig = config.reporting.reportConfig()[fmt] || {};
rptConfig.verbose = config.verbose;
try {
if (this.config.verbose) {
console.error('Create report', fmt,' with', rptConfig);
}
this.reports[fmt] = libReports.create(fmt, rptConfig);
} catch (ex) {
throw inputError.create('Invalid report format [' + fmt + ']');
}
},
/**
* adds an array of report formats to be generated
* @method addAll
* @param {Array} fmts an array of report formats
*/
addAll: function (fmts) {
var that = this;
fmts.forEach(function (f) {
that.add(f);
});
},
/**
* writes all reports added
* @method write
*/
write: function (coverageMap, opts) {
opts = opts || {};
var that = this,
sourceFinder = opts.sourceFinder || null,
context,
tree;
context = libReport.createContext({
dir: this.dir,
watermarks: this.config.reporting.watermarks(),
sourceFinder: sourceFinder
});
tree = this.summarizer(coverageMap);
Object.keys(this.reports).forEach(function (name) {
var report = that.reports[name];
tree.visit(report, context);
});
}
};
module.exports = Reporter;