From 93d6646f43e0940bc6a414db0592a375a1258a1c Mon Sep 17 00:00:00 2001 From: Ashish Sharma Date: Mon, 5 Oct 2026 09:55:04 +0000 Subject: [PATCH] (fix): show missing recommended standalone tests in HTML - Include missing Mandatory and Recommended components in the standalone compliance table using their merged JSON status. - Preserve Not Compliant (Not Run) labels, requirement badges, registry order, and existing test results and summary counts. - Extend browser checks for missing components, duplicate entries, and unchanged result cards and navigation. Signed-off-by: Ashish Sharma Change-Id: I3cfdfffc900779d4863dc0e56e6b018c72b6c46f --- .../report_ui_browser_smoke.py | 40 ++++++++++++++----- common/log_parser/generate_acs_summary.py | 8 ++-- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/common/acs_test_framework_runner/report_ui_browser_smoke.py b/common/acs_test_framework_runner/report_ui_browser_smoke.py index 786d9643..7483fc88 100644 --- a/common/acs_test_framework_runner/report_ui_browser_smoke.py +++ b/common/acs_test_framework_runner/report_ui_browser_smoke.py @@ -728,19 +728,20 @@ def _run_page( "READ-WRITE-CHECK-BLK-DEVICES | Mandatory | Compliant || " + "CAPSULE-UPDATE | Mandatory | Not Compliant (Not Run) || " + "PSCI | Recommended | Compliant || SMBIOS | Recommended | Compliant || " + + "NETWORK-BOOT | Recommended | Not Compliant (Not Run) || " + + "RUNTIME-DEV-MAP | Recommended | Not Compliant (Not Run) || " + + "RESERVED-MEMORY-MAP | Mandatory | Not Compliant (Not Run) || " + "Future component | Future requirement | " + "Partner review pending: ", - "Standalone must add only missing Mandatory components to its compliance table"); - expect(!complianceValues.some(function (value) { - return value.indexOf("NETWORK-BOOT") >= 0; - }), - "A missing Recommended component must remain in the SRS summary only"); + "Standalone must include missing Mandatory and Recommended components " + + "once in registry order while preserving each compliance value"); expect(complianceRows.every(function (row) { return !row.hasAttribute("data-acs-row-status"); }) && document.documentElement.scrollWidth <= document.documentElement.clientWidth + 1, "Standalone compliance rows must remain outside filters without overflow"); - expect(window.getComputedStyle(compliancePanel).borderLeftColor === + expect(complianceRows.length === 11 && + window.getComputedStyle(compliancePanel).borderLeftColor === window.getComputedStyle(compliancePanel).borderTopColor && window.getComputedStyle(complianceRows[0].cells[0]).boxShadow.indexOf( "22, 163, 74") >= 0 && @@ -749,8 +750,14 @@ def _run_page( window.getComputedStyle(complianceRows[4].cells[0]).boxShadow.indexOf( "220, 38, 38") >= 0 && window.getComputedStyle(complianceRows[7].cells[0]).boxShadow.indexOf( + "220, 38, 38") >= 0 && + window.getComputedStyle(complianceRows[8].cells[0]).boxShadow.indexOf( + "220, 38, 38") >= 0 && + window.getComputedStyle(complianceRows[9].cells[0]).boxShadow.indexOf( + "220, 38, 38") >= 0 && + window.getComputedStyle(complianceRows[10].cells[0]).boxShadow.indexOf( "100, 116, 139") >= 0, - "Standalone must use red rails for failed and mandatory-not-run results, " + + "Standalone must use red rails for Not Compliant rows, " + "with a neutral future-status fallback"); var select = document.querySelector(".acs-control select"); expect(select && select.previousElementSibling.textContent === "Jump to test case" && @@ -767,8 +774,12 @@ def _run_page( expect(document.body.getAttribute("data-jump-worked") === "true" && select.value === "", "Test-case jump selection must navigate and reset"); } - expect(document.querySelectorAll(".acs-case-overview").length === 2, - "Every standalone case must use the shared context card"); + expect(document.querySelectorAll(".acs-case-overview").length === 2 && + select.options.length === 3 && + document.querySelector(".acs-compact-summary-total").textContent === + "2 suite-reported tests" && + document.querySelector(".acs-status-filter.info").textContent === "All outcomes 2", + "Missing compliance entries must not add result cards, jump targets, or test outcomes"); var firstOverview = document.querySelector(".acs-case-overview"); expect(firstOverview.querySelector(".acs-case-eyebrow").textContent === "Test case" && firstOverview.querySelector(".acs-case-title").textContent === "ping_test", @@ -1393,7 +1404,11 @@ def main() -> int: "Suite_Name: Mandatory : Capsule Update_compliance": "Not Compliant: not run", "Suite_Name: Recommended : NETWORK_BOOT_compliance": - "Not Run", + "Not Compliant: not run", + "Suite_Name: Recommended : RUNTIME_DEV_MAP_compliance": + "Not Compliant: not run", + "Suite_Name: Mandatory : RESERVED_MEMORY_MAP_compliance": + "Not Compliant: not run", "Suite_Name: Recommended : PSCI_compliance": "Compliant", "Suite_Name: Recommended : SMBIOS_compliance": "Compliant", "Suite_Name: Future requirement : Future component_compliance": @@ -1415,6 +1430,7 @@ def main() -> int: }, {"Test_case": "psci_check", "Test_suite": "PSCI"}, {"Test_case": "SmbiosTable", "Test_suite": "SMBIOS"}, + {"Test_case": "SmbiosTable", "Test_suite": "SMBIOS"}, {"Test_case": "Future component", "Test_suite": "Future suite"}, ], } @@ -1440,6 +1456,10 @@ def main() -> int: "ACS Results Summary": { "Suite_Name: Mandatory : Capsule Update_compliance": "Not Compliant: not run", + "Suite_Name: Recommended : RUNTIME_DEV_MAP_compliance": + "Not Compliant: not run", + "Suite_Name: Recommended : NETWORK_BOOT_compliance": + "Not Compliant: not run", } } }), encoding="utf-8") diff --git a/common/log_parser/generate_acs_summary.py b/common/log_parser/generate_acs_summary.py index ae205ee2..8179b423 100644 --- a/common/log_parser/generate_acs_summary.py +++ b/common/log_parser/generate_acs_summary.py @@ -685,8 +685,8 @@ def _standalone_rows(merged_data, records): if not rows: return rows - # Keep a missing Mandatory component visible in the existing Standalone - # compliance table without creating an empty result report for it. + # Keep missing Mandatory and Recommended components visible in the existing + # Standalone compliance table without creating empty result reports for them. for canonical in included_order: registry_entry = registry_by_name.get(canonical, {}) requirement_key = registry_entry.get("requirement_key", canonical) @@ -695,8 +695,8 @@ def _standalone_rows(merged_data, records): if identity in seen or not record or not record.get("not_run"): continue if ( - record["requirement"] != "Mandatory" or - record["compliance"] != "Not Compliant" + record["requirement"] not in {"Mandatory", "Recommended"} or + record["compliance"] not in {"Not Compliant", "Not Run"} ): continue missing_record = {**record, "component": canonical}