source: Dev/trunk/node_modules/mocha/lib/reporters/markdown.js

Last change on this file was 484, checked in by hendrikvanantwerpen, 11 years ago

Commit node_modules, to make checkouts and builds more deterministic.

File size: 1.8 KB
Line 
1/**
2 * Module dependencies.
3 */
4
5var Base = require('./base')
6  , utils = require('../utils');
7
8/**
9 * Expose `Markdown`.
10 */
11
12exports = module.exports = Markdown;
13
14/**
15 * Initialize a new `Markdown` reporter.
16 *
17 * @param {Runner} runner
18 * @api public
19 */
20
21function Markdown(runner) {
22  Base.call(this, runner);
23
24  var self = this
25    , stats = this.stats
26    , level = 0
27    , buf = '';
28
29  function title(str) {
30    return Array(level).join('#') + ' ' + str;
31  }
32
33  function indent() {
34    return Array(level).join('  ');
35  }
36
37  function mapTOC(suite, obj) {
38    var ret = obj;
39    obj = obj[suite.title] = obj[suite.title] || { suite: suite };
40    suite.suites.forEach(function(suite){
41      mapTOC(suite, obj);
42    });
43    return ret;
44  }
45
46  function stringifyTOC(obj, level) {
47    ++level;
48    var buf = '';
49    var link;
50    for (var key in obj) {
51      if ('suite' == key) continue;
52      if (key) link = ' - [' + key + '](#' + utils.slug(obj[key].suite.fullTitle()) + ')\n';
53      if (key) buf += Array(level).join('  ') + link;
54      buf += stringifyTOC(obj[key], level);
55    }
56    --level;
57    return buf;
58  }
59
60  function generateTOC(suite) {
61    var obj = mapTOC(suite, {});
62    return stringifyTOC(obj, 0);
63  }
64
65  generateTOC(runner.suite);
66
67  runner.on('suite', function(suite){
68    ++level;
69    var slug = utils.slug(suite.fullTitle());
70    buf += '<a name="' + slug + '"></a>' + '\n';
71    buf += title(suite.title) + '\n';
72  });
73
74  runner.on('suite end', function(suite){
75    --level;
76  });
77
78  runner.on('pass', function(test){
79    var code = utils.clean(test.fn.toString());
80    buf += test.title + '.\n';
81    buf += '\n```js\n';
82    buf += code + '\n';
83    buf += '```\n\n';
84  });
85
86  runner.on('end', function(){
87    process.stdout.write('# TOC\n');
88    process.stdout.write(generateTOC(runner.suite));
89    process.stdout.write(buf);
90  });
91}
Note: See TracBrowser for help on using the repository browser.