@taiga-ui/testing 4.50.0-canary.f66e0da → 4.51.0-canary.2b42d75
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/esm2022/mocks/switch-ng-dev-mode.mjs +1 -1
- package/esm2022/visual-testing/combine-cypress-failed-screenshots.mjs +7 -5
- package/esm2022/visual-testing/combine-playwright-failed-screenshots.mjs +6 -6
- package/esm2022/visual-testing/combine-snapshots.mjs +22 -19
- package/fesm2022/taiga-ui-testing-mocks.mjs.map +1 -1
- package/fesm2022/taiga-ui-testing-visual-testing.mjs +31 -26
- package/fesm2022/taiga-ui-testing-visual-testing.mjs.map +1 -1
- package/package.json +4 -3
- package/visual-testing/combine-cypress-failed-screenshots.d.ts +1 -1
- package/visual-testing/combine-snapshots.d.ts +1 -2
@@ -3,4 +3,4 @@ export function tuiSwitchNgDevMode(enable) {
|
|
3
3
|
global.ngDevMode = enable;
|
4
4
|
}
|
5
5
|
}
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoLW5nLWRldi1tb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVzdGluZy9tb2Nrcy9zd2l0Y2gtbmctZGV2LW1vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQWU7SUFDOUMsSUFBSSxNQUFNLEVBQUU7UUFDUixNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztLQUM3QjtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJkZWNsYXJlIGNvbnN0IGdsb2JhbDogKFJlY29yZDxhbnksIGFueT4gJiBXaW5kb3cpIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgZnVuY3Rpb24gdHVpU3dpdGNoTmdEZXZNb2RlKGVuYWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgZ2xvYmFsLm5nRGV2TW9kZSA9IGVuYWJsZTtcbiAgICB9XG59XG4iXX0=
|
@@ -1,8 +1,9 @@
|
|
1
|
-
import { readFileSync
|
1
|
+
import { readFileSync } from 'node:fs';
|
2
2
|
import { tuiCombineSnapshots } from './combine-snapshots';
|
3
3
|
const ROOT_PATH = process.env.ROOT_PATH ?? 'projects/demo-cypress';
|
4
4
|
const TEST_RESULTS_PATH = process.env.TEST_RESULTS_PATH ?? `${ROOT_PATH}/tests-results`;
|
5
|
-
|
5
|
+
// noinspection JSUnusedGlobalSymbols
|
6
|
+
export function tuiCombineCypressFailedScreenshots() {
|
6
7
|
const reportSummary = readJSON(`${TEST_RESULTS_PATH}/report-summary.json`);
|
7
8
|
if (!reportSummary) {
|
8
9
|
return;
|
@@ -12,8 +13,9 @@ export async function tuiCombineCypressFailedScreenshots() {
|
|
12
13
|
.flat()
|
13
14
|
.filter((x) => x.status === 'fail' && x.diffPath);
|
14
15
|
for (const { baselinePath, diffPath, comparisonPath, name } of failedTestSnapshots) {
|
15
|
-
const
|
16
|
-
|
16
|
+
const output = `${TEST_RESULTS_PATH}/${name}.diff.png`;
|
17
|
+
const inputs = [baselinePath, diffPath, comparisonPath].map((x) => `${ROOT_PATH}/${x}`);
|
18
|
+
tuiCombineSnapshots(inputs, output).then(() => console.info(` ✅ Async saved merged image: ${output}`));
|
17
19
|
}
|
18
20
|
}
|
19
21
|
function readJSON(path) {
|
@@ -24,4 +26,4 @@ function readJSON(path) {
|
|
24
26
|
return null;
|
25
27
|
}
|
26
28
|
}
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZS1jeXByZXNzLWZhaWxlZC1zY3JlZW5zaG90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Rlc3RpbmcvdmlzdWFsLXRlc3RpbmcvY29tYmluZS1jeXByZXNzLWZhaWxlZC1zY3JlZW5zaG90cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRXJDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXhELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLHVCQUF1QixDQUFDO0FBQ25FLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxHQUFHLFNBQVMsZ0JBQWdCLENBQUM7QUFjeEYscUNBQXFDO0FBQ3JDLE1BQU0sVUFBVSxrQ0FBa0M7SUFDOUMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFTLEdBQUcsaUJBQWlCLHNCQUFzQixDQUFDLENBQUM7SUFFbkYsSUFBSSxDQUFDLGFBQWEsRUFBRTtRQUNoQixPQUFPO0tBQ1Y7SUFFRCxNQUFNLG1CQUFtQixHQUFHLGFBQWEsQ0FBQyxNQUFNO1NBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUNuQixJQUFJLEVBQUU7U0FDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUV0RCxLQUFLLE1BQU0sRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUMsSUFBSSxtQkFBbUIsRUFBRTtRQUM5RSxNQUFNLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixJQUFJLElBQUksV0FBVyxDQUFDO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQ3ZELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLFNBQVMsSUFBSSxDQUFDLEVBQUUsQ0FDN0IsQ0FBQztRQUVGLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLE1BQU0sRUFBRSxDQUFDLENBQ3pELENBQUM7S0FDTDtBQUNMLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBSSxJQUFZO0lBQzdCLElBQUk7UUFDQSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQ2xEO0lBQUMsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ25vZGU6ZnMnO1xuXG5pbXBvcnQge3R1aUNvbWJpbmVTbmFwc2hvdHN9IGZyb20gJy4vY29tYmluZS1zbmFwc2hvdHMnO1xuXG5jb25zdCBST09UX1BBVEggPSBwcm9jZXNzLmVudi5ST09UX1BBVEggPz8gJ3Byb2plY3RzL2RlbW8tY3lwcmVzcyc7XG5jb25zdCBURVNUX1JFU1VMVFNfUEFUSCA9IHByb2Nlc3MuZW52LlRFU1RfUkVTVUxUU19QQVRIID8/IGAke1JPT1RfUEFUSH0vdGVzdHMtcmVzdWx0c2A7XG5cbmludGVyZmFjZSBUZXN0UmVzdWx0IHtcbiAgICBzdGF0dXM6ICdmYWlsJyB8ICdwYXNzJztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYmFzZWxpbmVQYXRoOiBzdHJpbmc7XG4gICAgZGlmZlBhdGg6IHN0cmluZztcbiAgICBjb21wYXJpc29uUGF0aDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUmVwb3J0IHtcbiAgICBzdWl0ZXM6IEFycmF5PHt0ZXN0czogVGVzdFJlc3VsdFtdfT47XG59XG5cbi8vIG5vaW5zcGVjdGlvbiBKU1VudXNlZEdsb2JhbFN5bWJvbHNcbmV4cG9ydCBmdW5jdGlvbiB0dWlDb21iaW5lQ3lwcmVzc0ZhaWxlZFNjcmVlbnNob3RzKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlcG9ydFN1bW1hcnkgPSByZWFkSlNPTjxSZXBvcnQ+KGAke1RFU1RfUkVTVUxUU19QQVRIfS9yZXBvcnQtc3VtbWFyeS5qc29uYCk7XG5cbiAgICBpZiAoIXJlcG9ydFN1bW1hcnkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZhaWxlZFRlc3RTbmFwc2hvdHMgPSByZXBvcnRTdW1tYXJ5LnN1aXRlc1xuICAgICAgICAubWFwKCh4KSA9PiB4LnRlc3RzKVxuICAgICAgICAuZmxhdCgpXG4gICAgICAgIC5maWx0ZXIoKHgpID0+IHguc3RhdHVzID09PSAnZmFpbCcgJiYgeC5kaWZmUGF0aCk7XG5cbiAgICBmb3IgKGNvbnN0IHtiYXNlbGluZVBhdGgsIGRpZmZQYXRoLCBjb21wYXJpc29uUGF0aCwgbmFtZX0gb2YgZmFpbGVkVGVzdFNuYXBzaG90cykge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBgJHtURVNUX1JFU1VMVFNfUEFUSH0vJHtuYW1lfS5kaWZmLnBuZ2A7XG4gICAgICAgIGNvbnN0IGlucHV0cyA9IFtiYXNlbGluZVBhdGgsIGRpZmZQYXRoLCBjb21wYXJpc29uUGF0aF0ubWFwKFxuICAgICAgICAgICAgKHgpID0+IGAke1JPT1RfUEFUSH0vJHt4fWAsXG4gICAgICAgICk7XG5cbiAgICAgICAgdHVpQ29tYmluZVNuYXBzaG90cyhpbnB1dHMsIG91dHB1dCkudGhlbigoKSA9PlxuICAgICAgICAgICAgY29uc29sZS5pbmZvKGAg4pyFIEFzeW5jIHNhdmVkIG1lcmdlZCBpbWFnZTogJHtvdXRwdXR9YCksXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWFkSlNPTjxUPihwYXRoOiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhdGgsICd1dGYtOCcpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIl19
|
@@ -1,10 +1,11 @@
|
|
1
|
-
import { readdirSync
|
1
|
+
import { readdirSync } from 'node:fs';
|
2
2
|
import { tuiCombineSnapshots } from './combine-snapshots';
|
3
3
|
const FAILED_SCREENSHOTS_PATH = process.env.FAILED_SCREENSHOTS_PATH ?? 'projects/demo-playwright/tests-results';
|
4
4
|
const DIFF_IMAGE_POSTFIX = process.env.DIFF_IMAGE_POSTFIX ?? '-diff.png';
|
5
5
|
const OUTPUT_DIFF_IMAGE_POSTFIX = process.env.OUTPUT_DIFF_IMAGE_POSTFIX ?? '.diff.png';
|
6
6
|
const RETRY_COUNT = Number(process.env.RETRY_COUNT ?? 2);
|
7
7
|
const REG_EXP = new RegExp(`retry${RETRY_COUNT}$|retry${RETRY_COUNT}/`);
|
8
|
+
// noinspection JSUnusedGlobalSymbols
|
8
9
|
export async function tuiCombinePlaywrightFailedScreenshots(rootPath = FAILED_SCREENSHOTS_PATH) {
|
9
10
|
const filesOrDirs = readdirSync(rootPath, {
|
10
11
|
withFileTypes: true,
|
@@ -22,10 +23,9 @@ export async function tuiCombinePlaywrightFailedScreenshots(rootPath = FAILED_SC
|
|
22
23
|
const diffs = imagesPaths.filter((path) => path.endsWith(DIFF_IMAGE_POSTFIX));
|
23
24
|
for (const diffImage of diffs) {
|
24
25
|
const diffImageName = diffImage.split('/').pop().replace(DIFF_IMAGE_POSTFIX, '');
|
25
|
-
const
|
26
|
-
const
|
27
|
-
|
28
|
-
console.info(`Write new diff: ${path}`);
|
26
|
+
const output = `${rootPath}/${diffImageName}${OUTPUT_DIFF_IMAGE_POSTFIX}`;
|
27
|
+
const inputs = imagesPaths.filter((path) => path.startsWith(diffImage.replace(DIFF_IMAGE_POSTFIX, '')));
|
28
|
+
tuiCombineSnapshots(inputs, output).then(() => console.info(` ✅ Async saved merged image: ${output}`));
|
29
29
|
}
|
30
30
|
}
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZS1wbGF5d3JpZ2h0LWZhaWxlZC1zY3JlZW5zaG90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Rlc3RpbmcvdmlzdWFsLXRlc3RpbmcvY29tYmluZS1wbGF5d3JpZ2h0LWZhaWxlZC1zY3JlZW5zaG90cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRXBDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXhELE1BQU0sdUJBQXVCLEdBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLElBQUksd0NBQXdDLENBQUM7QUFDcEYsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLFdBQVcsQ0FBQztBQUN6RSxNQUFNLHlCQUF5QixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLElBQUksV0FBVyxDQUFDO0FBQ3ZGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLFdBQVcsVUFBVSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBRXhFLHFDQUFxQztBQUNyQyxNQUFNLENBQUMsS0FBSyxVQUFVLHFDQUFxQyxDQUN2RCxRQUFRLEdBQUcsdUJBQXVCO0lBRWxDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUU7UUFDdEMsYUFBYSxFQUFFLElBQUk7S0FDdEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ1osQ0FBQyxDQUFDLFdBQVcsRUFBRTtRQUNYLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDcEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUNuQyxDQUFDO0lBRUYsS0FBSyxNQUFNLEVBQUMsSUFBSSxFQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7UUFDN0QsTUFBTSxxQ0FBcUMsQ0FBQyxHQUFHLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ3RFO0lBRUQsTUFBTSxXQUFXLEdBQWEsV0FBVztTQUNwQyxNQUFNLENBQ0gsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNGLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDVixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUNsRDtTQUNBLEdBQUcsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDNUMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFFOUUsS0FBSyxNQUFNLFNBQVMsSUFBSSxLQUFLLEVBQUU7UUFDM0IsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEYsTUFBTSxNQUFNLEdBQUcsR0FBRyxRQUFRLElBQUksYUFBYSxHQUFHLHlCQUF5QixFQUFFLENBQUM7UUFDMUUsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUM3RCxDQUFDO1FBRUYsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsTUFBTSxFQUFFLENBQUMsQ0FDekQsQ0FBQztLQUNMO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cmVhZGRpclN5bmN9IGZyb20gJ25vZGU6ZnMnO1xuXG5pbXBvcnQge3R1aUNvbWJpbmVTbmFwc2hvdHN9IGZyb20gJy4vY29tYmluZS1zbmFwc2hvdHMnO1xuXG5jb25zdCBGQUlMRURfU0NSRUVOU0hPVFNfUEFUSCA9XG4gICAgcHJvY2Vzcy5lbnYuRkFJTEVEX1NDUkVFTlNIT1RTX1BBVEggPz8gJ3Byb2plY3RzL2RlbW8tcGxheXdyaWdodC90ZXN0cy1yZXN1bHRzJztcbmNvbnN0IERJRkZfSU1BR0VfUE9TVEZJWCA9IHByb2Nlc3MuZW52LkRJRkZfSU1BR0VfUE9TVEZJWCA/PyAnLWRpZmYucG5nJztcbmNvbnN0IE9VVFBVVF9ESUZGX0lNQUdFX1BPU1RGSVggPSBwcm9jZXNzLmVudi5PVVRQVVRfRElGRl9JTUFHRV9QT1NURklYID8/ICcuZGlmZi5wbmcnO1xuY29uc3QgUkVUUllfQ09VTlQgPSBOdW1iZXIocHJvY2Vzcy5lbnYuUkVUUllfQ09VTlQgPz8gMik7XG5jb25zdCBSRUdfRVhQID0gbmV3IFJlZ0V4cChgcmV0cnkke1JFVFJZX0NPVU5UfSR8cmV0cnkke1JFVFJZX0NPVU5UfS9gKTtcblxuLy8gbm9pbnNwZWN0aW9uIEpTVW51c2VkR2xvYmFsU3ltYm9sc1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHR1aUNvbWJpbmVQbGF5d3JpZ2h0RmFpbGVkU2NyZWVuc2hvdHMoXG4gICAgcm9vdFBhdGggPSBGQUlMRURfU0NSRUVOU0hPVFNfUEFUSCxcbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGVzT3JEaXJzID0gcmVhZGRpclN5bmMocm9vdFBhdGgsIHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICB9KS5maWx0ZXIoKHgpID0+XG4gICAgICAgIHguaXNEaXJlY3RvcnkoKVxuICAgICAgICAgICAgPyBSRUdfRVhQLmV4ZWMoeC5uYW1lKSB8fCBSRUdfRVhQLmV4ZWMoeC5wYXJlbnRQYXRoKVxuICAgICAgICAgICAgOiBSRUdfRVhQLmV4ZWMoeC5wYXJlbnRQYXRoKSxcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCB7bmFtZX0gb2YgZmlsZXNPckRpcnMuZmlsdGVyKCh4KSA9PiB4LmlzRGlyZWN0b3J5KCkpKSB7XG4gICAgICAgIGF3YWl0IHR1aUNvbWJpbmVQbGF5d3JpZ2h0RmFpbGVkU2NyZWVuc2hvdHMoYCR7cm9vdFBhdGh9LyR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZXNQYXRoczogc3RyaW5nW10gPSBmaWxlc09yRGlyc1xuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKHgpID0+XG4gICAgICAgICAgICAgICAgeC5pc0ZpbGUoKSAmJlxuICAgICAgICAgICAgICAgIHgubmFtZS5lbmRzV2l0aCgnLnBuZycpICYmXG4gICAgICAgICAgICAgICAgIXgubmFtZS5lbmRzV2l0aChPVVRQVVRfRElGRl9JTUFHRV9QT1NURklYKSxcbiAgICAgICAgKVxuICAgICAgICAubWFwKCh7bmFtZX0pID0+IGAke3Jvb3RQYXRofS8ke25hbWV9YCk7XG4gICAgY29uc3QgZGlmZnMgPSBpbWFnZXNQYXRocy5maWx0ZXIoKHBhdGgpID0+IHBhdGguZW5kc1dpdGgoRElGRl9JTUFHRV9QT1NURklYKSk7XG5cbiAgICBmb3IgKGNvbnN0IGRpZmZJbWFnZSBvZiBkaWZmcykge1xuICAgICAgICBjb25zdCBkaWZmSW1hZ2VOYW1lID0gZGlmZkltYWdlLnNwbGl0KCcvJykucG9wKCkhLnJlcGxhY2UoRElGRl9JTUFHRV9QT1NURklYLCAnJyk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IGAke3Jvb3RQYXRofS8ke2RpZmZJbWFnZU5hbWV9JHtPVVRQVVRfRElGRl9JTUFHRV9QT1NURklYfWA7XG4gICAgICAgIGNvbnN0IGlucHV0cyA9IGltYWdlc1BhdGhzLmZpbHRlcigocGF0aCkgPT5cbiAgICAgICAgICAgIHBhdGguc3RhcnRzV2l0aChkaWZmSW1hZ2UucmVwbGFjZShESUZGX0lNQUdFX1BPU1RGSVgsICcnKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgdHVpQ29tYmluZVNuYXBzaG90cyhpbnB1dHMsIG91dHB1dCkudGhlbigoKSA9PlxuICAgICAgICAgICAgY29uc29sZS5pbmZvKGAg4pyFIEFzeW5jIHNhdmVkIG1lcmdlZCBpbWFnZTogJHtvdXRwdXR9YCksXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
|
@@ -1,21 +1,24 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
const canvas = createCanvas(totalWidth, maxHeight);
|
13
|
-
const ctx = canvas.getContext('2d');
|
14
|
-
let prevWidth = 0;
|
15
|
-
images.forEach((image) => {
|
16
|
-
ctx.drawImage(image, prevWidth, 0);
|
17
|
-
prevWidth += image.width;
|
1
|
+
import sharp from 'sharp';
|
2
|
+
// noinspection JSUnusedGlobalSymbols
|
3
|
+
export async function tuiCombineSnapshots(inputs, output) {
|
4
|
+
const data = await Promise.all(inputs.map(async (img) => sharp(img).metadata()));
|
5
|
+
const totalWidth = data.reduce((sum, metadata) => sum + (metadata.width || 0), 0);
|
6
|
+
const maxHeight = Math.max(...data.map((metadata) => metadata.height || 0));
|
7
|
+
let currentX = 0;
|
8
|
+
const composites = inputs.map((img, i) => {
|
9
|
+
const left = currentX;
|
10
|
+
currentX += data[i]?.width ?? 0;
|
11
|
+
return { input: img, top: 0, left };
|
18
12
|
});
|
19
|
-
|
13
|
+
await sharp({
|
14
|
+
create: {
|
15
|
+
width: totalWidth,
|
16
|
+
height: maxHeight,
|
17
|
+
channels: 4,
|
18
|
+
background: { r: 255, g: 255, b: 255, alpha: 1 },
|
19
|
+
},
|
20
|
+
})
|
21
|
+
.composite(composites)
|
22
|
+
.toFile(output);
|
20
23
|
}
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZS1zbmFwc2hvdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90ZXN0aW5nL3Zpc3VhbC10ZXN0aW5nL2NvbWJpbmUtc25hcHNob3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixxQ0FBcUM7QUFDckMsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FDckMsTUFBZ0IsRUFDaEIsTUFBYztJQUVkLE1BQU0sSUFBSSxHQUE4QixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3JELE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQ25ELENBQUM7SUFFRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTVFLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztJQUVqQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUV0QixRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7UUFFaEMsT0FBTyxFQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sS0FBSyxDQUFDO1FBQ1IsTUFBTSxFQUFFO1lBQ0osS0FBSyxFQUFFLFVBQVU7WUFDakIsTUFBTSxFQUFFLFNBQVM7WUFDakIsUUFBUSxFQUFFLENBQUM7WUFDWCxVQUFVLEVBQUUsRUFBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFDO1NBQ2pEO0tBQ0osQ0FBQztTQUNHLFNBQVMsQ0FBQyxVQUFVLENBQUM7U0FDckIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnO1xuXG4vLyBub2luc3BlY3Rpb24gSlNVbnVzZWRHbG9iYWxTeW1ib2xzXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHVpQ29tYmluZVNuYXBzaG90cyhcbiAgICBpbnB1dHM6IHN0cmluZ1tdLFxuICAgIG91dHB1dDogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGF0YTogcmVhZG9ubHkgc2hhcnAuTWV0YWRhdGFbXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBpbnB1dHMubWFwKGFzeW5jIChpbWcpID0+IHNoYXJwKGltZykubWV0YWRhdGEoKSksXG4gICAgKTtcblxuICAgIGNvbnN0IHRvdGFsV2lkdGggPSBkYXRhLnJlZHVjZSgoc3VtLCBtZXRhZGF0YSkgPT4gc3VtICsgKG1ldGFkYXRhLndpZHRoIHx8IDApLCAwKTtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSBNYXRoLm1heCguLi5kYXRhLm1hcCgobWV0YWRhdGEpID0+IG1ldGFkYXRhLmhlaWdodCB8fCAwKSk7XG5cbiAgICBsZXQgY3VycmVudFggPSAwO1xuXG4gICAgY29uc3QgY29tcG9zaXRlcyA9IGlucHV0cy5tYXAoKGltZywgaSkgPT4ge1xuICAgICAgICBjb25zdCBsZWZ0ID0gY3VycmVudFg7XG5cbiAgICAgICAgY3VycmVudFggKz0gZGF0YVtpXT8ud2lkdGggPz8gMDtcblxuICAgICAgICByZXR1cm4ge2lucHV0OiBpbWcsIHRvcDogMCwgbGVmdH07XG4gICAgfSk7XG5cbiAgICBhd2FpdCBzaGFycCh7XG4gICAgICAgIGNyZWF0ZToge1xuICAgICAgICAgICAgd2lkdGg6IHRvdGFsV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IG1heEhlaWdodCxcbiAgICAgICAgICAgIGNoYW5uZWxzOiA0LFxuICAgICAgICAgICAgYmFja2dyb3VuZDoge3I6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGFscGhhOiAxfSxcbiAgICAgICAgfSxcbiAgICB9KVxuICAgICAgICAuY29tcG9zaXRlKGNvbXBvc2l0ZXMpXG4gICAgICAgIC50b0ZpbGUob3V0cHV0KTtcbn1cbiJdfQ==
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"taiga-ui-testing-mocks.mjs","sources":["../../../projects/testing/mocks/event.ts","../../../projects/testing/mocks/switch-ng-dev-mode.ts","../../../projects/testing/mocks/taiga-ui-testing-mocks.ts"],"sourcesContent":["export class TuiMockEvent<T> extends Event {\n constructor(type: string, options: CustomEventInit<T> & Record<string, any> = {}) {\n super(type, options);\n\n const event = new Event(type);\n\n for (const key in options) {\n if (options.hasOwnProperty(key)) {\n Object.defineProperty(event, key, {value: options[key]});\n }\n }\n\n // @ts-ignore\n return event;\n }\n}\n","declare const global: Record<any, any> & Window;\n\nexport function tuiSwitchNgDevMode(enable: boolean): void {\n if (global) {\n global.ngDevMode = enable;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAM,MAAO,YAAgB,SAAQ,KAAK,CAAA;IACtC,WAAY,CAAA,IAAY,EAAE,OAAA,GAAoD,EAAE,EAAA;AAC5E,QAAA,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAErB,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;AAE9B,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AACvB,YAAA,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;AAC7B,gBAAA,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,EAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;AAC5D,aAAA;AACJ,SAAA;;AAGD,QAAA,OAAO,KAAK,CAAC;KAChB;AACJ;;ACbK,SAAU,kBAAkB,CAAC,MAAe,EAAA;AAC9C,IAAA,IAAI,MAAM,EAAE;AACR,QAAA,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;AAC7B,KAAA;AACL;;ACNA;;AAEG;;;;"}
|
1
|
+
{"version":3,"file":"taiga-ui-testing-mocks.mjs","sources":["../../../projects/testing/mocks/event.ts","../../../projects/testing/mocks/switch-ng-dev-mode.ts","../../../projects/testing/mocks/taiga-ui-testing-mocks.ts"],"sourcesContent":["export class TuiMockEvent<T> extends Event {\n constructor(type: string, options: CustomEventInit<T> & Record<string, any> = {}) {\n super(type, options);\n\n const event = new Event(type);\n\n for (const key in options) {\n if (options.hasOwnProperty(key)) {\n Object.defineProperty(event, key, {value: options[key]});\n }\n }\n\n // @ts-ignore\n return event;\n }\n}\n","declare const global: (Record<any, any> & Window) | undefined;\n\nexport function tuiSwitchNgDevMode(enable: boolean): void {\n if (global) {\n global.ngDevMode = enable;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAM,MAAO,YAAgB,SAAQ,KAAK,CAAA;IACtC,WAAY,CAAA,IAAY,EAAE,OAAA,GAAoD,EAAE,EAAA;AAC5E,QAAA,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAErB,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;AAE9B,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AACvB,YAAA,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;AAC7B,gBAAA,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,EAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;AAC5D,aAAA;AACJ,SAAA;;AAGD,QAAA,OAAO,KAAK,CAAC;KAChB;AACJ;;ACbK,SAAU,kBAAkB,CAAC,MAAe,EAAA;AAC9C,IAAA,IAAI,MAAM,EAAE;AACR,QAAA,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;AAC7B,KAAA;AACL;;ACNA;;AAEG;;;;"}
|
@@ -1,29 +1,33 @@
|
|
1
|
-
import {
|
2
|
-
import
|
1
|
+
import { readFileSync, readdirSync } from 'node:fs';
|
2
|
+
import sharp from 'sharp';
|
3
3
|
|
4
|
-
//
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
const canvas = createCanvas(totalWidth, maxHeight);
|
15
|
-
const ctx = canvas.getContext('2d');
|
16
|
-
let prevWidth = 0;
|
17
|
-
images.forEach((image) => {
|
18
|
-
ctx.drawImage(image, prevWidth, 0);
|
19
|
-
prevWidth += image.width;
|
4
|
+
// noinspection JSUnusedGlobalSymbols
|
5
|
+
async function tuiCombineSnapshots(inputs, output) {
|
6
|
+
const data = await Promise.all(inputs.map(async (img) => sharp(img).metadata()));
|
7
|
+
const totalWidth = data.reduce((sum, metadata) => sum + (metadata.width || 0), 0);
|
8
|
+
const maxHeight = Math.max(...data.map((metadata) => metadata.height || 0));
|
9
|
+
let currentX = 0;
|
10
|
+
const composites = inputs.map((img, i) => {
|
11
|
+
const left = currentX;
|
12
|
+
currentX += data[i]?.width ?? 0;
|
13
|
+
return { input: img, top: 0, left };
|
20
14
|
});
|
21
|
-
|
15
|
+
await sharp({
|
16
|
+
create: {
|
17
|
+
width: totalWidth,
|
18
|
+
height: maxHeight,
|
19
|
+
channels: 4,
|
20
|
+
background: { r: 255, g: 255, b: 255, alpha: 1 },
|
21
|
+
},
|
22
|
+
})
|
23
|
+
.composite(composites)
|
24
|
+
.toFile(output);
|
22
25
|
}
|
23
26
|
|
24
27
|
const ROOT_PATH = process.env.ROOT_PATH ?? 'projects/demo-cypress';
|
25
28
|
const TEST_RESULTS_PATH = process.env.TEST_RESULTS_PATH ?? `${ROOT_PATH}/tests-results`;
|
26
|
-
|
29
|
+
// noinspection JSUnusedGlobalSymbols
|
30
|
+
function tuiCombineCypressFailedScreenshots() {
|
27
31
|
const reportSummary = readJSON(`${TEST_RESULTS_PATH}/report-summary.json`);
|
28
32
|
if (!reportSummary) {
|
29
33
|
return;
|
@@ -33,8 +37,9 @@ async function tuiCombineCypressFailedScreenshots() {
|
|
33
37
|
.flat()
|
34
38
|
.filter((x) => x.status === 'fail' && x.diffPath);
|
35
39
|
for (const { baselinePath, diffPath, comparisonPath, name } of failedTestSnapshots) {
|
36
|
-
const
|
37
|
-
|
40
|
+
const output = `${TEST_RESULTS_PATH}/${name}.diff.png`;
|
41
|
+
const inputs = [baselinePath, diffPath, comparisonPath].map((x) => `${ROOT_PATH}/${x}`);
|
42
|
+
tuiCombineSnapshots(inputs, output).then(() => console.info(` ✅ Async saved merged image: ${output}`));
|
38
43
|
}
|
39
44
|
}
|
40
45
|
function readJSON(path) {
|
@@ -51,6 +56,7 @@ const DIFF_IMAGE_POSTFIX = process.env.DIFF_IMAGE_POSTFIX ?? '-diff.png';
|
|
51
56
|
const OUTPUT_DIFF_IMAGE_POSTFIX = process.env.OUTPUT_DIFF_IMAGE_POSTFIX ?? '.diff.png';
|
52
57
|
const RETRY_COUNT = Number(process.env.RETRY_COUNT ?? 2);
|
53
58
|
const REG_EXP = new RegExp(`retry${RETRY_COUNT}$|retry${RETRY_COUNT}/`);
|
59
|
+
// noinspection JSUnusedGlobalSymbols
|
54
60
|
async function tuiCombinePlaywrightFailedScreenshots(rootPath = FAILED_SCREENSHOTS_PATH) {
|
55
61
|
const filesOrDirs = readdirSync(rootPath, {
|
56
62
|
withFileTypes: true,
|
@@ -68,10 +74,9 @@ async function tuiCombinePlaywrightFailedScreenshots(rootPath = FAILED_SCREENSHO
|
|
68
74
|
const diffs = imagesPaths.filter((path) => path.endsWith(DIFF_IMAGE_POSTFIX));
|
69
75
|
for (const diffImage of diffs) {
|
70
76
|
const diffImageName = diffImage.split('/').pop().replace(DIFF_IMAGE_POSTFIX, '');
|
71
|
-
const
|
72
|
-
const
|
73
|
-
|
74
|
-
console.info(`Write new diff: ${path}`);
|
77
|
+
const output = `${rootPath}/${diffImageName}${OUTPUT_DIFF_IMAGE_POSTFIX}`;
|
78
|
+
const inputs = imagesPaths.filter((path) => path.startsWith(diffImage.replace(DIFF_IMAGE_POSTFIX, '')));
|
79
|
+
tuiCombineSnapshots(inputs, output).then(() => console.info(` ✅ Async saved merged image: ${output}`));
|
75
80
|
}
|
76
81
|
}
|
77
82
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"taiga-ui-testing-visual-testing.mjs","sources":["../../../projects/testing/visual-testing/combine-snapshots.ts","../../../projects/testing/visual-testing/combine-cypress-failed-screenshots.ts","../../../projects/testing/visual-testing/combine-playwright-failed-screenshots.ts","../../../projects/testing/visual-testing/taiga-ui-testing-visual-testing.ts"],"sourcesContent":["
|
1
|
+
{"version":3,"file":"taiga-ui-testing-visual-testing.mjs","sources":["../../../projects/testing/visual-testing/combine-snapshots.ts","../../../projects/testing/visual-testing/combine-cypress-failed-screenshots.ts","../../../projects/testing/visual-testing/combine-playwright-failed-screenshots.ts","../../../projects/testing/visual-testing/taiga-ui-testing-visual-testing.ts"],"sourcesContent":["import sharp from 'sharp';\n\n// noinspection JSUnusedGlobalSymbols\nexport async function tuiCombineSnapshots(\n inputs: string[],\n output: string,\n): Promise<void> {\n const data: readonly sharp.Metadata[] = await Promise.all(\n inputs.map(async (img) => sharp(img).metadata()),\n );\n\n const totalWidth = data.reduce((sum, metadata) => sum + (metadata.width || 0), 0);\n const maxHeight = Math.max(...data.map((metadata) => metadata.height || 0));\n\n let currentX = 0;\n\n const composites = inputs.map((img, i) => {\n const left = currentX;\n\n currentX += data[i]?.width ?? 0;\n\n return {input: img, top: 0, left};\n });\n\n await sharp({\n create: {\n width: totalWidth,\n height: maxHeight,\n channels: 4,\n background: {r: 255, g: 255, b: 255, alpha: 1},\n },\n })\n .composite(composites)\n .toFile(output);\n}\n","import {readFileSync} from 'node:fs';\n\nimport {tuiCombineSnapshots} from './combine-snapshots';\n\nconst ROOT_PATH = process.env.ROOT_PATH ?? 'projects/demo-cypress';\nconst TEST_RESULTS_PATH = process.env.TEST_RESULTS_PATH ?? `${ROOT_PATH}/tests-results`;\n\ninterface TestResult {\n status: 'fail' | 'pass';\n name: string;\n baselinePath: string;\n diffPath: string;\n comparisonPath: string;\n}\n\ninterface Report {\n suites: Array<{tests: TestResult[]}>;\n}\n\n// noinspection JSUnusedGlobalSymbols\nexport function tuiCombineCypressFailedScreenshots(): void {\n const reportSummary = readJSON<Report>(`${TEST_RESULTS_PATH}/report-summary.json`);\n\n if (!reportSummary) {\n return;\n }\n\n const failedTestSnapshots = reportSummary.suites\n .map((x) => x.tests)\n .flat()\n .filter((x) => x.status === 'fail' && x.diffPath);\n\n for (const {baselinePath, diffPath, comparisonPath, name} of failedTestSnapshots) {\n const output = `${TEST_RESULTS_PATH}/${name}.diff.png`;\n const inputs = [baselinePath, diffPath, comparisonPath].map(\n (x) => `${ROOT_PATH}/${x}`,\n );\n\n tuiCombineSnapshots(inputs, output).then(() =>\n console.info(` ✅ Async saved merged image: ${output}`),\n );\n }\n}\n\nfunction readJSON<T>(path: string): T | null {\n try {\n return JSON.parse(readFileSync(path, 'utf-8'));\n } catch {\n return null;\n }\n}\n","import {readdirSync} from 'node:fs';\n\nimport {tuiCombineSnapshots} from './combine-snapshots';\n\nconst FAILED_SCREENSHOTS_PATH =\n process.env.FAILED_SCREENSHOTS_PATH ?? 'projects/demo-playwright/tests-results';\nconst DIFF_IMAGE_POSTFIX = process.env.DIFF_IMAGE_POSTFIX ?? '-diff.png';\nconst OUTPUT_DIFF_IMAGE_POSTFIX = process.env.OUTPUT_DIFF_IMAGE_POSTFIX ?? '.diff.png';\nconst RETRY_COUNT = Number(process.env.RETRY_COUNT ?? 2);\nconst REG_EXP = new RegExp(`retry${RETRY_COUNT}$|retry${RETRY_COUNT}/`);\n\n// noinspection JSUnusedGlobalSymbols\nexport async function tuiCombinePlaywrightFailedScreenshots(\n rootPath = FAILED_SCREENSHOTS_PATH,\n): Promise<void> {\n const filesOrDirs = readdirSync(rootPath, {\n withFileTypes: true,\n }).filter((x) =>\n x.isDirectory()\n ? REG_EXP.exec(x.name) || REG_EXP.exec(x.parentPath)\n : REG_EXP.exec(x.parentPath),\n );\n\n for (const {name} of filesOrDirs.filter((x) => x.isDirectory())) {\n await tuiCombinePlaywrightFailedScreenshots(`${rootPath}/${name}`);\n }\n\n const imagesPaths: string[] = filesOrDirs\n .filter(\n (x) =>\n x.isFile() &&\n x.name.endsWith('.png') &&\n !x.name.endsWith(OUTPUT_DIFF_IMAGE_POSTFIX),\n )\n .map(({name}) => `${rootPath}/${name}`);\n const diffs = imagesPaths.filter((path) => path.endsWith(DIFF_IMAGE_POSTFIX));\n\n for (const diffImage of diffs) {\n const diffImageName = diffImage.split('/').pop()!.replace(DIFF_IMAGE_POSTFIX, '');\n const output = `${rootPath}/${diffImageName}${OUTPUT_DIFF_IMAGE_POSTFIX}`;\n const inputs = imagesPaths.filter((path) =>\n path.startsWith(diffImage.replace(DIFF_IMAGE_POSTFIX, '')),\n );\n\n tuiCombineSnapshots(inputs, output).then(() =>\n console.info(` ✅ Async saved merged image: ${output}`),\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
{
|
2
2
|
"name": "@taiga-ui/testing",
|
3
|
-
"version": "4.
|
3
|
+
"version": "4.51.0-canary.2b42d75",
|
4
4
|
"description": "Utils functions for testing Taiga UI packages",
|
5
5
|
"peerDependencies": {
|
6
|
-
"@taiga-ui/cdk": "^4.
|
7
|
-
"resize-observer-polyfill": ">=1.5.1"
|
6
|
+
"@taiga-ui/cdk": "^4.51.0",
|
7
|
+
"resize-observer-polyfill": ">=1.5.1",
|
8
|
+
"sharp": "^0.34.3"
|
8
9
|
},
|
9
10
|
"module": "fesm2022/taiga-ui-testing.mjs",
|
10
11
|
"typings": "index.d.ts",
|
@@ -1 +1 @@
|
|
1
|
-
export declare function tuiCombineCypressFailedScreenshots():
|
1
|
+
export declare function tuiCombineCypressFailedScreenshots(): void;
|
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
export declare function tuiCombineSnapshots(imagesPaths: string[]): Promise<NodeJS.ArrayBufferView>;
|
1
|
+
export declare function tuiCombineSnapshots(inputs: string[], output: string): Promise<void>;
|