helpers.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. var exec = require('child_process').exec;
  2. var helpers = new (function () {
  3. var _tests
  4. , _names = []
  5. , _name
  6. , _callback
  7. , _runner = function () {
  8. if (!!(_name = _names.shift())) {
  9. console.log('Running ' + _name);
  10. _tests[_name]();
  11. }
  12. else {
  13. _callback();
  14. }
  15. };
  16. this.exec = function () {
  17. var args = Array.prototype.slice.call(arguments)
  18. , arg
  19. , cmd = args.shift()
  20. , opts = {}
  21. , callback;
  22. // Optional opts/callback or callback/opts
  23. while ((arg = args.shift())) {
  24. if (typeof arg == 'function') {
  25. callback = arg;
  26. }
  27. else {
  28. opts = arg;
  29. }
  30. }
  31. cmd += ' --trace';
  32. exec(cmd, function (err, stdout, stderr) {
  33. var out = helpers.trim(stdout);
  34. if (err) {
  35. if (opts.breakOnError === false) {
  36. return callback(err);
  37. }
  38. else {
  39. throw err;
  40. }
  41. }
  42. if (stderr) {
  43. callback(stderr);
  44. }
  45. else {
  46. callback(out);
  47. }
  48. });
  49. };
  50. this.trim = function (s) {
  51. var str = s || '';
  52. return str.replace(/^\s*|\s*$/g, '');
  53. };
  54. this.parse = function (s) {
  55. var str = s || '';
  56. str = helpers.trim(str);
  57. str = str.replace(/'/g, '"');
  58. return JSON.parse(str);
  59. };
  60. this.run = function (tests, callback) {
  61. _tests = tests;
  62. _names = Object.keys(tests);
  63. _callback = callback;
  64. _runner();
  65. };
  66. this.next = function () {
  67. _runner();
  68. };
  69. })();
  70. module.exports = helpers;