diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 84f60fc4..152be3a2 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -36,31 +36,31 @@ jobs: - name: Run tests run: | - poetry run coverage run --source=opshin -m pytest opshin/tests - poetry run coverage run -a --source=opshin -m opshin eval spending examples/smart_contracts/assert_sum.py "{\"int\": 4}" "{\"int\": 38}" d8799fd8799f9fd8799fd8799fd8799f582055d353acacaab6460b37ed0f0e3a1a0aabf056df4a7fa1e265d21149ccacc527ff01ffd8799fd8799fd87a9f581cdbe769758f26efb21f008dc097bb194cffc622acc37fcefc5372eee3ffd87a80ffa140a1401a00989680d87a9f5820dfab81872ce2bbe6ee5af9bbfee4047f91c1f57db5e30da727d5fef1e7f02f4dffd87a80ffffff809fd8799fd8799fd8799f581cdc315c289fee4484eda07038393f21dc4e572aff292d7926018725c2ffd87a80ffa140a14000d87980d87a80ffffa140a14000a140a1400080a0d8799fd8799fd87980d87a80ffd8799fd87b80d87a80ffff80a1d87a9fd8799fd8799f582055d353acacaab6460b37ed0f0e3a1a0aabf056df4a7fa1e265d21149ccacc527ff01ffffd87980a15820dfab81872ce2bbe6ee5af9bbfee4047f91c1f57db5e30da727d5fef1e7f02f4dd8799f581cdc315c289fee4484eda07038393f21dc4e572aff292d7926018725c2ffd8799f5820746957f0eb57f2b11119684e611a98f373afea93473fefbb7632d579af2f6259ffffd87a9fd8799fd8799f582055d353acacaab6460b37ed0f0e3a1a0aabf056df4a7fa1e265d21149ccacc527ff01ffffff - poetry run coverage run -a --source=opshin -m opshin compile spending examples/smart_contracts/assert_sum.py > assert_sum.uplc - poetry run coverage run -a --source=opshin -m opshin eval_uplc spending examples/smart_contracts/assert_sum.py "{\"int\": 4}" "{\"int\": 38}" d8799fd8799f9fd8799fd8799fd8799f582055d353acacaab6460b37ed0f0e3a1a0aabf056df4a7fa1e265d21149ccacc527ff01ffd8799fd8799fd87a9f581cdbe769758f26efb21f008dc097bb194cffc622acc37fcefc5372eee3ffd87a80ffa140a1401a00989680d87a9f5820dfab81872ce2bbe6ee5af9bbfee4047f91c1f57db5e30da727d5fef1e7f02f4dffd87a80ffffff809fd8799fd8799fd8799f581cdc315c289fee4484eda07038393f21dc4e572aff292d7926018725c2ffd87a80ffa140a14000d87980d87a80ffffa140a14000a140a1400080a0d8799fd8799fd87980d87a80ffd8799fd87b80d87a80ffff80a1d87a9fd8799fd8799f582055d353acacaab6460b37ed0f0e3a1a0aabf056df4a7fa1e265d21149ccacc527ff01ffffd87980a15820dfab81872ce2bbe6ee5af9bbfee4047f91c1f57db5e30da727d5fef1e7f02f4dd8799f581cdc315c289fee4484eda07038393f21dc4e572aff292d7926018725c2ffd8799f5820746957f0eb57f2b11119684e611a98f373afea93473fefbb7632d579af2f6259ffffd87a9fd8799fd8799f582055d353acacaab6460b37ed0f0e3a1a0aabf056df4a7fa1e265d21149ccacc527ff01ffffff - poetry run coverage run -a --source=opshin -m opshin compile_pluto spending examples/smart_contracts/assert_sum.py - poetry run coverage run -a --source=opshin -m opshin build spending examples/smart_contracts/assert_sum.py + poetry run coverage run -m pytest opshin/tests + poetry run coverage run -a -m opshin eval spending examples/smart_contracts/assert_sum.py "{\"int\": 4}" "{\"int\": 38}" d8799fd8799f9fd8799fd8799fd8799f582055d353acacaab6460b37ed0f0e3a1a0aabf056df4a7fa1e265d21149ccacc527ff01ffd8799fd8799fd87a9f581cdbe769758f26efb21f008dc097bb194cffc622acc37fcefc5372eee3ffd87a80ffa140a1401a00989680d87a9f5820dfab81872ce2bbe6ee5af9bbfee4047f91c1f57db5e30da727d5fef1e7f02f4dffd87a80ffffff809fd8799fd8799fd8799f581cdc315c289fee4484eda07038393f21dc4e572aff292d7926018725c2ffd87a80ffa140a14000d87980d87a80ffffa140a14000a140a1400080a0d8799fd8799fd87980d87a80ffd8799fd87b80d87a80ffff80a1d87a9fd8799fd8799f582055d353acacaab6460b37ed0f0e3a1a0aabf056df4a7fa1e265d21149ccacc527ff01ffffd87980a15820dfab81872ce2bbe6ee5af9bbfee4047f91c1f57db5e30da727d5fef1e7f02f4dd8799f581cdc315c289fee4484eda07038393f21dc4e572aff292d7926018725c2ffd8799f5820746957f0eb57f2b11119684e611a98f373afea93473fefbb7632d579af2f6259ffffd87a9fd8799fd8799f582055d353acacaab6460b37ed0f0e3a1a0aabf056df4a7fa1e265d21149ccacc527ff01ffffff + poetry run coverage run -a -m opshin compile spending examples/smart_contracts/assert_sum.py > assert_sum.uplc + poetry run coverage run -a -m opshin eval_uplc spending examples/smart_contracts/assert_sum.py "{\"int\": 4}" "{\"int\": 38}" d8799fd8799f9fd8799fd8799fd8799f582055d353acacaab6460b37ed0f0e3a1a0aabf056df4a7fa1e265d21149ccacc527ff01ffd8799fd8799fd87a9f581cdbe769758f26efb21f008dc097bb194cffc622acc37fcefc5372eee3ffd87a80ffa140a1401a00989680d87a9f5820dfab81872ce2bbe6ee5af9bbfee4047f91c1f57db5e30da727d5fef1e7f02f4dffd87a80ffffff809fd8799fd8799fd8799f581cdc315c289fee4484eda07038393f21dc4e572aff292d7926018725c2ffd87a80ffa140a14000d87980d87a80ffffa140a14000a140a1400080a0d8799fd8799fd87980d87a80ffd8799fd87b80d87a80ffff80a1d87a9fd8799fd8799f582055d353acacaab6460b37ed0f0e3a1a0aabf056df4a7fa1e265d21149ccacc527ff01ffffd87980a15820dfab81872ce2bbe6ee5af9bbfee4047f91c1f57db5e30da727d5fef1e7f02f4dd8799f581cdc315c289fee4484eda07038393f21dc4e572aff292d7926018725c2ffd8799f5820746957f0eb57f2b11119684e611a98f373afea93473fefbb7632d579af2f6259ffffd87a9fd8799fd8799f582055d353acacaab6460b37ed0f0e3a1a0aabf056df4a7fa1e265d21149ccacc527ff01ffffff + poetry run coverage run -a -m opshin compile_pluto spending examples/smart_contracts/assert_sum.py + poetry run coverage run -a -m opshin build spending examples/smart_contracts/assert_sum.py for i in $(find examples -type f -name "*.py" -not \( -name "broken*" -o -name "extract*" \)); do echo "$i" - poetry run coverage run -a --source=opshin -m opshin compile any "$i" > /dev/null || exit + poetry run coverage run -a -m opshin compile any "$i" > /dev/null || exit done - poetry run coverage run -a --source=opshin -m opshin build spending examples/smart_contracts/parameterized.py '{"int": 42}' - poetry run coverage run -a --source=opshin -m opshin build spending examples/smart_contracts/dual_use.py -fforce-three-params - poetry run coverage run -a --source=opshin -m opshin build spending examples/smart_contracts/dual_use.py -fforce-three-params -O0 - poetry run coverage run -a --source=opshin -m opshin build spending examples/smart_contracts/dual_use.py -fforce-three-params -O1 - poetry run coverage run -a --source=opshin -m opshin build spending examples/smart_contracts/dual_use.py -fforce-three-params -O2 - poetry run coverage run -a --source=opshin -m opshin build spending examples/smart_contracts/dual_use.py -fforce-three-params -O3 - poetry run coverage run -a --source=opshin -m opshin build spending examples/smart_contracts/wrapped_token.py '{"bytes": "ae810731b5d21c0d182d89c60a1eff7095dffd1c0dce8707a8611099"}' '{"bytes": "4d494c4b"}' '{"int": 1000000}' -fforce-three-params - test ! -n "$(poetry run coverage run -a --source=opshin -m opshin lint any examples/smart_contracts/always_true.py)" - test -n "$(poetry run coverage run -a --source=opshin -m opshin lint any examples/smart_contracts/wrapped_token.py)" - test -n "$(poetry run coverage run -a --source=opshin -m opshin lint any examples/broken.py)" - test -n "$(poetry run coverage run -a --source=opshin -m opshin lint any examples/broken.py --output-format-json)" - poetry run coverage run -a --source=opshin -m opshin compile lib opshin/prelude.py -fno-remove-dead-code + poetry run coverage run -a -m opshin build spending examples/smart_contracts/parameterized.py '{"int": 42}' + poetry run coverage run -a -m opshin build spending examples/smart_contracts/dual_use.py -fforce-three-params + poetry run coverage run -a -m opshin build spending examples/smart_contracts/dual_use.py -fforce-three-params -O0 + poetry run coverage run -a -m opshin build spending examples/smart_contracts/dual_use.py -fforce-three-params -O1 + poetry run coverage run -a -m opshin build spending examples/smart_contracts/dual_use.py -fforce-three-params -O2 + poetry run coverage run -a -m opshin build spending examples/smart_contracts/dual_use.py -fforce-three-params -O3 + poetry run coverage run -a -m opshin build spending examples/smart_contracts/wrapped_token.py '{"bytes": "ae810731b5d21c0d182d89c60a1eff7095dffd1c0dce8707a8611099"}' '{"bytes": "4d494c4b"}' '{"int": 1000000}' -fforce-three-params + test ! -n "$(poetry run coverage run -a -m opshin lint any examples/smart_contracts/always_true.py)" + test -n "$(poetry run coverage run -a -m opshin lint any examples/smart_contracts/wrapped_token.py)" + test -n "$(poetry run coverage run -a -m opshin lint any examples/broken.py)" + test -n "$(poetry run coverage run -a -m opshin lint any examples/broken.py --output-format-json)" + poetry run coverage run -a -m opshin compile lib opshin/prelude.py -fno-remove-dead-code for i in $(find opshin/std opshin/ledger -type f -name "*.py" ! -name "*integrity.py"); do echo "$i" - poetry run coverage run -a --source=opshin -m opshin compile lib "$i" -fno-remove-dead-code > /dev/null || exit + poetry run coverage run -a -m opshin compile lib "$i" -fno-remove-dead-code > /dev/null || exit done - name: Upload coverage data to coveralls.io diff --git a/pyproject.toml b/pyproject.toml index 38b1b2f5..fcfb6ad5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,3 +48,33 @@ opshin = "opshin.__main__:main" [build-system] requires = ["setuptools", "poetry-core"] build-backend = "poetry.core.masonry.api" + +[tool.coverage.run] +branch = true +source = ["opshin"] + +[tool.coverage.report] +# We dont care whether test cases got executed +omit = [ + "*opshin/tests/*", +] +# Regexes for lines to exclude from consideration +exclude_also = [ + # Don't complain if tests don't hit defensive assertion code: + "raise NotImplementedError", + + # Don't complain if non-runnable code isn't run: + "if __name__ == .__main__.:", + + # Don't complain about abstract methods, they aren't run: + "@(abc\\.)?abstractmethod", + + # Don't complain about missing debug-only code: + "def __repr__", + ] + +ignore_errors = true + +[tool.coverage.html] +directory = "coverage_html_report" +