@sun-asterisk/sungen 3.2.16 → 3.2.17
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/cli/commands/ingest.d.ts.map +1 -1
- package/dist/cli/commands/ingest.js +56 -4
- package/dist/cli/commands/ingest.js.map +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/click-action.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/click-element-with-text.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/navigation/wait-timeout.hbs +1 -1
- package/dist/generators/test-generator/utils/runtime-data-transformer.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/runtime-data-transformer.js +28 -17
- package/dist/generators/test-generator/utils/runtime-data-transformer.js.map +1 -1
- package/dist/ingest/legacy-parser.d.ts +3 -0
- package/dist/ingest/legacy-parser.d.ts.map +1 -1
- package/dist/ingest/legacy-parser.js +52 -3
- package/dist/ingest/legacy-parser.js.map +1 -1
- package/dist/orchestrator/templates/ai-src/skills/sungen-gherkin-syntax/SKILL.md +7 -0
- package/package.json +4 -4
- package/src/cli/commands/ingest.ts +57 -5
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/click-action.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/click-element-with-text.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/navigation/wait-timeout.hbs +1 -1
- package/src/generators/test-generator/utils/runtime-data-transformer.ts +29 -18
- package/src/ingest/legacy-parser.ts +48 -3
- package/src/orchestrator/templates/ai-src/skills/sungen-gherkin-syntax/SKILL.md +7 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ingest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ingest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4DpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoI5D"}
|
|
@@ -37,13 +37,23 @@ exports.registerIngestCommand = registerIngestCommand;
|
|
|
37
37
|
const path = __importStar(require("path"));
|
|
38
38
|
const fs = __importStar(require("fs"));
|
|
39
39
|
const ingest_1 = require("../../ingest");
|
|
40
|
+
// A tab name that contains commas must round-trip through the quote-aware
|
|
41
|
+
// --sheets parser — wrap it in doubled quotes inside the single-quoted shell arg.
|
|
42
|
+
const quoteTab = (name) => (name.includes(',') ? `""${name}""` : name);
|
|
40
43
|
function renderInventoryMd(inv, r) {
|
|
41
44
|
const lines = [];
|
|
42
45
|
lines.push(`# Legacy Testcase Inventory — ${inv.source.file}`, '');
|
|
43
46
|
lines.push(`Total testcases: **${r.total}**`, '');
|
|
44
47
|
lines.push('## Sheets', '', '| Sheet | Type | Rows |', '|---|---|---|');
|
|
48
|
+
// Non-testcase tabs (Overview/SQL/review notes…) are classified but NEVER read —
|
|
49
|
+
// say so, or the listing reads as if their content was ingested.
|
|
45
50
|
for (const s of r.sheets)
|
|
46
|
-
lines.push(
|
|
51
|
+
lines.push(s.type === 'testcase'
|
|
52
|
+
? `| ${s.name} | ${s.type} | ${s.rows} |`
|
|
53
|
+
: `| ${s.name} | ${s.type} | — (skipped) |`);
|
|
54
|
+
const skipped = r.sheets.filter((s) => s.type !== 'testcase').length;
|
|
55
|
+
if (skipped)
|
|
56
|
+
lines.push('', `_${skipped} non-testcase tab(s) skipped — no content read._`);
|
|
47
57
|
lines.push('', '## By category', '');
|
|
48
58
|
for (const [k, v] of Object.entries(r.byCategory).sort((a, b) => b[1] - a[1]))
|
|
49
59
|
lines.push(`- ${k}: ${v}`);
|
|
@@ -58,7 +68,10 @@ function render(inv, r) {
|
|
|
58
68
|
L('');
|
|
59
69
|
L(` Sheets:`);
|
|
60
70
|
for (const s of r.sheets)
|
|
61
|
-
L(` • ${s.name} — ${s.type} (${s.rows})`);
|
|
71
|
+
L(` • ${s.name} — ${s.type}${s.type === 'testcase' ? ` (${s.rows})` : ' → skipped (no content read)'}`);
|
|
72
|
+
const skipped = r.sheets.filter((s) => s.type !== 'testcase').length;
|
|
73
|
+
if (skipped)
|
|
74
|
+
L(` (${skipped} non-testcase tab(s) skipped)`);
|
|
62
75
|
L('');
|
|
63
76
|
L(` TOTAL testcases: ${r.total}`);
|
|
64
77
|
L('');
|
|
@@ -125,12 +138,51 @@ function registerIngestCommand(program) {
|
|
|
125
138
|
for (const s of sheets)
|
|
126
139
|
console.log(` • ${s.name} — ${s.type} (${s.rows} rows)`);
|
|
127
140
|
console.log('');
|
|
128
|
-
|
|
141
|
+
const quoted = sheets.filter((s) => s.type === 'testcase').map((s) => quoteTab(s.name)).join(',');
|
|
142
|
+
console.log(` Ingest the testcase tab(s) with: --sheets '${quoted}'`);
|
|
129
143
|
console.log('');
|
|
130
144
|
return;
|
|
131
145
|
}
|
|
132
|
-
|
|
146
|
+
// --sheets: legacy tab names may CONTAIN commas (field workbook:
|
|
147
|
+
// "EX-0403,0404,0405,0407-SearchRe"), so a bare split(',') shredded them and
|
|
148
|
+
// silently ingested nothing. Resolution order:
|
|
149
|
+
// 1. the WHOLE string equals one real tab name → that single tab;
|
|
150
|
+
// 2. else parse as a quote-aware CSV line ("Tab, with commas",Other);
|
|
151
|
+
// 3. any part matching NO real tab → exit non-zero listing the tabs —
|
|
152
|
+
// an empty inventory must never be produced silently.
|
|
153
|
+
let onlySheets;
|
|
154
|
+
if (options.sheets) {
|
|
155
|
+
const raw = String(options.sheets);
|
|
156
|
+
const available = (await (0, ingest_1.listSheets)(files)).map((sh) => sh.name);
|
|
157
|
+
const byLower = new Map(available.map((n) => [n.trim().toLowerCase(), n]));
|
|
158
|
+
const whole = byLower.get(raw.trim().toLowerCase());
|
|
159
|
+
if (whole) {
|
|
160
|
+
onlySheets = [whole];
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
const parts = ((0, ingest_1.parseCSV)(raw)[0] || []).map((p) => p.trim()).filter(Boolean);
|
|
164
|
+
const misses = parts.filter((pt) => !byLower.has(pt.toLowerCase()));
|
|
165
|
+
if (misses.length) {
|
|
166
|
+
throw new Error(`--sheets: no tab named ${misses.map((m) => `"${m}"`).join(', ')}.\n` +
|
|
167
|
+
` Available tabs:\n${available.map((n) => ` • ${n}`).join('\n')}\n` +
|
|
168
|
+
` Tip: quote a tab name that contains commas: --sheets '"${available[0] || 'Tab, name'}"'`);
|
|
169
|
+
}
|
|
170
|
+
onlySheets = parts.map((pt) => byLower.get(pt.toLowerCase()));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
133
173
|
const inv = await (0, ingest_1.parseLegacyFile)(files, onlySheets);
|
|
174
|
+
for (const w of inv.warnings ?? [])
|
|
175
|
+
console.warn(` \u26a0 ${w}`);
|
|
176
|
+
// Merge guard: without --sheets, EVERY tab that classifies as testcase is merged
|
|
177
|
+
// into one inventory. Field workbooks carry tabs for several screens (plus
|
|
178
|
+
// deprecated "Old\u2026" copies) \u2014 merging them silently poisons a per-screen
|
|
179
|
+
// inventory, so say it loudly and hand over the ready-made --sheets line.
|
|
180
|
+
if (!options.sheets) {
|
|
181
|
+
const tcTabs = inv.sheets.filter((sh) => sh.type === 'testcase');
|
|
182
|
+
if (tcTabs.length > 1) {
|
|
183
|
+
console.warn(` \u26a0 ${tcTabs.length} testcase tabs merged into ONE inventory \u2014 if they belong to different screens, scope with: --sheets '${tcTabs.map((sh) => quoteTab(sh.name)).join(',')}'`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
134
186
|
const report = (0, ingest_1.baselineAudit)(inv);
|
|
135
187
|
fs.writeFileSync(path.join(outDir, 'inventory.json'), JSON.stringify({ inventory: inv, baseline: report }, null, 2));
|
|
136
188
|
fs.writeFileSync(path.join(outDir, 'inventory.md'), renderInventoryMd(inv, report));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../../src/cli/commands/ingest.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../../src/cli/commands/ingest.ts"],"names":[],"mappings":"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"}
|
package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/click-action.hbs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
await {{> locator}}.click();
|
|
1
|
+
await {{> locator}}.click({{#if force}}{ force: true }{{/if}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
await {{> locator-base}}.filter({ hasText: {{> has-text-value dataValue=dataValue exact=exact legacyTail=(and (eq strategy "text") (eq value ""))}} }){{> locator-nth}}.click();
|
|
1
|
+
await {{> locator-base}}.filter({ hasText: {{> has-text-value dataValue=dataValue exact=exact legacyTail=(and (eq strategy "text") (eq value ""))}} }){{> locator-nth}}.click({{#if force}}{ force: true }{{/if}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
await page.
|
|
1
|
+
await page.waitForTimeout({{duration}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-data-transformer.d.ts","sourceRoot":"","sources":["../../../../src/generators/test-generator/utils/runtime-data-transformer.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAmB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"runtime-data-transformer.d.ts","sourceRoot":"","sources":["../../../../src/generators/test-generator/utils/runtime-data-transformer.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAmB,GAAG,MAAM,CAwD1F;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D"}
|
|
@@ -17,25 +17,32 @@ function transformToRuntimeData(code, accessor = 'testData') {
|
|
|
17
17
|
// testData.get() (silent: `toHaveAttribute('href', 'official_site_url')`). Generated
|
|
18
18
|
// comments are always full-line, so anchoring loses nothing.
|
|
19
19
|
code = code.replace(/^(\s*)\/\/(.*)__SUNGEN_TD_([A-Za-z0-9_]+)__(.*)$/gm, (_, indent, before, enc, after) => `${indent}//${before}${decodeKey(enc)}${after}`);
|
|
20
|
-
// Pass 1: String literal context —
|
|
21
|
-
// '
|
|
22
|
-
//
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
20
|
+
// Pass 1: String literal context — a literal may carry SEVERAL markers
|
|
21
|
+
// ('/{{code}}/car-search?{{prefill}}' compiles to two markers in ONE literal).
|
|
22
|
+
// Match the whole quoted literal that contains at least one marker, then
|
|
23
|
+
// interpolate EVERY marker inside it. The old shape (one marker + lazy
|
|
24
|
+
// prefix/suffix) swallowed trailing markers into its suffix verbatim; they
|
|
25
|
+
// escaped the quote context (the literal had become a backtick template) and
|
|
26
|
+
// Pass 3's numeric catch-all emitted them as literal
|
|
27
|
+
// `Number(testData.get(...))` TEXT inside the template — a compiling spec
|
|
28
|
+
// navigating to a garbage URL.
|
|
29
|
+
// 'marker' → testData.get('key')
|
|
30
|
+
// 'a__m1__b__m2__c' → `a${testData.get('k1')}b${testData.get('k2')}c`
|
|
31
|
+
code = code.replace(/(['"])((?:(?!\1).)*?__SUNGEN_TD_[A-Za-z0-9_]+__(?:(?!\1).)*)\1/g, (_, _quote, body) => {
|
|
32
|
+
const whole = /^__SUNGEN_TD_([A-Za-z0-9_]+)__$/.exec(body);
|
|
33
|
+
if (whole)
|
|
34
|
+
return `${accessor}.get('${decodeKey(whole[1])}')`;
|
|
35
|
+
return `\`${interpolateMarkers(body, accessor)}\``;
|
|
29
36
|
});
|
|
30
|
-
// Pass 2: Regex literal context —
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const ref = `${accessor}.get('${key}')`;
|
|
37
|
+
// Pass 2: Regex literal context — /…__marker__…/ → new RegExp(`…`). Same
|
|
38
|
+
// several-markers-per-literal rule as Pass 1 (/{{min}}-{{max}} items/).
|
|
39
|
+
// Only matches within a single line (no newlines in the body).
|
|
40
|
+
code = code.replace(/\/((?:[^/\\\n]|\\.)*?__SUNGEN_TD_[A-Za-z0-9_]+__(?:[^/\\\n]|\\.)*)\/([gimsuy]*)/g, (_, body, flags) => {
|
|
35
41
|
const flagStr = flags ? `, '${flags}'` : '';
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
42
|
+
const whole = /^__SUNGEN_TD_([A-Za-z0-9_]+)__$/.exec(body);
|
|
43
|
+
if (whole)
|
|
44
|
+
return `new RegExp(${accessor}.get('${decodeKey(whole[1])}')${flagStr})`;
|
|
45
|
+
return `new RegExp(\`${interpolateMarkers(body, accessor)}\`${flagStr})`;
|
|
39
46
|
});
|
|
40
47
|
// Pass 3: Bare-identifier context — any marker left after the string/regex passes
|
|
41
48
|
// sits as a bare token in a numeric position (e.g. `toHaveCount(__marker__)` from the
|
|
@@ -49,4 +56,8 @@ function hasRuntimeDataMarkers(code) {
|
|
|
49
56
|
function decodeKey(encoded) {
|
|
50
57
|
return encoded.replace(/_D_/g, '.');
|
|
51
58
|
}
|
|
59
|
+
/** Replace every marker in a literal's body with a `${accessor.get('key')}` interpolation. */
|
|
60
|
+
function interpolateMarkers(body, accessor) {
|
|
61
|
+
return body.replace(/__SUNGEN_TD_([A-Za-z0-9_]+)__/g, (_, enc) => `\${${accessor}.get('${decodeKey(enc)}')}`);
|
|
62
|
+
}
|
|
52
63
|
//# sourceMappingURL=runtime-data-transformer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-data-transformer.js","sourceRoot":"","sources":["../../../../src/generators/test-generator/utils/runtime-data-transformer.ts"],"names":[],"mappings":";;AAMA,
|
|
1
|
+
{"version":3,"file":"runtime-data-transformer.js","sourceRoot":"","sources":["../../../../src/generators/test-generator/utils/runtime-data-transformer.ts"],"names":[],"mappings":";;AAMA,wDAwDC;AAED,sDAEC;AAlED,MAAM,cAAc,GAAG,+BAA+B,CAAC;AAEvD;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,IAAY,EAAE,WAAmB,UAAU;IAChF,2EAA2E;IAC3E,+EAA+E;IAC/E,mFAAmF;IACnF,sFAAsF;IACtF,oFAAoF;IACpF,8EAA8E;IAC9E,qFAAqF;IACrF,6DAA6D;IAC7D,IAAI,GAAG,IAAI,CAAC,OAAO,CACjB,oDAAoD,EACpD,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CACnF,CAAC;IAEF,uEAAuE;IACvE,+EAA+E;IAC/E,yEAAyE;IACzE,uEAAuE;IACvE,2EAA2E;IAC3E,6EAA6E;IAC7E,qDAAqD;IACrD,0EAA0E;IAC1E,+BAA+B;IAC/B,0CAA0C;IAC1C,sEAAsE;IACtE,IAAI,GAAG,IAAI,CAAC,OAAO,CACjB,iEAAiE,EACjE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,KAAK,GAAG,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,KAAK;YAAE,OAAO,GAAG,QAAQ,SAAS,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,OAAO,KAAK,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IACrD,CAAC,CACF,CAAC;IAEF,yEAAyE;IACzE,wEAAwE;IACxE,+DAA+D;IAC/D,IAAI,GAAG,IAAI,CAAC,OAAO,CACjB,kFAAkF,EAClF,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACjB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,KAAK;YAAE,OAAO,cAAc,QAAQ,SAAS,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC;QACpF,OAAO,gBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,OAAO,GAAG,CAAC;IAC3E,CAAC,CACF,CAAC;IAEF,kFAAkF;IAClF,sFAAsF;IACtF,yFAAyF;IACzF,IAAI,GAAG,IAAI,CAAC,OAAO,CACjB,gCAAgC,EAChC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,UAAU,QAAQ,SAAS,SAAS,CAAC,GAAG,CAAC,KAAK,CAC3D,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,qBAAqB,CAAC,IAAY;IAChD,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,SAAS,CAAC,OAAe;IAChC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,8FAA8F;AAC9F,SAAS,kBAAkB,CAAC,IAAY,EAAE,QAAgB;IACxD,OAAO,IAAI,CAAC,OAAO,CAAC,gCAAgC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,QAAQ,SAAS,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAChH,CAAC"}
|
|
@@ -25,6 +25,9 @@ export interface LegacyInventory {
|
|
|
25
25
|
};
|
|
26
26
|
sheets: SheetInfo[];
|
|
27
27
|
testcases: LegacyTestcase[];
|
|
28
|
+
/** Anti-silence guards: convention mismatches that would otherwise drop data quietly
|
|
29
|
+
* (near-miss headers, testcase tab with 0 rows, mandatory column empty on every row). */
|
|
30
|
+
warnings?: string[];
|
|
28
31
|
}
|
|
29
32
|
export declare function parseCSV(text: string): string[][];
|
|
30
33
|
export interface RawSheet {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacy-parser.d.ts","sourceRoot":"","sources":["../../src/ingest/legacy-parser.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,kBAAkB,GAAG,cAAc,GAAG,SAAS,CAAC;AACrF,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAE1E,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,EAAE,cAAc,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"legacy-parser.d.ts","sourceRoot":"","sources":["../../src/ingest/legacy-parser.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,kBAAkB,GAAG,cAAc,GAAG,SAAS,CAAC;AACrF,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAE1E,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B;8FAC0F;IAC1F,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAGD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CAcjD;AAkFD,MAAM,WAAW,QAAQ;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;CAAE;AAsC5D,uEAAuE;AACvE,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAUnF;AAED;gFACgF;AAChF,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAyCnH"}
|
|
@@ -82,7 +82,11 @@ function parseCSV(text) {
|
|
|
82
82
|
}
|
|
83
83
|
return rows;
|
|
84
84
|
}
|
|
85
|
-
|
|
85
|
+
// Strip the "required" decoration `(*)` BEFORE stray asterisks: legacy workbooks
|
|
86
|
+
// mark mandatory columns as `Steps (*)` / `TC ID (*)`. Removing only the `*` left
|
|
87
|
+
// `steps ()` — classification regexes still matched (/steps?|expected/), but the
|
|
88
|
+
// exact-key column lookups missed and every mandatory cell came back '' silently.
|
|
89
|
+
const norm = (s) => (s || '').replace(/\(\s*\*\s*\)/g, '').replace(/\*/g, '').trim().toLowerCase();
|
|
86
90
|
function detectSheetType(rows) {
|
|
87
91
|
for (let i = 0; i < Math.min(rows.length, 40); i++) {
|
|
88
92
|
const cells = rows[i].map(norm);
|
|
@@ -144,6 +148,27 @@ function parseTestcaseSheet(rows, headerRow, sheet) {
|
|
|
144
148
|
}
|
|
145
149
|
return out;
|
|
146
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* exceljs's `.text` getter can THROW on a merged cell whose master value is null
|
|
153
|
+
* (MergeValue.toString() on null) — a `cell.text != null` guard never runs because
|
|
154
|
+
* READING the property explodes. Field workbook: 25 such cells across 3 tabs
|
|
155
|
+
* (Google-Sheets-exported merged headers). Guard on `.value` first (safe — merge
|
|
156
|
+
* slaves delegate to the master's value without stringifying), and keep a
|
|
157
|
+
* try/catch backstop for values that are non-null yet still un-stringifiable
|
|
158
|
+
* (e.g. a formula cell whose result is null). Never hand-stringify `.value` —
|
|
159
|
+
* richText/hyperlink objects would become "[object Object]"; exceljs's own
|
|
160
|
+
* `.text` stays the single formatter.
|
|
161
|
+
*/
|
|
162
|
+
function safeCellText(cell) {
|
|
163
|
+
if (cell.value == null)
|
|
164
|
+
return '';
|
|
165
|
+
try {
|
|
166
|
+
return String(cell.text ?? '');
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return '';
|
|
170
|
+
}
|
|
171
|
+
}
|
|
147
172
|
/** Load sheets from one input file: CSV (1 sheet), XLSX (all sheets), or a JSON
|
|
148
173
|
* sheet-bundle (the shape the Google-Sheets/MCP skill produces). */
|
|
149
174
|
async function loadSheets(filePath) {
|
|
@@ -171,7 +196,7 @@ async function loadSheets(filePath) {
|
|
|
171
196
|
const rows = [];
|
|
172
197
|
ws.eachRow((row) => {
|
|
173
198
|
const cells = [];
|
|
174
|
-
row.eachCell({ includeEmpty: true }, (cell) => { cells.push(
|
|
199
|
+
row.eachCell({ includeEmpty: true }, (cell) => { cells.push(safeCellText(cell)); });
|
|
175
200
|
rows.push(cells);
|
|
176
201
|
});
|
|
177
202
|
out.push({ name: ws.name, rows });
|
|
@@ -199,7 +224,7 @@ async function parseLegacyFile(filePaths, onlySheets) {
|
|
|
199
224
|
const want = onlySheets && onlySheets.length ? new Set(onlySheets.map((s) => s.trim().toLowerCase())) : null;
|
|
200
225
|
const inv = {
|
|
201
226
|
source: { file: files.map((f) => path.basename(f)).join(', ') },
|
|
202
|
-
sheets: [], testcases: [],
|
|
227
|
+
sheets: [], testcases: [], warnings: [],
|
|
203
228
|
};
|
|
204
229
|
for (const f of files) {
|
|
205
230
|
for (const s of await loadSheets(f)) {
|
|
@@ -209,6 +234,30 @@ async function parseLegacyFile(filePaths, onlySheets) {
|
|
|
209
234
|
let tcs = [];
|
|
210
235
|
if (type === 'testcase' && headerRow >= 0)
|
|
211
236
|
tcs = parseTestcaseSheet(s.rows, headerRow, s.name);
|
|
237
|
+
// Anti-silence guards — a convention mismatch must SAY so, never quietly drop data:
|
|
238
|
+
// (a) near-miss: a tab that carries a TC-ID-ish header yet classified unknown;
|
|
239
|
+
// (b) a testcase tab whose extraction produced ZERO rows;
|
|
240
|
+
// (c) rows extracted but a mandatory column resolved empty on EVERY row.
|
|
241
|
+
if (type === 'unknown') {
|
|
242
|
+
const loose = (v) => v.replace(/[^a-z0-9]/gi, '').toLowerCase();
|
|
243
|
+
const nearMissRow = s.rows.slice(0, 40).find((r) => r.some((c) => /tcid/.test(loose(c))));
|
|
244
|
+
if (nearMissRow) {
|
|
245
|
+
inv.warnings.push(`sheet "${s.name}": looks like a testcase sheet (TC-ID-like header found) but was NOT classified — header candidates: [${nearMissRow.filter(Boolean).slice(0, 10).join(' | ')}]`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
else if (type === 'testcase' && headerRow >= 0) {
|
|
249
|
+
const header = s.rows[headerRow].filter(Boolean).slice(0, 12).join(' | ');
|
|
250
|
+
if (tcs.length === 0) {
|
|
251
|
+
inv.warnings.push(`sheet "${s.name}": classified testcase but 0 rows extracted — column names may not follow the expected convention. Header row: [${header}]`);
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
for (const [field, label] of [['steps', 'Steps'], ['expected', 'Expected results']]) {
|
|
255
|
+
if (tcs.every((t) => !t[field])) {
|
|
256
|
+
inv.warnings.push(`sheet "${s.name}": the "${label}" column resolved EMPTY for all ${tcs.length} extracted row(s) — check its header spelling. Header row: [${header}]`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
212
261
|
inv.sheets.push({ name: s.name, type, rows: tcs.length || s.rows.length });
|
|
213
262
|
inv.testcases.push(...tcs);
|
|
214
263
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacy-parser.js","sourceRoot":"","sources":["../../src/ingest/legacy-parser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"legacy-parser.js","sourceRoot":"","sources":["../../src/ingest/legacy-parser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,4BAcC;AAyHD,gCAUC;AAID,0CAyCC;AApOD;;;;GAIG;AACH,uCAAyB;AACzB,2CAA6B;AA+B7B,gEAAgE;AAChE,SAAgB,QAAQ,CAAC,IAAY;IACnC,MAAM,IAAI,GAAe,EAAE,CAAC;IAAC,IAAI,GAAG,GAAa,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;IAC3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,EAAE,CAAC;YACN,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAAC,KAAK,IAAI,GAAG,CAAC;oBAAC,CAAC,EAAE,CAAC;gBAAC,CAAC;;oBAAM,CAAC,GAAG,KAAK,CAAC;YAAC,CAAC;;gBAC7E,KAAK,IAAI,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG;YAAE,CAAC,GAAG,IAAI,CAAC;aAC1B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,KAAK,GAAG,EAAE,CAAC;QAAC,CAAC;aAC/C,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAAC,GAAG,GAAG,EAAE,CAAC;YAAC,KAAK,GAAG,EAAE,CAAC;QAAC,CAAC;aAC1E,IAAI,CAAC,KAAK,IAAI;YAAE,KAAK,IAAI,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IACpE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iFAAiF;AACjF,kFAAkF;AAClF,iFAAiF;AACjF,kFAAkF;AAClF,MAAM,IAAI,GAAG,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAEvH,SAAS,eAAe,CAAC,IAAgB;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxF,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACrG,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAChD,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvF,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACtD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,MAAM,CAAC,MAAgB;IAC9B,MAAM,CAAC,GAA2B,EAAE,CAAC;IACrC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IACtC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IACnD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAgB,EAAE,SAAiB,EAAE,KAAa;IAC5E,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACnC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,CAAC,CAAW,EAAE,GAAW,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7F,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,sFAAsF;IACtF,0FAA0F;IAC1F,yDAAyD;IACzD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IAC/C,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3B,IAAI,CAAC,EAAE,IAAI,mCAAmC,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,SAAS;QAClE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;QACzC,EAAE,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChD,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC;QAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ;YAAE,SAAS,CAAC,2BAA2B;QAC9D,GAAG,CAAC,IAAI,CAAC;YACP,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,iBAAiB;YACpE,WAAW,EAAE,EAAE,CAAC,GAAG,IAAI,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,IAAI,SAAS;YACpF,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,SAAS,EAAE,KAAK,EAAE,QAAQ;YAC3D,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YACxC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,IAAI,SAAS;YAC1C,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,4BAA4B,CAAC,IAAI,SAAS;SACnF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,YAAY,CAAC,IAAS;IAC7B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAClC,IAAI,CAAC;QAAC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;AAC9D,CAAC;AAID;oEACoE;AACpE,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IACxG,CAAC;IACD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,mFAAmF;QACnF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACzF,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAkB,EAAE,CAAC,CAAC,CAAC;QAC5F,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAClC,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAkB,EAAE,CAAC,CAAC,CAAC;QAC1F,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,8DAA8D;QAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,GAAG,GAAe,EAAE,CAAC;QAC3B,EAAE,CAAC,SAAS,CAAC,CAAC,EAAO,EAAE,EAAE;YACvB,MAAM,IAAI,GAAe,EAAE,CAAC;YAC5B,EAAE,CAAC,OAAO,CAAC,CAAC,GAAQ,EAAE,EAAE;gBACtB,MAAM,KAAK,GAAa,EAAE,CAAC;gBAC3B,GAAG,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,IAAS,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzF,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,6CAA6C,CAAC,CAAC;AAC9F,CAAC;AAED,uEAAuE;AAChE,KAAK,UAAU,UAAU,CAAC,SAA4B;IAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;gFACgF;AACzE,KAAK,UAAU,eAAe,CAAC,SAA4B,EAAE,UAAqB;IACvF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7G,MAAM,GAAG,GAAoB;QAC3B,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC/D,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;KACxC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAAE,SAAS;YAC7D,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,GAAG,GAAqB,EAAE,CAAC;YAC/B,IAAI,IAAI,KAAK,UAAU,IAAI,SAAS,IAAI,CAAC;gBAAE,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/F,oFAAoF;YACpF,gFAAgF;YAChF,2DAA2D;YAC3D,0EAA0E;YAC1E,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBACxE,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1F,IAAI,WAAW,EAAE,CAAC;oBAChB,GAAG,CAAC,QAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,yGAAyG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACvM,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,KAAK,UAAU,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;gBACjD,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC1E,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACrB,GAAG,CAAC,QAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,mHAAmH,MAAM,GAAG,CAAC,CAAC;gBACnK,CAAC;qBAAM,CAAC;oBACN,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAU,EAAE,CAAC;wBAC7F,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;4BACzC,GAAG,CAAC,QAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,WAAW,KAAK,mCAAmC,GAAG,CAAC,MAAM,+DAA+D,MAAM,GAAG,CAAC,CAAC;wBAC5K,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3E,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -39,6 +39,7 @@ User uncheck [T] checkbox | toggle
|
|
|
39
39
|
User select [T] dropdown with {{v}}
|
|
40
40
|
User click [T] button | tab | column | breadcrumb
|
|
41
41
|
User click [T] row with {{v}}
|
|
42
|
+
User try to click [T] button | link # DISABLED element only — see rule below (v3.3)
|
|
42
43
|
User double click [T] element
|
|
43
44
|
User hover [T] icon | row
|
|
44
45
|
User drag [T] to [T2]
|
|
@@ -47,6 +48,12 @@ User expand | collapse [T] row
|
|
|
47
48
|
|
|
48
49
|
**click + with {{Value}} rule**: NO value for static (`button`, `link`, `icon`, `tab`). WITH value only for dynamic lists (`row`, `item`, `card`, `option`).
|
|
49
50
|
|
|
51
|
+
**try to click rule** (v3.3, web only): use ONLY when the element is expected to be DISABLED and the
|
|
52
|
+
scenario asserts nothing happens (cooldown re-send, submit before the form is valid). `click` waits for
|
|
53
|
+
`enabled` → it can only time out there; `try to click` compiles to `.click({ force: true })`. Always
|
|
54
|
+
pair it with the proof: `Then User see [T] TYPE is disabled` + an assertion that the effect did NOT occur.
|
|
55
|
+
NEVER use it for a click that is supposed to work — it deletes the actionability wait.
|
|
56
|
+
|
|
50
57
|
### Alert / Keyboard / Wait / Scroll
|
|
51
58
|
|
|
52
59
|
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sun-asterisk/sungen",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.17",
|
|
4
4
|
"description": "Deterministic E2E Test Compiler - Gherkin + Selectors → Playwright tests",
|
|
5
5
|
"main": "src/index.ts",
|
|
6
6
|
"types": "src/index.ts",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"copy-templates": "mkdir -p dist/generators/test-generator/adapters/playwright/templates/steps && mkdir -p dist/generators/test-generator/templates && mkdir -p dist/orchestrator/templates && mkdir -p dist/dashboard/templates && cp -r src/generators/test-generator/adapters/playwright/templates/*.hbs dist/generators/test-generator/adapters/playwright/templates/ 2>/dev/null || true && cp -r src/generators/test-generator/adapters/playwright/templates/steps dist/generators/test-generator/adapters/playwright/templates/ && mkdir -p dist/generators/test-generator/adapters/appium/templates/steps && cp -r src/generators/test-generator/adapters/appium/templates/*.hbs dist/generators/test-generator/adapters/appium/templates/ 2>/dev/null || true && cp -r src/generators/test-generator/adapters/appium/templates/steps dist/generators/test-generator/adapters/appium/templates/ && cp src/generators/test-generator/templates/*.hbs dist/generators/test-generator/templates/ 2>/dev/null || true && cp -r src/orchestrator/templates/* dist/orchestrator/templates/ && cp src/dashboard/templates/index.html dist/dashboard/templates/index.html && mkdir -p dist/harness/catalog && cp src/harness/catalog/*.yaml dist/harness/catalog/",
|
|
13
13
|
"build:dashboard": "cd ../../dashboard && npm install --silent && npm run build && cd - && cp ../../dashboard/dist/index.html src/dashboard/templates/index.html",
|
|
14
14
|
"dev": "tsx src/cli/index.ts",
|
|
15
|
-
"test": "tsx tests/
|
|
15
|
+
"test": "tsx tests/run-all.ts",
|
|
16
16
|
"test:update": "tsx tests/golden/run.ts --update && tsx tests/audit/run.ts --update && tsx tests/ingest/run.ts --update",
|
|
17
17
|
"prepublishOnly": "npm run build:dashboard && npm run build"
|
|
18
18
|
},
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"@babel/types": "^7.28.5",
|
|
40
40
|
"@cucumber/gherkin": "^37.0.0",
|
|
41
41
|
"@cucumber/messages": "^31.0.0",
|
|
42
|
-
"@sungen/driver-data-factory": "3.2.
|
|
43
|
-
"@sungen/driver-ui": "3.2.
|
|
42
|
+
"@sungen/driver-data-factory": "3.2.17",
|
|
43
|
+
"@sungen/driver-ui": "3.2.17",
|
|
44
44
|
"chalk": "^5.6.2",
|
|
45
45
|
"commander": "^14.0.2",
|
|
46
46
|
"dotenv": "^17.2.3",
|
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
|
-
import { parseLegacyFile, listSheets, baselineAudit, BaselineReport, LegacyInventory, inventoryToGherkin, reconcileViewpoints, renderViewpointOverview, fetchGoogleSheet } from '../../ingest';
|
|
4
|
+
import { parseLegacyFile, listSheets, baselineAudit, BaselineReport, LegacyInventory, inventoryToGherkin, reconcileViewpoints, renderViewpointOverview, fetchGoogleSheet, parseCSV } from '../../ingest';
|
|
5
|
+
|
|
6
|
+
// A tab name that contains commas must round-trip through the quote-aware
|
|
7
|
+
// --sheets parser — wrap it in doubled quotes inside the single-quoted shell arg.
|
|
8
|
+
const quoteTab = (name: string) => (name.includes(',') ? `""${name}""` : name);
|
|
5
9
|
|
|
6
10
|
function renderInventoryMd(inv: LegacyInventory, r: BaselineReport): string {
|
|
7
11
|
const lines: string[] = [];
|
|
8
12
|
lines.push(`# Legacy Testcase Inventory — ${inv.source.file}`, '');
|
|
9
13
|
lines.push(`Total testcases: **${r.total}**`, '');
|
|
10
14
|
lines.push('## Sheets', '', '| Sheet | Type | Rows |', '|---|---|---|');
|
|
11
|
-
|
|
15
|
+
// Non-testcase tabs (Overview/SQL/review notes…) are classified but NEVER read —
|
|
16
|
+
// say so, or the listing reads as if their content was ingested.
|
|
17
|
+
for (const s of r.sheets) lines.push(s.type === 'testcase'
|
|
18
|
+
? `| ${s.name} | ${s.type} | ${s.rows} |`
|
|
19
|
+
: `| ${s.name} | ${s.type} | — (skipped) |`);
|
|
20
|
+
const skipped = r.sheets.filter((s) => s.type !== 'testcase').length;
|
|
21
|
+
if (skipped) lines.push('', `_${skipped} non-testcase tab(s) skipped — no content read._`);
|
|
12
22
|
lines.push('', '## By category', '');
|
|
13
23
|
for (const [k, v] of Object.entries(r.byCategory).sort((a, b) => b[1] - a[1])) lines.push(`- ${k}: ${v}`);
|
|
14
24
|
lines.push('', `Depth: **${(r.depthRatio * 100).toFixed(0)}%** (${r.deepCount}/${r.total} assert a concrete expected value)`, '');
|
|
@@ -22,7 +32,10 @@ function render(inv: LegacyInventory, r: BaselineReport): void {
|
|
|
22
32
|
L(`━━━ Legacy Ingest — ${inv.source.file} ━━━`);
|
|
23
33
|
L('');
|
|
24
34
|
L(` Sheets:`);
|
|
25
|
-
for (const s of r.sheets)
|
|
35
|
+
for (const s of r.sheets)
|
|
36
|
+
L(` • ${s.name} — ${s.type}${s.type === 'testcase' ? ` (${s.rows})` : ' → skipped (no content read)'}`);
|
|
37
|
+
const skipped = r.sheets.filter((s) => s.type !== 'testcase').length;
|
|
38
|
+
if (skipped) L(` (${skipped} non-testcase tab(s) skipped)`);
|
|
26
39
|
L('');
|
|
27
40
|
L(` TOTAL testcases: ${r.total}`);
|
|
28
41
|
L('');
|
|
@@ -88,13 +101,52 @@ export function registerIngestCommand(program: Command): void {
|
|
|
88
101
|
console.log(' Tabs found:');
|
|
89
102
|
for (const s of sheets) console.log(` • ${s.name} — ${s.type} (${s.rows} rows)`);
|
|
90
103
|
console.log('');
|
|
91
|
-
|
|
104
|
+
const quoted = sheets.filter((s) => s.type === 'testcase').map((s) => quoteTab(s.name)).join(',');
|
|
105
|
+
console.log(` Ingest the testcase tab(s) with: --sheets '${quoted}'`);
|
|
92
106
|
console.log('');
|
|
93
107
|
return;
|
|
94
108
|
}
|
|
95
109
|
|
|
96
|
-
|
|
110
|
+
// --sheets: legacy tab names may CONTAIN commas (field workbook:
|
|
111
|
+
// "EX-0403,0404,0405,0407-SearchRe"), so a bare split(',') shredded them and
|
|
112
|
+
// silently ingested nothing. Resolution order:
|
|
113
|
+
// 1. the WHOLE string equals one real tab name → that single tab;
|
|
114
|
+
// 2. else parse as a quote-aware CSV line ("Tab, with commas",Other);
|
|
115
|
+
// 3. any part matching NO real tab → exit non-zero listing the tabs —
|
|
116
|
+
// an empty inventory must never be produced silently.
|
|
117
|
+
let onlySheets: string[] | undefined;
|
|
118
|
+
if (options.sheets) {
|
|
119
|
+
const raw = String(options.sheets);
|
|
120
|
+
const available = (await listSheets(files)).map((sh) => sh.name);
|
|
121
|
+
const byLower = new Map(available.map((n) => [n.trim().toLowerCase(), n]));
|
|
122
|
+
const whole = byLower.get(raw.trim().toLowerCase());
|
|
123
|
+
if (whole) {
|
|
124
|
+
onlySheets = [whole];
|
|
125
|
+
} else {
|
|
126
|
+
const parts = (parseCSV(raw)[0] || []).map((p) => p.trim()).filter(Boolean);
|
|
127
|
+
const misses = parts.filter((pt) => !byLower.has(pt.toLowerCase()));
|
|
128
|
+
if (misses.length) {
|
|
129
|
+
throw new Error(
|
|
130
|
+
`--sheets: no tab named ${misses.map((m) => `"${m}"`).join(', ')}.\n` +
|
|
131
|
+
` Available tabs:\n${available.map((n) => ` • ${n}`).join('\n')}\n` +
|
|
132
|
+
` Tip: quote a tab name that contains commas: --sheets '"${available[0] || 'Tab, name'}"'`
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
onlySheets = parts.map((pt) => byLower.get(pt.toLowerCase())!);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
97
138
|
const inv = await parseLegacyFile(files, onlySheets);
|
|
139
|
+
for (const w of inv.warnings ?? []) console.warn(` \u26a0 ${w}`);
|
|
140
|
+
// Merge guard: without --sheets, EVERY tab that classifies as testcase is merged
|
|
141
|
+
// into one inventory. Field workbooks carry tabs for several screens (plus
|
|
142
|
+
// deprecated "Old\u2026" copies) \u2014 merging them silently poisons a per-screen
|
|
143
|
+
// inventory, so say it loudly and hand over the ready-made --sheets line.
|
|
144
|
+
if (!options.sheets) {
|
|
145
|
+
const tcTabs = inv.sheets.filter((sh) => sh.type === 'testcase');
|
|
146
|
+
if (tcTabs.length > 1) {
|
|
147
|
+
console.warn(` \u26a0 ${tcTabs.length} testcase tabs merged into ONE inventory \u2014 if they belong to different screens, scope with: --sheets '${tcTabs.map((sh) => quoteTab(sh.name)).join(',')}'`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
98
150
|
const report = baselineAudit(inv);
|
|
99
151
|
fs.writeFileSync(path.join(outDir, 'inventory.json'), JSON.stringify({ inventory: inv, baseline: report }, null, 2));
|
|
100
152
|
fs.writeFileSync(path.join(outDir, 'inventory.md'), renderInventoryMd(inv, report));
|
package/src/generators/test-generator/adapters/playwright/templates/steps/actions/click-action.hbs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
await {{> locator}}.click();
|
|
1
|
+
await {{> locator}}.click({{#if force}}{ force: true }{{/if}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
await {{> locator-base}}.filter({ hasText: {{> has-text-value dataValue=dataValue exact=exact legacyTail=(and (eq strategy "text") (eq value ""))}} }){{> locator-nth}}.click();
|
|
1
|
+
await {{> locator-base}}.filter({ hasText: {{> has-text-value dataValue=dataValue exact=exact legacyTail=(and (eq strategy "text") (eq value ""))}} }){{> locator-nth}}.click({{#if force}}{ force: true }{{/if}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
await page.
|
|
1
|
+
await page.waitForTimeout({{duration}});
|
|
@@ -18,30 +18,36 @@ export function transformToRuntimeData(code: string, accessor: string = 'testDat
|
|
|
18
18
|
(_, indent, before, enc, after) => `${indent}//${before}${decodeKey(enc)}${after}`
|
|
19
19
|
);
|
|
20
20
|
|
|
21
|
-
// Pass 1: String literal context —
|
|
22
|
-
// '
|
|
23
|
-
//
|
|
21
|
+
// Pass 1: String literal context — a literal may carry SEVERAL markers
|
|
22
|
+
// ('/{{code}}/car-search?{{prefill}}' compiles to two markers in ONE literal).
|
|
23
|
+
// Match the whole quoted literal that contains at least one marker, then
|
|
24
|
+
// interpolate EVERY marker inside it. The old shape (one marker + lazy
|
|
25
|
+
// prefix/suffix) swallowed trailing markers into its suffix verbatim; they
|
|
26
|
+
// escaped the quote context (the literal had become a backtick template) and
|
|
27
|
+
// Pass 3's numeric catch-all emitted them as literal
|
|
28
|
+
// `Number(testData.get(...))` TEXT inside the template — a compiling spec
|
|
29
|
+
// navigating to a garbage URL.
|
|
30
|
+
// 'marker' → testData.get('key')
|
|
31
|
+
// 'a__m1__b__m2__c' → `a${testData.get('k1')}b${testData.get('k2')}c`
|
|
24
32
|
code = code.replace(
|
|
25
|
-
/(['"])((?:(?!\1).)*?
|
|
26
|
-
(_, _quote,
|
|
27
|
-
const
|
|
28
|
-
if (
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
return `\`${prefix}\${${accessor}.get('${key}')}${suffix}\``;
|
|
33
|
+
/(['"])((?:(?!\1).)*?__SUNGEN_TD_[A-Za-z0-9_]+__(?:(?!\1).)*)\1/g,
|
|
34
|
+
(_, _quote, body) => {
|
|
35
|
+
const whole = /^__SUNGEN_TD_([A-Za-z0-9_]+)__$/.exec(body);
|
|
36
|
+
if (whole) return `${accessor}.get('${decodeKey(whole[1])}')`;
|
|
37
|
+
return `\`${interpolateMarkers(body, accessor)}\``;
|
|
32
38
|
}
|
|
33
39
|
);
|
|
34
40
|
|
|
35
|
-
// Pass 2: Regex literal context —
|
|
36
|
-
//
|
|
41
|
+
// Pass 2: Regex literal context — /…__marker__…/ → new RegExp(`…`). Same
|
|
42
|
+
// several-markers-per-literal rule as Pass 1 (/{{min}}-{{max}} items/).
|
|
43
|
+
// Only matches within a single line (no newlines in the body).
|
|
37
44
|
code = code.replace(
|
|
38
|
-
/\/((?:[^/\\\n]|\\.)*?
|
|
39
|
-
(_,
|
|
40
|
-
const key = decodeKey(enc);
|
|
41
|
-
const ref = `${accessor}.get('${key}')`;
|
|
45
|
+
/\/((?:[^/\\\n]|\\.)*?__SUNGEN_TD_[A-Za-z0-9_]+__(?:[^/\\\n]|\\.)*)\/([gimsuy]*)/g,
|
|
46
|
+
(_, body, flags) => {
|
|
42
47
|
const flagStr = flags ? `, '${flags}'` : '';
|
|
43
|
-
|
|
44
|
-
return `new RegExp(
|
|
48
|
+
const whole = /^__SUNGEN_TD_([A-Za-z0-9_]+)__$/.exec(body);
|
|
49
|
+
if (whole) return `new RegExp(${accessor}.get('${decodeKey(whole[1])}')${flagStr})`;
|
|
50
|
+
return `new RegExp(\`${interpolateMarkers(body, accessor)}\`${flagStr})`;
|
|
45
51
|
}
|
|
46
52
|
);
|
|
47
53
|
|
|
@@ -63,3 +69,8 @@ export function hasRuntimeDataMarkers(code: string): boolean {
|
|
|
63
69
|
function decodeKey(encoded: string): string {
|
|
64
70
|
return encoded.replace(/_D_/g, '.');
|
|
65
71
|
}
|
|
72
|
+
|
|
73
|
+
/** Replace every marker in a literal's body with a `${accessor.get('key')}` interpolation. */
|
|
74
|
+
function interpolateMarkers(body: string, accessor: string): string {
|
|
75
|
+
return body.replace(/__SUNGEN_TD_([A-Za-z0-9_]+)__/g, (_, enc) => `\${${accessor}.get('${decodeKey(enc)}')}`);
|
|
76
|
+
}
|
|
@@ -30,6 +30,9 @@ export interface LegacyInventory {
|
|
|
30
30
|
source: { file: string };
|
|
31
31
|
sheets: SheetInfo[];
|
|
32
32
|
testcases: LegacyTestcase[];
|
|
33
|
+
/** Anti-silence guards: convention mismatches that would otherwise drop data quietly
|
|
34
|
+
* (near-miss headers, testcase tab with 0 rows, mandatory column empty on every row). */
|
|
35
|
+
warnings?: string[];
|
|
33
36
|
}
|
|
34
37
|
|
|
35
38
|
// ---- quote-aware CSV parser (embedded commas + newlines) ----
|
|
@@ -49,7 +52,11 @@ export function parseCSV(text: string): string[][] {
|
|
|
49
52
|
return rows;
|
|
50
53
|
}
|
|
51
54
|
|
|
52
|
-
|
|
55
|
+
// Strip the "required" decoration `(*)` BEFORE stray asterisks: legacy workbooks
|
|
56
|
+
// mark mandatory columns as `Steps (*)` / `TC ID (*)`. Removing only the `*` left
|
|
57
|
+
// `steps ()` — classification regexes still matched (/steps?|expected/), but the
|
|
58
|
+
// exact-key column lookups missed and every mandatory cell came back '' silently.
|
|
59
|
+
const norm = (s: string | undefined) => (s || '').replace(/\(\s*\*\s*\)/g, '').replace(/\*/g, '').trim().toLowerCase();
|
|
53
60
|
|
|
54
61
|
function detectSheetType(rows: string[][]): { type: SheetType; headerRow: number } {
|
|
55
62
|
for (let i = 0; i < Math.min(rows.length, 40); i++) {
|
|
@@ -109,6 +116,22 @@ function parseTestcaseSheet(rows: string[][], headerRow: number, sheet: string):
|
|
|
109
116
|
return out;
|
|
110
117
|
}
|
|
111
118
|
|
|
119
|
+
/**
|
|
120
|
+
* exceljs's `.text` getter can THROW on a merged cell whose master value is null
|
|
121
|
+
* (MergeValue.toString() on null) — a `cell.text != null` guard never runs because
|
|
122
|
+
* READING the property explodes. Field workbook: 25 such cells across 3 tabs
|
|
123
|
+
* (Google-Sheets-exported merged headers). Guard on `.value` first (safe — merge
|
|
124
|
+
* slaves delegate to the master's value without stringifying), and keep a
|
|
125
|
+
* try/catch backstop for values that are non-null yet still un-stringifiable
|
|
126
|
+
* (e.g. a formula cell whose result is null). Never hand-stringify `.value` —
|
|
127
|
+
* richText/hyperlink objects would become "[object Object]"; exceljs's own
|
|
128
|
+
* `.text` stays the single formatter.
|
|
129
|
+
*/
|
|
130
|
+
function safeCellText(cell: any): string {
|
|
131
|
+
if (cell.value == null) return '';
|
|
132
|
+
try { return String(cell.text ?? ''); } catch { return ''; }
|
|
133
|
+
}
|
|
134
|
+
|
|
112
135
|
export interface RawSheet { name: string; rows: string[][] }
|
|
113
136
|
|
|
114
137
|
/** Load sheets from one input file: CSV (1 sheet), XLSX (all sheets), or a JSON
|
|
@@ -137,7 +160,7 @@ async function loadSheets(filePath: string): Promise<RawSheet[]> {
|
|
|
137
160
|
const rows: string[][] = [];
|
|
138
161
|
ws.eachRow((row: any) => {
|
|
139
162
|
const cells: string[] = [];
|
|
140
|
-
row.eachCell({ includeEmpty: true }, (cell: any) => { cells.push(
|
|
163
|
+
row.eachCell({ includeEmpty: true }, (cell: any) => { cells.push(safeCellText(cell)); });
|
|
141
164
|
rows.push(cells);
|
|
142
165
|
});
|
|
143
166
|
out.push({ name: ws.name, rows });
|
|
@@ -168,7 +191,7 @@ export async function parseLegacyFile(filePaths: string | string[], onlySheets?:
|
|
|
168
191
|
|
|
169
192
|
const inv: LegacyInventory = {
|
|
170
193
|
source: { file: files.map((f) => path.basename(f)).join(', ') },
|
|
171
|
-
sheets: [], testcases: [],
|
|
194
|
+
sheets: [], testcases: [], warnings: [],
|
|
172
195
|
};
|
|
173
196
|
for (const f of files) {
|
|
174
197
|
for (const s of await loadSheets(f)) {
|
|
@@ -176,6 +199,28 @@ export async function parseLegacyFile(filePaths: string | string[], onlySheets?:
|
|
|
176
199
|
const { type, headerRow } = detectSheetType(s.rows);
|
|
177
200
|
let tcs: LegacyTestcase[] = [];
|
|
178
201
|
if (type === 'testcase' && headerRow >= 0) tcs = parseTestcaseSheet(s.rows, headerRow, s.name);
|
|
202
|
+
// Anti-silence guards — a convention mismatch must SAY so, never quietly drop data:
|
|
203
|
+
// (a) near-miss: a tab that carries a TC-ID-ish header yet classified unknown;
|
|
204
|
+
// (b) a testcase tab whose extraction produced ZERO rows;
|
|
205
|
+
// (c) rows extracted but a mandatory column resolved empty on EVERY row.
|
|
206
|
+
if (type === 'unknown') {
|
|
207
|
+
const loose = (v: string) => v.replace(/[^a-z0-9]/gi, '').toLowerCase();
|
|
208
|
+
const nearMissRow = s.rows.slice(0, 40).find((r) => r.some((c) => /tcid/.test(loose(c))));
|
|
209
|
+
if (nearMissRow) {
|
|
210
|
+
inv.warnings!.push(`sheet "${s.name}": looks like a testcase sheet (TC-ID-like header found) but was NOT classified — header candidates: [${nearMissRow.filter(Boolean).slice(0, 10).join(' | ')}]`);
|
|
211
|
+
}
|
|
212
|
+
} else if (type === 'testcase' && headerRow >= 0) {
|
|
213
|
+
const header = s.rows[headerRow].filter(Boolean).slice(0, 12).join(' | ');
|
|
214
|
+
if (tcs.length === 0) {
|
|
215
|
+
inv.warnings!.push(`sheet "${s.name}": classified testcase but 0 rows extracted — column names may not follow the expected convention. Header row: [${header}]`);
|
|
216
|
+
} else {
|
|
217
|
+
for (const [field, label] of [['steps', 'Steps'], ['expected', 'Expected results']] as const) {
|
|
218
|
+
if (tcs.every((t) => !(t as any)[field])) {
|
|
219
|
+
inv.warnings!.push(`sheet "${s.name}": the "${label}" column resolved EMPTY for all ${tcs.length} extracted row(s) — check its header spelling. Header row: [${header}]`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
179
224
|
inv.sheets.push({ name: s.name, type, rows: tcs.length || s.rows.length });
|
|
180
225
|
inv.testcases.push(...tcs);
|
|
181
226
|
}
|
|
@@ -39,6 +39,7 @@ User uncheck [T] checkbox | toggle
|
|
|
39
39
|
User select [T] dropdown with {{v}}
|
|
40
40
|
User click [T] button | tab | column | breadcrumb
|
|
41
41
|
User click [T] row with {{v}}
|
|
42
|
+
User try to click [T] button | link # DISABLED element only — see rule below (v3.3)
|
|
42
43
|
User double click [T] element
|
|
43
44
|
User hover [T] icon | row
|
|
44
45
|
User drag [T] to [T2]
|
|
@@ -47,6 +48,12 @@ User expand | collapse [T] row
|
|
|
47
48
|
|
|
48
49
|
**click + with {{Value}} rule**: NO value for static (`button`, `link`, `icon`, `tab`). WITH value only for dynamic lists (`row`, `item`, `card`, `option`).
|
|
49
50
|
|
|
51
|
+
**try to click rule** (v3.3, web only): use ONLY when the element is expected to be DISABLED and the
|
|
52
|
+
scenario asserts nothing happens (cooldown re-send, submit before the form is valid). `click` waits for
|
|
53
|
+
`enabled` → it can only time out there; `try to click` compiles to `.click({ force: true })`. Always
|
|
54
|
+
pair it with the proof: `Then User see [T] TYPE is disabled` + an assertion that the effect did NOT occur.
|
|
55
|
+
NEVER use it for a click that is supposed to work — it deletes the actionability wait.
|
|
56
|
+
|
|
50
57
|
### Alert / Keyboard / Wait / Scroll
|
|
51
58
|
|
|
52
59
|
```
|