"""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 from codeflash.languages.current import reset_current_language, set_current_language 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]} # 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() # 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}, 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