doc.js 1.5 KB

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