@qavajs/playwright-runner-adapter 2.4.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/README.md +160 -11
- package/adapter/PlaywrightWorld.d.ts +8 -6
- package/adapter/PlaywrightWorld.js +21 -8
- package/adapter/PlaywrightWorld.js.map +1 -1
- package/adapter/Template.d.ts +13 -2
- package/adapter/Template.js +57 -8
- package/adapter/Template.js.map +1 -1
- package/adapter/cucumberAdapter.d.ts +7 -0
- package/adapter/cucumberAdapter.js +253 -98
- package/adapter/cucumberAdapter.js.map +1 -1
- package/adapter/filter.d.ts +8 -0
- package/adapter/filter.js +27 -1
- package/adapter/filter.js.map +1 -1
- package/adapter/gherkin.d.ts +45 -0
- package/adapter/gherkin.js +155 -0
- package/adapter/gherkin.js.map +1 -0
- package/adapter/index.d.ts +1 -0
- package/adapter/index.js +1 -0
- package/adapter/index.js.map +1 -1
- package/adapter/js/PlaywrightWorld.d.ts +8 -6
- package/adapter/js/PlaywrightWorld.js +21 -8
- package/adapter/js/Template.d.ts +13 -2
- package/adapter/js/Template.js +57 -8
- package/adapter/js/cucumberAdapter.d.ts +7 -0
- package/adapter/js/cucumberAdapter.js +253 -98
- package/adapter/js/filter.d.ts +8 -0
- package/adapter/js/filter.js +27 -1
- package/adapter/js/gherkin.d.ts +45 -0
- package/adapter/js/gherkin.js +154 -0
- package/adapter/js/index.d.ts +1 -0
- package/adapter/js/index.js +1 -0
- package/adapter/js/loader.d.ts +9 -1
- package/adapter/js/loader.js +35 -15
- package/adapter/js/testDetails.d.ts +10 -0
- package/adapter/js/testDetails.js +27 -1
- package/adapter/js/timeout.d.ts +17 -0
- package/adapter/js/timeout.js +24 -0
- package/adapter/js/types.d.ts +35 -6
- package/adapter/js/withWorld.d.ts +43 -0
- package/adapter/js/withWorld.js +16 -0
- package/adapter/loader.d.ts +9 -1
- package/adapter/loader.js +35 -15
- package/adapter/loader.js.map +1 -1
- package/adapter/testDetails.d.ts +10 -0
- package/adapter/testDetails.js +27 -1
- package/adapter/testDetails.js.map +1 -1
- package/adapter/timeout.d.ts +17 -0
- package/adapter/timeout.js +25 -0
- package/adapter/timeout.js.map +1 -0
- package/adapter/types.d.ts +35 -6
- package/adapter/withWorld.d.ts +43 -0
- package/adapter/withWorld.js +17 -0
- package/adapter/withWorld.js.map +1 -0
- package/package.json +6 -4
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTagFilter = createTagFilter;
|
|
3
4
|
exports.defineConfig = defineConfig;
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
const node_stream_1 = require("node:stream");
|
|
7
|
+
const node_util_1 = require("node:util");
|
|
8
|
+
const filter_1 = require("./filter");
|
|
4
9
|
const loader_1 = require("./loader");
|
|
5
10
|
const testDetails_1 = require("./testDetails");
|
|
11
|
+
const timeout_1 = require("./timeout");
|
|
12
|
+
const gherkin_1 = require("./gherkin");
|
|
6
13
|
const HOOK_NAMES = {
|
|
7
14
|
BEFORE_ALL: 'Before All',
|
|
8
15
|
AFTER_ALL: 'After All',
|
|
@@ -10,21 +17,28 @@ const HOOK_NAMES = {
|
|
|
10
17
|
AFTER: 'After',
|
|
11
18
|
BEFORE_STEP: 'Before Step',
|
|
12
19
|
AFTER_STEP: 'After Step',
|
|
13
|
-
WORLD: 'World',
|
|
14
|
-
BEFORE_HOOKS: 'Before Hooks',
|
|
15
|
-
AFTER_HOOKS: 'After Hooks'
|
|
16
20
|
};
|
|
17
21
|
const DEFAULT_VALUES = {
|
|
18
22
|
ATTACHMENT_FILENAME: 'attachment',
|
|
19
|
-
|
|
23
|
+
LOG_ATTACHMENT_NAME: 'log',
|
|
24
|
+
TEXT_CONTENT_TYPE: 'text/plain',
|
|
25
|
+
BINARY_CONTENT_TYPE: 'application/octet-stream',
|
|
20
26
|
COLUMN: 1,
|
|
21
27
|
TEST_CASE_ID: '0',
|
|
22
28
|
TEST_STEP_ID: '0'
|
|
23
29
|
};
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
const BASE64_SUFFIX = ';base64';
|
|
31
|
+
/**
|
|
32
|
+
* Error raised for undefined, ambiguous and pending steps
|
|
33
|
+
*/
|
|
34
|
+
class StepStatusError extends Error {
|
|
35
|
+
status;
|
|
36
|
+
constructor(message, status) {
|
|
37
|
+
super(message);
|
|
38
|
+
this.status = status;
|
|
39
|
+
this.name = 'StepStatusError';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
28
42
|
function getLine(step) {
|
|
29
43
|
if (!step.uri)
|
|
30
44
|
return {};
|
|
@@ -36,22 +50,42 @@ function getLine(step) {
|
|
|
36
50
|
}
|
|
37
51
|
};
|
|
38
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Log data to the report as `log` attachment of the current step (same as cucumber `this.log`)
|
|
55
|
+
*/
|
|
39
56
|
function log(data) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
if (pickleStep.argument) {
|
|
50
|
-
step += pickleStep.argument.docString
|
|
51
|
-
? STEP_ARGUMENT_LABELS.DOC_STRING
|
|
52
|
-
: STEP_ARGUMENT_LABELS.DATA_TABLE;
|
|
57
|
+
const body = typeof data === 'string' ? data : (0, node_util_1.inspect)(data);
|
|
58
|
+
this.test.info()
|
|
59
|
+
.attach(DEFAULT_VALUES.LOG_ATTACHMENT_NAME, { body, contentType: DEFAULT_VALUES.TEXT_CONTENT_TYPE })
|
|
60
|
+
.catch(() => console.log(body));
|
|
61
|
+
}
|
|
62
|
+
async function streamToBuffer(stream) {
|
|
63
|
+
const chunks = [];
|
|
64
|
+
for await (const chunk of stream) {
|
|
65
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
53
66
|
}
|
|
54
|
-
return
|
|
67
|
+
return Buffer.concat(chunks);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Attach data to the report. Compatible with cucumber `this.attach`:
|
|
71
|
+
* - `attach(data, 'image/png')` or `attach(data, { mediaType, fileName })`
|
|
72
|
+
* - `attach(base64String, 'image/png;base64')` decodes base64 data
|
|
73
|
+
* - readable streams are buffered
|
|
74
|
+
*/
|
|
75
|
+
async function attach(data, mediaTypeOrOptions) {
|
|
76
|
+
const options = typeof mediaTypeOrOptions === 'string'
|
|
77
|
+
? { mediaType: mediaTypeOrOptions }
|
|
78
|
+
: mediaTypeOrOptions ?? {};
|
|
79
|
+
let body = data instanceof node_stream_1.Readable ? await streamToBuffer(data) : data;
|
|
80
|
+
let contentType = options.mediaType;
|
|
81
|
+
if (contentType?.endsWith(BASE64_SUFFIX)) {
|
|
82
|
+
contentType = contentType.slice(0, -BASE64_SUFFIX.length);
|
|
83
|
+
if (typeof body === 'string')
|
|
84
|
+
body = Buffer.from(body, 'base64');
|
|
85
|
+
}
|
|
86
|
+
contentType ??= typeof body === 'string' ? DEFAULT_VALUES.TEXT_CONTENT_TYPE : DEFAULT_VALUES.BINARY_CONTENT_TYPE;
|
|
87
|
+
const fileName = options.fileName ?? DEFAULT_VALUES.ATTACHMENT_FILENAME;
|
|
88
|
+
return this.test.info().attach(fileName, { body, contentType });
|
|
55
89
|
}
|
|
56
90
|
function createTestExecutionResult() {
|
|
57
91
|
return {
|
|
@@ -74,24 +108,29 @@ function createCaseHookPayload(feature, testCase) {
|
|
|
74
108
|
testCaseStartedId: DEFAULT_VALUES.TEST_CASE_ID
|
|
75
109
|
};
|
|
76
110
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
const hookName = hook.name ?? defaultHookName;
|
|
83
|
-
const location = getLine(hook);
|
|
84
|
-
await test.step(hookName, () => hook.code.apply(world, [createPayload(hook)]), location);
|
|
85
|
-
}
|
|
111
|
+
/**
|
|
112
|
+
* Invoke hook code applying `{ timeout }` option or default timeout
|
|
113
|
+
*/
|
|
114
|
+
function invokeHook(hook, thisArg, args, hookName, defaultTimeout) {
|
|
115
|
+
return (0, timeout_1.runWithTimeout)(() => hook.code.apply(thisArg, args), (0, timeout_1.resolveTimeout)(hook, defaultTimeout), `${hookName} hook timed out after {timeout} ms\n at ${hook.uri}:${hook.line}`);
|
|
86
116
|
}
|
|
87
|
-
|
|
117
|
+
/**
|
|
118
|
+
* Execute hooks applicable to the test case.
|
|
119
|
+
* @returns `'skipped'` if any hook returned `'skipped'` (cucumber semantics)
|
|
120
|
+
*/
|
|
121
|
+
async function executeHooks(test, hooks, world, testCase, defaultHookName, createPayload, defaultTimeout) {
|
|
122
|
+
let status;
|
|
88
123
|
for (const hook of hooks) {
|
|
89
124
|
if (!hook.appliesToTestCase(testCase)) {
|
|
90
125
|
continue;
|
|
91
126
|
}
|
|
127
|
+
const hookName = hook.name ?? defaultHookName;
|
|
92
128
|
const location = getLine(hook);
|
|
93
|
-
await test.step(hookName, () => hook
|
|
129
|
+
const returned = await test.step(hookName, () => invokeHook(hook, world, [createPayload(hook)], hookName, defaultTimeout), location);
|
|
130
|
+
if (returned === 'skipped')
|
|
131
|
+
status = 'skipped';
|
|
94
132
|
}
|
|
133
|
+
return status;
|
|
95
134
|
}
|
|
96
135
|
function createStepHookParameter(feature, testCase, pickleStep, result) {
|
|
97
136
|
return {
|
|
@@ -111,104 +150,220 @@ function createCaseHookParameter(feature, testCase, result) {
|
|
|
111
150
|
result: createHookResult(result)
|
|
112
151
|
};
|
|
113
152
|
}
|
|
114
|
-
function findSingleStepDefinition(supportCodeLibrary, pickleStep,
|
|
153
|
+
function findSingleStepDefinition(supportCodeLibrary, pickleStep, stepLocation) {
|
|
115
154
|
const matchingSteps = supportCodeLibrary.stepDefinitions
|
|
116
155
|
.filter(stepDefinition => stepDefinition.matchesStepName(pickleStep.text));
|
|
117
156
|
if (matchingSteps.length === 0) {
|
|
118
|
-
|
|
157
|
+
const snippet = (0, gherkin_1.buildSnippet)(supportCodeLibrary, pickleStep);
|
|
158
|
+
throw new StepStatusError([
|
|
159
|
+
`Step '${pickleStep.text}' is not defined`,
|
|
160
|
+
` at ${stepLocation}`,
|
|
161
|
+
...(snippet ? ['', 'Implement it with the following snippet:', '', snippet] : [])
|
|
162
|
+
].join('\n'), 'undefined');
|
|
119
163
|
}
|
|
120
164
|
if (matchingSteps.length > 1) {
|
|
121
165
|
const locations = matchingSteps
|
|
122
|
-
.map(s => ` ${s.uri}:${s.line}`)
|
|
166
|
+
.map(s => ` ${String(s.pattern ?? '')} - ${s.uri}:${s.line}`)
|
|
123
167
|
.join('\n');
|
|
124
|
-
throw new
|
|
168
|
+
throw new StepStatusError(`Step '${pickleStep.text}' matches multiple step definitions:\n${locations}\n at ${stepLocation}`, 'ambiguous');
|
|
125
169
|
}
|
|
126
170
|
return matchingSteps[0];
|
|
127
171
|
}
|
|
128
|
-
function executeBeforeAllHooks(test, hooks) {
|
|
172
|
+
function executeBeforeAllHooks(test, hooks, defaultTimeout) {
|
|
129
173
|
if (hooks.length === 0)
|
|
130
174
|
return;
|
|
131
175
|
test.beforeAll(async () => {
|
|
132
176
|
for (const hook of hooks) {
|
|
133
177
|
const location = getLine(hook);
|
|
134
|
-
await test.step(HOOK_NAMES.BEFORE_ALL, () => hook
|
|
178
|
+
await test.step(HOOK_NAMES.BEFORE_ALL, () => invokeHook(hook, {}, [], HOOK_NAMES.BEFORE_ALL, defaultTimeout), location);
|
|
135
179
|
}
|
|
136
180
|
});
|
|
137
181
|
}
|
|
138
|
-
function executeAfterAllHooks(test, hooks) {
|
|
182
|
+
function executeAfterAllHooks(test, hooks, defaultTimeout) {
|
|
139
183
|
if (hooks.length === 0)
|
|
140
184
|
return;
|
|
141
185
|
test.afterAll(async () => {
|
|
142
186
|
for (const hook of hooks) {
|
|
143
187
|
const location = getLine(hook);
|
|
144
|
-
await test.step(HOOK_NAMES.AFTER_ALL, () => hook
|
|
188
|
+
await test.step(HOOK_NAMES.AFTER_ALL, () => invokeHook(hook, {}, [], HOOK_NAMES.AFTER_ALL, defaultTimeout), location);
|
|
145
189
|
}
|
|
146
190
|
});
|
|
147
191
|
}
|
|
192
|
+
/**
|
|
193
|
+
* Create scenario filter from tag expressions keyed by their source (used in error messages),
|
|
194
|
+
* e.g. `{ 'tags option': config.tags, 'CUCUMBER_TAGS env variable': process.env.CUCUMBER_TAGS }`.
|
|
195
|
+
* All expressions must match.
|
|
196
|
+
*/
|
|
197
|
+
function createTagFilter(sources) {
|
|
198
|
+
const nodes = Object.entries(sources)
|
|
199
|
+
.map(([source, expression]) => [source, expression?.trim()])
|
|
200
|
+
.filter((entry) => !!entry[1])
|
|
201
|
+
.map(([source, expression]) => (0, filter_1.parseTagExpression)(expression, source));
|
|
202
|
+
return pickle => {
|
|
203
|
+
const tagNames = pickle.tags.map(tag => tag.name);
|
|
204
|
+
return nodes.every(node => node.evaluate(tagNames));
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* `@retries(n)` is applied with `test.describe.configure`, which works per feature only
|
|
209
|
+
*/
|
|
210
|
+
function assertRetriesOnFeatureOnly(feature, featureTags) {
|
|
211
|
+
const featureTagNames = new Set(featureTags.map(tag => tag.name));
|
|
212
|
+
for (const testCase of feature.tests) {
|
|
213
|
+
const misplaced = testCase.tags.find(tag => tag.name.startsWith('@retries(') && !featureTagNames.has(tag.name));
|
|
214
|
+
if (misplaced) {
|
|
215
|
+
throw new Error(`${misplaced.name} is supported only on Feature, found on '${testCase.name}' in ${feature.uri}`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Make feature titles unique, so scenarios from features with the same name do not clash
|
|
221
|
+
*/
|
|
222
|
+
function uniqueFeatureTitles(features) {
|
|
223
|
+
const titles = features.map(feature => (0, gherkin_1.featureTitle)(feature.feature, (0, node_path_1.relative)(process.cwd(), feature.uri)));
|
|
224
|
+
return titles.map((title, index) => titles.indexOf(title) === index
|
|
225
|
+
? title
|
|
226
|
+
: `${title} (${(0, node_path_1.relative)(process.cwd(), features[index].uri)})`);
|
|
227
|
+
}
|
|
148
228
|
function defineConfig(config) {
|
|
149
229
|
const { features, supportCodeLibrary } = (0, loader_1.load)(config);
|
|
150
|
-
const
|
|
230
|
+
const strict = config.strict ?? true;
|
|
231
|
+
const worldParameters = config.worldParameters ?? {};
|
|
232
|
+
const tagFilter = createTagFilter({
|
|
233
|
+
'`tags` config option': config.tags,
|
|
234
|
+
'CUCUMBER_TAGS env variable': process.env.CUCUMBER_TAGS
|
|
235
|
+
});
|
|
236
|
+
const stepLocationMode = config.stepLocation ?? 'definition';
|
|
237
|
+
const fixture = new supportCodeLibrary.World({ config, parameters: worldParameters });
|
|
151
238
|
const test = fixture.test;
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
239
|
+
const defaultTimeout = supportCodeLibrary.defaultTimeout;
|
|
240
|
+
executeBeforeAllHooks(test, supportCodeLibrary.beforeTestRunHookDefinitions, defaultTimeout);
|
|
241
|
+
const titles = uniqueFeatureTitles(features);
|
|
242
|
+
features.forEach((feature, featureIndex) => {
|
|
243
|
+
const tests = feature.tests.filter(tagFilter);
|
|
244
|
+
if (tests.length === 0)
|
|
245
|
+
return;
|
|
246
|
+
const positions = (0, gherkin_1.collectPositions)(feature.gherkinDocument);
|
|
247
|
+
const featureTags = feature.gherkinDocument.feature?.tags ?? [];
|
|
248
|
+
const retries = (0, testDetails_1.resolveRetries)(featureTags);
|
|
249
|
+
assertRetriesOnFeatureOnly(feature, featureTags);
|
|
250
|
+
const featureLocation = feature.gherkinDocument.feature
|
|
251
|
+
? { file: feature.uri, ...feature.gherkinDocument.feature.location, column: feature.gherkinDocument.feature.location.column ?? 1 }
|
|
252
|
+
: undefined;
|
|
253
|
+
(0, gherkin_1.callAt)(featureLocation, test.describe, [titles[featureIndex], () => {
|
|
254
|
+
if (retries !== undefined)
|
|
255
|
+
test.describe.configure({ retries });
|
|
256
|
+
for (const testCase of tests) {
|
|
257
|
+
const { tag, annotation, lock, timeout } = (0, testDetails_1.resolveTestDetails)(testCase);
|
|
258
|
+
const testBody = async (fixtures) => {
|
|
259
|
+
const world = new supportCodeLibrary.World({
|
|
260
|
+
log,
|
|
261
|
+
attach,
|
|
262
|
+
supportCodeLibrary,
|
|
263
|
+
config,
|
|
264
|
+
parameters: worldParameters
|
|
265
|
+
});
|
|
266
|
+
world.init(fixtures);
|
|
267
|
+
const testInfo = world.test.info();
|
|
268
|
+
if (timeout !== undefined)
|
|
269
|
+
testInfo.setTimeout(timeout);
|
|
270
|
+
const result = createTestExecutionResult();
|
|
271
|
+
const markStatus = (status, error) => {
|
|
272
|
+
if (result.status !== 'passed')
|
|
273
|
+
return;
|
|
274
|
+
result.status = status;
|
|
275
|
+
result.error = error;
|
|
276
|
+
};
|
|
277
|
+
// soft assertions do not throw, but fail the test
|
|
278
|
+
const markSoftErrors = () => {
|
|
279
|
+
const softError = testInfo.errors[0];
|
|
280
|
+
if (softError)
|
|
281
|
+
markStatus('failed', new Error(softError.message ?? softError.value));
|
|
282
|
+
};
|
|
283
|
+
const markError = (err) => {
|
|
284
|
+
if (testInfo.expectedStatus === 'skipped')
|
|
285
|
+
return markStatus('skipped', err);
|
|
286
|
+
markStatus(err instanceof StepStatusError ? err.status : 'failed', err);
|
|
287
|
+
};
|
|
288
|
+
try {
|
|
289
|
+
const beforeStatus = await executeHooks(test, supportCodeLibrary.beforeTestCaseHookDefinitions, world, testCase, HOOK_NAMES.BEFORE, () => createCaseHookPayload(feature, testCase), defaultTimeout);
|
|
290
|
+
if (beforeStatus)
|
|
291
|
+
markStatus(beforeStatus);
|
|
292
|
+
for (const pickleStep of testCase.steps) {
|
|
293
|
+
if (result.status === 'skipped' || result.status === 'pending') {
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
const stepLocation = (0, gherkin_1.resolveLocation)(positions, feature.uri, pickleStep.astNodeIds);
|
|
297
|
+
let step;
|
|
298
|
+
let lookupError;
|
|
188
299
|
try {
|
|
189
|
-
|
|
300
|
+
step = findSingleStepDefinition(supportCodeLibrary, pickleStep, (0, gherkin_1.formatLocation)(stepLocation));
|
|
190
301
|
}
|
|
191
302
|
catch (err) {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
throw err;
|
|
195
|
-
}
|
|
196
|
-
finally {
|
|
197
|
-
await executeStepHooks(test, supportCodeLibrary.afterTestStepHookDefinitions, world, testCase, HOOK_NAMES.AFTER_STEP, () => createStepHookParameter(feature, testCase, pickleStep, result));
|
|
303
|
+
// undefined or ambiguous: reported as a failed step pointing to the feature file
|
|
304
|
+
lookupError = err;
|
|
198
305
|
}
|
|
199
|
-
|
|
306
|
+
const location = step && stepLocationMode === 'definition' ? getLine(step) : { location: stepLocation };
|
|
307
|
+
await test.step((0, gherkin_1.stepTitle)(pickleStep), async () => {
|
|
308
|
+
if (!step)
|
|
309
|
+
throw lookupError;
|
|
310
|
+
await executeHooks(test, supportCodeLibrary.beforeTestStepHookDefinitions, world, testCase, HOOK_NAMES.BEFORE_STEP, () => ({
|
|
311
|
+
gherkinDocument: feature.gherkinDocument,
|
|
312
|
+
pickle: testCase,
|
|
313
|
+
pickleStep
|
|
314
|
+
}), defaultTimeout);
|
|
315
|
+
try {
|
|
316
|
+
const { parameters } = await step.getInvocationParameters({
|
|
317
|
+
step: {
|
|
318
|
+
text: pickleStep.text,
|
|
319
|
+
argument: pickleStep.argument
|
|
320
|
+
},
|
|
321
|
+
world
|
|
322
|
+
});
|
|
323
|
+
const returned = await (0, timeout_1.runWithTimeout)(() => step.code.apply(world, parameters), (0, timeout_1.resolveTimeout)(step, defaultTimeout), `Step '${pickleStep.text}' timed out after {timeout} ms\n at ${step.uri}:${step.line}`);
|
|
324
|
+
if (returned === 'skipped') {
|
|
325
|
+
markStatus('skipped');
|
|
326
|
+
}
|
|
327
|
+
else if (returned === 'pending') {
|
|
328
|
+
const error = new StepStatusError(`Step '${pickleStep.text}' is pending\n at ${(0, gherkin_1.formatLocation)(stepLocation)}`, 'pending');
|
|
329
|
+
markStatus('pending', error);
|
|
330
|
+
if (strict)
|
|
331
|
+
throw error;
|
|
332
|
+
}
|
|
333
|
+
markSoftErrors();
|
|
334
|
+
}
|
|
335
|
+
catch (err) {
|
|
336
|
+
markError(err);
|
|
337
|
+
throw err;
|
|
338
|
+
}
|
|
339
|
+
finally {
|
|
340
|
+
await executeHooks(test, supportCodeLibrary.afterTestStepHookDefinitions, world, testCase, HOOK_NAMES.AFTER_STEP, () => createStepHookParameter(feature, testCase, pickleStep, result), defaultTimeout);
|
|
341
|
+
}
|
|
342
|
+
}, location);
|
|
343
|
+
}
|
|
200
344
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
345
|
+
catch (err) {
|
|
346
|
+
markError(err);
|
|
347
|
+
throw err;
|
|
348
|
+
}
|
|
349
|
+
finally {
|
|
350
|
+
markSoftErrors();
|
|
351
|
+
await executeHooks(test, supportCodeLibrary.afterTestCaseHookDefinitions, world, testCase, HOOK_NAMES.AFTER, () => createCaseHookParameter(feature, testCase, result), defaultTimeout);
|
|
352
|
+
}
|
|
353
|
+
if (result.status === 'skipped') {
|
|
354
|
+
world.test.skip(true, 'Scenario skipped by step or hook');
|
|
355
|
+
}
|
|
356
|
+
if (result.status === 'pending') {
|
|
357
|
+
world.test.fixme(true, result.error?.message);
|
|
358
|
+
}
|
|
359
|
+
};
|
|
360
|
+
testBody.toString = () => fixture.init.toString();
|
|
361
|
+
const details = lock.length > 0 ? { tag, annotation, lock } : { tag, annotation };
|
|
362
|
+
const testLocation = (0, gherkin_1.resolveLocation)(positions, feature.uri, testCase.astNodeIds);
|
|
363
|
+
(0, gherkin_1.callAt)(testLocation, test, [testCase.name, details, testBody]);
|
|
364
|
+
}
|
|
365
|
+
}]);
|
|
366
|
+
});
|
|
367
|
+
executeAfterAllHooks(test, supportCodeLibrary.afterTestRunHookDefinitions, defaultTimeout);
|
|
213
368
|
}
|
|
214
369
|
//# sourceMappingURL=cucumberAdapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cucumberAdapter.js","sourceRoot":"","sources":["../src/cucumberAdapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cucumberAdapter.js","sourceRoot":"","sources":["../src/cucumberAdapter.ts"],"names":[],"mappings":"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"}
|
package/adapter/filter.d.ts
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
import { parse } from '@cucumber/tag-expressions';
|
|
2
|
+
/**
|
|
3
|
+
* Parse cucumber tag expression with an error naming its source.
|
|
4
|
+
* Also rejects tags without `@` (e.g. `smoke`), which parse fine but never match any scenario.
|
|
5
|
+
* @param expression - tag expression
|
|
6
|
+
* @param source - where the expression comes from, used in error messages
|
|
7
|
+
*/
|
|
8
|
+
export declare function parseTagExpression(expression: string, source: string): ReturnType<typeof parse>;
|
|
1
9
|
/**
|
|
2
10
|
* Translate cucumber tag expression to playwright grep
|
|
3
11
|
* @param {string} tagExpression
|
package/adapter/filter.js
CHANGED
|
@@ -1,15 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseTagExpression = parseTagExpression;
|
|
3
4
|
exports.tags = tags;
|
|
4
5
|
exports.filter = filter;
|
|
5
6
|
const tag_expressions_1 = require("@cucumber/tag-expressions");
|
|
7
|
+
const OPERATORS = new Set(['and', 'or', 'not']);
|
|
8
|
+
/**
|
|
9
|
+
* Parse cucumber tag expression with an error naming its source.
|
|
10
|
+
* Also rejects tags without `@` (e.g. `smoke`), which parse fine but never match any scenario.
|
|
11
|
+
* @param expression - tag expression
|
|
12
|
+
* @param source - where the expression comes from, used in error messages
|
|
13
|
+
*/
|
|
14
|
+
function parseTagExpression(expression, source) {
|
|
15
|
+
let node;
|
|
16
|
+
try {
|
|
17
|
+
node = (0, tag_expressions_1.parse)(expression);
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
throw new Error(`Invalid tag expression in ${source}: ${err.message}`, { cause: err });
|
|
21
|
+
}
|
|
22
|
+
const invalidTags = expression
|
|
23
|
+
.replace(/\\./g, '')
|
|
24
|
+
.split(/[\s()]+/)
|
|
25
|
+
.filter(token => token && !OPERATORS.has(token) && !token.startsWith('@'));
|
|
26
|
+
if (invalidTags.length > 0) {
|
|
27
|
+
throw new Error(`Invalid tag expression in ${source}: "${expression}". ` +
|
|
28
|
+
`Tags must start with '@': ${invalidTags.map(tag => `'${tag}' → '@${tag}'`).join(', ')}`);
|
|
29
|
+
}
|
|
30
|
+
return node;
|
|
31
|
+
}
|
|
6
32
|
class TagExpression extends RegExp {
|
|
7
33
|
tagExpression;
|
|
8
34
|
expressionNode;
|
|
9
35
|
constructor(tagExpression) {
|
|
10
36
|
super('');
|
|
11
37
|
this.tagExpression = tagExpression;
|
|
12
|
-
this.expressionNode = (
|
|
38
|
+
this.expressionNode = parseTagExpression(this.tagExpression, 'tags()');
|
|
13
39
|
}
|
|
14
40
|
test(testName) {
|
|
15
41
|
const tokens = testName.split(/\s+/);
|
package/adapter/filter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":";;;;;AAAA,+DAAkD;AAElD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAEhD;;;;;GAKG;AACH,4BAAmC,UAAkB,EAAE,MAAc;IACjE,IAAI,IAA8B,CAAC;IACnC,IAAI,CAAC;QACD,IAAI,GAAG,IAAA,uBAAK,EAAC,UAAU,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,KAAM,GAAa,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACtG,CAAC;IACD,MAAM,WAAW,GAAG,UAAU;SACzB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;SACnB,KAAK,CAAC,SAAS,CAAC;SAChB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACX,6BAA6B,MAAM,MAAM,UAAU,KAAK;YACxD,6BAA6B,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3F,CAAC;IACN,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,aAAc,SAAQ,MAAM;IAKV,aAAa;IAJzB,cAAc,CAEpB;IAEF,YAAoB,aAAqB;QACrC,KAAK,CAAC,EAAE,CAAC,CAAC;6BADM,aAAa;QAE7B,IAAI,CAAC,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,CAAC,QAAgB;QACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;CACJ;AAED;;;;;;;;GAQG;AACH,cAAqB,aAAqB;IACtC,OAAO,IAAI,aAAa,CAAC,aAAa,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,MAAO,SAAQ,MAAM;IACH,SAAS;IAA7B,YAAoB,SAAwC;QACxD,KAAK,CAAC,EAAE,CAAC,CAAC;yBADM,SAAS;QAEzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,QAAgB;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;CACJ;AAED;;;;;;;GAOG;AACH,gBAAuB,SAAwC;IAC3D,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { GherkinDocument, PickleStep, PickleStepArgument } from '@cucumber/messages';
|
|
2
|
+
import type { SupportCodeLibrary } from './types';
|
|
3
|
+
export interface SourceLocation {
|
|
4
|
+
file: string;
|
|
5
|
+
line: number;
|
|
6
|
+
column: number;
|
|
7
|
+
}
|
|
8
|
+
type Position = Omit<SourceLocation, 'file'>;
|
|
9
|
+
/**
|
|
10
|
+
* Map ast node ids (scenarios, steps, example rows, rules) of a gherkin document to their positions
|
|
11
|
+
*/
|
|
12
|
+
export declare function collectPositions(gherkinDocument: GherkinDocument): Map<string, Position>;
|
|
13
|
+
/**
|
|
14
|
+
* Resolve location of a pickle or pickle step.
|
|
15
|
+
* The last ast node id is used, so scenario outline examples point to their example row.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveLocation(positions: Map<string, Position>, file: string, astNodeIds: readonly string[]): SourceLocation | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Call function so that the immediate caller frame reports the given source location.
|
|
20
|
+
* Playwright takes test and describe locations from the caller frame,
|
|
21
|
+
* so this makes reports, `--list` and IDE integrations point to the feature file instead of the adapter.
|
|
22
|
+
*/
|
|
23
|
+
export declare function callAt<T>(location: SourceLocation | undefined, fn: (...args: any[]) => T, args: unknown[]): T;
|
|
24
|
+
/**
|
|
25
|
+
* Build step title for reports including short preview of doc string or data table argument
|
|
26
|
+
*/
|
|
27
|
+
export declare function stepTitle(pickleStep: Pick<PickleStep, 'text' | 'argument'>): string;
|
|
28
|
+
/**
|
|
29
|
+
* Convert value passed to executeStep into a pickle step argument.
|
|
30
|
+
* Strings become doc strings, `string[][]` and DataTable instances become data tables.
|
|
31
|
+
*/
|
|
32
|
+
export declare function toPickleArgument(value: unknown): {
|
|
33
|
+
argument?: PickleStepArgument;
|
|
34
|
+
extra?: unknown;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Build cucumber-style snippet for undefined step
|
|
38
|
+
*/
|
|
39
|
+
export declare function buildSnippet(supportCodeLibrary: Pick<SupportCodeLibrary, 'parameterTypeRegistry'>, pickleStep: PickleStep): string | undefined;
|
|
40
|
+
export declare function formatLocation(location?: SourceLocation): string;
|
|
41
|
+
/**
|
|
42
|
+
* Feature title used for describe block; falls back to file path for unnamed features
|
|
43
|
+
*/
|
|
44
|
+
export declare function featureTitle(name: string | undefined, uri: string): string;
|
|
45
|
+
export {};
|