@empiricalrun/playwright-utils 0.58.3 → 0.58.5
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 +20 -0
- package/dist/generated/api-worker-openapi.d.ts +98 -88
- package/dist/generated/api-worker-openapi.d.ts.map +1 -1
- package/dist/reporter/empirical-reporter.d.ts.map +1 -1
- package/dist/reporter/empirical-reporter.js +9 -0
- package/dist/reporter/harness.d.ts +4 -0
- package/dist/reporter/harness.d.ts.map +1 -1
- package/dist/reporter/harness.js +20 -8
- package/dist/reporter/ibr-utils.d.ts +3 -0
- package/dist/reporter/ibr-utils.d.ts.map +1 -1
- package/dist/reporter/ibr-utils.js +25 -18
- package/dist/reporter/incremental-blob-reporter.d.ts +1 -0
- package/dist/reporter/incremental-blob-reporter.d.ts.map +1 -1
- package/dist/reporter/incremental-blob-reporter.js +5 -4
- package/dist/reporter/lifecycle-events.d.ts +15 -5
- package/dist/reporter/lifecycle-events.d.ts.map +1 -1
- package/dist/reporter/lifecycle-events.js +91 -64
- package/dist/reporter/parity-utils.d.ts +21 -0
- package/dist/reporter/parity-utils.d.ts.map +1 -1
- package/dist/reporter/parity-utils.js +73 -1
- package/dist/reporter/uploader.d.ts.map +1 -1
- package/dist/reporter/uploader.js +22 -1
- package/package.json +4 -4
- package/upstream-oracle/README.md +36 -7
- package/upstream-oracle/ibr-adapter.js +60 -5
- package/upstream-oracle/run.mjs +288 -47
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"empirical-reporter.d.ts","sourceRoot":"","sources":["../../src/reporter/empirical-reporter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AAuBnC,cAAM,iBAAkB,YAAW,QAAQ;IACzC,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,oBAAoB,CAG1B;IACF,OAAO,CAAC,sBAAsB,CAAuB;IACrD,OAAO,CAAC,YAAY,CAAgD;IACpE,OAAO,CAAC,iBAAiB,CAAyC;IAClE,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,kBAAkB,CAA2B;IAGrD,OAAO,CAAC,YAAY,CAAqB;IAEzC,cAEC;IAED,OAAO,CAAC,MAAM,EAAE,UAAU,QAEzB;IAED,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,6BAA6B,CA2CnC;IAEF,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"empirical-reporter.d.ts","sourceRoot":"","sources":["../../src/reporter/empirical-reporter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AAuBnC,cAAM,iBAAkB,YAAW,QAAQ;IACzC,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,oBAAoB,CAG1B;IACF,OAAO,CAAC,sBAAsB,CAAuB;IACrD,OAAO,CAAC,YAAY,CAAgD;IACpE,OAAO,CAAC,iBAAiB,CAAyC;IAClE,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,kBAAkB,CAA2B;IAGrD,OAAO,CAAC,YAAY,CAAqB;IAEzC,cAEC;IAED,OAAO,CAAC,MAAM,EAAE,UAAU,QAEzB;IAED,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,6BAA6B,CA2CnC;IAEF,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,QA+I3C;IAEK,KAAK,CAAC,MAAM,EAAE,UAAU,iBAiH7B;IAED,OAAO,CAAC,qBAAqB;YAkBf,gBAAgB;YAOhB,iBAAiB;CAqChC;eAEc,iBAAiB"}
|
|
@@ -150,6 +150,15 @@ class EmpiricalReporter {
|
|
|
150
150
|
stack: e.stack,
|
|
151
151
|
location: e.location,
|
|
152
152
|
})),
|
|
153
|
+
// Playwright seeds result.annotations with the full per-attempt
|
|
154
|
+
// set (static + suite + runtime-pushed); test.annotations is the
|
|
155
|
+
// fallback for older Playwright versions without it.
|
|
156
|
+
annotations: (result.annotations?.length
|
|
157
|
+
? result.annotations
|
|
158
|
+
: test.annotations).map((a) => ({
|
|
159
|
+
type: a.type,
|
|
160
|
+
description: a.description,
|
|
161
|
+
})),
|
|
153
162
|
},
|
|
154
163
|
projectName,
|
|
155
164
|
attachments: successfulAttachments,
|
|
@@ -122,6 +122,10 @@ export interface CleanRunResult extends RunResult {
|
|
|
122
122
|
*/
|
|
123
123
|
export declare function runPlaywrightClean(ctx: ParityTestContext, opts: {
|
|
124
124
|
workers: number;
|
|
125
|
+
shard?: {
|
|
126
|
+
current: number;
|
|
127
|
+
total: number;
|
|
128
|
+
};
|
|
125
129
|
}): Promise<CleanRunResult>;
|
|
126
130
|
/**
|
|
127
131
|
* Runs `playwright merge-reports <blobDir> --reporter json` and returns the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/reporter/harness.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErD;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACzD,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC,CAaD;
|
|
1
|
+
{"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/reporter/harness.ts"],"names":[],"mappings":"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"}
|
package/dist/reporter/harness.js
CHANGED
|
@@ -48,11 +48,17 @@ async function setupFixture(suite) {
|
|
|
48
48
|
async function setupReporterFixture({ suite, reporterPath, tempPrefix, }) {
|
|
49
49
|
const fixtureDir = path_1.default.join(TEST_DATA_DIR, suite);
|
|
50
50
|
const tempDir = await fs_1.default.promises.mkdtemp(path_1.default.join(os_1.default.tmpdir(), tempPrefix));
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
const entries = await fs_1.default.promises.readdir(fixtureDir, {
|
|
52
|
+
withFileTypes: true,
|
|
53
|
+
});
|
|
54
|
+
for (const entry of entries) {
|
|
55
|
+
const src = path_1.default.join(fixtureDir, entry.name);
|
|
56
|
+
const dest = path_1.default.join(tempDir, entry.name);
|
|
57
|
+
if (entry.isDirectory()) {
|
|
58
|
+
// Fixtures that put specs under a testDir subdir.
|
|
59
|
+
await fs_1.default.promises.cp(src, dest, { recursive: true });
|
|
60
|
+
}
|
|
61
|
+
else if (entry.name === "playwright.config.ts") {
|
|
56
62
|
const content = await fs_1.default.promises.readFile(src, "utf8");
|
|
57
63
|
await fs_1.default.promises.writeFile(dest, content.replace("__REPORTER_PATH__", reporterPath));
|
|
58
64
|
}
|
|
@@ -298,13 +304,19 @@ async function setupParityFixture(suite) {
|
|
|
298
304
|
* half of the matrix (the SIGINT helpers above cover interruption).
|
|
299
305
|
*/
|
|
300
306
|
async function runPlaywrightClean(ctx, opts) {
|
|
301
|
-
const
|
|
307
|
+
const args = ["test", `--workers=${opts.workers}`];
|
|
308
|
+
if (opts.shard) {
|
|
309
|
+
args.push(`--shard=${opts.shard.current}/${opts.shard.total}`);
|
|
310
|
+
}
|
|
311
|
+
const child = (0, child_process_1.spawn)(PLAYWRIGHT_BIN, args, {
|
|
302
312
|
cwd: ctx.tempDir,
|
|
303
313
|
env: {
|
|
304
314
|
...process.env,
|
|
305
315
|
LOCAL_TEST: "false",
|
|
306
|
-
|
|
307
|
-
|
|
316
|
+
// With --shard, the env vars are cleared on purpose so IBR falls back to
|
|
317
|
+
// the same config.shard the built-in blob reporter sees.
|
|
318
|
+
SHARD_INDEX: opts.shard ? undefined : "1",
|
|
319
|
+
TOTAL_SHARDS: opts.shard ? undefined : "1",
|
|
308
320
|
FORCE_COLOR: "0",
|
|
309
321
|
},
|
|
310
322
|
stdio: ["pipe", "pipe", "pipe"],
|
|
@@ -37,6 +37,9 @@ export type TestAnnotation = {
|
|
|
37
37
|
description?: string;
|
|
38
38
|
location?: JsonLocation;
|
|
39
39
|
};
|
|
40
|
+
export declare function relativeToRootDir(absolutePath: string | undefined, rootDir: string): string | undefined;
|
|
41
|
+
export declare function relativeLocation(location: JsonLocation, rootDir: string): JsonLocation;
|
|
42
|
+
export declare function relativeLocation(location: JsonLocation | undefined, rootDir: string): JsonLocation | undefined;
|
|
40
43
|
export declare function relativeAnnotationLocations(annotations: TestAnnotation[], rootDir: string): TestAnnotation[];
|
|
41
44
|
export declare function serializeTest(test: TestCase, rootDir: string): JsonTestCase;
|
|
42
45
|
export declare function serializeSuite(suite: Suite, rootDir: string): JsonSuite;
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"ibr-utils.d.ts","sourceRoot":"","sources":["../../src/reporter/ibr-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,8 @@ exports.serializeRegexPatterns = serializeRegexPatterns;
|
|
|
7
7
|
exports.generateId = generateId;
|
|
8
8
|
exports.getOrCreateId = getOrCreateId;
|
|
9
9
|
exports.getOrCreateStepId = getOrCreateStepId;
|
|
10
|
+
exports.relativeToRootDir = relativeToRootDir;
|
|
11
|
+
exports.relativeLocation = relativeLocation;
|
|
10
12
|
exports.relativeAnnotationLocations = relativeAnnotationLocations;
|
|
11
13
|
exports.serializeTest = serializeTest;
|
|
12
14
|
exports.serializeSuite = serializeSuite;
|
|
@@ -46,17 +48,28 @@ function getOrCreateStepId(map, step) {
|
|
|
46
48
|
}
|
|
47
49
|
return id;
|
|
48
50
|
}
|
|
51
|
+
// Mirrors _relativePath from Playwright's TeleReporterEmitter: every path in
|
|
52
|
+
// the blob travels relative to config.rootDir (NOT the cwd), because
|
|
53
|
+
// teleReceiver._absolutePath re-joins it onto rootDir on merge.
|
|
54
|
+
// See: packages/playwright/src/reporters/teleEmitter.ts
|
|
55
|
+
function relativeToRootDir(absolutePath, rootDir) {
|
|
56
|
+
if (!absolutePath) {
|
|
57
|
+
return absolutePath;
|
|
58
|
+
}
|
|
59
|
+
return path_1.default.relative(rootDir, absolutePath);
|
|
60
|
+
}
|
|
61
|
+
function relativeLocation(location, rootDir) {
|
|
62
|
+
if (!location) {
|
|
63
|
+
return location;
|
|
64
|
+
}
|
|
65
|
+
return { ...location, file: path_1.default.relative(rootDir, location.file) };
|
|
66
|
+
}
|
|
49
67
|
// Mirrors _relativeAnnotationLocations from Playwright's TeleReporterEmitter
|
|
50
68
|
// See: packages/playwright/src/reporters/teleEmitter.ts
|
|
51
69
|
function relativeAnnotationLocations(annotations, rootDir) {
|
|
52
70
|
return annotations.map((annotation) => ({
|
|
53
71
|
...annotation,
|
|
54
|
-
location: annotation.location
|
|
55
|
-
? {
|
|
56
|
-
...annotation.location,
|
|
57
|
-
file: path_1.default.relative(rootDir, annotation.location.file),
|
|
58
|
-
}
|
|
59
|
-
: undefined,
|
|
72
|
+
location: relativeLocation(annotation.location, rootDir),
|
|
60
73
|
}));
|
|
61
74
|
}
|
|
62
75
|
// Mirrors _serializeTest from Playwright's TeleReporterEmitter
|
|
@@ -65,11 +78,7 @@ function serializeTest(test, rootDir) {
|
|
|
65
78
|
return {
|
|
66
79
|
testId: test.id,
|
|
67
80
|
title: test.title,
|
|
68
|
-
location:
|
|
69
|
-
file: path_1.default.relative(rootDir, test.location.file),
|
|
70
|
-
line: test.location.line,
|
|
71
|
-
column: test.location.column,
|
|
72
|
-
},
|
|
81
|
+
location: relativeLocation(test.location, rootDir),
|
|
73
82
|
retries: test.retries,
|
|
74
83
|
tags: test.tags,
|
|
75
84
|
repeatEachIndex: test.repeatEachIndex,
|
|
@@ -88,13 +97,11 @@ function serializeSuite(suite, rootDir) {
|
|
|
88
97
|
}
|
|
89
98
|
return {
|
|
90
99
|
title: suite.title,
|
|
91
|
-
location: suite.location
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
: { file: "", line: 0, column: 0 },
|
|
100
|
+
location: relativeLocation(suite.location, rootDir) ?? {
|
|
101
|
+
file: "",
|
|
102
|
+
line: 0,
|
|
103
|
+
column: 0,
|
|
104
|
+
},
|
|
98
105
|
entries,
|
|
99
106
|
};
|
|
100
107
|
}
|
|
@@ -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;AA0BnC;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AASnD,cAAM,uBAAwB,YAAW,QAAQ;IAC/C,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,WAAW,CAIjB;IACF,OAAO,CAAC,UAAU,CAGhB;IACF,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,mBAAmB,CAA0B;IACrD,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,YAAY,CAAsD;IAC1E,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAyB;IAEzC,cAWC;IAED,OAAO,CAAC,cAAc,CAA6B;IAEnD,OAAO,CAAC,mBAAmB;IA+B3B,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,qBAAqB;YASf,uBAAuB;IAkFrC;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,qBAAqB;IA0B7B,OAAO,CAAC,8BAA8B;IAWtC,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,KAAK,QAAQ,GAKnB;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,aAAa;YAUP,SAAS;IAwBvB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"incremental-blob-reporter.d.ts","sourceRoot":"","sources":["../../src/reporter/incremental-blob-reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,7 @@ class IncrementalBlobReporter {
|
|
|
24
24
|
_attachmentUrlMap = new Map();
|
|
25
25
|
_resultIdMap = new Map(); // testId+retry -> resultId
|
|
26
26
|
_stepIdMap = new Map(); // step -> stepId
|
|
27
|
+
_knownAttachmentCounts = new Map(); // resultId -> attachments already sent
|
|
27
28
|
_uploader = null;
|
|
28
29
|
_completedTestIds = new Set();
|
|
29
30
|
_completedResultIds = new Set();
|
|
@@ -247,14 +248,14 @@ class IncrementalBlobReporter {
|
|
|
247
248
|
this._shardIndex = config.shard.current;
|
|
248
249
|
this._totalShards = config.shard.total;
|
|
249
250
|
}
|
|
250
|
-
this._appendEvents((0, lifecycle_events_1.buildOnBeginEvents)(config, suite, this.
|
|
251
|
+
this._appendEvents((0, lifecycle_events_1.buildOnBeginEvents)(config, suite, this._shardIndex, this._totalShards));
|
|
251
252
|
console.log(`[IncrementalBlobReporter] Started with ${suite.allTests().length} tests`);
|
|
252
253
|
}
|
|
253
254
|
onTestBegin(test, result) {
|
|
254
255
|
this._appendEvent((0, lifecycle_events_1.buildOnTestBeginEvent)(test, result, this._resultIdMap));
|
|
255
256
|
}
|
|
256
257
|
onTestEnd(test, result) {
|
|
257
|
-
const events = (0, lifecycle_events_1.buildOnTestEndEvents)(test, result, this._resultIdMap, this._stagingDir, this._rootDir);
|
|
258
|
+
const events = (0, lifecycle_events_1.buildOnTestEndEvents)(test, result, this._resultIdMap, this._stagingDir, this._rootDir, this._knownAttachmentCounts);
|
|
258
259
|
if (this._appendEvents(events)) {
|
|
259
260
|
if (!this._testRetries.has(test.id)) {
|
|
260
261
|
this._testRetries.set(test.id, test.retries);
|
|
@@ -285,10 +286,10 @@ class IncrementalBlobReporter {
|
|
|
285
286
|
this._appendEvent((0, lifecycle_events_1.buildOnErrorEvent)(error, workerInfo));
|
|
286
287
|
}
|
|
287
288
|
onStepBegin(test, result, step) {
|
|
288
|
-
this._appendEvent((0, lifecycle_events_1.buildOnStepBeginEvent)(test, result, step, this._resultIdMap, this._stepIdMap));
|
|
289
|
+
this._appendEvent((0, lifecycle_events_1.buildOnStepBeginEvent)(test, result, step, this._resultIdMap, this._stepIdMap, this._rootDir));
|
|
289
290
|
}
|
|
290
291
|
onStepEnd(test, result, step) {
|
|
291
|
-
this.
|
|
292
|
+
this._appendEvents((0, lifecycle_events_1.buildOnStepEndEvents)(test, result, step, this._resultIdMap, this._stepIdMap, this._rootDir, this._stagingDir, this._knownAttachmentCounts));
|
|
292
293
|
}
|
|
293
294
|
async onEnd(result) {
|
|
294
295
|
this._removeSignalHandler();
|
|
@@ -3,13 +3,23 @@ export type JsonEvent = {
|
|
|
3
3
|
method: string;
|
|
4
4
|
params?: object;
|
|
5
5
|
};
|
|
6
|
-
export declare function buildOnBeginEvents(config: FullConfig, suite: Suite,
|
|
7
|
-
export declare function buildOnProjectEvent(
|
|
6
|
+
export declare function buildOnBeginEvents(config: FullConfig, suite: Suite, shardIndex: number, totalShards: number): JsonEvent[];
|
|
7
|
+
export declare function buildOnProjectEvent(project: FullProject, projectSuite: Suite, rootDir: string): JsonEvent;
|
|
8
8
|
export declare function buildOnTestBeginEvent(test: TestCase, result: TestResult, resultIdMap: Map<string, string>): JsonEvent;
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Mirrors TeleReporterEmitter._sendNewAttachments: whatever was appended to
|
|
11
|
+
* result.attachments since the last call for this result travels as one
|
|
12
|
+
* onAttach, emitted BEFORE the step or test end event that references it.
|
|
13
|
+
*
|
|
14
|
+
* Consumers read step.attachments as indices into result.attachments
|
|
15
|
+
* (TeleTestStep.attachments), resolved at access time — so an attachment that
|
|
16
|
+
* only arrives at test end reads as `undefined` from inside onStepEnd.
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildNewAttachmentEvents(test: TestCase, result: TestResult, resultId: string, stagingDir: string, knownAttachmentCounts: Map<string, number>): JsonEvent[];
|
|
19
|
+
export declare function buildOnTestEndEvents(test: TestCase, result: TestResult, resultIdMap: Map<string, string>, stagingDir: string, rootDir: string, knownAttachmentCounts: Map<string, number>): JsonEvent[];
|
|
10
20
|
export declare function buildOnStdIOEvent(type: "stdout" | "stderr", chunk: string | Buffer, test: TestCase | undefined, result: TestResult | undefined, resultIdMap: Map<string, string>): JsonEvent;
|
|
11
21
|
export declare function buildOnErrorEvent(error: TestError, workerInfo?: WorkerInfo): JsonEvent;
|
|
12
|
-
export declare function buildOnStepBeginEvent(test: TestCase, result: TestResult, step: TestStep, resultIdMap: Map<string, string>, stepIdMap: Map<TestStep, string
|
|
13
|
-
export declare function
|
|
22
|
+
export declare function buildOnStepBeginEvent(test: TestCase, result: TestResult, step: TestStep, resultIdMap: Map<string, string>, stepIdMap: Map<TestStep, string>, rootDir: string): JsonEvent;
|
|
23
|
+
export declare function buildOnStepEndEvents(test: TestCase, result: TestResult, step: TestStep, resultIdMap: Map<string, string>, stepIdMap: Map<TestStep, string>, rootDir: string, stagingDir: string, knownAttachmentCounts: Map<string, number>): JsonEvent[];
|
|
14
24
|
export declare function buildOnEndEvent(result: FullResult): JsonEvent;
|
|
15
25
|
//# sourceMappingURL=lifecycle-events.d.ts.map
|
|
@@ -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;
|
|
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,CAwDb;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,CAwBX;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,CAqCb;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAW7D"}
|
|
@@ -6,18 +6,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.buildOnBeginEvents = buildOnBeginEvents;
|
|
7
7
|
exports.buildOnProjectEvent = buildOnProjectEvent;
|
|
8
8
|
exports.buildOnTestBeginEvent = buildOnTestBeginEvent;
|
|
9
|
+
exports.buildNewAttachmentEvents = buildNewAttachmentEvents;
|
|
9
10
|
exports.buildOnTestEndEvents = buildOnTestEndEvents;
|
|
10
11
|
exports.buildOnStdIOEvent = buildOnStdIOEvent;
|
|
11
12
|
exports.buildOnErrorEvent = buildOnErrorEvent;
|
|
12
13
|
exports.buildOnStepBeginEvent = buildOnStepBeginEvent;
|
|
13
|
-
exports.
|
|
14
|
+
exports.buildOnStepEndEvents = buildOnStepEndEvents;
|
|
14
15
|
exports.buildOnEndEvent = buildOnEndEvent;
|
|
15
16
|
const os_1 = __importDefault(require("os"));
|
|
16
17
|
const path_1 = __importDefault(require("path"));
|
|
17
18
|
const ibr_utils_1 = require("./ibr-utils");
|
|
18
19
|
const BLOB_REPORT_VERSION = 2;
|
|
19
|
-
function buildOnBeginEvents(config, suite,
|
|
20
|
+
function buildOnBeginEvents(config, suite, shardIndex, totalShards) {
|
|
20
21
|
const events = [];
|
|
22
|
+
const rootDir = config.rootDir || "";
|
|
21
23
|
// 1. onBlobReportMetadata
|
|
22
24
|
const osName = process.platform === "darwin" ? "macOS" : process.platform;
|
|
23
25
|
const osVersion = os_1.default.release();
|
|
@@ -30,24 +32,28 @@ function buildOnBeginEvents(config, suite, currentWorkingDir, shardIndex, totalS
|
|
|
30
32
|
pathSeparator: path_1.default.sep,
|
|
31
33
|
},
|
|
32
34
|
});
|
|
33
|
-
// 2. onConfigure
|
|
35
|
+
// 2. onConfigure — field-for-field mirror of
|
|
36
|
+
// TeleReporterEmitter._serializeConfig.
|
|
34
37
|
events.push({
|
|
35
38
|
method: "onConfigure",
|
|
36
39
|
params: {
|
|
37
40
|
config: {
|
|
38
|
-
configFile: config.configFile
|
|
39
|
-
? path_1.default.relative(currentWorkingDir, config.configFile)
|
|
40
|
-
: null,
|
|
41
|
+
configFile: (0, ibr_utils_1.relativeToRootDir)(config.configFile, rootDir),
|
|
41
42
|
globalTimeout: config.globalTimeout,
|
|
42
43
|
maxFailures: config.maxFailures,
|
|
43
44
|
metadata: config.metadata,
|
|
44
45
|
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
|
+
shard: config.shard,
|
|
45
50
|
version: config.version,
|
|
46
51
|
workers: config.workers,
|
|
47
52
|
globalSetup: config.globalSetup,
|
|
48
53
|
globalTeardown: config.globalTeardown,
|
|
49
|
-
tags:
|
|
54
|
+
tags: config.tags,
|
|
50
55
|
webServer: config.webServer,
|
|
56
|
+
failOnFlakyTests: config.failOnFlakyTests,
|
|
51
57
|
},
|
|
52
58
|
},
|
|
53
59
|
});
|
|
@@ -57,14 +63,14 @@ function buildOnBeginEvents(config, suite, currentWorkingDir, shardIndex, totalS
|
|
|
57
63
|
if (!project) {
|
|
58
64
|
continue;
|
|
59
65
|
}
|
|
60
|
-
events.push(buildOnProjectEvent(
|
|
66
|
+
events.push(buildOnProjectEvent(project, projectSuite, rootDir));
|
|
61
67
|
}
|
|
62
68
|
// 4. onBegin (empty params per Playwright format)
|
|
63
69
|
events.push({ method: "onBegin" });
|
|
64
70
|
return events;
|
|
65
71
|
}
|
|
66
|
-
|
|
67
|
-
|
|
72
|
+
// Field-for-field mirror of TeleReporterEmitter._serializeProject.
|
|
73
|
+
function buildOnProjectEvent(project, projectSuite, rootDir) {
|
|
68
74
|
const suites = [];
|
|
69
75
|
for (const fileSuite of projectSuite.suites) {
|
|
70
76
|
suites.push((0, ibr_utils_1.serializeSuite)(fileSuite, rootDir));
|
|
@@ -75,21 +81,23 @@ function buildOnProjectEvent(config, project, projectSuite, currentWorkingDir) {
|
|
|
75
81
|
project: {
|
|
76
82
|
metadata: project.metadata,
|
|
77
83
|
name: project.name,
|
|
78
|
-
outputDir:
|
|
84
|
+
outputDir: (0, ibr_utils_1.relativeToRootDir)(project.outputDir, rootDir),
|
|
79
85
|
repeatEach: project.repeatEach,
|
|
80
86
|
retries: project.retries,
|
|
81
|
-
testDir: project.testDir,
|
|
87
|
+
testDir: (0, ibr_utils_1.relativeToRootDir)(project.testDir, rootDir),
|
|
82
88
|
testIgnore: (0, ibr_utils_1.serializeRegexPatterns)(project.testIgnore),
|
|
83
89
|
testMatch: (0, ibr_utils_1.serializeRegexPatterns)(project.testMatch),
|
|
84
90
|
timeout: project.timeout,
|
|
85
91
|
suites,
|
|
86
92
|
grep: (0, ibr_utils_1.serializeRegexPatterns)(project.grep),
|
|
87
|
-
grepInvert: project.grepInvert
|
|
88
|
-
? (0, ibr_utils_1.serializeRegexPatterns)(project.grepInvert)
|
|
89
|
-
: [],
|
|
93
|
+
grepInvert: (0, ibr_utils_1.serializeRegexPatterns)(project.grepInvert || []),
|
|
90
94
|
dependencies: project.dependencies,
|
|
91
|
-
snapshotDir: project.snapshotDir,
|
|
92
|
-
|
|
95
|
+
snapshotDir: (0, ibr_utils_1.relativeToRootDir)(project.snapshotDir, rootDir),
|
|
96
|
+
teardown: project.teardown,
|
|
97
|
+
ignoreSnapshots: project.ignoreSnapshots ? true : undefined,
|
|
98
|
+
// Only testIdAttribute crosses the wire: the rest of `use` holds
|
|
99
|
+
// fixture options that need not be JSON-serializable.
|
|
100
|
+
use: { testIdAttribute: project.use.testIdAttribute },
|
|
93
101
|
},
|
|
94
102
|
},
|
|
95
103
|
};
|
|
@@ -110,39 +118,56 @@ function buildOnTestBeginEvent(test, result, resultIdMap) {
|
|
|
110
118
|
},
|
|
111
119
|
};
|
|
112
120
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
121
|
+
// Mirrors TeleReporterEmitter._serializeAttachments.
|
|
122
|
+
function serializeAttachment(attachment, resultId, stagingDir) {
|
|
123
|
+
const embeddedPath = (0, ibr_utils_1.embedAttachment)(attachment.path, resultId, stagingDir);
|
|
124
|
+
let attachmentPath;
|
|
125
|
+
if (embeddedPath) {
|
|
126
|
+
attachmentPath = embeddedPath;
|
|
127
|
+
}
|
|
128
|
+
else if (attachment.path) {
|
|
129
|
+
attachmentPath = (0, ibr_utils_1.toResourcePath)(attachment.path);
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
name: attachment.name,
|
|
133
|
+
contentType: attachment.contentType,
|
|
134
|
+
path: attachmentPath,
|
|
135
|
+
// Body-based attachments travel inline, mirroring
|
|
136
|
+
// TeleReporterEmitter._serializeAttachments.
|
|
137
|
+
base64: attachment.body ? attachment.body.toString("base64") : undefined,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Mirrors TeleReporterEmitter._sendNewAttachments: whatever was appended to
|
|
142
|
+
* result.attachments since the last call for this result travels as one
|
|
143
|
+
* onAttach, emitted BEFORE the step or test end event that references it.
|
|
144
|
+
*
|
|
145
|
+
* Consumers read step.attachments as indices into result.attachments
|
|
146
|
+
* (TeleTestStep.attachments), resolved at access time — so an attachment that
|
|
147
|
+
* only arrives at test end reads as `undefined` from inside onStepEnd.
|
|
148
|
+
*/
|
|
149
|
+
function buildNewAttachmentEvents(test, result, resultId, stagingDir, knownAttachmentCounts) {
|
|
150
|
+
const known = knownAttachmentCounts.get(resultId) ?? 0;
|
|
151
|
+
if (result.attachments.length <= known) {
|
|
152
|
+
return [];
|
|
153
|
+
}
|
|
154
|
+
knownAttachmentCounts.set(resultId, result.attachments.length);
|
|
155
|
+
return [
|
|
156
|
+
{
|
|
127
157
|
method: "onAttach",
|
|
128
158
|
params: {
|
|
129
159
|
testId: test.id,
|
|
130
160
|
resultId,
|
|
131
|
-
attachments:
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
contentType: attachment.contentType,
|
|
135
|
-
path: attachmentPath,
|
|
136
|
-
// Body-based attachments travel inline, mirroring
|
|
137
|
-
// TeleReporterEmitter._serializeAttachments.
|
|
138
|
-
base64: attachment.body
|
|
139
|
-
? attachment.body.toString("base64")
|
|
140
|
-
: undefined,
|
|
141
|
-
},
|
|
142
|
-
],
|
|
161
|
+
attachments: result.attachments
|
|
162
|
+
.slice(known)
|
|
163
|
+
.map((attachment) => serializeAttachment(attachment, resultId, stagingDir)),
|
|
143
164
|
},
|
|
144
|
-
}
|
|
145
|
-
|
|
165
|
+
},
|
|
166
|
+
];
|
|
167
|
+
}
|
|
168
|
+
function buildOnTestEndEvents(test, result, resultIdMap, stagingDir, rootDir, knownAttachmentCounts) {
|
|
169
|
+
const resultId = (0, ibr_utils_1.getOrCreateId)(resultIdMap, `${test.id}-${result.retry}`);
|
|
170
|
+
const events = buildNewAttachmentEvents(test, result, resultId, stagingDir, knownAttachmentCounts);
|
|
146
171
|
events.push({
|
|
147
172
|
method: "onTestEnd",
|
|
148
173
|
params: {
|
|
@@ -156,12 +181,11 @@ function buildOnTestEndEvents(test, result, resultIdMap, stagingDir, rootDir) {
|
|
|
156
181
|
id: resultId,
|
|
157
182
|
duration: result.duration,
|
|
158
183
|
status: result.status,
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
})),
|
|
184
|
+
// Raw pass-through, mirroring TeleReporterEmitter._serializeResultEnd:
|
|
185
|
+
// TestError carries more than {message, stack, location, snippet} —
|
|
186
|
+
// `value` for non-Error throws, `cause` chains, AggregateError
|
|
187
|
+
// sub-errors — and subsetting drops them from the merged report.
|
|
188
|
+
errors: result.errors,
|
|
165
189
|
// Blob v2 carries annotations on the result; the merge reads them
|
|
166
190
|
// from here (result-level), not from the test payload above.
|
|
167
191
|
annotations: result.annotations?.length
|
|
@@ -170,6 +194,9 @@ function buildOnTestEndEvents(test, result, resultIdMap, stagingDir, rootDir) {
|
|
|
170
194
|
},
|
|
171
195
|
},
|
|
172
196
|
});
|
|
197
|
+
// Mirrors the emitter, which drops the per-result counters once the result
|
|
198
|
+
// is closed — no further attachments can arrive for it.
|
|
199
|
+
knownAttachmentCounts.delete(resultId);
|
|
173
200
|
return events;
|
|
174
201
|
}
|
|
175
202
|
function buildOnStdIOEvent(type, chunk, test, result, resultIdMap) {
|
|
@@ -203,7 +230,7 @@ function buildOnErrorEvent(error, workerInfo) {
|
|
|
203
230
|
},
|
|
204
231
|
};
|
|
205
232
|
}
|
|
206
|
-
function buildOnStepBeginEvent(test, result, step, resultIdMap, stepIdMap) {
|
|
233
|
+
function buildOnStepBeginEvent(test, result, step, resultIdMap, stepIdMap, rootDir) {
|
|
207
234
|
const resultId = (0, ibr_utils_1.getOrCreateId)(resultIdMap, `${test.id}-${result.retry}`);
|
|
208
235
|
const stepId = (0, ibr_utils_1.getOrCreateStepId)(stepIdMap, step);
|
|
209
236
|
const parentStepId = step.parent
|
|
@@ -220,15 +247,20 @@ function buildOnStepBeginEvent(test, result, step, resultIdMap, stepIdMap) {
|
|
|
220
247
|
title: step.title,
|
|
221
248
|
category: step.category,
|
|
222
249
|
startTime: step.startTime.getTime(),
|
|
223
|
-
location
|
|
250
|
+
// Relative to rootDir like every other location in the blob; the
|
|
251
|
+
// merged HTML report renders this path as-is.
|
|
252
|
+
location: (0, ibr_utils_1.relativeLocation)(step.location, rootDir),
|
|
224
253
|
},
|
|
225
254
|
},
|
|
226
255
|
};
|
|
227
256
|
}
|
|
228
|
-
function
|
|
257
|
+
function buildOnStepEndEvents(test, result, step, resultIdMap, stepIdMap, rootDir, stagingDir, knownAttachmentCounts) {
|
|
229
258
|
const resultId = (0, ibr_utils_1.getOrCreateId)(resultIdMap, `${test.id}-${result.retry}`);
|
|
230
259
|
const stepId = (0, ibr_utils_1.getOrCreateStepId)(stepIdMap, step);
|
|
231
|
-
|
|
260
|
+
// Anything the step attached has to reach the receiver before the step end
|
|
261
|
+
// that indexes into it.
|
|
262
|
+
const events = buildNewAttachmentEvents(test, result, resultId, stagingDir, knownAttachmentCounts);
|
|
263
|
+
events.push({
|
|
232
264
|
method: "onStepEnd",
|
|
233
265
|
params: {
|
|
234
266
|
testId: test.id,
|
|
@@ -236,14 +268,8 @@ function buildOnStepEndEvent(test, result, step, resultIdMap, stepIdMap, rootDir
|
|
|
236
268
|
step: {
|
|
237
269
|
id: stepId,
|
|
238
270
|
duration: step.duration,
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
message: step.error.message,
|
|
242
|
-
stack: step.error.stack,
|
|
243
|
-
location: step.error.location,
|
|
244
|
-
snippet: step.error.snippet,
|
|
245
|
-
}
|
|
246
|
-
: undefined,
|
|
271
|
+
// Raw pass-through, like the result errors above.
|
|
272
|
+
error: step.error,
|
|
247
273
|
// Indices into the result's attachments, matching
|
|
248
274
|
// TeleReporterEmitter._serializeStepEnd.
|
|
249
275
|
attachments: step.attachments.length
|
|
@@ -254,7 +280,8 @@ function buildOnStepEndEvent(test, result, step, resultIdMap, stepIdMap, rootDir
|
|
|
254
280
|
: undefined,
|
|
255
281
|
},
|
|
256
282
|
},
|
|
257
|
-
};
|
|
283
|
+
});
|
|
284
|
+
return events;
|
|
258
285
|
}
|
|
259
286
|
function buildOnEndEvent(result) {
|
|
260
287
|
return {
|
|
@@ -58,6 +58,27 @@ export declare function normalizeJsonReport(report: Record<string, unknown>, opt
|
|
|
58
58
|
* The merged JSON report drops steps, so step parity is checked here.
|
|
59
59
|
*/
|
|
60
60
|
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
|
+
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
|
+
export declare function configAndProjects(events: BlobEvent[]): {
|
|
79
|
+
config: unknown;
|
|
80
|
+
projects: Record<string, unknown>;
|
|
81
|
+
};
|
|
61
82
|
/** Event method names present in `reference` but absent from `candidate`. */
|
|
62
83
|
export declare function missingEventMethods(reference: BlobEvent[], candidate: BlobEvent[]): string[];
|
|
63
84
|
//# 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;AAiD3C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,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,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,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;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,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;AAiD3C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,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,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,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;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAwCzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EAAE,GAClB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAgDvB;AAED;;;;;GAKG;AACH,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,6EAA6E;AAC7E,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,SAAS,EAAE,EACtB,SAAS,EAAE,SAAS,EAAE,GACrB,MAAM,EAAE,CASV"}
|