doc.js 1.4 KB

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