2026-02-04 00:04:23 +00:00
|
|
|
"""Test that tests_project_rootdir is set correctly for Java projects."""
|
|
|
|
|
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
|
|
|
|
|
|
from codeflash.discovery.discover_unit_tests import discover_unit_tests
|
|
|
|
|
from codeflash.languages.base import Language
|
2026-03-02 20:47:23 +00:00
|
|
|
from codeflash.languages.current import reset_current_language, set_current_language
|
2026-02-04 00:04:23 +00:00
|
|
|
from codeflash.verification.verification_utils import TestConfig
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_java_tests_project_rootdir_set_to_tests_root(tmp_path):
|
|
|
|
|
"""Test that for Java projects, tests_project_rootdir is set to tests_root."""
|
|
|
|
|
# Create a mock Java project structure
|
|
|
|
|
project_root = tmp_path / "project"
|
|
|
|
|
project_root.mkdir()
|
|
|
|
|
(project_root / "pom.xml").touch()
|
|
|
|
|
|
|
|
|
|
tests_root = project_root / "src" / "test" / "java"
|
|
|
|
|
tests_root.mkdir(parents=True)
|
|
|
|
|
|
|
|
|
|
# Create test config with tests_project_rootdir initially set to project root
|
|
|
|
|
# (simulating what happens before the fix)
|
|
|
|
|
test_cfg = TestConfig(
|
|
|
|
|
tests_root=tests_root,
|
|
|
|
|
project_root_path=project_root,
|
|
|
|
|
tests_project_rootdir=project_root, # Initially set to project root
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# Create a mock Java function to ensure language detection works
|
|
|
|
|
mock_java_function = MagicMock()
|
|
|
|
|
mock_java_function.language = "java"
|
|
|
|
|
file_to_funcs = {Path("dummy.java"): [mock_java_function]}
|
|
|
|
|
|
2026-03-02 20:47:23 +00:00
|
|
|
# Set current language to Java so is_python() returns False and
|
|
|
|
|
# current_language_support() returns JavaSupport with its
|
|
|
|
|
# adjust_test_config_for_discovery implementation
|
|
|
|
|
set_current_language(Language.JAVA)
|
|
|
|
|
try:
|
|
|
|
|
with patch("codeflash.discovery.discover_unit_tests.discover_tests_for_language") as mock_discover:
|
|
|
|
|
mock_discover.return_value = ({}, 0, 0)
|
|
|
|
|
|
|
|
|
|
# Call discover_unit_tests
|
|
|
|
|
discover_unit_tests(test_cfg, file_to_funcs_to_optimize=file_to_funcs)
|
|
|
|
|
finally:
|
|
|
|
|
reset_current_language()
|
2026-02-04 00:04:23 +00:00
|
|
|
|
|
|
|
|
# Verify that tests_project_rootdir was updated to tests_root
|
|
|
|
|
assert test_cfg.tests_project_rootdir == tests_root, (
|
|
|
|
|
f"Expected tests_project_rootdir to be {tests_root}, "
|
|
|
|
|
f"but got {test_cfg.tests_project_rootdir}"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_python_tests_project_rootdir_unchanged(tmp_path):
|
|
|
|
|
"""Test that for Python projects, tests_project_rootdir behavior is unchanged."""
|
|
|
|
|
# Setup Python environment
|
|
|
|
|
set_current_language(Language.PYTHON)
|
|
|
|
|
|
|
|
|
|
# Create a mock Python project structure
|
|
|
|
|
project_root = tmp_path / "project"
|
|
|
|
|
project_root.mkdir()
|
|
|
|
|
(project_root / "pyproject.toml").touch()
|
|
|
|
|
|
|
|
|
|
tests_root = project_root / "tests"
|
|
|
|
|
tests_root.mkdir()
|
|
|
|
|
|
|
|
|
|
# Create test config
|
|
|
|
|
original_tests_project_rootdir = project_root / "some" / "other" / "dir"
|
|
|
|
|
test_cfg = TestConfig(
|
|
|
|
|
tests_root=tests_root,
|
|
|
|
|
project_root_path=project_root,
|
|
|
|
|
tests_project_rootdir=original_tests_project_rootdir,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# Mock pytest discovery
|
|
|
|
|
with patch("codeflash.discovery.discover_unit_tests.discover_tests_pytest") as mock_discover:
|
|
|
|
|
mock_discover.return_value = ({}, 0, 0)
|
|
|
|
|
|
|
|
|
|
# Call discover_unit_tests
|
|
|
|
|
discover_unit_tests(test_cfg, file_to_funcs_to_optimize={})
|
|
|
|
|
|
|
|
|
|
# For Python, tests_project_rootdir should remain unchanged
|
|
|
|
|
# (the function doesn't modify it for Python projects)
|
|
|
|
|
assert test_cfg.tests_project_rootdir == original_tests_project_rootdir
|