text: var exec = require('child_process').exec;
  
  var helpers = new (function () {
    var _tests
      , _names = []
      , _name
      , _callback
      , _runner = function () {
          if (!!(_name = _names.shift())) {
            console.log('Running ' + _name);
            _tests[_name]();
          }
          else {
            _callback();
          }
        };
  
    this.exec = function () {
      var args = Array.prototype.slice.call(arguments)
        , arg
        , cmd = args.shift()
        , opts = {}
        , callback;
      // Optional opts/callback or callback/opts
      while ((arg = args.shift())) {
        if (typeof arg == 'function') {
          callback = arg;
        }
        else {
          opts = arg;
        }
      }
  
      cmd += ' --trace';
      exec(cmd, 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;
  