box-view-api
Version:
Box View API, node.js client library
108 lines (88 loc) • 3.36 kB
JavaScript
/**
* Module dependencies.
*/
var Base = require('mocha/lib/reporters/base');
var utils = require('mocha/lib/utils');
/**
* Initialize a new `DocGen` reporter.
*
* @param {Runner} runner
* @api public
*/
function DocGen(runner) {
Base.call(this, runner);
var self = this;
var stats = this.stats;
var total = runner.total;
var indents = 2;
var unclosedSuites=0;
function indent() {
return new Array(indents).join(' ');
}
function closeSuite() {
console.log('%s</dl>', indent());
--indents;
console.log('%s</section>', indent());
--indents;
unclosedSuites--;
}
runner.on('suite', function(suite){
if (suite.root) { return; }
++indents;
console.log('%s<section class="suite">', indent());
++indents;
console.log('%s<h1>%s</h1>', indent(), utils.escape(suite.title));
console.log('%s<dl>', indent());
unclosedSuites++;
});
runner.on('suite end', function(suite){
if (suite.root) { return; }
closeSuite();
});
runner.on('pass', function(test){
console.log('%s <dt class="test pass collapsed">%s</dt>', indent(), utils.escape(test.title));
var code = utils.escape(utils.clean(test.fn.toString()));
console.log('%s <dd class="test pass collapsed"><pre><code>%s</code></pre></dd>', indent(), code);
});
runner.on('pending', function(test){
console.log('%s <dt class="test pending collapsed">%s</dt>', indent(), utils.escape(test.title));
console.log('%s <dd class="test pending collapsed"><pre><code>No test code</code></pre></dd>', indent());
});
runner.on('fail', function(test, err){
console.log('%s <dt class="test fail collapsed">%s: [Failed with: %s]</dt>', indent(), utils.escape(test.title), utils.escape(err.message));
var code = utils.escape(utils.clean(test.fn.toString()));
console.log('%s <dd class="test fail collapsed"><pre><code>%s</code></pre></dd>', indent(), code);
});
runner.on('end', function() {
while (unclosedSuites > 0) {
closeSuite();
}
++indents;
console.log('%s<section class="summary">', indent());
++indents;
console.log('%s<section class="stats">', indent());
++indents;
console.log('%s<dt class="test pass">Passed</dt>', indent());
console.log('%s<dd class="test pass">%d</dd>', indent(), stats.passes );
console.log('%s<dt class="test fail">Failed</dt>', indent());
console.log('%s<dd class="test fail">%d</dd>', indent(), stats.failures );
console.log('%s<dt class="test pending">Pending</dt>', indent());
console.log('%s<dd class="test pending">%d</dd>', indent(), stats.pending );
--indents;
console.log('%s</section>', indent());
++indents;
console.log('%s<section class="totals">', indent());
console.log('%s<dt class="suites">Suites</dt>', indent());
console.log('%s<dd class="suites">%d</dd>', indent(), stats.suites );
console.log('%s<dt class="duration">Duration</dt>', indent());
console.log('%s<dd class="duration">%d ms</dd>', indent(), (stats.duration / 1000) );
console.log('%s<dt class="total">Total</dt>', indent());
console.log('%s<dd class="total">%d</dd>', indent(), stats.tests );
--indents;
console.log('%s</section>', indent());
--indents;
console.log('%s</section>', indent());
--indents;
});
}
module.exports = DocGen;