@qavajs/playwright-runner-adapter 2.3.3 → 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 +39 -0
- package/README.md +198 -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 +254 -114
- 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 +2 -0
- package/adapter/index.js +2 -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 +254 -114
- 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 +2 -0
- package/adapter/js/index.js +2 -0
- package/adapter/js/loader.d.ts +9 -1
- package/adapter/js/loader.js +35 -15
- package/adapter/js/testDetails.d.ts +28 -0
- package/adapter/js/testDetails.js +78 -0
- 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 +28 -0
- package/adapter/testDetails.js +79 -0
- package/adapter/testDetails.js.map +1 -0
- 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 +11 -9
|
@@ -1,12 +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
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
TAGS: 'tags'
|
|
9
|
-
};
|
|
10
|
+
const testDetails_1 = require("./testDetails");
|
|
11
|
+
const timeout_1 = require("./timeout");
|
|
12
|
+
const gherkin_1 = require("./gherkin");
|
|
10
13
|
const HOOK_NAMES = {
|
|
11
14
|
BEFORE_ALL: 'Before All',
|
|
12
15
|
AFTER_ALL: 'After All',
|
|
@@ -14,21 +17,28 @@ const HOOK_NAMES = {
|
|
|
14
17
|
AFTER: 'After',
|
|
15
18
|
BEFORE_STEP: 'Before Step',
|
|
16
19
|
AFTER_STEP: 'After Step',
|
|
17
|
-
WORLD: 'World',
|
|
18
|
-
BEFORE_HOOKS: 'Before Hooks',
|
|
19
|
-
AFTER_HOOKS: 'After Hooks'
|
|
20
20
|
};
|
|
21
21
|
const DEFAULT_VALUES = {
|
|
22
22
|
ATTACHMENT_FILENAME: 'attachment',
|
|
23
|
-
|
|
23
|
+
LOG_ATTACHMENT_NAME: 'log',
|
|
24
|
+
TEXT_CONTENT_TYPE: 'text/plain',
|
|
25
|
+
BINARY_CONTENT_TYPE: 'application/octet-stream',
|
|
24
26
|
COLUMN: 1,
|
|
25
27
|
TEST_CASE_ID: '0',
|
|
26
28
|
TEST_STEP_ID: '0'
|
|
27
29
|
};
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
+
}
|
|
32
42
|
function getLine(step) {
|
|
33
43
|
if (!step.uri)
|
|
34
44
|
return {};
|
|
@@ -40,22 +50,42 @@ function getLine(step) {
|
|
|
40
50
|
}
|
|
41
51
|
};
|
|
42
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Log data to the report as `log` attachment of the current step (same as cucumber `this.log`)
|
|
55
|
+
*/
|
|
43
56
|
function log(data) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (pickleStep.argument) {
|
|
54
|
-
step += pickleStep.argument.docString
|
|
55
|
-
? STEP_ARGUMENT_LABELS.DOC_STRING
|
|
56
|
-
: 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));
|
|
57
66
|
}
|
|
58
|
-
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 });
|
|
59
89
|
}
|
|
60
90
|
function createTestExecutionResult() {
|
|
61
91
|
return {
|
|
@@ -71,17 +101,6 @@ function createHookResult(result) {
|
|
|
71
101
|
exception: result.error
|
|
72
102
|
};
|
|
73
103
|
}
|
|
74
|
-
function createScenarioAnnotation(testCase) {
|
|
75
|
-
const tag = [...new Set(testCase.tags.map(item => item.name))];
|
|
76
|
-
return [
|
|
77
|
-
{ type: ANNOTATION_TYPES.NAME, description: testCase.name },
|
|
78
|
-
{ type: ANNOTATION_TYPES.URI, description: testCase.uri },
|
|
79
|
-
{ type: ANNOTATION_TYPES.TAGS, description: JSON.stringify(tag) }
|
|
80
|
-
];
|
|
81
|
-
}
|
|
82
|
-
function createScenarioTags(testCase) {
|
|
83
|
-
return [...new Set(testCase.tags.map(item => item.name))];
|
|
84
|
-
}
|
|
85
104
|
function createCaseHookPayload(feature, testCase) {
|
|
86
105
|
return {
|
|
87
106
|
gherkinDocument: feature.gherkinDocument,
|
|
@@ -89,24 +108,29 @@ function createCaseHookPayload(feature, testCase) {
|
|
|
89
108
|
testCaseStartedId: DEFAULT_VALUES.TEST_CASE_ID
|
|
90
109
|
};
|
|
91
110
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
const hookName = hook.name ?? defaultHookName;
|
|
98
|
-
const location = getLine(hook);
|
|
99
|
-
await test.step(hookName, () => hook.code.apply(world, [createPayload(hook)]), location);
|
|
100
|
-
}
|
|
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}`);
|
|
101
116
|
}
|
|
102
|
-
|
|
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;
|
|
103
123
|
for (const hook of hooks) {
|
|
104
124
|
if (!hook.appliesToTestCase(testCase)) {
|
|
105
125
|
continue;
|
|
106
126
|
}
|
|
127
|
+
const hookName = hook.name ?? defaultHookName;
|
|
107
128
|
const location = getLine(hook);
|
|
108
|
-
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';
|
|
109
132
|
}
|
|
133
|
+
return status;
|
|
110
134
|
}
|
|
111
135
|
function createStepHookParameter(feature, testCase, pickleStep, result) {
|
|
112
136
|
return {
|
|
@@ -126,104 +150,220 @@ function createCaseHookParameter(feature, testCase, result) {
|
|
|
126
150
|
result: createHookResult(result)
|
|
127
151
|
};
|
|
128
152
|
}
|
|
129
|
-
function findSingleStepDefinition(supportCodeLibrary, pickleStep,
|
|
153
|
+
function findSingleStepDefinition(supportCodeLibrary, pickleStep, stepLocation) {
|
|
130
154
|
const matchingSteps = supportCodeLibrary.stepDefinitions
|
|
131
155
|
.filter(stepDefinition => stepDefinition.matchesStepName(pickleStep.text));
|
|
132
156
|
if (matchingSteps.length === 0) {
|
|
133
|
-
|
|
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');
|
|
134
163
|
}
|
|
135
164
|
if (matchingSteps.length > 1) {
|
|
136
165
|
const locations = matchingSteps
|
|
137
|
-
.map(s => ` ${s.uri}:${s.line}`)
|
|
166
|
+
.map(s => ` ${String(s.pattern ?? '')} - ${s.uri}:${s.line}`)
|
|
138
167
|
.join('\n');
|
|
139
|
-
throw new
|
|
168
|
+
throw new StepStatusError(`Step '${pickleStep.text}' matches multiple step definitions:\n${locations}\n at ${stepLocation}`, 'ambiguous');
|
|
140
169
|
}
|
|
141
170
|
return matchingSteps[0];
|
|
142
171
|
}
|
|
143
|
-
function executeBeforeAllHooks(test, hooks) {
|
|
172
|
+
function executeBeforeAllHooks(test, hooks, defaultTimeout) {
|
|
144
173
|
if (hooks.length === 0)
|
|
145
174
|
return;
|
|
146
175
|
test.beforeAll(async () => {
|
|
147
176
|
for (const hook of hooks) {
|
|
148
177
|
const location = getLine(hook);
|
|
149
|
-
await test.step(HOOK_NAMES.BEFORE_ALL, () => hook
|
|
178
|
+
await test.step(HOOK_NAMES.BEFORE_ALL, () => invokeHook(hook, {}, [], HOOK_NAMES.BEFORE_ALL, defaultTimeout), location);
|
|
150
179
|
}
|
|
151
180
|
});
|
|
152
181
|
}
|
|
153
|
-
function executeAfterAllHooks(test, hooks) {
|
|
182
|
+
function executeAfterAllHooks(test, hooks, defaultTimeout) {
|
|
154
183
|
if (hooks.length === 0)
|
|
155
184
|
return;
|
|
156
185
|
test.afterAll(async () => {
|
|
157
186
|
for (const hook of hooks) {
|
|
158
187
|
const location = getLine(hook);
|
|
159
|
-
await test.step(HOOK_NAMES.AFTER_ALL, () => hook
|
|
188
|
+
await test.step(HOOK_NAMES.AFTER_ALL, () => invokeHook(hook, {}, [], HOOK_NAMES.AFTER_ALL, defaultTimeout), location);
|
|
160
189
|
}
|
|
161
190
|
});
|
|
162
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
|
+
}
|
|
163
228
|
function defineConfig(config) {
|
|
164
229
|
const { features, supportCodeLibrary } = (0, loader_1.load)(config);
|
|
165
|
-
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 });
|
|
166
238
|
const test = fixture.test;
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
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;
|
|
204
299
|
try {
|
|
205
|
-
|
|
300
|
+
step = findSingleStepDefinition(supportCodeLibrary, pickleStep, (0, gherkin_1.formatLocation)(stepLocation));
|
|
206
301
|
}
|
|
207
302
|
catch (err) {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
throw err;
|
|
303
|
+
// undefined or ambiguous: reported as a failed step pointing to the feature file
|
|
304
|
+
lookupError = err;
|
|
211
305
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
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
|
+
}
|
|
216
344
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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);
|
|
228
368
|
}
|
|
229
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 {};
|