helpers.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. var exec = require('child_process').exec;
  2. var helpers = new (function () {
  3. var _tests;
  4. var _names = [];
  5. var _name;
  6. var _callback;
  7. var _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. var arg;
  19. var cmd = args.shift();
  20. var opts = {};
  21. var 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. var execOpts = opts.execOpts ? opts.execOpts : {};
  33. exec(cmd, execOpts, function (err, stdout, stderr) {
  34. var out = helpers.trim(stdout);
  35. if (err) {
  36. if (opts.breakOnError === false) {
  37. return callback(err);
  38. }
  39. else {
  40. throw err;
  41. }
  42. }
  43. if (stderr) {
  44. callback(stderr);
  45. }
  46. else {
  47. callback(out);
  48. }
  49. });
  50. };
  51. this.trim = function (s) {
  52. var str = s || '';
  53. return str.replace(/^\s*|\s*$/g, '');
  54. };
  55. this.parse = function (s) {
  56. var str = s || '';
  57. str = helpers.trim(str);
  58. str = str.replace(/'/g, '"');
  59. return JSON.parse(str);
  60. };
  61. this.run = function (tests, callback) {
  62. _tests = tests;
  63. _names = Object.keys(tests);
  64. _callback = callback;
  65. _runner();
  66. };
  67. this.next = function () {
  68. _runner();
  69. };
  70. })();
  71. module.exports = helpers;