UNPKG

box-view-api

Version:

Box View API, node.js client library

108 lines (88 loc) 3.36 kB
/** * 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;