datagrok-tools 4.14.34 → 4.14.35
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/utils/test-utils.js +59 -66
- package/package-template/package.json +1 -1
- package/package.json +1 -1
package/bin/utils/test-utils.js
CHANGED
|
@@ -183,22 +183,22 @@ const recorderConfig = exports.recorderConfig = {
|
|
|
183
183
|
// aspectRatio: '16:9',
|
|
184
184
|
};
|
|
185
185
|
async function loadPackages(packagesDir, packagesToLoad, host, skipPublish, skipBuild, linkPackage, release) {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
if (packagesToLoad !==
|
|
189
|
-
for (
|
|
186
|
+
const packagesToRun = new Map();
|
|
187
|
+
const hostString = host === undefined ? `` : `${host}`;
|
|
188
|
+
if (packagesToLoad !== 'all') {
|
|
189
|
+
for (const pacakgeName of (packagesToLoad ?? '').split(' ')) {
|
|
190
190
|
if ((pacakgeName ?? '').length !== 0) packagesToRun.set((0, _utils.spaceToCamelCase)(pacakgeName).toLocaleLowerCase(), false);
|
|
191
191
|
}
|
|
192
192
|
}
|
|
193
|
-
for (
|
|
194
|
-
|
|
193
|
+
for (const dirName of _fs.default.readdirSync(packagesDir)) {
|
|
194
|
+
const packageDir = _path.default.join(packagesDir, dirName);
|
|
195
195
|
if (!_fs.default.lstatSync(packageDir).isFile()) {
|
|
196
196
|
try {
|
|
197
197
|
const packageJsonData = JSON.parse(_fs.default.readFileSync(_path.default.join(packageDir, 'package.json'), {
|
|
198
198
|
encoding: 'utf-8'
|
|
199
199
|
}));
|
|
200
|
-
const packageFriendlyName = packagesToRun.get((0, _utils.spaceToCamelCase)(packageJsonData[
|
|
201
|
-
if (utils.isPackageDir(packageDir) && (packageFriendlyName !== undefined || packagesToLoad ===
|
|
200
|
+
const packageFriendlyName = packagesToRun.get((0, _utils.spaceToCamelCase)(packageJsonData['friendlyName'] ?? packageJsonData['name'].split('/')[1] ?? packageJsonData['name'] ?? '').toLocaleLowerCase() ?? '') ?? packagesToRun.get(dirName);
|
|
201
|
+
if (utils.isPackageDir(packageDir) && (packageFriendlyName !== undefined || packagesToLoad === 'all')) {
|
|
202
202
|
try {
|
|
203
203
|
process.stdout.write(`Building and publishing ${dirName}...`);
|
|
204
204
|
if (skipPublish != true) {
|
|
@@ -214,7 +214,7 @@ async function loadPackages(packagesDir, packagesToLoad, host, skipPublish, skip
|
|
|
214
214
|
}
|
|
215
215
|
}
|
|
216
216
|
} catch (e) {
|
|
217
|
-
if (utils.isPackageDir(packageDir) && (packagesToRun.get((0, _utils.spaceToCamelCase)(dirName).toLocaleLowerCase()) !== undefined || packagesToLoad ===
|
|
217
|
+
if (utils.isPackageDir(packageDir) && (packagesToRun.get((0, _utils.spaceToCamelCase)(dirName).toLocaleLowerCase()) !== undefined || packagesToLoad === 'all')) console.log(`Couldn't read package.json ${dirName}`);
|
|
218
218
|
}
|
|
219
219
|
}
|
|
220
220
|
}
|
|
@@ -223,7 +223,7 @@ async function loadPackages(packagesDir, packagesToLoad, host, skipPublish, skip
|
|
|
223
223
|
;
|
|
224
224
|
}
|
|
225
225
|
async function loadTestsList(packages, core = false) {
|
|
226
|
-
|
|
226
|
+
const packageTestsData = await timeout(async () => {
|
|
227
227
|
const params = Object.assign({}, defaultLaunchParameters);
|
|
228
228
|
// params['headless'] = false;
|
|
229
229
|
const out = await getBrowserPage(_puppeteer.default, params);
|
|
@@ -254,7 +254,7 @@ async function loadTestsList(packages, core = false) {
|
|
|
254
254
|
}
|
|
255
255
|
});
|
|
256
256
|
} catch (err) {
|
|
257
|
-
console.error(
|
|
257
|
+
console.error('Error during evaluation in browser context:', err);
|
|
258
258
|
reject();
|
|
259
259
|
}
|
|
260
260
|
Promise.all(promises).then(results => {
|
|
@@ -268,16 +268,14 @@ async function loadTestsList(packages, core = false) {
|
|
|
268
268
|
});
|
|
269
269
|
});
|
|
270
270
|
}, packages, core);
|
|
271
|
-
if (browser != null)
|
|
272
|
-
await browser.close();
|
|
273
|
-
}
|
|
271
|
+
if (browser != null) await browser.close();
|
|
274
272
|
return r;
|
|
275
273
|
}, testCollectionTimeout);
|
|
276
|
-
|
|
277
|
-
for (
|
|
274
|
+
const testsList = [];
|
|
275
|
+
for (const testPackage of packageTestsData) {
|
|
278
276
|
for (const key in testPackage.tests) {
|
|
279
277
|
if (testPackage.tests.hasOwnProperty(key)) {
|
|
280
|
-
for (
|
|
278
|
+
for (const testValue of testPackage.tests[key].tests) {
|
|
281
279
|
testValue.packageName = testPackage.packageName;
|
|
282
280
|
testsList.push(testValue);
|
|
283
281
|
}
|
|
@@ -292,26 +290,24 @@ function addLogsToFile(filePath, stringToSave) {
|
|
|
292
290
|
function printBrowsersResult(browserResult, verbose = false) {
|
|
293
291
|
if (verbose) {
|
|
294
292
|
if ((browserResult.passedAmount ?? 0) > 0 && (browserResult.verbosePassed ?? []).length > 0) {
|
|
295
|
-
console.log(
|
|
293
|
+
console.log('Passed: ');
|
|
296
294
|
console.log(browserResult.verbosePassed);
|
|
297
295
|
}
|
|
298
296
|
if ((browserResult.skippedAmount ?? 0) > 0 && (browserResult.verboseSkipped ?? []).length > 0) {
|
|
299
|
-
console.log(
|
|
297
|
+
console.log('Skipped: ');
|
|
300
298
|
console.log(browserResult.verboseSkipped);
|
|
301
299
|
}
|
|
302
300
|
}
|
|
303
301
|
if ((browserResult.failedAmount ?? 0) > 0 && (browserResult.verboseFailed ?? []).length > 0) {
|
|
304
|
-
console.log(
|
|
302
|
+
console.log('Failed: ');
|
|
305
303
|
console.log(browserResult.verboseFailed);
|
|
306
304
|
}
|
|
307
|
-
console.log(
|
|
308
|
-
console.log(
|
|
309
|
-
console.log(
|
|
305
|
+
console.log('Passed amount: ' + browserResult?.passedAmount);
|
|
306
|
+
console.log('Skipped amount: ' + browserResult?.skippedAmount);
|
|
307
|
+
console.log('Failed amount: ' + browserResult?.failedAmount);
|
|
310
308
|
if (browserResult.failed) {
|
|
311
309
|
if (browserResult.verboseFailed === 'Package not found') color.fail('Tests not found');else color.fail('Tests failed.');
|
|
312
|
-
} else
|
|
313
|
-
color.success('Tests passed.');
|
|
314
|
-
}
|
|
310
|
+
} else color.success('Tests passed.');
|
|
315
311
|
}
|
|
316
312
|
function saveCsvResults(stringToSave, csvReportDir) {
|
|
317
313
|
const modifiedStrings = stringToSave.map((str, index) => {
|
|
@@ -323,10 +319,10 @@ function saveCsvResults(stringToSave, csvReportDir) {
|
|
|
323
319
|
}
|
|
324
320
|
async function runTests(testsParams, stopOnFail) {
|
|
325
321
|
let failed = false;
|
|
326
|
-
let verbosePassed =
|
|
327
|
-
let verboseSkipped =
|
|
328
|
-
let verboseFailed =
|
|
329
|
-
let error =
|
|
322
|
+
let verbosePassed = '';
|
|
323
|
+
let verboseSkipped = '';
|
|
324
|
+
let verboseFailed = '';
|
|
325
|
+
let error = '';
|
|
330
326
|
let countPassed = 0;
|
|
331
327
|
let countSkipped = 0;
|
|
332
328
|
let countFailed = 0;
|
|
@@ -334,13 +330,15 @@ async function runTests(testsParams, stopOnFail) {
|
|
|
334
330
|
let lastTest = null;
|
|
335
331
|
let res = '';
|
|
336
332
|
try {
|
|
337
|
-
for (
|
|
333
|
+
for (const testParam of testsParams) {
|
|
338
334
|
lastTest = testParam;
|
|
339
|
-
|
|
340
|
-
|
|
335
|
+
const df = await window.grok.functions.call(testParam.package + ':test', testParam.params);
|
|
336
|
+
const flakingCol = window.DG.Column.fromType(window.DG.COLUMN_TYPE.BOOL, 'flaking', df.rowCount);
|
|
341
337
|
df.columns.add(flakingCol);
|
|
342
|
-
|
|
343
|
-
|
|
338
|
+
if (!df.getCol('package')) {
|
|
339
|
+
const packageNameCol = window.DG.Column.fromList(window.DG.COLUMN_TYPE.STRING, 'package', Array(df.rowCount).fill(testParam.package));
|
|
340
|
+
df.columns.add(packageNameCol);
|
|
341
|
+
}
|
|
344
342
|
if (df.rowCount === 0) {
|
|
345
343
|
verboseFailed += `Test result : Invocation Fail : ${testParam.params.category}: ${testParam.params.test}\n`;
|
|
346
344
|
countFailed += 1;
|
|
@@ -349,29 +347,30 @@ async function runTests(testsParams, stopOnFail) {
|
|
|
349
347
|
}
|
|
350
348
|
let row = df.rows.get(0);
|
|
351
349
|
if (df.rowCount > 1) {
|
|
352
|
-
|
|
353
|
-
if (!unhandledErrorRow.get(
|
|
354
|
-
unhandledErrorRow[
|
|
355
|
-
unhandledErrorRow[
|
|
350
|
+
const unhandledErrorRow = df.rows.get(1);
|
|
351
|
+
if (!unhandledErrorRow.get('success')) {
|
|
352
|
+
unhandledErrorRow['category'] = row.get('category');
|
|
353
|
+
unhandledErrorRow['name'] = row.get('name');
|
|
356
354
|
row = unhandledErrorRow;
|
|
357
355
|
}
|
|
358
356
|
}
|
|
359
|
-
const category = row.get(
|
|
360
|
-
const testName = row.get(
|
|
361
|
-
const time = row.get(
|
|
362
|
-
const result = row.get(
|
|
363
|
-
const success = row.get(
|
|
364
|
-
const skipped = row.get(
|
|
365
|
-
row[
|
|
357
|
+
const category = row.get('category');
|
|
358
|
+
const testName = row.get('name');
|
|
359
|
+
const time = row.get('ms');
|
|
360
|
+
const result = row.get('result');
|
|
361
|
+
const success = row.get('success');
|
|
362
|
+
const skipped = row.get('skipped');
|
|
363
|
+
row['flaking'] = success && window.DG.Test.isReproducing;
|
|
366
364
|
df.changeColumnType('result', window.DG.COLUMN_TYPE.STRING);
|
|
367
365
|
df.changeColumnType('logs', window.DG.COLUMN_TYPE.STRING);
|
|
366
|
+
df.changeColumnType('widgetsDifference', window.DG.COLUMN_TYPE.STRING);
|
|
368
367
|
// df.changeColumnType('memoryDelta', (<any>window).DG.COLUMN_TYPE.BIG_INT);
|
|
369
368
|
|
|
370
369
|
if (resultDF === undefined) resultDF = df;else resultDF = resultDF.append(df);
|
|
371
|
-
if (row[
|
|
370
|
+
if (row['skipped']) {
|
|
372
371
|
verboseSkipped += `Test result : Skipped : ${time} : ${category}: ${testName} : ${result}\n`;
|
|
373
372
|
countSkipped += 1;
|
|
374
|
-
} else if (row[
|
|
373
|
+
} else if (row['success']) {
|
|
375
374
|
verbosePassed += `Test result : Success : ${time} : ${category}: ${testName} : ${result}\n`;
|
|
376
375
|
countPassed += 1;
|
|
377
376
|
} else {
|
|
@@ -390,9 +389,7 @@ async function runTests(testsParams, stopOnFail) {
|
|
|
390
389
|
const bs = window.DG.BitSet.create(resultDF.rowCount);
|
|
391
390
|
bs.setAll(true);
|
|
392
391
|
for (let i = 0; i < resultDF.rowCount; i++) {
|
|
393
|
-
if (resultDF.rows.get(i).get('category') === 'Unhandled exceptions')
|
|
394
|
-
bs.set(i, false);
|
|
395
|
-
}
|
|
392
|
+
if (resultDF.rows.get(i).get('category') === 'Unhandled exceptions') bs.set(i, false);
|
|
396
393
|
}
|
|
397
394
|
resultDF = resultDF.clone(bs);
|
|
398
395
|
res = resultDF.toCsv();
|
|
@@ -415,7 +412,7 @@ async function runTests(testsParams, stopOnFail) {
|
|
|
415
412
|
};
|
|
416
413
|
}
|
|
417
414
|
async function runBrowser(testExecutionData, browserOptions, browsersId, testInvocationTimeout = 3600000) {
|
|
418
|
-
|
|
415
|
+
const testsToRun = {
|
|
419
416
|
func: runTests.toString(),
|
|
420
417
|
tests: testExecutionData
|
|
421
418
|
};
|
|
@@ -433,7 +430,7 @@ async function runBrowser(testExecutionData, browserOptions, browsersId, testInv
|
|
|
433
430
|
const recordDir = `./test-record-${currentBrowserNum}.mp4`;
|
|
434
431
|
if (browserOptions.record) {
|
|
435
432
|
await recorder.start(recordDir);
|
|
436
|
-
await page.exposeFunction(
|
|
433
|
+
await page.exposeFunction('addLogsToFile', addLogsToFile);
|
|
437
434
|
_fs.default.writeFileSync(logsDir, ``);
|
|
438
435
|
page.on('console', msg => {
|
|
439
436
|
addLogsToFile(logsDir, `CONSOLE LOG ENTRY: ${msg.text()}\n`);
|
|
@@ -445,7 +442,7 @@ async function runBrowser(testExecutionData, browserOptions, browsersId, testInv
|
|
|
445
442
|
addLogsToFile(logsDir, `CONSOLE LOG REQUEST: ${response.status()}, ${response.url()}\n`);
|
|
446
443
|
});
|
|
447
444
|
}
|
|
448
|
-
|
|
445
|
+
const testingResults = await page.evaluate((testData, options) => {
|
|
449
446
|
if (options.benchmark) window.DG.Test.isInBenchmark = true;
|
|
450
447
|
if (options.reproduce) window.DG.Test.isReproducing = true;
|
|
451
448
|
if (options.ciCd) window.DG.Test.isCiCd = true;
|
|
@@ -457,14 +454,14 @@ async function runBrowser(testExecutionData, browserOptions, browsersId, testInv
|
|
|
457
454
|
}).catch(e => {
|
|
458
455
|
resolve({
|
|
459
456
|
failed: true,
|
|
460
|
-
verbosePassed:
|
|
461
|
-
verboseSkipped:
|
|
462
|
-
verboseFailed:
|
|
457
|
+
verbosePassed: '',
|
|
458
|
+
verboseSkipped: '',
|
|
459
|
+
verboseFailed: '',
|
|
463
460
|
error: JSON.stringify(e),
|
|
464
461
|
passedAmount: 0,
|
|
465
462
|
skippedAmount: 0,
|
|
466
463
|
failedAmount: 1,
|
|
467
|
-
csv:
|
|
464
|
+
csv: '',
|
|
468
465
|
df: undefined
|
|
469
466
|
});
|
|
470
467
|
});
|
|
@@ -488,17 +485,13 @@ async function runBrowser(testExecutionData, browserOptions, browsersId, testInv
|
|
|
488
485
|
// });
|
|
489
486
|
});
|
|
490
487
|
}, testsToRun, browserOptions);
|
|
491
|
-
if (browserOptions.record)
|
|
492
|
-
|
|
493
|
-
}
|
|
494
|
-
if (browser != null) {
|
|
495
|
-
await browser.close();
|
|
496
|
-
}
|
|
488
|
+
if (browserOptions.record) await recorder.stop();
|
|
489
|
+
if (browser != null) await browser.close();
|
|
497
490
|
return testingResults;
|
|
498
491
|
}, testInvocationTimeout);
|
|
499
492
|
}
|
|
500
493
|
async function mergeBrowsersResults(browsersResults) {
|
|
501
|
-
|
|
494
|
+
const mergedResult = {
|
|
502
495
|
failed: browsersResults[0].failed,
|
|
503
496
|
verbosePassed: browsersResults[0].verbosePassed,
|
|
504
497
|
verboseSkipped: browsersResults[0].verboseSkipped,
|
|
@@ -509,7 +502,7 @@ async function mergeBrowsersResults(browsersResults) {
|
|
|
509
502
|
csv: browsersResults[0].csv,
|
|
510
503
|
error: ''
|
|
511
504
|
};
|
|
512
|
-
for (
|
|
505
|
+
for (const browsersResult of browsersResults) {
|
|
513
506
|
if (mergedResult.csv === browsersResult.csv) continue;
|
|
514
507
|
mergedResult.failed = mergedResult.failed || browsersResult.failed;
|
|
515
508
|
mergedResult.verbosePassed = `${mergedResult.verbosePassed.trim()}\n${browsersResult.verbosePassed.trim()}`;
|
package/package.json
CHANGED