@@ -60,15 +60,25 @@ def create_summary_table(results: Dict[str, Any]) -> Tuple[None, List[List[str]]
6060
6161 # Add test suite rows
6262 for suite in sorted (all_suites ):
63- row = [f"{ suite :<30} " ] # Left-align suite name with padding
63+ # Get total test cases from first non-empty result
64+ total_cases = 0
65+ for lang , lang_results in results .items ():
66+ suite_results = lang_results .get ('test_suites' , {}).get (suite , {})
67+ for stats in suite_results .values ():
68+ total_cases = stats .get ('total' , 0 )
69+ if total_cases > 0 :
70+ break
71+ if total_cases > 0 :
72+ break
73+
74+ row = [f"{ suite } ({ total_cases } cases)" .ljust (40 )] # Left-align suite name with case count
6475 for lang , engines in sorted (engine_by_lang .items ()):
6576 for engine in sorted (engines ):
6677 suite_results = results [lang ].get ('test_suites' , {}).get (suite , {})
6778 if engine in suite_results :
6879 stats = suite_results [engine ]
6980 passed = stats .get ('passed' , 0 )
70- total = stats .get ('total' , 0 )
71- row .append (f"{ passed :>3} /{ total :<3} " )
81+ row .append (f"{ passed :>3} " )
7282 else :
7383 row .append (f"{ 'N/A' :>7} " )
7484 rows .append (row )
@@ -88,32 +98,54 @@ def create_summary_table(results: Dict[str, Any]) -> Tuple[None, List[List[str]]
8898 total = stats .get ('total' , 0 )
8999 success_rate = (passed / total * 100 ) if total > 0 else 0
90100
91- total_row .append (f"{ passed :>3} / { total :<3 } " )
101+ total_row .append (f"{ passed :>3} " ) # Only show passing tests
92102 success_row .append (f"{ success_rate :>6.2f} %" )
93103 else :
94104 total_row .append (f"{ 'N/A' :>7} " )
95105 success_row .append (f"{ 'N/A' :>7} " )
96-
106+
97107 rows .append (total_row )
98108 rows .append (success_row )
99109
100110 return None , rows
101111
102- def get_success_class (cell : str ) -> str :
112+ def get_success_class (cell : str , current_row : list = None ) -> str :
103113 if cell .strip () == 'N/A' :
104114 return 'na'
105115 try :
106- if '/' in cell :
107- passed , total = map (int , cell .split ('/' ))
108- rate = (passed / total ) * 100
116+ # Skip test suite name cells
117+ if '(' in cell and 'cases)' in cell :
118+ return ''
119+
120+ # Handle percentage values in Success Rate row
121+ if '%' in cell :
122+ rate = float (cell .rstrip ('%' ))
123+ if rate == 100 :
124+ return 'success-high' # Green for 100%
125+ elif rate > 0 :
126+ return 'success-medium' # Yellow for partial
127+ return 'success-low' # Amber for 0%
128+
129+ # Handle numeric values in regular cells
130+ value = int (cell .strip ())
131+
132+ # If we have the current row and it contains test suite info
133+ if current_row and '(' in current_row [0 ] and 'cases)' in current_row [0 ]:
134+ total = int (current_row [0 ].split ('(' )[1 ].split ()[0 ])
135+ rate = (value / total ) * 100 if total > 0 else 0
136+
109137 if rate == 100 :
110- return 'success-high'
111- elif rate >= 50 :
112- return 'success-medium'
113- return 'success-low'
114- except :
115- pass
116- return ''
138+ return 'success-high' # Green for 100%
139+ elif rate > 0 :
140+ return 'success-medium' # Yellow for partial
141+ return 'success-low' # Amber for 0%
142+
143+ # For totals row, only color non-zero values
144+ return 'success-low' if value == 0 else 'success-medium'
145+
146+ except Exception as e :
147+ print (f"Error processing cell '{ cell } ': { e } " )
148+ return ''
117149
118150def generate_html_report (rows : list , results : Dict [str , Any ]) -> str :
119151 current_time = datetime .now ().strftime ("%Y-%m-%d %H:%M:%S" )
@@ -159,10 +191,10 @@ def generate_html_report(rows: list, results: Dict[str, Any]) -> str:
159191 vertical-align: middle;
160192 margin-left: 4px;
161193 }}
162- .success-high {{ background-color: #90EE90 ; }} /* Light green */
163- .success-medium {{ background-color: #FFD700; }} /* Yellow */
164- .success-low {{ background-color: #FFA07A ; }} /* Light salmon */
165- .na {{ background-color: #f2f2f2; }} /* Light gray */
194+ .success-high {{ background-color: #98FB98 ; }} /* Pale green for 100% */
195+ .success-medium {{ background-color: #FFD700; }} /* Gold for partial */
196+ .success-low {{ background-color: #FF8C00 ; }} /* Dark orange for 0% */
197+ .na {{ background-color: #f2f2f2; }} /* Light gray for N/A */
166198 </style>
167199 <link rel="stylesheet" type='text/css' href="https://cdn.jsdelivr.net/gh/devicons/devicon@latest/devicon.min.css" />
168200 </head>
@@ -196,7 +228,7 @@ def generate_html_report(rows: list, results: Dict[str, Any]) -> str:
196228 if i == 0 :
197229 html += f"<td class='left'>{ cell } </td>"
198230 else :
199- success_class = get_success_class (cell )
231+ success_class = get_success_class (cell , row )
200232 html += f"<td class='{ success_class } '>{ cell } </td>"
201233 html += "</tr>\n "
202234
@@ -208,7 +240,7 @@ def generate_html_report(rows: list, results: Dict[str, Any]) -> str:
208240 if i == 0 :
209241 html += f"<td class='left'>{ cell } </td>"
210242 else :
211- success_class = get_success_class (cell )
243+ success_class = get_success_class (cell , row )
212244 html += f"<td class='{ success_class } '>{ cell } </td>"
213245 html += "</tr>\n "
214246
0 commit comments