exports.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. 'use strict';
  2. /**
  3. * Module dependencies.
  4. */
  5. var Suite = require('../suite');
  6. var Test = require('../test');
  7. /**
  8. * Exports-style (as Node.js module) interface:
  9. *
  10. * exports.Array = {
  11. * '#indexOf()': {
  12. * 'should return -1 when the value is not present': function() {
  13. *
  14. * },
  15. *
  16. * 'should return the correct index when the value is present': function() {
  17. *
  18. * }
  19. * }
  20. * };
  21. *
  22. * @param {Suite} suite Root suite.
  23. */
  24. module.exports = function (suite) {
  25. var suites = [suite];
  26. suite.on('require', visit);
  27. function visit (obj, file) {
  28. var suite;
  29. for (var key in obj) {
  30. if (typeof obj[key] === 'function') {
  31. var fn = obj[key];
  32. switch (key) {
  33. case 'before':
  34. suites[0].beforeAll(fn);
  35. break;
  36. case 'after':
  37. suites[0].afterAll(fn);
  38. break;
  39. case 'beforeEach':
  40. suites[0].beforeEach(fn);
  41. break;
  42. case 'afterEach':
  43. suites[0].afterEach(fn);
  44. break;
  45. default:
  46. var test = new Test(key, fn);
  47. test.file = file;
  48. suites[0].addTest(test);
  49. }
  50. } else {
  51. suite = Suite.create(suites[0], key);
  52. suites.unshift(suite);
  53. visit(obj[key], file);
  54. suites.shift();
  55. }
  56. }
  57. }
  58. };