- /*
- Copyright (c) 2012, Yahoo! Inc. All rights reserved.
- Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
- */
-
- var path = require('path'),
- util = require('util'),
- mkdirp = require('mkdirp'),
- defaults = require('./common/defaults'),
- fs = require('fs'),
- utils = require('../object-utils'),
- Report = require('./index');
-
- /**
- * a `Report` implementation that produces text output for overall coverage in summary format.
- *
- * Usage
- * -----
- *
- * var report = require('istanbul').Report.create('text-summary');
- *
- * @class TextSummaryReport
- * @extends Report
- * @module report
- * @constructor
- * @param {Object} opts optional
- * @param {String} [opts.dir] the directory in which to the text coverage report will be written, when writing to a file
- * @param {String} [opts.file] the filename for the report. When omitted, the report is written to console
- */
- function TextSummaryReport(opts) {
- Report.call(this);
- opts = opts || {};
- this.dir = opts.dir || process.cwd();
- this.file = opts.file;
- this.watermarks = opts.watermarks || defaults.watermarks();
- }
-
- TextSummaryReport.TYPE = 'text-summary';
- util.inherits(TextSummaryReport, Report);
-
- function lineForKey(summary, key, watermarks) {
- var metrics = summary[key],
- skipped,
- result,
- clazz = defaults.classFor(key, summary, watermarks);
- key = key.substring(0, 1).toUpperCase() + key.substring(1);
- if (key.length < 12) { key += ' '.substring(0, 12 - key.length); }
- result = [ key , ':', metrics.pct + '%', '(', metrics.covered + '/' + metrics.total, ')'].join(' ');
- skipped = metrics.skipped;
- if (skipped > 0) {
- result += ', ' + skipped + ' ignored';
- }
- return defaults.colorize(result, clazz);
- }
-
- Report.mix(TextSummaryReport, {
- synopsis: function () {
- return 'text report that prints a coverage summary across all files, typically to console';
- },
- getDefaultConfig: function () {
- return { file: null };
- },
- writeReport: function (collector /*, sync */) {
- var summaries = [],
- finalSummary,
- lines = [],
- watermarks = this.watermarks,
- text;
- collector.files().forEach(function (file) {
- summaries.push(utils.summarizeFileCoverage(collector.fileCoverageFor(file)));
- });
- finalSummary = utils.mergeSummaryObjects.apply(null, summaries);
- lines.push('');
- lines.push('=============================== Coverage summary ===============================');
- lines.push.apply(lines, [
- lineForKey(finalSummary, 'statements', watermarks),
- lineForKey(finalSummary, 'branches', watermarks),
- lineForKey(finalSummary, 'functions', watermarks),
- lineForKey(finalSummary, 'lines', watermarks)
- ]);
- lines.push('================================================================================');
- text = lines.join('\n');
- if (this.file) {
- mkdirp.sync(this.dir);
- fs.writeFileSync(path.join(this.dir, this.file), text, 'utf8');
- } else {
- console.log(text);
- }
- this.emit('done');
- }
- });
-
- module.exports = TextSummaryReport;
-
-