@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.
Files changed (55) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +160 -11
  3. package/adapter/PlaywrightWorld.d.ts +8 -6
  4. package/adapter/PlaywrightWorld.js +21 -8
  5. package/adapter/PlaywrightWorld.js.map +1 -1
  6. package/adapter/Template.d.ts +13 -2
  7. package/adapter/Template.js +57 -8
  8. package/adapter/Template.js.map +1 -1
  9. package/adapter/cucumberAdapter.d.ts +7 -0
  10. package/adapter/cucumberAdapter.js +253 -98
  11. package/adapter/cucumberAdapter.js.map +1 -1
  12. package/adapter/filter.d.ts +8 -0
  13. package/adapter/filter.js +27 -1
  14. package/adapter/filter.js.map +1 -1
  15. package/adapter/gherkin.d.ts +45 -0
  16. package/adapter/gherkin.js +155 -0
  17. package/adapter/gherkin.js.map +1 -0
  18. package/adapter/index.d.ts +1 -0
  19. package/adapter/index.js +1 -0
  20. package/adapter/index.js.map +1 -1
  21. package/adapter/js/PlaywrightWorld.d.ts +8 -6
  22. package/adapter/js/PlaywrightWorld.js +21 -8
  23. package/adapter/js/Template.d.ts +13 -2
  24. package/adapter/js/Template.js +57 -8
  25. package/adapter/js/cucumberAdapter.d.ts +7 -0
  26. package/adapter/js/cucumberAdapter.js +253 -98
  27. package/adapter/js/filter.d.ts +8 -0
  28. package/adapter/js/filter.js +27 -1
  29. package/adapter/js/gherkin.d.ts +45 -0
  30. package/adapter/js/gherkin.js +154 -0
  31. package/adapter/js/index.d.ts +1 -0
  32. package/adapter/js/index.js +1 -0
  33. package/adapter/js/loader.d.ts +9 -1
  34. package/adapter/js/loader.js +35 -15
  35. package/adapter/js/testDetails.d.ts +10 -0
  36. package/adapter/js/testDetails.js +27 -1
  37. package/adapter/js/timeout.d.ts +17 -0
  38. package/adapter/js/timeout.js +24 -0
  39. package/adapter/js/types.d.ts +35 -6
  40. package/adapter/js/withWorld.d.ts +43 -0
  41. package/adapter/js/withWorld.js +16 -0
  42. package/adapter/loader.d.ts +9 -1
  43. package/adapter/loader.js +35 -15
  44. package/adapter/loader.js.map +1 -1
  45. package/adapter/testDetails.d.ts +10 -0
  46. package/adapter/testDetails.js +27 -1
  47. package/adapter/testDetails.js.map +1 -1
  48. package/adapter/timeout.d.ts +17 -0
  49. package/adapter/timeout.js +25 -0
  50. package/adapter/timeout.js.map +1 -0
  51. package/adapter/types.d.ts +35 -6
  52. package/adapter/withWorld.d.ts +43 -0
  53. package/adapter/withWorld.js +17 -0
  54. package/adapter/withWorld.js.map +1 -0
  55. 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
- CONTENT_TYPE: 'text/plain',
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 STEP_ARGUMENT_LABELS = {
25
- DOC_STRING: ' [MultiLine]',
26
- DATA_TABLE: ' [DataTable]'
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
- console.log(data);
41
- }
42
- function attach(body, details) {
43
- const fileName = details?.fileName ?? DEFAULT_VALUES.ATTACHMENT_FILENAME;
44
- const contentType = details?.mediaType ?? DEFAULT_VALUES.CONTENT_TYPE;
45
- return this.test.info().attach(fileName, { body: body, contentType });
46
- }
47
- function stepName(pickleStep) {
48
- let step = pickleStep.text;
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 step;
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
- async function executeCaseHooks(test, hooks, world, testCase, defaultHookName, createPayload) {
78
- for (const hook of hooks) {
79
- if (!hook.appliesToTestCase(testCase)) {
80
- continue;
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
- async function executeStepHooks(test, hooks, world, testCase, hookName, createPayload) {
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.code.apply(world, [createPayload(hook)]), location);
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, featureUri) {
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
- throw new Error(`Step '${pickleStep.text}' is not defined\n at ${featureUri}`);
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 Error(`Step '${pickleStep.text}' matches multiple step definitions:\n${locations}`);
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.code.apply({}), location);
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.code.apply({}), location);
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 fixture = new supportCodeLibrary.World({ config });
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
- executeBeforeAllHooks(test, supportCodeLibrary.beforeTestRunHookDefinitions);
153
- for (const feature of features) {
154
- const tests = feature.tests;
155
- test.describe(feature.feature, () => {
156
- for (const testCase of tests) {
157
- const { tag, annotation, lock } = (0, testDetails_1.resolveTestDetails)(testCase);
158
- const testBody = async (fixtures) => {
159
- const world = new supportCodeLibrary.World({
160
- log,
161
- attach,
162
- supportCodeLibrary,
163
- config
164
- });
165
- world.init(fixtures);
166
- const result = createTestExecutionResult();
167
- await executeCaseHooks(test, supportCodeLibrary.beforeTestCaseHookDefinitions, world, testCase, HOOK_NAMES.BEFORE, () => createCaseHookPayload(feature, testCase));
168
- try {
169
- for (const pickleStep of testCase.steps) {
170
- if (result.status !== 'passed') {
171
- break;
172
- }
173
- const step = findSingleStepDefinition(supportCodeLibrary, pickleStep, feature.uri);
174
- const location = getLine(step);
175
- await test.step(stepName(pickleStep), async () => {
176
- await executeStepHooks(test, supportCodeLibrary.beforeTestStepHookDefinitions, world, testCase, HOOK_NAMES.BEFORE_STEP, () => ({
177
- gherkinDocument: feature.gherkinDocument,
178
- pickle: testCase,
179
- pickleStep
180
- }));
181
- const { parameters } = await step.getInvocationParameters({
182
- step: {
183
- text: pickleStep.text,
184
- argument: pickleStep.argument
185
- },
186
- world
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
- await step.code.apply(world, parameters);
300
+ step = findSingleStepDefinition(supportCodeLibrary, pickleStep, (0, gherkin_1.formatLocation)(stepLocation));
190
301
  }
191
302
  catch (err) {
192
- result.status = 'failed';
193
- result.error = err;
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
- }, location);
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
- finally {
203
- await executeCaseHooks(test, supportCodeLibrary.afterTestCaseHookDefinitions, world, testCase, HOOK_NAMES.AFTER, () => createCaseHookParameter(feature, testCase, result));
204
- }
205
- };
206
- testBody.toString = () => fixture.init.toString();
207
- const details = lock.length > 0 ? { tag, annotation, lock } : { tag, annotation };
208
- test(testCase.name, details, testBody);
209
- }
210
- });
211
- }
212
- executeAfterAllHooks(test, supportCodeLibrary.afterTestRunHookDefinitions);
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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"}
@@ -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 = (0, tag_expressions_1.parse)(this.tagExpression);
38
+ this.expressionNode = parseTagExpression(this.tagExpression, 'tags()');
13
39
  }
14
40
  test(testName) {
15
41
  const tokens = testName.split(/\s+/);
@@ -1 +1 @@
1
- {"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":";;;;AAAA,+DAAkD;AAElD,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,IAAA,uBAAK,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACpD,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"}
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 {};