helper.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. 'use strict';
  2. var Vows = require('vows');
  3. var Assert = require('assert');
  4. var Path = require('path');
  5. var Fs = require('fs');
  6. var Common = require('../lib/js-yaml/common');
  7. var Helper = module.exports = {};
  8. Helper.suite = function suite(name, dirname, regexp) {
  9. var obj = Vows.describe(name);
  10. Fs.readdirSync(dirname).forEach(function (filename) {
  11. var file = Path.join(dirname, filename);
  12. if (Fs.statSync(file).isFile() && regexp.test(filename)) {
  13. obj.addBatch(require(file));
  14. }
  15. });
  16. return obj;
  17. };
  18. Helper.issue = function issue(desc) {
  19. var batch = {};
  20. batch[desc.title] = function () {
  21. desc.test();
  22. if (!desc.fixed) {
  23. throw {message: "Test passed, but it shouldn't!"};
  24. }
  25. };
  26. return batch;
  27. };
  28. function findTestFilenames(dataDir) {
  29. var filenames = {};
  30. Fs.readdirSync(dataDir).forEach(function (file) {
  31. var ext = Path.extname(file),
  32. base = Path.basename(file, ext);
  33. if (undefined === filenames[base]) {
  34. filenames[base] = [];
  35. }
  36. filenames[base].push(ext);
  37. });
  38. return filenames;
  39. }
  40. Helper.functional = function functional(desc) {
  41. var batch = {};
  42. Common.each(findTestFilenames(desc.dirname), function (exts, base) {
  43. var filenames = [], name;
  44. desc.files.forEach(function (ext) {
  45. if (0 <= exts.indexOf(ext)) {
  46. filenames.push(Path.join(desc.dirname, base + ext));
  47. }
  48. });
  49. if (filenames.length === desc.files.length) {
  50. name = filenames.map(function (f) {
  51. return Path.basename(f);
  52. }).join(', ');
  53. batch[name] = function () {
  54. desc.test.apply(desc.test, filenames);
  55. };
  56. }
  57. });
  58. return batch;
  59. };