xctest-client
Version:
Node.js client for xctest
95 lines (80 loc) • 2.02 kB
JavaScript
;
const utils = require('macaca-utils');
const childProcess = require('child_process');
const _ = Object.assign({}, utils);
_.exec = function(cmd, opts) {
return new Promise((resolve, reject) => {
childProcess.exec(cmd, _.merge({
maxBuffer: 1024 * 512 * 10,
wrapArgs: false
}, opts || {}), (err, stdout) => {
if (err) {
return reject(err);
}
resolve(_.trim(stdout));
});
});
};
_.sleep = function(ms) {
return new Promise(function(resolve) {
setTimeout(resolve, ms);
});
};
_.retry = function(func, interval, num) {
return new Promise((resolve, reject) => {
func().then(resolve, err => {
if (num > 0 || typeof num === 'undefined') {
_.sleep(interval).then(() => {
resolve(_.retry(func, interval, num - 1));
});
} else {
reject(err);
}
});
});
};
_.spawn = function(/* command, args, options */) {
var args = Array.prototype.slice.call(arguments);
return new Promise((resolve, reject) => {
var stdout = '';
var stderr = '';
var child = childProcess.spawn.apply(childProcess, args);
child.on('error', error => {
reject(error);
});
child.stdout.on('data', data => {
stdout += data;
});
child.stderr.on('data', data => {
stderr += data;
});
child.on('close', code => {
var error;
if (code) {
error = new Error(stderr);
error.code = code;
return reject(error);
}
resolve([stdout, stderr]);
});
});
};
_.exec = function(cmd, opts) {
return new Promise(function(resolve, reject) {
childProcess.exec(cmd, _.merge({
maxBuffer: 1024 * 512,
wrapArgs: false
}, opts || {}), function(err, stdout) {
if (err) {
return reject(err);
}
resolve(_.trim(stdout));
});
});
};
_.parseSimDir = function(data) {
const r = /BUILT_PRODUCTS_DIR=([\S]+)\s/g;
const arr = r.exec(data);
return arr[1];
};
module.exports = _;