@sun-asterisk/sungen 3.2.27 → 3.2.29
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/capabilities/discover.d.ts +29 -0
- package/dist/capabilities/discover.d.ts.map +1 -1
- package/dist/capabilities/discover.js +144 -10
- package/dist/capabilities/discover.js.map +1 -1
- package/dist/capabilities/registry.d.ts +18 -0
- package/dist/capabilities/registry.d.ts.map +1 -1
- package/dist/capabilities/registry.js +25 -0
- package/dist/capabilities/registry.js.map +1 -1
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/audit.js +9 -0
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/capability.js +1 -1
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/dashboard/templates/index.html +1 -1
- package/dist/exporters/feature-parser.d.ts +1 -1
- package/dist/exporters/feature-parser.js +1 -1
- package/dist/exporters/matrix/build.d.ts.map +1 -1
- package/dist/exporters/matrix/build.js +14 -1
- package/dist/exporters/matrix/build.js.map +1 -1
- package/dist/exporters/matrix/item-labels.d.ts +35 -0
- package/dist/exporters/matrix/item-labels.d.ts.map +1 -0
- package/dist/exporters/matrix/item-labels.js +90 -0
- package/dist/exporters/matrix/item-labels.js.map +1 -0
- package/dist/exporters/matrix/render-coverage-sheet.d.ts +14 -0
- package/dist/exporters/matrix/render-coverage-sheet.d.ts.map +1 -0
- package/dist/exporters/matrix/render-coverage-sheet.js +160 -0
- package/dist/exporters/matrix/render-coverage-sheet.js.map +1 -0
- package/dist/exporters/matrix/render-overview-sheet.d.ts +20 -0
- package/dist/exporters/matrix/render-overview-sheet.d.ts.map +1 -0
- package/dist/exporters/matrix/render-overview-sheet.js +36 -0
- package/dist/exporters/matrix/render-overview-sheet.js.map +1 -0
- package/dist/exporters/matrix/render-testcase-sheet.d.ts +30 -0
- package/dist/exporters/matrix/render-testcase-sheet.d.ts.map +1 -0
- package/dist/exporters/matrix/render-testcase-sheet.js +156 -0
- package/dist/exporters/matrix/render-testcase-sheet.js.map +1 -0
- package/dist/exporters/matrix/render-xlsx.d.ts +41 -31
- package/dist/exporters/matrix/render-xlsx.d.ts.map +1 -1
- package/dist/exporters/matrix/render-xlsx.js +72 -425
- package/dist/exporters/matrix/render-xlsx.js.map +1 -1
- package/dist/exporters/matrix/testcase-summary-band.d.ts +30 -0
- package/dist/exporters/matrix/testcase-summary-band.d.ts.map +1 -0
- package/dist/exporters/matrix/testcase-summary-band.js +75 -0
- package/dist/exporters/matrix/testcase-summary-band.js.map +1 -0
- package/dist/exporters/matrix/wording.d.ts.map +1 -1
- package/dist/exporters/matrix/wording.js +13 -0
- package/dist/exporters/matrix/wording.js.map +1 -1
- package/dist/exporters/matrix/xlsx-cells.d.ts +38 -0
- package/dist/exporters/matrix/xlsx-cells.d.ts.map +1 -0
- package/dist/exporters/matrix/xlsx-cells.js +52 -0
- package/dist/exporters/matrix/xlsx-cells.js.map +1 -0
- package/dist/exporters/xlsx-report-builder.d.ts +12 -1
- package/dist/exporters/xlsx-report-builder.d.ts.map +1 -1
- package/dist/exporters/xlsx-report-builder.js +10 -2
- package/dist/exporters/xlsx-report-builder.js.map +1 -1
- package/dist/generators/gherkin-parser/index.d.ts +7 -0
- package/dist/generators/gherkin-parser/index.d.ts.map +1 -1
- package/dist/generators/gherkin-parser/index.js +3 -3
- package/dist/generators/gherkin-parser/index.js.map +1 -1
- package/dist/generators/test-generator/adapters/appium/os-support.d.ts +53 -0
- package/dist/generators/test-generator/adapters/appium/os-support.d.ts.map +1 -0
- package/dist/generators/test-generator/adapters/appium/os-support.js +200 -0
- package/dist/generators/test-generator/adapters/appium/os-support.js.map +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/alert-fill-action.hbs +9 -2
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/capture-variable.hbs +24 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/hover-action.hbs +6 -2
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/hover-element-with-text.hbs +4 -3
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/unknown-element-action.hbs +9 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/have-value-assertion.hbs +34 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/label-value-assertion.hbs +14 -6
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/page-assertion.hbs +6 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/go-back-action.hbs +21 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/set-geolocation-action.hbs +16 -0
- package/dist/generators/test-generator/adapters/appium/templates/test-file.hbs +8 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row-nth.hbs +4 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row.hbs +4 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/page-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/selected-assertion.hbs +7 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/state-with-filter-assertion.hbs +7 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-empty.hbs +4 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-match-data.hbs +4 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-count.hbs +4 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-exists.hbs +12 -4
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-not-exists.hbs +14 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +8 -8
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator-strategies/id.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator-strategies/testid.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +8 -8
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/url-assertion.hbs +6 -2
- package/dist/generators/test-generator/code-generator.d.ts.map +1 -1
- package/dist/generators/test-generator/code-generator.js +6 -2
- package/dist/generators/test-generator/code-generator.js.map +1 -1
- package/dist/generators/test-generator/diagnostics.d.ts +38 -2
- package/dist/generators/test-generator/diagnostics.d.ts.map +1 -1
- package/dist/generators/test-generator/diagnostics.js +37 -1
- package/dist/generators/test-generator/diagnostics.js.map +1 -1
- package/dist/generators/test-generator/patterns/index.d.ts +33 -6
- package/dist/generators/test-generator/patterns/index.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/index.js +71 -7
- package/dist/generators/test-generator/patterns/index.js.map +1 -1
- package/dist/generators/test-generator/patterns/types.d.ts +8 -0
- package/dist/generators/test-generator/patterns/types.d.ts.map +1 -1
- package/dist/generators/test-generator/step-mapper.d.ts +40 -1
- package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
- package/dist/generators/test-generator/step-mapper.js +104 -21
- package/dist/generators/test-generator/step-mapper.js.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.d.ts +24 -1
- package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.js +82 -12
- package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
- package/dist/harness/audit.d.ts +3 -1
- package/dist/harness/audit.d.ts.map +1 -1
- package/dist/harness/audit.js +52 -29
- package/dist/harness/audit.js.map +1 -1
- package/dist/harness/capability-plan.d.ts +4 -0
- package/dist/harness/capability-plan.d.ts.map +1 -1
- package/dist/harness/capability-plan.js +32 -2
- package/dist/harness/capability-plan.js.map +1 -1
- package/dist/harness/catalog/drivers.yaml +1 -1
- package/dist/harness/catalog/universal-viewpoints.yaml +145 -0
- package/dist/harness/next-step.d.ts.map +1 -1
- package/dist/harness/next-step.js +1 -0
- package/dist/harness/next-step.js.map +1 -1
- package/dist/harness/parse.d.ts +6 -0
- package/dist/harness/parse.d.ts.map +1 -1
- package/dist/harness/parse.js +1 -1
- package/dist/harness/parse.js.map +1 -1
- package/dist/harness/repair.d.ts.map +1 -1
- package/dist/harness/repair.js +8 -1
- package/dist/harness/repair.js.map +1 -1
- package/dist/harness/sensors.d.ts +49 -0
- package/dist/harness/sensors.d.ts.map +1 -1
- package/dist/harness/sensors.js +51 -1
- package/dist/harness/sensors.js.map +1 -1
- package/dist/harness/viewpoint-ledger.d.ts +10 -0
- package/dist/harness/viewpoint-ledger.d.ts.map +1 -1
- package/dist/harness/viewpoint-ledger.js +23 -2
- package/dist/harness/viewpoint-ledger.js.map +1 -1
- package/dist/orchestrator/templates/ai-src/commands/delivery.md +4 -3
- package/dist/orchestrator/templates/ai-src/skills/sungen-delivery/SKILL.md +14 -5
- package/dist/orchestrator/templates/ai-src/skills/sungen-error-mapping/SKILL.md +48 -1
- package/dist/orchestrator/templates/ai-src/skills/sungen-gherkin-syntax/SKILL.md +39 -6
- package/dist/orchestrator/templates/ai-src/skills/sungen-harness-audit/SKILL.md +1 -0
- package/dist/orchestrator/templates/ai-src/skills/sungen-mobile-gestures/SKILL.md +16 -1
- package/dist/orchestrator/templates/ai-src/skills/sungen-selector-fix/SKILL.md +11 -0
- package/dist/orchestrator/templates/ai-src/skills/sungen-selector-keys/SKILL.md +14 -3
- package/dist/orchestrator/templates/ai-src/skills/sungen-tc-generation/SKILL.md +89 -3
- package/dist/orchestrator/templates/ai-src/skills/sungen-tc-review/SKILL.md +58 -1
- package/dist/orchestrator/templates/ai-src/skills/sungen-test-design-techniques/SKILL.md +13 -0
- package/dist/orchestrator/templates/ai-src/skills/sungen-viewpoint/SKILL.md +59 -10
- package/dist/orchestrator/templates/ai-src/skills/sungen-viewpoint/group-d-display.md +1 -0
- package/dist/orchestrator/templates/ai-src/skills/sungen-viewpoint/group-f-mobile-native.md +419 -0
- package/dist/orchestrator/templates/readme.md +1 -1
- package/dist/orchestrator/templates/specs-pw-shape-reporter.ts +0 -0
- package/dist/orchestrator/templates/specs-url-assert.d.ts +31 -0
- package/dist/orchestrator/templates/specs-url-assert.d.ts.map +1 -1
- package/dist/orchestrator/templates/specs-url-assert.js +43 -0
- package/dist/orchestrator/templates/specs-url-assert.js.map +1 -1
- package/dist/orchestrator/templates/specs-url-assert.ts +54 -0
- package/dist/orchestrator/templates/wdio.conf.ts +105 -1
- package/package.json +3 -3
- package/src/capabilities/discover.ts +146 -10
- package/src/capabilities/registry.ts +30 -0
- package/src/cli/commands/audit.ts +9 -0
- package/src/cli/commands/capability.ts +1 -1
- package/src/dashboard/templates/index.html +1 -1
- package/src/exporters/feature-parser.ts +1 -1
- package/src/exporters/matrix/build.ts +13 -1
- package/src/exporters/matrix/item-labels.ts +78 -0
- package/src/exporters/matrix/render-coverage-sheet.ts +168 -0
- package/src/exporters/matrix/render-overview-sheet.ts +56 -0
- package/src/exporters/matrix/render-testcase-sheet.ts +178 -0
- package/src/exporters/matrix/render-xlsx.ts +67 -448
- package/src/exporters/matrix/testcase-summary-band.ts +79 -0
- package/src/exporters/matrix/wording.ts +13 -0
- package/src/exporters/matrix/xlsx-cells.ts +56 -0
- package/src/exporters/xlsx-report-builder.ts +16 -2
- package/src/generators/gherkin-parser/index.ts +1 -1
- package/src/generators/test-generator/adapters/appium/os-support.ts +176 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/alert-fill-action.hbs +9 -2
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/capture-variable.hbs +24 -1
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/hover-action.hbs +6 -2
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/hover-element-with-text.hbs +4 -3
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/unknown-element-action.hbs +9 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/have-value-assertion.hbs +34 -1
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/label-value-assertion.hbs +14 -6
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/page-assertion.hbs +6 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/go-back-action.hbs +21 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/set-geolocation-action.hbs +16 -0
- package/src/generators/test-generator/adapters/appium/templates/test-file.hbs +8 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row-nth.hbs +4 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row.hbs +4 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/page-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/selected-assertion.hbs +7 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/state-with-filter-assertion.hbs +7 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-empty.hbs +4 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-match-data.hbs +4 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-count.hbs +4 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-exists.hbs +12 -4
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-not-exists.hbs +14 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +8 -8
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-strategies/id.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-strategies/testid.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +8 -8
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/url-assertion.hbs +6 -2
- package/src/generators/test-generator/code-generator.ts +6 -2
- package/src/generators/test-generator/diagnostics.ts +39 -2
- package/src/generators/test-generator/patterns/index.ts +78 -8
- package/src/generators/test-generator/patterns/types.ts +8 -0
- package/src/generators/test-generator/step-mapper.ts +109 -19
- package/src/generators/test-generator/utils/selector-resolver.ts +98 -12
- package/src/harness/audit.ts +56 -31
- package/src/harness/capability-plan.ts +33 -1
- package/src/harness/catalog/drivers.yaml +1 -1
- package/src/harness/catalog/universal-viewpoints.yaml +145 -0
- package/src/harness/next-step.ts +1 -0
- package/src/harness/parse.ts +7 -1
- package/src/harness/repair.ts +8 -1
- package/src/harness/sensors.ts +100 -3
- package/src/harness/viewpoint-ledger.ts +26 -5
- package/src/orchestrator/templates/ai-src/commands/delivery.md +4 -3
- package/src/orchestrator/templates/ai-src/skills/sungen-delivery/SKILL.md +14 -5
- package/src/orchestrator/templates/ai-src/skills/sungen-error-mapping/SKILL.md +48 -1
- package/src/orchestrator/templates/ai-src/skills/sungen-gherkin-syntax/SKILL.md +39 -6
- package/src/orchestrator/templates/ai-src/skills/sungen-harness-audit/SKILL.md +1 -0
- package/src/orchestrator/templates/ai-src/skills/sungen-mobile-gestures/SKILL.md +16 -1
- package/src/orchestrator/templates/ai-src/skills/sungen-selector-fix/SKILL.md +11 -0
- package/src/orchestrator/templates/ai-src/skills/sungen-selector-keys/SKILL.md +14 -3
- package/src/orchestrator/templates/ai-src/skills/sungen-tc-generation/SKILL.md +89 -3
- package/src/orchestrator/templates/ai-src/skills/sungen-tc-review/SKILL.md +58 -1
- package/src/orchestrator/templates/ai-src/skills/sungen-test-design-techniques/SKILL.md +13 -0
- package/src/orchestrator/templates/ai-src/skills/sungen-viewpoint/SKILL.md +59 -10
- package/src/orchestrator/templates/ai-src/skills/sungen-viewpoint/group-d-display.md +1 -0
- package/src/orchestrator/templates/ai-src/skills/sungen-viewpoint/group-f-mobile-native.md +419 -0
- package/src/orchestrator/templates/readme.md +1 -1
- package/src/orchestrator/templates/specs-pw-shape-reporter.ts +0 -0
- package/src/orchestrator/templates/specs-url-assert.ts +54 -0
- package/src/orchestrator/templates/wdio.conf.ts +105 -1
|
@@ -1,23 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Render the Test Case & Coverage Matrix workbook.
|
|
3
|
+
* Render the Test Case & Coverage Matrix workbook (BM-2-901-13).
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
* 1.
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* category grid (explicit `—` gaps), dispositions, and the manifest.
|
|
5
|
+
* Four sheets, in this order:
|
|
6
|
+
* 1. Overview — one roll-up row per detail sheet, every cell a live reference
|
|
7
|
+
* into that sheet's summary band.
|
|
8
|
+
* 2. Auto — the cases the suite runs.
|
|
9
|
+
* 3. Manual — the cases a person runs.
|
|
10
|
+
* 4. Coverage — requirement coverage, the target × category grid,
|
|
11
|
+
* dispositions and the generation manifest, over the whole model.
|
|
13
12
|
*
|
|
14
|
-
* Manual
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* variants, even after QA edits results by hand (review B-06).
|
|
18
|
-
*
|
|
19
|
-
* Every sheet keeps the company ISO masthead. A draft matrix (unapproved
|
|
20
|
-
* groups / review findings) carries a red DRAFT banner.
|
|
13
|
+
* Auto and Manual are always both created, even when one side is empty: the
|
|
14
|
+
* Overview then always reads the same two rows, and QA has a place to add
|
|
15
|
+
* hand-written cases.
|
|
21
16
|
*/
|
|
22
17
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
23
18
|
if (k2 === undefined) k2 = k;
|
|
@@ -53,424 +48,76 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
53
48
|
};
|
|
54
49
|
})();
|
|
55
50
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
56
|
-
exports.itemModeLabel =
|
|
57
|
-
exports.
|
|
58
|
-
exports.
|
|
51
|
+
exports.coverageSummary = exports.itemResultLabel = exports.itemModeLabel = void 0;
|
|
52
|
+
exports.projectItem = projectItem;
|
|
53
|
+
exports.projectItems = projectItems;
|
|
59
54
|
exports.renderMatrixXlsx = renderMatrixXlsx;
|
|
60
55
|
const ExcelJS = __importStar(require("exceljs"));
|
|
61
|
-
const xlsx_report_builder_1 = require("../xlsx-report-builder");
|
|
62
|
-
const api_testcase_formatter_1 = require("../api-testcase-formatter");
|
|
63
|
-
const playwright_report_parser_1 = require("../playwright-report-parser");
|
|
64
56
|
const build_1 = require("./build");
|
|
65
|
-
const
|
|
66
|
-
const
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
c.alignment = { horizontal: 'center', vertical: 'middle', wrapText: true };
|
|
75
|
-
c.border = xlsx_report_builder_1.allBordersBlack;
|
|
76
|
-
}
|
|
77
|
-
function dataCell(c, value, opts) {
|
|
78
|
-
// An empty value stays a genuinely blank cell — never an empty shared string,
|
|
79
|
-
// which some renderers display as its string-table index (review M-03).
|
|
80
|
-
if (value !== '' && value !== undefined && value !== null)
|
|
81
|
-
c.value = value;
|
|
82
|
-
c.font = { bold: opts?.bold ?? false, size: 10, name: xlsx_report_builder_1.ARIAL_FONT, ...(opts?.color ? { color: opts.color } : {}) };
|
|
83
|
-
c.alignment = { horizontal: opts?.center ? 'center' : 'left', vertical: 'top', wrapText: true };
|
|
84
|
-
c.border = xlsx_report_builder_1.allBordersBlack;
|
|
85
|
-
if (opts?.fill)
|
|
86
|
-
c.fill = { type: 'pattern', pattern: 'solid', fgColor: opts.fill };
|
|
87
|
-
}
|
|
88
|
-
/** Mode is a coverage dimension: mixed items show both counts. */
|
|
89
|
-
function itemModeLabel(item) {
|
|
90
|
-
if (item.mode === 'mixed') {
|
|
91
|
-
const auto = item.variants.filter((v) => v.mode === 'auto').length;
|
|
92
|
-
return `Auto ${auto} · Manual ${item.variants.length - auto}`;
|
|
93
|
-
}
|
|
94
|
-
return item.mode === 'manual' ? 'Manual' : 'Auto';
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Parent roll-up label. It must NEVER be exactly one of the variant state words
|
|
98
|
-
* (`Passed`/`Failed`/`Blocked`/`Pending`/`N/A`) — the summary band counts the
|
|
99
|
-
* Result column with exact-match COUNTIF over parent AND child rows, so a parent
|
|
100
|
-
* reading plain "Pending" was counted as an extra pending variant (109 instead
|
|
101
|
-
* of 77 on st-login).
|
|
102
|
-
*/
|
|
103
|
-
function itemResultLabel(item) {
|
|
104
|
-
const { passed, failed, blocked, na } = item.resultCounts;
|
|
105
|
-
const eff = item.variants.length - na;
|
|
106
|
-
const suffix = na > 0 ? ` · ${na} N/A` : '';
|
|
107
|
-
if (item.result === 'na')
|
|
108
|
-
return 'All N/A';
|
|
109
|
-
if (item.result === 'failed')
|
|
110
|
-
return `${passed}/${eff} Passed · ${failed} Failed${suffix}`;
|
|
111
|
-
if (item.result === 'blocked')
|
|
112
|
-
return `${passed}/${eff} Passed · ${blocked} Blocked${suffix}`;
|
|
113
|
-
return `${passed}/${eff} Passed${suffix}`;
|
|
114
|
-
}
|
|
115
|
-
/** ISO date (2026-08-04) — unambiguous across locales (review §9). */
|
|
116
|
-
function isoDate(startTime) {
|
|
117
|
-
if (!startTime)
|
|
118
|
-
return '';
|
|
119
|
-
const d = new Date(startTime);
|
|
120
|
-
if (isNaN(d.getTime()))
|
|
121
|
-
return '';
|
|
122
|
-
return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;
|
|
123
|
-
}
|
|
124
|
-
function numbered(lines, start = 1) {
|
|
125
|
-
if (lines.length === 0)
|
|
126
|
-
return '';
|
|
127
|
-
if (lines.length === 1 && start === 1)
|
|
128
|
-
return lines[0];
|
|
129
|
-
return lines.map((l, i) => `${start + i}. ${l}`).join('\n');
|
|
130
|
-
}
|
|
57
|
+
const render_testcase_sheet_1 = require("./render-testcase-sheet");
|
|
58
|
+
const render_coverage_sheet_1 = require("./render-coverage-sheet");
|
|
59
|
+
const render_overview_sheet_1 = require("./render-overview-sheet");
|
|
60
|
+
// The CSV renderer and the tests import these from here — they moved to
|
|
61
|
+
// `item-labels.ts` when this module was split, and stay reachable at the old path.
|
|
62
|
+
var item_labels_1 = require("./item-labels");
|
|
63
|
+
Object.defineProperty(exports, "itemModeLabel", { enumerable: true, get: function () { return item_labels_1.itemModeLabel; } });
|
|
64
|
+
Object.defineProperty(exports, "itemResultLabel", { enumerable: true, get: function () { return item_labels_1.itemResultLabel; } });
|
|
65
|
+
Object.defineProperty(exports, "coverageSummary", { enumerable: true, get: function () { return item_labels_1.coverageSummary; } });
|
|
131
66
|
/**
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
67
|
+
* Project an item onto one execution mode.
|
|
68
|
+
*
|
|
69
|
+
* The split is per VARIANT, not per item: an automated variant belongs on the
|
|
70
|
+
* Auto sheet even when a sibling variant under the same delivery item has to be
|
|
71
|
+
* run by hand. A mixed item therefore appears on BOTH sheets, each side carrying
|
|
72
|
+
* only its own variants. The repeated parent row is deliberate — a variant must
|
|
73
|
+
* always be readable next to the delivery item it verifies.
|
|
74
|
+
*
|
|
75
|
+
* Only the fields that would otherwise LIE about the filtered set are recomputed.
|
|
76
|
+
*
|
|
77
|
+
* `variants` / `resultCounts` / `result` — recounted over what survived.
|
|
78
|
+
* `dimensions` — dropped on a partial split. The digest enumerates every
|
|
79
|
+
* variant ("keyboard operation ×1 · announced name ×1"); with half of them on
|
|
80
|
+
* the other sheet it would contradict the count beside it. Cleared, the
|
|
81
|
+
* coverage cell falls back to the surviving variants' own words.
|
|
82
|
+
* `trigger` — when the parent has no shared opening step, `build.ts` puts a
|
|
83
|
+
* synthesized "run each of the N variants below" note there. N is regenerated
|
|
84
|
+
* for this sheet; a genuine step prefix is left alone.
|
|
85
|
+
*
|
|
86
|
+
* Everything else is kept as it stands. A precondition or trigger prefix common
|
|
87
|
+
* to every variant is still common to a subset of them, so the parent stays
|
|
88
|
+
* true — the children just repeat marginally more than the strict minimum. The
|
|
89
|
+
* delta maps are keyed by `v.ref`, so each surviving variant still finds its own.
|
|
90
|
+
*
|
|
91
|
+
* This is a projection over an assembled model, not a second build: nothing in
|
|
92
|
+
* `build.ts` is re-run.
|
|
136
93
|
*/
|
|
137
|
-
function
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
if (verification.length === 0)
|
|
150
|
-
return expected;
|
|
151
|
-
return `${expected}\nVerification method: ${verification.join(' ')}`;
|
|
94
|
+
function projectItem(item, mode) {
|
|
95
|
+
const kept = item.variants.filter((v) => v.mode === mode);
|
|
96
|
+
if (kept.length === 0)
|
|
97
|
+
return null;
|
|
98
|
+
if (kept.length === item.variants.length)
|
|
99
|
+
return item;
|
|
100
|
+
const { result, counts } = (0, build_1.rollUp)(kept);
|
|
101
|
+
const synthesized = (0, build_1.varyingTriggerNote)(item.dimensions, item.variants.length);
|
|
102
|
+
const trigger = item.trigger.length === 1 && item.trigger[0] === synthesized
|
|
103
|
+
? [(0, build_1.varyingTriggerNote)(item.dimensions, kept.length)]
|
|
104
|
+
: item.trigger;
|
|
105
|
+
return { ...item, variants: kept, result, resultCounts: counts, trigger, dimensions: undefined };
|
|
152
106
|
}
|
|
153
|
-
/**
|
|
154
|
-
function
|
|
155
|
-
|
|
156
|
-
return;
|
|
157
|
-
ws.mergeCells('B5:H5');
|
|
158
|
-
const c = ws.getCell('B5');
|
|
159
|
-
c.value = 'DRAFT — NOT APPROVED FOR OFFICIAL DELIVERY (review-required findings or proposed groups remain)';
|
|
160
|
-
c.font = { bold: true, size: 11, name: xlsx_report_builder_1.ARIAL_FONT, color: { argb: 'FFFFFFFF' } };
|
|
161
|
-
c.fill = { type: 'pattern', pattern: 'solid', fgColor: DRAFT_RED };
|
|
162
|
-
c.alignment = { horizontal: 'center', vertical: 'middle' };
|
|
107
|
+
/** Items projected onto one sheet, in model order. */
|
|
108
|
+
function projectItems(model, mode) {
|
|
109
|
+
return model.items.map((i) => projectItem(i, mode)).filter((i) => i !== null);
|
|
163
110
|
}
|
|
164
|
-
// ---------------------------------------------------------------------------
|
|
165
|
-
// Sheet 1 — Testcases (the matrix)
|
|
166
|
-
// ---------------------------------------------------------------------------
|
|
167
|
-
const MATRIX_HEADERS = [
|
|
168
|
-
'ID', 'Target', 'Test Intent / Condition', 'Category', 'Priority', 'Precondition',
|
|
169
|
-
'Coverage / Test Data', 'Action / Trigger', 'Expected Result', 'Mode', 'Trace',
|
|
170
|
-
'Result', 'Executed Date', 'Executor', 'Note / Evidence', 'Defect ID',
|
|
171
|
-
];
|
|
172
|
-
const RESULT_COL = 13; // column M
|
|
173
|
-
function addMatrixSheet(wb, model, sungenVersion) {
|
|
174
|
-
const ws = wb.addWorksheet('Testcases');
|
|
175
|
-
ws.properties.outlineLevelRow = 1;
|
|
176
|
-
ws.columns = [
|
|
177
|
-
{ width: 3 }, // A margin
|
|
178
|
-
{ width: 22 }, // B ID
|
|
179
|
-
{ width: 18 }, // C Target
|
|
180
|
-
{ width: 42 }, // D Intent / Condition
|
|
181
|
-
{ width: 11 }, // E Category
|
|
182
|
-
{ width: 9 }, // F Priority
|
|
183
|
-
{ width: 26 }, // G Precondition
|
|
184
|
-
{ width: 34 }, // H Coverage / Data
|
|
185
|
-
{ width: 34 }, // I Trigger
|
|
186
|
-
{ width: 42 }, // J Expected
|
|
187
|
-
{ width: 11 }, // K Mode
|
|
188
|
-
{ width: 13 }, // L Trace
|
|
189
|
-
{ width: 22 }, // M Result
|
|
190
|
-
{ width: 12 }, // N Executed
|
|
191
|
-
{ width: 13 }, // O Executor
|
|
192
|
-
{ width: 22 }, // P Note / Evidence
|
|
193
|
-
{ width: 12 }, // Q Defect ID
|
|
194
|
-
];
|
|
195
|
-
(0, xlsx_report_builder_1.renderReportHeaderBand)(wb, ws, `${model.unit.toUpperCase()} TEST CASE & COVERAGE MATRIX`, sungenVersion, model.formNo);
|
|
196
|
-
draftBanner(ws, model);
|
|
197
|
-
// Summary band (row 6) — items vs variants stay separate metrics by design (I8).
|
|
198
|
-
// The execution counters are LIVE formulas over the variant Result cells, so
|
|
199
|
-
// hand-entered results update the totals (review GAP-06). Variant cells hold the
|
|
200
|
-
// exact state words and parent cells NEVER do (itemResultLabel + the roll-up
|
|
201
|
-
// formula always compose a "n/m Passed …" label), so exact-match COUNTIF over
|
|
202
|
-
// the whole column counts variants only.
|
|
203
|
-
const sum = (k) => model.items.reduce((a, i) => a + i.resultCounts[k], 0);
|
|
204
|
-
const passed = sum('passed');
|
|
205
|
-
const failed = sum('failed');
|
|
206
|
-
const blocked = sum('blocked');
|
|
207
|
-
const notRun = sum('notRun');
|
|
208
|
-
const na = sum('na');
|
|
209
|
-
const RANGE = 'M9:M10000';
|
|
210
|
-
const band = ws.getRow(6);
|
|
211
|
-
const bandCells = [
|
|
212
|
-
['items', `Delivery items: ${model.manifest.itemCount}`],
|
|
213
|
-
['variants', `Coverage variants: ${model.manifest.variantCount}`],
|
|
214
|
-
['passed', { formula: `"Passed: "&COUNTIF(${RANGE},"Passed")`, result: `Passed: ${passed}` }],
|
|
215
|
-
['failed', { formula: `"Failed: "&COUNTIF(${RANGE},"Failed")`, result: `Failed: ${failed}` }],
|
|
216
|
-
['blocked', { formula: `"Blocked: "&COUNTIF(${RANGE},"Blocked")`, result: `Blocked: ${blocked}` }],
|
|
217
|
-
['pending', { formula: `"Pending: "&COUNTIF(${RANGE},"Pending")`, result: `Pending: ${notRun}` }],
|
|
218
|
-
['na', { formula: `"N/A: "&COUNTIF(${RANGE},"N/A")`, result: `N/A: ${na}` }],
|
|
219
|
-
];
|
|
220
|
-
bandCells.forEach(([, v], i) => {
|
|
221
|
-
const c = band.getCell(2 + i);
|
|
222
|
-
dataCell(c, v, { bold: true, fill: SOFT_BLUE, center: true });
|
|
223
|
-
});
|
|
224
|
-
const HEADER_ROW = 8;
|
|
225
|
-
const hr = ws.getRow(HEADER_ROW);
|
|
226
|
-
hr.height = 28;
|
|
227
|
-
MATRIX_HEADERS.forEach((label, i) => headerCell(hr.getCell(2 + i), label));
|
|
228
|
-
let rowIdx = HEADER_ROW + 1;
|
|
229
|
-
for (const item of model.items) {
|
|
230
|
-
const parentRowIdx = rowIdx++;
|
|
231
|
-
// --- Variant sub-rows FIRST (to know their cell range for the parent formula).
|
|
232
|
-
// Every item gets sub-rows — the sub-row is where the source scenario id, the
|
|
233
|
-
// resolved data, and the manual result/evidence entry live (review B-05).
|
|
234
|
-
const firstChild = rowIdx;
|
|
235
|
-
// Delta-only sub-rows (review GAP-01): content identical across the whole
|
|
236
|
-
// item lives ONCE on the parent — a child repeats only what distinguishes it.
|
|
237
|
-
// The child's Expected Result is always kept: it is the precise source
|
|
238
|
-
// oracle (the semantic anchor), not a repetition of the parent's summary.
|
|
239
|
-
for (const v of item.variants) {
|
|
240
|
-
const vr = ws.getRow(rowIdx++);
|
|
241
|
-
vr.outlineLevel = 1;
|
|
242
|
-
const vValues = [
|
|
243
|
-
v.ref,
|
|
244
|
-
'',
|
|
245
|
-
v.condition,
|
|
246
|
-
'', '',
|
|
247
|
-
numbered(item.preconditionDeltas[v.ref] ?? []),
|
|
248
|
-
numbered(v.data),
|
|
249
|
-
// Only the steps after the parent's shared prefix, numbered so the
|
|
250
|
-
// parent's steps + these read as one continuous procedure.
|
|
251
|
-
numbered(item.triggerDeltas[v.ref] ?? [], item.trigger.length + 1),
|
|
252
|
-
expectedWithVerification(v.oracle, v.verification),
|
|
253
|
-
v.mode === 'manual' ? `Manual${v.manualReason ? ` (${v.manualReason})` : ''}` : (v.mocked ? 'Auto · Mocked' : 'Auto'),
|
|
254
|
-
v.traces.join(', '),
|
|
255
|
-
(0, build_1.variantState)(v),
|
|
256
|
-
isoDate(v.result?.startTime),
|
|
257
|
-
'',
|
|
258
|
-
// Redact BEFORE clipping — same denylist as the testcases CSV Note column.
|
|
259
|
-
v.result?.error ? (0, playwright_report_parser_1.clipNoteField)((0, api_testcase_formatter_1.redactSecrets)(String(v.result.error), model.secretValues)) : '',
|
|
260
|
-
'',
|
|
261
|
-
];
|
|
262
|
-
vValues.forEach((val, i) => dataCell(vr.getCell(2 + i), val, { center: i === 9 }));
|
|
263
|
-
// Manual-execution entry: constrain the Result cell to the known states.
|
|
264
|
-
vr.getCell(2 + 11).dataValidation = {
|
|
265
|
-
type: 'list', allowBlank: true, formulae: [`"${RESULT_STATES}"`],
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
const lastChild = rowIdx - 1;
|
|
269
|
-
// --- Parent row: only values that are genuinely COMMON to the whole item
|
|
270
|
-
// (review M-04); everything variant-specific stays on the sub-rows.
|
|
271
|
-
const pr = ws.getRow(parentRowIdx);
|
|
272
|
-
const coverage = coverageSummary(item);
|
|
273
|
-
// Live roll-up derived from the child Result cells — precedence
|
|
274
|
-
// failed → blocked → pending → partial → passed. N/A variants leave the
|
|
275
|
-
// denominator (review GAP-06): eff = n − COUNTIF(N/A); all-N/A → "N/A".
|
|
276
|
-
const rng = `M${firstChild}:M${lastChild}`;
|
|
277
|
-
const n = item.variants.length;
|
|
278
|
-
const EFF = `(${n}-COUNTIF(${rng},"N/A"))`;
|
|
279
|
-
const NA = `IF(COUNTIF(${rng},"N/A")>0," · "&COUNTIF(${rng},"N/A")&" N/A","")`;
|
|
280
|
-
// Mirrors itemResultLabel exactly — and never yields a bare state word.
|
|
281
|
-
const rollUpFormula = `IF(COUNTIF(${rng},"Failed")>0,COUNTIF(${rng},"Passed")&"/"&${EFF}&" Passed · "&COUNTIF(${rng},"Failed")&" Failed"&${NA},` +
|
|
282
|
-
`IF(COUNTIF(${rng},"Blocked")>0,COUNTIF(${rng},"Passed")&"/"&${EFF}&" Passed · "&COUNTIF(${rng},"Blocked")&" Blocked"&${NA},` +
|
|
283
|
-
`IF(${EFF}=0,"All N/A",` +
|
|
284
|
-
`COUNTIF(${rng},"Passed")&"/"&${EFF}&" Passed"&${NA})))`;
|
|
285
|
-
const values = [
|
|
286
|
-
item.id,
|
|
287
|
-
item.target,
|
|
288
|
-
item.intent,
|
|
289
|
-
item.category,
|
|
290
|
-
item.priority,
|
|
291
|
-
numbered(item.precondition),
|
|
292
|
-
coverage,
|
|
293
|
-
// The shared leading steps; each variant's remaining steps sit on its sub-row.
|
|
294
|
-
numbered(item.trigger),
|
|
295
|
-
item.oracle,
|
|
296
|
-
itemModeLabel(item),
|
|
297
|
-
item.traces.join(', '),
|
|
298
|
-
{ formula: rollUpFormula, result: itemResultLabel(item) },
|
|
299
|
-
'',
|
|
300
|
-
'',
|
|
301
|
-
item.review === 'proposed' ? 'REVIEW REQUIRED' : '',
|
|
302
|
-
'',
|
|
303
|
-
];
|
|
304
|
-
values.forEach((v, i) => dataCell(pr.getCell(2 + i), v, {
|
|
305
|
-
bold: true,
|
|
306
|
-
fill: SOFT_BLUE,
|
|
307
|
-
center: i === 3 || i === 4 || i === 9,
|
|
308
|
-
...(i === 14 && item.review === 'proposed' ? { color: DRAFT_RED } : {}),
|
|
309
|
-
}));
|
|
310
|
-
}
|
|
311
|
-
ws.autoFilter = { from: { row: HEADER_ROW, column: 2 }, to: { row: rowIdx - 1, column: 17 } };
|
|
312
|
-
// Freeze the header band AND the ID + Target columns (review §9).
|
|
313
|
-
ws.views = [{ state: 'frozen', xSplit: 3, ySplit: HEADER_ROW }];
|
|
314
|
-
// Print: landscape, fit width only (never squash all rows into one page),
|
|
315
|
-
// repeat the masthead + header rows on every page (review GAP-08).
|
|
316
|
-
ws.pageSetup = {
|
|
317
|
-
orientation: 'landscape',
|
|
318
|
-
fitToPage: true,
|
|
319
|
-
fitToWidth: 1,
|
|
320
|
-
fitToHeight: 0,
|
|
321
|
-
printTitlesRow: '1:8',
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
// ---------------------------------------------------------------------------
|
|
325
|
-
// Sheet 2 — Coverage (requirements + overview grid + dispositions + manifest)
|
|
326
|
-
// ---------------------------------------------------------------------------
|
|
327
|
-
function addCoverageSheet(wb, model, sungenVersion) {
|
|
328
|
-
const ws = wb.addWorksheet('Coverage');
|
|
329
|
-
ws.columns = [
|
|
330
|
-
{ width: 3 }, { width: 22 }, { width: 18 }, { width: 16 }, { width: 16 }, { width: 16 },
|
|
331
|
-
{ width: 16 }, { width: 44 },
|
|
332
|
-
];
|
|
333
|
-
(0, xlsx_report_builder_1.renderReportHeaderBand)(wb, ws, `${model.unit.toUpperCase()} COVERAGE OVERVIEW`, sungenVersion, model.formNo);
|
|
334
|
-
draftBanner(ws, model);
|
|
335
|
-
let rowIdx = 7;
|
|
336
|
-
// --- Performance budget (#569) — advisory: config (qa/perf.yaml) vs measured runs.
|
|
337
|
-
if (model.perf) {
|
|
338
|
-
const p = model.perf;
|
|
339
|
-
dataCell(ws.getRow(rowIdx).getCell(2), 'Performance budget', { bold: true });
|
|
340
|
-
rowIdx++;
|
|
341
|
-
const r = ws.getRow(rowIdx);
|
|
342
|
-
dataCell(r.getCell(2), `p${p.percentile} ${p.metric.replace('_ms', ' time')}`);
|
|
343
|
-
dataCell(r.getCell(3), p.pass ? 'PASS' : 'OVER BUDGET', { bold: true });
|
|
344
|
-
dataCell(r.getCell(4), `measured ${p.measuredMs}ms`);
|
|
345
|
-
dataCell(r.getCell(5), `budget ${p.budgetMs}ms`);
|
|
346
|
-
dataCell(r.getCell(6), `${p.samples} runs`);
|
|
347
|
-
if (!p.pass && p.slowest.length)
|
|
348
|
-
dataCell(r.getCell(8), `slowest: ${p.slowest.map((x) => `${x.ms}ms ${x.title.slice(0, 40)}`).join(' · ')}`);
|
|
349
|
-
rowIdx += 2;
|
|
350
|
-
}
|
|
351
|
-
// --- External Dependency Tracking (#580, ISTQB system-test practice): every case that
|
|
352
|
-
// ran against a MOCK is listed centrally. Its Result stays in the canonical vocabulary
|
|
353
|
-
// (the roll-up formulas depend on it); THIS table is where "Pass (Mocked) ≠ Pass (Real)"
|
|
354
|
-
// is visible — a case verified only against mocks is not Done until re-verified real.
|
|
355
|
-
{
|
|
356
|
-
const mockedVars = model.items.flatMap((it) => it.variants.filter((v) => v.mocked).map((v) => ({ it, v })));
|
|
357
|
-
if (mockedVars.length > 0) {
|
|
358
|
-
dataCell(ws.getRow(rowIdx).getCell(2), 'External Dependency Tracking — mock-verified cases (Pass here = Pass (Mocked), not Pass (Real))', { bold: true });
|
|
359
|
-
rowIdx++;
|
|
360
|
-
const hd = ws.getRow(rowIdx);
|
|
361
|
-
dataCell(hd.getCell(2), 'Variant');
|
|
362
|
-
dataCell(hd.getCell(3), 'Mocked dependency');
|
|
363
|
-
dataCell(hd.getCell(4), 'Delivery item');
|
|
364
|
-
dataCell(hd.getCell(5), 'Result');
|
|
365
|
-
dataCell(hd.getCell(8), 'Real-environment re-verify');
|
|
366
|
-
rowIdx++;
|
|
367
|
-
for (const { it, v } of mockedVars) {
|
|
368
|
-
const r = ws.getRow(rowIdx);
|
|
369
|
-
dataCell(r.getCell(2), v.ref);
|
|
370
|
-
dataCell(r.getCell(3), (v.mockDeps ?? []).join(', ') || '(scenario-level @mock)');
|
|
371
|
-
dataCell(r.getCell(4), it.id);
|
|
372
|
-
dataCell(r.getCell(5), (0, build_1.variantState)(v));
|
|
373
|
-
dataCell(r.getCell(8), '');
|
|
374
|
-
rowIdx++;
|
|
375
|
-
}
|
|
376
|
-
rowIdx++;
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
// --- Requirement coverage (review §6): every requirement id gets ONE explicit status.
|
|
380
|
-
if (model.requirements.length > 0) {
|
|
381
|
-
dataCell(ws.getRow(rowIdx).getCell(2), 'Requirement coverage — every id has an explicit status', { bold: true });
|
|
382
|
-
rowIdx += 1;
|
|
383
|
-
const rh = ws.getRow(rowIdx);
|
|
384
|
-
ws.mergeCells(rowIdx, 4, rowIdx, 6);
|
|
385
|
-
headerCell(rh.getCell(2), 'Requirement');
|
|
386
|
-
headerCell(rh.getCell(3), 'Status');
|
|
387
|
-
headerCell(rh.getCell(4), 'Delivery items');
|
|
388
|
-
headerCell(rh.getCell(7), 'Variants');
|
|
389
|
-
headerCell(rh.getCell(8), 'Note');
|
|
390
|
-
rowIdx += 1;
|
|
391
|
-
for (const r of model.requirements) {
|
|
392
|
-
const row = ws.getRow(rowIdx++);
|
|
393
|
-
dataCell(row.getCell(2), r.id, { bold: true });
|
|
394
|
-
dataCell(row.getCell(3), r.status, {
|
|
395
|
-
center: true,
|
|
396
|
-
...(r.status === 'gap' ? { fill: GAP_FILL, bold: true } : {}),
|
|
397
|
-
});
|
|
398
|
-
ws.mergeCells(rowIdx - 1, 4, rowIdx - 1, 6);
|
|
399
|
-
dataCell(row.getCell(4), r.items.join(', '));
|
|
400
|
-
dataCell(row.getCell(7), r.variantCount > 0 ? String(r.variantCount) : '', { center: true });
|
|
401
|
-
dataCell(row.getCell(8), r.note);
|
|
402
|
-
}
|
|
403
|
-
rowIdx += 1;
|
|
404
|
-
}
|
|
405
|
-
// --- Target × category grid ---
|
|
406
|
-
dataCell(ws.getRow(rowIdx).getCell(2), 'Coverage matrix — delivery items (coverage variants) per target × category', { bold: true });
|
|
407
|
-
rowIdx += 1;
|
|
408
|
-
const gridHeader = ws.getRow(rowIdx++);
|
|
409
|
-
headerCell(gridHeader.getCell(2), 'Target');
|
|
410
|
-
CATEGORY_ORDER.forEach((cat, i) => headerCell(gridHeader.getCell(3 + i), cat));
|
|
411
|
-
headerCell(gridHeader.getCell(3 + CATEGORY_ORDER.length), 'Total');
|
|
412
|
-
const targets = Array.from(new Set(model.items.map((i) => i.target)));
|
|
413
|
-
for (const target of targets) {
|
|
414
|
-
const row = ws.getRow(rowIdx++);
|
|
415
|
-
dataCell(row.getCell(2), target, { bold: true });
|
|
416
|
-
let totalItems = 0;
|
|
417
|
-
let totalVariants = 0;
|
|
418
|
-
CATEGORY_ORDER.forEach((cat, i) => {
|
|
419
|
-
const cell = row.getCell(3 + i);
|
|
420
|
-
const items = model.items.filter((it) => it.target === target && it.category === cat);
|
|
421
|
-
const variants = items.reduce((a, it) => a + it.variants.length, 0);
|
|
422
|
-
totalItems += items.length;
|
|
423
|
-
totalVariants += variants;
|
|
424
|
-
// `—` is an explicit statement: this target × category cell has NO coverage.
|
|
425
|
-
dataCell(cell, items.length === 0 ? '—' : `${items.length} (${variants})`, {
|
|
426
|
-
center: true,
|
|
427
|
-
...(items.length === 0 ? { fill: GAP_FILL } : {}),
|
|
428
|
-
});
|
|
429
|
-
});
|
|
430
|
-
dataCell(row.getCell(3 + CATEGORY_ORDER.length), `${totalItems} (${totalVariants})`, { center: true, bold: true });
|
|
431
|
-
}
|
|
432
|
-
// --- Dispositions ---
|
|
433
|
-
if (model.dispositions.length > 0) {
|
|
434
|
-
rowIdx += 1;
|
|
435
|
-
dataCell(ws.getRow(rowIdx).getCell(2), 'Not in the matrix (explicit dispositions)', { bold: true });
|
|
436
|
-
rowIdx += 1;
|
|
437
|
-
const dh = ws.getRow(rowIdx++);
|
|
438
|
-
['Source', 'Disposition', 'Reason', 'Title'].forEach((l, i) => headerCell(dh.getCell(2 + i), l));
|
|
439
|
-
for (const d of model.dispositions) {
|
|
440
|
-
const row = ws.getRow(rowIdx++);
|
|
441
|
-
dataCell(row.getCell(2), d.vpId);
|
|
442
|
-
dataCell(row.getCell(3), d.as, { center: true });
|
|
443
|
-
dataCell(row.getCell(4), d.reason);
|
|
444
|
-
dataCell(row.getCell(5), d.title);
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
// --- Manifest ---
|
|
448
|
-
rowIdx += 1;
|
|
449
|
-
dataCell(ws.getRow(rowIdx).getCell(2), 'Generation manifest', { bold: true });
|
|
450
|
-
rowIdx += 1;
|
|
451
|
-
const m = model.manifest;
|
|
452
|
-
const manifestRows = [
|
|
453
|
-
['Unit', m.unit],
|
|
454
|
-
['Approval state', m.approvalState],
|
|
455
|
-
['Delivery items', String(m.itemCount)],
|
|
456
|
-
['Coverage variants', String(m.variantCount)],
|
|
457
|
-
['Source fingerprint', m.sourceFingerprint],
|
|
458
|
-
['Map fingerprint', m.mapFingerprint],
|
|
459
|
-
['Transformer version', m.transformerVersion],
|
|
460
|
-
['Max variants / item (warn)', String(m.thresholds.maxVariantsPerItem)],
|
|
461
|
-
];
|
|
462
|
-
for (const [k, v] of manifestRows) {
|
|
463
|
-
const row = ws.getRow(rowIdx++);
|
|
464
|
-
dataCell(row.getCell(2), k, { bold: true, fill: SOFT_BLUE });
|
|
465
|
-
ws.mergeCells(rowIdx - 1, 3, rowIdx - 1, 7);
|
|
466
|
-
dataCell(row.getCell(3), v);
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
// ---------------------------------------------------------------------------
|
|
470
111
|
function renderMatrixXlsx(model, sungenVersion) {
|
|
471
112
|
const wb = new ExcelJS.Workbook();
|
|
472
|
-
|
|
473
|
-
|
|
113
|
+
const sheets = [
|
|
114
|
+
{ sheetName: 'Auto', items: projectItems(model, 'auto') },
|
|
115
|
+
{ sheetName: 'Manual', items: projectItems(model, 'manual') },
|
|
116
|
+
];
|
|
117
|
+
(0, render_overview_sheet_1.addMatrixOverviewSheet)(wb, model, sheets, sungenVersion);
|
|
118
|
+
for (const s of sheets)
|
|
119
|
+
(0, render_testcase_sheet_1.addTestcaseSheet)(wb, s.sheetName, model, s.items, sungenVersion);
|
|
120
|
+
(0, render_coverage_sheet_1.addCoverageSheet)(wb, model, sungenVersion);
|
|
474
121
|
return wb;
|
|
475
122
|
}
|
|
476
123
|
//# sourceMappingURL=render-xlsx.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-xlsx.js","sourceRoot":"","sources":["../../../src/exporters/matrix/render-xlsx.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"render-xlsx.js","sourceRoot":"","sources":["../../../src/exporters/matrix/render-xlsx.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCH,kCAYC;AAGD,oCAEC;AAED,4CAWC;AArED,iDAAmC;AACnC,mCAAqD;AAErD,mEAA2D;AAC3D,mEAA2D;AAC3D,mEAAkF;AAElF,wEAAwE;AACxE,mFAAmF;AACnF,6CAAgF;AAAvE,4GAAA,aAAa,OAAA;AAAE,8GAAA,eAAe,OAAA;AAAE,8GAAA,eAAe,OAAA;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,SAAgB,WAAW,CAAC,IAAkB,EAAE,IAAuB;IACrE,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEtD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,IAAA,0BAAkB,EAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,WAAW;QAC1E,CAAC,CAAC,CAAC,IAAA,0BAAkB,EAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IAEjB,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AACnG,CAAC;AAED,sDAAsD;AACtD,SAAgB,YAAY,CAAC,KAAkB,EAAE,IAAuB;IACtE,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AACnG,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAkB,EAAE,aAAsB;IACzE,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAClC,MAAM,MAAM,GAAsB;QAChC,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;QACzD,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;KAC9D,CAAC;IAEF,IAAA,8CAAsB,EAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IACzD,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,IAAA,wCAAgB,EAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACzF,IAAA,wCAAgB,EAAC,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IAC3C,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The BM-2-901-13 summary band on rows 6/7/8 of a testcase sheet:
|
|
3
|
+
* labels, live counts, percentages — matching the company template cell for cell.
|
|
4
|
+
*/
|
|
5
|
+
import * as ExcelJS from 'exceljs';
|
|
6
|
+
import { DeliveryItem } from './types';
|
|
7
|
+
/** The counted data area — the template's own range, so a QA-appended row counts. */
|
|
8
|
+
export declare const COUNT_START = 14;
|
|
9
|
+
/**
|
|
10
|
+
* `Total TCs` counts column **K**, not column A.
|
|
11
|
+
*
|
|
12
|
+
* The template's own `COUNTA(A14:A…)` counts every row with an ID — which here
|
|
13
|
+
* means parent rows too, since a delivery item carries one. But `D7..G7` are
|
|
14
|
+
* `COUNTIF(L…)` over the state vocabulary, and those only ever match VARIANT
|
|
15
|
+
* rows: a parent's Result cell holds a composed "n/m Passed …" label, never a
|
|
16
|
+
* bare state word (that is what stops variants being counted twice). Counting A
|
|
17
|
+
* therefore mixed the two populations: on the `products` example `Total` read 46
|
|
18
|
+
* against 29 executable cases, the phantom 17 items landing in `Remaining` and
|
|
19
|
+
* dragging `% Passed` from 93% down to 59%.
|
|
20
|
+
*
|
|
21
|
+
* Column K (`Testcase type`) is the one column that is ALWAYS written on a
|
|
22
|
+
* variant and ALWAYS blank on a parent, so `COUNTA(K14:K…)` counts exactly the
|
|
23
|
+
* executable cases the state counters count. Every figure in the band — and the
|
|
24
|
+
* Overview roll-up that references it — now reconciles.
|
|
25
|
+
*
|
|
26
|
+
* The one cost: a row QA appends by hand is counted once its `Testcase type`
|
|
27
|
+
* cell is filled, not merely its ID. See the spec, §8.3.
|
|
28
|
+
*/
|
|
29
|
+
export declare function addSummaryBand(ws: ExcelJS.Worksheet, items: DeliveryItem[]): void;
|
|
30
|
+
//# sourceMappingURL=testcase-summary-band.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testcase-summary-band.d.ts","sourceRoot":"","sources":["../../../src/exporters/matrix/testcase-summary-band.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,qFAAqF;AACrF,eAAO,MAAM,WAAW,KAAK,CAAC;AAO9B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI,CAwCjF"}
|