@pedropaulovc/playwright 1.59.0-alpha-1769214875000

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.
Files changed (183) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +170 -0
  4. package/ThirdPartyNotices.txt +5042 -0
  5. package/cli.js +19 -0
  6. package/index.d.ts +17 -0
  7. package/index.js +17 -0
  8. package/index.mjs +18 -0
  9. package/jsx-runtime.js +42 -0
  10. package/jsx-runtime.mjs +21 -0
  11. package/lib/agents/agentParser.js +89 -0
  12. package/lib/agents/copilot-setup-steps.yml +34 -0
  13. package/lib/agents/generateAgents.js +348 -0
  14. package/lib/agents/playwright-test-coverage.prompt.md +31 -0
  15. package/lib/agents/playwright-test-generate.prompt.md +8 -0
  16. package/lib/agents/playwright-test-generator.agent.md +88 -0
  17. package/lib/agents/playwright-test-heal.prompt.md +6 -0
  18. package/lib/agents/playwright-test-healer.agent.md +55 -0
  19. package/lib/agents/playwright-test-plan.prompt.md +9 -0
  20. package/lib/agents/playwright-test-planner.agent.md +73 -0
  21. package/lib/common/config.js +281 -0
  22. package/lib/common/configLoader.js +344 -0
  23. package/lib/common/esmLoaderHost.js +104 -0
  24. package/lib/common/expectBundle.js +28 -0
  25. package/lib/common/expectBundleImpl.js +407 -0
  26. package/lib/common/fixtures.js +302 -0
  27. package/lib/common/globals.js +58 -0
  28. package/lib/common/ipc.js +60 -0
  29. package/lib/common/poolBuilder.js +85 -0
  30. package/lib/common/process.js +132 -0
  31. package/lib/common/suiteUtils.js +140 -0
  32. package/lib/common/test.js +321 -0
  33. package/lib/common/testLoader.js +101 -0
  34. package/lib/common/testType.js +298 -0
  35. package/lib/common/validators.js +68 -0
  36. package/lib/fsWatcher.js +67 -0
  37. package/lib/index.js +726 -0
  38. package/lib/internalsForTest.js +42 -0
  39. package/lib/isomorphic/events.js +77 -0
  40. package/lib/isomorphic/folders.js +30 -0
  41. package/lib/isomorphic/stringInternPool.js +69 -0
  42. package/lib/isomorphic/teleReceiver.js +520 -0
  43. package/lib/isomorphic/teleSuiteUpdater.js +157 -0
  44. package/lib/isomorphic/testServerConnection.js +225 -0
  45. package/lib/isomorphic/testServerInterface.js +16 -0
  46. package/lib/isomorphic/testTree.js +329 -0
  47. package/lib/isomorphic/types.d.js +16 -0
  48. package/lib/loader/loaderMain.js +59 -0
  49. package/lib/matchers/expect.js +311 -0
  50. package/lib/matchers/matcherHint.js +44 -0
  51. package/lib/matchers/matchers.js +383 -0
  52. package/lib/matchers/toBeTruthy.js +75 -0
  53. package/lib/matchers/toEqual.js +100 -0
  54. package/lib/matchers/toHaveURL.js +101 -0
  55. package/lib/matchers/toMatchAriaSnapshot.js +159 -0
  56. package/lib/matchers/toMatchSnapshot.js +342 -0
  57. package/lib/matchers/toMatchText.js +99 -0
  58. package/lib/mcp/browser/browserContextFactory.js +329 -0
  59. package/lib/mcp/browser/browserServerBackend.js +89 -0
  60. package/lib/mcp/browser/config.js +421 -0
  61. package/lib/mcp/browser/context.js +244 -0
  62. package/lib/mcp/browser/response.js +284 -0
  63. package/lib/mcp/browser/sessionLog.js +75 -0
  64. package/lib/mcp/browser/tab.js +351 -0
  65. package/lib/mcp/browser/tools/common.js +63 -0
  66. package/lib/mcp/browser/tools/console.js +61 -0
  67. package/lib/mcp/browser/tools/dialogs.js +59 -0
  68. package/lib/mcp/browser/tools/evaluate.js +61 -0
  69. package/lib/mcp/browser/tools/files.js +58 -0
  70. package/lib/mcp/browser/tools/form.js +63 -0
  71. package/lib/mcp/browser/tools/install.js +72 -0
  72. package/lib/mcp/browser/tools/keyboard.js +151 -0
  73. package/lib/mcp/browser/tools/mouse.js +159 -0
  74. package/lib/mcp/browser/tools/navigate.js +136 -0
  75. package/lib/mcp/browser/tools/network.js +78 -0
  76. package/lib/mcp/browser/tools/pdf.js +49 -0
  77. package/lib/mcp/browser/tools/runCode.js +76 -0
  78. package/lib/mcp/browser/tools/screenshot.js +87 -0
  79. package/lib/mcp/browser/tools/snapshot.js +207 -0
  80. package/lib/mcp/browser/tools/tabs.js +67 -0
  81. package/lib/mcp/browser/tools/tool.js +47 -0
  82. package/lib/mcp/browser/tools/tracing.js +74 -0
  83. package/lib/mcp/browser/tools/utils.js +94 -0
  84. package/lib/mcp/browser/tools/verify.js +143 -0
  85. package/lib/mcp/browser/tools/wait.js +63 -0
  86. package/lib/mcp/browser/tools.js +82 -0
  87. package/lib/mcp/browser/watchdog.js +44 -0
  88. package/lib/mcp/config.d.js +16 -0
  89. package/lib/mcp/extension/cdpRelay.js +351 -0
  90. package/lib/mcp/extension/extensionContextFactory.js +76 -0
  91. package/lib/mcp/extension/protocol.js +28 -0
  92. package/lib/mcp/index.js +61 -0
  93. package/lib/mcp/log.js +35 -0
  94. package/lib/mcp/program.js +109 -0
  95. package/lib/mcp/sdk/exports.js +28 -0
  96. package/lib/mcp/sdk/http.js +152 -0
  97. package/lib/mcp/sdk/inProcessTransport.js +71 -0
  98. package/lib/mcp/sdk/server.js +223 -0
  99. package/lib/mcp/sdk/tool.js +47 -0
  100. package/lib/mcp/terminal/SKILL.md +158 -0
  101. package/lib/mcp/terminal/cli.js +7 -0
  102. package/lib/mcp/terminal/command.js +56 -0
  103. package/lib/mcp/terminal/commands.js +519 -0
  104. package/lib/mcp/terminal/daemon.js +131 -0
  105. package/lib/mcp/terminal/help.json +47 -0
  106. package/lib/mcp/terminal/helpGenerator.js +115 -0
  107. package/lib/mcp/terminal/program.js +365 -0
  108. package/lib/mcp/terminal/socketConnection.js +80 -0
  109. package/lib/mcp/test/browserBackend.js +98 -0
  110. package/lib/mcp/test/generatorTools.js +122 -0
  111. package/lib/mcp/test/plannerTools.js +145 -0
  112. package/lib/mcp/test/seed.js +82 -0
  113. package/lib/mcp/test/streams.js +44 -0
  114. package/lib/mcp/test/testBackend.js +99 -0
  115. package/lib/mcp/test/testContext.js +285 -0
  116. package/lib/mcp/test/testTool.js +30 -0
  117. package/lib/mcp/test/testTools.js +108 -0
  118. package/lib/plugins/gitCommitInfoPlugin.js +198 -0
  119. package/lib/plugins/index.js +28 -0
  120. package/lib/plugins/webServerPlugin.js +237 -0
  121. package/lib/program.js +418 -0
  122. package/lib/reporters/base.js +638 -0
  123. package/lib/reporters/blob.js +138 -0
  124. package/lib/reporters/dot.js +99 -0
  125. package/lib/reporters/empty.js +32 -0
  126. package/lib/reporters/github.js +128 -0
  127. package/lib/reporters/html.js +633 -0
  128. package/lib/reporters/internalReporter.js +138 -0
  129. package/lib/reporters/json.js +254 -0
  130. package/lib/reporters/junit.js +232 -0
  131. package/lib/reporters/line.js +131 -0
  132. package/lib/reporters/list.js +253 -0
  133. package/lib/reporters/listModeReporter.js +69 -0
  134. package/lib/reporters/markdown.js +144 -0
  135. package/lib/reporters/merge.js +558 -0
  136. package/lib/reporters/multiplexer.js +112 -0
  137. package/lib/reporters/reporterV2.js +102 -0
  138. package/lib/reporters/teleEmitter.js +317 -0
  139. package/lib/reporters/versions/blobV1.js +16 -0
  140. package/lib/runner/dispatcher.js +530 -0
  141. package/lib/runner/failureTracker.js +72 -0
  142. package/lib/runner/lastRun.js +77 -0
  143. package/lib/runner/loadUtils.js +334 -0
  144. package/lib/runner/loaderHost.js +89 -0
  145. package/lib/runner/processHost.js +180 -0
  146. package/lib/runner/projectUtils.js +241 -0
  147. package/lib/runner/rebase.js +189 -0
  148. package/lib/runner/reporters.js +138 -0
  149. package/lib/runner/sigIntWatcher.js +96 -0
  150. package/lib/runner/storage.js +91 -0
  151. package/lib/runner/taskRunner.js +127 -0
  152. package/lib/runner/tasks.js +410 -0
  153. package/lib/runner/testGroups.js +125 -0
  154. package/lib/runner/testRunner.js +398 -0
  155. package/lib/runner/testServer.js +269 -0
  156. package/lib/runner/uiModeReporter.js +30 -0
  157. package/lib/runner/vcs.js +72 -0
  158. package/lib/runner/watchMode.js +396 -0
  159. package/lib/runner/workerHost.js +104 -0
  160. package/lib/third_party/pirates.js +62 -0
  161. package/lib/third_party/tsconfig-loader.js +103 -0
  162. package/lib/transform/babelBundle.js +46 -0
  163. package/lib/transform/babelBundleImpl.js +461 -0
  164. package/lib/transform/compilationCache.js +274 -0
  165. package/lib/transform/esmLoader.js +103 -0
  166. package/lib/transform/md.js +221 -0
  167. package/lib/transform/portTransport.js +67 -0
  168. package/lib/transform/transform.js +303 -0
  169. package/lib/util.js +400 -0
  170. package/lib/utilsBundle.js +50 -0
  171. package/lib/utilsBundleImpl.js +103 -0
  172. package/lib/worker/fixtureRunner.js +262 -0
  173. package/lib/worker/testInfo.js +536 -0
  174. package/lib/worker/testTracing.js +345 -0
  175. package/lib/worker/timeoutManager.js +174 -0
  176. package/lib/worker/util.js +31 -0
  177. package/lib/worker/workerMain.js +530 -0
  178. package/package.json +73 -0
  179. package/test.d.ts +18 -0
  180. package/test.js +24 -0
  181. package/test.mjs +34 -0
  182. package/types/test.d.ts +10287 -0
  183. package/types/testReporter.d.ts +822 -0
