datagrok-tools 4.13.75 → 4.13.77
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/commands/add.js +96 -106
- package/bin/commands/api.js +65 -107
- package/bin/commands/check.js +264 -396
- package/bin/commands/config.js +82 -158
- package/bin/commands/create.js +65 -80
- package/bin/commands/help.js +194 -12
- package/bin/commands/init.js +73 -95
- package/bin/commands/link.js +70 -176
- package/bin/commands/publish.js +283 -484
- package/bin/commands/test-all.js +77 -291
- package/bin/commands/test.js +171 -388
- package/bin/utils/color-utils.js +8 -11
- package/bin/utils/ent-helpers.js +52 -42
- package/bin/utils/func-generation.js +25 -57
- package/bin/utils/interfaces.js +5 -1
- package/bin/utils/order-functions.js +47 -118
- package/bin/utils/test-utils.js +422 -749
- package/bin/utils/utils.js +123 -235
- package/bin/validators/config-validator.js +12 -14
- package/package.json +13 -3
package/bin/utils/test-utils.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
@@ -23,13 +22,6 @@ exports.runBrowser = runBrowser;
|
|
|
23
22
|
exports.runWithTimeout = runWithTimeout;
|
|
24
23
|
exports.saveCsvResults = saveCsvResults;
|
|
25
24
|
exports.timeout = timeout;
|
|
26
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
27
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
28
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
29
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
30
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
31
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
32
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
33
25
|
var _fs = _interopRequireDefault(require("fs"));
|
|
34
26
|
var _os = _interopRequireDefault(require("os"));
|
|
35
27
|
var _path = _interopRequireDefault(require("path"));
|
|
@@ -40,302 +32,123 @@ var _puppeteerScreenRecorder = require("puppeteer-screen-recorder");
|
|
|
40
32
|
var _puppeteer = _interopRequireDefault(require("puppeteer"));
|
|
41
33
|
var color = _interopRequireWildcard(require("../utils/color-utils"));
|
|
42
34
|
var _papaparse = _interopRequireDefault(require("papaparse"));
|
|
43
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function
|
|
44
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" !=
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
var confPath = _path["default"].join(grokDir, 'config.yaml');
|
|
51
|
-
var testCollectionTimeout = 100000;
|
|
52
|
-
var defaultLaunchParameters = exports.defaultLaunchParameters = {
|
|
35
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
36
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
37
|
+
const fetch = require('node-fetch');
|
|
38
|
+
const grokDir = _path.default.join(_os.default.homedir(), '.grok');
|
|
39
|
+
const confPath = _path.default.join(grokDir, 'config.yaml');
|
|
40
|
+
const testCollectionTimeout = 100000;
|
|
41
|
+
const defaultLaunchParameters = exports.defaultLaunchParameters = {
|
|
53
42
|
args: ['--disable-dev-shm-usage', '--disable-features=site-per-process', '--window-size=1920,1080', '--js-flags=--expose-gc'],
|
|
54
43
|
ignoreHTTPSErrors: true,
|
|
55
44
|
headless: 'new',
|
|
56
45
|
protocolTimeout: 0
|
|
57
46
|
};
|
|
58
|
-
function getToken(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
65
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
66
|
-
case 0:
|
|
67
|
-
_context2.next = 2;
|
|
68
|
-
return fetch("".concat(url, "/users/login/dev/").concat(key), {
|
|
69
|
-
method: 'POST'
|
|
70
|
-
});
|
|
71
|
-
case 2:
|
|
72
|
-
response = _context2.sent;
|
|
73
|
-
_context2.next = 5;
|
|
74
|
-
return response.json();
|
|
75
|
-
case 5:
|
|
76
|
-
json = _context2.sent;
|
|
77
|
-
if (!(json.isSuccess == true)) {
|
|
78
|
-
_context2.next = 10;
|
|
79
|
-
break;
|
|
80
|
-
}
|
|
81
|
-
return _context2.abrupt("return", json.token);
|
|
82
|
-
case 10:
|
|
83
|
-
throw new Error('Unable to login to server. Check your dev key');
|
|
84
|
-
case 11:
|
|
85
|
-
case "end":
|
|
86
|
-
return _context2.stop();
|
|
87
|
-
}
|
|
88
|
-
}, _callee2);
|
|
89
|
-
}));
|
|
90
|
-
return _getToken.apply(this, arguments);
|
|
91
|
-
}
|
|
92
|
-
function getWebUrl(_x3, _x4) {
|
|
93
|
-
return _getWebUrl.apply(this, arguments);
|
|
47
|
+
async function getToken(url, key) {
|
|
48
|
+
const response = await fetch(`${url}/users/login/dev/${key}`, {
|
|
49
|
+
method: 'POST'
|
|
50
|
+
});
|
|
51
|
+
const json = await response.json();
|
|
52
|
+
if (json.isSuccess == true) return json.token;else throw new Error('Unable to login to server. Check your dev key');
|
|
94
53
|
}
|
|
95
|
-
function
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
headers: {
|
|
104
|
-
Authorization: token
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
case 2:
|
|
108
|
-
response = _context3.sent;
|
|
109
|
-
_context3.next = 5;
|
|
110
|
-
return response.json();
|
|
111
|
-
case 5:
|
|
112
|
-
json = _context3.sent;
|
|
113
|
-
return _context3.abrupt("return", json.settings.webRoot);
|
|
114
|
-
case 7:
|
|
115
|
-
case "end":
|
|
116
|
-
return _context3.stop();
|
|
117
|
-
}
|
|
118
|
-
}, _callee3);
|
|
119
|
-
}));
|
|
120
|
-
return _getWebUrl.apply(this, arguments);
|
|
54
|
+
async function getWebUrl(url, token) {
|
|
55
|
+
const response = await fetch(`${url}/admin/plugins/admin/settings`, {
|
|
56
|
+
headers: {
|
|
57
|
+
Authorization: token
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
const json = await response.json();
|
|
61
|
+
return json.settings.webRoot;
|
|
121
62
|
}
|
|
122
63
|
function getDevKey(hostKey) {
|
|
123
|
-
|
|
124
|
-
|
|
64
|
+
const config = _jsYaml.default.load(_fs.default.readFileSync(confPath, 'utf8'));
|
|
65
|
+
let host = hostKey == '' ? config.default : hostKey;
|
|
125
66
|
host = host.trim();
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
67
|
+
const urls = utils.mapURL(config);
|
|
68
|
+
let key = '';
|
|
69
|
+
let url = '';
|
|
129
70
|
try {
|
|
130
|
-
|
|
131
|
-
if (
|
|
132
|
-
if (
|
|
71
|
+
let url = new URL(host).href;
|
|
72
|
+
if (url.endsWith('/')) url = url.slice(0, -1);
|
|
73
|
+
if (url in urls) key = config['servers'][urls[url]]['key'];
|
|
133
74
|
} catch (error) {
|
|
134
|
-
if (config['servers'][host] == null) throw new Error(
|
|
75
|
+
if (config['servers'][host] == null) throw new Error(`Unknown server alias. Please add it to ${confPath}`);
|
|
135
76
|
url = config['servers'][host]['url'];
|
|
136
77
|
key = config['servers'][host]['key'];
|
|
137
78
|
}
|
|
138
79
|
return {
|
|
139
|
-
url
|
|
140
|
-
key
|
|
80
|
+
url,
|
|
81
|
+
key
|
|
141
82
|
};
|
|
142
83
|
}
|
|
143
|
-
function getBrowserPage(
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
case 14:
|
|
180
|
-
browser = _context4.sent;
|
|
181
|
-
if (!params.debug) {
|
|
182
|
-
_context4.next = 28;
|
|
183
|
-
break;
|
|
184
|
-
}
|
|
185
|
-
_context4.next = 18;
|
|
186
|
-
return browser.targets();
|
|
187
|
-
case 18:
|
|
188
|
-
targets = _context4.sent;
|
|
189
|
-
devtoolsTarget = targets.find(function (t) {
|
|
190
|
-
return t.type() === 'other' && t.url().startsWith('devtools://');
|
|
191
|
-
});
|
|
192
|
-
if (!devtoolsTarget) {
|
|
193
|
-
_context4.next = 28;
|
|
194
|
-
break;
|
|
195
|
-
}
|
|
196
|
-
_context4.next = 23;
|
|
197
|
-
return devtoolsTarget.createCDPSession();
|
|
198
|
-
case 23:
|
|
199
|
-
client = _context4.sent;
|
|
200
|
-
_context4.next = 26;
|
|
201
|
-
return client.send('Runtime.enable');
|
|
202
|
-
case 26:
|
|
203
|
-
_context4.next = 28;
|
|
204
|
-
return client.send('Runtime.evaluate', {
|
|
205
|
-
expression: "\n window.UI.viewManager.showView('network');\n window.UI.dockController.setDockSide('bottom')\n "
|
|
206
|
-
});
|
|
207
|
-
case 28:
|
|
208
|
-
_context4.next = 30;
|
|
209
|
-
return browser.newPage();
|
|
210
|
-
case 30:
|
|
211
|
-
page = _context4.sent;
|
|
212
|
-
_context4.next = 33;
|
|
213
|
-
return page.setViewport({
|
|
214
|
-
width: 1920,
|
|
215
|
-
height: 1080
|
|
216
|
-
});
|
|
217
|
-
case 33:
|
|
218
|
-
page.setDefaultNavigationTimeout(0);
|
|
219
|
-
_context4.next = 36;
|
|
220
|
-
return page["goto"]("".concat(url, "/oauth/"));
|
|
221
|
-
case 36:
|
|
222
|
-
_context4.next = 38;
|
|
223
|
-
return page.setCookie({
|
|
224
|
-
name: 'auth',
|
|
225
|
-
value: token
|
|
226
|
-
});
|
|
227
|
-
case 38:
|
|
228
|
-
_context4.next = 40;
|
|
229
|
-
return page.evaluate(function (token) {
|
|
230
|
-
window.localStorage.setItem('auth', token);
|
|
231
|
-
}, token);
|
|
232
|
-
case 40:
|
|
233
|
-
_context4.next = 42;
|
|
234
|
-
return page["goto"](url);
|
|
235
|
-
case 42:
|
|
236
|
-
_context4.prev = 42;
|
|
237
|
-
_context4.next = 45;
|
|
238
|
-
return page.waitForFunction(function () {
|
|
239
|
-
return document.querySelector('.grok-preloader') == null;
|
|
240
|
-
}, {
|
|
241
|
-
timeout: 3600000
|
|
242
|
-
});
|
|
243
|
-
case 45:
|
|
244
|
-
_context4.next = 50;
|
|
245
|
-
break;
|
|
246
|
-
case 47:
|
|
247
|
-
_context4.prev = 47;
|
|
248
|
-
_context4.t0 = _context4["catch"](42);
|
|
249
|
-
throw _context4.t0;
|
|
250
|
-
case 50:
|
|
251
|
-
return _context4.abrupt("return", {
|
|
252
|
-
browser: browser,
|
|
253
|
-
page: page
|
|
254
|
-
});
|
|
255
|
-
case 51:
|
|
256
|
-
case "end":
|
|
257
|
-
return _context4.stop();
|
|
258
|
-
}
|
|
259
|
-
}, _callee4, null, [[42, 47]]);
|
|
260
|
-
}));
|
|
261
|
-
return _getBrowserPage.apply(this, arguments);
|
|
84
|
+
async function getBrowserPage(puppeteer, params = defaultLaunchParameters) {
|
|
85
|
+
let url = process.env.HOST ?? '';
|
|
86
|
+
const cfg = getDevKey(url);
|
|
87
|
+
url = cfg.url;
|
|
88
|
+
const key = cfg.key;
|
|
89
|
+
const token = await getToken(url, key);
|
|
90
|
+
url = await getWebUrl(url, token);
|
|
91
|
+
console.log(`Using web root: ${url}`);
|
|
92
|
+
const browser = await puppeteer.launch(params);
|
|
93
|
+
const page = await browser.newPage();
|
|
94
|
+
await page.setViewport({
|
|
95
|
+
width: 1920,
|
|
96
|
+
height: 1080
|
|
97
|
+
});
|
|
98
|
+
page.setDefaultNavigationTimeout(0);
|
|
99
|
+
await page.goto(`${url}/oauth/`);
|
|
100
|
+
await page.setCookie({
|
|
101
|
+
name: 'auth',
|
|
102
|
+
value: token
|
|
103
|
+
});
|
|
104
|
+
await page.evaluate(token => {
|
|
105
|
+
window.localStorage.setItem('auth', token);
|
|
106
|
+
}, token);
|
|
107
|
+
await page.goto(url);
|
|
108
|
+
try {
|
|
109
|
+
// await page.waitForSelector('.grok-preloader', { timeout: 1800000 });
|
|
110
|
+
await page.waitForFunction(() => document.querySelector('.grok-preloader') == null, {
|
|
111
|
+
timeout: 3600000
|
|
112
|
+
});
|
|
113
|
+
} catch (error) {
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
browser,
|
|
118
|
+
page
|
|
119
|
+
};
|
|
262
120
|
}
|
|
263
121
|
function runWithTimeout(timeout, f) {
|
|
264
|
-
return new Promise(
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
_context.next = 4;
|
|
275
|
-
return f();
|
|
276
|
-
case 4:
|
|
277
|
-
resolveValue = _context.sent;
|
|
278
|
-
clearTimeout(timeoutId);
|
|
279
|
-
resolve(resolveValue);
|
|
280
|
-
_context.next = 12;
|
|
281
|
-
break;
|
|
282
|
-
case 9:
|
|
283
|
-
_context.prev = 9;
|
|
284
|
-
_context.t0 = _context["catch"](1);
|
|
285
|
-
reject(_context.t0);
|
|
286
|
-
case 12:
|
|
287
|
-
case "end":
|
|
288
|
-
return _context.stop();
|
|
289
|
-
}
|
|
290
|
-
}, _callee, null, [[1, 9]]);
|
|
291
|
-
}));
|
|
292
|
-
return function (_x6, _x7) {
|
|
293
|
-
return _ref.apply(this, arguments);
|
|
294
|
-
};
|
|
295
|
-
}());
|
|
296
|
-
}
|
|
297
|
-
function timeout(_x8, _x9) {
|
|
298
|
-
return _timeout.apply(this, arguments);
|
|
122
|
+
return new Promise(async (resolve, reject) => {
|
|
123
|
+
const timeoutId = setTimeout(() => reject(new Error(`Timeout exceeded: ${timeout} ms`)), timeout);
|
|
124
|
+
try {
|
|
125
|
+
const resolveValue = await f();
|
|
126
|
+
clearTimeout(timeoutId);
|
|
127
|
+
resolve(resolveValue);
|
|
128
|
+
} catch (e) {
|
|
129
|
+
reject(e);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
299
132
|
}
|
|
300
|
-
function
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
// eslint-disable-next-line prefer-promise-reject-errors
|
|
314
|
-
reject(timeoutReason);
|
|
315
|
-
}, testTimeout);
|
|
316
|
-
});
|
|
317
|
-
_context5.prev = 3;
|
|
318
|
-
_context5.next = 6;
|
|
319
|
-
return Promise.race([func(), timeoutPromise]);
|
|
320
|
-
case 6:
|
|
321
|
-
return _context5.abrupt("return", _context5.sent);
|
|
322
|
-
case 7:
|
|
323
|
-
_context5.prev = 7;
|
|
324
|
-
if (timeout) clearTimeout(timeout);
|
|
325
|
-
return _context5.finish(7);
|
|
326
|
-
case 10:
|
|
327
|
-
case "end":
|
|
328
|
-
return _context5.stop();
|
|
329
|
-
}
|
|
330
|
-
}, _callee5, null, [[3,, 7, 10]]);
|
|
331
|
-
}));
|
|
332
|
-
return _timeout.apply(this, arguments);
|
|
133
|
+
async function timeout(func, testTimeout, timeoutReason = 'EXECUTION TIMEOUT') {
|
|
134
|
+
let timeout = null;
|
|
135
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
136
|
+
timeout = setTimeout(() => {
|
|
137
|
+
// eslint-disable-next-line prefer-promise-reject-errors
|
|
138
|
+
reject(timeoutReason);
|
|
139
|
+
}, testTimeout);
|
|
140
|
+
});
|
|
141
|
+
try {
|
|
142
|
+
return await Promise.race([func(), timeoutPromise]);
|
|
143
|
+
} finally {
|
|
144
|
+
if (timeout) clearTimeout(timeout);
|
|
145
|
+
}
|
|
333
146
|
}
|
|
334
147
|
function exitWithCode(code) {
|
|
335
|
-
console.log(
|
|
148
|
+
console.log(`Exiting with code ${code}`);
|
|
336
149
|
process.exit(code);
|
|
337
150
|
}
|
|
338
|
-
|
|
151
|
+
const recorderConfig = exports.recorderConfig = {
|
|
339
152
|
followNewTab: true,
|
|
340
153
|
fps: 25,
|
|
341
154
|
ffmpeg_Path: null,
|
|
@@ -352,282 +165,131 @@ var recorderConfig = exports.recorderConfig = {
|
|
|
352
165
|
}
|
|
353
166
|
// aspectRatio: '16:9',
|
|
354
167
|
};
|
|
355
|
-
function loadPackages(
|
|
356
|
-
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
168
|
+
async function loadPackages(packagesDir, packagesToLoad, host, skipPublish, skipBuild, linkPackage, release) {
|
|
169
|
+
let packagesToRun = new Map();
|
|
170
|
+
let hostString = host === undefined ? `` : `${host}`;
|
|
171
|
+
if (packagesToLoad !== "all") {
|
|
172
|
+
for (let pacakgeName of (packagesToLoad ?? "").split(' ')) {
|
|
173
|
+
if ((pacakgeName ?? '').length !== 0) packagesToRun.set((0, _utils.spaceToCamelCase)(pacakgeName).toLocaleLowerCase(), false);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
for (let dirName of _fs.default.readdirSync(packagesDir)) {
|
|
177
|
+
let packageDir = _path.default.join(packagesDir, dirName);
|
|
178
|
+
if (!_fs.default.lstatSync(packageDir).isFile()) {
|
|
179
|
+
try {
|
|
180
|
+
const packageJsonData = JSON.parse(_fs.default.readFileSync(_path.default.join(packageDir, 'package.json'), {
|
|
181
|
+
encoding: 'utf-8'
|
|
182
|
+
}));
|
|
183
|
+
const packageFriendlyName = packagesToRun.get((0, _utils.spaceToCamelCase)(packageJsonData["friendlyName"] ?? packageJsonData["name"].split("/")[1] ?? packageJsonData["name"] ?? '').toLocaleLowerCase() ?? "") ?? packagesToRun.get(dirName);
|
|
184
|
+
if (utils.isPackageDir(packageDir) && (packageFriendlyName !== undefined || packagesToLoad === "all")) {
|
|
185
|
+
try {
|
|
186
|
+
process.stdout.write(`Building and publishing ${dirName}...`);
|
|
187
|
+
if (skipPublish != true) {
|
|
188
|
+
await utils.runScript(`npm install`, packageDir);
|
|
189
|
+
if (linkPackage) await utils.runScript(`grok link`, packageDir);
|
|
190
|
+
if (skipBuild != true) await utils.runScript(`npm run build`, packageDir);
|
|
191
|
+
await utils.runScript(`grok publish ${hostString}${release ? ' --release' : ''}`, packageDir);
|
|
377
192
|
}
|
|
193
|
+
packagesToRun.set(dirName, true);
|
|
194
|
+
process.stdout.write(` success!\n`);
|
|
195
|
+
} catch (e) {
|
|
196
|
+
process.stdout.write(` fail!\n`);
|
|
378
197
|
}
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
case 6:
|
|
383
|
-
if ((_step2 = _iterator2.n()).done) {
|
|
384
|
-
_context6.next = 41;
|
|
385
|
-
break;
|
|
386
|
-
}
|
|
387
|
-
dirName = _step2.value;
|
|
388
|
-
packageDir = _path["default"].join(packagesDir, dirName);
|
|
389
|
-
if (_fs["default"].lstatSync(packageDir).isFile()) {
|
|
390
|
-
_context6.next = 39;
|
|
391
|
-
break;
|
|
392
|
-
}
|
|
393
|
-
_context6.prev = 10;
|
|
394
|
-
packageJsonData = JSON.parse(_fs["default"].readFileSync(_path["default"].join(packageDir, 'package.json'), {
|
|
395
|
-
encoding: 'utf-8'
|
|
396
|
-
}));
|
|
397
|
-
packageFriendlyName = (_packagesToRun$get = packagesToRun.get((_spaceToCamelCase$toL = (0, _utils.spaceToCamelCase)((_ref6 = (_ref7 = (_packageJsonData$frie = packageJsonData["friendlyName"]) !== null && _packageJsonData$frie !== void 0 ? _packageJsonData$frie : packageJsonData["name"].split("/")[1]) !== null && _ref7 !== void 0 ? _ref7 : packageJsonData["name"]) !== null && _ref6 !== void 0 ? _ref6 : '').toLocaleLowerCase()) !== null && _spaceToCamelCase$toL !== void 0 ? _spaceToCamelCase$toL : "")) !== null && _packagesToRun$get !== void 0 ? _packagesToRun$get : packagesToRun.get(dirName);
|
|
398
|
-
if (!(utils.isPackageDir(packageDir) && (packageFriendlyName !== undefined || packagesToLoad === "all"))) {
|
|
399
|
-
_context6.next = 34;
|
|
400
|
-
break;
|
|
401
|
-
}
|
|
402
|
-
_context6.prev = 14;
|
|
403
|
-
process.stdout.write("Building and publishing ".concat(dirName, "..."));
|
|
404
|
-
if (!(skipPublish != true)) {
|
|
405
|
-
_context6.next = 27;
|
|
406
|
-
break;
|
|
407
|
-
}
|
|
408
|
-
_context6.next = 19;
|
|
409
|
-
return utils.runScript("npm install", packageDir);
|
|
410
|
-
case 19:
|
|
411
|
-
if (!linkPackage) {
|
|
412
|
-
_context6.next = 22;
|
|
413
|
-
break;
|
|
414
|
-
}
|
|
415
|
-
_context6.next = 22;
|
|
416
|
-
return utils.runScript("grok link", packageDir);
|
|
417
|
-
case 22:
|
|
418
|
-
if (!(skipBuild != true)) {
|
|
419
|
-
_context6.next = 25;
|
|
420
|
-
break;
|
|
421
|
-
}
|
|
422
|
-
_context6.next = 25;
|
|
423
|
-
return utils.runScript("npm run build", packageDir);
|
|
424
|
-
case 25:
|
|
425
|
-
_context6.next = 27;
|
|
426
|
-
return utils.runScript("grok publish ".concat(hostString).concat(release ? ' --release' : ''), packageDir);
|
|
427
|
-
case 27:
|
|
428
|
-
packagesToRun.set(dirName, true);
|
|
429
|
-
process.stdout.write(" success!\n");
|
|
430
|
-
_context6.next = 34;
|
|
431
|
-
break;
|
|
432
|
-
case 31:
|
|
433
|
-
_context6.prev = 31;
|
|
434
|
-
_context6.t0 = _context6["catch"](14);
|
|
435
|
-
process.stdout.write(" fail!\n");
|
|
436
|
-
case 34:
|
|
437
|
-
_context6.next = 39;
|
|
438
|
-
break;
|
|
439
|
-
case 36:
|
|
440
|
-
_context6.prev = 36;
|
|
441
|
-
_context6.t1 = _context6["catch"](10);
|
|
442
|
-
if (utils.isPackageDir(packageDir) && (packagesToRun.get((0, _utils.spaceToCamelCase)(dirName).toLocaleLowerCase()) !== undefined || packagesToLoad === "all")) console.log("Couldn't read package.json ".concat(dirName));
|
|
443
|
-
case 39:
|
|
444
|
-
_context6.next = 6;
|
|
445
|
-
break;
|
|
446
|
-
case 41:
|
|
447
|
-
_context6.next = 46;
|
|
448
|
-
break;
|
|
449
|
-
case 43:
|
|
450
|
-
_context6.prev = 43;
|
|
451
|
-
_context6.t2 = _context6["catch"](4);
|
|
452
|
-
_iterator2.e(_context6.t2);
|
|
453
|
-
case 46:
|
|
454
|
-
_context6.prev = 46;
|
|
455
|
-
_iterator2.f();
|
|
456
|
-
return _context6.finish(46);
|
|
457
|
-
case 49:
|
|
458
|
-
console.log();
|
|
459
|
-
return _context6.abrupt("return", Array.from(packagesToRun).filter(function (_ref2) {
|
|
460
|
-
var _ref3 = (0, _slicedToArray2["default"])(_ref2, 2),
|
|
461
|
-
key = _ref3[0],
|
|
462
|
-
value = _ref3[1];
|
|
463
|
-
return value === true;
|
|
464
|
-
}).map(function (_ref4) {
|
|
465
|
-
var _ref5 = (0, _slicedToArray2["default"])(_ref4, 1),
|
|
466
|
-
key = _ref5[0];
|
|
467
|
-
return key;
|
|
468
|
-
}));
|
|
469
|
-
case 52:
|
|
470
|
-
case "end":
|
|
471
|
-
return _context6.stop();
|
|
198
|
+
}
|
|
199
|
+
} catch (e) {
|
|
200
|
+
if (utils.isPackageDir(packageDir) && (packagesToRun.get((0, _utils.spaceToCamelCase)(dirName).toLocaleLowerCase()) !== undefined || packagesToLoad === "all")) console.log(`Couldn't read package.json ${dirName}`);
|
|
472
201
|
}
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
return _loadTestsList.apply(this, arguments);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
console.log();
|
|
205
|
+
return Array.from(packagesToRun).filter(([key, value]) => value === true).map(([key]) => key);
|
|
206
|
+
;
|
|
479
207
|
}
|
|
480
|
-
function
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
browser = out.browser;
|
|
509
|
-
page = out.page;
|
|
510
|
-
_context7.next = 8;
|
|
511
|
-
return page.evaluate(function (packages, coreTests) {
|
|
512
|
-
return new Promise(function (resolve, reject) {
|
|
513
|
-
var promises = [];
|
|
514
|
-
try {
|
|
515
|
-
packages.map(function (packageName) {
|
|
516
|
-
var _DG$Func$find$;
|
|
517
|
-
var p = (_DG$Func$find$ = window.DG.Func.find({
|
|
518
|
-
"package": packageName,
|
|
519
|
-
name: 'test'
|
|
520
|
-
})[0]) === null || _DG$Func$find$ === void 0 ? void 0 : _DG$Func$find$["package"];
|
|
521
|
-
if (p) {
|
|
522
|
-
try {
|
|
523
|
-
promises.push(p.getTests(coreTests)["catch"](function (e) {
|
|
524
|
-
console.error('something else went wrong with collecting package tests');
|
|
525
|
-
console.error(e === null || e === void 0 ? void 0 : e.message);
|
|
526
|
-
}).then(function (ts) {
|
|
527
|
-
return {
|
|
528
|
-
packageName: packageName,
|
|
529
|
-
tests: ts
|
|
530
|
-
};
|
|
531
|
-
}));
|
|
532
|
-
} catch (e) {
|
|
533
|
-
console.error('something went wrong while adding test collection promise');
|
|
534
|
-
console.error(e.message);
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
});
|
|
538
|
-
} catch (err) {
|
|
539
|
-
console.error("Error during evaluation in browser context:", err);
|
|
540
|
-
reject();
|
|
541
|
-
}
|
|
542
|
-
Promise.all(promises).then(function (results) {
|
|
543
|
-
resolve(results);
|
|
544
|
-
})["catch"](function (e) {
|
|
545
|
-
var stack = window.DG.Logger.translateStackTrace(e.stack).then(function () {
|
|
546
|
-
resolve({
|
|
547
|
-
failReport: "".concat(e.message, "\n").concat(stack)
|
|
548
|
-
});
|
|
549
|
-
});
|
|
550
|
-
});
|
|
551
|
-
});
|
|
552
|
-
}, packages, core);
|
|
553
|
-
case 8:
|
|
554
|
-
r = _context7.sent;
|
|
555
|
-
if (!(browser != null)) {
|
|
556
|
-
_context7.next = 12;
|
|
557
|
-
break;
|
|
558
|
-
}
|
|
559
|
-
_context7.next = 12;
|
|
560
|
-
return browser.close();
|
|
561
|
-
case 12:
|
|
562
|
-
return _context7.abrupt("return", r);
|
|
563
|
-
case 13:
|
|
564
|
-
case "end":
|
|
565
|
-
return _context7.stop();
|
|
566
|
-
}
|
|
567
|
-
}, _callee7);
|
|
568
|
-
})), testCollectionTimeout);
|
|
569
|
-
case 3:
|
|
570
|
-
packageTestsData = _context8.sent;
|
|
571
|
-
testsList = [];
|
|
572
|
-
_iterator3 = _createForOfIteratorHelper(packageTestsData);
|
|
573
|
-
try {
|
|
574
|
-
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
575
|
-
testPackage = _step3.value;
|
|
576
|
-
for (_key in testPackage.tests) {
|
|
577
|
-
if (testPackage.tests.hasOwnProperty(_key)) {
|
|
578
|
-
_iterator4 = _createForOfIteratorHelper(testPackage.tests[_key].tests);
|
|
579
|
-
try {
|
|
580
|
-
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
581
|
-
testValue = _step4.value;
|
|
582
|
-
testValue.packageName = testPackage.packageName;
|
|
583
|
-
testsList.push(testValue);
|
|
584
|
-
}
|
|
585
|
-
} catch (err) {
|
|
586
|
-
_iterator4.e(err);
|
|
587
|
-
} finally {
|
|
588
|
-
_iterator4.f();
|
|
589
|
-
}
|
|
590
|
-
}
|
|
208
|
+
async function loadTestsList(packages, core = false) {
|
|
209
|
+
var packageTestsData = await timeout(async () => {
|
|
210
|
+
const params = Object.assign({}, defaultLaunchParameters);
|
|
211
|
+
// params['headless'] = false;
|
|
212
|
+
const out = await getBrowserPage(_puppeteer.default, params);
|
|
213
|
+
const browser = out.browser;
|
|
214
|
+
const page = out.page;
|
|
215
|
+
const r = await page.evaluate((packages, coreTests) => {
|
|
216
|
+
return new Promise((resolve, reject) => {
|
|
217
|
+
const promises = [];
|
|
218
|
+
try {
|
|
219
|
+
packages.map(packageName => {
|
|
220
|
+
const p = window.DG.Func.find({
|
|
221
|
+
package: packageName,
|
|
222
|
+
name: 'test'
|
|
223
|
+
})[0]?.package;
|
|
224
|
+
if (p) {
|
|
225
|
+
try {
|
|
226
|
+
promises.push(p.getTests(coreTests).catch(e => {
|
|
227
|
+
console.error('something else went wrong with collecting package tests');
|
|
228
|
+
console.error(e?.message);
|
|
229
|
+
}).then(ts => ({
|
|
230
|
+
packageName: packageName,
|
|
231
|
+
tests: ts
|
|
232
|
+
})));
|
|
233
|
+
} catch (e) {
|
|
234
|
+
console.error('something went wrong while adding test collection promise');
|
|
235
|
+
console.error(e.message);
|
|
591
236
|
}
|
|
592
237
|
}
|
|
593
|
-
}
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
238
|
+
});
|
|
239
|
+
} catch (err) {
|
|
240
|
+
console.error("Error during evaluation in browser context:", err);
|
|
241
|
+
reject();
|
|
242
|
+
}
|
|
243
|
+
Promise.all(promises).then(results => {
|
|
244
|
+
resolve(results);
|
|
245
|
+
}).catch(e => {
|
|
246
|
+
const stack = window.DG.Logger.translateStackTrace(e.stack).then(() => {
|
|
247
|
+
resolve({
|
|
248
|
+
failReport: `${e.message}\n${stack}`
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
}, packages, core);
|
|
254
|
+
if (browser != null) {
|
|
255
|
+
await browser.close();
|
|
256
|
+
}
|
|
257
|
+
return r;
|
|
258
|
+
}, testCollectionTimeout);
|
|
259
|
+
let testsList = [];
|
|
260
|
+
for (let testPackage of packageTestsData) {
|
|
261
|
+
for (const key in testPackage.tests) {
|
|
262
|
+
if (testPackage.tests.hasOwnProperty(key)) {
|
|
263
|
+
for (let testValue of testPackage.tests[key].tests) {
|
|
264
|
+
testValue.packageName = testPackage.packageName;
|
|
265
|
+
testsList.push(testValue);
|
|
266
|
+
}
|
|
602
267
|
}
|
|
603
|
-
}
|
|
604
|
-
}
|
|
605
|
-
return
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return testsList;
|
|
606
271
|
}
|
|
607
272
|
function addLogsToFile(filePath, stringToSave) {
|
|
608
|
-
_fs
|
|
273
|
+
_fs.default.appendFileSync(filePath, `${stringToSave}`);
|
|
609
274
|
}
|
|
610
|
-
function printBrowsersResult(browserResult) {
|
|
611
|
-
var _browserResult$failed, _browserResult$verbos3;
|
|
612
|
-
var verbose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
275
|
+
function printBrowsersResult(browserResult, verbose = false) {
|
|
613
276
|
if (verbose) {
|
|
614
|
-
|
|
615
|
-
if (((_browserResult$passed = browserResult.passedAmount) !== null && _browserResult$passed !== void 0 ? _browserResult$passed : 0) > 0 && ((_browserResult$verbos = browserResult.verbosePassed) !== null && _browserResult$verbos !== void 0 ? _browserResult$verbos : []).length > 0) {
|
|
277
|
+
if ((browserResult.passedAmount ?? 0) > 0 && (browserResult.verbosePassed ?? []).length > 0) {
|
|
616
278
|
console.log("Passed: ");
|
|
617
279
|
console.log(browserResult.verbosePassed);
|
|
618
280
|
}
|
|
619
|
-
if ((
|
|
281
|
+
if ((browserResult.skippedAmount ?? 0) > 0 && (browserResult.verboseSkipped ?? []).length > 0) {
|
|
620
282
|
console.log("Skipped: ");
|
|
621
283
|
console.log(browserResult.verboseSkipped);
|
|
622
284
|
}
|
|
623
285
|
}
|
|
624
|
-
if ((
|
|
286
|
+
if ((browserResult.failedAmount ?? 0) > 0 && (browserResult.verboseFailed ?? []).length > 0) {
|
|
625
287
|
console.log("Failed: ");
|
|
626
288
|
console.log(browserResult.verboseFailed);
|
|
627
289
|
}
|
|
628
|
-
console.log("Passed amount: " +
|
|
629
|
-
console.log("Skipped amount: " +
|
|
630
|
-
console.log("Failed amount: " +
|
|
290
|
+
console.log("Passed amount: " + browserResult?.passedAmount);
|
|
291
|
+
console.log("Skipped amount: " + browserResult?.skippedAmount);
|
|
292
|
+
console.log("Failed amount: " + browserResult?.failedAmount);
|
|
631
293
|
if (browserResult.failed) {
|
|
632
294
|
if (browserResult.verboseFailed === 'Package not found') color.fail('Tests not found');else color.fail('Tests failed.');
|
|
633
295
|
} else {
|
|
@@ -635,228 +297,239 @@ function printBrowsersResult(browserResult) {
|
|
|
635
297
|
}
|
|
636
298
|
}
|
|
637
299
|
function saveCsvResults(stringToSave, csvReportDir) {
|
|
638
|
-
|
|
300
|
+
const modifiedStrings = stringToSave.map((str, index) => {
|
|
639
301
|
if (index === 0) return str;
|
|
640
302
|
return str.split('\n').slice(1).join('\n');
|
|
641
303
|
});
|
|
642
|
-
_fs
|
|
304
|
+
_fs.default.writeFileSync(csvReportDir, modifiedStrings.join('\n'), 'utf8');
|
|
643
305
|
color.info('Saved `test-report.csv`\n');
|
|
644
306
|
}
|
|
645
|
-
function
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
browser = out.browser;
|
|
671
|
-
page = out.page;
|
|
672
|
-
recorder = new _puppeteerScreenRecorder.PuppeteerScreenRecorder(page, recorderConfig);
|
|
673
|
-
currentBrowserNum = browsersId;
|
|
674
|
-
logsDir = "./test-console-output-".concat(currentBrowserNum, ".log");
|
|
675
|
-
recordDir = "./test-record-".concat(currentBrowserNum, ".mp4");
|
|
676
|
-
if (!browserOptions.record) {
|
|
677
|
-
_context9.next = 20;
|
|
678
|
-
break;
|
|
679
|
-
}
|
|
680
|
-
_context9.next = 14;
|
|
681
|
-
return recorder.start(recordDir);
|
|
682
|
-
case 14:
|
|
683
|
-
_context9.next = 16;
|
|
684
|
-
return page.exposeFunction("addLogsToFile", addLogsToFile);
|
|
685
|
-
case 16:
|
|
686
|
-
_fs["default"].writeFileSync(logsDir, "");
|
|
687
|
-
page.on('console', function (msg) {
|
|
688
|
-
addLogsToFile(logsDir, "CONSOLE LOG ENTRY: ".concat(msg.text(), "\n"));
|
|
689
|
-
});
|
|
690
|
-
page.on('pageerror', function (error) {
|
|
691
|
-
addLogsToFile(logsDir, "CONSOLE LOG ERROR: ".concat(error.message, "\n"));
|
|
692
|
-
});
|
|
693
|
-
page.on('response', function (response) {
|
|
694
|
-
addLogsToFile(logsDir, "CONSOLE LOG REQUEST: ".concat(response.status(), ", ").concat(response.url(), "\n"));
|
|
695
|
-
});
|
|
696
|
-
case 20:
|
|
697
|
-
_context9.next = 22;
|
|
698
|
-
return page.evaluate(function (testData, options) {
|
|
699
|
-
if (options.benchmark) window.DG.Test.isInBenchmark = true;
|
|
700
|
-
if (options.reproduce) window.DG.Test.isReproducing = true;
|
|
701
|
-
if (options.ciCd) window.DG.Test.isCiCd = true;
|
|
702
|
-
if (options.debug) window.DG.Test.isInDebug = true;
|
|
703
|
-
return new Promise(function (resolve, reject) {
|
|
704
|
-
window.DG.Utils.executeTests(testData, options.stopOnTimeout).then(function (results) {
|
|
705
|
-
resolve(results);
|
|
706
|
-
})["catch"](function (e) {
|
|
707
|
-
resolve({
|
|
708
|
-
failed: true,
|
|
709
|
-
verbosePassed: "",
|
|
710
|
-
verboseSkipped: "",
|
|
711
|
-
verboseFailed: "Tests execution failed",
|
|
712
|
-
error: JSON.stringify(e),
|
|
713
|
-
passedAmount: 0,
|
|
714
|
-
skippedAmount: 0,
|
|
715
|
-
failedAmount: 1,
|
|
716
|
-
csv: "",
|
|
717
|
-
df: undefined
|
|
718
|
-
});
|
|
719
|
-
});
|
|
720
|
-
});
|
|
721
|
-
}, testExecutionData, browserOptions);
|
|
722
|
-
case 22:
|
|
723
|
-
testingResults = _context9.sent;
|
|
724
|
-
if (!browserOptions.record) {
|
|
725
|
-
_context9.next = 26;
|
|
726
|
-
break;
|
|
727
|
-
}
|
|
728
|
-
_context9.next = 26;
|
|
729
|
-
return recorder.stop();
|
|
730
|
-
case 26:
|
|
731
|
-
if (!(browser != null)) {
|
|
732
|
-
_context9.next = 29;
|
|
733
|
-
break;
|
|
734
|
-
}
|
|
735
|
-
_context9.next = 29;
|
|
736
|
-
return browser.close();
|
|
737
|
-
case 29:
|
|
738
|
-
return _context9.abrupt("return", testingResults);
|
|
739
|
-
case 30:
|
|
740
|
-
case "end":
|
|
741
|
-
return _context9.stop();
|
|
742
|
-
}
|
|
743
|
-
}, _callee9);
|
|
744
|
-
})), testInvocationTimeout);
|
|
745
|
-
case 3:
|
|
746
|
-
return _context10.abrupt("return", _context10.sent);
|
|
747
|
-
case 4:
|
|
748
|
-
case "end":
|
|
749
|
-
return _context10.stop();
|
|
307
|
+
async function helloTests(testsParams, stopOnFail) {
|
|
308
|
+
let failed = false;
|
|
309
|
+
let verbosePassed = "";
|
|
310
|
+
let verboseSkipped = "";
|
|
311
|
+
let verboseFailed = "";
|
|
312
|
+
let error = "";
|
|
313
|
+
let countPassed = 0;
|
|
314
|
+
let countSkipped = 0;
|
|
315
|
+
let countFailed = 0;
|
|
316
|
+
let resultDF = undefined;
|
|
317
|
+
let lastTest = null;
|
|
318
|
+
let res = '';
|
|
319
|
+
try {
|
|
320
|
+
for (let testParam of testsParams) {
|
|
321
|
+
lastTest = testParam;
|
|
322
|
+
let df = await window.grok.functions.call(testParam.package + ':test', testParam.params);
|
|
323
|
+
let flakingCol = window.DG.Column.fromType(window.DG.COLUMN_TYPE.BOOL, 'flaking', df.rowCount);
|
|
324
|
+
df.columns.add(flakingCol);
|
|
325
|
+
let packageNameCol = window.DG.Column.fromList(window.DG.COLUMN_TYPE.STRING, 'package', Array(df.rowCount).fill(testParam.package));
|
|
326
|
+
df.columns.add(packageNameCol);
|
|
327
|
+
if (df.rowCount === 0) {
|
|
328
|
+
verboseFailed += `Test result : Invocation Fail : ${testParam.params.category}: ${testParam.params.test}\n`;
|
|
329
|
+
countFailed += 1;
|
|
330
|
+
failed = true;
|
|
331
|
+
continue;
|
|
750
332
|
}
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
333
|
+
let row = df.rows.get(0);
|
|
334
|
+
if (df.rowCount > 1) {
|
|
335
|
+
let unhandledErrorRow = df.rows.get(1);
|
|
336
|
+
if (!unhandledErrorRow.get("success")) {
|
|
337
|
+
unhandledErrorRow["category"] = row.get("category");
|
|
338
|
+
unhandledErrorRow["name"] = row.get("name");
|
|
339
|
+
row = unhandledErrorRow;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
const category = row.get("category");
|
|
343
|
+
const testName = row.get("name");
|
|
344
|
+
const time = row.get("ms");
|
|
345
|
+
const result = row.get("result");
|
|
346
|
+
const success = row.get("success");
|
|
347
|
+
const skipped = row.get("skipped");
|
|
348
|
+
row["flaking"] = success && window.DG.Test.isReproducing;
|
|
349
|
+
df.changeColumnType('result', window.DG.COLUMN_TYPE.STRING);
|
|
350
|
+
df.changeColumnType('logs', window.DG.COLUMN_TYPE.STRING);
|
|
351
|
+
df.changeColumnType('memoryDelta', window.DG.COLUMN_TYPE.BIG_INT);
|
|
352
|
+
if (resultDF === undefined) resultDF = df;else resultDF = resultDF.append(df);
|
|
353
|
+
if (row["skipped"]) {
|
|
354
|
+
verboseSkipped += `Test result : Skipped : ${time} : ${category}: ${testName} : ${result}\n`;
|
|
355
|
+
countSkipped += 1;
|
|
356
|
+
} else if (row["success"]) {
|
|
357
|
+
verbosePassed += `Test result : Success : ${time} : ${category}: ${testName} : ${result}\n`;
|
|
358
|
+
countPassed += 1;
|
|
359
|
+
} else {
|
|
360
|
+
verboseFailed += `Test result : Failed : ${time} : ${category}: ${testName} : ${result}\n`;
|
|
361
|
+
countFailed += 1;
|
|
362
|
+
failed = true;
|
|
363
|
+
}
|
|
364
|
+
if (success !== true && skipped !== true && stopOnFail) break;
|
|
365
|
+
}
|
|
366
|
+
if (window.DG.Test.isInDebug) {
|
|
367
|
+
console.log('on browser closing debug point');
|
|
368
|
+
debugger;
|
|
369
|
+
}
|
|
370
|
+
res = '';
|
|
371
|
+
if (resultDF) {
|
|
372
|
+
const bs = window.DG.BitSet.create(resultDF.rowCount);
|
|
373
|
+
bs.setAll(true);
|
|
374
|
+
for (let i = 0; i < resultDF.rowCount; i++) {
|
|
375
|
+
if (resultDF.rows.get(i).get('category') === 'Unhandled exceptions') {
|
|
376
|
+
bs.set(i, false);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
resultDF = resultDF.clone(bs);
|
|
380
|
+
res = resultDF.toCsv();
|
|
381
|
+
}
|
|
382
|
+
} catch (e) {
|
|
383
|
+
failed = true;
|
|
384
|
+
error = lastTest ? `category: ${lastTest.params.category}, name: ${lastTest.params.test}, error: ${e}, ${await window.DG.Logger.translateStackTrace(e.stack)}` : `test: null, error: ${e}, ${await window.DG.Logger.translateStackTrace(e.stack)}`;
|
|
385
|
+
}
|
|
386
|
+
return {
|
|
387
|
+
failed: failed,
|
|
388
|
+
verbosePassed: verbosePassed,
|
|
389
|
+
verboseSkipped: verboseSkipped,
|
|
390
|
+
verboseFailed: verboseFailed,
|
|
391
|
+
passedAmount: countPassed,
|
|
392
|
+
skippedAmount: countSkipped,
|
|
393
|
+
failedAmount: countFailed,
|
|
394
|
+
error: error,
|
|
395
|
+
csv: res
|
|
396
|
+
// df: resultDF?.toJson()
|
|
397
|
+
};
|
|
754
398
|
}
|
|
755
|
-
function
|
|
756
|
-
|
|
399
|
+
async function runBrowser(testExecutionData, browserOptions, browsersId, testInvocationTimeout = 3600000) {
|
|
400
|
+
let testsToRun = {
|
|
401
|
+
func: helloTests.toString(),
|
|
402
|
+
tests: testExecutionData
|
|
403
|
+
};
|
|
404
|
+
return await timeout(async () => {
|
|
405
|
+
const params = Object.assign({
|
|
406
|
+
devtools: browserOptions.debug
|
|
407
|
+
}, defaultLaunchParameters);
|
|
408
|
+
if (browserOptions.gui) params['headless'] = false;
|
|
409
|
+
const out = await getBrowserPage(_puppeteer.default, params);
|
|
410
|
+
const browser = out.browser;
|
|
411
|
+
const page = out.page;
|
|
412
|
+
const recorder = new _puppeteerScreenRecorder.PuppeteerScreenRecorder(page, recorderConfig);
|
|
413
|
+
const currentBrowserNum = browsersId;
|
|
414
|
+
const logsDir = `./test-console-output-${currentBrowserNum}.log`;
|
|
415
|
+
const recordDir = `./test-record-${currentBrowserNum}.mp4`;
|
|
416
|
+
if (browserOptions.record) {
|
|
417
|
+
await recorder.start(recordDir);
|
|
418
|
+
await page.exposeFunction("addLogsToFile", addLogsToFile);
|
|
419
|
+
_fs.default.writeFileSync(logsDir, ``);
|
|
420
|
+
page.on('console', msg => {
|
|
421
|
+
addLogsToFile(logsDir, `CONSOLE LOG ENTRY: ${msg.text()}\n`);
|
|
422
|
+
});
|
|
423
|
+
page.on('pageerror', error => {
|
|
424
|
+
addLogsToFile(logsDir, `CONSOLE LOG ERROR: ${error.message}\n`);
|
|
425
|
+
});
|
|
426
|
+
page.on('response', response => {
|
|
427
|
+
addLogsToFile(logsDir, `CONSOLE LOG REQUEST: ${response.status()}, ${response.url()}\n`);
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
let testingResults = await page.evaluate((testData, options) => {
|
|
431
|
+
if (options.benchmark) window.DG.Test.isInBenchmark = true;
|
|
432
|
+
if (options.reproduce) window.DG.Test.isReproducing = true;
|
|
433
|
+
if (options.ciCd) window.DG.Test.isCiCd = true;
|
|
434
|
+
if (options.debug) window.DG.Test.isInDebug = true;
|
|
435
|
+
return new Promise((resolve, reject) => {
|
|
436
|
+
window.helloTests = eval('(' + testData.func + ')');
|
|
437
|
+
window.helloTests(testData.tests, options.stopOnTimeout).then(results => {
|
|
438
|
+
resolve(results);
|
|
439
|
+
}).catch(e => {
|
|
440
|
+
resolve({
|
|
441
|
+
failed: true,
|
|
442
|
+
verbosePassed: "",
|
|
443
|
+
verboseSkipped: "",
|
|
444
|
+
verboseFailed: "",
|
|
445
|
+
error: JSON.stringify(e),
|
|
446
|
+
passedAmount: 0,
|
|
447
|
+
skippedAmount: 0,
|
|
448
|
+
failedAmount: 1,
|
|
449
|
+
csv: "",
|
|
450
|
+
df: undefined
|
|
451
|
+
});
|
|
452
|
+
});
|
|
453
|
+
|
|
454
|
+
// (<any>window).DG.Utils.executeTests(testData.tests, options.stopOnTimeout)
|
|
455
|
+
// .then((results: any) => {
|
|
456
|
+
// resolve(results);
|
|
457
|
+
// })
|
|
458
|
+
// .catch((e: any) => {
|
|
459
|
+
// resolve({
|
|
460
|
+
// failed: true,
|
|
461
|
+
// verbosePassed: "",
|
|
462
|
+
// verboseSkipped: "",
|
|
463
|
+
// verboseFailed: "Tests execution failed",
|
|
464
|
+
// passedAmount: 0,
|
|
465
|
+
// skippedAmount: 0,
|
|
466
|
+
// failedAmount: 1,
|
|
467
|
+
// csv: "",
|
|
468
|
+
// df: undefined
|
|
469
|
+
// })
|
|
470
|
+
// });
|
|
471
|
+
});
|
|
472
|
+
}, testsToRun, browserOptions);
|
|
473
|
+
if (browserOptions.record) {
|
|
474
|
+
await recorder.stop();
|
|
475
|
+
}
|
|
476
|
+
if (browser != null) {
|
|
477
|
+
await browser.close();
|
|
478
|
+
}
|
|
479
|
+
return testingResults;
|
|
480
|
+
}, testInvocationTimeout);
|
|
757
481
|
}
|
|
758
|
-
function
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
break;
|
|
786
|
-
}
|
|
787
|
-
return _context11.abrupt("continue", 19);
|
|
788
|
-
case 8:
|
|
789
|
-
mergedResult.failed = mergedResult.failed || browsersResult.failed;
|
|
790
|
-
mergedResult.verbosePassed = "".concat(mergedResult.verbosePassed.trim(), "\n").concat(browsersResult.verbosePassed.trim());
|
|
791
|
-
mergedResult.verboseFailed = "".concat(mergedResult.verboseFailed.trim(), "\n").concat(browsersResult.verboseFailed.trim());
|
|
792
|
-
mergedResult.verboseSkipped = "".concat(mergedResult.verboseSkipped.trim(), "\n").concat(browsersResult.verboseSkipped.trim());
|
|
793
|
-
mergedResult.passedAmount += browsersResult.passedAmount;
|
|
794
|
-
mergedResult.failedAmount += browsersResult.failedAmount;
|
|
795
|
-
mergedResult.skippedAmount += browsersResult.skippedAmount;
|
|
796
|
-
resultToMerdge1 = mergedResult.csv.trim().split('\n');
|
|
797
|
-
resultToMerdge2 = browsersResult.csv.trim().split('\n');
|
|
798
|
-
header = resultToMerdge1[0];
|
|
799
|
-
mergedResult.csv = [header].concat((0, _toConsumableArray2["default"])(resultToMerdge1.slice(1)), (0, _toConsumableArray2["default"])(resultToMerdge2.slice(1))).join('\n');
|
|
800
|
-
case 19:
|
|
801
|
-
_context11.next = 4;
|
|
802
|
-
break;
|
|
803
|
-
case 21:
|
|
804
|
-
_context11.next = 26;
|
|
805
|
-
break;
|
|
806
|
-
case 23:
|
|
807
|
-
_context11.prev = 23;
|
|
808
|
-
_context11.t0 = _context11["catch"](2);
|
|
809
|
-
_iterator5.e(_context11.t0);
|
|
810
|
-
case 26:
|
|
811
|
-
_context11.prev = 26;
|
|
812
|
-
_iterator5.f();
|
|
813
|
-
return _context11.finish(26);
|
|
814
|
-
case 29:
|
|
815
|
-
return _context11.abrupt("return", mergedResult);
|
|
816
|
-
case 30:
|
|
817
|
-
case "end":
|
|
818
|
-
return _context11.stop();
|
|
819
|
-
}
|
|
820
|
-
}, _callee11, null, [[2, 23, 26, 29]]);
|
|
821
|
-
}));
|
|
822
|
-
return _mergeBrowsersResults.apply(this, arguments);
|
|
482
|
+
async function mergeBrowsersResults(browsersResults) {
|
|
483
|
+
let mergedResult = {
|
|
484
|
+
failed: browsersResults[0].failed,
|
|
485
|
+
verbosePassed: browsersResults[0].verbosePassed,
|
|
486
|
+
verboseSkipped: browsersResults[0].verboseSkipped,
|
|
487
|
+
verboseFailed: browsersResults[0].verboseFailed,
|
|
488
|
+
passedAmount: browsersResults[0].passedAmount,
|
|
489
|
+
skippedAmount: browsersResults[0].skippedAmount,
|
|
490
|
+
failedAmount: browsersResults[0].failedAmount,
|
|
491
|
+
csv: browsersResults[0].csv,
|
|
492
|
+
error: ''
|
|
493
|
+
};
|
|
494
|
+
for (let browsersResult of browsersResults) {
|
|
495
|
+
if (mergedResult.csv === browsersResult.csv) continue;
|
|
496
|
+
mergedResult.failed = mergedResult.failed || browsersResult.failed;
|
|
497
|
+
mergedResult.verbosePassed = `${mergedResult.verbosePassed.trim()}\n${browsersResult.verbosePassed.trim()}`;
|
|
498
|
+
mergedResult.verboseFailed = `${mergedResult.verboseFailed.trim()}\n${browsersResult.verboseFailed.trim()}`;
|
|
499
|
+
mergedResult.verboseSkipped = `${mergedResult.verboseSkipped.trim()}\n${browsersResult.verboseSkipped.trim()}`;
|
|
500
|
+
mergedResult.passedAmount += browsersResult.passedAmount;
|
|
501
|
+
mergedResult.failedAmount += browsersResult.failedAmount;
|
|
502
|
+
mergedResult.skippedAmount += browsersResult.skippedAmount;
|
|
503
|
+
const resultToMerdge1 = mergedResult.csv.trim().split('\n');
|
|
504
|
+
const resultToMerdge2 = browsersResult.csv.trim().split('\n');
|
|
505
|
+
const header = resultToMerdge1[0];
|
|
506
|
+
mergedResult.csv = [header, ...resultToMerdge1.slice(1), ...resultToMerdge2.slice(1)].join('\n');
|
|
507
|
+
}
|
|
508
|
+
return mergedResult;
|
|
823
509
|
}
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
(
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
}
|
|
831
|
-
function addColumnToCsv(_x22, _x23, _x24) {
|
|
832
|
-
return _addColumnToCsv.apply(this, arguments);
|
|
510
|
+
class TestContext {
|
|
511
|
+
catchUnhandled = true;
|
|
512
|
+
report = false;
|
|
513
|
+
constructor(catchUnhandled, report) {
|
|
514
|
+
if (catchUnhandled !== undefined) this.catchUnhandled = catchUnhandled;
|
|
515
|
+
if (report !== undefined) this.report = report;
|
|
516
|
+
}
|
|
833
517
|
}
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
});
|
|
852
|
-
}
|
|
853
|
-
});
|
|
854
|
-
return _context12.abrupt("return", result);
|
|
855
|
-
case 3:
|
|
856
|
-
case "end":
|
|
857
|
-
return _context12.stop();
|
|
858
|
-
}
|
|
859
|
-
}, _callee12);
|
|
860
|
-
}));
|
|
861
|
-
return _addColumnToCsv.apply(this, arguments);
|
|
518
|
+
exports.TestContext = TestContext;
|
|
519
|
+
async function addColumnToCsv(csv, columnName, defaultValue) {
|
|
520
|
+
let result = csv;
|
|
521
|
+
_papaparse.default.parse(csv, {
|
|
522
|
+
header: true,
|
|
523
|
+
skipEmptyLines: true,
|
|
524
|
+
complete: function (results) {
|
|
525
|
+
const dataWithDefaultColumn = results.data.map(row => {
|
|
526
|
+
row[columnName] = defaultValue;
|
|
527
|
+
return row;
|
|
528
|
+
});
|
|
529
|
+
result = _papaparse.default.unparse(dataWithDefaultColumn, {
|
|
530
|
+
header: true
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
});
|
|
534
|
+
return result;
|
|
862
535
|
}
|