doc.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. 'use strict';
  2. /**
  3. * @module Doc
  4. */
  5. /**
  6. * Module dependencies.
  7. */
  8. var Base = require('./base');
  9. var utils = require('../utils');
  10. /**
  11. * Expose `Doc`.
  12. */
  13. exports = module.exports = Doc;
  14. /**
  15. * Initialize a new `Doc` reporter.
  16. *
  17. * @class
  18. * @memberof Mocha.reporters
  19. * @extends {Base}
  20. * @public
  21. * @param {Runner} runner
  22. * @api public
  23. */
  24. function Doc(runner) {
  25. Base.call(this, runner);
  26. var indents = 2;
  27. function indent() {
  28. return Array(indents).join(' ');
  29. }
  30. runner.on('suite', function(suite) {
  31. if (suite.root) {
  32. return;
  33. }
  34. ++indents;
  35. console.log('%s<section class="suite">', indent());
  36. ++indents;
  37. console.log('%s<h1>%s</h1>', indent(), utils.escape(suite.title));
  38. console.log('%s<dl>', indent());
  39. });
  40. runner.on('suite end', function(suite) {
  41. if (suite.root) {
  42. return;
  43. }
  44. console.log('%s</dl>', indent());
  45. --indents;
  46. console.log('%s</section>', indent());
  47. --indents;
  48. });
  49. runner.on('pass', function(test) {
  50. console.log('%s <dt>%s</dt>', indent(), utils.escape(test.title));
  51. var code = utils.escape(utils.clean(test.body));
  52. console.log('%s <dd><pre><code>%s</code></pre></dd>', indent(), code);
  53. });
  54. runner.on('fail', function(test, err) {
  55. console.log(
  56. '%s <dt class="error">%s</dt>',
  57. indent(),
  58. utils.escape(test.title)
  59. );
  60. var code = utils.escape(utils.clean(test.body));
  61. console.log(
  62. '%s <dd class="error"><pre><code>%s</code></pre></dd>',
  63. indent(),
  64. code
  65. );
  66. console.log('%s <dd class="error">%s</dd>', indent(), utils.escape(err));
  67. });
  68. }