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.
45 lines
1.5 KiB
45 lines
1.5 KiB
from pathlib import Path
|
|
|
|
from slither import Slither
|
|
|
|
|
|
TEST_DATA_DIR = Path(__file__).resolve().parent / "test_data"
|
|
NAME_RESOLUTION_TEST_ROOT = Path(TEST_DATA_DIR, "name_resolution")
|
|
|
|
|
|
def _sort_references_lines(refs: list) -> list:
|
|
return sorted([ref.lines[0] for ref in refs])
|
|
|
|
|
|
def test_name_resolution_compact(solc_binary_path) -> None:
|
|
solc_path = solc_binary_path("0.8.0")
|
|
slither = Slither(
|
|
Path(NAME_RESOLUTION_TEST_ROOT, "shadowing_compact.sol").as_posix(), solc=solc_path
|
|
)
|
|
contract = slither.get_contract_from_name("B")[0]
|
|
x = contract.get_state_variable_from_name("x")
|
|
assert _sort_references_lines(x.references) == [5]
|
|
|
|
|
|
def test_name_resolution_legacy_post_0_5_0(solc_binary_path) -> None:
|
|
solc_path = solc_binary_path("0.5.0")
|
|
slither = Slither(
|
|
Path(NAME_RESOLUTION_TEST_ROOT, "shadowing_legacy_post_0_5_0.sol").as_posix(),
|
|
solc=solc_path,
|
|
)
|
|
contract = slither.get_contract_from_name("B")[0]
|
|
x = contract.get_state_variable_from_name("x")
|
|
assert _sort_references_lines(x.references) == [5]
|
|
|
|
|
|
def test_name_resolution_legacy_pre_0_5_0(solc_binary_path) -> None:
|
|
solc_path = solc_binary_path("0.4.12")
|
|
slither = Slither(
|
|
Path(NAME_RESOLUTION_TEST_ROOT, "shadowing_legacy_pre_0_5_0.sol").as_posix(),
|
|
solc=solc_path,
|
|
force_legacy=True,
|
|
)
|
|
contract = slither.get_contract_from_name("B")[0]
|
|
function = contract.get_function_from_signature("a()")
|
|
x = function.get_local_variable_from_name("x")
|
|
assert _sort_references_lines(x.references) == [5]
|
|
|