datagrok-tools 4.13.35 → 4.13.36

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/CHANGELOG.md CHANGED
@@ -1,6 +1,12 @@
1
1
  # Datagrok-tools changelog
2
2
 
3
3
 
4
+ ## 4.13.36 (2024-11-15)
5
+
6
+ ### Features
7
+
8
+ * Grok test reopens on each failed test
9
+
4
10
  ## 4.13.35 (2024-11-4)
5
11
 
6
12
  ### Features
@@ -14,6 +14,7 @@ var _path = _interopRequireDefault(require("path"));
14
14
  var _jsYaml = _interopRequireDefault(require("js-yaml"));
15
15
  var utils = _interopRequireWildcard(require("../utils/utils"));
16
16
  var color = _interopRequireWildcard(require("../utils/color-utils"));
17
+ var Papa = _interopRequireWildcard(require("papaparse"));
17
18
  var _testUtils = _interopRequireWildcard(require("../utils/test-utils"));
18
19
  var testUtils = _testUtils;
19
20
  var _orderFunctions = require("../utils/order-functions");
@@ -34,7 +35,7 @@ function test(_x) {
34
35
  }
35
36
  function _test() {
36
37
  _test = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(args) {
37
- var config, packageJsonData, packageName, packagesDir, categoryToCheck, testToCheck, res;
38
+ var config, packageJsonData, packageName, packagesDir, res;
38
39
  return _regenerator["default"].wrap(function _callee$(_context) {
39
40
  while (1) switch (_context.prev = _context.next) {
40
41
  case 0:
@@ -49,32 +50,26 @@ function _test() {
49
50
  }));
50
51
  packageName = args["package"] ? utils.kebabToCamelCase(args["package"]) : utils.kebabToCamelCase(utils.removeScope(packageJsonData.name));
51
52
  packagesDir = _path["default"].basename(curDir) === "packages" ? curDir : _path["default"].dirname(curDir);
52
- categoryToCheck = undefined;
53
- testToCheck = undefined;
54
- if (args.category) {
55
- categoryToCheck = args.category.toString();
56
- if (args.test) testToCheck = args.test.toString();
57
- }
58
53
  console.log('Environment variable `TARGET_PACKAGE` is set to', packageName);
59
54
  if (args.platform && packageName !== 'ApiTests') color.warn('--platform flag can only be used in the ApiTests package');
60
55
  if (args.core && packageName !== 'DevTools') color.warn('--core flag can only be used in the DevTools package');
61
56
  if (args["package"]) {
62
- _context.next = 16;
57
+ _context.next = 13;
63
58
  break;
64
59
  }
65
- _context.next = 16;
60
+ _context.next = 13;
66
61
  return testUtils.loadPackages(packagesDir, packageName, args.host, args['skip-publish'], args['skip-build'], args.link);
67
- case 16:
62
+ case 13:
68
63
  process.env.TARGET_PACKAGE = packageName;
69
- _context.next = 19;
70
- return runTesting(args, categoryToCheck, testToCheck);
71
- case 19:
64
+ _context.next = 16;
65
+ return runTesting(args);
66
+ case 16:
72
67
  res = _context.sent;
73
68
  if (args.csv) (0, _testUtils.saveCsvResults)([res.csv], csvReportDir);
74
69
  (0, _testUtils.printWorkersResult)(res, args.verbose);
75
70
  if (!res) testUtils.exitWithCode(1);else testUtils.exitWithCode(0);
76
71
  return _context.abrupt("return", true);
77
- case 24:
72
+ case 21:
78
73
  case "end":
79
74
  return _context.stop();
80
75
  }
@@ -89,13 +84,13 @@ function isArgsValid(args) {
89
84
  })) return false;
90
85
  return true;
91
86
  }
