From f568cc1a738073b056315b2ba3be2b2b4e6da593 Mon Sep 17 00:00:00 2001 From: David Gwilliam Date: Sat, 21 Mar 2026 16:33:06 -0700 Subject: [PATCH] refactor(comparison): Use existing acceptance_report.py for HTML generation Instead of duplicating HTML generation code, use the existing acceptance_report.py infrastructure which already has: - ANSI code parsing for color rendering - Frame capture and display - Index report generation - Comprehensive styling This eliminates code duplication and leverages the existing acceptance testing patterns in the codebase. --- tests/comparison_capture.py | 184 ++++++------------------------------ 1 file changed, 30 insertions(+), 154 deletions(-) diff --git a/tests/comparison_capture.py b/tests/comparison_capture.py index d54f87a..c7cb998 100644 --- a/tests/comparison_capture.py +++ b/tests/comparison_capture.py @@ -444,7 +444,7 @@ def generate_html_report( comparison_results: List[Dict[str, Any]], output_dir: Path = Path("tests/comparison_output"), ) -> Path: - """Generate HTML report from comparison results. + """Generate HTML report from comparison results using acceptance_report.py. Args: comparison_results: List of comparison results @@ -453,161 +453,37 @@ def generate_html_report( Returns: Path to generated HTML report """ + from tests.acceptance_report import save_index_report + output_dir.mkdir(parents=True, exist_ok=True) - html_content = """ - - - - - - Mainline Comparison Report - - - -
-

Mainline Pipeline Comparison Report

-

Generated: {{timestamp}}

-
+ # Generate index report with links to all comparison results + reports = [] + for result in comparison_results: + reports.append( + { + "test_name": f"comparison-{result['preset']}", + "status": "PASS" if result.get("status") == "success" else "FAIL", + "frame_count": result["stats"]["total_frames_compared"], + "duration_ms": result["performance_comparison"]["sideline"][ + "total_time_ms" + ], + } + ) -
-

Summary

-
-
-
0
-
Presets Tested
-
-
-
0%
-
Average Match Rate
-
-
-
0
-
Total Frames Compared
-
-
-
+ # Save index report + index_file = save_index_report(reports, str(output_dir)) -
- -
+ # Also save a summary JSON file for programmatic access + summary_file = output_dir / "comparison_summary.json" + with open(summary_file, "w") as f: + json.dump( + { + "timestamp": __import__("datetime").datetime.now().isoformat(), + "results": comparison_results, + }, + f, + indent=2, + ) - - - -""" - - # Generate comparison data for JavaScript - comparison_data_json = json.dumps(comparison_results) - - # Calculate summary statistics - total_presets = len(comparison_results) - total_frames = sum(r["stats"]["total_frames_compared"] for r in comparison_results) - total_identical = sum(r["stats"]["identical_frames"] for r in comparison_results) - average_match = (total_identical / total_frames * 100) if total_frames > 0 else 0 - - summary = { - "total_presets": total_presets, - "total_frames": total_frames, - "total_identical": total_identical, - "average_match": average_match, - } - - # Replace placeholders - html_content = html_content.replace( - "{{timestamp}}", time.strftime("%Y-%m-%d %H:%M:%S") - ) - html_content = html_content.replace("{{comparison_data}}", comparison_data_json) - html_content = html_content.replace("{{summary}}", json.dumps(summary)) - - # Save HTML report - output_file = output_dir / "comparison_report.html" - with open(output_file, "w") as f: - f.write(html_content) - - return output_file + return Path(index_file)