@qavajs/playwright-runner-adapter 2.3.3 → 2.4.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 +11 -0
- package/README.md +38 -0
- package/adapter/PlaywrightWorld.js.map +1 -1
- package/adapter/Template.js.map +1 -1
- package/adapter/cucumberAdapter.js +4 -19
- package/adapter/cucumberAdapter.js.map +1 -1
- package/adapter/filter.js.map +1 -1
- package/adapter/index.d.ts +1 -0
- package/adapter/index.js +1 -0
- package/adapter/index.js.map +1 -1
- package/adapter/js/cucumberAdapter.js +4 -19
- package/adapter/js/index.d.ts +1 -0
- package/adapter/js/index.js +1 -0
- package/adapter/js/testDetails.d.ts +18 -0
- package/adapter/js/testDetails.js +52 -0
- package/adapter/loader.js.map +1 -1
- package/adapter/testDetails.d.ts +18 -0
- package/adapter/testDetails.js +53 -0
- package/adapter/testDetails.js.map +1 -0
- package/package.json +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -14,6 +14,17 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how
|
|
|
14
14
|
|
|
15
15
|
:microscope: - experimental
|
|
16
16
|
|
|
17
|
+
## [2.4.0]
|
|
18
|
+
- :rocket: added `@lock(name)` tag mapped to playwright test locks (`@lock(-exclusive-)` for the built-in exclusive lock)
|
|
19
|
+
- :rocket: added `@skip(reason)`, `@fixme(reason)`, `@fail(reason)`, `@slow(reason)` tags mapped to playwright test modifiers (reason is optional: `@skip()`)
|
|
20
|
+
- :rocket: added `@annotation(type,description)` tag mapped to playwright test annotations
|
|
21
|
+
- :pencil: special tags (`@lock(...)`, `@annotation(...)`, `@skip(...)`, `@fixme(...)`, `@fail(...)`, `@slow(...)`) are removed from playwright tags
|
|
22
|
+
- :pencil: updated `@cucumber/cucumber` to 13, `@cucumber/gherkin` to 42, `@cucumber/tag-expressions` to 11 and `glob` to 14
|
|
23
|
+
- :pencil: updated dev dependencies: `@playwright/test` 1.65, `@types/node` 26, `typescript` 7
|
|
24
|
+
- :pencil: switched `module` and `moduleResolution` to `nodenext` in `tsconfig.json` and `tsconfig.js.json`
|
|
25
|
+
- :x: dropped Node.js 20 support (`engines.node` is now `>=22`); CI tests against Node.js 22, 24 and 26
|
|
26
|
+
- :pencil: CI: updated `actions/checkout` and `actions/setup-node` to v7, `mikepenz/action-junit-report` to v6; tests also run on push to `main`, `npm audit` gate for production dependencies, junit report requires tests, e2e tests gate npm publish, publish with provenance
|
|
27
|
+
|
|
17
28
|
## [2.3.3]
|
|
18
29
|
- :beetle: fixed named import for `parse` from `@cucumber/tag-expressions` in `filter.ts`
|
|
19
30
|
- :beetle: fixed `attach` method assignment in `PlaywrightWorld` constructor
|
package/README.md
CHANGED
|
@@ -19,6 +19,7 @@ Adapter to run [Cucumber](https://cucumber.io/) BDD tests via the [Playwright](h
|
|
|
19
19
|
- [Filtering Tests](#filtering-tests)
|
|
20
20
|
- [Tag Expressions](#tag-expressions)
|
|
21
21
|
- [Predicate Filter](#predicate-filter)
|
|
22
|
+
- [Annotations, Modifiers and Locks](#annotations-modifiers-and-locks)
|
|
22
23
|
- [Parallelism](#parallelism)
|
|
23
24
|
- [JavaScript / CommonJS Support](#javascript--commonjs-support)
|
|
24
25
|
- [Limitations](#limitations)
|
|
@@ -348,6 +349,43 @@ The predicate receives the full test name (feature + scenario title + tags) and
|
|
|
348
349
|
|
|
349
350
|
---
|
|
350
351
|
|
|
352
|
+
## Annotations, Modifiers and Locks
|
|
353
|
+
|
|
354
|
+
Gherkin tags are translated into Playwright [test details](https://playwright.dev/docs/test-annotations). The special tags below are consumed: they are removed from the scenario's Playwright tags (and the `tags` annotation), so they don't show up as tags in reports and can't be matched with `grep` / `tags()`. All other tags are kept as Playwright tags.
|
|
355
|
+
|
|
356
|
+
| Tag | Playwright equivalent |
|
|
357
|
+
|---|---|
|
|
358
|
+
| `@skip()` / `@skip(reason)` | skips the scenario — fixtures are not set up |
|
|
359
|
+
| `@fixme()` / `@fixme(reason)` | same as skip, marks the scenario as to be fixed |
|
|
360
|
+
| `@fail()` / `@fail(reason)` | scenario passes only if it fails |
|
|
361
|
+
| `@slow()` / `@slow(reason)` | triples the timeout |
|
|
362
|
+
| `@lock(name)` | `lock: 'name'` — scenarios sharing a lock never run concurrently |
|
|
363
|
+
| `@lock(-exclusive-)` | built-in exclusive lock — runs only when no other test is running |
|
|
364
|
+
| `@annotation(type,description)` | `annotation: { type, description }` — description is optional: `@annotation(flaky)` |
|
|
365
|
+
|
|
366
|
+
Modifiers are passed as annotations of type `skip`, `fixme`, `fail`, `slow`, which Playwright applies like `test.skip()` and the other modifiers, and the optional reason is shown in the report. Plain tags such as `@skip` or `@slow` are ordinary tags and do nothing. Tags set on a `Feature` or `Rule` apply to all its scenarios.
|
|
367
|
+
|
|
368
|
+
> Gherkin tags may not contain whitespace, so write `@annotation(issue,JIRA-123)` without a space after the comma. Everything after the first comma is the description.
|
|
369
|
+
|
|
370
|
+
```gherkin
|
|
371
|
+
@lock(user-settings)
|
|
372
|
+
Feature: user settings
|
|
373
|
+
|
|
374
|
+
@annotation(issue,JIRA-123)
|
|
375
|
+
Scenario: update settings
|
|
376
|
+
When I update settings
|
|
377
|
+
|
|
378
|
+
@lock(-exclusive-) @slow(full-reset)
|
|
379
|
+
Scenario: reset all data
|
|
380
|
+
When I reset the database
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
Locks are a lighter alternative to splitting scenarios into a separate serial project (see [Parallelism](#parallelism)): only scenarios sharing the same lock are serialized, everything else stays parallel. Locks require `@playwright/test` 1.65+.
|
|
384
|
+
|
|
385
|
+
Runtime annotations can be added from steps via `this.test.info().annotations.push({ type, description })`.
|
|
386
|
+
|
|
387
|
+
---
|
|
388
|
+
|
|
351
389
|
## Parallelism
|
|
352
390
|
|
|
353
391
|
Playwright projects let you run subsets of scenarios in parallel or serially:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightWorld.js","sourceRoot":"","sources":["../src/PlaywrightWorld.ts"],"names":[],"mappings":";;;AAAA,2CAAkG;AAGlG
|
|
1
|
+
{"version":3,"file":"PlaywrightWorld.js","sourceRoot":"","sources":["../src/PlaywrightWorld.ts"],"names":[],"mappings":";;;AAAA,2CAAkG;AAGlG;IACI,GAAG,CAA2B;IAC9B,MAAM,CAAyF;IAC/F,UAAU,CAAW;IACrB,MAAM,CAAyB;IAC/B,kBAAkB,CAAsB;IACxC,IAAI,GAAG,WAAI,CAAC;IACZ,MAAM,GAAG,aAAM,CAAC;IAEhB,YAAY,OAAqB;QAC7B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAO,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAmB,CAAC;QACtD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAO,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,WAAW,CAAkB,IAAY,EAAE,UAAoB;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe;aAChD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAC;QACzE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,yCAAyC,SAAS,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3F,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC;CACJ;;AAED,qBAA6B,SAAQ,SAAS;IAC1C,IAAI,CAAQ;IACZ,OAAO,CAAkB;IACzB,OAAO,CAAW;IAClB,WAAW,CAAU;IACrB,OAAO,CAAqB;IAE5B,uGAAuG;IACvG,IAAI,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAyF,EAAE,EAAE;QACnI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC,CAA4B,CAAC;CACjC"}
|
package/adapter/Template.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Template.js","sourceRoot":"","sources":["../src/Template.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Template.js","sourceRoot":"","sources":["../src/Template.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;GAQG;AACH,kBAAyB,QAAwC;IAC7D,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;QACvB,KAAK,EAAE,KAAK,WAAW,QAAwC,EAAE,KAAgB,EAAE,IAAe;YAC9F,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,QAAQ;iBACjB,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBACxB,MAAM,CAAC,OAAO,CAAC,CAAC;YACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,MAAM,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;QACL,CAAC;KACJ,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -2,11 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.defineConfig = defineConfig;
|
|
4
4
|
const loader_1 = require("./loader");
|
|
5
|
-
const
|
|
6
|
-
NAME: 'name',
|
|
7
|
-
URI: 'uri',
|
|
8
|
-
TAGS: 'tags'
|
|
9
|
-
};
|
|
5
|
+
const testDetails_1 = require("./testDetails");
|
|
10
6
|
const HOOK_NAMES = {
|
|
11
7
|
BEFORE_ALL: 'Before All',
|
|
12
8
|
AFTER_ALL: 'After All',
|
|
@@ -71,17 +67,6 @@ function createHookResult(result) {
|
|
|
71
67
|
exception: result.error
|
|
72
68
|
};
|
|
73
69
|
}
|
|
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
70
|
function createCaseHookPayload(feature, testCase) {
|
|
86
71
|
return {
|
|
87
72
|
gherkinDocument: feature.gherkinDocument,
|
|
@@ -169,8 +154,7 @@ function defineConfig(config) {
|
|
|
169
154
|
const tests = feature.tests;
|
|
170
155
|
test.describe(feature.feature, () => {
|
|
171
156
|
for (const testCase of tests) {
|
|
172
|
-
const tag =
|
|
173
|
-
const annotation = createScenarioAnnotation(testCase);
|
|
157
|
+
const { tag, annotation, lock } = (0, testDetails_1.resolveTestDetails)(testCase);
|
|
174
158
|
const testBody = async (fixtures) => {
|
|
175
159
|
const world = new supportCodeLibrary.World({
|
|
176
160
|
log,
|
|
@@ -220,7 +204,8 @@ function defineConfig(config) {
|
|
|
220
204
|
}
|
|
221
205
|
};
|
|
222
206
|
testBody.toString = () => fixture.init.toString();
|
|
223
|
-
|
|
207
|
+
const details = lock.length > 0 ? { tag, annotation, lock } : { tag, annotation };
|
|
208
|
+
test(testCase.name, details, testBody);
|
|
224
209
|
}
|
|
225
210
|
});
|
|
226
211
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cucumberAdapter.js","sourceRoot":"","sources":["../src/cucumberAdapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cucumberAdapter.js","sourceRoot":"","sources":["../src/cucumberAdapter.ts"],"names":[],"mappings":"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"}
|
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,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"}
|
package/adapter/index.d.ts
CHANGED
package/adapter/index.js
CHANGED
|
@@ -19,4 +19,5 @@ __exportStar(require("./filter"), exports);
|
|
|
19
19
|
__exportStar(require("./Template"), exports);
|
|
20
20
|
__exportStar(require("@cucumber/cucumber"), exports);
|
|
21
21
|
__exportStar(require("./cucumberAdapter"), exports);
|
|
22
|
+
__exportStar(require("./testDetails"), exports);
|
|
22
23
|
//# sourceMappingURL=index.js.map
|
package/adapter/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,2CAAyB;AACzB,6CAA2B;AAC3B,qDAAmC;AACnC,oDAAkC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,2CAAyB;AACzB,6CAA2B;AAC3B,qDAAmC;AACnC,oDAAkC;AAAA,gDAA8B"}
|
|
@@ -2,11 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.defineConfig = defineConfig;
|
|
4
4
|
const loader_1 = require("./loader");
|
|
5
|
-
const
|
|
6
|
-
NAME: 'name',
|
|
7
|
-
URI: 'uri',
|
|
8
|
-
TAGS: 'tags'
|
|
9
|
-
};
|
|
5
|
+
const testDetails_1 = require("./testDetails");
|
|
10
6
|
const HOOK_NAMES = {
|
|
11
7
|
BEFORE_ALL: 'Before All',
|
|
12
8
|
AFTER_ALL: 'After All',
|
|
@@ -71,17 +67,6 @@ function createHookResult(result) {
|
|
|
71
67
|
exception: result.error
|
|
72
68
|
};
|
|
73
69
|
}
|
|
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
70
|
function createCaseHookPayload(feature, testCase) {
|
|
86
71
|
return {
|
|
87
72
|
gherkinDocument: feature.gherkinDocument,
|
|
@@ -169,8 +154,7 @@ function defineConfig(config) {
|
|
|
169
154
|
const tests = feature.tests;
|
|
170
155
|
test.describe(feature.feature, () => {
|
|
171
156
|
for (const testCase of tests) {
|
|
172
|
-
const tag =
|
|
173
|
-
const annotation = createScenarioAnnotation(testCase);
|
|
157
|
+
const { tag, annotation, lock } = (0, testDetails_1.resolveTestDetails)(testCase);
|
|
174
158
|
const testBody = async (fixtures) => {
|
|
175
159
|
const world = new supportCodeLibrary.World({
|
|
176
160
|
log,
|
|
@@ -220,7 +204,8 @@ function defineConfig(config) {
|
|
|
220
204
|
}
|
|
221
205
|
};
|
|
222
206
|
testBody.toString = () => fixture.init.toString();
|
|
223
|
-
|
|
207
|
+
const details = lock.length > 0 ? { tag, annotation, lock } : { tag, annotation };
|
|
208
|
+
test(testCase.name, details, testBody);
|
|
224
209
|
}
|
|
225
210
|
});
|
|
226
211
|
}
|
package/adapter/js/index.d.ts
CHANGED
package/adapter/js/index.js
CHANGED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Pickle } from '@cucumber/messages';
|
|
2
|
+
import type { TestDetailsAnnotation } from '@playwright/test';
|
|
3
|
+
export interface ResolvedTestDetails {
|
|
4
|
+
tag: string[];
|
|
5
|
+
annotation: TestDetailsAnnotation[];
|
|
6
|
+
lock: string[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Translate gherkin tags of a pickle into playwright test details.
|
|
10
|
+
*
|
|
11
|
+
* - special tags below are consumed and not passed as playwright `tag`; all other tags are kept
|
|
12
|
+
* - `@lock(name)` → `lock: 'name'`; `@lock(-exclusive-)` → built-in exclusive lock
|
|
13
|
+
* - `@annotation(type,description)` → `annotation: { type, description }`
|
|
14
|
+
* - `@skip()` / `@fixme()` / `@fail()` / `@slow()` → playwright modifier with optional description, e.g. `@fixme(JIRA-1)`
|
|
15
|
+
*
|
|
16
|
+
* Note: gherkin tags may not contain whitespace, so write `@annotation(issue,JIRA-1)` without spaces.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveTestDetails(pickle: Pickle): ResolvedTestDetails;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveTestDetails = resolveTestDetails;
|
|
4
|
+
const LOCK_TAG = /^@lock\(([^)]+)\)$/;
|
|
5
|
+
const ANNOTATION_TAG = /^@annotation\(([^,)]+)(?:,(.*))?\)$/;
|
|
6
|
+
/**
|
|
7
|
+
* Playwright applies annotations of these types as test modifiers
|
|
8
|
+
* (skip/fixme before fixtures are set up, fail/slow at test start).
|
|
9
|
+
*/
|
|
10
|
+
const MODIFIER_TAG = /^@(skip|fixme|fail|slow)\((.*)\)$/;
|
|
11
|
+
function unique(items) {
|
|
12
|
+
return [...new Set(items)];
|
|
13
|
+
}
|
|
14
|
+
function createAnnotation(type, description) {
|
|
15
|
+
const trimmed = description?.trim();
|
|
16
|
+
return trimmed ? { type, description: trimmed } : { type };
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Translate gherkin tags of a pickle into playwright test details.
|
|
20
|
+
*
|
|
21
|
+
* - special tags below are consumed and not passed as playwright `tag`; all other tags are kept
|
|
22
|
+
* - `@lock(name)` → `lock: 'name'`; `@lock(-exclusive-)` → built-in exclusive lock
|
|
23
|
+
* - `@annotation(type,description)` → `annotation: { type, description }`
|
|
24
|
+
* - `@skip()` / `@fixme()` / `@fail()` / `@slow()` → playwright modifier with optional description, e.g. `@fixme(JIRA-1)`
|
|
25
|
+
*
|
|
26
|
+
* Note: gherkin tags may not contain whitespace, so write `@annotation(issue,JIRA-1)` without spaces.
|
|
27
|
+
*/
|
|
28
|
+
function resolveTestDetails(pickle) {
|
|
29
|
+
const tag = [];
|
|
30
|
+
const extraAnnotation = [];
|
|
31
|
+
const lock = [];
|
|
32
|
+
for (const name of unique(pickle.tags.map(item => item.name))) {
|
|
33
|
+
const lockMatch = LOCK_TAG.exec(name);
|
|
34
|
+
if (lockMatch) {
|
|
35
|
+
lock.push(lockMatch[1].trim());
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const annotationMatch = ANNOTATION_TAG.exec(name) ?? MODIFIER_TAG.exec(name);
|
|
39
|
+
if (annotationMatch) {
|
|
40
|
+
extraAnnotation.push(createAnnotation(annotationMatch[1].trim(), annotationMatch[2]));
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
tag.push(name);
|
|
44
|
+
}
|
|
45
|
+
const annotation = [
|
|
46
|
+
{ type: 'name', description: pickle.name },
|
|
47
|
+
{ type: 'uri', description: pickle.uri },
|
|
48
|
+
{ type: 'tags', description: JSON.stringify(tag) },
|
|
49
|
+
...extraAnnotation
|
|
50
|
+
];
|
|
51
|
+
return { tag, annotation, lock: unique(lock) };
|
|
52
|
+
}
|
package/adapter/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":";;;;;AAAA,qCAAuC;AACvC,yCAAoC;AACpC,6CAAyC;AACzC,+CAA4F;AAC5F,iDAA+D;AAE/D,+BAAgC;AAChC,uDAAoD;AAGpD,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,IAAA,wBAAU,GAAE,CAAC;AAClC,MAAM,OAAO,GAAG,IAAI,oBAAU,CAAC,MAAM,CAAC,CAAC;AACvC,MAAM,OAAO,GAAG,IAAI,oCAA0B,EAAE,CAAC;AACjD,MAAM,MAAM,GAAG,IAAI,gBAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AAE3C,SAAS,UAAU,CAAC,KAAwB;IACxC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,sBAA6B,WAAqB;IAC9C,MAAM,KAAK,GAAG,IAAA,eAAQ,EAAC,WAAW,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACpB,MAAM,QAAQ,GAAG,IAAA,mBAAO,EAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACtE,OAAO;YACH,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE,IAAI;YACtC,GAAG,EAAE,QAAQ;YACb,eAAe;YACf,KAAK,EAAE,UAAU,CAAC,IAAA,iBAAO,EAAC,eAAe,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;SAC5D,CAAA;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAED,6BAAoC,WAAqB;IACrD,oCAAyB,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IACvD,oCAAyB,CAAC,OAAO,CAAC,mBAAmB,CAAC,iCAAe,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,IAAA,eAAQ,EAAC,WAAW,CAAC,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAA,mBAAO,EAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,oCAAyB,CAAC,QAAQ,EAAmC,CAAC;AACjF,CAAC;AAED,cAAqB,MAA6B;IAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;QAC3C,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;QAChC,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QACzB,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;KAC3B,CAAC,CAAC;IACH,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAA;AAC3C,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Pickle } from '@cucumber/messages';
|
|
2
|
+
import type { TestDetailsAnnotation } from '@playwright/test';
|
|
3
|
+
export interface ResolvedTestDetails {
|
|
4
|
+
tag: string[];
|
|
5
|
+
annotation: TestDetailsAnnotation[];
|
|
6
|
+
lock: string[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Translate gherkin tags of a pickle into playwright test details.
|
|
10
|
+
*
|
|
11
|
+
* - special tags below are consumed and not passed as playwright `tag`; all other tags are kept
|
|
12
|
+
* - `@lock(name)` → `lock: 'name'`; `@lock(-exclusive-)` → built-in exclusive lock
|
|
13
|
+
* - `@annotation(type,description)` → `annotation: { type, description }`
|
|
14
|
+
* - `@skip()` / `@fixme()` / `@fail()` / `@slow()` → playwright modifier with optional description, e.g. `@fixme(JIRA-1)`
|
|
15
|
+
*
|
|
16
|
+
* Note: gherkin tags may not contain whitespace, so write `@annotation(issue,JIRA-1)` without spaces.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveTestDetails(pickle: Pickle): ResolvedTestDetails;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveTestDetails = resolveTestDetails;
|
|
4
|
+
const LOCK_TAG = /^@lock\(([^)]+)\)$/;
|
|
5
|
+
const ANNOTATION_TAG = /^@annotation\(([^,)]+)(?:,(.*))?\)$/;
|
|
6
|
+
/**
|
|
7
|
+
* Playwright applies annotations of these types as test modifiers
|
|
8
|
+
* (skip/fixme before fixtures are set up, fail/slow at test start).
|
|
9
|
+
*/
|
|
10
|
+
const MODIFIER_TAG = /^@(skip|fixme|fail|slow)\((.*)\)$/;
|
|
11
|
+
function unique(items) {
|
|
12
|
+
return [...new Set(items)];
|
|
13
|
+
}
|
|
14
|
+
function createAnnotation(type, description) {
|
|
15
|
+
const trimmed = description?.trim();
|
|
16
|
+
return trimmed ? { type, description: trimmed } : { type };
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Translate gherkin tags of a pickle into playwright test details.
|
|
20
|
+
*
|
|
21
|
+
* - special tags below are consumed and not passed as playwright `tag`; all other tags are kept
|
|
22
|
+
* - `@lock(name)` → `lock: 'name'`; `@lock(-exclusive-)` → built-in exclusive lock
|
|
23
|
+
* - `@annotation(type,description)` → `annotation: { type, description }`
|
|
24
|
+
* - `@skip()` / `@fixme()` / `@fail()` / `@slow()` → playwright modifier with optional description, e.g. `@fixme(JIRA-1)`
|
|
25
|
+
*
|
|
26
|
+
* Note: gherkin tags may not contain whitespace, so write `@annotation(issue,JIRA-1)` without spaces.
|
|
27
|
+
*/
|
|
28
|
+
function resolveTestDetails(pickle) {
|
|
29
|
+
const tag = [];
|
|
30
|
+
const extraAnnotation = [];
|
|
31
|
+
const lock = [];
|
|
32
|
+
for (const name of unique(pickle.tags.map(item => item.name))) {
|
|
33
|
+
const lockMatch = LOCK_TAG.exec(name);
|
|
34
|
+
if (lockMatch) {
|
|
35
|
+
lock.push(lockMatch[1].trim());
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const annotationMatch = ANNOTATION_TAG.exec(name) ?? MODIFIER_TAG.exec(name);
|
|
39
|
+
if (annotationMatch) {
|
|
40
|
+
extraAnnotation.push(createAnnotation(annotationMatch[1].trim(), annotationMatch[2]));
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
tag.push(name);
|
|
44
|
+
}
|
|
45
|
+
const annotation = [
|
|
46
|
+
{ type: 'name', description: pickle.name },
|
|
47
|
+
{ type: 'uri', description: pickle.uri },
|
|
48
|
+
{ type: 'tags', description: JSON.stringify(tag) },
|
|
49
|
+
...extraAnnotation
|
|
50
|
+
];
|
|
51
|
+
return { tag, annotation, lock: unique(lock) };
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=testDetails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testDetails.js","sourceRoot":"","sources":["../src/testDetails.ts"],"names":[],"mappings":";;;AASA,MAAM,QAAQ,GAAG,oBAAoB,CAAC;AACtC,MAAM,cAAc,GAAG,qCAAqC,CAAC;AAC7D;;;GAGG;AACH,MAAM,YAAY,GAAG,mCAAmC,CAAC;AAEzD,SAAS,MAAM,CAAI,KAAU;IACzB,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,WAAoB;IACxD,MAAM,OAAO,GAAG,WAAW,EAAE,IAAI,EAAE,CAAC;IACpC,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;AAC/D,CAAC;AAED;;;;;;;;;GASG;AACH,4BAAmC,MAAc;IAC7C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,eAAe,GAA4B,EAAE,CAAC;IACpD,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC5D,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/B,SAAS;QACb,CAAC;QACD,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,IAAI,eAAe,EAAE,CAAC;YAClB,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtF,SAAS;QACb,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAA4B;QACxC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE;QAC1C,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE;QACxC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;QAClD,GAAG,eAAe;KACrB,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AACnD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qavajs/playwright-runner-adapter",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "adapter for playwright test runner",
|
|
5
5
|
"main": "adapter/index.js",
|
|
6
6
|
"types": "adapter/index.d.ts",
|
|
@@ -40,16 +40,16 @@
|
|
|
40
40
|
"url": "https://github.com/qavajs/playwright-runner-adapter/issues"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@cucumber/cucumber": "^
|
|
44
|
-
"@cucumber/gherkin": "^
|
|
45
|
-
"@cucumber/tag-expressions": "^
|
|
46
|
-
"glob": "^
|
|
43
|
+
"@cucumber/cucumber": "^13.3.0",
|
|
44
|
+
"@cucumber/gherkin": "^42.0.1",
|
|
45
|
+
"@cucumber/tag-expressions": "^11.0.1",
|
|
46
|
+
"glob": "^14.0.4"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@playwright/test": "^1.
|
|
49
|
+
"@playwright/test": "^1.65.0",
|
|
50
50
|
"@qavajs/playwright-console-reporter": "^0.1.0",
|
|
51
|
-
"@types/node": "^
|
|
52
|
-
"typescript": "^
|
|
51
|
+
"@types/node": "^26.6.6",
|
|
52
|
+
"typescript": "^7.0.2"
|
|
53
53
|
},
|
|
54
54
|
"keywords": [
|
|
55
55
|
"test",
|