@testmuai/playwright-bindings 0.1.18 → 0.1.19
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/dist/helpers/assertion.d.ts.map +1 -1
- package/dist/helpers/assertion.js +6 -24
- package/dist/helpers/assertion.js.map +1 -1
- package/dist/helpers/devtools.d.ts +13 -1
- package/dist/helpers/devtools.d.ts.map +1 -1
- package/dist/helpers/devtools.js +352 -12
- package/dist/helpers/devtools.js.map +1 -1
- package/dist/helpers/evaluation/colors.d.ts +2 -0
- package/dist/helpers/evaluation/colors.d.ts.map +1 -0
- package/dist/helpers/evaluation/colors.js +151 -0
- package/dist/helpers/evaluation/colors.js.map +1 -0
- package/dist/helpers/evaluation/evaluate.d.ts +8 -0
- package/dist/helpers/evaluation/evaluate.d.ts.map +1 -0
- package/dist/helpers/evaluation/evaluate.js +217 -0
- package/dist/helpers/evaluation/evaluate.js.map +1 -0
- package/dist/helpers/sseParser.d.ts +34 -0
- package/dist/helpers/sseParser.d.ts.map +1 -0
- package/dist/helpers/sseParser.js +128 -0
- package/dist/helpers/sseParser.js.map +1 -0
- package/dist/session.d.ts +8 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +51 -19
- package/dist/session.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WHATWG HTML "server-sent events" wire-format parser (the EventSource
|
|
3
|
+
* byte-stream interpretation, https://html.spec.whatwg.org/#event-stream-interpretation).
|
|
4
|
+
* TS twin of testmu/_helpers/sse_parser.py.
|
|
5
|
+
*
|
|
6
|
+
* Used for fetch/XHR event-streams captured as raw bytes via CDP, where the
|
|
7
|
+
* browser does NOT pre-parse the frames (native EventSource is pre-parsed and
|
|
8
|
+
* uses Network.eventSourceMessageReceived instead — never this).
|
|
9
|
+
*
|
|
10
|
+
* feed(chunk) accepts an already-UTF-8-decoded text chunk (the caller owns one
|
|
11
|
+
* TextDecoder({stream:true}) per connection so multibyte sequences split across
|
|
12
|
+
* network chunks decode cleanly) and returns the messages completed by that
|
|
13
|
+
* chunk. Partial lines and a lone trailing CR are buffered for the next feed.
|
|
14
|
+
*/
|
|
15
|
+
const MAX_SSE_DATA = 65536;
|
|
16
|
+
export class SSEWireParser {
|
|
17
|
+
buffer = '';
|
|
18
|
+
started = false;
|
|
19
|
+
dataBuf = '';
|
|
20
|
+
eventBuf = '';
|
|
21
|
+
lastEventId = null;
|
|
22
|
+
retryMs = null;
|
|
23
|
+
feed(chunk) {
|
|
24
|
+
if (!this.started && chunk) {
|
|
25
|
+
// Only consume BOM-eligibility once a NON-EMPTY chunk is seen — a split-multibyte
|
|
26
|
+
// first chunk (incl. a BOM split across CDP events) decodes to '', and stripping
|
|
27
|
+
// must still apply when the BOM materializes on a later feed.
|
|
28
|
+
this.started = true;
|
|
29
|
+
if (chunk.charCodeAt(0) === 0xfeff)
|
|
30
|
+
chunk = chunk.slice(1); // strip one leading BOM
|
|
31
|
+
}
|
|
32
|
+
this.buffer += chunk;
|
|
33
|
+
const events = [];
|
|
34
|
+
for (;;) {
|
|
35
|
+
const next = this.nextLine(this.buffer);
|
|
36
|
+
if (next === null)
|
|
37
|
+
break; // no complete line yet — keep buffering
|
|
38
|
+
const [line, rest] = next;
|
|
39
|
+
this.buffer = rest;
|
|
40
|
+
if (line === '') {
|
|
41
|
+
const ev = this.dispatch();
|
|
42
|
+
if (ev !== null)
|
|
43
|
+
events.push(ev);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
this.processLine(line);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return events;
|
|
50
|
+
}
|
|
51
|
+
// Return [line, rest] for the first complete line, or null if none yet.
|
|
52
|
+
// Lines end on \n, \r\n, or \r. A lone trailing \r is incomplete (may be \r\n next feed).
|
|
53
|
+
nextLine(buf) {
|
|
54
|
+
const n = buf.length;
|
|
55
|
+
for (let i = 0; i < n; i++) {
|
|
56
|
+
const c = buf[i];
|
|
57
|
+
if (c === '\n')
|
|
58
|
+
return [buf.slice(0, i), buf.slice(i + 1)];
|
|
59
|
+
if (c === '\r') {
|
|
60
|
+
if (i + 1 < n) {
|
|
61
|
+
if (buf[i + 1] === '\n')
|
|
62
|
+
return [buf.slice(0, i), buf.slice(i + 2)];
|
|
63
|
+
return [buf.slice(0, i), buf.slice(i + 1)];
|
|
64
|
+
}
|
|
65
|
+
return null; // lone trailing CR — wait for more input
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
processLine(line) {
|
|
71
|
+
if (line.startsWith(':'))
|
|
72
|
+
return; // comment
|
|
73
|
+
let field;
|
|
74
|
+
let value;
|
|
75
|
+
const idx = line.indexOf(':');
|
|
76
|
+
if (idx >= 0) {
|
|
77
|
+
field = line.slice(0, idx);
|
|
78
|
+
value = line.slice(idx + 1);
|
|
79
|
+
if (value.startsWith(' '))
|
|
80
|
+
value = value.slice(1); // strip exactly one leading space
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
field = line;
|
|
84
|
+
value = '';
|
|
85
|
+
}
|
|
86
|
+
if (field === 'data') {
|
|
87
|
+
this.dataBuf += value + '\n';
|
|
88
|
+
}
|
|
89
|
+
else if (field === 'event') {
|
|
90
|
+
this.eventBuf = value;
|
|
91
|
+
}
|
|
92
|
+
else if (field === 'id') {
|
|
93
|
+
// Ignore an id containing U+0000 NUL; otherwise set it ("" -> null = "no id").
|
|
94
|
+
if (!value.includes('\x00'))
|
|
95
|
+
this.lastEventId = value === '' ? null : value;
|
|
96
|
+
}
|
|
97
|
+
else if (field === 'retry') {
|
|
98
|
+
// Only all-ASCII-digit values are valid; anything else is ignored.
|
|
99
|
+
if (value.length > 0 && /^[0-9]+$/.test(value))
|
|
100
|
+
this.retryMs = parseInt(value, 10);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
dispatch() {
|
|
104
|
+
let data = this.dataBuf;
|
|
105
|
+
const event = this.eventBuf;
|
|
106
|
+
// Reset per-dispatch buffers; keep lastEventId and retryMs.
|
|
107
|
+
this.dataBuf = '';
|
|
108
|
+
this.eventBuf = '';
|
|
109
|
+
if (data === '')
|
|
110
|
+
return null; // blank line with no data — emit nothing
|
|
111
|
+
if (data.endsWith('\n'))
|
|
112
|
+
data = data.slice(0, -1); // strip single trailing newline
|
|
113
|
+
// Measure/slice by Unicode CODE POINTS (not UTF-16 code units) to match the
|
|
114
|
+
// Python parser's `len(data)` / `data[:N]` semantics — otherwise non-BMP data
|
|
115
|
+
// (emoji, astral chars) would truncate at a different boundary and could split
|
|
116
|
+
// a surrogate pair, emitting invalid UTF-16. Array.from() iterates code points.
|
|
117
|
+
const cps = Array.from(data);
|
|
118
|
+
const truncated = cps.length > MAX_SSE_DATA;
|
|
119
|
+
return {
|
|
120
|
+
event: event === '' ? null : event,
|
|
121
|
+
data: truncated ? cps.slice(0, MAX_SSE_DATA).join('') : data,
|
|
122
|
+
id: this.lastEventId,
|
|
123
|
+
retry: this.retryMs,
|
|
124
|
+
truncated,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=sseParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sseParser.js","sourceRoot":"","sources":["../../src/helpers/sseParser.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts
CHANGED
|
@@ -8,6 +8,14 @@ export declare const sessionState: {
|
|
|
8
8
|
};
|
|
9
9
|
/** Apply page defaults: env > configure > 10s action / 30s navigation. */
|
|
10
10
|
export declare function applyPageTimeouts(page: Page): void;
|
|
11
|
+
/**
|
|
12
|
+
* SSE capture is CDP-based (Chromium-only). If a run configures
|
|
13
|
+
* devtools={ sse: true } on Firefox/WebKit, warn and hard-fail — never silently
|
|
14
|
+
* pass. WebSocket capture is cross-browser, so this gate is SSE-specific and
|
|
15
|
+
* leaves WS untouched. Defensive: if browser-type introspection fails, do not
|
|
16
|
+
* break the run.
|
|
17
|
+
*/
|
|
18
|
+
export declare function assertSseBrowserSupported(page: Page): void;
|
|
11
19
|
export declare function run(): Promise<void>;
|
|
12
20
|
/** Route per-test verdict to passTest or failTest. Exported for unit testing. */
|
|
13
21
|
export declare function routeVerdictToReporter(reporter: Pick<Reporter, 'passTest' | 'failTest'>): Promise<void>;
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+C,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAMpF,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAWrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAavD,eAAO,MAAM,YAAY,EAAE;IACzB,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAC0B,CAAC;AAErD,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAOlD;AA0ED,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+C,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAMpF,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAWrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAavD,eAAO,MAAM,YAAY,EAAE;IACzB,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAC0B,CAAC;AAErD,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAOlD;AA0ED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAS1D;AAED,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CA+FzC;AAQD,iFAAiF;AACjF,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAO7G"}
|
package/dist/session.js
CHANGED
|
@@ -17,7 +17,7 @@ import { log } from './log.js';
|
|
|
17
17
|
import { installHealPatch } from './healPatch.js';
|
|
18
18
|
import * as testState from './testState.js';
|
|
19
19
|
import { _resolveDownloadsDir } from './downloadsPath.js';
|
|
20
|
-
import { startCapture, stopCapture, resetCapture } from './helpers/devtools.js';
|
|
20
|
+
import { startCapture, stopCapture, stopSSECapture, resetCapture } from './helpers/devtools.js';
|
|
21
21
|
import { clearApiCallLog } from './helpers/apiCalls.js';
|
|
22
22
|
// Module-level session state — exposed so helpers like executeKaneCli (M12) can
|
|
23
23
|
// reach `relayUrl` to disconnect/reconnect mid-test. PY parity: _session.state.
|
|
@@ -115,6 +115,29 @@ async function createBrowserAndPage() {
|
|
|
115
115
|
applyPageTimeouts(page);
|
|
116
116
|
return { browser, context, page };
|
|
117
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* SSE capture is CDP-based (Chromium-only). If a run configures
|
|
120
|
+
* devtools={ sse: true } on Firefox/WebKit, warn and hard-fail — never silently
|
|
121
|
+
* pass. WebSocket capture is cross-browser, so this gate is SSE-specific and
|
|
122
|
+
* leaves WS untouched. Defensive: if browser-type introspection fails, do not
|
|
123
|
+
* break the run.
|
|
124
|
+
*/
|
|
125
|
+
export function assertSseBrowserSupported(page) {
|
|
126
|
+
const cfg = configure.get('devtools');
|
|
127
|
+
if (!cfg?.sse)
|
|
128
|
+
return;
|
|
129
|
+
let name;
|
|
130
|
+
try {
|
|
131
|
+
name = page.context().browser()?.browserType().name();
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
name = undefined;
|
|
135
|
+
}
|
|
136
|
+
if (name && name !== 'chromium') {
|
|
137
|
+
log.test(`SSE capture is Chromium-only; got ${name}. Failing the run.`);
|
|
138
|
+
throw new TestmuConfigError(`SSE network assertions require Chromium; this run targets ${name}.`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
118
141
|
export async function run() {
|
|
119
142
|
if (config.current.smart && !config.current.ltAuth) {
|
|
120
143
|
throw new TestmuConfigError('TESTMU_SMART=1 requires LT_USERNAME and LT_ACCESS_KEY. ' +
|
|
@@ -138,25 +161,28 @@ export async function run() {
|
|
|
138
161
|
// Deferred from module load because TS elides the `Locator` value-import
|
|
139
162
|
// (playwright .d.ts declares it as an interface). See healPatch.ts header.
|
|
140
163
|
installHealPatch(page);
|
|
141
|
-
// Start DevTools capture BEFORE user code (captures from first navigation)
|
|
142
|
-
resetCapture();
|
|
143
|
-
clearApiCallLog(); // api_calls log is per-run, like devtools capture
|
|
144
|
-
await startCapture(page, context);
|
|
145
|
-
// C9: download uploaded files to ~/Downloads/
|
|
146
|
-
const uploaded = configure.get('uploadedFiles');
|
|
147
|
-
if (uploaded.length) {
|
|
148
|
-
log.test(`Downloading ${uploaded.length} uploaded file(s)...`);
|
|
149
|
-
await downloadFiles(uploaded);
|
|
150
|
-
}
|
|
151
|
-
// C11: apply HE test-run config overrides (dataset params)
|
|
152
|
-
const overrides = await getTestParamsOverride();
|
|
153
|
-
const nOverrides = Object.keys(overrides).length;
|
|
154
|
-
if (nOverrides > 0) {
|
|
155
|
-
for (const [k, v] of Object.entries(overrides))
|
|
156
|
-
setVar(k, v, { scope: 'testParams' });
|
|
157
|
-
log.test(`Applied ${nOverrides} test param overrides from HE config`);
|
|
158
|
-
}
|
|
159
164
|
try {
|
|
165
|
+
// Start DevTools capture BEFORE user code (captures from first navigation)
|
|
166
|
+
resetCapture();
|
|
167
|
+
clearApiCallLog(); // api_calls log is per-run, like devtools capture
|
|
168
|
+
// Hard-fail SSE on non-Chromium BEFORE starting capture (teardown-protected
|
|
169
|
+
// by this try/finally, so the browser still closes on the raise).
|
|
170
|
+
assertSseBrowserSupported(page);
|
|
171
|
+
await startCapture(page, context);
|
|
172
|
+
// C9: download uploaded files to ~/Downloads/
|
|
173
|
+
const uploaded = configure.get('uploadedFiles');
|
|
174
|
+
if (uploaded.length) {
|
|
175
|
+
log.test(`Downloading ${uploaded.length} uploaded file(s)...`);
|
|
176
|
+
await downloadFiles(uploaded);
|
|
177
|
+
}
|
|
178
|
+
// C11: apply HE test-run config overrides (dataset params)
|
|
179
|
+
const overrides = await getTestParamsOverride();
|
|
180
|
+
const nOverrides = Object.keys(overrides).length;
|
|
181
|
+
if (nOverrides > 0) {
|
|
182
|
+
for (const [k, v] of Object.entries(overrides))
|
|
183
|
+
setVar(k, v, { scope: 'testParams' });
|
|
184
|
+
log.test(`Applied ${nOverrides} test param overrides from HE config`);
|
|
185
|
+
}
|
|
160
186
|
for (const t of _getRegistry()) {
|
|
161
187
|
await reporter.beginTest(t.name);
|
|
162
188
|
testState.reset();
|
|
@@ -176,10 +202,16 @@ export async function run() {
|
|
|
176
202
|
}
|
|
177
203
|
}
|
|
178
204
|
finally {
|
|
205
|
+
// stopCapture (sync) flips sseActive off + removes the new-page listener;
|
|
206
|
+
// stopSSECapture (async) drains pending tasks and detaches every CDP session.
|
|
179
207
|
try {
|
|
180
208
|
stopCapture(page);
|
|
181
209
|
}
|
|
182
210
|
catch { /* ignore */ }
|
|
211
|
+
try {
|
|
212
|
+
await stopSSECapture();
|
|
213
|
+
}
|
|
214
|
+
catch { /* ignore */ }
|
|
183
215
|
try {
|
|
184
216
|
await browser.close();
|
|
185
217
|
}
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAgD,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAiB,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,WAAW,EACX,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|