@wdio/selenium-devtools 0.0.1 → 1.0.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/LICENSE +21 -0
- package/package.json +15 -15
- package/dist/assertPatcher.d.ts +0 -11
- package/dist/assertPatcher.js +0 -123
- package/dist/assertPatcher.js.map +0 -1
- package/dist/bidi.d.ts +0 -6
- package/dist/bidi.js +0 -222
- package/dist/bidi.js.map +0 -1
- package/dist/constants.d.ts +0 -75
- package/dist/constants.js +0 -146
- package/dist/constants.js.map +0 -1
- package/dist/driverPatcher.d.ts +0 -4
- package/dist/driverPatcher.js +0 -256
- package/dist/driverPatcher.js.map +0 -1
- package/dist/helpers/detachedBackend.d.ts +0 -7
- package/dist/helpers/detachedBackend.js +0 -34
- package/dist/helpers/detachedBackend.js.map +0 -1
- package/dist/helpers/runtime.d.ts +0 -3
- package/dist/helpers/runtime.js +0 -47
- package/dist/helpers/runtime.js.map +0 -1
- package/dist/helpers/suiteManager.d.ts +0 -19
- package/dist/helpers/suiteManager.js +0 -131
- package/dist/helpers/suiteManager.js.map +0 -1
- package/dist/helpers/testManager.d.ts +0 -47
- package/dist/helpers/testManager.js +0 -158
- package/dist/helpers/testManager.js.map +0 -1
- package/dist/helpers/utils.d.ts +0 -26
- package/dist/helpers/utils.js +0 -187
- package/dist/helpers/utils.js.map +0 -1
- package/dist/helpers/videoEncoder.d.ts +0 -2
- package/dist/helpers/videoEncoder.js +0 -89
- package/dist/helpers/videoEncoder.js.map +0 -1
- package/dist/index.d.ts +0 -15
- package/dist/index.js +0 -801
- package/dist/index.js.map +0 -1
- package/dist/reporter.d.ts +0 -18
- package/dist/reporter.js +0 -72
- package/dist/reporter.js.map +0 -1
- package/dist/rerunManager.d.ts +0 -8
- package/dist/rerunManager.js +0 -78
- package/dist/rerunManager.js.map +0 -1
- package/dist/runnerHooks.d.ts +0 -6
- package/dist/runnerHooks.js +0 -594
- package/dist/runnerHooks.js.map +0 -1
- package/dist/screencast.d.ts +0 -11
- package/dist/screencast.js +0 -179
- package/dist/screencast.js.map +0 -1
- package/dist/session.d.ts +0 -48
- package/dist/session.js +0 -480
- package/dist/session.js.map +0 -1
- package/dist/setupConsole.d.ts +0 -1
- package/dist/setupConsole.js +0 -13
- package/dist/setupConsole.js.map +0 -1
- package/dist/types.d.ts +0 -235
- package/dist/types.js +0 -5
- package/dist/types.js.map +0 -1
package/dist/runnerHooks.js
DELETED
|
@@ -1,594 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'node:module';
|
|
2
|
-
import logger from '@wdio/logger';
|
|
3
|
-
import { findTestLineInFile } from './helpers/utils.js';
|
|
4
|
-
const log = logger('@wdio/selenium-devtools:runnerHooks');
|
|
5
|
-
// Jest is identified by `expect.getState()` (Chai's `expect` lacks it).
|
|
6
|
-
// Mocha is identified by `it`+`describe`+`beforeEach` without that.
|
|
7
|
-
// Cucumber doesn't expose globals — we detect via argv + a require probe.
|
|
8
|
-
export function detectRunner() {
|
|
9
|
-
const g = globalThis;
|
|
10
|
-
if ((process.argv[1] || '').toLowerCase().includes('cucumber')) {
|
|
11
|
-
return 'cucumber';
|
|
12
|
-
}
|
|
13
|
-
const hasBeforeEach = typeof g.beforeEach === 'function';
|
|
14
|
-
if (!hasBeforeEach) {
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
if (typeof g.expect?.getState === 'function') {
|
|
18
|
-
return 'jest';
|
|
19
|
-
}
|
|
20
|
-
if (typeof g.it === 'function' && typeof g.describe === 'function') {
|
|
21
|
-
return 'mocha';
|
|
22
|
-
}
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
export function tryRegisterRunnerHooks(callbacks) {
|
|
26
|
-
const runner = detectRunner();
|
|
27
|
-
if (runner === 'jest') {
|
|
28
|
-
return tryRegisterJestHooks(callbacks) ? 'jest' : false;
|
|
29
|
-
}
|
|
30
|
-
if (runner === 'mocha') {
|
|
31
|
-
return tryRegisterMochaHooks(callbacks) ? 'mocha' : false;
|
|
32
|
-
}
|
|
33
|
-
if (runner === 'cucumber') {
|
|
34
|
-
return tryRegisterCucumberHooks(callbacks) ? 'cucumber' : false;
|
|
35
|
-
}
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
// Use beforeEach/afterEach — wrapping `it()` breaks `it.skip` / `it.only`.
|
|
39
|
-
export function tryRegisterMochaHooks(callbacks) {
|
|
40
|
-
const g = globalThis;
|
|
41
|
-
if (typeof g.beforeEach !== 'function' || typeof g.afterEach !== 'function') {
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
// Counters used by the run-level before/after hooks below.
|
|
45
|
-
let runStartTs = 0;
|
|
46
|
-
let testsStarted = 0;
|
|
47
|
-
let testsPassed = 0;
|
|
48
|
-
let testsFailed = 0;
|
|
49
|
-
let testsPending = 0;
|
|
50
|
-
try {
|
|
51
|
-
if (typeof g.before === 'function' && typeof g.after === 'function') {
|
|
52
|
-
g.before(function () {
|
|
53
|
-
runStartTs = Date.now();
|
|
54
|
-
log.info('🧪 Test run starting');
|
|
55
|
-
});
|
|
56
|
-
g.after(function () {
|
|
57
|
-
const durationMs = Date.now() - runStartTs;
|
|
58
|
-
const duration = (durationMs / 1000).toFixed(2);
|
|
59
|
-
log.info(`🧪 Test run complete: ${testsPassed} passed, ${testsFailed} failed` +
|
|
60
|
-
(testsPending ? `, ${testsPending} pending` : '') +
|
|
61
|
-
` (${duration}s, ${testsStarted} total)`);
|
|
62
|
-
callbacks.onTestRunComplete?.({
|
|
63
|
-
passed: testsPassed,
|
|
64
|
-
failed: testsFailed,
|
|
65
|
-
pending: testsPending,
|
|
66
|
-
durationMs
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
g.beforeEach(function () {
|
|
71
|
-
// Fallback when `before` registered too late to fire.
|
|
72
|
-
if (runStartTs === 0) {
|
|
73
|
-
runStartTs = Date.now();
|
|
74
|
-
}
|
|
75
|
-
const test = this?.currentTest;
|
|
76
|
-
if (!test?.title) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
let callSource;
|
|
80
|
-
if (test.file) {
|
|
81
|
-
const line = findTestLineInFile(test.file, test.title);
|
|
82
|
-
callSource = line ? `${test.file}:${line}` : `${test.file}:0`;
|
|
83
|
-
}
|
|
84
|
-
log.info(`▶ Test: "${test.title}"`);
|
|
85
|
-
testsStarted++;
|
|
86
|
-
// Mocha's root suite has an empty title — skip so we don't blank the dashboard.
|
|
87
|
-
const parentTitle = typeof test.parent?.title === 'string' && test.parent.title.length > 0
|
|
88
|
-
? test.parent.title
|
|
89
|
-
: undefined;
|
|
90
|
-
let suiteCallSource;
|
|
91
|
-
if (parentTitle && test.file) {
|
|
92
|
-
const line = findTestLineInFile(test.file, parentTitle, 'suite');
|
|
93
|
-
suiteCallSource = line ? `${test.file}:${line}` : `${test.file}:0`;
|
|
94
|
-
}
|
|
95
|
-
callbacks.onTestStart(test.title, test.file, callSource, parentTitle, suiteCallSource);
|
|
96
|
-
});
|
|
97
|
-
g.afterEach(function () {
|
|
98
|
-
const test = this?.currentTest;
|
|
99
|
-
const state = test?.state === 'failed'
|
|
100
|
-
? 'failed'
|
|
101
|
-
: test?.state === 'passed'
|
|
102
|
-
? 'passed'
|
|
103
|
-
: test?.state === 'pending'
|
|
104
|
-
? 'pending'
|
|
105
|
-
: 'passed';
|
|
106
|
-
const icon = state === 'passed' ? '✓' : state === 'failed' ? '✗' : '○';
|
|
107
|
-
const duration = typeof test?.duration === 'number' ? ` (${test.duration}ms)` : '';
|
|
108
|
-
log.info(`${icon} Test: "${test?.title ?? 'unknown'}"${duration}`);
|
|
109
|
-
if (state === 'passed') {
|
|
110
|
-
testsPassed++;
|
|
111
|
-
}
|
|
112
|
-
else if (state === 'failed') {
|
|
113
|
-
testsFailed++;
|
|
114
|
-
}
|
|
115
|
-
else if (state === 'pending') {
|
|
116
|
-
testsPending++;
|
|
117
|
-
}
|
|
118
|
-
callbacks.onTestEnd(state);
|
|
119
|
-
});
|
|
120
|
-
log.info('✓ Mocha hooks registered — startTest/endTest will fire automatically per it()');
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
|
-
catch (err) {
|
|
124
|
-
log.warn(`Failed to register mocha hooks: ${err.message}`);
|
|
125
|
-
return false;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
// `suppressedErrors` only catches failed expect()s; we track thrown errors
|
|
129
|
-
// (e.g. selenium TimeoutError) separately to mark those tests failed too.
|
|
130
|
-
export function tryRegisterJestHooks(callbacks) {
|
|
131
|
-
const g = globalThis;
|
|
132
|
-
if (typeof g.beforeEach !== 'function' ||
|
|
133
|
-
typeof g.afterEach !== 'function' ||
|
|
134
|
-
typeof g.expect?.getState !== 'function') {
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
137
|
-
let runStartTs = 0;
|
|
138
|
-
let testsStarted = 0;
|
|
139
|
-
let testsPassed = 0;
|
|
140
|
-
let testsFailed = 0;
|
|
141
|
-
let currentName = '';
|
|
142
|
-
// `currentTestName` is the space-joined describe path + test name (ambiguous);
|
|
143
|
-
// we capture the describe stack at registration to recover suite + inner name.
|
|
144
|
-
const describeStack = [];
|
|
145
|
-
const testToDescribeStack = new Map();
|
|
146
|
-
const testFailures = new Map();
|
|
147
|
-
const wrapWithDescribePush = (orig) => {
|
|
148
|
-
const wrapped = ((name, fn, ...rest) => {
|
|
149
|
-
describeStack.push(name);
|
|
150
|
-
try {
|
|
151
|
-
return orig.call(g, name, fn, ...rest);
|
|
152
|
-
}
|
|
153
|
-
finally {
|
|
154
|
-
describeStack.pop();
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
// Preserve .skip / .only / .each modifiers.
|
|
158
|
-
for (const k of Reflect.ownKeys(orig)) {
|
|
159
|
-
try {
|
|
160
|
-
;
|
|
161
|
-
wrapped[k] = orig[k];
|
|
162
|
-
}
|
|
163
|
-
catch {
|
|
164
|
-
/* read-only own keys */
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
return wrapped;
|
|
168
|
-
};
|
|
169
|
-
const wrapTestRegistrar = (orig) => {
|
|
170
|
-
const wrapped = ((name, fn, timeout) => {
|
|
171
|
-
const stackAtRegistration = [...describeStack];
|
|
172
|
-
const jestKey = [...stackAtRegistration, name].join(' ');
|
|
173
|
-
const vitestKey = [...stackAtRegistration, name].join(' > ');
|
|
174
|
-
testToDescribeStack.set(jestKey, stackAtRegistration);
|
|
175
|
-
testToDescribeStack.set(vitestKey, stackAtRegistration);
|
|
176
|
-
let wrappedFn = fn;
|
|
177
|
-
if (typeof fn === 'function') {
|
|
178
|
-
wrappedFn = function (...fnArgs) {
|
|
179
|
-
// Key by inner test name — under Vitest the describe-stack
|
|
180
|
-
// capture isn't reliable (Vitest doesn't run describe bodies
|
|
181
|
-
// through our globalThis wrap), so the only stable identifier
|
|
182
|
-
// we share with afterEach is `name` itself.
|
|
183
|
-
const recordFailure = (err) => {
|
|
184
|
-
testFailures.set(name, err);
|
|
185
|
-
testFailures.set(jestKey, err);
|
|
186
|
-
testFailures.set(vitestKey, err);
|
|
187
|
-
};
|
|
188
|
-
let result;
|
|
189
|
-
try {
|
|
190
|
-
result = fn.apply(this, fnArgs);
|
|
191
|
-
}
|
|
192
|
-
catch (err) {
|
|
193
|
-
recordFailure(err);
|
|
194
|
-
throw err;
|
|
195
|
-
}
|
|
196
|
-
if (result && typeof result.then === 'function') {
|
|
197
|
-
return result.catch((err) => {
|
|
198
|
-
recordFailure(err);
|
|
199
|
-
throw err;
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
return result;
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
return orig.call(g, name, wrappedFn, timeout);
|
|
206
|
-
});
|
|
207
|
-
for (const k of Reflect.ownKeys(orig)) {
|
|
208
|
-
try {
|
|
209
|
-
;
|
|
210
|
-
wrapped[k] = orig[k];
|
|
211
|
-
}
|
|
212
|
-
catch {
|
|
213
|
-
/* read-only own keys */
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
return wrapped;
|
|
217
|
-
};
|
|
218
|
-
if (typeof g.describe === 'function') {
|
|
219
|
-
g.describe = wrapWithDescribePush(g.describe);
|
|
220
|
-
}
|
|
221
|
-
if (typeof g.test === 'function') {
|
|
222
|
-
g.test = wrapTestRegistrar(g.test);
|
|
223
|
-
}
|
|
224
|
-
if (typeof g.it === 'function') {
|
|
225
|
-
g.it = wrapTestRegistrar(g.it);
|
|
226
|
-
}
|
|
227
|
-
try {
|
|
228
|
-
if (typeof g.beforeAll === 'function' && typeof g.afterAll === 'function') {
|
|
229
|
-
g.beforeAll(() => {
|
|
230
|
-
runStartTs = Date.now();
|
|
231
|
-
log.info('🧪 Test run starting');
|
|
232
|
-
});
|
|
233
|
-
g.afterAll(() => {
|
|
234
|
-
const durationMs = Date.now() - runStartTs;
|
|
235
|
-
const duration = (durationMs / 1000).toFixed(2);
|
|
236
|
-
log.info(`🧪 Test run complete: ${testsPassed} passed, ${testsFailed} failed ` +
|
|
237
|
-
`(${duration}s, ${testsStarted} total)`);
|
|
238
|
-
callbacks.onTestRunComplete?.({
|
|
239
|
-
passed: testsPassed,
|
|
240
|
-
failed: testsFailed,
|
|
241
|
-
pending: 0,
|
|
242
|
-
durationMs
|
|
243
|
-
});
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
g.beforeEach(() => {
|
|
247
|
-
if (runStartTs === 0) {
|
|
248
|
-
runStartTs = Date.now();
|
|
249
|
-
}
|
|
250
|
-
const state = g.expect.getState();
|
|
251
|
-
const fullName = state?.currentTestName || '';
|
|
252
|
-
const file = state?.testPath || undefined;
|
|
253
|
-
if (!fullName) {
|
|
254
|
-
return;
|
|
255
|
-
}
|
|
256
|
-
// currentTestName: Jest joins describes with ' ', Vitest with ' > '.
|
|
257
|
-
const stack = testToDescribeStack.get(fullName) ?? [];
|
|
258
|
-
let innerName = fullName;
|
|
259
|
-
let suiteName;
|
|
260
|
-
if (stack.length > 0) {
|
|
261
|
-
const jestPath = stack.join(' ');
|
|
262
|
-
const vitestPath = stack.join(' > ');
|
|
263
|
-
if (fullName.startsWith(jestPath + ' ')) {
|
|
264
|
-
innerName = fullName.slice(jestPath.length + 1);
|
|
265
|
-
}
|
|
266
|
-
else if (fullName.startsWith(vitestPath + ' > ')) {
|
|
267
|
-
innerName = fullName.slice(vitestPath.length + 3);
|
|
268
|
-
}
|
|
269
|
-
suiteName = stack[0];
|
|
270
|
-
}
|
|
271
|
-
else if (fullName.includes(' > ')) {
|
|
272
|
-
const segments = fullName.split(' > ');
|
|
273
|
-
innerName = segments[segments.length - 1];
|
|
274
|
-
suiteName = segments[0];
|
|
275
|
-
}
|
|
276
|
-
currentName = innerName;
|
|
277
|
-
let callSource;
|
|
278
|
-
if (file) {
|
|
279
|
-
const line = findTestLineInFile(file, innerName);
|
|
280
|
-
callSource = line ? `${file}:${line}` : `${file}:0`;
|
|
281
|
-
}
|
|
282
|
-
let suiteCallSource;
|
|
283
|
-
if (suiteName && file) {
|
|
284
|
-
const line = findTestLineInFile(file, suiteName, 'suite');
|
|
285
|
-
suiteCallSource = line ? `${file}:${line}` : `${file}:0`;
|
|
286
|
-
}
|
|
287
|
-
log.info(`▶ Test: "${innerName}"`);
|
|
288
|
-
testsStarted++;
|
|
289
|
-
callbacks.onTestStart(innerName, file, callSource, suiteName, suiteCallSource);
|
|
290
|
-
});
|
|
291
|
-
g.afterEach(() => {
|
|
292
|
-
const state = g.expect.getState();
|
|
293
|
-
const fullName = state?.currentTestName || '';
|
|
294
|
-
// Try the recorded full-path keys first, then the inner test name —
|
|
295
|
-
// under Vitest the stack capture is empty so we keyed by inner name.
|
|
296
|
-
const innerKey = fullName.split(' > ').pop() ?? fullName.split(' ').pop() ?? fullName;
|
|
297
|
-
const thrown = testFailures.get(fullName) ??
|
|
298
|
-
testFailures.get(fullName.replace(/ > /g, ' ')) ??
|
|
299
|
-
testFailures.get(fullName.replace(/ /g, ' > ')) ??
|
|
300
|
-
testFailures.get(innerKey);
|
|
301
|
-
const expectFailed = Array.isArray(state?.suppressedErrors) &&
|
|
302
|
-
state.suppressedErrors.length > 0;
|
|
303
|
-
const failed = !!thrown || expectFailed;
|
|
304
|
-
if (thrown) {
|
|
305
|
-
testFailures.delete(fullName);
|
|
306
|
-
testFailures.delete(fullName.replace(/ > /g, ' '));
|
|
307
|
-
testFailures.delete(fullName.replace(/ /g, ' > '));
|
|
308
|
-
testFailures.delete(innerKey);
|
|
309
|
-
}
|
|
310
|
-
const finalState = failed ? 'failed' : 'passed';
|
|
311
|
-
const icon = finalState === 'passed' ? '✓' : '✗';
|
|
312
|
-
log.info(`${icon} Test: "${currentName || 'unknown'}"`);
|
|
313
|
-
if (finalState === 'passed') {
|
|
314
|
-
testsPassed++;
|
|
315
|
-
}
|
|
316
|
-
else {
|
|
317
|
-
testsFailed++;
|
|
318
|
-
}
|
|
319
|
-
callbacks.onTestEnd(finalState);
|
|
320
|
-
});
|
|
321
|
-
log.info('✓ Jest hooks registered — startTest/endTest will fire automatically per test()');
|
|
322
|
-
return true;
|
|
323
|
-
}
|
|
324
|
-
catch (err) {
|
|
325
|
-
log.warn(`Failed to register jest hooks: ${err.message}`);
|
|
326
|
-
return false;
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
// Loads `@cucumber/cucumber` from the user's install (peer-dep style) and
|
|
330
|
-
// registers BeforeAll/Before/After/AfterAll. The hook receives the full
|
|
331
|
-
// pickle so we can surface scenario name + feature name in the dashboard.
|
|
332
|
-
export function tryRegisterCucumberHooks(callbacks) {
|
|
333
|
-
const tryLoad = () => {
|
|
334
|
-
try {
|
|
335
|
-
return createRequire(`${process.cwd()}/`)('@cucumber/cucumber');
|
|
336
|
-
}
|
|
337
|
-
catch {
|
|
338
|
-
try {
|
|
339
|
-
return createRequire(import.meta.url)('@cucumber/cucumber');
|
|
340
|
-
}
|
|
341
|
-
catch {
|
|
342
|
-
return null;
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
};
|
|
346
|
-
const cucumber = tryLoad();
|
|
347
|
-
if (!cucumber) {
|
|
348
|
-
return false;
|
|
349
|
-
}
|
|
350
|
-
const { Before, After, BeforeAll, AfterAll, BeforeStep, AfterStep } = cucumber;
|
|
351
|
-
if (typeof Before !== 'function' || typeof After !== 'function') {
|
|
352
|
-
return false;
|
|
353
|
-
}
|
|
354
|
-
// BeforeStep doesn't expose which step definition matched, so we wrap the
|
|
355
|
-
// Given/When/Then registrars to snapshot (pattern → uri:line) at registration.
|
|
356
|
-
const stepDefinitions = [];
|
|
357
|
-
const selfUrl = (() => {
|
|
358
|
-
try {
|
|
359
|
-
return import.meta.url;
|
|
360
|
-
}
|
|
361
|
-
catch {
|
|
362
|
-
return '';
|
|
363
|
-
}
|
|
364
|
-
})();
|
|
365
|
-
const selfPath = selfUrl.replace(/^file:\/\//, '');
|
|
366
|
-
const isSelfFrame = (line) => {
|
|
367
|
-
if (!selfPath) {
|
|
368
|
-
return false;
|
|
369
|
-
}
|
|
370
|
-
return line.includes(selfPath) || line.includes(selfUrl);
|
|
371
|
-
};
|
|
372
|
-
const captureCallSite = () => {
|
|
373
|
-
const stack = new Error().stack || '';
|
|
374
|
-
for (const raw of stack.split('\n')) {
|
|
375
|
-
const line = raw.trim();
|
|
376
|
-
if (!line.startsWith('at ')) {
|
|
377
|
-
continue;
|
|
378
|
-
}
|
|
379
|
-
if (line.includes('@cucumber/') ||
|
|
380
|
-
line.includes('node:internal') ||
|
|
381
|
-
isSelfFrame(line)) {
|
|
382
|
-
continue;
|
|
383
|
-
}
|
|
384
|
-
const m = /\(([^)]+):(\d+):\d+\)$/.exec(line) || /at\s+(.+):(\d+):\d+$/.exec(line);
|
|
385
|
-
if (m) {
|
|
386
|
-
let uri = m[1];
|
|
387
|
-
if (uri.startsWith('file://')) {
|
|
388
|
-
uri = uri.replace(/^file:\/\//, '');
|
|
389
|
-
}
|
|
390
|
-
return { uri, line: Number(m[2]) };
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
return null;
|
|
394
|
-
};
|
|
395
|
-
for (const name of ['Given', 'When', 'Then', 'defineStep']) {
|
|
396
|
-
if (typeof cucumber[name] !== 'function') {
|
|
397
|
-
continue;
|
|
398
|
-
}
|
|
399
|
-
const orig = cucumber[name];
|
|
400
|
-
cucumber[name] = function patchedRegistrar(...args) {
|
|
401
|
-
const callSite = captureCallSite();
|
|
402
|
-
if (callSite && args.length > 0) {
|
|
403
|
-
stepDefinitions.push({
|
|
404
|
-
pattern: args[0],
|
|
405
|
-
uri: callSite.uri,
|
|
406
|
-
line: callSite.line
|
|
407
|
-
});
|
|
408
|
-
}
|
|
409
|
-
return orig.apply(this, args);
|
|
410
|
-
};
|
|
411
|
-
Object.assign(cucumber[name], orig);
|
|
412
|
-
}
|
|
413
|
-
// Cucumber-expression → regex. Handles built-in placeholders only; custom
|
|
414
|
-
// types fall through to wildcard. Braces MUST be in the escape set so the
|
|
415
|
-
// subsequent `\{string\}`-shaped replacements can match.
|
|
416
|
-
const patternToRegex = (pattern) => {
|
|
417
|
-
const escaped = pattern.replace(/[{}.*+?^$|()[\]\\]/g, '\\$&');
|
|
418
|
-
const expanded = escaped
|
|
419
|
-
.replace(/\\\{string\\\}/g, '"([^"]*)"')
|
|
420
|
-
.replace(/\\\{int\\\}/g, '(-?\\d+)')
|
|
421
|
-
.replace(/\\\{float\\\}/g, '(-?\\d*\\.?\\d+)')
|
|
422
|
-
.replace(/\\\{word\\\}/g, '([^\\s]+)')
|
|
423
|
-
.replace(/\\\{[^}]*\\\}/g, '(.+?)');
|
|
424
|
-
return new RegExp(`^${expanded}$`);
|
|
425
|
-
};
|
|
426
|
-
const findStepDefinition = (text) => {
|
|
427
|
-
for (const def of stepDefinitions) {
|
|
428
|
-
let regex;
|
|
429
|
-
try {
|
|
430
|
-
regex =
|
|
431
|
-
def.pattern instanceof RegExp
|
|
432
|
-
? def.pattern
|
|
433
|
-
: patternToRegex(String(def.pattern));
|
|
434
|
-
}
|
|
435
|
-
catch {
|
|
436
|
-
continue;
|
|
437
|
-
}
|
|
438
|
-
if (regex.test(text)) {
|
|
439
|
-
return { uri: def.uri, line: def.line };
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
return null;
|
|
443
|
-
};
|
|
444
|
-
let runStartTs = 0;
|
|
445
|
-
let testsStarted = 0;
|
|
446
|
-
let testsPassed = 0;
|
|
447
|
-
let testsFailed = 0;
|
|
448
|
-
let testsPending = 0;
|
|
449
|
-
try {
|
|
450
|
-
if (typeof BeforeAll === 'function' && typeof AfterAll === 'function') {
|
|
451
|
-
BeforeAll(() => {
|
|
452
|
-
runStartTs = Date.now();
|
|
453
|
-
log.info('🧪 Test run starting');
|
|
454
|
-
});
|
|
455
|
-
AfterAll(() => {
|
|
456
|
-
const durationMs = Date.now() - runStartTs;
|
|
457
|
-
const duration = (durationMs / 1000).toFixed(2);
|
|
458
|
-
log.info(`🧪 Test run complete: ${testsPassed} passed, ${testsFailed} failed` +
|
|
459
|
-
(testsPending ? `, ${testsPending} pending` : '') +
|
|
460
|
-
` (${duration}s, ${testsStarted} total)`);
|
|
461
|
-
callbacks.onTestRunComplete?.({
|
|
462
|
-
passed: testsPassed,
|
|
463
|
-
failed: testsFailed,
|
|
464
|
-
pending: testsPending,
|
|
465
|
-
durationMs
|
|
466
|
-
});
|
|
467
|
-
});
|
|
468
|
-
}
|
|
469
|
-
// PickleStep has no `location.line`; only the gherkinDocument AST does.
|
|
470
|
-
// These maps bridge astNodeId → line for the dashboard's test-lens.
|
|
471
|
-
let stepKeywordById = new Map();
|
|
472
|
-
let stepLineById = new Map();
|
|
473
|
-
let scenarioLineById = new Map();
|
|
474
|
-
Before(function (testCase) {
|
|
475
|
-
if (runStartTs === 0) {
|
|
476
|
-
runStartTs = Date.now();
|
|
477
|
-
}
|
|
478
|
-
const pickle = testCase?.pickle;
|
|
479
|
-
const name = pickle?.name ?? 'unknown scenario';
|
|
480
|
-
const file = pickle?.uri;
|
|
481
|
-
const featureName = testCase?.gherkinDocument?.feature?.name;
|
|
482
|
-
const featureLine = testCase?.gherkinDocument?.feature?.location?.line;
|
|
483
|
-
stepKeywordById = new Map();
|
|
484
|
-
stepLineById = new Map();
|
|
485
|
-
scenarioLineById = new Map();
|
|
486
|
-
const featureChildren = testCase?.gherkinDocument?.feature?.children ?? [];
|
|
487
|
-
for (const child of featureChildren) {
|
|
488
|
-
if (child?.scenario?.id && child?.scenario?.location?.line) {
|
|
489
|
-
scenarioLineById.set(child.scenario.id, child.scenario.location.line);
|
|
490
|
-
}
|
|
491
|
-
const steps = child?.scenario?.steps ?? child?.background?.steps ?? [];
|
|
492
|
-
for (const step of steps) {
|
|
493
|
-
if (step?.id && typeof step?.keyword === 'string') {
|
|
494
|
-
stepKeywordById.set(step.id, step.keyword);
|
|
495
|
-
}
|
|
496
|
-
if (step?.id && step?.location?.line) {
|
|
497
|
-
stepLineById.set(step.id, step.location.line);
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
const scenarioLineFromMap = Array.isArray(pickle?.astNodeIds) &&
|
|
502
|
-
scenarioLineById.get(pickle.astNodeIds[0]);
|
|
503
|
-
const scenarioLine = scenarioLineFromMap || pickle?.location?.line;
|
|
504
|
-
const callSource = file
|
|
505
|
-
? scenarioLine
|
|
506
|
-
? `${file}:${scenarioLine}`
|
|
507
|
-
: `${file}:0`
|
|
508
|
-
: undefined;
|
|
509
|
-
const featureCallSource = file
|
|
510
|
-
? featureLine
|
|
511
|
-
? `${file}:${featureLine}`
|
|
512
|
-
: `${file}:1`
|
|
513
|
-
: undefined;
|
|
514
|
-
log.info(`▶ Scenario: "${name}"`);
|
|
515
|
-
testsStarted++;
|
|
516
|
-
callbacks.onScenarioStart?.(name, file, callSource, featureName, featureCallSource);
|
|
517
|
-
});
|
|
518
|
-
if (typeof BeforeStep === 'function') {
|
|
519
|
-
BeforeStep(function (arg) {
|
|
520
|
-
const pickleStep = arg?.pickleStep;
|
|
521
|
-
if (!pickleStep) {
|
|
522
|
-
return;
|
|
523
|
-
}
|
|
524
|
-
const astId = Array.isArray(pickleStep.astNodeIds) && pickleStep.astNodeIds[0];
|
|
525
|
-
const keyword = (astId && stepKeywordById.get(astId)) || '';
|
|
526
|
-
const text = pickleStep.text ?? '';
|
|
527
|
-
const title = `${keyword}${text}`.trim();
|
|
528
|
-
// Prefer the step-definition source over the .feature line — the
|
|
529
|
-
// dashboard's Source panel loads `file`, not `callSource`.
|
|
530
|
-
const stepDef = findStepDefinition(text);
|
|
531
|
-
const featureFile = arg?.pickle?.uri;
|
|
532
|
-
const featureLineForStep = (astId && stepLineById.get(astId)) || pickleStep?.location?.line;
|
|
533
|
-
const file = stepDef ? stepDef.uri : featureFile;
|
|
534
|
-
const callSource = stepDef
|
|
535
|
-
? `${stepDef.uri}:${stepDef.line}`
|
|
536
|
-
: featureFile
|
|
537
|
-
? featureLineForStep
|
|
538
|
-
? `${featureFile}:${featureLineForStep}`
|
|
539
|
-
: `${featureFile}:0`
|
|
540
|
-
: undefined;
|
|
541
|
-
callbacks.onTestStart(title, file, callSource);
|
|
542
|
-
});
|
|
543
|
-
}
|
|
544
|
-
if (typeof AfterStep === 'function') {
|
|
545
|
-
AfterStep(function (arg) {
|
|
546
|
-
const status = String(arg?.result?.status ?? '').toUpperCase();
|
|
547
|
-
let state = 'passed';
|
|
548
|
-
if (status === 'FAILED' ||
|
|
549
|
-
status === 'UNDEFINED' ||
|
|
550
|
-
status === 'AMBIGUOUS') {
|
|
551
|
-
state = 'failed';
|
|
552
|
-
}
|
|
553
|
-
else if (status === 'PENDING') {
|
|
554
|
-
state = 'pending';
|
|
555
|
-
}
|
|
556
|
-
else if (status === 'SKIPPED') {
|
|
557
|
-
state = 'skipped';
|
|
558
|
-
}
|
|
559
|
-
callbacks.onTestEnd(state);
|
|
560
|
-
});
|
|
561
|
-
}
|
|
562
|
-
After(function (testCase) {
|
|
563
|
-
const status = String(testCase?.result?.status ?? '').toUpperCase();
|
|
564
|
-
let state = 'passed';
|
|
565
|
-
if (status === 'FAILED' ||
|
|
566
|
-
status === 'UNDEFINED' ||
|
|
567
|
-
status === 'AMBIGUOUS') {
|
|
568
|
-
state = 'failed';
|
|
569
|
-
}
|
|
570
|
-
else if (status === 'PENDING' || status === 'SKIPPED') {
|
|
571
|
-
state = 'pending';
|
|
572
|
-
}
|
|
573
|
-
const icon = state === 'passed' ? '✓' : state === 'failed' ? '✗' : '○';
|
|
574
|
-
log.info(`${icon} Scenario: "${testCase?.pickle?.name ?? 'unknown'}"`);
|
|
575
|
-
if (state === 'passed') {
|
|
576
|
-
testsPassed++;
|
|
577
|
-
}
|
|
578
|
-
else if (state === 'failed') {
|
|
579
|
-
testsFailed++;
|
|
580
|
-
}
|
|
581
|
-
else {
|
|
582
|
-
testsPending++;
|
|
583
|
-
}
|
|
584
|
-
callbacks.onScenarioEnd?.(state);
|
|
585
|
-
});
|
|
586
|
-
log.info('✓ Cucumber hooks registered — Before/After=scenario sub-suite, BeforeStep/AfterStep=Gherkin step tests');
|
|
587
|
-
return true;
|
|
588
|
-
}
|
|
589
|
-
catch (err) {
|
|
590
|
-
log.warn(`Failed to register cucumber hooks: ${err.message}`);
|
|
591
|
-
return false;
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
|
-
//# sourceMappingURL=runnerHooks.js.map
|
package/dist/runnerHooks.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runnerHooks.js","sourceRoot":"","sources":["../src/runnerHooks.ts"],"names":[],"mappings":"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"}
|
package/dist/screencast.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { ScreencastFrame, ScreencastOptions, SeleniumDriverLike } from './types.js';
|
|
2
|
-
export declare class ScreencastRecorder {
|
|
3
|
-
#private;
|
|
4
|
-
constructor(options?: ScreencastOptions);
|
|
5
|
-
start(driver: SeleniumDriverLike): Promise<void>;
|
|
6
|
-
stop(): Promise<void>;
|
|
7
|
-
setStartMarker(): void;
|
|
8
|
-
get frames(): ScreencastFrame[];
|
|
9
|
-
get duration(): number;
|
|
10
|
-
get isRecording(): boolean;
|
|
11
|
-
}
|