diff --git a/tests_python/tests_015/_regtest_outputs/test_contract_macros.TestMacroExpansion::test_macro_expansion[macros--fail.tz].out b/tests_python/tests_015/_regtest_outputs/test_contract_macros.TestMacroExpansion::test_macro_expansion[macros--fail.tz].out deleted file mode 100644 index d2a717dc26a5a2da784922af0c4f6cc9e1750a48..0000000000000000000000000000000000000000 --- a/tests_python/tests_015/_regtest_outputs/test_contract_macros.TestMacroExpansion::test_macro_expansion[macros--fail.tz].out +++ /dev/null @@ -1,3 +0,0 @@ -tests_015/test_contract_macros.py::TestMacroExpansion::test_macro_expansion[macros/fail.tz] - -{ parameter unit ; storage unit ; code { { UNIT ; FAILWITH } } } diff --git a/tests_python/tests_015/test_contract_macros.py b/tests_python/tests_015/test_contract_macros.py deleted file mode 100644 index 354d0cd6a993a597bf319161a6ca38a65e48af7f..0000000000000000000000000000000000000000 --- a/tests_python/tests_015/test_contract_macros.py +++ /dev/null @@ -1,447 +0,0 @@ -import pytest -from tools.utils import ( - assert_run_script_failwith, - assert_transfer_failwith, - bake, - assert_storage_contains, -) -from tools.client_regression import ClientRegression -from client.client import Client -from .contract_paths import ( - find_script, - find_script_by_name, - all_contracts, - init_with_transfer, -) - - -@pytest.mark.contract -class TestContractMacros: - """Tests for contracts using macros that do not require origination.""" - - @pytest.mark.parametrize( - "contract,param,storage,expected", - [ # FORMAT: assert_output contract_file storage input expected_result - # Build list - ('build_list', '{}', '0', '{ 0 }'), - ('build_list', '{}', '3', '{ 0 ; 1 ; 2 ; 3 }'), - ( - 'build_list', - '{}', - '10', - '{ 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 ; 10 }', - ), - # Find maximum int in list -- returns None if not found - ('max_in_list', 'None', '{}', 'None'), - ('max_in_list', 'None', '{ 1 }', '(Some 1)'), - ('max_in_list', 'None', '{ -1 }', '(Some -1)'), - ( - 'max_in_list', - 'None', - '{ 10 ; -1 ; -20 ; 100 ; 0 }', - '(Some 100)', - ), - ( - 'max_in_list', - 'None', - '{ 10 ; -1 ; -20 ; 100 ; 0 }', - '(Some 100)', - ), - ( - 'max_in_list', - 'None', - '{ -10 ; -1 ; -20 ; -100 }', - '(Some -1)', - ), - # Test comparisons on tez { EQ ; GT ; LT ; GE ; LE } - ( - 'compare', - '{}', - '(Pair 1000000 2000000)', - '{ False ; False ; True ; False ; True }', - ), - ( - 'compare', - '{}', - '(Pair 2000000 1000000)', - '{ False ; True ; False ; True ; False }', - ), - ( - 'compare', - '{}', - '(Pair 2370000 2370000)', - '{ True ; False ; False ; True ; True }', - ), - # Test ASSERT - ('assert', 'Unit', 'True', 'Unit'), - # ASSERT_{OP} - ('assert_eq', 'Unit', '(Pair -1 -1)', 'Unit'), - ('assert_eq', 'Unit', '(Pair -1 -1)', 'Unit'), - ('assert_neq', 'Unit', '(Pair 0 -1)', 'Unit'), - ('assert_lt', 'Unit', '(Pair -1 0)', 'Unit'), - ('assert_le', 'Unit', '(Pair 0 0)', 'Unit'), - ('assert_le', 'Unit', '(Pair -1 0)', 'Unit'), - ('assert_gt', 'Unit', '(Pair 0 -1)', 'Unit'), - ('assert_ge', 'Unit', '(Pair 0 0)', 'Unit'), - ('assert_ge', 'Unit', '(Pair 0 -1)', 'Unit'), - # ASSERT_CMP{OP} - ('assert_cmpeq', 'Unit', '(Pair -1 -1)', 'Unit'), - ('assert_cmpneq', 'Unit', '(Pair 0 -1)', 'Unit'), - ('assert_cmplt', 'Unit', '(Pair -1 0)', 'Unit'), - ('assert_cmple', 'Unit', '(Pair -1 0)', 'Unit'), - ('assert_cmple', 'Unit', '(Pair 0 0)', 'Unit'), - ('assert_cmpgt', 'Unit', '(Pair 0 -1)', 'Unit'), - ('assert_cmpge', 'Unit', '(Pair 0 -1)', 'Unit'), - ('assert_cmpge', 'Unit', '(Pair 0 0)', 'Unit'), - # Tests the SET_CAR and SET_CDR instructions - ( - 'set_caddaadr', - '(Pair (Pair 1 2 (Pair (Pair 3 0) 4) 5) 6)', - '3000000', - '(Pair (Pair 1 2 (Pair (Pair 3 3000000) 4) 5) 6)', - ), - ( - 'map_caddaadr', - '(Pair (Pair 1 2 (Pair (Pair 3 0) 4) 5) 6)', - 'Unit', - '(Pair (Pair 1 2 (Pair (Pair 3 1000000) 4) 5) 6)', - ), - # Test comparisons on bytes { EQ ; GT ; LT ; GE ; LE } - ( - 'compare_bytes', - '{}', - '(Pair 0x33 0x34)', - '{ False ; False ; True ; False ; True }', - ), - ( - 'compare_bytes', - '{}', - '(Pair 0x33 0x33aa)', - '{ False ; False ; True ; False ; True }', - ), - ( - 'compare_bytes', - '{}', - '(Pair 0x33 0x33)', - '{ True ; False ; False ; True ; True }', - ), - ( - 'compare_bytes', - '{}', - '(Pair 0x34 0x33)', - '{ False ; True ; False ; True ; False }', - ), - ], - ) - def test_contract_input_output( - self, - client: Client, - contract: str, - param: str, - storage: str, - expected: str, - ): - contract = find_script(['macros', contract]) - run_script_res = client.run_script(contract, param, storage) - assert run_script_res.storage == expected - - @pytest.mark.parametrize( - "contract,param,storage", - [ # FORMAT: assert_output contract_file storage input expected_result - ('assert', 'Unit', 'False'), - ('assert_eq', 'Unit', '(Pair 0 -1)'), - ('assert_eq', 'Unit', '(Pair 0 -1)'), - ('assert_neq', 'Unit', '(Pair -1 -1)'), - ('assert_lt', 'Unit', '(Pair 0 -1)'), - ('assert_lt', 'Unit', '(Pair 0 0)'), - ('assert_le', 'Unit', '(Pair 0 -1)'), - ('assert_gt', 'Unit', '(Pair -1 0)'), - ('assert_gt', 'Unit', '(Pair 0 0)'), - ('assert_ge', 'Unit', '(Pair -1 0)'), - ('assert_cmpeq', 'Unit', '(Pair 0 -1)'), - ('assert_cmpneq', 'Unit', '(Pair -1 -1)'), - ('assert_cmplt', 'Unit', '(Pair 0 0)'), - ('assert_cmplt', 'Unit', '(Pair 0 -1)'), - ('assert_cmple', 'Unit', '(Pair 0 -1)'), - ('assert_cmpgt', 'Unit', '(Pair 0 0)'), - ('assert_cmpgt', 'Unit', '(Pair -1 0)'), - ('assert_cmpge', 'Unit', '(Pair -1 0)'), - ], - ) - def test_contract_failures(self, client: Client, contract, param, storage): - contract = find_script(['macros', contract]) - assert_run_script_failwith(client, contract, param, storage) - - -@pytest.mark.slow -@pytest.mark.contract -class TestGuestBook: - """Test on the guestbook contract.""" - - def test_guestbook(self, client: Client): - contract = ['macros', 'guestbook'] - - init_with_transfer( - client, - contract, - '{ Elt "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" None }', - 100, - 'bootstrap1', - ) - - assert_transfer_failwith( - client, - 0, - 'bootstrap2', - 'guestbook', - ['--arg', '"Pas moi"', '--burn-cap', '10'], - ) - - client.transfer( - 0, - 'bootstrap1', - 'guestbook', - ['-arg', '"Coucou"', '--burn-cap', '10'], - ) - bake(client) - assert_storage_contains( - client, - 'guestbook', - '{ Elt "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" (Some "Coucou") }', - ) - - assert_transfer_failwith( - client, - 0, - 'bootstrap3', - 'guestbook', - ['--arg', '"Pas moi non plus"', '--burn-cap', '10'], - ) - assert_transfer_failwith( - client, - 0, - 'bootstrap1', - 'guestbook', - ['--arg', '"Recoucou ?"', '--burn-cap', '10'], - ) - - -@pytest.mark.slow -@pytest.mark.contract -class TestBigmap: - """Tests on the big_map_mem contract.""" - - def test_bigmap(self, client: Client): - contract = ['macros', 'big_map_mem'] - - init_with_transfer( - client, - contract, - '(Pair { Elt 1 Unit ; Elt 2 Unit ; Elt 3 Unit } Unit)', - 100, - 'bootstrap1', - ) - - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['-arg', '(Pair 0 False)', '--burn-cap', '10'], - ) - bake(client) - - assert_transfer_failwith( - client, - 0, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 0 True)', '--burn-cap', '10'], - ) - - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 0 False)', '--burn-cap', '10'], - ) - bake(client) - assert_transfer_failwith( - client, - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 0 True)', '--burn-cap', '10'], - ) - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 1 True)', '--burn-cap', '10'], - ) - bake(client) - assert_transfer_failwith( - client, - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 1 False)', '--burn-cap', '10'], - ) - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 2 True)', '--burn-cap', '10'], - ) - bake(client) - assert_transfer_failwith( - client, - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 2 False)', '--burn-cap', '10'], - ) - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 3 True)', '--burn-cap', '10'], - ) - bake(client) - assert_transfer_failwith( - client, - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 3 False)', '--burn-cap', '10'], - ) - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 4 False)', '--burn-cap', '10'], - ) - bake(client) - assert_transfer_failwith( - client, - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 4 True)', '--burn-cap', '10'], - ) - - -@pytest.mark.slow -@pytest.mark.contract -class TestBigmapGetAdd: - """Tests on the big_map_get_add contract.""" - - def test_bigmap(self, client: Client): - contract = ['macros', 'big_map_get_add'] - - init_with_transfer( - client, - contract, - '(Pair { Elt 0 1 ; Elt 1 2 ; Elt 2 3 } Unit)', - 100, - 'bootstrap1', - ) - - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 200 (Some 2)) (Pair 200 (Some 2)))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 200 None) (Pair 200 None))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 200 None) (Pair 300 None))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 1 None) (Pair 200 None))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 1 (Some 2)) (Pair 0 (Some 1)))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 400 (Some 1232)) (Pair 400 (Some 1232)))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 401 (Some 0)) (Pair 400 (Some 1232)))', - '--burn-cap', - '10', - ], - ) - bake(client) - - -@pytest.mark.regression -class TestMacroExpansion: - """Test expanding macros""" - - @pytest.mark.parametrize("contract", all_contracts(['macros'])) - def test_macro_expansion( - self, client_regtest: ClientRegression, contract: str - ): - """This test expands macros in all macro test contracts, with - regression detection enabled. This test should fail if the definition - of any macros change. - """ - client_regtest.expand_macros(find_script_by_name(contract)) diff --git a/tests_python/tests_016/_regtest_outputs/test_contract_macros.TestMacroExpansion::test_macro_expansion[macros--fail.tz].out b/tests_python/tests_016/_regtest_outputs/test_contract_macros.TestMacroExpansion::test_macro_expansion[macros--fail.tz].out deleted file mode 100644 index 97baba6bf814751a7da07932cef9eca8bfb85f12..0000000000000000000000000000000000000000 --- a/tests_python/tests_016/_regtest_outputs/test_contract_macros.TestMacroExpansion::test_macro_expansion[macros--fail.tz].out +++ /dev/null @@ -1,3 +0,0 @@ -tests_016/test_contract_macros.py::TestMacroExpansion::test_macro_expansion[macros/fail.tz] - -{ parameter unit ; storage unit ; code { { UNIT ; FAILWITH } } } diff --git a/tests_python/tests_016/test_contract_macros.py b/tests_python/tests_016/test_contract_macros.py deleted file mode 100644 index 354d0cd6a993a597bf319161a6ca38a65e48af7f..0000000000000000000000000000000000000000 --- a/tests_python/tests_016/test_contract_macros.py +++ /dev/null @@ -1,447 +0,0 @@ -import pytest -from tools.utils import ( - assert_run_script_failwith, - assert_transfer_failwith, - bake, - assert_storage_contains, -) -from tools.client_regression import ClientRegression -from client.client import Client -from .contract_paths import ( - find_script, - find_script_by_name, - all_contracts, - init_with_transfer, -) - - -@pytest.mark.contract -class TestContractMacros: - """Tests for contracts using macros that do not require origination.""" - - @pytest.mark.parametrize( - "contract,param,storage,expected", - [ # FORMAT: assert_output contract_file storage input expected_result - # Build list - ('build_list', '{}', '0', '{ 0 }'), - ('build_list', '{}', '3', '{ 0 ; 1 ; 2 ; 3 }'), - ( - 'build_list', - '{}', - '10', - '{ 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 ; 10 }', - ), - # Find maximum int in list -- returns None if not found - ('max_in_list', 'None', '{}', 'None'), - ('max_in_list', 'None', '{ 1 }', '(Some 1)'), - ('max_in_list', 'None', '{ -1 }', '(Some -1)'), - ( - 'max_in_list', - 'None', - '{ 10 ; -1 ; -20 ; 100 ; 0 }', - '(Some 100)', - ), - ( - 'max_in_list', - 'None', - '{ 10 ; -1 ; -20 ; 100 ; 0 }', - '(Some 100)', - ), - ( - 'max_in_list', - 'None', - '{ -10 ; -1 ; -20 ; -100 }', - '(Some -1)', - ), - # Test comparisons on tez { EQ ; GT ; LT ; GE ; LE } - ( - 'compare', - '{}', - '(Pair 1000000 2000000)', - '{ False ; False ; True ; False ; True }', - ), - ( - 'compare', - '{}', - '(Pair 2000000 1000000)', - '{ False ; True ; False ; True ; False }', - ), - ( - 'compare', - '{}', - '(Pair 2370000 2370000)', - '{ True ; False ; False ; True ; True }', - ), - # Test ASSERT - ('assert', 'Unit', 'True', 'Unit'), - # ASSERT_{OP} - ('assert_eq', 'Unit', '(Pair -1 -1)', 'Unit'), - ('assert_eq', 'Unit', '(Pair -1 -1)', 'Unit'), - ('assert_neq', 'Unit', '(Pair 0 -1)', 'Unit'), - ('assert_lt', 'Unit', '(Pair -1 0)', 'Unit'), - ('assert_le', 'Unit', '(Pair 0 0)', 'Unit'), - ('assert_le', 'Unit', '(Pair -1 0)', 'Unit'), - ('assert_gt', 'Unit', '(Pair 0 -1)', 'Unit'), - ('assert_ge', 'Unit', '(Pair 0 0)', 'Unit'), - ('assert_ge', 'Unit', '(Pair 0 -1)', 'Unit'), - # ASSERT_CMP{OP} - ('assert_cmpeq', 'Unit', '(Pair -1 -1)', 'Unit'), - ('assert_cmpneq', 'Unit', '(Pair 0 -1)', 'Unit'), - ('assert_cmplt', 'Unit', '(Pair -1 0)', 'Unit'), - ('assert_cmple', 'Unit', '(Pair -1 0)', 'Unit'), - ('assert_cmple', 'Unit', '(Pair 0 0)', 'Unit'), - ('assert_cmpgt', 'Unit', '(Pair 0 -1)', 'Unit'), - ('assert_cmpge', 'Unit', '(Pair 0 -1)', 'Unit'), - ('assert_cmpge', 'Unit', '(Pair 0 0)', 'Unit'), - # Tests the SET_CAR and SET_CDR instructions - ( - 'set_caddaadr', - '(Pair (Pair 1 2 (Pair (Pair 3 0) 4) 5) 6)', - '3000000', - '(Pair (Pair 1 2 (Pair (Pair 3 3000000) 4) 5) 6)', - ), - ( - 'map_caddaadr', - '(Pair (Pair 1 2 (Pair (Pair 3 0) 4) 5) 6)', - 'Unit', - '(Pair (Pair 1 2 (Pair (Pair 3 1000000) 4) 5) 6)', - ), - # Test comparisons on bytes { EQ ; GT ; LT ; GE ; LE } - ( - 'compare_bytes', - '{}', - '(Pair 0x33 0x34)', - '{ False ; False ; True ; False ; True }', - ), - ( - 'compare_bytes', - '{}', - '(Pair 0x33 0x33aa)', - '{ False ; False ; True ; False ; True }', - ), - ( - 'compare_bytes', - '{}', - '(Pair 0x33 0x33)', - '{ True ; False ; False ; True ; True }', - ), - ( - 'compare_bytes', - '{}', - '(Pair 0x34 0x33)', - '{ False ; True ; False ; True ; False }', - ), - ], - ) - def test_contract_input_output( - self, - client: Client, - contract: str, - param: str, - storage: str, - expected: str, - ): - contract = find_script(['macros', contract]) - run_script_res = client.run_script(contract, param, storage) - assert run_script_res.storage == expected - - @pytest.mark.parametrize( - "contract,param,storage", - [ # FORMAT: assert_output contract_file storage input expected_result - ('assert', 'Unit', 'False'), - ('assert_eq', 'Unit', '(Pair 0 -1)'), - ('assert_eq', 'Unit', '(Pair 0 -1)'), - ('assert_neq', 'Unit', '(Pair -1 -1)'), - ('assert_lt', 'Unit', '(Pair 0 -1)'), - ('assert_lt', 'Unit', '(Pair 0 0)'), - ('assert_le', 'Unit', '(Pair 0 -1)'), - ('assert_gt', 'Unit', '(Pair -1 0)'), - ('assert_gt', 'Unit', '(Pair 0 0)'), - ('assert_ge', 'Unit', '(Pair -1 0)'), - ('assert_cmpeq', 'Unit', '(Pair 0 -1)'), - ('assert_cmpneq', 'Unit', '(Pair -1 -1)'), - ('assert_cmplt', 'Unit', '(Pair 0 0)'), - ('assert_cmplt', 'Unit', '(Pair 0 -1)'), - ('assert_cmple', 'Unit', '(Pair 0 -1)'), - ('assert_cmpgt', 'Unit', '(Pair 0 0)'), - ('assert_cmpgt', 'Unit', '(Pair -1 0)'), - ('assert_cmpge', 'Unit', '(Pair -1 0)'), - ], - ) - def test_contract_failures(self, client: Client, contract, param, storage): - contract = find_script(['macros', contract]) - assert_run_script_failwith(client, contract, param, storage) - - -@pytest.mark.slow -@pytest.mark.contract -class TestGuestBook: - """Test on the guestbook contract.""" - - def test_guestbook(self, client: Client): - contract = ['macros', 'guestbook'] - - init_with_transfer( - client, - contract, - '{ Elt "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" None }', - 100, - 'bootstrap1', - ) - - assert_transfer_failwith( - client, - 0, - 'bootstrap2', - 'guestbook', - ['--arg', '"Pas moi"', '--burn-cap', '10'], - ) - - client.transfer( - 0, - 'bootstrap1', - 'guestbook', - ['-arg', '"Coucou"', '--burn-cap', '10'], - ) - bake(client) - assert_storage_contains( - client, - 'guestbook', - '{ Elt "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" (Some "Coucou") }', - ) - - assert_transfer_failwith( - client, - 0, - 'bootstrap3', - 'guestbook', - ['--arg', '"Pas moi non plus"', '--burn-cap', '10'], - ) - assert_transfer_failwith( - client, - 0, - 'bootstrap1', - 'guestbook', - ['--arg', '"Recoucou ?"', '--burn-cap', '10'], - ) - - -@pytest.mark.slow -@pytest.mark.contract -class TestBigmap: - """Tests on the big_map_mem contract.""" - - def test_bigmap(self, client: Client): - contract = ['macros', 'big_map_mem'] - - init_with_transfer( - client, - contract, - '(Pair { Elt 1 Unit ; Elt 2 Unit ; Elt 3 Unit } Unit)', - 100, - 'bootstrap1', - ) - - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['-arg', '(Pair 0 False)', '--burn-cap', '10'], - ) - bake(client) - - assert_transfer_failwith( - client, - 0, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 0 True)', '--burn-cap', '10'], - ) - - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 0 False)', '--burn-cap', '10'], - ) - bake(client) - assert_transfer_failwith( - client, - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 0 True)', '--burn-cap', '10'], - ) - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 1 True)', '--burn-cap', '10'], - ) - bake(client) - assert_transfer_failwith( - client, - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 1 False)', '--burn-cap', '10'], - ) - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 2 True)', '--burn-cap', '10'], - ) - bake(client) - assert_transfer_failwith( - client, - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 2 False)', '--burn-cap', '10'], - ) - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 3 True)', '--burn-cap', '10'], - ) - bake(client) - assert_transfer_failwith( - client, - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 3 False)', '--burn-cap', '10'], - ) - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 4 False)', '--burn-cap', '10'], - ) - bake(client) - assert_transfer_failwith( - client, - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 4 True)', '--burn-cap', '10'], - ) - - -@pytest.mark.slow -@pytest.mark.contract -class TestBigmapGetAdd: - """Tests on the big_map_get_add contract.""" - - def test_bigmap(self, client: Client): - contract = ['macros', 'big_map_get_add'] - - init_with_transfer( - client, - contract, - '(Pair { Elt 0 1 ; Elt 1 2 ; Elt 2 3 } Unit)', - 100, - 'bootstrap1', - ) - - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 200 (Some 2)) (Pair 200 (Some 2)))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 200 None) (Pair 200 None))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 200 None) (Pair 300 None))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 1 None) (Pair 200 None))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 1 (Some 2)) (Pair 0 (Some 1)))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 400 (Some 1232)) (Pair 400 (Some 1232)))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 401 (Some 0)) (Pair 400 (Some 1232)))', - '--burn-cap', - '10', - ], - ) - bake(client) - - -@pytest.mark.regression -class TestMacroExpansion: - """Test expanding macros""" - - @pytest.mark.parametrize("contract", all_contracts(['macros'])) - def test_macro_expansion( - self, client_regtest: ClientRegression, contract: str - ): - """This test expands macros in all macro test contracts, with - regression detection enabled. This test should fail if the definition - of any macros change. - """ - client_regtest.expand_macros(find_script_by_name(contract)) diff --git a/tests_python/tests_alpha/_regtest_outputs/test_contract_macros.TestMacroExpansion::test_macro_expansion[macros--fail.tz].out b/tests_python/tests_alpha/_regtest_outputs/test_contract_macros.TestMacroExpansion::test_macro_expansion[macros--fail.tz].out deleted file mode 100644 index 93da32c9827550c381feb7bca89f840bc4cd30ea..0000000000000000000000000000000000000000 --- a/tests_python/tests_alpha/_regtest_outputs/test_contract_macros.TestMacroExpansion::test_macro_expansion[macros--fail.tz].out +++ /dev/null @@ -1,3 +0,0 @@ -tests_alpha/test_contract_macros.py::TestMacroExpansion::test_macro_expansion[macros/fail.tz] - -{ parameter unit ; storage unit ; code { { UNIT ; FAILWITH } } } diff --git a/tests_python/tests_alpha/test_contract_macros.py b/tests_python/tests_alpha/test_contract_macros.py deleted file mode 100644 index 354d0cd6a993a597bf319161a6ca38a65e48af7f..0000000000000000000000000000000000000000 --- a/tests_python/tests_alpha/test_contract_macros.py +++ /dev/null @@ -1,447 +0,0 @@ -import pytest -from tools.utils import ( - assert_run_script_failwith, - assert_transfer_failwith, - bake, - assert_storage_contains, -) -from tools.client_regression import ClientRegression -from client.client import Client -from .contract_paths import ( - find_script, - find_script_by_name, - all_contracts, - init_with_transfer, -) - - -@pytest.mark.contract -class TestContractMacros: - """Tests for contracts using macros that do not require origination.""" - - @pytest.mark.parametrize( - "contract,param,storage,expected", - [ # FORMAT: assert_output contract_file storage input expected_result - # Build list - ('build_list', '{}', '0', '{ 0 }'), - ('build_list', '{}', '3', '{ 0 ; 1 ; 2 ; 3 }'), - ( - 'build_list', - '{}', - '10', - '{ 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 ; 10 }', - ), - # Find maximum int in list -- returns None if not found - ('max_in_list', 'None', '{}', 'None'), - ('max_in_list', 'None', '{ 1 }', '(Some 1)'), - ('max_in_list', 'None', '{ -1 }', '(Some -1)'), - ( - 'max_in_list', - 'None', - '{ 10 ; -1 ; -20 ; 100 ; 0 }', - '(Some 100)', - ), - ( - 'max_in_list', - 'None', - '{ 10 ; -1 ; -20 ; 100 ; 0 }', - '(Some 100)', - ), - ( - 'max_in_list', - 'None', - '{ -10 ; -1 ; -20 ; -100 }', - '(Some -1)', - ), - # Test comparisons on tez { EQ ; GT ; LT ; GE ; LE } - ( - 'compare', - '{}', - '(Pair 1000000 2000000)', - '{ False ; False ; True ; False ; True }', - ), - ( - 'compare', - '{}', - '(Pair 2000000 1000000)', - '{ False ; True ; False ; True ; False }', - ), - ( - 'compare', - '{}', - '(Pair 2370000 2370000)', - '{ True ; False ; False ; True ; True }', - ), - # Test ASSERT - ('assert', 'Unit', 'True', 'Unit'), - # ASSERT_{OP} - ('assert_eq', 'Unit', '(Pair -1 -1)', 'Unit'), - ('assert_eq', 'Unit', '(Pair -1 -1)', 'Unit'), - ('assert_neq', 'Unit', '(Pair 0 -1)', 'Unit'), - ('assert_lt', 'Unit', '(Pair -1 0)', 'Unit'), - ('assert_le', 'Unit', '(Pair 0 0)', 'Unit'), - ('assert_le', 'Unit', '(Pair -1 0)', 'Unit'), - ('assert_gt', 'Unit', '(Pair 0 -1)', 'Unit'), - ('assert_ge', 'Unit', '(Pair 0 0)', 'Unit'), - ('assert_ge', 'Unit', '(Pair 0 -1)', 'Unit'), - # ASSERT_CMP{OP} - ('assert_cmpeq', 'Unit', '(Pair -1 -1)', 'Unit'), - ('assert_cmpneq', 'Unit', '(Pair 0 -1)', 'Unit'), - ('assert_cmplt', 'Unit', '(Pair -1 0)', 'Unit'), - ('assert_cmple', 'Unit', '(Pair -1 0)', 'Unit'), - ('assert_cmple', 'Unit', '(Pair 0 0)', 'Unit'), - ('assert_cmpgt', 'Unit', '(Pair 0 -1)', 'Unit'), - ('assert_cmpge', 'Unit', '(Pair 0 -1)', 'Unit'), - ('assert_cmpge', 'Unit', '(Pair 0 0)', 'Unit'), - # Tests the SET_CAR and SET_CDR instructions - ( - 'set_caddaadr', - '(Pair (Pair 1 2 (Pair (Pair 3 0) 4) 5) 6)', - '3000000', - '(Pair (Pair 1 2 (Pair (Pair 3 3000000) 4) 5) 6)', - ), - ( - 'map_caddaadr', - '(Pair (Pair 1 2 (Pair (Pair 3 0) 4) 5) 6)', - 'Unit', - '(Pair (Pair 1 2 (Pair (Pair 3 1000000) 4) 5) 6)', - ), - # Test comparisons on bytes { EQ ; GT ; LT ; GE ; LE } - ( - 'compare_bytes', - '{}', - '(Pair 0x33 0x34)', - '{ False ; False ; True ; False ; True }', - ), - ( - 'compare_bytes', - '{}', - '(Pair 0x33 0x33aa)', - '{ False ; False ; True ; False ; True }', - ), - ( - 'compare_bytes', - '{}', - '(Pair 0x33 0x33)', - '{ True ; False ; False ; True ; True }', - ), - ( - 'compare_bytes', - '{}', - '(Pair 0x34 0x33)', - '{ False ; True ; False ; True ; False }', - ), - ], - ) - def test_contract_input_output( - self, - client: Client, - contract: str, - param: str, - storage: str, - expected: str, - ): - contract = find_script(['macros', contract]) - run_script_res = client.run_script(contract, param, storage) - assert run_script_res.storage == expected - - @pytest.mark.parametrize( - "contract,param,storage", - [ # FORMAT: assert_output contract_file storage input expected_result - ('assert', 'Unit', 'False'), - ('assert_eq', 'Unit', '(Pair 0 -1)'), - ('assert_eq', 'Unit', '(Pair 0 -1)'), - ('assert_neq', 'Unit', '(Pair -1 -1)'), - ('assert_lt', 'Unit', '(Pair 0 -1)'), - ('assert_lt', 'Unit', '(Pair 0 0)'), - ('assert_le', 'Unit', '(Pair 0 -1)'), - ('assert_gt', 'Unit', '(Pair -1 0)'), - ('assert_gt', 'Unit', '(Pair 0 0)'), - ('assert_ge', 'Unit', '(Pair -1 0)'), - ('assert_cmpeq', 'Unit', '(Pair 0 -1)'), - ('assert_cmpneq', 'Unit', '(Pair -1 -1)'), - ('assert_cmplt', 'Unit', '(Pair 0 0)'), - ('assert_cmplt', 'Unit', '(Pair 0 -1)'), - ('assert_cmple', 'Unit', '(Pair 0 -1)'), - ('assert_cmpgt', 'Unit', '(Pair 0 0)'), - ('assert_cmpgt', 'Unit', '(Pair -1 0)'), - ('assert_cmpge', 'Unit', '(Pair -1 0)'), - ], - ) - def test_contract_failures(self, client: Client, contract, param, storage): - contract = find_script(['macros', contract]) - assert_run_script_failwith(client, contract, param, storage) - - -@pytest.mark.slow -@pytest.mark.contract -class TestGuestBook: - """Test on the guestbook contract.""" - - def test_guestbook(self, client: Client): - contract = ['macros', 'guestbook'] - - init_with_transfer( - client, - contract, - '{ Elt "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" None }', - 100, - 'bootstrap1', - ) - - assert_transfer_failwith( - client, - 0, - 'bootstrap2', - 'guestbook', - ['--arg', '"Pas moi"', '--burn-cap', '10'], - ) - - client.transfer( - 0, - 'bootstrap1', - 'guestbook', - ['-arg', '"Coucou"', '--burn-cap', '10'], - ) - bake(client) - assert_storage_contains( - client, - 'guestbook', - '{ Elt "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" (Some "Coucou") }', - ) - - assert_transfer_failwith( - client, - 0, - 'bootstrap3', - 'guestbook', - ['--arg', '"Pas moi non plus"', '--burn-cap', '10'], - ) - assert_transfer_failwith( - client, - 0, - 'bootstrap1', - 'guestbook', - ['--arg', '"Recoucou ?"', '--burn-cap', '10'], - ) - - -@pytest.mark.slow -@pytest.mark.contract -class TestBigmap: - """Tests on the big_map_mem contract.""" - - def test_bigmap(self, client: Client): - contract = ['macros', 'big_map_mem'] - - init_with_transfer( - client, - contract, - '(Pair { Elt 1 Unit ; Elt 2 Unit ; Elt 3 Unit } Unit)', - 100, - 'bootstrap1', - ) - - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['-arg', '(Pair 0 False)', '--burn-cap', '10'], - ) - bake(client) - - assert_transfer_failwith( - client, - 0, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 0 True)', '--burn-cap', '10'], - ) - - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 0 False)', '--burn-cap', '10'], - ) - bake(client) - assert_transfer_failwith( - client, - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 0 True)', '--burn-cap', '10'], - ) - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 1 True)', '--burn-cap', '10'], - ) - bake(client) - assert_transfer_failwith( - client, - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 1 False)', '--burn-cap', '10'], - ) - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 2 True)', '--burn-cap', '10'], - ) - bake(client) - assert_transfer_failwith( - client, - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 2 False)', '--burn-cap', '10'], - ) - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 3 True)', '--burn-cap', '10'], - ) - bake(client) - assert_transfer_failwith( - client, - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 3 False)', '--burn-cap', '10'], - ) - client.transfer( - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 4 False)', '--burn-cap', '10'], - ) - bake(client) - assert_transfer_failwith( - client, - 1, - 'bootstrap1', - 'big_map_mem', - ['--arg', '(Pair 4 True)', '--burn-cap', '10'], - ) - - -@pytest.mark.slow -@pytest.mark.contract -class TestBigmapGetAdd: - """Tests on the big_map_get_add contract.""" - - def test_bigmap(self, client: Client): - contract = ['macros', 'big_map_get_add'] - - init_with_transfer( - client, - contract, - '(Pair { Elt 0 1 ; Elt 1 2 ; Elt 2 3 } Unit)', - 100, - 'bootstrap1', - ) - - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 200 (Some 2)) (Pair 200 (Some 2)))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 200 None) (Pair 200 None))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 200 None) (Pair 300 None))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 1 None) (Pair 200 None))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 1 (Some 2)) (Pair 0 (Some 1)))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 400 (Some 1232)) (Pair 400 (Some 1232)))', - '--burn-cap', - '10', - ], - ) - bake(client) - client.transfer( - 1, - 'bootstrap1', - 'big_map_get_add', - [ - '--arg', - '(Pair (Pair 401 (Some 0)) (Pair 400 (Some 1232)))', - '--burn-cap', - '10', - ], - ) - bake(client) - - -@pytest.mark.regression -class TestMacroExpansion: - """Test expanding macros""" - - @pytest.mark.parametrize("contract", all_contracts(['macros'])) - def test_macro_expansion( - self, client_regtest: ClientRegression, contract: str - ): - """This test expands macros in all macro test contracts, with - regression detection enabled. This test should fail if the definition - of any macros change. - """ - client_regtest.expand_macros(find_script_by_name(contract)) diff --git a/tezt/lib_tezos/client.ml b/tezt/lib_tezos/client.ml index 80623d17c188b24a1b917db540a4767e564ff226..67a24e01c88744e9c340747c9001f4964addbf23 100644 --- a/tezt/lib_tezos/client.ml +++ b/tezt/lib_tezos/client.ml @@ -164,7 +164,7 @@ let mode_arg client = let spawn_command ?log_command ?log_status_on_exit ?log_output ?(env = String_map.empty) ?endpoint ?hooks ?(admin = false) ?protocol_hash - ?config_file client command = + ?config_file ?(no_base_dir_warnings = false) client command = let env = (* Set disclaimer to "Y" if unspecified, otherwise use given value *) String_map.update @@ -174,6 +174,9 @@ let spawn_command ?log_command ?log_status_on_exit ?log_output in let protocol_arg = optional_arg "protocol" Fun.id protocol_hash in let config_file_arg = optional_arg "config-file" Fun.id config_file in + let no_base_dir_warnings_arg = + optional_switch "no-base-dir-warnings" no_base_dir_warnings + in Process.spawn ?runner:client.runner ~name:client.name @@ -186,7 +189,7 @@ let spawn_command ?log_command ?log_status_on_exit ?log_output (if admin then client.admin_path else client.path) @@ endpoint_arg ?endpoint client @ protocol_arg @ media_type_arg client.mode @ mode_arg client - @ base_dir_arg client @ config_file_arg @ command + @ base_dir_arg client @ config_file_arg @ no_base_dir_warnings_arg @ command let spawn_command_with_stdin ?log_command ?log_status_on_exit ?log_output ?(env = String_map.empty) ?endpoint ?hooks ?(admin = false) ?protocol_hash @@ -1578,12 +1581,11 @@ let stresstest ?endpoint ?source_aliases ?source_pkhs ?source_accounts ?seed client |> Process.check -let spawn_run_script ?hooks ?protocol_hash ?(no_base_dir_warnings = false) - ?balance ?self_address ?source ?payer ?gas ?(trace_stack = false) ?level - ~prg ~storage ~input client = - spawn_command ?hooks ?protocol_hash client - @@ optional_switch "no-base-dir-warnings" no_base_dir_warnings - @ ["run"; "script"; prg; "on"; "storage"; storage; "and"; "input"; input] +let spawn_run_script ?hooks ?protocol_hash ?no_base_dir_warnings ?balance + ?self_address ?source ?payer ?gas ?(trace_stack = false) ?level ~prg + ~storage ~input client = + spawn_command ?hooks ?protocol_hash ?no_base_dir_warnings client + @@ ["run"; "script"; prg; "on"; "storage"; storage; "and"; "input"; input] @ optional_arg "payer" Fun.id payer @ optional_arg "source" Fun.id source @ optional_arg "balance" Tez.to_string balance @@ -1592,13 +1594,14 @@ let spawn_run_script ?hooks ?protocol_hash ?(no_base_dir_warnings = false) @ optional_arg "level" string_of_int level @ optional_switch "trace-stack" trace_stack -let spawn_run_script_at ?hooks ?balance ?self_address ?source ?payer ?prefix - ~storage ~input client script_name protocol = +let spawn_run_script_at ?hooks ?protocol_hash ?balance ?self_address ?source + ?payer ?prefix ~storage ~input client script_name protocol = let prg = Michelson_script.find ?prefix script_name protocol |> Michelson_script.path in spawn_run_script ?hooks + ?protocol_hash ?balance ?self_address ?source @@ -1680,13 +1683,14 @@ let run_script ?hooks ?protocol_hash ?no_base_dir_warnings ?balance "Cannot extract new storage from client_output: %s" client_output -let run_script_at ?hooks ?balance ?self_address ?source ?payer ?prefix ~storage - ~input client name protocol = +let run_script_at ?hooks ?protocol_hash ?balance ?self_address ?source ?payer + ?prefix ~storage ~input client name protocol = let prg = Michelson_script.find name ?prefix protocol |> Michelson_script.path in run_script ?hooks + ?protocol_hash ?balance ?self_address ?source @@ -1843,15 +1847,14 @@ let normalize_type ?hooks ~typ client = let typecheck_data ~data ~typ ?gas ?(legacy = false) client = spawn_typecheck_data ~data ~typ ?gas ~legacy client |> Process.check -let spawn_typecheck_script ?hooks ?protocol_hash ~script - ?(no_base_dir_warnings = false) ?(details = false) ?(emacs = false) - ?(no_print_source = false) ?gas ?(legacy = false) client = +let spawn_typecheck_script ?hooks ?protocol_hash ~script ?no_base_dir_warnings + ?(details = false) ?(emacs = false) ?(no_print_source = false) ?gas + ?(legacy = false) client = let gas_cmd = Option.map Int.to_string gas |> Option.map (fun g -> ["--gas"; g]) in - spawn_command ?hooks ?protocol_hash client - @@ optional_switch "no-base-dir-warnings" no_base_dir_warnings - @ ["typecheck"; "script"; script] + spawn_command ?hooks ?protocol_hash ?no_base_dir_warnings client + @@ ["typecheck"; "script"; script] @ Option.value ~default:[] gas_cmd @ (if details then ["--details"] else []) @ (if emacs then ["--emacs"] else []) @@ -3940,3 +3943,19 @@ let prepare_multisig_transaction_set_threshold_and_public_keys ~multisig |> Process.check_and_read_stdout in return (String.trim client_output) + +let spawn_expand_macros ?endpoint ?hooks ?protocol_hash ?no_base_dir_warnings + client path = + spawn_command ?endpoint ?hooks ?protocol_hash ?no_base_dir_warnings client + @@ ["expand"; "macros"; "in"; path] + +let expand_macros ?endpoint ?hooks ?protocol_hash ?no_base_dir_warnings client + path = + spawn_expand_macros + ?endpoint + ?hooks + ?protocol_hash + ?no_base_dir_warnings + client + path + |> Process.check_and_read_stdout diff --git a/tezt/lib_tezos/client.mli b/tezt/lib_tezos/client.mli index 9e0c51318e8fe32ff47278f187c86bff849d9189..5f829a727b6f62ba962afe531becccfbf7b71e2f 100644 --- a/tezt/lib_tezos/client.mli +++ b/tezt/lib_tezos/client.mli @@ -1283,6 +1283,7 @@ val spawn_run_script : Fails if the new storage cannot be extracted from the output. *) val run_script_at : ?hooks:Process.hooks -> + ?protocol_hash:string -> ?balance:Tez.t -> ?self_address:string -> ?source:string -> @@ -1298,6 +1299,7 @@ val run_script_at : (** Same as [run_script_at] but do not wait for the process to exit. *) val spawn_run_script_at : ?hooks:Process.hooks -> + ?protocol_hash:string -> ?balance:Tez.t -> ?self_address:string -> ?source:string -> @@ -2370,6 +2372,7 @@ val spawn_command : ?admin:bool -> ?protocol_hash:string -> ?config_file:string -> + ?no_base_dir_warnings:bool -> t -> string list -> Process.t @@ -2836,3 +2839,23 @@ val spawn_prepare_multisig_transaction_set_threshold_and_public_keys : ?bytes_only:bool -> t -> Process.t + +(** Run [tezos-client expand macros in