| /* |
| Copyright (c) 2012, Yahoo! Inc. All rights reserved. |
| Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. |
| */ |
| |
| var util = require('util'), |
| EventEmitter = require('events').EventEmitter, |
| Factory = require('../util/factory'), |
| factory = new Factory('report', __dirname, false); |
| /** |
| * An abstraction for producing coverage reports. |
| * This class is both the base class as well as a factory for `Report` implementations. |
| * All reports are event emitters and are expected to emit a `done` event when |
| * the report writing is complete. |
| * |
| * See also the `Reporter` class for easily producing multiple coverage reports |
| * with a single call. |
| * |
| * Usage |
| * ----- |
| * |
| * var Report = require('istanbul').Report, |
| * report = Report.create('html'), |
| * collector = new require('istanbul').Collector; |
| * |
| * collector.add(coverageObject); |
| * report.on('done', function () { console.log('done'); }); |
| * report.writeReport(collector); |
| * |
| * @class Report |
| * @module report |
| * @main report |
| * @constructor |
| * @protected |
| * @param {Object} options Optional. The options supported by a specific store implementation. |
| */ |
| function Report(/* options */) { |
| EventEmitter.call(this); |
| } |
| |
| util.inherits(Report, EventEmitter); |
| |
| //add register, create, mix, loadAll, getReportList as class methods |
| factory.bindClassMethods(Report); |
| |
| /** |
| * registers a new report implementation. |
| * @method register |
| * @static |
| * @param {Function} constructor the constructor function for the report. This function must have a |
| * `TYPE` property of type String, that will be used in `Report.create()` |
| */ |
| /** |
| * returns a report implementation of the specified type. |
| * @method create |
| * @static |
| * @param {String} type the type of report to create |
| * @param {Object} opts Optional. Options specific to the report implementation |
| * @return {Report} a new store of the specified type |
| */ |
| /** |
| * returns the list of available reports as an array of strings |
| * @method getReportList |
| * @static |
| * @return an array of supported report formats |
| */ |
| |
| var proto = { |
| /** |
| * returns a one-line summary of the report |
| * @method synopsis |
| * @return {String} a description of what the report is about |
| */ |
| synopsis: function () { |
| throw new Error('synopsis must be overridden'); |
| }, |
| /** |
| * returns a config object that has override-able keys settable via config |
| * @method getDefaultConfig |
| * @return {Object|null} an object representing keys that can be overridden via |
| * the istanbul configuration where the values are the defaults used when |
| * not specified. A null return implies no config attributes |
| */ |
| getDefaultConfig: function () { |
| return null; |
| }, |
| /** |
| * writes the report for a set of coverage objects added to a collector. |
| * @method writeReport |
| * @param {Collector} collector the collector for getting the set of files and coverage |
| * @param {Boolean} sync true if reports must be written synchronously, false if they can be written using asynchronous means (e.g. stream.write) |
| */ |
| writeReport: function (/* collector, sync */) { |
| throw new Error('writeReport: must be overridden'); |
| } |
| }; |
| |
| Object.keys(proto).forEach(function (k) { |
| Report.prototype[k] = proto[k]; |
| }); |
| |
| module.exports = Report; |
| |
| |