@rehearsal-labs/retest 0.1.0 → 0.2.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/README.md +6 -0
- package/dist/agent/session.d.ts +21 -2
- package/dist/agent/session.d.ts.map +1 -1
- package/dist/agent/session.js +73 -11
- package/dist/api/app-page.d.ts +39 -3
- package/dist/api/app-page.d.ts.map +1 -1
- package/dist/api/app-page.js +108 -0
- package/dist/api/dialog.d.ts +38 -0
- package/dist/api/dialog.d.ts.map +1 -0
- package/dist/api/dialog.js +78 -0
- package/dist/api/drag.d.ts +32 -0
- package/dist/api/drag.d.ts.map +1 -0
- package/dist/api/drag.js +26 -0
- package/dist/api/files.d.ts +49 -0
- package/dist/api/files.d.ts.map +1 -0
- package/dist/api/files.js +168 -0
- package/dist/api/inbox.d.ts +97 -0
- package/dist/api/inbox.d.ts.map +1 -0
- package/dist/api/inbox.js +191 -0
- package/dist/api/locator-recipes.d.ts +1 -1
- package/dist/api/locator-recipes.d.ts.map +1 -1
- package/dist/api/locator-recipes.js +4 -3
- package/dist/api/page.d.ts +214 -4
- package/dist/api/page.d.ts.map +1 -1
- package/dist/api/route.d.ts +21 -0
- package/dist/api/route.d.ts.map +1 -0
- package/dist/api/route.js +99 -0
- package/dist/api/test-run.d.ts +127 -1
- package/dist/api/test-run.d.ts.map +1 -1
- package/dist/api/test-run.js +293 -0
- package/dist/assertions/expect.d.ts +91 -2
- package/dist/assertions/expect.d.ts.map +1 -1
- package/dist/assertions/expect.js +98 -0
- package/dist/assertions/look-until.d.ts +5 -0
- package/dist/assertions/look-until.d.ts.map +1 -1
- package/dist/assertions/look-until.js +1 -1
- package/dist/assertions/poll-layout.d.ts +24 -0
- package/dist/assertions/poll-layout.d.ts.map +1 -0
- package/dist/assertions/poll-layout.js +63 -0
- package/dist/assertions/screenshot.d.ts +36 -0
- package/dist/assertions/screenshot.d.ts.map +1 -0
- package/dist/assertions/screenshot.js +125 -0
- package/dist/browser/accessibility.d.ts.map +1 -1
- package/dist/browser/accessibility.js +22 -1
- package/dist/browser/actionability.d.ts +9 -6
- package/dist/browser/actionability.d.ts.map +1 -1
- package/dist/browser/actionability.js +17 -8
- package/dist/browser/browser.d.ts.map +1 -1
- package/dist/browser/browser.js +15 -4
- package/dist/browser/cdp/connection.d.ts +6 -0
- package/dist/browser/cdp/connection.d.ts.map +1 -1
- package/dist/browser/cdp/connection.js +8 -0
- package/dist/browser/checked-state.d.ts +2 -2
- package/dist/browser/checked-state.d.ts.map +1 -1
- package/dist/browser/chromium-process.d.ts +9 -2
- package/dist/browser/chromium-process.d.ts.map +1 -1
- package/dist/browser/chromium-process.js +17 -4
- package/dist/browser/contract.d.ts +119 -5
- package/dist/browser/contract.d.ts.map +1 -1
- package/dist/browser/dialogs.d.ts +157 -0
- package/dist/browser/dialogs.d.ts.map +1 -0
- package/dist/browser/dialogs.js +271 -0
- package/dist/browser/downloads.d.ts +71 -0
- package/dist/browser/downloads.d.ts.map +1 -0
- package/dist/browser/downloads.js +253 -0
- package/dist/browser/drag.d.ts +50 -0
- package/dist/browser/drag.d.ts.map +1 -0
- package/dist/browser/drag.js +584 -0
- package/dist/browser/electron-window-watch.d.ts +32 -0
- package/dist/browser/electron-window-watch.d.ts.map +1 -0
- package/dist/browser/electron-window-watch.js +93 -0
- package/dist/browser/electron.d.ts +13 -2
- package/dist/browser/electron.d.ts.map +1 -1
- package/dist/browser/electron.js +53 -8
- package/dist/browser/element-queries.d.ts +51 -15
- package/dist/browser/element-queries.d.ts.map +1 -1
- package/dist/browser/element-queries.js +92 -13
- package/dist/browser/emulation.d.ts.map +1 -1
- package/dist/browser/emulation.js +7 -5
- package/dist/browser/file-chooser.d.ts +75 -0
- package/dist/browser/file-chooser.d.ts.map +1 -0
- package/dist/browser/file-chooser.js +449 -0
- package/dist/browser/firefox/input.d.ts +5 -0
- package/dist/browser/firefox/input.d.ts.map +1 -1
- package/dist/browser/firefox/input.js +6 -3
- package/dist/browser/firefox/page.d.ts +11 -1
- package/dist/browser/firefox/page.d.ts.map +1 -1
- package/dist/browser/firefox/page.js +66 -7
- package/dist/browser/frames.d.ts +205 -0
- package/dist/browser/frames.d.ts.map +1 -0
- package/dist/browser/frames.js +657 -0
- package/dist/browser/input-guard.d.ts +18 -5
- package/dist/browser/input-guard.d.ts.map +1 -1
- package/dist/browser/input-guard.js +65 -6
- package/dist/browser/isolated-world.d.ts +8 -1
- package/dist/browser/isolated-world.d.ts.map +1 -1
- package/dist/browser/layout.d.ts +120 -0
- package/dist/browser/layout.d.ts.map +1 -0
- package/dist/browser/layout.js +213 -0
- package/dist/browser/locate.d.ts +10 -0
- package/dist/browser/locate.d.ts.map +1 -1
- package/dist/browser/locate.js +24 -6
- package/dist/browser/origin-document.d.ts +4 -0
- package/dist/browser/origin-document.d.ts.map +1 -1
- package/dist/browser/origin-document.js +9 -1
- package/dist/browser/page-scripts.d.ts +48 -0
- package/dist/browser/page-scripts.d.ts.map +1 -1
- package/dist/browser/page-scripts.js +515 -39
- package/dist/browser/page.d.ts +60 -1
- package/dist/browser/page.d.ts.map +1 -1
- package/dist/browser/page.js +275 -32
- package/dist/browser/popups.d.ts +166 -0
- package/dist/browser/popups.d.ts.map +1 -0
- package/dist/browser/popups.js +317 -0
- package/dist/browser/routes.d.ts +97 -0
- package/dist/browser/routes.d.ts.map +1 -0
- package/dist/browser/routes.js +226 -0
- package/dist/browser/screenshot.d.ts +44 -0
- package/dist/browser/screenshot.d.ts.map +1 -0
- package/dist/browser/screenshot.js +51 -0
- package/dist/browser/shadow-candidates.d.ts +20 -0
- package/dist/browser/shadow-candidates.d.ts.map +1 -0
- package/dist/browser/shadow-candidates.js +77 -0
- package/dist/browser/webkit/page.d.ts +11 -1
- package/dist/browser/webkit/page.d.ts.map +1 -1
- package/dist/browser/webkit/page.js +53 -2
- package/dist/browser/webkit/relay.d.ts.map +1 -1
- package/dist/browser/webkit/relay.js +5 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +2 -0
- package/dist/cli/inspect/test-timeline.d.ts.map +1 -1
- package/dist/cli/inspect/test-timeline.js +38 -4
- package/dist/config/loaded.d.ts +12 -2
- package/dist/config/loaded.d.ts.map +1 -1
- package/dist/config/read-inboxes.d.ts +10 -0
- package/dist/config/read-inboxes.d.ts.map +1 -0
- package/dist/config/read-inboxes.js +78 -0
- package/dist/config/register.d.ts +5 -1
- package/dist/config/register.d.ts.map +1 -1
- package/dist/config/types.d.ts +36 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/validate.d.ts.map +1 -1
- package/dist/config/validate.js +4 -1
- package/dist/diagnostics/artifact.d.ts.map +1 -1
- package/dist/diagnostics/artifact.js +10 -2
- package/dist/diagnostics/attempt.d.ts +5 -0
- package/dist/diagnostics/attempt.d.ts.map +1 -1
- package/dist/diagnostics/attempt.js +10 -0
- package/dist/diagnostics/chromium-collector.d.ts +9 -1
- package/dist/diagnostics/chromium-collector.d.ts.map +1 -1
- package/dist/diagnostics/chromium-collector.js +19 -4
- package/dist/diagnostics/observations.d.ts +8 -0
- package/dist/diagnostics/observations.d.ts.map +1 -1
- package/dist/diagnostics/session-capture.d.ts.map +1 -1
- package/dist/diagnostics/session-capture.js +8 -0
- package/dist/index.d.ts +9 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/media/policy.d.ts +2 -2
- package/dist/media/policy.d.ts.map +1 -1
- package/dist/media/policy.js +1 -1
- package/dist/playwright/not-yet.d.ts.map +1 -1
- package/dist/playwright/not-yet.js +5 -2
- package/dist/protocol/commands.d.ts +122 -13
- package/dist/protocol/commands.d.ts.map +1 -1
- package/dist/protocol/commands.js +85 -6
- package/dist/protocol/diagnostics.d.ts +10 -0
- package/dist/protocol/diagnostics.d.ts.map +1 -1
- package/dist/protocol/diagnostics.js +5 -0
- package/dist/protocol/dialogs.d.ts +104 -0
- package/dist/protocol/dialogs.d.ts.map +1 -0
- package/dist/protocol/dialogs.js +101 -0
- package/dist/protocol/drag.d.ts +45 -0
- package/dist/protocol/drag.d.ts.map +1 -0
- package/dist/protocol/drag.js +31 -0
- package/dist/protocol/events.d.ts +153 -1
- package/dist/protocol/events.d.ts.map +1 -1
- package/dist/protocol/events.js +97 -0
- package/dist/protocol/files.d.ts +83 -0
- package/dist/protocol/files.d.ts.map +1 -0
- package/dist/protocol/files.js +68 -0
- package/dist/protocol/inbox.d.ts +87 -0
- package/dist/protocol/inbox.d.ts.map +1 -0
- package/dist/protocol/inbox.js +51 -0
- package/dist/protocol/index.d.ts +4 -1
- package/dist/protocol/index.d.ts.map +1 -1
- package/dist/protocol/layout-checks.d.ts +83 -0
- package/dist/protocol/layout-checks.d.ts.map +1 -0
- package/dist/protocol/layout-checks.js +214 -0
- package/dist/protocol/layout.d.ts +135 -0
- package/dist/protocol/layout.d.ts.map +1 -0
- package/dist/protocol/layout.js +124 -0
- package/dist/protocol/locator-checks.d.ts +19 -2
- package/dist/protocol/locator-checks.d.ts.map +1 -1
- package/dist/protocol/locator-checks.js +23 -1
- package/dist/protocol/locator.d.ts +55 -7
- package/dist/protocol/locator.d.ts.map +1 -1
- package/dist/protocol/locator.js +99 -18
- package/dist/protocol/messages.d.ts +95 -0
- package/dist/protocol/messages.d.ts.map +1 -1
- package/dist/protocol/messages.js +63 -0
- package/dist/protocol/popups.d.ts +43 -0
- package/dist/protocol/popups.d.ts.map +1 -0
- package/dist/protocol/popups.js +27 -0
- package/dist/protocol/result.d.ts +5 -0
- package/dist/protocol/result.d.ts.map +1 -1
- package/dist/protocol/result.js +1 -0
- package/dist/protocol/routes.d.ts +136 -0
- package/dist/protocol/routes.d.ts.map +1 -0
- package/dist/protocol/routes.js +191 -0
- package/dist/protocol/screenshot.d.ts +219 -0
- package/dist/protocol/screenshot.d.ts.map +1 -0
- package/dist/protocol/screenshot.js +335 -0
- package/dist/reporters/actions.d.ts +6 -4
- package/dist/reporters/actions.d.ts.map +1 -1
- package/dist/reporters/actions.js +24 -6
- package/dist/reporters/agent.d.ts.map +1 -1
- package/dist/reporters/agent.js +4 -2
- package/dist/reporters/dialogs-popups.d.ts +22 -0
- package/dist/reporters/dialogs-popups.d.ts.map +1 -0
- package/dist/reporters/dialogs-popups.js +30 -0
- package/dist/reporters/failure-card.d.ts +10 -1
- package/dist/reporters/failure-card.d.ts.map +1 -1
- package/dist/reporters/failure-card.js +5 -1
- package/dist/reporters/format.d.ts +33 -0
- package/dist/reporters/format.d.ts.map +1 -1
- package/dist/reporters/format.js +42 -0
- package/dist/reporters/html/comparison-view.d.ts +12 -0
- package/dist/reporters/html/comparison-view.d.ts.map +1 -0
- package/dist/reporters/html/comparison-view.js +21 -0
- package/dist/reporters/html/diagnostics-view.js +8 -0
- package/dist/reporters/html/downloads-view.d.ts +10 -0
- package/dist/reporters/html/downloads-view.d.ts.map +1 -0
- package/dist/reporters/html/downloads-view.js +29 -0
- package/dist/reporters/html/style.d.ts.map +1 -1
- package/dist/reporters/html/style.js +3 -0
- package/dist/reporters/html/summary-view.d.ts.map +1 -1
- package/dist/reporters/html/summary-view.js +3 -2
- package/dist/reporters/html/test-view.d.ts.map +1 -1
- package/dist/reporters/html/test-view.js +6 -3
- package/dist/reporters/html/timeline-view.d.ts.map +1 -1
- package/dist/reporters/html/timeline-view.js +26 -2
- package/dist/reporters/human-card.js +10 -0
- package/dist/reporters/human.d.ts.map +1 -1
- package/dist/reporters/human.js +3 -1
- package/dist/reporters/routes.d.ts +9 -0
- package/dist/reporters/routes.d.ts.map +1 -0
- package/dist/reporters/routes.js +17 -0
- package/dist/runner/child-program.js +10 -0
- package/dist/runner/contract.d.ts +5 -0
- package/dist/runner/contract.d.ts.map +1 -1
- package/dist/runner/dialogs.d.ts +71 -0
- package/dist/runner/dialogs.d.ts.map +1 -0
- package/dist/runner/dialogs.js +189 -0
- package/dist/runner/files.d.ts +79 -0
- package/dist/runner/files.d.ts.map +1 -0
- package/dist/runner/files.js +312 -0
- package/dist/runner/inbox-links.d.ts +19 -0
- package/dist/runner/inbox-links.d.ts.map +1 -0
- package/dist/runner/inbox-links.js +63 -0
- package/dist/runner/inbox.d.ts +87 -0
- package/dist/runner/inbox.d.ts.map +1 -0
- package/dist/runner/inbox.js +340 -0
- package/dist/runner/index.d.ts +2 -1
- package/dist/runner/index.d.ts.map +1 -1
- package/dist/runner/native-pool.d.ts.map +1 -1
- package/dist/runner/native-pool.js +2 -0
- package/dist/runner/observations.d.ts +15 -2
- package/dist/runner/observations.d.ts.map +1 -1
- package/dist/runner/observations.js +109 -6
- package/dist/runner/popups.d.ts +82 -0
- package/dist/runner/popups.d.ts.map +1 -0
- package/dist/runner/popups.js +236 -0
- package/dist/runner/redactor.d.ts.map +1 -1
- package/dist/runner/redactor.js +10 -6
- package/dist/runner/routes.d.ts +23 -0
- package/dist/runner/routes.d.ts.map +1 -0
- package/dist/runner/routes.js +128 -0
- package/dist/runner/run-media.d.ts +6 -0
- package/dist/runner/run-media.d.ts.map +1 -1
- package/dist/runner/run-media.js +21 -0
- package/dist/runner/run-session.d.ts.map +1 -1
- package/dist/runner/run-session.js +93 -8
- package/dist/runner/running-test.d.ts +35 -0
- package/dist/runner/running-test.d.ts.map +1 -1
- package/dist/runner/running-test.js +333 -22
- package/dist/runner/screenshot-baselines.d.ts +159 -0
- package/dist/runner/screenshot-baselines.d.ts.map +1 -0
- package/dist/runner/screenshot-baselines.js +357 -0
- package/dist/runner/secrets.d.ts +13 -0
- package/dist/runner/secrets.d.ts.map +1 -1
- package/dist/runner/secrets.js +6 -4
- package/dist/runner/test-pages.d.ts +3 -1
- package/dist/runner/test-pages.d.ts.map +1 -1
- package/dist/runner/test-pages.js +4 -3
- package/dist/schemas/event-v1.schema.json +118873 -6311
- package/dist/schemas/result-v1.schema.json +4 -0
- package/dist/shared/image-diff.d.ts +36 -0
- package/dist/shared/image-diff.d.ts.map +1 -0
- package/dist/shared/image-diff.js +242 -0
- package/dist/shared/metadata-process.d.ts +4 -1
- package/dist/shared/metadata-process.d.ts.map +1 -1
- package/dist/shared/metadata-process.js +51 -9
- package/dist/shared/png.d.ts +35 -0
- package/dist/shared/png.d.ts.map +1 -0
- package/dist/shared/png.js +251 -0
- package/dist/shared/process-ownership.d.ts +15 -4
- package/dist/shared/process-ownership.d.ts.map +1 -1
- package/dist/shared/process-ownership.js +123 -34
- package/dist/store/artifacts.d.ts +23 -2
- package/dist/store/artifacts.d.ts.map +1 -1
- package/dist/store/artifacts.js +40 -1
- package/dist/store/rebuild-result.d.ts.map +1 -1
- package/dist/store/rebuild-result.js +6 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/reporters/format.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/reporters/format.ts"],"names":[],"mappings":"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"}
|
package/dist/reporters/format.js
CHANGED
|
@@ -91,6 +91,15 @@ export function runNotes(result) {
|
|
|
91
91
|
...(result.narrowed === undefined ? [] : ['narrowed by test.only']),
|
|
92
92
|
];
|
|
93
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* How many screenshot baselines a run wrote, as reports say it, so a run that wrote them never reads as an ordinary
|
|
96
|
+
* pass: its checks compared nothing with what they wrote.
|
|
97
|
+
*
|
|
98
|
+
* @example describeBaselinesWritten(2) // '2 written by --update-screenshots'
|
|
99
|
+
*/
|
|
100
|
+
export function describeBaselinesWritten(count) {
|
|
101
|
+
return `${count} written by --update-screenshots`;
|
|
102
|
+
}
|
|
94
103
|
export function totalTests(counts) {
|
|
95
104
|
return counts.passed + counts.failed + counts.error + counts.notRun + counts.inconclusive + (counts.skipped ?? 0);
|
|
96
105
|
}
|
|
@@ -112,6 +121,39 @@ export function describeLocks(event) {
|
|
|
112
121
|
const held = `holds ${event.locks.length === 1 ? 'lock' : 'locks'} ${listWords(event.locks, 'and')}`;
|
|
113
122
|
return event.waitedMs === 0 ? held : `${held}, after waiting ${formatDuration(event.waitedMs)}`;
|
|
114
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* A test's read of an inbox: the message it was given, by its subject as the test read it, or that it was given none,
|
|
126
|
+
* and how many looks it took.
|
|
127
|
+
*
|
|
128
|
+
* @example describeInboxRead({ inbox: 'owner', subject: 'Your code is {{code}}', looks: 3 }) // 'inbox owner gave "Your code is {{code}}" after 3 looks'
|
|
129
|
+
*/
|
|
130
|
+
export function describeInboxRead(event) {
|
|
131
|
+
const given = event.subject === undefined ? 'gave no message' : `gave ${JSON.stringify(event.subject)}`;
|
|
132
|
+
return `inbox ${event.inbox} ${given}${event.looks === 0 ? '' : ` after ${plural(event.looks, 'look')}`}`;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* A download a page made: the name the browser suggested, where it began when not in the app's page, and its size once
|
|
136
|
+
* saved, that Retest removed it for holding a secret, how much of it arrived when the browser stopped it, or that it was
|
|
137
|
+
* still on its way when its test ended.
|
|
138
|
+
*
|
|
139
|
+
* @example describeDownload({ suggestedFilename: 'tasks.csv', state: 'completed', size: 35 }) // 'download tasks.csv, 35 bytes'
|
|
140
|
+
*/
|
|
141
|
+
export function describeDownload(event) {
|
|
142
|
+
const started = event.startedIn === undefined ? '' : event.startedIn === 'popup' ? ' from a page it opened' : ' from another page';
|
|
143
|
+
const name = `download ${printable(event.suggestedFilename)}${started}`;
|
|
144
|
+
const received = event.receivedBytes ?? 0;
|
|
145
|
+
const arrived = event.totalBytes === undefined || event.totalBytes === 0 ? plural(received, 'byte') : `${received} of ${plural(event.totalBytes, 'byte')}`;
|
|
146
|
+
switch (event.state) {
|
|
147
|
+
case 'completed':
|
|
148
|
+
return `${name}, ${plural(event.size ?? 0, 'byte')}`;
|
|
149
|
+
case 'withheld':
|
|
150
|
+
return `${name} not kept: it held a secret`;
|
|
151
|
+
case 'canceled':
|
|
152
|
+
return `${name} stopped after ${arrived}`;
|
|
153
|
+
case 'unfinished':
|
|
154
|
+
return `${name} unfinished when the test ended, ${arrived}`;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
115
157
|
/**
|
|
116
158
|
* The desktop, devices and data folders an attempt took, and how long it waited for them.
|
|
117
159
|
*
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { FailureCard } from '../failure-card.ts';
|
|
2
|
+
import type { ArtifactFiles } from './artifact-files.ts';
|
|
3
|
+
import type { Markup } from './markup.ts';
|
|
4
|
+
/**
|
|
5
|
+
* The pictures a failed screenshot comparison left, side by side, each linked to its file in the run folder: the
|
|
6
|
+
* baseline it expected, the picture the page showed, and where the two differ, in red. A picture the safe read refuses
|
|
7
|
+
* is named in a frame where it would have been. Undefined when the failing call left no pictures.
|
|
8
|
+
*
|
|
9
|
+
* @example comparisonView(card, context.files)
|
|
10
|
+
*/
|
|
11
|
+
export declare function comparisonView(card: FailureCard, files: ArtifactFiles): Markup | undefined;
|
|
12
|
+
//# sourceMappingURL=comparison-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparison-view.d.ts","sourceRoot":"","sources":["../../../src/reporters/html/comparison-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAMzC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAS1F"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { html } from "./markup.js";
|
|
2
|
+
import { pictureView } from "./screenshots-view.js";
|
|
3
|
+
const names = { expected: 'Expected', actual: 'Actual', diff: 'Difference' };
|
|
4
|
+
/**
|
|
5
|
+
* The pictures a failed screenshot comparison left, side by side, each linked to its file in the run folder: the
|
|
6
|
+
* baseline it expected, the picture the page showed, and where the two differ, in red. A picture the safe read refuses
|
|
7
|
+
* is named in a frame where it would have been. Undefined when the failing call left no pictures.
|
|
8
|
+
*
|
|
9
|
+
* @example comparisonView(card, context.files)
|
|
10
|
+
*/
|
|
11
|
+
export function comparisonView(card, files) {
|
|
12
|
+
const { call } = card;
|
|
13
|
+
if (call?.type !== 'assertion.failed' || call.attachments === undefined || call.attachments.length === 0)
|
|
14
|
+
return undefined;
|
|
15
|
+
const subject = call.screenshot === undefined ? 'the check' : `"${call.screenshot.name}"`;
|
|
16
|
+
const shown = call.attachments.map(({ name, path }) => {
|
|
17
|
+
const label = names[name] ?? name;
|
|
18
|
+
return pictureView(files.picture(path), `${label} picture of ${subject}`, `${label} · ${path}`);
|
|
19
|
+
});
|
|
20
|
+
return html `<div class="shots comparison">${shown}</div>`;
|
|
21
|
+
}
|
|
@@ -135,11 +135,19 @@ function requestRow(row, clock) {
|
|
|
135
135
|
...(failed === undefined ? [] : [failed.blocked === undefined ? failed.reason : `${failed.reason}, blocked: ${failed.blocked}`]),
|
|
136
136
|
...(pending === undefined ? [] : [describePending(pending)]),
|
|
137
137
|
...(response?.serviceWorker === true ? ['answered by a service worker'] : []),
|
|
138
|
+
...mockedBy(response?.route ?? failed?.route, failed?.routeRefused),
|
|
138
139
|
];
|
|
139
140
|
const during = elapsed === undefined ? undefined : clock.during(elapsed);
|
|
140
141
|
const under = [...endings, ...(during === undefined ? [] : [`during ${during}`])].map((line) => html `<div class="muted small words">${line}</div>`);
|
|
141
142
|
return html `<tr><td class="time">${elapsed === undefined ? '?' : formatDuration(elapsed)}</td><td class="muted">${request.requestId}</td><td>${request.method}</td><td>${status}</td><td class="number">${durationMs === undefined ? '' : formatMilliseconds(durationMs)}</td><td><span class="words">${request.url}</span>${under}</td></tr>`;
|
|
142
143
|
}
|
|
144
|
+
// A hop one of the page's routes answered or refused is the test's own, and says which route, and why Chrome refused
|
|
145
|
+
// the route's answer when it did.
|
|
146
|
+
function mockedBy(route, refused) {
|
|
147
|
+
if (route === undefined)
|
|
148
|
+
return [];
|
|
149
|
+
return [`mocked by page.route(${route})${refused === undefined ? '' : `, whose answer Chrome refused: ${refused}`}`];
|
|
150
|
+
}
|
|
143
151
|
// A hop handed outside the scope is not pending: its end is reported where Retest does not listen.
|
|
144
152
|
function describePending({ reason, lastState }) {
|
|
145
153
|
return reason === 'out_of_scope' ? `out of scope after it was ${lastState}` : `pending, ${lastState}, ${reason.replaceAll('_', ' ')}`;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { TestEvent } from '../run-record.ts';
|
|
2
|
+
import type { Markup } from './markup.ts';
|
|
3
|
+
/**
|
|
4
|
+
* A test's downloads, each linked to its file in the run folder so a reviewer can open it, or saying why there is none:
|
|
5
|
+
* the browser stopped it, it was unfinished when the test ended, or its file is not where its record says.
|
|
6
|
+
*
|
|
7
|
+
* @example downloadsView(events, '/work/.retest/runs/2026-10-14T10-00-00')
|
|
8
|
+
*/
|
|
9
|
+
export declare function downloadsView(events: readonly TestEvent[], directory: string): Markup | undefined;
|
|
10
|
+
//# sourceMappingURL=downloads-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloads-view.d.ts","sourceRoot":"","sources":["../../../src/reporters/html/downloads-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAQzC;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIjG"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { checkArtifact } from "../../store/artifacts.js";
|
|
2
|
+
import { describeDownload, failureLabel } from "../format.js";
|
|
3
|
+
import { artifactLink, html } from "./markup.js";
|
|
4
|
+
// Larger than any file a test downloads; the report links to the file and never reads it.
|
|
5
|
+
const maxDownloadBytes = Number.MAX_SAFE_INTEGER;
|
|
6
|
+
/**
|
|
7
|
+
* A test's downloads, each linked to its file in the run folder so a reviewer can open it, or saying why there is none:
|
|
8
|
+
* the browser stopped it, it was unfinished when the test ended, or its file is not where its record says.
|
|
9
|
+
*
|
|
10
|
+
* @example downloadsView(events, '/work/.retest/runs/2026-10-14T10-00-00')
|
|
11
|
+
*/
|
|
12
|
+
export function downloadsView(events, directory) {
|
|
13
|
+
const downloads = events.filter((event) => event.type === 'download');
|
|
14
|
+
if (downloads.length === 0)
|
|
15
|
+
return undefined;
|
|
16
|
+
return html `<ul class="downloads">${downloads.map((event) => html `<li class="words">${downloadItem(event, directory)}</li>`)}</ul>`;
|
|
17
|
+
}
|
|
18
|
+
function downloadItem(event, directory) {
|
|
19
|
+
const what = describeDownload(event);
|
|
20
|
+
if (event.state !== 'completed' || event.path === undefined) {
|
|
21
|
+
const failed = event.failure === undefined ? '' : html ` <span class="status status-failed">${failureLabel(event.failure.class)}</span>`;
|
|
22
|
+
return html `${what}${failed}`;
|
|
23
|
+
}
|
|
24
|
+
const checked = checkArtifact(directory, event.path, { maxBytes: maxDownloadBytes });
|
|
25
|
+
const link = artifactLink(event.path);
|
|
26
|
+
if (!checked.ok || link === undefined)
|
|
27
|
+
return html `${what}: <code>${event.path}</code> cannot be opened (${checked.ok ? 'not a path inside the run folder' : checked.message})`;
|
|
28
|
+
return html `<a href="${link}" download><code>${event.path}</code></a> · ${what}`;
|
|
29
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../../src/reporters/html/style.ts"],"names":[],"mappings":"AAIA,yEAAyE;AACzE,eAAO,MAAM,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../../src/reporters/html/style.ts"],"names":[],"mappings":"AAIA,yEAAyE;AACzE,eAAO,MAAM,UAAU,EAAE,MAwIxB,CAAA"}
|
|
@@ -113,6 +113,9 @@ tr.row-failed td.what { color: var(--failed); }
|
|
|
113
113
|
.shot { margin: 0; max-width: 100%; }
|
|
114
114
|
.shot img, .shot video { display: block; max-width: min(100%, 38rem); height: auto; border: 1px solid var(--rule); border-radius: 4px; }
|
|
115
115
|
.shot figcaption { font-size: 12px; color: var(--muted); margin-top: 4px; overflow-wrap: anywhere; }
|
|
116
|
+
.comparison { flex-wrap: nowrap; }
|
|
117
|
+
.comparison .shot { flex: 1 1 0; min-width: 0; max-width: 24rem; }
|
|
118
|
+
.comparison .shot img { width: 100%; max-width: 100%; height: auto; }
|
|
116
119
|
.gap { margin: 10px 0 0; padding: 12px 14px; border: 1.5px dashed var(--muted); border-radius: 4px; color: var(--muted); font-size: 13px; overflow-wrap: anywhere; }
|
|
117
120
|
.gap strong { color: var(--ink); font-weight: 600; }
|
|
118
121
|
.part { margin: 14px 0 0; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summary-view.d.ts","sourceRoot":"","sources":["../../../src/reporters/html/summary-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAmB/C,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAEvD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAO5F;
|
|
1
|
+
{"version":3,"file":"summary-view.d.ts","sourceRoot":"","sources":["../../../src/reporters/html/summary-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAmB/C,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAEvD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAO5F;AAgFD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAQ1F;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAK7F"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { diagnosticsTotals } from "../../diagnostics/report.js";
|
|
2
2
|
import { countEvaluations } from "../../evaluation/report.js";
|
|
3
3
|
import { describeFileProblem, runFailureToShow } from "../failure-card.js";
|
|
4
|
-
import { countParts, describeNarrowed, failureLabel, formatDetail, formatDuration, runNotes, testTitle } from "../format.js";
|
|
4
|
+
import { countParts, describeBaselinesWritten, describeNarrowed, failureLabel, formatDetail, formatDuration, runNotes, testTitle } from "../format.js";
|
|
5
5
|
import { countHostChecks } from "../host-checks.js";
|
|
6
6
|
import { describeBrowser, describeNative, targetSummaries, variantLabel } from "../targets.js";
|
|
7
7
|
import { codeFrameView, failureView } from "./failure-view.js";
|
|
@@ -113,7 +113,8 @@ function noticesView(context) {
|
|
|
113
113
|
const stopped = result.status === 'interrupted' ? html `<div class="notice notice-error">The run was stopped before it finished. Tests it had not reached did not run.</div>` : undefined;
|
|
114
114
|
const incomplete = result.complete ? undefined : html `<div class="notice notice-error">The run is incomplete: it did not check everything it was asked to check.</div>`;
|
|
115
115
|
const narrowed = result.narrowed === undefined ? undefined : html `<div class="notice notice-error words">${describeNarrowed(result.narrowed)}</div>`;
|
|
116
|
-
|
|
116
|
+
const baselines = result.baselinesWritten === undefined ? undefined : html `<div class="notice notice-error words">Screenshot baselines: ${describeBaselinesWritten(result.baselinesWritten)}, so their checks compared nothing.</div>`;
|
|
117
|
+
return html `${read}${failed}${stopped}${incomplete}${narrowed}${baselines}`;
|
|
117
118
|
}
|
|
118
119
|
/**
|
|
119
120
|
* Every test in one table, in run order, each linked to its section: its status, title, targets, time and how much of
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-view.d.ts","sourceRoot":"","sources":["../../../src/reporters/html/test-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"test-view.d.ts","sourceRoot":"","sources":["../../../src/reporters/html/test-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAmBxD,+GAA+G;AAC/G,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,CAAA;AAI9I,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAEhF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAE9E"}
|
|
@@ -3,11 +3,13 @@ import { formatInspectCommand } from "../commands.js";
|
|
|
3
3
|
import { notRunReason } from "../failure-card.js";
|
|
4
4
|
import { failureLabel, formatDuration, statusLabel, testTitle } from "../format.js";
|
|
5
5
|
import { namingTargets, variantLabel } from "../targets.js";
|
|
6
|
+
import { comparisonView } from "./comparison-view.js";
|
|
6
7
|
import { diagnosticsView } from "./diagnostics-view.js";
|
|
8
|
+
import { downloadsView } from "./downloads-view.js";
|
|
7
9
|
import { evaluationsView } from "./evaluations-view.js";
|
|
8
10
|
import { evidenceLabel, noScreenshotReason } from "./evidence-status.js";
|
|
9
11
|
import { codeFrameView, failureView } from "./failure-view.js";
|
|
10
|
-
import { html } from "./markup.js";
|
|
12
|
+
import { html, join } from "./markup.js";
|
|
11
13
|
import { recordingsView } from "./recordings-view.js";
|
|
12
14
|
import { replayView } from "./replay-view.js";
|
|
13
15
|
import { screenshotsView } from "./screenshots-view.js";
|
|
@@ -54,7 +56,7 @@ function head({ test, evidence }, context) {
|
|
|
54
56
|
}
|
|
55
57
|
function body(entry, context) {
|
|
56
58
|
const { test, card, evidence, events } = entry;
|
|
57
|
-
const failing = card === undefined ? undefined : failureView(card);
|
|
59
|
+
const failing = card === undefined ? undefined : join([failureView(card), comparisonView(card, context.files)]);
|
|
58
60
|
const reasons = evidenceReasons(entry);
|
|
59
61
|
const warnings = evaluationWarnings(test).map((warning) => html `<div class="notice notice-error words">${warning}</div>`);
|
|
60
62
|
const notRun = notRunNote(test, context);
|
|
@@ -62,11 +64,12 @@ function body(entry, context) {
|
|
|
62
64
|
const pictures = screenshotsView(evidence.screenshots, { missing });
|
|
63
65
|
const code = card?.location === undefined ? undefined : codeFrameView(context, card.location);
|
|
64
66
|
const recordings = recordingsView(test.recordings ?? [], context.files);
|
|
67
|
+
const downloads = downloadsView(events, context.input.directory);
|
|
65
68
|
const evaluations = evaluationsView(test.evaluations ?? [], context.files);
|
|
66
69
|
const openChecks = (test.evaluations ?? []).some((record) => record.verdict !== 'pass' && record.verdict !== 'not_run');
|
|
67
70
|
const diagnostics = diagnosticsView(test.diagnostics ?? [], events, context.files);
|
|
68
71
|
const replay = replayView(test);
|
|
69
|
-
return html `${failing}${notRun}${warnings}${reasons}${pictures}${code}${part('Recordings', recordings, card !== undefined)}${part('AI checks', evaluations, openChecks)}${part('Steps', timelineView(test, events), false)}${part('Console and network', diagnostics, false)}${part('Targets', targetsView(test, context), false)}${part('Replay facts', replay, false)}${commands(entry, context)}`;
|
|
72
|
+
return html `${failing}${notRun}${warnings}${reasons}${pictures}${code}${part('Recordings', recordings, card !== undefined)}${part('Downloads', downloads, card !== undefined)}${part('AI checks', evaluations, openChecks)}${part('Steps', timelineView(test, events), false)}${part('Console and network', diagnostics, false)}${part('Targets', targetsView(test, context), false)}${part('Replay facts', replay, false)}${commands(entry, context)}`;
|
|
70
73
|
}
|
|
71
74
|
function part(title, content, open) {
|
|
72
75
|
if (content === undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline-view.d.ts","sourceRoot":"","sources":["../../../src/reporters/html/timeline-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,KAAK,EAAe,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"timeline-view.d.ts","sourceRoot":"","sources":["../../../src/reporters/html/timeline-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,KAAK,EAAe,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAyCzC;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAqBnF"}
|
|
@@ -5,7 +5,9 @@ import { describeLocator } from "../../protocol/locator.js";
|
|
|
5
5
|
import { secretPlaceholder } from "../../protocol/secret.js";
|
|
6
6
|
import { describeLeaseParts } from "../../runner/resources.js";
|
|
7
7
|
import { actionNotes, describeWrittenAction } from "../actions.js";
|
|
8
|
-
import {
|
|
8
|
+
import { describeDialog, describePopupClosed, describePopupOpened } from "../dialogs-popups.js";
|
|
9
|
+
import { describeRouteChange } from "../routes.js";
|
|
10
|
+
import { describeCleanup, describeDownload, describeInboxRead, describeLeaseExpired, describeLocks, describePage, describePreparation, describeResources, describeSessions, describeSessionsReleased, describeStateEvent, failureLabel, formatDuration, plural, printable, statusLabel, } from "../format.js";
|
|
9
11
|
import { describeHostCheck, hostCheckPage } from "../host-checks.js";
|
|
10
12
|
import { html } from "./markup.js";
|
|
11
13
|
const marks = { passed: '✓', failed: '✗', warning: '!' };
|
|
@@ -23,7 +25,8 @@ export function timelineView(test, events) {
|
|
|
23
25
|
if (events.length === 0)
|
|
24
26
|
return html `<p class="gap">No steps are shown: the run folder holds no events for this test.</p>`;
|
|
25
27
|
const start = events[0]?.elapsedMs ?? 0;
|
|
26
|
-
|
|
28
|
+
// A popup's steps are the popup's own, so a test that was given one names the app of every row, as a variant does.
|
|
29
|
+
const named = test.variant !== undefined || events.some((event) => event.type === 'popup.opened');
|
|
27
30
|
const stepNames = new Map();
|
|
28
31
|
let depth = 0;
|
|
29
32
|
const rows = [];
|
|
@@ -70,7 +73,12 @@ function isPageEvent(event) {
|
|
|
70
73
|
case 'recording.finished':
|
|
71
74
|
case 'capture.withheld':
|
|
72
75
|
case 'capture.resumed':
|
|
76
|
+
case 'dialog':
|
|
77
|
+
case 'popup.opened':
|
|
78
|
+
case 'popup.closed':
|
|
73
79
|
case 'capture.masked_entry':
|
|
80
|
+
case 'download':
|
|
81
|
+
case 'route':
|
|
74
82
|
return true;
|
|
75
83
|
default:
|
|
76
84
|
return false;
|
|
@@ -133,6 +141,22 @@ function describe(entry, stepNames) {
|
|
|
133
141
|
return { what: `screenshot not saved: ${event.message}`, mark: 'warning' };
|
|
134
142
|
case 'evaluation.finished':
|
|
135
143
|
return describeEvaluationEvent(event);
|
|
144
|
+
case 'inbox.read':
|
|
145
|
+
return event.failure === undefined ? { what: describeInboxRead(event), took: event.waitedMs } : { what: describeInboxRead(event), mark: 'failed', took: event.waitedMs, failure: failureLabel(event.failure.class) };
|
|
146
|
+
case 'dialog':
|
|
147
|
+
return event.by === 'test' ? { what: describeDialog(event) } : { what: describeDialog(event), mark: 'warning' };
|
|
148
|
+
case 'popup.opened':
|
|
149
|
+
return { what: describePopupOpened(event) };
|
|
150
|
+
case 'popup.closed':
|
|
151
|
+
return { what: describePopupClosed(event) };
|
|
152
|
+
case 'download': {
|
|
153
|
+
const what = describeDownload(event);
|
|
154
|
+
if (event.state === 'completed')
|
|
155
|
+
return { what, ...(event.path === undefined ? {} : { details: [`file ${event.path}`] }) };
|
|
156
|
+
return event.failure === undefined ? { what, mark: 'warning' } : { what, mark: 'failed', failure: failureLabel(event.failure.class) };
|
|
157
|
+
}
|
|
158
|
+
case 'route':
|
|
159
|
+
return event.failure === undefined ? { what: describeRouteChange(event) } : { what: describeRouteChange(event), mark: 'failed', failure: failureLabel(event.failure.class) };
|
|
136
160
|
case 'recording.started':
|
|
137
161
|
return { what: `recording ${event.number} started: ${event.source}, ${event.mode}, ${event.width}×${event.height} at ${event.fps} fps` };
|
|
138
162
|
case 'recording.finished': {
|
|
@@ -135,6 +135,8 @@ function closing(card, options) {
|
|
|
135
135
|
const lines = card.screenshots.map((path) => field('Screenshot', path));
|
|
136
136
|
for (const problem of card.evidenceProblems)
|
|
137
137
|
lines.push(field('Screenshot', `not saved: ${problem}`));
|
|
138
|
+
for (const { name, path } of card.attachments ?? [])
|
|
139
|
+
lines.push(field(attachmentLabel(name), path));
|
|
138
140
|
for (const { label, value } of card.diagnostics ?? [])
|
|
139
141
|
lines.push(field(label, value));
|
|
140
142
|
for (const failure of card.cleanupFailures) {
|
|
@@ -146,6 +148,14 @@ function closing(card, options) {
|
|
|
146
148
|
lines.push(field('Inspect', inspect));
|
|
147
149
|
return lines;
|
|
148
150
|
}
|
|
151
|
+
// A screenshot comparison's pictures are named as a reader looks for them: what was expected, what came, and where.
|
|
152
|
+
function attachmentLabel(name) {
|
|
153
|
+
if (name === 'expected')
|
|
154
|
+
return 'Expected';
|
|
155
|
+
if (name === 'actual')
|
|
156
|
+
return 'Actual';
|
|
157
|
+
return name === 'diff' ? 'Difference' : name;
|
|
158
|
+
}
|
|
149
159
|
// Labels may carry colour codes, so the padding counts only the visible characters.
|
|
150
160
|
function field(label, value) {
|
|
151
161
|
const gap = ' '.repeat(Math.max(2, labelWidth - visibleLength(label)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"human.d.ts","sourceRoot":"","sources":["../../src/reporters/human.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"human.d.ts","sourceRoot":"","sources":["../../src/reporters/human.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAsC7C,OAAO,EAA0C,KAAK,MAAM,EAAE,MAAM,YAAY,CAAA;AAYhF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,mFAAmF;AACnF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAA;AAE9E;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA0GhF"}
|
package/dist/reporters/human.js
CHANGED
|
@@ -3,7 +3,7 @@ import { countEvaluations } from "../evaluation/report.js";
|
|
|
3
3
|
import { variantKey } from "../protocol/variant.js";
|
|
4
4
|
import { createChildEcho } from "./child-output.js";
|
|
5
5
|
import { describeFileProblem, failureCards, fileProblemOf, notRunReason, runFailureToShow, testsNotRun, } from "./failure-card.js";
|
|
6
|
-
import { countParts, describeAppEvent, describeBorrowedSetup, describeHolders, describeLeaseExpired, describeLocks, describeNarrowed, describeResources, describeSessions, describeStateEvent, failureLabel, formatDetail, formatDuration, messageLines, plural, runNotes, testTitle, titleWithin, } from "./format.js";
|
|
6
|
+
import { countParts, describeAppEvent, describeBaselinesWritten, describeBorrowedSetup, describeHolders, describeLeaseExpired, describeLocks, describeNarrowed, describeResources, describeSessions, describeStateEvent, failureLabel, formatDetail, formatDuration, messageLines, plural, runNotes, testTitle, titleWithin, } from "./format.js";
|
|
7
7
|
import { countHostChecks } from "./host-checks.js";
|
|
8
8
|
import { renderCard } from "./human-card.js";
|
|
9
9
|
import { RunRecord } from "./run-record.js";
|
|
@@ -228,6 +228,8 @@ function summaryLines(result, context) {
|
|
|
228
228
|
rows.push(['Files', files.join(' · ')]);
|
|
229
229
|
if (result.evidenceStatus !== undefined)
|
|
230
230
|
rows.push(['Evidence', describeEvidence(result.evidenceStatus)]);
|
|
231
|
+
if (result.baselinesWritten !== undefined)
|
|
232
|
+
rows.push(['Baselines', describeBaselinesWritten(result.baselinesWritten)]);
|
|
231
233
|
rows.push(['Time', formatDuration(result.durationMs)], ['Output', context.runFolder]);
|
|
232
234
|
const notes = runNotes(result);
|
|
233
235
|
const exit = `${result.exitCode}${notes.length === 0 ? '' : ` · ${notes.join(', ')}`}`;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EventOfType } from './run-record.ts';
|
|
2
|
+
/**
|
|
3
|
+
* A change to an app's routes as reports name it: the call as the test wrote it, with what an added route answers, or
|
|
4
|
+
* how many routes a removal took away; or a request a route could not answer because Chrome refused its answer.
|
|
5
|
+
*
|
|
6
|
+
* @example describeRouteChange({ operation: 'add', pattern: '/tasks/i', answer: { status: 200, bodyBytes: 2 } }) // 'page.route(/tasks/i) answers 200, 2 bytes'
|
|
7
|
+
*/
|
|
8
|
+
export declare function describeRouteChange(event: Pick<EventOfType<'route'>, 'operation' | 'pattern' | 'answer' | 'removed' | 'url'>): string;
|
|
9
|
+
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/reporters/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAIlD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC,GAAG,MAAM,CAMrI"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { describeRouteSummary } from "../protocol/routes.js";
|
|
2
|
+
import { plural, printable } from "./format.js";
|
|
3
|
+
/**
|
|
4
|
+
* A change to an app's routes as reports name it: the call as the test wrote it, with what an added route answers, or
|
|
5
|
+
* how many routes a removal took away; or a request a route could not answer because Chrome refused its answer.
|
|
6
|
+
*
|
|
7
|
+
* @example describeRouteChange({ operation: 'add', pattern: '/tasks/i', answer: { status: 200, bodyBytes: 2 } }) // 'page.route(/tasks/i) answers 200, 2 bytes'
|
|
8
|
+
*/
|
|
9
|
+
export function describeRouteChange(event) {
|
|
10
|
+
const pattern = printable(event.pattern);
|
|
11
|
+
if (event.operation === 'remove')
|
|
12
|
+
return `page.unroute(${pattern})${event.removed === undefined ? '' : ` removed ${plural(event.removed, 'route')}`}`;
|
|
13
|
+
if (event.operation === 'answer')
|
|
14
|
+
return `page.route(${pattern}) could not answer ${printable(event.url ?? 'a request')}, which Retest failed`;
|
|
15
|
+
const answer = event.answer === undefined ? '' : ` ${'abort' in event.answer ? '' : 'answers '}${describeRouteSummary(event.answer)}`;
|
|
16
|
+
return `page.route(${pattern})${answer}`;
|
|
17
|
+
}
|
|
@@ -42,6 +42,16 @@ function receive(message) {
|
|
|
42
42
|
return current?.resolveCommand(message.id, message.result);
|
|
43
43
|
case 'evaluation-result':
|
|
44
44
|
return current?.resolveEvaluation(message.id, message.answer);
|
|
45
|
+
case 'inbox-result':
|
|
46
|
+
return current?.resolveInbox(message.id, message.answer);
|
|
47
|
+
case 'dialog-result':
|
|
48
|
+
return current?.resolveDialog(message.id, message.answer);
|
|
49
|
+
case 'popup-result':
|
|
50
|
+
return current?.resolvePopup(message.id, message.answer);
|
|
51
|
+
case 'files-result':
|
|
52
|
+
return current?.resolveFiles(message.id, message.answer);
|
|
53
|
+
case 'route-result':
|
|
54
|
+
return current?.resolveRoute(message.id, message.answer);
|
|
45
55
|
case 'abort':
|
|
46
56
|
return current?.abort();
|
|
47
57
|
case 'close':
|
|
@@ -124,6 +124,11 @@ export type RunOptions = {
|
|
|
124
124
|
* is given. Absent, `only` narrows the run and the reports say so.
|
|
125
125
|
*/
|
|
126
126
|
forbidOnly?: string;
|
|
127
|
+
/**
|
|
128
|
+
* Writes every screenshot baseline the run's checks compare against, from the picture each settled on, in place of
|
|
129
|
+
* any there, and passes those checks. The result counts what it wrote. Absent: each check compares with its baseline.
|
|
130
|
+
*/
|
|
131
|
+
updateScreenshots?: true;
|
|
127
132
|
/**
|
|
128
133
|
* The files are Playwright test files. Their imports of `@playwright/test` resolve to Retest's own
|
|
129
134
|
* `/playwright` subpath, relative imports may leave out their extension, and the run says so in `run.started`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/runner/contract.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/runner/contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { OwnedPage } from '../browser/contract.ts';
|
|
2
|
+
import type { CommandResult } from '../protocol/commands.ts';
|
|
3
|
+
import type { EventBody } from '../protocol/events.ts';
|
|
4
|
+
import type { Failure } from '../protocol/failures.ts';
|
|
5
|
+
import type { ChildMessage, ParentMessage } from '../protocol/messages.ts';
|
|
6
|
+
import type { Timeouts } from '../protocol/timeouts.ts';
|
|
7
|
+
/**
|
|
8
|
+
* What the parent's handling of a test's dialogs and popups needs of the running test: its pages, its own and the
|
|
9
|
+
* popups it was given, its clock and budgets, the child, its events, the failures it saw for itself, and its redactor.
|
|
10
|
+
*/
|
|
11
|
+
export type TestHost = {
|
|
12
|
+
readonly testId: string;
|
|
13
|
+
readonly attemptId: string;
|
|
14
|
+
readonly timeouts: Timeouts;
|
|
15
|
+
/** The page an app's commands go to, one of the test's own or a popup it was given. */
|
|
16
|
+
page(app: string): OwnedPage | undefined;
|
|
17
|
+
/** Why nothing more may go to the page, once the test was stopped or is over. */
|
|
18
|
+
refusal(): Failure | undefined;
|
|
19
|
+
/** Milliseconds the test has left, when its body has begun. */
|
|
20
|
+
remainingMs(): number | undefined;
|
|
21
|
+
/** Whether the test is running and not stopped, so its process still takes answers. */
|
|
22
|
+
answerable(): boolean;
|
|
23
|
+
/** Whether the test has sent a command to a page yet: a dialog answered before then belongs to no action of it. */
|
|
24
|
+
commandsSent(): boolean;
|
|
25
|
+
/** The step the test was in when its latest command arrived. */
|
|
26
|
+
stepId(): string | undefined;
|
|
27
|
+
send(message: ParentMessage): void;
|
|
28
|
+
emit(body: EventBody): void;
|
|
29
|
+
/** Records a failure the parent saw for itself, which fails the test whatever its process claims. */
|
|
30
|
+
observe(problem: Failure): void;
|
|
31
|
+
/** Ends the test: its process broke the protocol. */
|
|
32
|
+
violation(problem: string): void;
|
|
33
|
+
/** Hides every value the run hides in a text. */
|
|
34
|
+
redact(text: string): string;
|
|
35
|
+
};
|
|
36
|
+
type DialogMessage = Extract<ChildMessage, {
|
|
37
|
+
type: 'dialog';
|
|
38
|
+
}>;
|
|
39
|
+
/**
|
|
40
|
+
* The parent's side of a test's JavaScript dialogs. A wait arms the app's page at once, before the action the test runs
|
|
41
|
+
* next arrives, and gives the test the dialog when it opens, its text redacted, under an id of the attempt's own. An
|
|
42
|
+
* answer goes to the page that showed the dialog. A dialog nothing waited for is answered by the page, and recorded
|
|
43
|
+
* here: one that opened while no command ran fails the test, and one that opened during a command fails that command,
|
|
44
|
+
* in the words `withDialogText` gives it. A dialog the test was given and left open is dismissed as the body settles.
|
|
45
|
+
* Every dialog that closed is written down as a `dialog` event.
|
|
46
|
+
*/
|
|
47
|
+
export declare class TestDialogs {
|
|
48
|
+
#private;
|
|
49
|
+
constructor(host: TestHost);
|
|
50
|
+
/** Hears the dialogs an app's page answers itself. Returns a function that stops listening. */
|
|
51
|
+
watch(app: string, page: OwnedPage): () => void;
|
|
52
|
+
receive(message: DialogMessage): void;
|
|
53
|
+
/**
|
|
54
|
+
* Dismisses every dialog the test was given and left open, within `timeoutMs`, so its page answers again and the action
|
|
55
|
+
* that opened it can end. Each is written down as dismissed by Retest. Nothing is recorded against the test: its own
|
|
56
|
+
* process names the dialog it left open.
|
|
57
|
+
*/
|
|
58
|
+
settle(timeoutMs: number): Promise<void>;
|
|
59
|
+
/** Stops every wait still running, with `reason`, as the test is stopped or ends; none is answered. */
|
|
60
|
+
stop(reason: Failure): void;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* A command's answer, with a dialog the page answered while the command ran named in words: the page gives the
|
|
64
|
+
* dialog's text apart, as the page showed it, and only the parent can hide the run's values in it before quoting it.
|
|
65
|
+
* Any other answer is given back as it is.
|
|
66
|
+
*
|
|
67
|
+
* @example withDialogText(result, (text) => redactor.redact(text))
|
|
68
|
+
*/
|
|
69
|
+
export declare function withDialogText(result: CommandResult, redact: (text: string) => string): CommandResult;
|
|
70
|
+
export {};
|
|
71
|
+
//# sourceMappingURL=dialogs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialogs.d.ts","sourceRoot":"","sources":["../../src/runner/dialogs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,yBAAyB,CAAA;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAOvD;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,uFAAuF;IACvF,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAA;IACxC,iFAAiF;IACjF,OAAO,IAAI,OAAO,GAAG,SAAS,CAAA;IAC9B,+DAA+D;IAC/D,WAAW,IAAI,MAAM,GAAG,SAAS,CAAA;IACjC,uFAAuF;IACvF,UAAU,IAAI,OAAO,CAAA;IACrB,mHAAmH;IACnH,YAAY,IAAI,OAAO,CAAA;IACvB,gEAAgE;IAChE,MAAM,IAAI,MAAM,GAAG,SAAS,CAAA;IAC5B,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAA;IAClC,IAAI,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAA;IAC3B,qGAAqG;IACrG,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAC/B,qDAAqD;IACrD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,iDAAiD;IACjD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAC7B,CAAA;AAED,KAAK,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAA;AAI9D;;;;;;;GAOG;AACH,qBAAa,WAAW;;gBAMV,IAAI,EAAE,QAAQ;IAI1B,+FAA+F;IAC/F,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,IAAI;IAI/C,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAcrC;;;;OAIG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiF9C,uGAAuG;IACvG,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;CAoC5B;AAaD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,aAAa,CAIrG"}
|