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