UNPKG

@academyjs/rover

Version:

Rover allows you to learn programming interactively.

94 lines 2.69 kB
"use strict"; /** * @module Markdown */ /** * Module dependencies. */ var Base = require("./base"); var utils = require("../utils"); var constants = require("../runner").default.constants; var EVENT_RUN_END = constants.EVENT_RUN_END; var EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN; var EVENT_SUITE_END = constants.EVENT_SUITE_END; var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; /** * Constants */ var SUITE_PREFIX = "$"; /** * Expose `Markdown`. */ exports = module.exports = Markdown; /** * Constructs a new `Markdown` reporter instance. * * @public * @class * @memberof Mocha.reporters * @extends Mocha.reporters.Base * @param {Runner} runner - Instance triggers reporter actions. * @param {Object} [options] - runner options */ function Markdown(runner, options) { Base.call(this, runner, options); var level = 0; var buf = ""; function title(str) { return Array(level).join("#") + " " + str; } function mapTOC(suite, obj) { var ret = obj; var key = SUITE_PREFIX + suite.title; obj = obj[key] = obj[key] || { suite: suite }; suite.suites.forEach(function (suite) { mapTOC(suite, obj); }); return ret; } function stringifyTOC(obj, level) { ++level; var buf = ""; var link; for (var 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) { var obj = mapTOC(suite, {}); return stringifyTOC(obj, 0); } generateTOC(runner.suite); runner.on(EVENT_SUITE_BEGIN, function (suite) { ++level; var slug = utils.slug(suite.fullTitle()); buf += '<a name="' + slug + '"></a>' + "\n"; buf += title(suite.title) + "\n"; }); runner.on(EVENT_SUITE_END, function () { --level; }); runner.on(EVENT_TEST_PASS, function (test) { var code = utils.clean(test.body); buf += test.title + ".\n"; buf += "\n```js\n"; buf += code + "\n"; buf += "```\n\n"; }); runner.once(EVENT_RUN_END, function () { process.stdout.write("# TOC\n"); process.stdout.write(generateTOC(runner.suite)); process.stdout.write(buf); }); } Markdown.description = "GitHub Flavored Markdown"; //# sourceMappingURL=markdown.js.map