tap.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. 'use strict';
  2. /**
  3. * @module TAP
  4. */
  5. /**
  6. * Module dependencies.
  7. */
  8. var Base = require('./base');
  9. /**
  10. * Expose `TAP`.
  11. */
  12. exports = module.exports = TAP;
  13. /**
  14. * Initialize a new `TAP` reporter.
  15. *
  16. * @public
  17. * @class
  18. * @memberof Mocha.reporters
  19. * @extends Mocha.reporters.Base
  20. * @api public
  21. * @param {Runner} runner
  22. */
  23. function TAP(runner) {
  24. Base.call(this, runner);
  25. var n = 1;
  26. var passes = 0;
  27. var failures = 0;
  28. runner.on('start', function() {
  29. var total = runner.grepTotal(runner.suite);
  30. console.log('%d..%d', 1, total);
  31. });
  32. runner.on('test end', function() {
  33. ++n;
  34. });
  35. runner.on('pending', function(test) {
  36. console.log('ok %d %s # SKIP -', n, title(test));
  37. });
  38. runner.on('pass', function(test) {
  39. passes++;
  40. console.log('ok %d %s', n, title(test));
  41. });
  42. runner.on('fail', function(test, err) {
  43. failures++;
  44. console.log('not ok %d %s', n, title(test));
  45. if (err.stack) {
  46. console.log(err.stack.replace(/^/gm, ' '));
  47. }
  48. });
  49. runner.once('end', function() {
  50. console.log('# tests ' + (passes + failures));
  51. console.log('# pass ' + passes);
  52. console.log('# fail ' + failures);
  53. });
  54. }
  55. /**
  56. * Return a TAP-safe title of `test`
  57. *
  58. * @api private
  59. * @param {Object} test
  60. * @return {String}
  61. */
  62. function title(test) {
  63. return test.fullTitle().replace(/#/g, '');
  64. }