datagrok-tools 4.13.75 → 4.13.76
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 +169 -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 +322 -750
- package/bin/utils/utils.js +123 -235
- package/bin/validators/config-validator.js +12 -14
- package/package.json +13 -3
package/bin/commands/test.js
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
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
|
});
|
|
8
7
|
exports.test = test;
|
|
9
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
8
|
var _fs = _interopRequireDefault(require("fs"));
|
|
12
9
|
var _os = _interopRequireDefault(require("os"));
|
|
13
10
|
var _path = _interopRequireDefault(require("path"));
|
|
@@ -18,407 +15,191 @@ var Papa = _interopRequireWildcard(require("papaparse"));
|
|
|
18
15
|
var _testUtils = _interopRequireWildcard(require("../utils/test-utils"));
|
|
19
16
|
var testUtils = _testUtils;
|
|
20
17
|
var _orderFunctions = require("../utils/order-functions");
|
|
21
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function
|
|
22
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" !=
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
function _test() {
|
|
37
|
-
_test = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(args) {
|
|
38
|
-
var config, packageJsonData, packageName, packagesDir, res;
|
|
39
|
-
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
40
|
-
while (1) switch (_context.prev = _context.next) {
|
|
41
|
-
case 0:
|
|
42
|
-
config = _jsYaml["default"].load(_fs["default"].readFileSync(confPath, {
|
|
43
|
-
encoding: 'utf-8'
|
|
44
|
-
}));
|
|
45
|
-
isArgsValid(args);
|
|
46
|
-
utils.setHost(args.host, config);
|
|
47
|
-
packageJsonData = undefined;
|
|
48
|
-
if (!args["package"]) packageJsonData = JSON.parse(_fs["default"].readFileSync(_path["default"].join(curDir, 'package.json'), {
|
|
49
|
-
encoding: 'utf-8'
|
|
50
|
-
}));
|
|
51
|
-
packageName = args["package"] ? utils.kebabToCamelCase(args["package"]) : utils.kebabToCamelCase(utils.removeScope(packageJsonData.name));
|
|
52
|
-
packagesDir = _path["default"].basename(curDir) === "packages" ? curDir : _path["default"].dirname(curDir);
|
|
53
|
-
console.log('Environment variable `TARGET_PACKAGE` is set to', packageName);
|
|
54
|
-
if (args.platform && packageName !== 'ApiTests') color.warn('--platform flag can only be used in the ApiTests package');
|
|
55
|
-
// if (args.core && packageName !== 'DevTools')
|
|
56
|
-
// color.warn('--core flag can only be used in the DevTools package');
|
|
57
|
-
if (args["package"]) {
|
|
58
|
-
_context.next = 12;
|
|
59
|
-
break;
|
|
60
|
-
}
|
|
61
|
-
_context.next = 12;
|
|
62
|
-
return testUtils.loadPackages(packagesDir, packageName, args.host, args['skip-publish'], args['skip-build'], args.link);
|
|
63
|
-
case 12:
|
|
64
|
-
process.env.TARGET_PACKAGE = packageName;
|
|
65
|
-
_context.next = 15;
|
|
66
|
-
return runTesting(args);
|
|
67
|
-
case 15:
|
|
68
|
-
res = _context.sent;
|
|
69
|
-
if (args.csv) (0, _testUtils.saveCsvResults)([res.csv], csvReportDir);
|
|
70
|
-
(0, _testUtils.printBrowsersResult)(res, args.verbose);
|
|
71
|
-
if (res.failed) {
|
|
72
|
-
if (res.verboseFailed === 'Package not found') testUtils.exitWithCode(0);
|
|
73
|
-
testUtils.exitWithCode(1);
|
|
74
|
-
} else testUtils.exitWithCode(0);
|
|
75
|
-
return _context.abrupt("return", true);
|
|
76
|
-
case 20:
|
|
77
|
-
case "end":
|
|
78
|
-
return _context.stop();
|
|
79
|
-
}
|
|
80
|
-
}, _callee);
|
|
18
|
+
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); }
|
|
19
|
+
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; }
|
|
20
|
+
/* eslint-disable max-len */
|
|
21
|
+
|
|
22
|
+
const testInvocationTimeout = 3600000;
|
|
23
|
+
const availableCommandOptions = ['host', 'package', 'csv', 'gui', 'catchUnhandled', 'platform', 'core', 'report', 'skip-build', 'skip-publish', 'path', 'record', 'verbose', 'benchmark', 'category', 'test', 'stress-test', 'link', 'tag', 'ci-cd', 'debug'];
|
|
24
|
+
const curDir = process.cwd();
|
|
25
|
+
const grokDir = _path.default.join(_os.default.homedir(), '.grok');
|
|
26
|
+
const confPath = _path.default.join(grokDir, 'config.yaml');
|
|
27
|
+
const consoleLogOutputDir = _path.default.join(curDir, 'test-console-output.log');
|
|
28
|
+
const csvReportDir = _path.default.join(curDir, 'test-report.csv');
|
|
29
|
+
async function test(args) {
|
|
30
|
+
const config = _jsYaml.default.load(_fs.default.readFileSync(confPath, {
|
|
31
|
+
encoding: 'utf-8'
|
|
81
32
|
}));
|
|
82
|
-
|
|
33
|
+
isArgsValid(args);
|
|
34
|
+
utils.setHost(args.host, config);
|
|
35
|
+
let packageJsonData = undefined;
|
|
36
|
+
if (!args.package) packageJsonData = JSON.parse(_fs.default.readFileSync(_path.default.join(curDir, 'package.json'), {
|
|
37
|
+
encoding: 'utf-8'
|
|
38
|
+
}));
|
|
39
|
+
let packageName = args.package ? utils.kebabToCamelCase(args.package) : utils.kebabToCamelCase(utils.removeScope(packageJsonData.name));
|
|
40
|
+
let packagesDir = _path.default.basename(curDir) === "packages" ? curDir : _path.default.dirname(curDir);
|
|
41
|
+
console.log('Environment variable `TARGET_PACKAGE` is set to', packageName);
|
|
42
|
+
if (args.platform && packageName !== 'ApiTests') color.warn('--platform flag can only be used in the ApiTests package');
|
|
43
|
+
// if (args.core && packageName !== 'DevTools')
|
|
44
|
+
// color.warn('--core flag can only be used in the DevTools package');
|
|
45
|
+
|
|
46
|
+
if (!args.package) {
|
|
47
|
+
await testUtils.loadPackages(packagesDir, packageName, args.host, args['skip-publish'], args['skip-build'], args.link);
|
|
48
|
+
}
|
|
49
|
+
process.env.TARGET_PACKAGE = packageName;
|
|
50
|
+
let res = await runTesting(args);
|
|
51
|
+
if (args.csv) (0, _testUtils.saveCsvResults)([res.csv], csvReportDir);
|
|
52
|
+
(0, _testUtils.printBrowsersResult)(res, args.verbose);
|
|
53
|
+
if (res.failed) {
|
|
54
|
+
if (res.verboseFailed === 'Package not found') testUtils.exitWithCode(0);
|
|
55
|
+
testUtils.exitWithCode(1);
|
|
56
|
+
} else testUtils.exitWithCode(0);
|
|
57
|
+
return true;
|
|
83
58
|
}
|
|
84
59
|
function isArgsValid(args) {
|
|
85
|
-
|
|
86
|
-
if (args['_'].length > 1 || options.length > availableCommandOptions.length || options.length > 0 && !options.every(
|
|
87
|
-
return availableCommandOptions.includes(op);
|
|
88
|
-
})) return false;
|
|
60
|
+
const options = Object.keys(args).slice(1);
|
|
61
|
+
if (args['_'].length > 1 || options.length > availableCommandOptions.length || options.length > 0 && !options.every(op => availableCommandOptions.includes(op))) return false;
|
|
89
62
|
return true;
|
|
90
63
|
}
|
|
91
|
-
function runTesting(
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
if (!(args.benchmark && !element.options.benchmark || args['stress-test'] && !element.options.stressTest)) {
|
|
121
|
-
_context3.next = 13;
|
|
122
|
-
break;
|
|
123
|
-
}
|
|
124
|
-
return _context3.abrupt("continue", 14);
|
|
125
|
-
case 13:
|
|
126
|
-
testsObj.push(element);
|
|
127
|
-
case 14:
|
|
128
|
-
_context3.next = 9;
|
|
129
|
-
break;
|
|
130
|
-
case 16:
|
|
131
|
-
_context3.next = 21;
|
|
132
|
-
break;
|
|
133
|
-
case 18:
|
|
134
|
-
_context3.prev = 18;
|
|
135
|
-
_context3.t0 = _context3["catch"](7);
|
|
136
|
-
_iterator.e(_context3.t0);
|
|
137
|
-
case 21:
|
|
138
|
-
_context3.prev = 21;
|
|
139
|
-
_iterator.f();
|
|
140
|
-
return _context3.finish(21);
|
|
141
|
-
case 24:
|
|
142
|
-
_context3.next = 27;
|
|
143
|
-
break;
|
|
144
|
-
case 26:
|
|
145
|
-
testsObj = loadedTests;
|
|
146
|
-
case 27:
|
|
147
|
-
parsed = (0, _orderFunctions.setAlphabeticalOrder)(testsObj, 1, 1);
|
|
148
|
-
if (!(parsed.length == 0)) {
|
|
149
|
-
_context3.next = 30;
|
|
150
|
-
break;
|
|
151
|
-
}
|
|
152
|
-
return _context3.abrupt("return", {
|
|
153
|
-
failed: true,
|
|
154
|
-
verbosePassed: 'Package not found',
|
|
155
|
-
verboseSkipped: 'Package not found',
|
|
156
|
-
verboseFailed: 'Package not found',
|
|
157
|
-
passedAmount: 0,
|
|
158
|
-
skippedAmount: 0,
|
|
159
|
-
failedAmount: 0,
|
|
160
|
-
csv: ''
|
|
161
|
-
});
|
|
162
|
-
case 30:
|
|
163
|
-
organized = parsed[0].map(function (testObj) {
|
|
164
|
-
return {
|
|
165
|
-
"package": testObj.packageName,
|
|
166
|
-
params: {
|
|
167
|
-
category: testObj.category,
|
|
168
|
-
test: testObj.name,
|
|
169
|
-
options: {
|
|
170
|
-
catchUnhandled: args.catchUnhandled,
|
|
171
|
-
report: args.report
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
};
|
|
175
|
-
});
|
|
176
|
-
filtered = [];
|
|
177
|
-
categoryRegex = new RegExp("".concat((_args$category = args.category) === null || _args$category === void 0 ? void 0 : _args$category.replaceAll(' ', ''), ".*"));
|
|
178
|
-
if (args.category) {
|
|
179
|
-
_iterator2 = _createForOfIteratorHelper(organized);
|
|
180
|
-
try {
|
|
181
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
182
|
-
_element = _step2.value;
|
|
183
|
-
if (categoryRegex.test(_element.params.category.replaceAll(' ', ''))) {
|
|
184
|
-
if (_element.params.test === args.test || !args.test) filtered.push(_element);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
} catch (err) {
|
|
188
|
-
_iterator2.e(err);
|
|
189
|
-
} finally {
|
|
190
|
-
_iterator2.f();
|
|
191
|
-
}
|
|
192
|
-
organized = filtered;
|
|
193
|
-
}
|
|
194
|
-
if (args.verbose) {
|
|
195
|
-
console.log(organized);
|
|
196
|
-
console.log("Tests total: ".concat(organized.length));
|
|
197
|
-
}
|
|
198
|
-
color.info('Starting tests...');
|
|
199
|
-
testsResults = [];
|
|
200
|
-
browserId = 1;
|
|
201
|
-
_context3.next = 40;
|
|
202
|
-
return (0, _testUtils.timeout)( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
203
|
-
var _args$benchmark, _args$stressTest, _args$catchUnhandled, _args$gui, _args$record, _args$report, _args$verbose, _args$ciCd, _args$debug, _args$stressTest2, _args$benchmark2, testsLeft, testsToReproduce, _iterator3, _step3, testData, reproduced, _iterator4, _step4, _test2, _reproducedTest2;
|
|
204
|
-
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
205
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
206
|
-
case 0:
|
|
207
|
-
_context2.next = 2;
|
|
208
|
-
return (0, _testUtils.runBrowser)(organized, {
|
|
209
|
-
benchmark: (_args$benchmark = args.benchmark) !== null && _args$benchmark !== void 0 ? _args$benchmark : false,
|
|
210
|
-
stressTest: (_args$stressTest = args['stress-test']) !== null && _args$stressTest !== void 0 ? _args$stressTest : false,
|
|
211
|
-
catchUnhandled: (_args$catchUnhandled = args.catchUnhandled) !== null && _args$catchUnhandled !== void 0 ? _args$catchUnhandled : false,
|
|
212
|
-
gui: (_args$gui = args.gui) !== null && _args$gui !== void 0 ? _args$gui : false,
|
|
213
|
-
record: (_args$record = args.record) !== null && _args$record !== void 0 ? _args$record : false,
|
|
214
|
-
report: (_args$report = args.report) !== null && _args$report !== void 0 ? _args$report : false,
|
|
215
|
-
verbose: (_args$verbose = args.verbose) !== null && _args$verbose !== void 0 ? _args$verbose : false,
|
|
216
|
-
ciCd: (_args$ciCd = args['ci-cd']) !== null && _args$ciCd !== void 0 ? _args$ciCd : false,
|
|
217
|
-
stopOnTimeout: true,
|
|
218
|
-
debug: (_args$debug = args['debug']) !== null && _args$debug !== void 0 ? _args$debug : false
|
|
219
|
-
}, browserId, testInvocationTimeout);
|
|
220
|
-
case 2:
|
|
221
|
-
r = _context2.sent;
|
|
222
|
-
testsLeft = [];
|
|
223
|
-
testsToReproduce = [];
|
|
224
|
-
_iterator3 = _createForOfIteratorHelper(organized);
|
|
225
|
-
try {
|
|
226
|
-
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
227
|
-
testData = _step3.value;
|
|
228
|
-
if (!r.verbosePassed.includes("".concat(testData.params.category, ": ").concat(testData.params.test)) && !r.verboseSkipped.includes("".concat(testData.params.category, ": ").concat(testData.params.test)) && !r.verboseFailed.includes("".concat(testData.params.category, ": ").concat(testData.params.test)) && !new RegExp("".concat(testData.params.category.trim(), "[^\\n]*: (before|after)")).test(r.verboseFailed)) testsLeft.push(testData);
|
|
229
|
-
if (r.verboseFailed.includes("".concat(testData.params.category, ": ").concat(testData.params.test, " : Error:"))) {
|
|
230
|
-
testsToReproduce.push(testData);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
} catch (err) {
|
|
234
|
-
_iterator3.e(err);
|
|
235
|
-
} finally {
|
|
236
|
-
_iterator3.f();
|
|
237
|
-
}
|
|
238
|
-
if (!(testsToReproduce.length > 0)) {
|
|
239
|
-
_context2.next = 31;
|
|
240
|
-
break;
|
|
241
|
-
}
|
|
242
|
-
_context2.next = 10;
|
|
243
|
-
return reproducedTest(args, testsToReproduce);
|
|
244
|
-
case 10:
|
|
245
|
-
reproduced = _context2.sent;
|
|
246
|
-
_iterator4 = _createForOfIteratorHelper(testsToReproduce);
|
|
247
|
-
_context2.prev = 12;
|
|
248
|
-
_iterator4.s();
|
|
249
|
-
case 14:
|
|
250
|
-
if ((_step4 = _iterator4.n()).done) {
|
|
251
|
-
_context2.next = 23;
|
|
252
|
-
break;
|
|
253
|
-
}
|
|
254
|
-
_test2 = _step4.value;
|
|
255
|
-
_reproducedTest2 = reproduced.get(_test2);
|
|
256
|
-
if (!(_reproducedTest2 && !_reproducedTest2.failed)) {
|
|
257
|
-
_context2.next = 21;
|
|
258
|
-
break;
|
|
259
|
-
}
|
|
260
|
-
_context2.next = 20;
|
|
261
|
-
return updateResultsByReproduced(r, _reproducedTest2, _test2);
|
|
262
|
-
case 20:
|
|
263
|
-
r = _context2.sent;
|
|
264
|
-
case 21:
|
|
265
|
-
_context2.next = 14;
|
|
266
|
-
break;
|
|
267
|
-
case 23:
|
|
268
|
-
_context2.next = 28;
|
|
269
|
-
break;
|
|
270
|
-
case 25:
|
|
271
|
-
_context2.prev = 25;
|
|
272
|
-
_context2.t0 = _context2["catch"](12);
|
|
273
|
-
_iterator4.e(_context2.t0);
|
|
274
|
-
case 28:
|
|
275
|
-
_context2.prev = 28;
|
|
276
|
-
_iterator4.f();
|
|
277
|
-
return _context2.finish(28);
|
|
278
|
-
case 31:
|
|
279
|
-
_context2.next = 33;
|
|
280
|
-
return (0, _testUtils.addColumnToCsv)(r.csv, "stress_test", (_args$stressTest2 = args['stress-test']) !== null && _args$stressTest2 !== void 0 ? _args$stressTest2 : false);
|
|
281
|
-
case 33:
|
|
282
|
-
r.csv = _context2.sent;
|
|
283
|
-
_context2.next = 36;
|
|
284
|
-
return (0, _testUtils.addColumnToCsv)(r.csv, "benchmark", (_args$benchmark2 = args.benchmark) !== null && _args$benchmark2 !== void 0 ? _args$benchmark2 : false);
|
|
285
|
-
case 36:
|
|
286
|
-
r.csv = _context2.sent;
|
|
287
|
-
testsResults.push(r);
|
|
288
|
-
organized = testsLeft;
|
|
289
|
-
browserId++;
|
|
290
|
-
if (!(r.verboseFailed === 'Tests execution failed')) {
|
|
291
|
-
_context2.next = 43;
|
|
292
|
-
break;
|
|
293
|
-
}
|
|
294
|
-
if (r.error) console.log(r.error);
|
|
295
|
-
return _context2.abrupt("break", 44);
|
|
296
|
-
case 43:
|
|
297
|
-
if (r.failed) {
|
|
298
|
-
_context2.next = 0;
|
|
299
|
-
break;
|
|
300
|
-
}
|
|
301
|
-
case 44:
|
|
302
|
-
case "end":
|
|
303
|
-
return _context2.stop();
|
|
304
|
-
}
|
|
305
|
-
}, _callee2, null, [[12, 25, 28, 31]]);
|
|
306
|
-
})), testInvocationTimeout);
|
|
307
|
-
case 40:
|
|
308
|
-
_context3.next = 42;
|
|
309
|
-
return (0, _testUtils.mergeBrowsersResults)(testsResults);
|
|
310
|
-
case 42:
|
|
311
|
-
return _context3.abrupt("return", _context3.sent);
|
|
312
|
-
case 43:
|
|
313
|
-
case "end":
|
|
314
|
-
return _context3.stop();
|
|
64
|
+
async function runTesting(args) {
|
|
65
|
+
color.info('Loading tests...');
|
|
66
|
+
const loadedTests = await (0, _testUtils.loadTestsList)([process.env.TARGET_PACKAGE ?? ''], args.core);
|
|
67
|
+
let testsObj = [];
|
|
68
|
+
if (args['stress-test'] || args.benchmark) {
|
|
69
|
+
for (let element of loadedTests) {
|
|
70
|
+
if (args.benchmark && !element.options.benchmark || args['stress-test'] && !element.options.stressTest) continue;
|
|
71
|
+
testsObj.push(element);
|
|
72
|
+
}
|
|
73
|
+
} else testsObj = loadedTests;
|
|
74
|
+
const parsed = (0, _orderFunctions.setAlphabeticalOrder)(testsObj, 1, 1);
|
|
75
|
+
if (parsed.length == 0) return {
|
|
76
|
+
failed: true,
|
|
77
|
+
verbosePassed: 'Package not found',
|
|
78
|
+
verboseSkipped: 'Package not found',
|
|
79
|
+
verboseFailed: 'Package not found',
|
|
80
|
+
passedAmount: 0,
|
|
81
|
+
skippedAmount: 0,
|
|
82
|
+
failedAmount: 0,
|
|
83
|
+
csv: ''
|
|
84
|
+
};
|
|
85
|
+
let organized = parsed[0].map(testObj => ({
|
|
86
|
+
package: testObj.packageName,
|
|
87
|
+
params: {
|
|
88
|
+
category: testObj.category,
|
|
89
|
+
test: testObj.name,
|
|
90
|
+
options: {
|
|
91
|
+
catchUnhandled: args.catchUnhandled,
|
|
92
|
+
report: args.report
|
|
315
93
|
}
|
|
316
|
-
}
|
|
94
|
+
}
|
|
317
95
|
}));
|
|
318
|
-
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
_reproducedTest = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(args, testsToReproduce) {
|
|
325
|
-
var res, _iterator5, _step5, _args$benchmark3, _args$ciCd2, _test3, r;
|
|
326
|
-
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
|
327
|
-
while (1) switch (_context4.prev = _context4.next) {
|
|
328
|
-
case 0:
|
|
329
|
-
res = new Map();
|
|
330
|
-
_iterator5 = _createForOfIteratorHelper(testsToReproduce);
|
|
331
|
-
_context4.prev = 2;
|
|
332
|
-
_iterator5.s();
|
|
333
|
-
case 4:
|
|
334
|
-
if ((_step5 = _iterator5.n()).done) {
|
|
335
|
-
_context4.next = 12;
|
|
336
|
-
break;
|
|
337
|
-
}
|
|
338
|
-
_test3 = _step5.value;
|
|
339
|
-
_context4.next = 8;
|
|
340
|
-
return (0, _testUtils.runBrowser)([_test3], {
|
|
341
|
-
benchmark: (_args$benchmark3 = args.benchmark) !== null && _args$benchmark3 !== void 0 ? _args$benchmark3 : false,
|
|
342
|
-
catchUnhandled: false,
|
|
343
|
-
gui: false,
|
|
344
|
-
record: false,
|
|
345
|
-
report: false,
|
|
346
|
-
verbose: false,
|
|
347
|
-
stopOnTimeout: true,
|
|
348
|
-
reproduce: true,
|
|
349
|
-
ciCd: (_args$ciCd2 = args['ci-cd']) !== null && _args$ciCd2 !== void 0 ? _args$ciCd2 : false
|
|
350
|
-
}, 0, testInvocationTimeout);
|
|
351
|
-
case 8:
|
|
352
|
-
r = _context4.sent;
|
|
353
|
-
if (_test3.params.category && _test3.params.test) res.set(_test3, r);
|
|
354
|
-
case 10:
|
|
355
|
-
_context4.next = 4;
|
|
356
|
-
break;
|
|
357
|
-
case 12:
|
|
358
|
-
_context4.next = 17;
|
|
359
|
-
break;
|
|
360
|
-
case 14:
|
|
361
|
-
_context4.prev = 14;
|
|
362
|
-
_context4.t0 = _context4["catch"](2);
|
|
363
|
-
_iterator5.e(_context4.t0);
|
|
364
|
-
case 17:
|
|
365
|
-
_context4.prev = 17;
|
|
366
|
-
_iterator5.f();
|
|
367
|
-
return _context4.finish(17);
|
|
368
|
-
case 20:
|
|
369
|
-
return _context4.abrupt("return", res);
|
|
370
|
-
case 21:
|
|
371
|
-
case "end":
|
|
372
|
-
return _context4.stop();
|
|
96
|
+
let filtered = [];
|
|
97
|
+
let categoryRegex = new RegExp(`${args.category?.replaceAll(' ', '')}.*`);
|
|
98
|
+
if (args.category) {
|
|
99
|
+
for (let element of organized) {
|
|
100
|
+
if (categoryRegex.test(element.params.category.replaceAll(' ', ''))) {
|
|
101
|
+
if (element.params.test === args.test || !args.test) filtered.push(element);
|
|
373
102
|
}
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
|
|
103
|
+
}
|
|
104
|
+
organized = filtered;
|
|
105
|
+
}
|
|
106
|
+
if (args.verbose) {
|
|
107
|
+
console.log(organized);
|
|
108
|
+
console.log(`Tests total: ${organized.length}`);
|
|
109
|
+
}
|
|
110
|
+
color.info('Starting tests...');
|
|
111
|
+
let testsResults = [];
|
|
112
|
+
let r;
|
|
113
|
+
let browserId = 1;
|
|
114
|
+
await (0, _testUtils.timeout)(async () => {
|
|
115
|
+
do {
|
|
116
|
+
r = await (0, _testUtils.runBrowser)(organized, {
|
|
117
|
+
benchmark: args.benchmark ?? false,
|
|
118
|
+
stressTest: args['stress-test'] ?? false,
|
|
119
|
+
catchUnhandled: args.catchUnhandled ?? false,
|
|
120
|
+
gui: args.gui ?? false,
|
|
121
|
+
record: args.record ?? false,
|
|
122
|
+
report: args.report ?? false,
|
|
123
|
+
verbose: args.verbose ?? false,
|
|
124
|
+
ciCd: args['ci-cd'] ?? false,
|
|
125
|
+
stopOnTimeout: true,
|
|
126
|
+
debug: args['debug'] ?? false
|
|
127
|
+
}, browserId, testInvocationTimeout);
|
|
128
|
+
let testsLeft = [];
|
|
129
|
+
let testsToReproduce = [];
|
|
130
|
+
for (let testData of organized) {
|
|
131
|
+
if (!r.verbosePassed.includes(`${testData.params.category}: ${testData.params.test}`) && !r.verboseSkipped.includes(`${testData.params.category}: ${testData.params.test}`) && !r.verboseFailed.includes(`${testData.params.category}: ${testData.params.test}`) && !new RegExp(`${testData.params.category.trim()}[^\\n]*: (before|after)`).test(r.verboseFailed)) testsLeft.push(testData);
|
|
132
|
+
if (r.verboseFailed.includes(`${testData.params.category}: ${testData.params.test} : Error:`)) {
|
|
133
|
+
testsToReproduce.push(testData);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (testsToReproduce.length > 0) {
|
|
137
|
+
let reproduced = await reproducedTest(args, testsToReproduce);
|
|
138
|
+
for (let test of testsToReproduce) {
|
|
139
|
+
let reproducedTest = reproduced.get(test);
|
|
140
|
+
if (reproducedTest && !reproducedTest.failed) r = await updateResultsByReproduced(r, reproducedTest, test);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
r.csv = await (0, _testUtils.addColumnToCsv)(r.csv, "stress_test", args['stress-test'] ?? false);
|
|
144
|
+
r.csv = await (0, _testUtils.addColumnToCsv)(r.csv, "benchmark", args.benchmark ?? false);
|
|
145
|
+
testsResults.push(r);
|
|
146
|
+
organized = testsLeft;
|
|
147
|
+
browserId++;
|
|
148
|
+
if (r.verboseFailed === 'Tests execution failed') {
|
|
149
|
+
if (r.error) console.log(r.error);
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
} while (r.failed);
|
|
153
|
+
}, testInvocationTimeout);
|
|
154
|
+
return await (0, _testUtils.mergeBrowsersResults)(testsResults);
|
|
377
155
|
}
|
|
378
|
-
function
|
|
379
|
-
|
|
156
|
+
async function reproducedTest(args, testsToReproduce) {
|
|
157
|
+
const res = new Map();
|
|
158
|
+
for (let test of testsToReproduce) {
|
|
159
|
+
let r = await (0, _testUtils.runBrowser)([test], {
|
|
160
|
+
benchmark: args.benchmark ?? false,
|
|
161
|
+
catchUnhandled: false,
|
|
162
|
+
gui: false,
|
|
163
|
+
record: false,
|
|
164
|
+
report: false,
|
|
165
|
+
verbose: false,
|
|
166
|
+
stopOnTimeout: true,
|
|
167
|
+
reproduce: true,
|
|
168
|
+
ciCd: args['ci-cd'] ?? false
|
|
169
|
+
}, 0, testInvocationTimeout);
|
|
170
|
+
if (test.params.category && test.params.test) res.set(test, r);
|
|
171
|
+
}
|
|
172
|
+
return res;
|
|
380
173
|
}
|
|
381
|
-
function
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
columns: table1.headers
|
|
403
|
-
});
|
|
404
|
-
;
|
|
405
|
-
curentResult.verboseFailed = curentResult.verboseFailed.replaceAll("".concat(testsParams.params.category, ": ").concat(testsParams.params.test, " : Error:"), "".concat(testsParams.params.category, ": ").concat(testsParams.params.test, " : Flaking Error:"));
|
|
406
|
-
return _context5.abrupt("return", curentResult);
|
|
407
|
-
case 10:
|
|
408
|
-
case "end":
|
|
409
|
-
return _context5.stop();
|
|
410
|
-
}
|
|
411
|
-
}, _callee5);
|
|
412
|
-
}));
|
|
413
|
-
return _updateResultsByReproduced.apply(this, arguments);
|
|
174
|
+
async function updateResultsByReproduced(curentResult, reproducedResult, testsParams) {
|
|
175
|
+
const table2Dict = {};
|
|
176
|
+
let table1 = readCSVResultData(curentResult.csv);
|
|
177
|
+
let table2 = readCSVResultData(reproducedResult.csv);
|
|
178
|
+
const flakingMap = {};
|
|
179
|
+
table2.rows.forEach(row => {
|
|
180
|
+
const key = `${row['category']},${row['name']}`;
|
|
181
|
+
flakingMap[key] = row['flaking'];
|
|
182
|
+
});
|
|
183
|
+
table1.rows.forEach(row => {
|
|
184
|
+
const key = `${row['category']},${row['name']}`;
|
|
185
|
+
if (key in flakingMap) {
|
|
186
|
+
row['flaking'] = flakingMap[key];
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
curentResult.csv = Papa.unparse(table1.rows, {
|
|
190
|
+
columns: table1.headers
|
|
191
|
+
});
|
|
192
|
+
;
|
|
193
|
+
curentResult.verboseFailed = curentResult.verboseFailed.replaceAll(`${testsParams.params.category}: ${testsParams.params.test} : Error:`, `${testsParams.params.category}: ${testsParams.params.test} : Flaking Error:`);
|
|
194
|
+
return curentResult;
|
|
414
195
|
}
|
|
415
196
|
function readCSVResultData(data) {
|
|
416
|
-
|
|
197
|
+
const parsed = Papa.parse(data, {
|
|
417
198
|
header: true,
|
|
418
199
|
skipEmptyLines: true
|
|
419
200
|
});
|
|
420
201
|
if (parsed.errors.length > 0) {
|
|
421
|
-
throw new Error(
|
|
202
|
+
throw new Error(`Error parsing CSV file: ${parsed.errors[0].message}`);
|
|
422
203
|
}
|
|
423
204
|
return {
|
|
424
205
|
headers: parsed.meta.fields || [],
|
package/bin/utils/color-utils.js
CHANGED
|
@@ -4,14 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.warn = exports.success = exports.info = exports.fail = exports.error = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
};
|
|
16
|
-
var success = exports.success = info;
|
|
17
|
-
var fail = exports.fail = error;
|
|
7
|
+
const error = s => console.log('\x1b[31m%s\x1b[0m', s);
|
|
8
|
+
exports.error = error;
|
|
9
|
+
const info = s => console.log('\x1b[32m%s\x1b[0m', s);
|
|
10
|
+
exports.info = info;
|
|
11
|
+
const warn = s => console.log('\x1b[33m%s\x1b[0m', s);
|
|
12
|
+
exports.warn = warn;
|
|
13
|
+
const success = exports.success = info;
|
|
14
|
+
const fail = exports.fail = error;
|