2 Copyright (c) 2012, Yahoo! Inc. All rights reserved.
3 Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
6 var path = require('path'),
7 util = require('util'),
8 mkdirp = require('mkdirp'),
9 defaults = require('./common/defaults'),
11 utils = require('../object-utils'),
12 Report = require('./index');
15 * a `Report` implementation that produces text output for overall coverage in summary format.
20 * var report = require('istanbul').Report.create('text-summary');
22 * @class TextSummaryReport
26 * @param {Object} opts optional
27 * @param {String} [opts.dir] the directory in which to the text coverage report will be written, when writing to a file
28 * @param {String} [opts.file] the filename for the report. When omitted, the report is written to console
30 function TextSummaryReport(opts) {
33 this.dir = opts.dir || process.cwd();
34 this.file = opts.file;
35 this.watermarks = opts.watermarks || defaults.watermarks();
38 TextSummaryReport.TYPE = 'text-summary';
39 util.inherits(TextSummaryReport, Report);
41 function lineForKey(summary, key, watermarks) {
42 var metrics = summary[key],
45 clazz = defaults.classFor(key, summary, watermarks);
46 key = key.substring(0, 1).toUpperCase() + key.substring(1);
47 if (key.length < 12) { key += ' '.substring(0, 12 - key.length); }
48 result = [ key , ':', metrics.pct + '%', '(', metrics.covered + '/' + metrics.total, ')'].join(' ');
49 skipped = metrics.skipped;
51 result += ', ' + skipped + ' ignored';
53 return defaults.colorize(result, clazz);
56 Report.mix(TextSummaryReport, {
57 synopsis: function () {
58 return 'text report that prints a coverage summary across all files, typically to console';
60 getDefaultConfig: function () {
61 return { file: null };
63 writeReport: function (collector /*, sync */) {
67 watermarks = this.watermarks,
69 collector.files().forEach(function (file) {
70 summaries.push(utils.summarizeFileCoverage(collector.fileCoverageFor(file)));
72 finalSummary = utils.mergeSummaryObjects.apply(null, summaries);
74 lines.push('=============================== Coverage summary ===============================');
75 lines.push.apply(lines, [
76 lineForKey(finalSummary, 'statements', watermarks),
77 lineForKey(finalSummary, 'branches', watermarks),
78 lineForKey(finalSummary, 'functions', watermarks),
79 lineForKey(finalSummary, 'lines', watermarks)
81 lines.push('================================================================================');
82 text = lines.join('\n');
84 mkdirp.sync(this.dir);
85 fs.writeFileSync(path.join(this.dir, this.file), text, 'utf8');
93 module.exports = TextSummaryReport;