from pathlib import Path import shutil import re import pytest from slither import Slither from slither.exceptions import SlitherException TEST_DATA_DIR = Path(__file__).resolve().parent / "test_data" foundry_available = shutil.which("forge") is not None project_ready = Path(TEST_DATA_DIR, "test_change/lib/forge-std").exists() @pytest.mark.skipif( not foundry_available or not project_ready, reason="requires Foundry and project setup" ) def test_diagnostic(): test_file_directory = TEST_DATA_DIR / "test_change" sl = Slither(test_file_directory.as_posix()) assert len(sl.compilation_units) == 1 counter_file = test_file_directory / "src" / "Counter.sol" shutil.copy(counter_file, counter_file.with_suffix(".bak")) with counter_file.open("r") as file: content = file.read() with counter_file.open("w") as file: file.write(re.sub(r"//START.*?//END\n?", "", content, flags=re.DOTALL)) with pytest.raises(SlitherException): Slither(test_file_directory.as_posix(), ignore_compile=True) # Restore the original counter so the test is idempotent Path(counter_file.with_suffix(".bak")).rename(counter_file)