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