@@ -0,0 +1,520 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var teleReceiver_exports = {};
20
+ __export(teleReceiver_exports, {
21
+ TeleReporterReceiver: () => TeleReporterReceiver,
22
+ TeleSuite: () => TeleSuite,
23
+ TeleTestCase: () => TeleTestCase,
24
+ TeleTestResult: () => TeleTestResult,
25
+ baseFullConfig: () => baseFullConfig,
26
+ computeTestCaseOutcome: () => computeTestCaseOutcome,
27
+ parseRegexPatterns: () => parseRegexPatterns,
28
+ serializeRegexPatterns: () => serializeRegexPatterns
29
+ });
30
+ module.exports = __toCommonJS(teleReceiver_exports);
31
+ class TeleReporterReceiver {
32
+ constructor(reporter, options = {}) {
33
+ this.isListing = false;
34
+ this._tests = /* @__PURE__ */ new Map();
35
+ this._rootSuite = new TeleSuite("", "root");
36
+ this._options = options;
37
+ this._reporter = reporter;
38
+ }
39
+ reset() {
40
+ this._rootSuite._entries = [];
41
+ this._tests.clear();
42
+ }
43
+ dispatch(message) {
44
+ const { method, params } = message;
45
+ if (method === "onConfigure") {
46
+ this._onConfigure(params.config);
47
+ return;
48
+ }
49
+ if (method === "onProject") {
50
+ this._onProject(params.project);
51
+ return;
52
+ }
53
+ if (method === "onBegin") {
54
+ this._onBegin();
55
+ return;
56
+ }
57
+ if (method === "onTestBegin") {
58
+ this._onTestBegin(params.testId, params.result);
59
+ return;
60
+ }
61
+ if (method === "onTestPaused") {
62
+ this._onTestPaused(params.testId, params.resultId, params.errors);
63
+ return;
64
+ }
65
+ if (method === "onTestEnd") {
66
+ this._onTestEnd(params.test, params.result);
67
+ return;
68
+ }
69
+ if (method === "onStepBegin") {
70
+ this._onStepBegin(params.testId, params.resultId, params.step);
71
+ return;
72
+ }
73
+ if (method === "onAttach") {
74
+ this._onAttach(params.testId, params.resultId, params.attachments);
75
+ return;
76
+ }
77
+ if (method === "onStepEnd") {
78
+ this._onStepEnd(params.testId, params.resultId, params.step);
79
+ return;
80
+ }
81
+ if (method === "onError") {
82
+ this._onError(params.error);
83
+ return;
84
+ }
85
+ if (method === "onStdIO") {
86
+ this._onStdIO(params.type, params.testId, params.resultId, params.data, params.isBase64);
87
+ return;
88
+ }
89
+ if (method === "onEnd")
90
+ return this._onEnd(params.result);
91
+ if (method === "onExit")
92
+ return this._onExit();
93
+ }
94
+ _onConfigure(config) {
95
+ this._rootDir = config.rootDir;
96
+ this._config = this._parseConfig(config);
97
+ this._reporter.onConfigure?.(this._config);
98
+ }
99
+ _onProject(project) {
100
+ let projectSuite = this._options.mergeProjects ? this._rootSuite.suites.find((suite) => suite.project().name === project.name) : void 0;
101
+ if (!projectSuite) {
102
+ projectSuite = new TeleSuite(project.name, "project");
103
+ this._rootSuite._addSuite(projectSuite);
104
+ }
105
+ projectSuite._project = this._parseProject(project);
106
+ for (const suite of project.suites)
107
+ this._mergeSuiteInto(suite, projectSuite);
108
+ }
109
+ _onBegin() {
110
+ this._reporter.onBegin?.(this._rootSuite);
111
+ }
112
+ _onTestBegin(testId, payload) {
113
+ const test = this._tests.get(testId);
114
+ if (this._options.clearPreviousResultsWhenTestBegins)
115
+ test.results = [];
116
+ const testResult = test._createTestResult(payload.id);
117
+ testResult.retry = payload.retry;
118
+ testResult.workerIndex = payload.workerIndex;
119
+ testResult.parallelIndex = payload.parallelIndex;
120
+ testResult.setStartTimeNumber(payload.startTime);
121
+ this._reporter.onTestBegin?.(test, testResult);
122
+ }
123
+ _onTestPaused(testId, resultId, errors) {
124
+ const test = this._tests.get(testId);
125
+ const result = test.results.find((r) => r._id === resultId);
126
+ result.errors.push(...errors);
127
+ result.error = result.errors[0];
128
+ void this._reporter.onTestPaused?.(test, result);
129
+ }
130
+ _onTestEnd(testEndPayload, payload) {
131
+ const test = this._tests.get(testEndPayload.testId);
132
+ test.timeout = testEndPayload.timeout;
133
+ test.expectedStatus = testEndPayload.expectedStatus;
134
+ const result = test.results.find((r) => r._id === payload.id);
135
+ result.duration = payload.duration;
136
+ result.status = payload.status;
137
+ result.errors.push(...payload.errors ?? []);
138
+ result.error = result.errors[0];
139
+ if (!!payload.attachments)
140
+ result.attachments = this._parseAttachments(payload.attachments);
141
+ if (payload.annotations) {
142
+ this._absoluteAnnotationLocationsInplace(payload.annotations);
143
+ result.annotations = payload.annotations;
144
+ test.annotations = payload.annotations;
145
+ }
146
+ this._reporter.onTestEnd?.(test, result);
147
+ result._stepMap = /* @__PURE__ */ new Map();
148
+ }
149
+ _onStepBegin(testId, resultId, payload) {
150
+ const test = this._tests.get(testId);
151
+ const result = test.results.find((r) => r._id === resultId);
152
+ const parentStep = payload.parentStepId ? result._stepMap.get(payload.parentStepId) : void 0;
153
+ const location = this._absoluteLocation(payload.location);
154
+ const step = new TeleTestStep(payload, parentStep, location, result);
155
+ if (parentStep)
156
+ parentStep.steps.push(step);
157
+ else
158
+ result.steps.push(step);
159
+ result._stepMap.set(payload.id, step);
160
+ this._reporter.onStepBegin?.(test, result, step);
161
+ }
162
+ _onStepEnd(testId, resultId, payload) {
163
+ const test = this._tests.get(testId);
164
+ const result = test.results.find((r) => r._id === resultId);
165
+ const step = result._stepMap.get(payload.id);
166
+ step._endPayload = payload;
167
+ step.duration = payload.duration;
168
+ step.error = payload.error;
169
+ this._reporter.onStepEnd?.(test, result, step);
170
+ }
171
+ _onAttach(testId, resultId, attachments) {
172
+ const test = this._tests.get(testId);
173
+ const result = test.results.find((r) => r._id === resultId);
174
+ result.attachments.push(...attachments.map((a) => ({
175
+ name: a.name,
176
+ contentType: a.contentType,
177
+ path: a.path,
178
+ body: a.base64 && globalThis.Buffer ? Buffer.from(a.base64, "base64") : void 0
179
+ })));
180
+ }
181
+ _onError(error) {
182
+ this._reporter.onError?.(error);
183
+ }
184
+ _onStdIO(type, testId, resultId, data, isBase64) {
185
+ const chunk = isBase64 ? globalThis.Buffer ? Buffer.from(data, "base64") : atob(data) : data;
186
+ const test = testId ? this._tests.get(testId) : void 0;
187
+ const result = test && resultId ? test.results.find((r) => r._id === resultId) : void 0;
188
+ if (type === "stdout") {
189
+ result?.stdout.push(chunk);
190
+ this._reporter.onStdOut?.(chunk, test, result);
191
+ } else {
192
+ result?.stderr.push(chunk);
193
+ this._reporter.onStdErr?.(chunk, test, result);
194
+ }
195
+ }
196
+ async _onEnd(result) {
197
+ await this._reporter.onEnd?.({
198
+ status: result.status,
199
+ startTime: new Date(result.startTime),
200
+ duration: result.duration
201
+ });
202
+ }
203
+ _onExit() {
204
+ return this._reporter.onExit?.();
205
+ }
206
+ _parseConfig(config) {
207
+ const result = { ...baseFullConfig, ...config };
208
+ if (this._options.configOverrides) {
209
+ result.configFile = this._options.configOverrides.configFile;
210
+ result.reportSlowTests = this._options.configOverrides.reportSlowTests;
211
+ result.quiet = this._options.configOverrides.quiet;
212
+ result.reporter = [...this._options.configOverrides.reporter];
213
+ }
214
+ return result;
215
+ }
216
+ _parseProject(project) {
217
+ return {
218
+ metadata: project.metadata,
219
+ name: project.name,
220
+ outputDir: this._absolutePath(project.outputDir),
221
+ repeatEach: project.repeatEach,
222
+ retries: project.retries,
223
+ testDir: this._absolutePath(project.testDir),
224
+ testIgnore: parseRegexPatterns(project.testIgnore),
225
+ testMatch: parseRegexPatterns(project.testMatch),
226
+ timeout: project.timeout,
227
+ grep: parseRegexPatterns(project.grep),
228
+ grepInvert: parseRegexPatterns(project.grepInvert),
229
+ dependencies: project.dependencies,
230
+ teardown: project.teardown,
231
+ snapshotDir: this._absolutePath(project.snapshotDir),
232
+ use: project.use
233
+ };
234
+ }
235
+ _parseAttachments(attachments) {
236
+ return attachments.map((a) => {
237
+ return {
238
+ ...a,
239
+ body: a.base64 && globalThis.Buffer ? Buffer.from(a.base64, "base64") : void 0
240
+ };
241
+ });
242
+ }
243
+ _mergeSuiteInto(jsonSuite, parent) {
244
+ let targetSuite = parent.suites.find((s) => s.title === jsonSuite.title);
245
+ if (!targetSuite) {
246
+ targetSuite = new TeleSuite(jsonSuite.title, parent.type === "project" ? "file" : "describe");
247
+ parent._addSuite(targetSuite);
248
+ }
249
+ targetSuite.location = this._absoluteLocation(jsonSuite.location);
250
+ jsonSuite.entries.forEach((e) => {
251
+ if ("testId" in e)
252
+ this._mergeTestInto(e, targetSuite);
253
+ else
254
+ this._mergeSuiteInto(e, targetSuite);
255
+ });
256
+ }
257
+ _mergeTestInto(jsonTest, parent) {
258
+ let targetTest = this._options.mergeTestCases ? parent.tests.find((s) => s.title === jsonTest.title && s.repeatEachIndex === jsonTest.repeatEachIndex) : void 0;
259
+ if (!targetTest) {
260
+ targetTest = new TeleTestCase(jsonTest.testId, jsonTest.title, this._absoluteLocation(jsonTest.location), jsonTest.repeatEachIndex);
261
+ parent._addTest(targetTest);
262
+ this._tests.set(targetTest.id, targetTest);
263
+ }
264
+ this._updateTest(jsonTest, targetTest);
265
+ }
266
+ _updateTest(payload, test) {
267
+ test.id = payload.testId;
268
+ test.location = this._absoluteLocation(payload.location);
269
+ test.retries = payload.retries;
270
+ test.tags = payload.tags ?? [];
271
+ test.annotations = payload.annotations ?? [];
272
+ this._absoluteAnnotationLocationsInplace(test.annotations);
273
+ return test;
274
+ }
275
+ _absoluteAnnotationLocationsInplace(annotations) {
276
+ for (const annotation of annotations) {
277
+ if (annotation.location)
278
+ annotation.location = this._absoluteLocation(annotation.location);
279
+ }
280
+ }
281
+ _absoluteLocation(location) {
282
+ if (!location)
283
+ return location;
284
+ return {
285
+ ...location,
286
+ file: this._absolutePath(location.file)
287
+ };
288
+ }
289
+ _absolutePath(relativePath) {
290
+ if (relativePath === void 0)
291
+ return;
292
+ return this._options.resolvePath ? this._options.resolvePath(this._rootDir, relativePath) : this._rootDir + "/" + relativePath;
293
+ }
294
+ }
295
+ class TeleSuite {
296
+ constructor(title, type) {
297
+ this._entries = [];
298
+ this._requireFile = "";
299
+ this._parallelMode = "none";
300
+ this.title = title;
301
+ this._type = type;
302
+ }
303
+ get type() {
304
+ return this._type;
305
+ }
306
+ get suites() {
307
+ return this._entries.filter((e) => e.type !== "test");
308
+ }
309
+ get tests() {
310
+ return this._entries.filter((e) => e.type === "test");
311
+ }
312
+ entries() {
313
+ return this._entries;
314
+ }
315
+ allTests() {
316
+ const result = [];
317
+ const visit = (suite) => {
318
+ for (const entry of suite.entries()) {
319
+ if (entry.type === "test")
320
+ result.push(entry);
321
+ else
322
+ visit(entry);
323
+ }
324
+ };
325
+ visit(this);
326
+ return result;
327
+ }
328
+ titlePath() {
329
+ const titlePath = this.parent ? this.parent.titlePath() : [];
330
+ if (this.title || this._type !== "describe")
331
+ titlePath.push(this.title);
332
+ return titlePath;
333
+ }
334
+ project() {
335
+ return this._project ?? this.parent?.project();
336
+ }
337
+ _addTest(test) {
338
+ test.parent = this;
339
+ this._entries.push(test);
340
+ }
341
+ _addSuite(suite) {
342
+ suite.parent = this;
343
+ this._entries.push(suite);
344
+ }
345
+ }
346
+ class TeleTestCase {
347
+ constructor(id, title, location, repeatEachIndex) {
348
+ this.fn = () => {
349
+ };
350
+ this.results = [];
351
+ this.type = "test";
352
+ this.expectedStatus = "passed";
353
+ this.timeout = 0;
354
+ this.annotations = [];
355
+ this.retries = 0;
356
+ this.tags = [];
357
+ this.repeatEachIndex = 0;
358
+ this.id = id;
359
+ this.title = title;
360
+ this.location = location;
361
+ this.repeatEachIndex = repeatEachIndex;
362
+ }
363
+ titlePath() {
364
+ const titlePath = this.parent ? this.parent.titlePath() : [];
365
+ titlePath.push(this.title);
366
+ return titlePath;
367
+ }
368
+ outcome() {
369
+ return computeTestCaseOutcome(this);
370
+ }
371
+ ok() {
372
+ const status = this.outcome();
373
+ return status === "expected" || status === "flaky" || status === "skipped";
374
+ }
375
+ _createTestResult(id) {
376
+ const result = new TeleTestResult(this.results.length, id);
377
+ this.results.push(result);
378
+ return result;
379
+ }
380
+ }
381
+ class TeleTestStep {
382
+ constructor(payload, parentStep, location, result) {
383
+ this.duration = -1;
384
+ this.steps = [];
385
+ this._startTime = 0;
386
+ this.title = payload.title;
387
+ this.category = payload.category;
388
+ this.location = location;
389
+ this.parent = parentStep;
390
+ this._startTime = payload.startTime;
391
+ this._result = result;
392
+ }
393
+ titlePath() {
394
+ const parentPath = this.parent?.titlePath() || [];
395
+ return [...parentPath, this.title];
396
+ }
397
+ get startTime() {
398
+ return new Date(this._startTime);
399
+ }
400
+ set startTime(value) {
401
+ this._startTime = +value;
402
+ }
403
+ get attachments() {
404
+ return this._endPayload?.attachments?.map((index) => this._result.attachments[index]) ?? [];
405
+ }
406
+ get annotations() {
407
+ return this._endPayload?.annotations ?? [];
408
+ }
409
+ }
410
+ class TeleTestResult {
411
+ constructor(retry, id) {
412
+ this.parallelIndex = -1;
413
+ this.workerIndex = -1;
414
+ this.duration = -1;
415
+ this.stdout = [];
416
+ this.stderr = [];
417
+ this.attachments = [];
418
+ this.annotations = [];
419
+ this.status = "skipped";
420
+ this.steps = [];
421
+ this.errors = [];
422
+ this._stepMap = /* @__PURE__ */ new Map();
423
+ this._startTime = 0;
424
+ this.retry = retry;
425
+ this._id = id;
426
+ }
427
+ setStartTimeNumber(startTime) {
428
+ this._startTime = startTime;
429
+ }
430
+ get startTime() {
431
+ return new Date(this._startTime);
432
+ }
433
+ set startTime(value) {
434
+ this._startTime = +value;
435
+ }
436
+ }
437
+ const baseFullConfig = {
438
+ forbidOnly: false,
439
+ fullyParallel: false,
440
+ globalSetup: null,
441
+ globalTeardown: null,
442
+ globalTimeout: 0,
443
+ grep: /.*/,
444
+ grepInvert: null,
445
+ maxFailures: 0,
446
+ metadata: {},
447
+ preserveOutput: "always",
448
+ projects: [],
449
+ reporter: [[process.env.CI ? "dot" : "list"]],
450
+ reportSlowTests: {
451
+ max: 5,
452
+ threshold: 3e5
453
+ /* 5 minutes */
454
+ },
455
+ configFile: "",
456
+ rootDir: "",
457
+ quiet: false,
458
+ shard: null,
459
+ tags: [],
460
+ updateSnapshots: "missing",
461
+ updateSourceMethod: "patch",
462
+ runAgents: "none",
463
+ version: "",
464
+ workers: 0,
465
+ webServer: null
466
+ };
467
+ function serializeRegexPatterns(patterns) {
468
+ if (!Array.isArray(patterns))
469
+ patterns = [patterns];
470
+ return patterns.map((s) => {
471
+ if (typeof s === "string")
472
+ return { s };
473
+ return { r: { source: s.source, flags: s.flags } };
474
+ });
475
+ }
476
+ function parseRegexPatterns(patterns) {
477
+ return patterns.map((p) => {
478
+ if (p.s !== void 0)
479
+ return p.s;
480
+ return new RegExp(p.r.source, p.r.flags);
481
+ });
482
+ }
483
+ function computeTestCaseOutcome(test) {
484
+ let skipped = 0;
485
+ let didNotRun = 0;
486
+ let expected = 0;
487
+ let interrupted = 0;
488
+ let unexpected = 0;
489
+ for (const result of test.results) {
490
+ if (result.status === "interrupted") {
491
+ ++interrupted;
492
+ } else if (result.status === "skipped" && test.expectedStatus === "skipped") {
493
+ ++skipped;
494
+ } else if (result.status === "skipped") {
495
+ ++didNotRun;
496
+ } else if (result.status === test.expectedStatus) {
497
+ ++expected;
498
+ } else {
499
+ ++unexpected;
500
+ }
501
+ }
502
+ if (expected === 0 && unexpected === 0)
503
+ return "skipped";
504
+ if (unexpected === 0)
505
+ return "expected";
506
+ if (expected === 0 && skipped === 0)
507
+ return "unexpected";
508
+ return "flaky";
509
+ }
510
+ // Annotate the CommonJS export names for ESM import in node:
511
+ 0 && (module.exports = {
512
+ TeleReporterReceiver,
513
+ TeleSuite,
514
+ TeleTestCase,
515
+ TeleTestResult,
516
+ baseFullConfig,
517
+ computeTestCaseOutcome,
518
+ parseRegexPatterns,
519
+ serializeRegexPatterns
520
+ });
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var teleSuiteUpdater_exports = {};
20
+ __export(teleSuiteUpdater_exports, {
21
+ TeleSuiteUpdater: () => TeleSuiteUpdater
22
+ });
23
+ module.exports = __toCommonJS(teleSuiteUpdater_exports);
24
+ var import_teleReceiver = require("./teleReceiver");
25
+ var import_testTree = require("./testTree");
26
+ class TeleSuiteUpdater {
27
+ constructor(options) {
28
+ this.loadErrors = [];
29
+ this.progress = {
30
+ total: 0,
31
+ passed: 0,
32
+ failed: 0,
33
+ skipped: 0
34
+ };
35
+ this._lastRunTestCount = 0;
36
+ this._receiver = new import_teleReceiver.TeleReporterReceiver(this._createReporter(), {
37
+ mergeProjects: true,
38
+ mergeTestCases: true,
39
+ resolvePath: createPathResolve(options.pathSeparator),
40
+ clearPreviousResultsWhenTestBegins: true
41
+ });
42
+ this._options = options;
43
+ }
44
+ _createReporter() {
45
+ return {
46
+ version: () => "v2",
47
+ onConfigure: (config) => {
48
+ this.config = config;
49
+ this._lastRunReceiver = new import_teleReceiver.TeleReporterReceiver({
50
+ version: () => "v2",
51
+ onBegin: (suite) => {
52
+ this._lastRunTestCount = suite.allTests().length;
53
+ this._lastRunReceiver = void 0;
54
+ }
55
+ }, {
56
+ mergeProjects: true,
57
+ mergeTestCases: false,
58
+ resolvePath: createPathResolve(this._options.pathSeparator)
59
+ });
60
+ void this._lastRunReceiver.dispatch({ method: "onConfigure", params: { config } });
61
+ },
62
+ onBegin: (suite) => {
63
+ if (!this.rootSuite)
64
+ this.rootSuite = suite;
65
+ if (this._testResultsSnapshot) {
66
+ for (const test of this.rootSuite.allTests())
67
+ test.results = this._testResultsSnapshot?.get(test.id) || test.results;
68
+ this._testResultsSnapshot = void 0;
69
+ }
70
+ this.progress.total = this._lastRunTestCount;
71
+ this.progress.passed = 0;
72
+ this.progress.failed = 0;
73
+ this.progress.skipped = 0;
74
+ this._options.onUpdate(true);
75
+ },
76
+ onEnd: () => {
77
+ this._options.onUpdate(true);
78
+ },
79
+ onTestBegin: (test, testResult) => {
80
+ testResult[import_testTree.statusEx] = "running";
81
+ this._options.onUpdate();
82
+ },
83
+ onTestEnd: (test, testResult) => {
84
+ if (test.outcome() === "skipped")
85
+ ++this.progress.skipped;
86
+ else if (test.outcome() === "unexpected")
87
+ ++this.progress.failed;
88
+ else
89
+ ++this.progress.passed;
90
+ testResult[import_testTree.statusEx] = testResult.status;
91
+ this._options.onUpdate();
92
+ },
93
+ onError: (error) => this._handleOnError(error),
94
+ printsToStdio: () => false
95
+ };
96
+ }
97
+ processGlobalReport(report) {
98
+ const receiver = new import_teleReceiver.TeleReporterReceiver({
99
+ version: () => "v2",
100
+ onConfigure: (c) => {
101
+ this.config = c;
102
+ },
103
+ onError: (error) => this._handleOnError(error)
104
+ });
105
+ for (const message of report)
106
+ void receiver.dispatch(message);
107
+ }
108
+ processListReport(report) {
109
+ const tests = this.rootSuite?.allTests() || [];
110
+ this._testResultsSnapshot = new Map(tests.map((test) => [test.id, test.results]));
111
+ this._receiver.reset();
112
+ for (const message of report)
113
+ void this._receiver.dispatch(message);
114
+ }
115
+ processTestReportEvent(message) {
116
+ this._lastRunReceiver?.dispatch(message)?.catch(() => {
117
+ });
118
+ this._receiver.dispatch(message)?.catch(() => {
119
+ });
120
+ }
121
+ _handleOnError(error) {
122
+ this.loadErrors.push(error);
123
+ this._options.onError?.(error);
124
+ this._options.onUpdate();
125
+ }
126
+ asModel() {
127
+ return {
128
+ rootSuite: this.rootSuite || new import_teleReceiver.TeleSuite("", "root"),
129
+ config: this.config,
130
+ loadErrors: this.loadErrors,
131
+ progress: this.progress
132
+ };
133
+ }
134
+ }
135
+ function createPathResolve(pathSeparator) {
136
+ return (rootDir, relativePath) => {
137
+ const segments = [];
138
+ for (const segment of [...rootDir.split(pathSeparator), ...relativePath.split(pathSeparator)]) {
139
+ const isAfterDrive = pathSeparator === "\\" && segments.length === 1 && segments[0].endsWith(":");
140
+ const isFirst = !segments.length;
141
+ if (!segment && !isFirst && !isAfterDrive)
142
+ continue;
143
+ if (segment === ".")
144
+ continue;
145
+ if (segment === "..") {
146
+ segments.pop();
147
+ continue;
148
+ }
149
+ segments.push(segment);
150
+ }
151
+ return segments.join(pathSeparator);
152
+ };
153
+ }
154
+ // Annotate the CommonJS export names for ESM import in node:
155
+ 0 && (module.exports = {
156
+ TeleSuiteUpdater
157
+ });