Skip to content

Commit 5ffc29e

Browse files
committed
fix: junit parser uses classname.method key to avoid name collisions
Tests like test_sign exist in multiple classes. Using method-name-only as the lookup key caused false failures when an unrelated class's test failed. Now keys by classname.method (precise) with method-only fallback where pass wins over fail.
1 parent b1c92d4 commit 5ffc29e

1 file changed

Lines changed: 14 additions & 6 deletions

File tree

scripts/generate-test-report.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -246,16 +246,24 @@ def detect_fw():
246246
except: return None
247247

248248
def parse_junit(path):
249-
"""Parse junit XML for pass/fail per test method. Returns {method_name: 'pass'|'fail'|'error'|'skip'}"""
249+
"""Parse junit XML for pass/fail. Returns dict keyed by both 'classname.method' and 'method'.
250+
When names collide, pass wins over fail (avoids false negatives from unrelated test classes)."""
250251
if not path or not os.path.exists(path): return {}
251252
import xml.etree.ElementTree as ET
252253
results = {}
253254
for tc in ET.parse(path).iter('testcase'):
254-
name = tc.get('name','')
255-
if tc.find('failure') is not None: results[name] = 'fail'
256-
elif tc.find('error') is not None: results[name] = 'error'
257-
elif tc.find('skipped') is not None: results[name] = 'skip'
258-
else: results[name] = 'pass'
255+
name = tc.get('name', '')
256+
cls = tc.get('classname', '')
257+
if tc.find('failure') is not None: status = 'fail'
258+
elif tc.find('error') is not None: status = 'error'
259+
elif tc.find('skipped') is not None: status = 'skip'
260+
else: status = 'pass'
261+
# Key by classname.method (precise) and method-only (fallback)
262+
if cls:
263+
results[f'{cls}.{name}'] = status
264+
# For method-only key, pass wins over fail (avoid collision false negatives)
265+
if name not in results or status == 'pass':
266+
results[name] = status
259267
return results
260268

261269
# ---------------------------------------------------------------

0 commit comments

Comments
 (0)