92
- function runTesting(_x2, _x3, _x4) {
87
+ function runTesting(_x2) {
93
88
  return _runTesting.apply(this, arguments);
94
89
  }
95
90
  function _runTesting() {
96
- _runTesting = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(args, categoryToCheck, testToCheck) {
91
+ _runTesting = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(args) {
97
92
  var _process$env$TARGET_P;
98
- var testsObj, parsed, organized, filtered, _iterator, _step, element, testsResults, r, _args$benchmark, _args$catchUnhandled, _args$gui, _args$record, _args$report, _args$verbose, testsLeft, _iterator2, _step2, testData;
93
+ var testsObj, parsed, organized, filtered, _iterator, _step, element, testsResults, r, _args$benchmark, _args$catchUnhandled, _args$gui, _args$record, _args$report, _args$verbose, testsLeft, testsToReproduce, _iterator2, _step2, testData, reproduced, _iterator3, _step3, _test2, _reproducedTest2;
99
94
  return _regenerator["default"].wrap(function _callee2$(_context2) {
100
95
  while (1) switch (_context2.prev = _context2.next) {
101
96
  case 0:
@@ -150,35 +145,189 @@ function _runTesting() {
150
145
  }, 1, testInvocationTimeout);
151
146
  case 12:
152
147
  r = _context2.sent;
153
- testsResults.push(r);
154
148
  testsLeft = [];
149
+ testsToReproduce = [];
155
150
  _iterator2 = _createForOfIteratorHelper(organized);
156
151
  try {
157
152
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
158
153
  testData = _step2.value;
159
154
  if (!r.csv.includes("".concat(testData.params.category, ",").concat(testData.params.test))) testsLeft.push(testData);
155
+ if (r.verboseFailed.includes("".concat(testData.params.category, ": ").concat(testData.params.test, " : Error:"))) {
156
+ testsToReproduce.push(testData);
157
+ }
160
158
  }
161
159
  } catch (err) {
162
160
  _iterator2.e(err);
163
161
  } finally {
164
162
  _iterator2.f();
165
163
  }
164
+ if (!(testsToReproduce.length > 0)) {
165
+ _context2.next = 42;
166
+ break;
167
+ }
168
+ _context2.next = 20;
169
+ return reproducedTest(args, testsToReproduce);
170
+ case 20:
171
+ reproduced = _context2.sent;
172
+ _iterator3 = _createForOfIteratorHelper(testsToReproduce);
173
+ _context2.prev = 22;
174
+ _iterator3.s();
175
+ case 24:
176
+ if ((_step3 = _iterator3.n()).done) {
177
+ _context2.next = 34;
178
+ break;
179
+ }
180
+ _test2 = _step3.value;
181
+ _reproducedTest2 = reproduced.get(_test2);
182
+ console.log(_test2);
183
+ if (!(_reproducedTest2 && !_reproducedTest2.failed)) {
184
+ _context2.next = 32;
185
+ break;
186
+ }
187
+ _context2.next = 31;
188
+ return updateResultsByReproduced(r, _reproducedTest2, _test2);
189
+ case 31:
190
+ r = _context2.sent;
191
+ case 32:
192
+ _context2.next = 24;
193
+ break;
194
+ case 34:
195
+ _context2.next = 39;
196
+ break;
197
+ case 36:
198
+ _context2.prev = 36;
199
+ _context2.t0 = _context2["catch"](22);
200
+ _iterator3.e(_context2.t0);
201
+ case 39:
202
+ _context2.prev = 39;
203
+ _iterator3.f();
204
+ return _context2.finish(39);
205
+ case 42:
206
+ testsResults.push(r);
166
207
  organized = testsLeft;
167
- case 18:
168
- if (r.verboseFailed.includes('EXECUTION TIMEOUT')) {
208
+ console.log(r);
209
+ case 45:
210
+ if (r.verboseFailed.includes('Error')) {
169
211
  _context2.next = 10;
170
212
  break;
171
213
  }
172
- case 19:
173
- _context2.next = 21;
214
+ case 46:
215
+ _context2.next = 48;
174
216
  return (0, _testUtils.mergeWorkersResults)(testsResults);
175
- case 21:
217
+ case 48:
176
218
  return _context2.abrupt("return", _context2.sent);
177
- case 22:
219
+ case 49:
178
220
  case "end":
179
221
  return _context2.stop();
180
222
  }
181
- }, _callee2);
223
+ }, _callee2, null, [[22, 36, 39, 42]]);
182
224
  }));
183
225
  return _runTesting.apply(this, arguments);
