mirror of https://github.com/crytic/slither
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.2 KiB
40 lines
1.2 KiB
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)
|
|
|