|
|
@ -10,40 +10,27 @@ TEST_FILES = Path(__file__).parent / "testdata/input_contracts" |
|
|
|
class SolidityContractTest(BaseTestCase): |
|
|
|
class SolidityContractTest(BaseTestCase): |
|
|
|
def test_get_source_info_without_name_gets_latest_contract_info(self): |
|
|
|
def test_get_source_info_without_name_gets_latest_contract_info(self): |
|
|
|
input_file = TEST_FILES / "multi_contracts.sol" |
|
|
|
input_file = TEST_FILES / "multi_contracts.sol" |
|
|
|
contract = SolidityContract( |
|
|
|
contract = SolidityContract(str(input_file)) |
|
|
|
str(input_file), solc_binary=MythrilDisassembler._init_solc_binary("0.5.0") |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
code_info = contract.get_source_info(142) |
|
|
|
code_info = contract.get_source_info(109) |
|
|
|
|
|
|
|
|
|
|
|
self.assertEqual(code_info.filename, str(input_file)) |
|
|
|
self.assertEqual(code_info.filename, str(input_file)) |
|
|
|
self.assertEqual(code_info.lineno, 14) |
|
|
|
|
|
|
|
self.assertEqual(code_info.code, "msg.sender.transfer(2 ether)") |
|
|
|
self.assertEqual(code_info.code, "msg.sender.transfer(2 ether)") |
|
|
|
|
|
|
|
|
|
|
|
def test_get_source_info_with_contract_name_specified(self): |
|
|
|
def test_get_source_info_with_contract_name_specified(self): |
|
|
|
input_file = TEST_FILES / "multi_contracts.sol" |
|
|
|
input_file = TEST_FILES / "multi_contracts.sol" |
|
|
|
contract = SolidityContract( |
|
|
|
contract = SolidityContract(str(input_file), name="Transfer1") |
|
|
|
str(input_file), |
|
|
|
|
|
|
|
name="Transfer1", |
|
|
|
|
|
|
|
solc_binary=MythrilDisassembler._init_solc_binary("0.5.0"), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
code_info = contract.get_source_info(142) |
|
|
|
code_info = contract.get_source_info(109) |
|
|
|
|
|
|
|
|
|
|
|
self.assertEqual(code_info.filename, str(input_file)) |
|
|
|
self.assertEqual(code_info.filename, str(input_file)) |
|
|
|
self.assertEqual(code_info.lineno, 6) |
|
|
|
|
|
|
|
self.assertEqual(code_info.code, "msg.sender.transfer(1 ether)") |
|
|
|
self.assertEqual(code_info.code, "msg.sender.transfer(1 ether)") |
|
|
|
|
|
|
|
|
|
|
|
def test_get_source_info_with_contract_name_specified_constructor(self): |
|
|
|
def test_get_source_info_with_contract_name_specified_constructor(self): |
|
|
|
input_file = TEST_FILES / "constructor_assert.sol" |
|
|
|
input_file = TEST_FILES / "constructor_assert.sol" |
|
|
|
contract = SolidityContract( |
|
|
|
contract = SolidityContract(str(input_file), name="AssertFail") |
|
|
|
str(input_file), |
|
|
|
|
|
|
|
name="AssertFail", |
|
|
|
|
|
|
|
solc_binary=MythrilDisassembler._init_solc_binary("0.5.0"), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
code_info = contract.get_source_info(70, constructor=True) |
|
|
|
code_info = contract.get_source_info(75, constructor=True) |
|
|
|
|
|
|
|
|
|
|
|
self.assertEqual(code_info.filename, str(input_file)) |
|
|
|
self.assertEqual(code_info.filename, str(input_file)) |
|
|
|
self.assertEqual(code_info.lineno, 6) |
|
|
|
|
|
|
|
self.assertEqual(code_info.code, "assert(var1 > 0)") |
|
|
|
self.assertEqual(code_info.code, "assert(var1 > 0)") |
|
|
|