123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- 'use strict';
- /**
- * @module Markdown
- */
- /**
- * Module dependencies.
- */
- var Base = require('./base');
- var utils = require('../utils');
- var constants = require('../runner').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;
- /**
- * Initialize a new `Markdown` reporter.
- *
- * @public
- * @class
- * @memberof Mocha.reporters
- * @extends Mocha.reporters.Base
- * @param {Runner} runner
- */
- function Markdown(runner) {
- Base.call(this, runner);
- 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';
|