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.
41 lines
1.2 KiB
41 lines
1.2 KiB
6 months ago
|
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)
|