UNPKG

uitest

Version:

Run mocha in a browser environment.

107 lines (88 loc) 2.08 kB
'use strict'; /** * @module Markdown */ /** * Module dependencies. */ const Base = require('./base'); const utils = require('../utils'); /** * Constants */ const SUITE_PREFIX = '$'; /** * Expose `Markdown`. */ exports = module.exports = Markdown; /** * Initialize a new `Markdown` reporter. * * @public * @class * @memberof Mocha.reporters * @augments Mocha.reporters.Base * @api public * @param {Runner} runner */ function Markdown(runner) { Base.call(this, runner); let level = 0; let buf = ''; function title(str) { return Array(level).join('#') + ' ' + str; } function mapTOC(suite, obj) { const ret = obj; const key = SUITE_PREFIX + suite.title; obj = obj[key] = obj[key] || {suite}; suite.suites.forEach(function(suite) { mapTOC(suite, obj); }); return ret; } function stringifyTOC(obj, level) { ++level; let buf = ''; let link; for (const key in obj) { if (key === 'suite') { continue; } if (key !== SUITE_PREFIX) { link = ' - [' + key.substring(1) + ']'; link += '(#' + utils.slug(obj[key].suite.fullTitle()) + ')\n'; buf += Array(level).join(' ') + link; } buf += stringifyTOC(obj[key], level); } return buf; } function generateTOC(suite) { const obj = mapTOC(suite, {}); return stringifyTOC(obj, 0); } generateTOC(runner.suite); runner.on('suite', function(suite) { ++level; const slug = utils.slug(suite.fullTitle()); // eslint-disable-next-line no-useless-concat buf += '<a name="' + slug + '"></a>' + '\n'; buf += title(suite.title) + '\n'; }); runner.on('suite end', function() { --level; }); runner.on('pass', function(test) { const code = utils.clean(test.body); buf += test.title + '.\n'; buf += '\n```js\n'; buf += code + '\n'; buf += '```\n\n'; }); runner.once('end', function() { process.stdout.write('# TOC\n'); process.stdout.write(generateTOC(runner.suite)); process.stdout.write(buf); }); }