Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 27 additions & 2 deletions codeflash/languages/java/test_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -309,8 +309,33 @@ def run_behavioral_tests(
surefire_dir = target_dir / "surefire-reports"
result_xml_path = _get_combined_junit_xml(surefire_dir, candidate_index)

# Return coverage_xml_path as the fourth element when coverage is enabled
return result_xml_path, result, sqlite_db_path, coverage_xml_path
# Debug: Log Maven result and coverage file status
if enable_coverage:
logger.info(f"Maven verify completed with return code: {result.returncode}")
if result.returncode != 0:
logger.warning(f"Maven verify had non-zero return code: {result.returncode}. Coverage data may be incomplete.")

# Log coverage file status after Maven verify
if enable_coverage and coverage_xml_path:
jacoco_exec_path = target_dir / "jacoco.exec"
logger.info(f"Coverage paths - target_dir: {target_dir}, coverage_xml_path: {coverage_xml_path}")
if jacoco_exec_path.exists():
logger.info(f"JaCoCo exec file exists: {jacoco_exec_path} ({jacoco_exec_path.stat().st_size} bytes)")
else:
logger.warning(f"JaCoCo exec file not found: {jacoco_exec_path} - JaCoCo agent may not have run")
if coverage_xml_path.exists():
file_size = coverage_xml_path.stat().st_size
logger.info(f"JaCoCo XML report exists: {coverage_xml_path} ({file_size} bytes)")
if file_size == 0:
logger.warning(f"JaCoCo XML report is empty - report generation may have failed")
else:
logger.warning(f"JaCoCo XML report not found: {coverage_xml_path} - verify phase may not have completed")

# Return tuple matching the expected signature:
# (result_xml_path, run_result, coverage_database_file, coverage_config_file)
# For Java: coverage_database_file is the jacoco.xml path, coverage_config_file is not used (None)
# The sqlite_db_path is used internally for behavior capture but doesn't need to be returned
return result_xml_path, result, coverage_xml_path, None


def _compile_tests(
Expand Down
22 changes: 20 additions & 2 deletions codeflash/verification/coverage_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,14 +206,32 @@ def load_from_jacoco_xml(

"""
if not jacoco_xml_path or not jacoco_xml_path.exists():
logger.debug(f"JaCoCo XML file not found: {jacoco_xml_path}")
logger.warning(f"JaCoCo XML file not found at path: {jacoco_xml_path}")
return CoverageData.create_empty(source_code_path, function_name, code_context)

# Log file info for debugging
file_size = jacoco_xml_path.stat().st_size
logger.info(f"Parsing JaCoCo XML file: {jacoco_xml_path} (size: {file_size} bytes)")

if file_size == 0:
logger.warning(f"JaCoCo XML file is empty: {jacoco_xml_path}")
return CoverageData.create_empty(source_code_path, function_name, code_context)

try:
tree = ET.parse(jacoco_xml_path)
root = tree.getroot()
except ET.ParseError as e:
logger.warning(f"Failed to parse JaCoCo XML file: {e}")
# Log detailed debugging info
try:
with jacoco_xml_path.open(encoding="utf-8") as f:
content_preview = f.read(500)
logger.warning(
f"Failed to parse JaCoCo XML file at '{jacoco_xml_path}' "
f"(size: {file_size} bytes, exists: {jacoco_xml_path.exists()}): {e}. "
f"File preview: {content_preview!r}"
)
except Exception as read_err:
logger.warning(f"Failed to parse JaCoCo XML file at '{jacoco_xml_path}': {e}. Could not read file: {read_err}")
return CoverageData.create_empty(source_code_path, function_name, code_context)

# Determine expected source file name from path
Expand Down
Loading