@applitools/eyes-playwright 1.29.4 → 1.30.0

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.
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.test = exports.expect = void 0;
27
+ /* eslint-disable no-console */
28
+ const index_1 = require("../index");
29
+ const test_1 = require("@playwright/test");
30
+ const getEyes_1 = require("./getEyes");
31
+ var toHaveScreenshot_1 = require("./toHaveScreenshot");
32
+ Object.defineProperty(exports, "expect", { enumerable: true, get: function () { return toHaveScreenshot_1.expect; } });
33
+ const utils = __importStar(require("@applitools/utils"));
34
+ const reporter_1 = require("./reporter");
35
+ exports.test = test_1.test.extend({
36
+ eyesConfig: [{}, { option: true }],
37
+ eyesRunner: [
38
+ async ({}, use, workerInfo) => {
39
+ var _a;
40
+ const eyesConfig = getEyesConfigForWorker(workerInfo);
41
+ const runner = eyesConfig.type === 'ufg' ? new index_1.VisualGridRunner(eyesConfig) : new index_1.ClassicRunner(eyesConfig);
42
+ await use(runner);
43
+ output(`Waiting on eyes results for worker #${workerInfo.parallelIndex}-${workerInfo.workerIndex} - it might take a while`);
44
+ try {
45
+ await Promise.all((_a = runner === null || runner === void 0 ? void 0 : runner.fixturePromises) !== null && _a !== void 0 ? _a : []);
46
+ await runner.getAllTestResults(eyesConfig.failTestsOnDiff === 'afterAll').catch(err => {
47
+ const newError = new Error(err.message);
48
+ newError.stack = undefined;
49
+ throw newError;
50
+ });
51
+ }
52
+ finally {
53
+ const results = await runner.getAllTestResults(false);
54
+ output(outputDigest(workerInfo, results));
55
+ if (eyesConfig.afterAll) {
56
+ eyesConfig.afterAll(results.getAllResults());
57
+ }
58
+ }
59
+ },
60
+ { scope: 'worker', timeout: 0 },
61
+ ],
62
+ page: async ({ page, eyesRunner, eyesConfig }, use) => {
63
+ // save the configurations and settings for the `expect.toHaveScreenshot` override
64
+ ;
65
+ page.__eyesRunner = eyesRunner;
66
+ page.__eyesConfig = eyesConfig; // TODO merge playwrightConfig, projectConfig, eyesConfig
67
+ await use(page);
68
+ },
69
+ eyes: [
70
+ async ({ page, eyesConfig, eyesRunner }, use, testInfo) => {
71
+ const eyes = await (0, getEyes_1.getEyes)({
72
+ testInfo,
73
+ eyesConfig,
74
+ eyesRunner,
75
+ page,
76
+ });
77
+ await use(eyes);
78
+ },
79
+ { timeout: 0 },
80
+ ],
81
+ closeEyesIfNeeded: [
82
+ async ({ page, eyesConfig, eyesRunner: runner }, use, testInfo) => {
83
+ const isUsingEyesReporter = testInfo.config.reporter.some(r => r[0].includes('eyes-playwright'));
84
+ if (isUsingEyesReporter) {
85
+ const internalId = utils.general.guid();
86
+ await testInfo.attach('internalId', { body: internalId });
87
+ }
88
+ await use();
89
+ const eyes = page.__eyes;
90
+ if (eyes) {
91
+ await eyes.closeAsync();
92
+ if (isUsingEyesReporter) {
93
+ writeResultsWhenReady({ eyes, runner, testInfo });
94
+ }
95
+ if (eyesConfig.failTestsOnDiff === 'afterEach') {
96
+ await eyes.getResults(true);
97
+ }
98
+ }
99
+ },
100
+ { timeout: 0, auto: true },
101
+ ],
102
+ });
103
+ function outputDigest(workerInfo, results) {
104
+ const batchUrls = [...new Set(results.getAllResults().map(r => r.testResults.appUrls.batch))];
105
+ if (batchUrls.length === 0) {
106
+ return 'No results found for Eyes';
107
+ }
108
+ else {
109
+ return `Eyes results for worker #${workerInfo.parallelIndex}-${workerInfo.workerIndex}: ${batchUrls.length > 1 ? batchUrls.join('\n ') : batchUrls[0]}`;
110
+ }
111
+ }
112
+ function output(...args) {
113
+ console.log('👀', ...args);
114
+ }
115
+ function writeResultsWhenReady({ eyes, runner, testInfo }) {
116
+ var _a;
117
+ const fixturePromises = ((_a = runner.fixturePromises) !== null && _a !== void 0 ? _a : (runner.fixturePromises = []));
118
+ fixturePromises.push(eyes
119
+ .getResults(false)
120
+ .then(async (testResults) => {
121
+ await reporter_1.InternalData.write({ testInfo, data: testResults });
122
+ })
123
+ .catch((e) => {
124
+ var _a;
125
+ // TODO error handling
126
+ throw new Error(`Failed to get eyes test results: ${(_a = e === null || e === void 0 ? void 0 : e.message) !== null && _a !== void 0 ? _a : e} ${e === null || e === void 0 ? void 0 : e.stack}`);
127
+ }));
128
+ }
129
+ function getEyesConfigForWorker(workerInfo) {
130
+ var _a, _b, _c, _d;
131
+ const playwrightConfig = (_c = (_b = ((workerInfo.config.configFile
132
+ ? (_a = require(workerInfo.config.configFile)) === null || _a === void 0 ? void 0 : _a.default
133
+ : {}))) === null || _b === void 0 ? void 0 : _b.use) === null || _c === void 0 ? void 0 : _c.eyesConfig;
134
+ const projectConfig = workerInfo.project.use.eyesConfig;
135
+ const eyesConfig = {
136
+ ...playwrightConfig,
137
+ ...projectConfig,
138
+ };
139
+ (_d = eyesConfig.failTestsOnDiff) !== null && _d !== void 0 ? _d : (eyesConfig.failTestsOnDiff = process.env.CI ? 'afterAll' : 'afterEach');
140
+ return eyesConfig;
141
+ }