playwright-cucumber-ts-steps 1.1.5 → 1.1.6
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/dist/core/runner.d.ts.map +1 -1
- package/dist/core/runner.js +25 -16
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAMA,OAAO,0BAA0B,CAAC;AAClC,OAAO,6BAA6B,CAAC;AACrC,OAAO,2BAA2B,CAAC;AACnC,OAAO,sBAAsB,CAAC;AAC9B,OAAO,uBAAuB,CAAC;AAE/B,OAAO,qBAAqB,CAAC;AAE7B,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CAC3C;AAED,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAMA,OAAO,0BAA0B,CAAC;AAClC,OAAO,6BAA6B,CAAC;AACrC,OAAO,2BAA2B,CAAC;AACnC,OAAO,sBAAsB,CAAC;AAC9B,OAAO,uBAAuB,CAAC;AAE/B,OAAO,qBAAqB,CAAC;AAE7B,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CAC3C;AAED,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,QAyIpE"}
|
package/dist/core/runner.js
CHANGED
|
@@ -52,51 +52,54 @@ function runTests(featureGlob, options) {
|
|
|
52
52
|
}
|
|
53
53
|
const files = (0, glob_1.globSync)(featureGlob);
|
|
54
54
|
const envTag = process.env.TAGS;
|
|
55
|
+
if (files.length === 0) {
|
|
56
|
+
console.log(`⚠️ No Feature files found for: ${featureGlob}`);
|
|
57
|
+
}
|
|
55
58
|
for (const file of files) {
|
|
56
59
|
const content = fs.readFileSync(file, "utf8");
|
|
57
|
-
// 1. CAPTURE FEATURE
|
|
58
|
-
//
|
|
59
|
-
const featureTagMatch = content.match(/((
|
|
60
|
+
// 1. CAPTURE FEATURE TAGS
|
|
61
|
+
// Loose Regex: Matches any lines starting with @ above "Feature:"
|
|
62
|
+
const featureTagMatch = content.match(/((?:@\S+\s*)+)Feature:/);
|
|
60
63
|
const rawFeatureTags = featureTagMatch ? featureTagMatch[1] : "";
|
|
61
|
-
// Normalize newlines to spaces
|
|
62
64
|
const featureTags = rawFeatureTags.replace(/[\r\n]+/g, " ").trim();
|
|
63
65
|
const featureMatch = content.match(/Feature:\s*(.+)/);
|
|
64
66
|
const featureName = featureMatch
|
|
65
67
|
? featureMatch[1].trim()
|
|
66
68
|
: "Unnamed Feature";
|
|
67
69
|
test_1.test.describe(featureName, () => {
|
|
68
|
-
// 2.
|
|
69
|
-
//
|
|
70
|
-
|
|
70
|
+
// 2. LOOSE SCENARIO REGEX
|
|
71
|
+
// Matches: Optional Tags -> (Scenario OR Scenario Outline) -> Name
|
|
72
|
+
// Change: @\S+ allows dots/dashes. "Scenario|Scenario Outline" supports outlines.
|
|
73
|
+
const scenarioRegex = /(?:((?:@\S+\s*)+))?(?:Scenario|Scenario Outline):\s*(.+)/g;
|
|
71
74
|
let match;
|
|
75
|
+
let foundCount = 0;
|
|
72
76
|
while ((match = scenarioRegex.exec(content)) !== null) {
|
|
77
|
+
foundCount++;
|
|
73
78
|
const rawScenarioTags = match[1] || "";
|
|
74
79
|
const scenarioTags = rawScenarioTags.replace(/[\r\n]+/g, " ").trim();
|
|
75
80
|
const scenarioName = match[2].trim();
|
|
76
|
-
// 3. MERGE
|
|
77
|
-
// We combine Feature Tags + Scenario Tags into one master list
|
|
78
|
-
// e.g. "@smoke @regression" + "@api" = "@smoke @regression @api"
|
|
81
|
+
// 3. MERGE TAGS
|
|
79
82
|
const combinedTags = `${featureTags} ${scenarioTags}`.trim();
|
|
80
|
-
// 4. APPEND TO TITLE
|
|
81
|
-
// Now the test title contains EVERYTHING.
|
|
82
|
-
// Playwright's -g can now "see" the feature tags on this specific test.
|
|
83
83
|
const fullName = combinedTags
|
|
84
84
|
? `${scenarioName} ${combinedTags}`
|
|
85
85
|
: scenarioName;
|
|
86
|
-
//
|
|
86
|
+
// DEBUG LOG: See what we found
|
|
87
|
+
// console.log(` 👉 Found: "${scenarioName}" [Tags: ${combinedTags}]`);
|
|
88
|
+
// 4. ENV FILTERING (Optional)
|
|
87
89
|
const activeFilter = options?.tags || envTag;
|
|
88
90
|
if (activeFilter) {
|
|
89
91
|
const targetGroups = activeFilter.split(",").map((t) => t.trim());
|
|
90
92
|
const isMatch = targetGroups.some((group) => {
|
|
91
93
|
const requiredTags = group.split("+").map((t) => t.trim());
|
|
92
|
-
// Check against the COMBINED list
|
|
93
94
|
return requiredTags.every((t) => combinedTags.includes(t));
|
|
94
95
|
});
|
|
95
96
|
if (!isMatch)
|
|
96
97
|
continue;
|
|
97
98
|
}
|
|
98
99
|
const startIndex = match.index + match[0].length;
|
|
99
|
-
const nextMatchIndex = content
|
|
100
|
+
const nextMatchIndex = content
|
|
101
|
+
.slice(startIndex)
|
|
102
|
+
.search(/(?:Scenario|Scenario Outline):/);
|
|
100
103
|
const blockEnd = nextMatchIndex === -1 ? content.length : startIndex + nextMatchIndex;
|
|
101
104
|
const scenarioBlock = content.slice(startIndex, blockEnd);
|
|
102
105
|
(0, test_1.test)(fullName, async ({ page }, testInfo) => {
|
|
@@ -111,6 +114,7 @@ function runTests(featureGlob, options) {
|
|
|
111
114
|
stepText.startsWith("@") ||
|
|
112
115
|
stepText === "")
|
|
113
116
|
continue;
|
|
117
|
+
// Handle Data Tables
|
|
114
118
|
const tableData = [];
|
|
115
119
|
while (i + 1 < lines.length && lines[i + 1].startsWith("|")) {
|
|
116
120
|
i++;
|
|
@@ -149,6 +153,11 @@ function runTests(featureGlob, options) {
|
|
|
149
153
|
}
|
|
150
154
|
});
|
|
151
155
|
}
|
|
156
|
+
// SAFETY CHECK
|
|
157
|
+
if (foundCount === 0) {
|
|
158
|
+
console.warn(`⚠️ File matched but 0 Scenarios found in: ${file}`);
|
|
159
|
+
console.warn(` Check if you are using 'Scenario Outline' or strange spacing.`);
|
|
160
|
+
}
|
|
152
161
|
});
|
|
153
162
|
}
|
|
154
163
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "playwright-cucumber-ts-steps",
|
|
3
3
|
"description": "A collection of reusable Playwright step definitions for Cucumber in TypeScript, designed to streamline end-to-end testing across web, API, and mobile applications.",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.6",
|
|
5
5
|
"private": false,
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|