226
+ }
227
+ function reproducedTest(_x3, _x4) {
228
+ return _reproducedTest.apply(this, arguments);
229
+ }
230
+ function _reproducedTest() {
231
+ _reproducedTest = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(args, testsToReproduce) {
232
+ var res, _iterator4, _step4, _args$benchmark2, _test3, r;
233
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
234
+ while (1) switch (_context3.prev = _context3.next) {
235
+ case 0:
236
+ res = new Map();
237
+ _iterator4 = _createForOfIteratorHelper(testsToReproduce);
238
+ _context3.prev = 2;
239
+ _iterator4.s();
240
+ case 4:
241
+ if ((_step4 = _iterator4.n()).done) {
242
+ _context3.next = 12;
243
+ break;
244
+ }
245
+ _test3 = _step4.value;
246
+ _context3.next = 8;
247
+ return (0, _testUtils.runWorker)([_test3], {
248
+ benchmark: (_args$benchmark2 = args.benchmark) !== null && _args$benchmark2 !== void 0 ? _args$benchmark2 : false,
249
+ catchUnhandled: false,
250
+ gui: false,
251
+ record: false,
252
+ report: false,
253
+ verbose: false,
254
+ stopOnTimeout: true,
255
+ reproduce: true
256
+ }, 1, testInvocationTimeout);
257
+ case 8:
258
+ r = _context3.sent;
259
+ if (_test3.params.category && _test3.params.test) res.set(_test3, r);
260
+ case 10:
261
+ _context3.next = 4;
262
+ break;
263
+ case 12:
264
+ _context3.next = 17;
265
+ break;
266
+ case 14:
267
+ _context3.prev = 14;
268
+ _context3.t0 = _context3["catch"](2);
269
+ _iterator4.e(_context3.t0);
270
+ case 17:
271
+ _context3.prev = 17;
272
+ _iterator4.f();
273
+ return _context3.finish(17);
274
+ case 20:
275
+ return _context3.abrupt("return", res);
276
+ case 21:
277
+ case "end":
278
+ return _context3.stop();
279
+ }
280
+ }, _callee3, null, [[2, 14, 17, 20]]);
281
+ }));
282
+ return _reproducedTest.apply(this, arguments);
283
+ }
284
+ function updateResultsByReproduced(_x5, _x6, _x7) {
285
+ return _updateResultsByReproduced.apply(this, arguments);
286
+ }
287
+ function _updateResultsByReproduced() {
288
+ _updateResultsByReproduced = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(curentResult, reproducedResult, testsParams) {
289
+ var table2Dict, table1, table2, flakingMap;
290
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
291
+ while (1) switch (_context4.prev = _context4.next) {
292
+ case 0:
293
+ table2Dict = {};
294
+ table1 = readCSVResultData(curentResult.csv);
295
+ table2 = readCSVResultData(reproducedResult.csv);
296
+ flakingMap = {};
297
+ table2.rows.forEach(function (row) {
298
+ var key = "".concat(row['category'], ",").concat(row['name']);
299
+ flakingMap[key] = row['flaking'];
300
+ });
301
+ table1.rows.forEach(function (row) {
302
+ var key = "".concat(row['category'], ",").concat(row['name']);
303
+ if (key in flakingMap) {
304
+ row['flaking'] = flakingMap[key];
305
+ }
306
+ });
307
+ curentResult.csv = Papa.unparse(table1.rows, {
308
+ columns: table1.headers
309
+ });
310
+ ;
311
+ curentResult.verboseFailed = curentResult.verboseFailed.replaceAll("".concat(testsParams.params.category, ": ").concat(testsParams.params.test, " : Error:"), "".concat(testsParams.params.category, ": ").concat(testsParams.params.test, " : Flaking Error:"));
312
+ return _context4.abrupt("return", curentResult);
313
+ case 10:
314
+ case "end":
315
+ return _context4.stop();
316
+ }
317
+ }, _callee4);
318
+ }));
319
+ return _updateResultsByReproduced.apply(this, arguments);
320
+ }
321
+ function readCSVResultData(data) {
322
+ var parsed = Papa.parse(data, {
323
+ header: true,
324
+ skipEmptyLines: true
325
+ });
326
+ if (parsed.errors.length > 0) {
327
+ throw new Error("Error parsing CSV file: ".concat(parsed.errors[0].message));
328
+ }
329
+ return {
330
+ headers: parsed.meta.fields || [],
331
+ rows: parsed.data
332
+ };
184
333
  }
@@ -662,6 +662,7 @@ function _runWorker() {
662
662
  _context9.next = 22;
663
663
  return page.evaluate(function (testData, options) {
664
664
  if (options.benchmark) window.DG.Test.isInBenchmark = true;
665
+ if (options.reproduce) window.DG.Test.isReproducing = true;
665
666
  return new Promise(function (resolve, reject) {
666
667
  window.DG.Utils.executeTests(testData, options.stopOnTimeout).then(function (results) {
667
668
  resolve(results);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datagrok-tools",
3
- "version": "4.13.35",
3
+ "version": "4.13.36",
4
4
  "description": "Utility to upload and publish packages to Datagrok",
5
5
  "homepage": "https://github.com/datagrok-ai/public/tree/master/tools#readme",
6
6
  "dependencies": {
@@ -17,6 +17,7 @@
17
17
  "node-fetch": "^2.7.0",
18
18
  "node-recursive-directory": "^1.2.0",
19
19
  "os": "^0.1.2",
20
+ "papaparse": "^5.4.1",
20
21
  "path": "^0.12.7",
21
22
  "puppeteer": "^22.10.0",
22
23
  "puppeteer-screen-recorder": "3.0.3"
@@ -53,6 +54,7 @@
53
54
  "@types/inquirer": "^8.2.10",
54
55
  "@types/js-yaml": "^4.0.9",
55
56
  "@types/node": "^16.18.70",
57
+ "@types/papaparse": "^5.3.15",
56
58
  "@typescript-eslint/eslint-plugin": "^5.62.0",
57
59
  "@typescript-eslint/parser": "^5.62.0",
58
60
  "eslint": "^8.56.0",