@empiricalrun/playwright-utils 0.62.0 → 0.63.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.
- package/CHANGELOG.md +25 -0
- package/dist/api-worker-client.d.ts +0 -13
- package/dist/api-worker-client.d.ts.map +1 -1
- package/dist/api-worker-client.js +0 -15
- package/dist/auth/google.d.ts.map +1 -1
- package/dist/auth/google.js +0 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +0 -9
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +0 -8
- package/dist/generated/api-worker-openapi.d.ts +2773 -1298
- package/dist/generated/api-worker-openapi.d.ts.map +1 -1
- package/dist/overlay-tests/cache.spec.js +0 -10
- package/dist/overlay-tests/click.spec.js +0 -18
- package/dist/playwright-extensions.d.ts.map +1 -1
- package/dist/playwright-extensions.js +0 -1
- package/dist/reporter/attachment-cleanup-test-reporter.d.ts +0 -6
- package/dist/reporter/attachment-cleanup-test-reporter.d.ts.map +1 -1
- package/dist/reporter/attachment-cleanup-test-reporter.js +0 -6
- package/dist/reporter/attachment-cleanup.d.ts +0 -33
- package/dist/reporter/attachment-cleanup.d.ts.map +1 -1
- package/dist/reporter/attachment-cleanup.js +2 -51
- package/dist/reporter/empirical-reporter.d.ts.map +1 -1
- package/dist/reporter/empirical-reporter.js +0 -9
- package/dist/reporter/harness.d.ts +0 -62
- package/dist/reporter/harness.d.ts.map +1 -1
- package/dist/reporter/harness.js +1 -53
- package/dist/reporter/ibr-utils.d.ts +0 -5
- package/dist/reporter/ibr-utils.d.ts.map +1 -1
- package/dist/reporter/ibr-utils.js +0 -5
- package/dist/reporter/incremental-blob-reporter.d.ts +0 -17
- package/dist/reporter/incremental-blob-reporter.d.ts.map +1 -1
- package/dist/reporter/incremental-blob-reporter.js +5 -35
- package/dist/reporter/lifecycle-events.d.ts.map +1 -1
- package/dist/reporter/lifecycle-events.js +0 -9
- package/dist/reporter/parity-utils.d.ts +0 -30
- package/dist/reporter/parity-utils.d.ts.map +1 -1
- package/dist/reporter/parity-utils.js +4 -28
- package/dist/reporter/reporter-state.d.ts +0 -12
- package/dist/reporter/reporter-state.d.ts.map +1 -1
- package/dist/reporter/reporter-state.js +0 -12
- package/dist/reporter/test-case-sync.d.ts.map +1 -1
- package/dist/reporter/test-case-sync.js +0 -12
- package/dist/reporter/uploader.d.ts.map +1 -1
- package/dist/reporter/uploader.js +0 -6
- package/dist/reporter/util.d.ts +0 -33
- package/dist/reporter/util.d.ts.map +1 -1
- package/dist/reporter/util.js +0 -37
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +1 -10
- package/dist/test/coverage.d.ts.map +1 -1
- package/dist/test/coverage.js +1 -3
- package/dist/test/expect/visual.d.ts.map +1 -1
- package/dist/test/expect/visual.js +1 -9
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +4 -21
- package/dist/test/scripts/agent-capabilities.js +2 -2
- package/dist/test/scripts/index.d.ts +2 -2
- package/dist/test/scripts/index.d.ts.map +1 -1
- package/dist/test/scripts/index.js +3 -16
- package/dist/test/scripts/pw-locator-patch/actions/click.d.ts.map +1 -0
- package/dist/test/scripts/pw-locator-patch/{highlight → actions}/click.js +0 -6
- package/dist/test/scripts/pw-locator-patch/actions/hover.d.ts.map +1 -0
- package/dist/test/scripts/pw-locator-patch/{highlight → actions}/hover.js +0 -3
- package/dist/test/scripts/pw-locator-patch/dismiss-overlays/cache.d.ts.map +1 -1
- package/dist/test/scripts/pw-locator-patch/dismiss-overlays/cache.js +0 -7
- package/dist/test/scripts/pw-locator-patch/dismiss-overlays/index.d.ts.map +1 -1
- package/dist/test/scripts/pw-locator-patch/dismiss-overlays/index.js +1 -9
- package/dist/test/scripts/pw-locator-patch/dismiss-overlays/prompt.d.ts.map +1 -1
- package/dist/test/scripts/pw-locator-patch/dismiss-overlays/prompt.js +0 -1
- package/dist/test/scripts/pw-locator-patch/dismiss-overlays/utils.d.ts.map +1 -1
- package/dist/test/scripts/pw-locator-patch/dismiss-overlays/utils.js +2 -5
- package/dist/test/scripts/pw-locator-patch/utils/index.d.ts +0 -1
- package/dist/test/scripts/pw-locator-patch/utils/index.d.ts.map +1 -1
- package/dist/test/scripts/pw-locator-patch/utils/index.js +0 -18
- package/dist/test/types.d.ts +2 -5
- package/dist/test/types.d.ts.map +1 -1
- package/dist/test/video-labels.d.ts.map +1 -1
- package/dist/test/video-labels.js +0 -1
- package/dist/webhook.d.ts.map +1 -1
- package/dist/webhook.js +0 -3
- package/docs/fixtures.md +4 -5
- package/package.json +6 -6
- package/playwright.config.ts +0 -4
- package/tsconfig.tsbuildinfo +1 -1
- package/upstream-oracle/ibr-adapter.js +0 -23
- package/upstream-oracle/run.mjs +1 -69
- package/dist/test/scripts/locator-highlights.d.ts +0 -4
- package/dist/test/scripts/locator-highlights.d.ts.map +0 -1
- package/dist/test/scripts/locator-highlights.js +0 -28
- package/dist/test/scripts/pw-locator-patch/highlight/click.d.ts.map +0 -1
- package/dist/test/scripts/pw-locator-patch/highlight/expect.d.ts +0 -5
- package/dist/test/scripts/pw-locator-patch/highlight/expect.d.ts.map +0 -1
- package/dist/test/scripts/pw-locator-patch/highlight/expect.js +0 -23
- package/dist/test/scripts/pw-locator-patch/highlight/hover.d.ts.map +0 -1
- package/dist/test/scripts/pw-locator-patch/highlight/inner-text.d.ts +0 -6
- package/dist/test/scripts/pw-locator-patch/highlight/inner-text.d.ts.map +0 -1
- package/dist/test/scripts/pw-locator-patch/highlight/inner-text.js +0 -30
- package/dist/test/scripts/pw-locator-patch/highlight/input-value.d.ts +0 -6
- package/dist/test/scripts/pw-locator-patch/highlight/input-value.d.ts.map +0 -1
- package/dist/test/scripts/pw-locator-patch/highlight/input-value.js +0 -30
- package/dist/test/scripts/pw-locator-patch/highlight/is-checked.d.ts +0 -6
- package/dist/test/scripts/pw-locator-patch/highlight/is-checked.d.ts.map +0 -1
- package/dist/test/scripts/pw-locator-patch/highlight/is-checked.js +0 -30
- package/dist/test/scripts/pw-locator-patch/highlight/is-disabled.d.ts +0 -6
- package/dist/test/scripts/pw-locator-patch/highlight/is-disabled.d.ts.map +0 -1
- package/dist/test/scripts/pw-locator-patch/highlight/is-disabled.js +0 -30
- package/dist/test/scripts/pw-locator-patch/highlight/is-editable.d.ts +0 -6
- package/dist/test/scripts/pw-locator-patch/highlight/is-editable.d.ts.map +0 -1
- package/dist/test/scripts/pw-locator-patch/highlight/is-editable.js +0 -29
- package/dist/test/scripts/pw-locator-patch/highlight/text-content.d.ts +0 -6
- package/dist/test/scripts/pw-locator-patch/highlight/text-content.d.ts.map +0 -1
- package/dist/test/scripts/pw-locator-patch/highlight/text-content.js +0 -30
- /package/dist/test/scripts/pw-locator-patch/{highlight → actions}/click.d.ts +0 -0
- /package/dist/test/scripts/pw-locator-patch/{highlight → actions}/hover.d.ts +0 -0
package/dist/reporter/harness.js
CHANGED
|
@@ -31,10 +31,6 @@ const PLAYWRIGHT_BIN = path_1.default.resolve(__dirname, "../../node_modules/.bi
|
|
|
31
31
|
async function sleep(ms) {
|
|
32
32
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
33
33
|
}
|
|
34
|
-
/**
|
|
35
|
-
* Sets up a temp directory with the IBR fixture files.
|
|
36
|
-
* Returns a context object and a cleanup function.
|
|
37
|
-
*/
|
|
38
34
|
async function setupFixture(suite) {
|
|
39
35
|
const { tempDir, cleanup } = await setupReporterFixture({
|
|
40
36
|
suite,
|
|
@@ -58,7 +54,6 @@ async function setupReporterFixture({ suite, reporterPath, tempPrefix, }) {
|
|
|
58
54
|
const src = path_1.default.join(fixtureDir, entry.name);
|
|
59
55
|
const dest = path_1.default.join(tempDir, entry.name);
|
|
60
56
|
if (entry.isDirectory()) {
|
|
61
|
-
// Fixtures that put specs under a testDir subdir.
|
|
62
57
|
await fs_1.default.promises.cp(src, dest, { recursive: true });
|
|
63
58
|
}
|
|
64
59
|
else if (entry.name === "playwright.config.ts") {
|
|
@@ -90,9 +85,6 @@ async function setupTestCaseSyncFixture(suite) {
|
|
|
90
85
|
cleanup,
|
|
91
86
|
};
|
|
92
87
|
}
|
|
93
|
-
/**
|
|
94
|
-
* Cleans blob artifacts from a previous run inside the same temp dir.
|
|
95
|
-
*/
|
|
96
88
|
async function cleanBlobArtifacts(ctx) {
|
|
97
89
|
if (fs_1.default.existsSync(ctx.blobDir)) {
|
|
98
90
|
await fs_1.default.promises.rm(ctx.blobDir, { recursive: true, force: true });
|
|
@@ -103,13 +95,6 @@ const WAIT_FOR_PATTERNS = {
|
|
|
103
95
|
"first-failed": /failed|✘|×/,
|
|
104
96
|
};
|
|
105
97
|
const MARKER_RE = /@@ ([A-Z0-9-]+) @@/g;
|
|
106
|
-
/**
|
|
107
|
-
* Spawns `playwright test` with the IBR reporter in its own process group,
|
|
108
|
-
* signals the group mid-run, and waits for exit.
|
|
109
|
-
*
|
|
110
|
-
* The process group and the signal both match production: `cmd.ts` spawns the
|
|
111
|
-
* runner detached and does `process.kill(-pid, signal)`.
|
|
112
|
-
*/
|
|
113
98
|
async function runPlaywrightWithSignal(ctx, opts) {
|
|
114
99
|
const { workers, waitForMarker, waitFor, delayBeforeSignalMs = 0, signal = "SIGINT", secondSignalAfterMs, killAfterMs, triggerTimeoutMs = 30_000, env, } = opts;
|
|
115
100
|
const startedAt = Date.now();
|
|
@@ -162,9 +147,7 @@ async function runPlaywrightWithSignal(ctx, opts) {
|
|
|
162
147
|
try {
|
|
163
148
|
process.kill(-child.pid, sig);
|
|
164
149
|
}
|
|
165
|
-
catch {
|
|
166
|
-
// The group is already gone.
|
|
167
|
-
}
|
|
150
|
+
catch { }
|
|
168
151
|
};
|
|
169
152
|
const pattern = waitFor ? WAIT_FOR_PATTERNS[waitFor] : undefined;
|
|
170
153
|
const isTriggered = () => waitForMarker
|
|
@@ -199,7 +182,6 @@ async function runPlaywrightWithSignal(ctx, opts) {
|
|
|
199
182
|
if (killAfterMs !== undefined) {
|
|
200
183
|
timers.push(setTimeout(() => signalGroup("SIGKILL"), killAfterMs));
|
|
201
184
|
}
|
|
202
|
-
// Backstop: never leave a runner behind if the suite misbehaves.
|
|
203
185
|
timers.push(setTimeout(() => signalGroup("SIGKILL"), 120_000));
|
|
204
186
|
try {
|
|
205
187
|
await closed;
|
|
@@ -219,21 +201,13 @@ async function runPlaywrightWithSignal(ctx, opts) {
|
|
|
219
201
|
startedAtEpochMs: startedAt,
|
|
220
202
|
};
|
|
221
203
|
}
|
|
222
|
-
/**
|
|
223
|
-
* Spawns `playwright test` with the IBR reporter, waits for a test outcome,
|
|
224
|
-
* sends SIGINT, and waits for the process to exit.
|
|
225
|
-
*
|
|
226
|
-
* Returns captured stdout/stderr.
|
|
227
|
-
*/
|
|
228
204
|
async function runPlaywrightWithSigint(ctx, opts) {
|
|
229
205
|
return runPlaywrightWithSignal(ctx, {
|
|
230
206
|
workers: opts.workers,
|
|
231
207
|
waitFor: opts.waitFor,
|
|
232
|
-
// Waiting for 1 sec to ensure second test has started
|
|
233
208
|
delayBeforeSignalMs: 1_000,
|
|
234
209
|
});
|
|
235
210
|
}
|
|
236
|
-
/** Marker names in the order they were printed. */
|
|
237
211
|
function markerNames(result) {
|
|
238
212
|
return result.markers.map((m) => m.name);
|
|
239
213
|
}
|
|
@@ -262,15 +236,9 @@ async function runPlaywrightList(ctx) {
|
|
|
262
236
|
}
|
|
263
237
|
return { stdout, stderr };
|
|
264
238
|
}
|
|
265
|
-
/**
|
|
266
|
-
* Reads `report.jsonl` from the blob zip and returns parsed events.
|
|
267
|
-
*/
|
|
268
239
|
async function readBlobEvents(ctx) {
|
|
269
240
|
return readEventsFromZip(ctx.zipPath);
|
|
270
241
|
}
|
|
271
|
-
/**
|
|
272
|
-
* Reads `report.jsonl` from any blob-format zip (standard or incremental).
|
|
273
|
-
*/
|
|
274
242
|
async function readEventsFromZip(zipPath) {
|
|
275
243
|
const reportBuffer = await (0, zip_1.readZipEntry)(zipPath, "report.jsonl");
|
|
276
244
|
if (!reportBuffer) {
|
|
@@ -282,10 +250,6 @@ async function readEventsFromZip(zipPath) {
|
|
|
282
250
|
.split("\n")
|
|
283
251
|
.map((line) => JSON.parse(line));
|
|
284
252
|
}
|
|
285
|
-
/**
|
|
286
|
-
* Sets up a fixture whose config runs BOTH the built-in blob reporter and the
|
|
287
|
-
* IBR on the same invocation, so one event stream feeds both zips.
|
|
288
|
-
*/
|
|
289
253
|
async function setupParityFixture(suite) {
|
|
290
254
|
const { tempDir, cleanup } = await setupReporterFixture({
|
|
291
255
|
suite,
|
|
@@ -305,10 +269,6 @@ async function setupParityFixture(suite) {
|
|
|
305
269
|
cleanup,
|
|
306
270
|
};
|
|
307
271
|
}
|
|
308
|
-
/**
|
|
309
|
-
* Spawns `playwright test` and lets it run to completion — the clean-finish
|
|
310
|
-
* half of the matrix (the SIGINT helpers above cover interruption).
|
|
311
|
-
*/
|
|
312
272
|
async function runPlaywrightClean(ctx, opts) {
|
|
313
273
|
const args = ["test", `--workers=${opts.workers}`];
|
|
314
274
|
if (opts.shard) {
|
|
@@ -319,8 +279,6 @@ async function runPlaywrightClean(ctx, opts) {
|
|
|
319
279
|
env: {
|
|
320
280
|
...process.env,
|
|
321
281
|
LOCAL_TEST: "false",
|
|
322
|
-
// With --shard, the env vars are cleared on purpose so IBR falls back to
|
|
323
|
-
// the same config.shard the built-in blob reporter sees.
|
|
324
282
|
SHARD_INDEX: opts.shard ? undefined : "1",
|
|
325
283
|
TOTAL_SHARDS: opts.shard ? undefined : "1",
|
|
326
284
|
FORCE_COLOR: "0",
|
|
@@ -340,10 +298,6 @@ async function runPlaywrightClean(ctx, opts) {
|
|
|
340
298
|
});
|
|
341
299
|
return { stdout, stderr, exitCode };
|
|
342
300
|
}
|
|
343
|
-
/**
|
|
344
|
-
* Runs `playwright merge-reports <blobDir> --reporter json` and returns the
|
|
345
|
-
* parsed summary. Distinct output names let one temp dir hold both merges.
|
|
346
|
-
*/
|
|
347
301
|
function mergeBlobDirToSummary(cwd, blobDir, outputName) {
|
|
348
302
|
const outputPath = path_1.default.join(cwd, outputName);
|
|
349
303
|
(0, child_process_1.execFileSync)(PLAYWRIGHT_BIN, ["merge-reports", blobDir, "--reporter", "json"], {
|
|
@@ -357,11 +311,6 @@ function mergeBlobDirToSummary(cwd, blobDir, outputName) {
|
|
|
357
311
|
});
|
|
358
312
|
return JSON.parse(fs_1.default.readFileSync(outputPath, "utf8"));
|
|
359
313
|
}
|
|
360
|
-
/**
|
|
361
|
-
* A local stand-in for api-worker and the report bucket, so EmpiricalReporter
|
|
362
|
-
* runs unmodified inside a real Playwright run. Records test-case events and
|
|
363
|
-
* accepts every upload.
|
|
364
|
-
*/
|
|
365
314
|
async function startDashboardStub() {
|
|
366
315
|
const events = [];
|
|
367
316
|
const server = http_1.default.createServer((req, res) => {
|
|
@@ -379,7 +328,6 @@ async function startDashboardStub() {
|
|
|
379
328
|
res.end("{}");
|
|
380
329
|
return;
|
|
381
330
|
}
|
|
382
|
-
// Everything else is the S3 client; r2-uploader always goes multipart.
|
|
383
331
|
res.writeHead(200, { "content-type": "application/xml", etag: '"etag"' });
|
|
384
332
|
if (req.method === "POST" && req.url?.includes("?uploads")) {
|
|
385
333
|
res.end("<InitiateMultipartUploadResult><UploadId>upload</UploadId></InitiateMultipartUploadResult>");
|
|
@@ -43,11 +43,6 @@ export declare function relativeLocation(location: JsonLocation | undefined, roo
|
|
|
43
43
|
export declare function relativeAnnotationLocations(annotations: TestAnnotation[], rootDir: string): TestAnnotation[];
|
|
44
44
|
export declare function serializeTest(test: TestCase, rootDir: string): JsonTestCase;
|
|
45
45
|
export declare function serializeSuite(suite: Suite, rootDir: string): JsonSuite;
|
|
46
|
-
/**
|
|
47
|
-
* Recursively filters a serialized suite tree to only include tests
|
|
48
|
-
* whose testId is in the completedTestIds set. Removes empty parent suites.
|
|
49
|
-
* Returns null if the suite has no completed test descendants.
|
|
50
|
-
*/
|
|
51
46
|
export declare function filterSuiteByCompletedTests(suite: JsonSuite, completedTestIds: Set<string>): JsonSuite | null;
|
|
52
47
|
export declare function hasValidReport(reportLines: string[]): boolean;
|
|
53
48
|
export declare function buildUrlsJson(attachmentUrlMap: Map<string, string>): Record<string, string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ibr-utils.d.ts","sourceRoot":"","sources":["../../src/reporter/ibr-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAO3E,MAAM,MAAM,WAAW,GAAG;IACxB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC,CAAC;AAIF,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAChD,WAAW,EAAE,CAOf;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAO3E;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC1B,IAAI,EAAE,QAAQ,GACb,MAAM,CAOR;AAID,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAIF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACvD,CAAC;AAIF,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,CAAC,YAAY,GAAG,SAAS,CAAC,EAAE,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB,CAAC;AAMF,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,SAAS,CAKpB;AAID,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,MAAM,GACd,YAAY,CAAC;AAChB,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,YAAY,GAAG,SAAS,EAClC,OAAO,EAAE,MAAM,GACd,YAAY,GAAG,SAAS,CAAC;AAa5B,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,cAAc,EAAE,EAC7B,OAAO,EAAE,MAAM,GACd,cAAc,EAAE,CAKlB;AAID,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAU3E;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAoBvE;AAMD
|
|
1
|
+
{"version":3,"file":"ibr-utils.d.ts","sourceRoot":"","sources":["../../src/reporter/ibr-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -108,11 +108,6 @@ function serializeSuite(suite, rootDir) {
|
|
|
108
108
|
function isTestEntry(entry) {
|
|
109
109
|
return "testId" in entry;
|
|
110
110
|
}
|
|
111
|
-
/**
|
|
112
|
-
* Recursively filters a serialized suite tree to only include tests
|
|
113
|
-
* whose testId is in the completedTestIds set. Removes empty parent suites.
|
|
114
|
-
* Returns null if the suite has no completed test descendants.
|
|
115
|
-
*/
|
|
116
111
|
function filterSuiteByCompletedTests(suite, completedTestIds) {
|
|
117
112
|
const filteredEntries = [];
|
|
118
113
|
for (const entry of suite.entries) {
|
|
@@ -1,12 +1,4 @@
|
|
|
1
1
|
import type { FullConfig, FullResult, Reporter, Suite, TestCase, TestError, TestResult, TestStep, WorkerInfo } from "@playwright/test/reporter";
|
|
2
|
-
/**
|
|
3
|
-
* IncrementalBlobReporter
|
|
4
|
-
*
|
|
5
|
-
* This reporter builds a report.jsonl incrementally matching Playwright's blob format.
|
|
6
|
-
* The zip can be uploaded for merge at any point (e.g., on SIGTERM).
|
|
7
|
-
*
|
|
8
|
-
* Format matches Playwright's blob reporter exactly.
|
|
9
|
-
*/
|
|
10
2
|
export type AttachmentUrlMap = Map<string, string>;
|
|
11
3
|
declare class IncrementalBlobReporter implements Reporter {
|
|
12
4
|
private _currentWorkingDir;
|
|
@@ -33,12 +25,6 @@ declare class IncrementalBlobReporter implements Reporter {
|
|
|
33
25
|
private _removeSignalHandler;
|
|
34
26
|
private _buildSyntheticResult;
|
|
35
27
|
private _finalizeAndMaybeUpload;
|
|
36
|
-
/**
|
|
37
|
-
* Computes the lines to write, without touching `_reportLines`: recording
|
|
38
|
-
* continues after the SIGINT salvage, and the onEnd pass re-finalizes from
|
|
39
|
-
* the full stream — mutating here would make the second pass work from the
|
|
40
|
-
* first pass's pruned leftovers.
|
|
41
|
-
*/
|
|
42
28
|
private _buildFinalReportLines;
|
|
43
29
|
private _computeCompletedSets;
|
|
44
30
|
private _removeIncompleteTestArtifacts;
|
|
@@ -60,9 +46,6 @@ declare class IncrementalBlobReporter implements Reporter {
|
|
|
60
46
|
onStepBegin(test: TestCase, result: TestResult, step: TestStep): void;
|
|
61
47
|
onStepEnd(test: TestCase, result: TestResult, step: TestStep): void;
|
|
62
48
|
onEnd(result: FullResult): Promise<void>;
|
|
63
|
-
/**
|
|
64
|
-
* Add a single attachment URL mapping
|
|
65
|
-
*/
|
|
66
49
|
addAttachmentUrl(localPath: string, remoteUrl: string): void;
|
|
67
50
|
printsToStdio(): boolean;
|
|
68
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"incremental-blob-reporter.d.ts","sourceRoot":"","sources":["../../src/reporter/incremental-blob-reporter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AA8BnC
|
|
1
|
+
{"version":3,"file":"incremental-blob-reporter.d.ts","sourceRoot":"","sources":["../../src/reporter/incremental-blob-reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,14 +22,14 @@ class IncrementalBlobReporter {
|
|
|
22
22
|
_totalShards;
|
|
23
23
|
_reportLines = [];
|
|
24
24
|
_attachmentUrlMap = new Map();
|
|
25
|
-
_resultIdMap = new Map();
|
|
26
|
-
_stepIdMap = new Map();
|
|
27
|
-
_knownAttachmentCounts = new Map();
|
|
25
|
+
_resultIdMap = new Map();
|
|
26
|
+
_stepIdMap = new Map();
|
|
27
|
+
_knownAttachmentCounts = new Map();
|
|
28
28
|
_uploader = null;
|
|
29
29
|
_completedTestIds = new Set();
|
|
30
30
|
_completedResultIds = new Set();
|
|
31
|
-
_testRetries = new Map();
|
|
32
|
-
_testResults = new Map();
|
|
31
|
+
_testRetries = new Map();
|
|
32
|
+
_testResults = new Map();
|
|
33
33
|
_startTime = Date.now();
|
|
34
34
|
_finalizePromise = null;
|
|
35
35
|
_rootDir = process.cwd();
|
|
@@ -99,7 +99,6 @@ class IncrementalBlobReporter {
|
|
|
99
99
|
console.warn("[IncrementalBlobReporterFailure] No onBegin received, skipping upload (nothing to merge)");
|
|
100
100
|
return;
|
|
101
101
|
}
|
|
102
|
-
// Wait for pending attachment uploads FIRST so URLs are available
|
|
103
102
|
if (this._uploader) {
|
|
104
103
|
await this._uploader.waitForUploads();
|
|
105
104
|
}
|
|
@@ -127,33 +126,19 @@ class IncrementalBlobReporter {
|
|
|
127
126
|
}
|
|
128
127
|
logFinalizeComplete();
|
|
129
128
|
}
|
|
130
|
-
/**
|
|
131
|
-
* Computes the lines to write, without touching `_reportLines`: recording
|
|
132
|
-
* continues after the SIGINT salvage, and the onEnd pass re-finalizes from
|
|
133
|
-
* the full stream — mutating here would make the second pass work from the
|
|
134
|
-
* first pass's pruned leftovers.
|
|
135
|
-
*/
|
|
136
129
|
_buildFinalReportLines(result, pruneIncompleteTests) {
|
|
137
130
|
let lines = [...this._reportLines];
|
|
138
131
|
if (pruneIncompleteTests) {
|
|
139
|
-
// Determine which tests are fully complete (passed or all retries finished)
|
|
140
132
|
this._computeCompletedSets();
|
|
141
|
-
// Remove unrun tests from onProject suites
|
|
142
133
|
lines = this._patchProjectSuites(lines);
|
|
143
|
-
// Remove events (onTestBegin, onStepBegin, etc.) for incomplete tests
|
|
144
134
|
lines = this._removeIncompleteTestArtifacts(lines);
|
|
145
135
|
}
|
|
146
|
-
// The onEnd event belongs only in the written report, never in the
|
|
147
|
-
// in-memory stream — a later finalize pass appends its own.
|
|
148
136
|
lines.push(JSON.stringify((0, lifecycle_events_1.buildOnEndEvent)(result)));
|
|
149
137
|
return lines;
|
|
150
138
|
}
|
|
151
139
|
_computeCompletedSets() {
|
|
152
140
|
for (const [testId, results] of this._testResults) {
|
|
153
141
|
const maxRetries = this._testRetries.get(testId);
|
|
154
|
-
// Shutdown artifacts are not finished retries. Counting them as
|
|
155
|
-
// complete would put their results in the final zip alongside the
|
|
156
|
-
// resume shard's, duplicating tests in the merge.
|
|
157
142
|
const finished = new Map([...results].filter(([, r]) => !(0, reporter_state_1.isShutdownArtifact)(r.status, r.postSignal)));
|
|
158
143
|
if ((0, reporter_1.areRetriesComplete)(maxRetries, finished)) {
|
|
159
144
|
this._completedTestIds.add(testId);
|
|
@@ -222,13 +207,10 @@ class IncrementalBlobReporter {
|
|
|
222
207
|
}
|
|
223
208
|
async _writeZip(lines) {
|
|
224
209
|
this._ensureDirs();
|
|
225
|
-
// Write report.jsonl to the output directory
|
|
226
210
|
const jsonlContent = lines.join("\n") + "\n";
|
|
227
211
|
fs_1.default.writeFileSync(this._jsonlPath, jsonlContent, "utf8");
|
|
228
|
-
// Write _empirical_urls.json with attachment URL mappings
|
|
229
212
|
const urlsJson = (0, ibr_utils_1.buildUrlsJson)(this._attachmentUrlMap);
|
|
230
213
|
fs_1.default.writeFileSync(this._urlsJsonPath, JSON.stringify(urlsJson, null, 2), "utf8");
|
|
231
|
-
// Create zip from the staging directory
|
|
232
214
|
const zipBuffer = await (0, zip_1.createZipFromDirectory)(this._stagingDir);
|
|
233
215
|
fs_1.default.writeFileSync(this._zipPath, zipBuffer);
|
|
234
216
|
console.log(`[IncrementalBlobReporter] Zip updated: ${this._zipPath} (${lines.length} events, ${this._attachmentUrlMap.size} attachments)`);
|
|
@@ -236,9 +218,6 @@ class IncrementalBlobReporter {
|
|
|
236
218
|
onBegin(config, suite) {
|
|
237
219
|
this._ensureDirs();
|
|
238
220
|
this._rootDir = config.rootDir;
|
|
239
|
-
// The env vars win (production sets them), but a sharded run without
|
|
240
|
-
// them should still stamp the right shard into the blob metadata and
|
|
241
|
-
// the zip name instead of defaulting every shard to 1/1.
|
|
242
221
|
if (!process.env.SHARD_INDEX && config.shard) {
|
|
243
222
|
this._shardIndex = config.shard.current;
|
|
244
223
|
this._totalShards = config.shard.total;
|
|
@@ -264,8 +243,6 @@ class IncrementalBlobReporter {
|
|
|
264
243
|
resultId,
|
|
265
244
|
status: result.status,
|
|
266
245
|
expectedStatus: test.expectedStatus,
|
|
267
|
-
// The SIGINT salvage has started; this result arrived during
|
|
268
|
-
// interruption shutdown rather than the normal run.
|
|
269
246
|
postSignal: this._finalizePromise !== null,
|
|
270
247
|
});
|
|
271
248
|
}
|
|
@@ -288,10 +265,6 @@ class IncrementalBlobReporter {
|
|
|
288
265
|
}
|
|
289
266
|
async onEnd(result) {
|
|
290
267
|
this._removeSignalHandler();
|
|
291
|
-
// Second phase of an interrupted run: the SIGINT pass salvaged a snapshot
|
|
292
|
-
// within milliseconds (SIGKILL insurance); by the time Playwright calls
|
|
293
|
-
// onEnd the teardown chain has finished, so re-finalize from the full
|
|
294
|
-
// stream and overwrite the salvage blob with the post-teardown report.
|
|
295
268
|
if (this._finalizePromise) {
|
|
296
269
|
await this._finalizePromise;
|
|
297
270
|
this._finalizePromise = this._finalizeAndMaybeUpload({
|
|
@@ -314,9 +287,6 @@ class IncrementalBlobReporter {
|
|
|
314
287
|
await this._finalizePromise;
|
|
315
288
|
console.log(`[IncrementalBlobReporter] Finished with status: ${result.status}`);
|
|
316
289
|
}
|
|
317
|
-
/**
|
|
318
|
-
* Add a single attachment URL mapping
|
|
319
|
-
*/
|
|
320
290
|
addAttachmentUrl(localPath, remoteUrl) {
|
|
321
291
|
this._attachmentUrlMap.set((0, ibr_utils_1.toResourcePath)(localPath), remoteUrl);
|
|
322
292
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-events.d.ts","sourceRoot":"","sources":["../../src/reporter/lifecycle-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AAmBnC,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"lifecycle-events.d.ts","sourceRoot":"","sources":["../../src/reporter/lifecycle-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AAmBnC,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,SAAS,EAAE,CAkDb;AAGD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,KAAK,EACnB,OAAO,EAAE,MAAM,GACd,SAAS,CAgCX;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,SAAS,CAeX;AAyBD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,SAAS,EAAE,CAoBb;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,SAAS,EAAE,CA0Cb;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,GAAG,QAAQ,EACzB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,SAAS,CAgBX;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,UAAU,CAAC,EAAE,UAAU,GACtB,SAAS,CAcX;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,EACd,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAChC,OAAO,EAAE,MAAM,GACd,SAAS,CA4BX;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,EACd,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAChC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,SAAS,EAAE,CAkCb;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAW7D"}
|
|
@@ -20,7 +20,6 @@ const BLOB_REPORT_VERSION = 2;
|
|
|
20
20
|
function buildOnBeginEvents(config, suite, shardIndex, totalShards) {
|
|
21
21
|
const events = [];
|
|
22
22
|
const rootDir = config.rootDir || "";
|
|
23
|
-
// 1. onBlobReportMetadata
|
|
24
23
|
const osName = process.platform === "darwin" ? "macOS" : process.platform;
|
|
25
24
|
const osVersion = os_1.default.release();
|
|
26
25
|
events.push({
|
|
@@ -43,9 +42,6 @@ function buildOnBeginEvents(config, suite, shardIndex, totalShards) {
|
|
|
43
42
|
maxFailures: config.maxFailures,
|
|
44
43
|
metadata: config.metadata,
|
|
45
44
|
rootDir: config.rootDir,
|
|
46
|
-
// Round-trips into the merged report's FullConfig: `shard` and
|
|
47
|
-
// `failOnFlakyTests` drive reporter behaviour after the merge, and
|
|
48
|
-
// `tags` carries the config-level global tag.
|
|
49
45
|
shard: config.shard,
|
|
50
46
|
version: config.version,
|
|
51
47
|
workers: config.workers,
|
|
@@ -57,7 +53,6 @@ function buildOnBeginEvents(config, suite, shardIndex, totalShards) {
|
|
|
57
53
|
},
|
|
58
54
|
},
|
|
59
55
|
});
|
|
60
|
-
// 3. onProject for each project
|
|
61
56
|
for (const projectSuite of suite.suites) {
|
|
62
57
|
const project = config.projects.find((p) => p.name === projectSuite.title);
|
|
63
58
|
if (!project) {
|
|
@@ -65,7 +60,6 @@ function buildOnBeginEvents(config, suite, shardIndex, totalShards) {
|
|
|
65
60
|
}
|
|
66
61
|
events.push(buildOnProjectEvent(project, projectSuite, rootDir));
|
|
67
62
|
}
|
|
68
|
-
// 4. onBegin (empty params per Playwright format)
|
|
69
63
|
events.push({ method: "onBegin" });
|
|
70
64
|
return events;
|
|
71
65
|
}
|
|
@@ -261,8 +255,6 @@ function buildOnStepBeginEvent(test, result, step, resultIdMap, stepIdMap, rootD
|
|
|
261
255
|
function buildOnStepEndEvents(test, result, step, resultIdMap, stepIdMap, rootDir, stagingDir, knownAttachmentCounts) {
|
|
262
256
|
const resultId = (0, ibr_utils_1.getOrCreateId)(resultIdMap, `${test.id}-${result.retry}`);
|
|
263
257
|
const stepId = (0, ibr_utils_1.getOrCreateStepId)(stepIdMap, step);
|
|
264
|
-
// Anything the step attached has to reach the receiver before the step end
|
|
265
|
-
// that indexes into it.
|
|
266
258
|
const events = buildNewAttachmentEvents(test, result, resultId, stagingDir, knownAttachmentCounts);
|
|
267
259
|
events.push({
|
|
268
260
|
method: "onStepEnd",
|
|
@@ -272,7 +264,6 @@ function buildOnStepEndEvents(test, result, step, resultIdMap, stepIdMap, rootDi
|
|
|
272
264
|
step: {
|
|
273
265
|
id: stepId,
|
|
274
266
|
duration: step.duration,
|
|
275
|
-
// Raw pass-through, like the result errors above.
|
|
276
267
|
error: step.error,
|
|
277
268
|
// Indices into the result's attachments, matching
|
|
278
269
|
// TeleReporterEmitter._serializeStepEnd.
|
|
@@ -2,12 +2,6 @@ import type { BlobEvent } from "./harness";
|
|
|
2
2
|
export interface NormalizedAttachment {
|
|
3
3
|
name: string;
|
|
4
4
|
contentType: string;
|
|
5
|
-
/**
|
|
6
|
-
* Whether the merged report still points at real content (path or inline
|
|
7
|
-
* body). Compared only where a scenario opts in: the empirical pipeline
|
|
8
|
-
* resolves attachment bytes through _empirical_urls.json, so name+type is
|
|
9
|
-
* the baseline parity contract.
|
|
10
|
-
*/
|
|
11
5
|
hasContent: boolean;
|
|
12
6
|
}
|
|
13
7
|
export interface NormalizedResult {
|
|
@@ -46,39 +40,15 @@ export interface NormalizedReport {
|
|
|
46
40
|
stats: Record<string, unknown>;
|
|
47
41
|
}
|
|
48
42
|
export interface NormalizeOptions {
|
|
49
|
-
/** Absolute fixture dir, replaced with a stable token in messages. */
|
|
50
43
|
cwd: string;
|
|
51
|
-
/** Include attachment `hasContent` in the comparison (see above). */
|
|
52
44
|
compareAttachmentContent?: boolean;
|
|
53
45
|
}
|
|
54
46
|
export declare function normalizeJsonReport(report: Record<string, unknown>, opts: NormalizeOptions): NormalizedReport;
|
|
55
|
-
/**
|
|
56
|
-
* Per-result step signatures from a raw blob event stream, keyed by
|
|
57
|
-
* `testId:retry` (stable across both reporters — they see the same run).
|
|
58
|
-
* The merged JSON report drops steps, so step parity is checked here.
|
|
59
|
-
*/
|
|
60
47
|
export declare function stepSignatures(events: BlobEvent[]): Map<string, string[]>;
|
|
61
|
-
/**
|
|
62
|
-
* What a reporter would see for `step.attachments` DURING onStepEnd, replayed
|
|
63
|
-
* from the raw event stream the way teleReceiver does it: onAttach pushes onto
|
|
64
|
-
* `result.attachments`, and a step end carries indices into that array
|
|
65
|
-
* (TeleTestStep.attachments resolves them at access time). An attachment that
|
|
66
|
-
* only arrives at test end therefore reads as `<missing>` here.
|
|
67
|
-
*
|
|
68
|
-
* Keyed by `testId:retry`; each entry is one `title -> [names]` line per
|
|
69
|
-
* onStepEnd, in stream order.
|
|
70
|
-
*/
|
|
71
48
|
export declare function stepAttachmentsAtStepEnd(events: BlobEvent[]): Map<string, string[]>;
|
|
72
|
-
/**
|
|
73
|
-
* The onConfigure config payload plus every onProject project payload, keyed
|
|
74
|
-
* by project name. The merged report's FullConfig/FullProject is rebuilt from
|
|
75
|
-
* exactly these, and normalizeJsonReport compares only the suite/stats body —
|
|
76
|
-
* so this is where config and project serialization drift shows up.
|
|
77
|
-
*/
|
|
78
49
|
export declare function configAndProjects(events: BlobEvent[]): {
|
|
79
50
|
config: unknown;
|
|
80
51
|
projects: Record<string, unknown>;
|
|
81
52
|
};
|
|
82
|
-
/** Event method names present in `reference` but absent from `candidate`. */
|
|
83
53
|
export declare function missingEventMethods(reference: BlobEvent[], candidate: BlobEvent[]): string[];
|
|
84
54
|
//# sourceMappingURL=parity-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parity-utils.d.ts","sourceRoot":"","sources":["../../src/reporter/parity-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"parity-utils.d.ts","sourceRoot":"","sources":["../../src/reporter/parity-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAyC3C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAwED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,EAAE,gBAAgB,GACrB,gBAAgB,CAclB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA6CzE;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EAAE,GAClB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAgDvB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG;IACtD,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAYA;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,SAAS,EAAE,EACtB,SAAS,EAAE,SAAS,EAAE,GACrB,MAAM,EAAE,CASV"}
|
|
@@ -70,13 +70,8 @@ function normalizeJsonReport(report, opts) {
|
|
|
70
70
|
stats,
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
|
-
/**
|
|
74
|
-
* Per-result step signatures from a raw blob event stream, keyed by
|
|
75
|
-
* `testId:retry` (stable across both reporters — they see the same run).
|
|
76
|
-
* The merged JSON report drops steps, so step parity is checked here.
|
|
77
|
-
*/
|
|
78
73
|
function stepSignatures(events) {
|
|
79
|
-
const resultKey = new Map();
|
|
74
|
+
const resultKey = new Map();
|
|
80
75
|
for (const event of events) {
|
|
81
76
|
if (event.method !== "onTestBegin") {
|
|
82
77
|
continue;
|
|
@@ -95,8 +90,6 @@ function stepSignatures(events) {
|
|
|
95
90
|
continue;
|
|
96
91
|
}
|
|
97
92
|
const list = signatures.get(key) ?? [];
|
|
98
|
-
// The location is part of the signature: it travels relative to rootDir
|
|
99
|
-
// and the merged HTML report renders it as-is.
|
|
100
93
|
const location = params.step.location
|
|
101
94
|
? `${params.step.location.file}:${params.step.location.line}`
|
|
102
95
|
: "";
|
|
@@ -108,20 +101,10 @@ function stepSignatures(events) {
|
|
|
108
101
|
}
|
|
109
102
|
return signatures;
|
|
110
103
|
}
|
|
111
|
-
/**
|
|
112
|
-
* What a reporter would see for `step.attachments` DURING onStepEnd, replayed
|
|
113
|
-
* from the raw event stream the way teleReceiver does it: onAttach pushes onto
|
|
114
|
-
* `result.attachments`, and a step end carries indices into that array
|
|
115
|
-
* (TeleTestStep.attachments resolves them at access time). An attachment that
|
|
116
|
-
* only arrives at test end therefore reads as `<missing>` here.
|
|
117
|
-
*
|
|
118
|
-
* Keyed by `testId:retry`; each entry is one `title -> [names]` line per
|
|
119
|
-
* onStepEnd, in stream order.
|
|
120
|
-
*/
|
|
121
104
|
function stepAttachmentsAtStepEnd(events) {
|
|
122
|
-
const resultKey = new Map();
|
|
123
|
-
const attachmentNames = new Map();
|
|
124
|
-
const stepTitles = new Map();
|
|
105
|
+
const resultKey = new Map();
|
|
106
|
+
const attachmentNames = new Map();
|
|
107
|
+
const stepTitles = new Map();
|
|
125
108
|
const views = new Map();
|
|
126
109
|
for (const event of events) {
|
|
127
110
|
if (event.method === "onTestBegin") {
|
|
@@ -153,12 +136,6 @@ function stepAttachmentsAtStepEnd(events) {
|
|
|
153
136
|
}
|
|
154
137
|
return views;
|
|
155
138
|
}
|
|
156
|
-
/**
|
|
157
|
-
* The onConfigure config payload plus every onProject project payload, keyed
|
|
158
|
-
* by project name. The merged report's FullConfig/FullProject is rebuilt from
|
|
159
|
-
* exactly these, and normalizeJsonReport compares only the suite/stats body —
|
|
160
|
-
* so this is where config and project serialization drift shows up.
|
|
161
|
-
*/
|
|
162
139
|
function configAndProjects(events) {
|
|
163
140
|
let config;
|
|
164
141
|
const projects = {};
|
|
@@ -173,7 +150,6 @@ function configAndProjects(events) {
|
|
|
173
150
|
}
|
|
174
151
|
return { config, projects };
|
|
175
152
|
}
|
|
176
|
-
/** Event method names present in `reference` but absent from `candidate`. */
|
|
177
153
|
function missingEventMethods(reference, candidate) {
|
|
178
154
|
const candidateMethods = new Set(candidate.map((e) => e.method));
|
|
179
155
|
return [
|
|
@@ -1,16 +1,4 @@
|
|
|
1
1
|
export declare function isFinalized(): boolean;
|
|
2
2
|
export declare function setFinalized(): void;
|
|
3
|
-
/**
|
|
4
|
-
* Whether a result is a by-product of interruption shutdown rather than a
|
|
5
|
-
* finished attempt: an "interrupted" result is a test cut off mid-flight, and
|
|
6
|
-
* a post-signal "skipped" is a serial sibling Playwright marks off while
|
|
7
|
-
* shutting down. The resume shard re-runs both. A post-signal passed/failed is
|
|
8
|
-
* real, though: the test finished its body and only its aftermath overlapped
|
|
9
|
-
* the shutdown.
|
|
10
|
-
*
|
|
11
|
-
* Shared so the blob and the run ledger agree on which results count; when
|
|
12
|
-
* they disagree, the ledger calls a test unfinished that the blob already
|
|
13
|
-
* holds, and the merged report gets it twice.
|
|
14
|
-
*/
|
|
15
3
|
export declare function isShutdownArtifact(status: string, postSignal: boolean): boolean;
|
|
16
4
|
//# sourceMappingURL=reporter-state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter-state.d.ts","sourceRoot":"","sources":["../../src/reporter/reporter-state.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED
|
|
1
|
+
{"version":3,"file":"reporter-state.d.ts","sourceRoot":"","sources":["../../src/reporter/reporter-state.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,GAClB,OAAO,CAET"}
|
|
@@ -10,18 +10,6 @@ function isFinalized() {
|
|
|
10
10
|
function setFinalized() {
|
|
11
11
|
_finalized = true;
|
|
12
12
|
}
|
|
13
|
-
/**
|
|
14
|
-
* Whether a result is a by-product of interruption shutdown rather than a
|
|
15
|
-
* finished attempt: an "interrupted" result is a test cut off mid-flight, and
|
|
16
|
-
* a post-signal "skipped" is a serial sibling Playwright marks off while
|
|
17
|
-
* shutting down. The resume shard re-runs both. A post-signal passed/failed is
|
|
18
|
-
* real, though: the test finished its body and only its aftermath overlapped
|
|
19
|
-
* the shutdown.
|
|
20
|
-
*
|
|
21
|
-
* Shared so the blob and the run ledger agree on which results count; when
|
|
22
|
-
* they disagree, the ledger calls a test unfinished that the blob already
|
|
23
|
-
* holds, and the merged report gets it twice.
|
|
24
|
-
*/
|
|
25
13
|
function isShutdownArtifact(status, postSignal) {
|
|
26
14
|
return status === "interrupted" || (postSignal && status === "skipped");
|
|
27
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-case-sync.d.ts","sourceRoot":"","sources":["../../src/reporter/test-case-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EAErB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EACV,UAAU,EAEV,KAAK,EAEN,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"test-case-sync.d.ts","sourceRoot":"","sources":["../../src/reporter/test-case-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EAErB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EACV,UAAU,EAEV,KAAK,EAEN,MAAM,2BAA2B,CAAC;AAMnC,YAAY,EACV,uBAAuB,EACvB,6BAA6B,EAC7B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,6CAA6C,CAAC;AAoTrD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,KAAK,GACf,oBAAoB,CAyBtB"}
|
|
@@ -108,12 +108,6 @@ function collectOutermostSerialGroup(rootDir, suite, state) {
|
|
|
108
108
|
}
|
|
109
109
|
return buildDependencyGroup(rootDir, suite, state, "playwright_serial", suite.allTests());
|
|
110
110
|
}
|
|
111
|
-
/**
|
|
112
|
-
* Tests under this suite that Playwright would place in its sequential
|
|
113
|
-
* ("general") group: everything except subtrees that opt back into
|
|
114
|
-
* parallelism. Order is declaration order, which is the order the group
|
|
115
|
-
* executes in.
|
|
116
|
-
*/
|
|
117
111
|
function sequentialTests(suite) {
|
|
118
112
|
const tests = [...suite.tests];
|
|
119
113
|
for (const child of suite.suites) {
|
|
@@ -170,9 +164,6 @@ function walkSuite(rootDir, suite, state, testCases, dependencyGroups) {
|
|
|
170
164
|
}
|
|
171
165
|
}
|
|
172
166
|
}
|
|
173
|
-
// A serial group is emitted even inside a default scope: the outer default
|
|
174
|
-
// group wins for scheduling, but serial membership carries extra semantics
|
|
175
|
-
// (failure cascade, re-expansion) its consumers still need.
|
|
176
167
|
const serialGroup = collectOutermostSerialGroup(rootDir, suite, nextState);
|
|
177
168
|
if (serialGroup) {
|
|
178
169
|
dependencyGroups.push(serialGroup);
|
|
@@ -186,9 +177,6 @@ function walkSuite(rootDir, suite, state, testCases, dependencyGroups) {
|
|
|
186
177
|
dependencyGroups.push(defaultGroup);
|
|
187
178
|
nextState.sequentialAncestor = suite;
|
|
188
179
|
}
|
|
189
|
-
// fullyParallel (project suite) or an explicit `mode: "parallel"` — every
|
|
190
|
-
// descendant is independently schedulable unless a sequential suite below
|
|
191
|
-
// says otherwise.
|
|
192
180
|
if (mode === "parallel") {
|
|
193
181
|
nextState.insideParallel = true;
|
|
194
182
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../src/reporter/uploader.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,kBAAkB,EAElB,kBAAkB,EAEnB,MAAM,2BAA2B,CAAC;AAKnC,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,kBAAkB,CAAC;CACjC;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAqB;IAEzC,YAAY,MAAM,EAAE,cAAc,EASjC;IAED,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAgBhC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAUhC,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAKzE;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAEK,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,YAAY,CAAC,EAAE,kBAAkB,GAChC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgCxB;IAEK,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAef;IAEK,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../src/reporter/uploader.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,kBAAkB,EAElB,kBAAkB,EAEnB,MAAM,2BAA2B,CAAC;AAKnC,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,kBAAkB,CAAC;CACjC;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAqB;IAEzC,YAAY,MAAM,EAAE,cAAc,EASjC;IAED,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAgBhC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAUhC,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAKzE;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAEK,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,YAAY,CAAC,EAAE,kBAAkB,GAChC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgCxB;IAEK,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAef;IAEK,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAyBpC;CACF;AAID,wBAAgB,WAAW,IAAI,QAAQ,GAAG,IAAI,CAM7C;AAED,wBAAgB,cAAc,IAAI,QAAQ,GAAG,IAAI,CA6DhD"}
|