Set up a test suite
- use pytest as the test suite and measure test coverage with coverage.py - add package for the test suite under tests/ - add nox session "test" to run the test suite for all supported Python versions - use flake8 to lint pytest for consistent style
This commit is contained in:
parent
ecf1420742
commit
b8ceee39c5
5 changed files with 338 additions and 2 deletions
15
README.md
15
README.md
|
@ -69,6 +69,9 @@ To execute all default tasks, simply invoke:
|
||||||
|
|
||||||
`nox`
|
`nox`
|
||||||
|
|
||||||
|
This includes running the test suite for the project's main Python version
|
||||||
|
(i.e., [3.12](https://devguide.python.org/versions/)).
|
||||||
|
|
||||||
|
|
||||||
#### Code Formatting & Linting
|
#### Code Formatting & Linting
|
||||||
|
|
||||||
|
@ -93,6 +96,18 @@ The second task lints all source code files with
|
||||||
`flake8` is configured with a couple of plug-ins.
|
`flake8` is configured with a couple of plug-ins.
|
||||||
|
|
||||||
|
|
||||||
|
#### Test Suite
|
||||||
|
|
||||||
|
We use [pytest](https://docs.pytest.org/en/stable/)
|
||||||
|
to obtain confidence in the correctness of `lalib`.
|
||||||
|
To run the tests
|
||||||
|
for *all* supported Python versions
|
||||||
|
in isolated (and perfectly reproducable) environments,
|
||||||
|
invoke:
|
||||||
|
|
||||||
|
`nox -s test`
|
||||||
|
|
||||||
|
|
||||||
### Branching Strategy
|
### Branching Strategy
|
||||||
|
|
||||||
The branches in this repository follow the
|
The branches in this repository follow the
|
||||||
|
|
55
noxfile.py
55
noxfile.py
|
@ -66,7 +66,8 @@ def load_supported_python_versions(*, reverse: bool = False) -> list[str]:
|
||||||
SUPPORTED_PYTHONS = load_supported_python_versions(reverse=True)
|
SUPPORTED_PYTHONS = load_supported_python_versions(reverse=True)
|
||||||
MAIN_PYTHON = "3.12"
|
MAIN_PYTHON = "3.12"
|
||||||
|
|
||||||
SRC_LOCATIONS = ("./noxfile.py", "src/")
|
TESTS_LOCATION = "tests/"
|
||||||
|
SRC_LOCATIONS = ("./noxfile.py", "src/", TESTS_LOCATION)
|
||||||
|
|
||||||
|
|
||||||
nox.options.envdir = ".cache/nox"
|
nox.options.envdir = ".cache/nox"
|
||||||
|
@ -75,6 +76,7 @@ nox.options.reuse_venv = "no"
|
||||||
nox.options.sessions = ( # run by default when invoking `nox` on the CLI
|
nox.options.sessions = ( # run by default when invoking `nox` on the CLI
|
||||||
"format",
|
"format",
|
||||||
"lint",
|
"lint",
|
||||||
|
f"test-{MAIN_PYTHON}",
|
||||||
)
|
)
|
||||||
nox.options.stop_on_first_error = True
|
nox.options.stop_on_first_error = True
|
||||||
|
|
||||||
|
@ -123,6 +125,7 @@ def lint(session: nox.Session) -> None:
|
||||||
"flake8-quotes",
|
"flake8-quotes",
|
||||||
"flake8-string-format",
|
"flake8-string-format",
|
||||||
"flake8-pyproject",
|
"flake8-pyproject",
|
||||||
|
"flake8-pytest-style",
|
||||||
"mypy",
|
"mypy",
|
||||||
"pep8-naming", # flake8 plug-in
|
"pep8-naming", # flake8 plug-in
|
||||||
"pydoclint[flake8]",
|
"pydoclint[flake8]",
|
||||||
|
@ -141,6 +144,28 @@ def lint(session: nox.Session) -> None:
|
||||||
session.run("ruff", "check", *locations)
|
session.run("ruff", "check", *locations)
|
||||||
|
|
||||||
|
|
||||||
|
@nox_session(python=SUPPORTED_PYTHONS)
|
||||||
|
def test(session: nox.Session) -> None:
|
||||||
|
"""Test code with `pytest`."""
|
||||||
|
start(session)
|
||||||
|
|
||||||
|
install_unpinned(session, "-e", ".") # "-e" makes session reuseable
|
||||||
|
install_pinned(
|
||||||
|
session,
|
||||||
|
"pytest",
|
||||||
|
"pytest-cov",
|
||||||
|
)
|
||||||
|
|
||||||
|
args = session.posargs or (
|
||||||
|
"--cov",
|
||||||
|
"--no-cov-on-fail",
|
||||||
|
TESTS_LOCATION,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Code 5 is temporary as long as there are no tests
|
||||||
|
session.run("pytest", *args, success_codes=[0, 5])
|
||||||
|
|
||||||
|
|
||||||
def start(session: nox.Session) -> None:
|
def start(session: nox.Session) -> None:
|
||||||
"""Show generic info about a session."""
|
"""Show generic info about a session."""
|
||||||
if session.posargs:
|
if session.posargs:
|
||||||
|
@ -210,6 +235,34 @@ def install_pinned(
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def install_unpinned(
|
||||||
|
session: nox.Session,
|
||||||
|
*packages_or_pip_args: str,
|
||||||
|
**kwargs: Any,
|
||||||
|
) -> None:
|
||||||
|
"""Install the latest PyPI versions of packages."""
|
||||||
|
# Same logic to skip package installation as in core nox
|
||||||
|
# See: https://github.com/wntrblm/nox/blob/2024.04.15/nox/sessions.py#L775
|
||||||
|
venv = session._runner.venv # noqa: SLF001
|
||||||
|
if session._runner.global_config.no_install and venv._reused: # noqa: SLF001
|
||||||
|
return
|
||||||
|
|
||||||
|
if kwargs.get("silent") is None:
|
||||||
|
kwargs["silent"] = True
|
||||||
|
|
||||||
|
# Cannot use `session.install(...)` here because
|
||||||
|
# with "nox-poetry" installed this leads to an
|
||||||
|
# installation respecting the "poetry.lock" file
|
||||||
|
session.run(
|
||||||
|
"python",
|
||||||
|
"-m",
|
||||||
|
"pip",
|
||||||
|
"install",
|
||||||
|
*packages_or_pip_args,
|
||||||
|
**kwargs,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
if MAIN_PYTHON not in SUPPORTED_PYTHONS:
|
if MAIN_PYTHON not in SUPPORTED_PYTHONS:
|
||||||
msg = f"MAIN_PYTHON version, v{MAIN_PYTHON}, is not in SUPPORTED_PYTHONS"
|
msg = f"MAIN_PYTHON version, v{MAIN_PYTHON}, is not in SUPPORTED_PYTHONS"
|
||||||
raise RuntimeError(msg)
|
raise RuntimeError(msg)
|
||||||
|
|
194
poetry.lock
generated
194
poetry.lock
generated
|
@ -127,6 +127,93 @@ files = [
|
||||||
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "coverage"
|
||||||
|
version = "7.6.1"
|
||||||
|
description = "Code coverage measurement for Python"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"},
|
||||||
|
{file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"},
|
||||||
|
{file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"},
|
||||||
|
{file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"},
|
||||||
|
{file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"},
|
||||||
|
{file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"},
|
||||||
|
{file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"},
|
||||||
|
{file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"},
|
||||||
|
{file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"},
|
||||||
|
{file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"},
|
||||||
|
{file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"},
|
||||||
|
{file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"},
|
||||||
|
{file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"},
|
||||||
|
{file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"},
|
||||||
|
{file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"},
|
||||||
|
{file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"},
|
||||||
|
{file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"},
|
||||||
|
{file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"},
|
||||||
|
{file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"},
|
||||||
|
{file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"},
|
||||||
|
{file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"},
|
||||||
|
{file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"},
|
||||||
|
{file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"},
|
||||||
|
{file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"},
|
||||||
|
{file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"},
|
||||||
|
{file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"},
|
||||||
|
{file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"},
|
||||||
|
{file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"},
|
||||||
|
{file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"},
|
||||||
|
{file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"},
|
||||||
|
{file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"},
|
||||||
|
{file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"},
|
||||||
|
{file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"},
|
||||||
|
{file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"},
|
||||||
|
{file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"},
|
||||||
|
{file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"},
|
||||||
|
{file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"},
|
||||||
|
{file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"},
|
||||||
|
{file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"},
|
||||||
|
{file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"},
|
||||||
|
{file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"},
|
||||||
|
{file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"},
|
||||||
|
{file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"},
|
||||||
|
{file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"},
|
||||||
|
{file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"},
|
||||||
|
{file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"},
|
||||||
|
{file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"},
|
||||||
|
{file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"},
|
||||||
|
{file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"},
|
||||||
|
{file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"},
|
||||||
|
{file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"},
|
||||||
|
{file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"},
|
||||||
|
{file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""}
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
toml = ["tomli"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "docstring-parser-fork"
|
name = "docstring-parser-fork"
|
||||||
version = "0.0.9"
|
version = "0.0.9"
|
||||||
|
@ -149,6 +236,20 @@ files = [
|
||||||
{file = "eradicate-2.3.0.tar.gz", hash = "sha256:06df115be3b87d0fc1c483db22a2ebb12bcf40585722810d809cc770f5031c37"},
|
{file = "eradicate-2.3.0.tar.gz", hash = "sha256:06df115be3b87d0fc1c483db22a2ebb12bcf40585722810d809cc770f5031c37"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "exceptiongroup"
|
||||||
|
version = "1.2.2"
|
||||||
|
description = "Backport of PEP 654 (exception groups)"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.7"
|
||||||
|
files = [
|
||||||
|
{file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"},
|
||||||
|
{file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
test = ["pytest (>=6)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "flake8"
|
name = "flake8"
|
||||||
version = "7.1.1"
|
version = "7.1.1"
|
||||||
|
@ -338,6 +439,17 @@ isort = ">=5.0.0,<6"
|
||||||
[package.extras]
|
[package.extras]
|
||||||
test = ["pytest"]
|
test = ["pytest"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "flake8-plugin-utils"
|
||||||
|
version = "1.3.3"
|
||||||
|
description = "The package provides base classes and utils for flake8 plugin writing"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.6,<4.0"
|
||||||
|
files = [
|
||||||
|
{file = "flake8-plugin-utils-1.3.3.tar.gz", hash = "sha256:39f6f338d038b301c6fd344b06f2e81e382b68fa03c0560dff0d9b1791a11a2c"},
|
||||||
|
{file = "flake8_plugin_utils-1.3.3-py3-none-any.whl", hash = "sha256:e4848c57d9d50f19100c2d75fa794b72df068666a9041b4b0409be923356a3ed"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "flake8-pyproject"
|
name = "flake8-pyproject"
|
||||||
version = "1.2.3"
|
version = "1.2.3"
|
||||||
|
@ -355,6 +467,20 @@ TOMLi = {version = "*", markers = "python_version < \"3.11\""}
|
||||||
[package.extras]
|
[package.extras]
|
||||||
dev = ["pyTest", "pyTest-cov"]
|
dev = ["pyTest", "pyTest-cov"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "flake8-pytest-style"
|
||||||
|
version = "2.0.0"
|
||||||
|
description = "A flake8 plugin checking common style issues or inconsistencies with pytest-based tests."
|
||||||
|
optional = false
|
||||||
|
python-versions = "<4.0.0,>=3.8.1"
|
||||||
|
files = [
|
||||||
|
{file = "flake8_pytest_style-2.0.0-py3-none-any.whl", hash = "sha256:abcb9f56f277954014b749e5a0937fae215be01a21852e9d05e7600c3de6aae5"},
|
||||||
|
{file = "flake8_pytest_style-2.0.0.tar.gz", hash = "sha256:919c328cacd4bc4f873ea61ab4db0d8f2c32e0db09a3c73ab46b1de497556464"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
flake8-plugin-utils = ">=1.3.2,<2.0.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "flake8-quotes"
|
name = "flake8-quotes"
|
||||||
version = "3.4.0"
|
version = "3.4.0"
|
||||||
|
@ -383,6 +509,17 @@ files = [
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
flake8 = "*"
|
flake8 = "*"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "iniconfig"
|
||||||
|
version = "2.0.0"
|
||||||
|
description = "brain-dead simple config-ini parsing"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.7"
|
||||||
|
files = [
|
||||||
|
{file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"},
|
||||||
|
{file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "isort"
|
name = "isort"
|
||||||
version = "5.13.2"
|
version = "5.13.2"
|
||||||
|
@ -564,6 +701,21 @@ docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-a
|
||||||
test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"]
|
test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"]
|
||||||
type = ["mypy (>=1.11.2)"]
|
type = ["mypy (>=1.11.2)"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pluggy"
|
||||||
|
version = "1.5.0"
|
||||||
|
description = "plugin and hook calling mechanisms for python"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"},
|
||||||
|
{file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
dev = ["pre-commit", "tox"]
|
||||||
|
testing = ["pytest", "pytest-benchmark"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pycodestyle"
|
name = "pycodestyle"
|
||||||
version = "2.12.1"
|
version = "2.12.1"
|
||||||
|
@ -637,6 +789,46 @@ files = [
|
||||||
[package.extras]
|
[package.extras]
|
||||||
windows-terminal = ["colorama (>=0.4.6)"]
|
windows-terminal = ["colorama (>=0.4.6)"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pytest"
|
||||||
|
version = "8.3.2"
|
||||||
|
description = "pytest: simple powerful testing with Python"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"},
|
||||||
|
{file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
colorama = {version = "*", markers = "sys_platform == \"win32\""}
|
||||||
|
exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""}
|
||||||
|
iniconfig = "*"
|
||||||
|
packaging = "*"
|
||||||
|
pluggy = ">=1.5,<2"
|
||||||
|
tomli = {version = ">=1", markers = "python_version < \"3.11\""}
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pytest-cov"
|
||||||
|
version = "5.0.0"
|
||||||
|
description = "Pytest plugin for measuring coverage."
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"},
|
||||||
|
{file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
coverage = {version = ">=5.2.1", extras = ["toml"]}
|
||||||
|
pytest = ">=4.6"
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyyaml"
|
name = "pyyaml"
|
||||||
version = "6.0.2"
|
version = "6.0.2"
|
||||||
|
@ -814,4 +1006,4 @@ files = [
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = "^3.9"
|
python-versions = "^3.9"
|
||||||
content-hash = "ba133486945806a456cac2a2e5ba54a79b772ef1257b0a5f3b39545063c6e229"
|
content-hash = "d57341979796164059f8d01fd2cc367cc21f1000a91b7d96fb02c6319a9b012b"
|
||||||
|
|
|
@ -53,11 +53,15 @@ flake8-isort = "^6.1"
|
||||||
flake8-quotes = "^3.4"
|
flake8-quotes = "^3.4"
|
||||||
flake8-string-format = "^0.3"
|
flake8-string-format = "^0.3"
|
||||||
flake8-pyproject = "^1.2"
|
flake8-pyproject = "^1.2"
|
||||||
|
flake8-pytest-style = "^2.0"
|
||||||
mypy = "^1.11"
|
mypy = "^1.11"
|
||||||
pep8-naming = "^0.14" # flake8 plug-in
|
pep8-naming = "^0.14" # flake8 plug-in
|
||||||
pydoclint = { extras = ["flake8"], version = "^0.5" }
|
pydoclint = { extras = ["flake8"], version = "^0.5" }
|
||||||
ruff = "^0.6"
|
ruff = "^0.6"
|
||||||
|
|
||||||
|
# Test suite
|
||||||
|
pytest = "^8.3"
|
||||||
|
pytest-cov = "^5.0"
|
||||||
|
|
||||||
[tool.poetry.urls]
|
[tool.poetry.urls]
|
||||||
|
|
||||||
|
@ -86,6 +90,34 @@ target-version = ["py312", "py311", "py310", "py39"]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[tool.coverage]
|
||||||
|
# Source: https://coverage.readthedocs.io/en/latest/config.html
|
||||||
|
|
||||||
|
|
||||||
|
[tool.coverage.paths]
|
||||||
|
|
||||||
|
source = ["src/", "*/site-packages/"]
|
||||||
|
|
||||||
|
|
||||||
|
[tool.coverage.report]
|
||||||
|
|
||||||
|
show_missing = true
|
||||||
|
|
||||||
|
skip_covered = true
|
||||||
|
skip_empty = true
|
||||||
|
|
||||||
|
|
||||||
|
[tool.coverage.run]
|
||||||
|
|
||||||
|
data_file = ".cache/coverage/data"
|
||||||
|
|
||||||
|
branch = true
|
||||||
|
parallel = true
|
||||||
|
|
||||||
|
source = ["lalib"]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[tool.flake8]
|
[tool.flake8]
|
||||||
|
|
||||||
select = [
|
select = [
|
||||||
|
@ -103,6 +135,7 @@ select = [
|
||||||
"F", # pyflakes => basic errors (Source: https://flake8.pycqa.org/en/latest/user/error-codes.html)
|
"F", # pyflakes => basic errors (Source: https://flake8.pycqa.org/en/latest/user/error-codes.html)
|
||||||
"I", # flake8-isort => isort would make changes
|
"I", # flake8-isort => isort would make changes
|
||||||
"N", # pep8-naming
|
"N", # pep8-naming
|
||||||
|
"PT", # flake8-pytest-style => enforce a consistent style with pytest
|
||||||
"Q", # flake8-quotes => use double quotes everywhere (complying with black)
|
"Q", # flake8-quotes => use double quotes everywhere (complying with black)
|
||||||
"S", # flake8-bandit => common security issues
|
"S", # flake8-bandit => common security issues
|
||||||
"T10", # flake8-debugger => no debugger usage
|
"T10", # flake8-debugger => no debugger usage
|
||||||
|
@ -154,6 +187,22 @@ docstring-convention = "google"
|
||||||
# Source: https://github.com/wemake-services/flake8-eradicate#options
|
# Source: https://github.com/wemake-services/flake8-eradicate#options
|
||||||
eradicate-aggressive = true
|
eradicate-aggressive = true
|
||||||
|
|
||||||
|
# Plug-in: flake8-pytest-style
|
||||||
|
#
|
||||||
|
# Aligned with [tool.ruff.lint.flake8-pytest-style] below
|
||||||
|
#
|
||||||
|
# Prefer `@pytest.fixture` over `@pytest.fixture()`
|
||||||
|
pytest-fixture-no-parentheses = true
|
||||||
|
#
|
||||||
|
# Prefer `@pytest.mark.foobar` over `@pytest.mark.foobar()`
|
||||||
|
pytest-mark-no-parentheses = true
|
||||||
|
#
|
||||||
|
# Prefer `@pytest.mark.parametrize(['param1', 'param2'], [(1, 2), (3, 4)])`
|
||||||
|
# over `@pytest.mark.parametrize(('param1', 'param2'), ([1, 2], [3, 4]))`
|
||||||
|
pytest-parametrize-names-type = "list"
|
||||||
|
pytest-parametrize-values-row-type = "tuple"
|
||||||
|
pytest-parametrize-values-type = "list"
|
||||||
|
|
||||||
# Plug-in: flake8-quotes
|
# Plug-in: flake8-quotes
|
||||||
# Source: https://github.com/zheller/flake8-quotes#configuration
|
# Source: https://github.com/zheller/flake8-quotes#configuration
|
||||||
avoid-escape = true
|
avoid-escape = true
|
||||||
|
@ -209,6 +258,16 @@ ignore_missing_imports = true
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[tool.pytest.ini_options]
|
||||||
|
# Source: https://docs.pytest.org/en/stable/
|
||||||
|
|
||||||
|
cache_dir = ".cache/pytest"
|
||||||
|
|
||||||
|
addopts = "--strict-markers"
|
||||||
|
console_output_style = "count"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[tool.ruff]
|
[tool.ruff]
|
||||||
# Source: https://docs.astral.sh/ruff/
|
# Source: https://docs.astral.sh/ruff/
|
||||||
|
|
||||||
|
@ -250,6 +309,7 @@ select = [
|
||||||
"F", # pyflakes => basic errors
|
"F", # pyflakes => basic errors
|
||||||
"I", # flake8-isort => isort would make changes
|
"I", # flake8-isort => isort would make changes
|
||||||
"N", # pep8-naming
|
"N", # pep8-naming
|
||||||
|
"PT", # flake8-pytest-style => enforce a consistent style with pytest
|
||||||
"Q", # flake8-quotes => use double quotes everywhere
|
"Q", # flake8-quotes => use double quotes everywhere
|
||||||
"S", # flake8-bandit => common security issues
|
"S", # flake8-bandit => common security issues
|
||||||
"T10", # flake8-debugger => no debugger usage
|
"T10", # flake8-debugger => no debugger usage
|
||||||
|
@ -275,6 +335,21 @@ extend-ignore = [ # never check the following codes
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
[tool.ruff.lint.flake8-pytest-style] # aligned with [tool.flake8] above
|
||||||
|
|
||||||
|
# Prefer `@pytest.fixture` over `@pytest.fixture()`
|
||||||
|
fixture-parentheses = false
|
||||||
|
|
||||||
|
# Prefer `@pytest.mark.foobar` over `@pytest.mark.foobar()`
|
||||||
|
mark-parentheses = false
|
||||||
|
|
||||||
|
# Prefer `@pytest.mark.parametrize(['param1', 'param2'], [(1, 2), (3, 4)])`
|
||||||
|
# over `@pytest.mark.parametrize(('param1', 'param2'), ([1, 2], [3, 4]))`
|
||||||
|
parametrize-names-type = "list"
|
||||||
|
parametrize-values-row-type = "tuple"
|
||||||
|
parametrize-values-type = "list"
|
||||||
|
|
||||||
|
|
||||||
[tool.ruff.lint.isort] # aligned with [tool.isort] above
|
[tool.ruff.lint.isort] # aligned with [tool.isort] above
|
||||||
|
|
||||||
case-sensitive = true
|
case-sensitive = true
|
||||||
|
|
1
tests/__init__.py
Normal file
1
tests/__init__.py
Normal file
|
@ -0,0 +1 @@
|
||||||
|
"""Tests for the `lalib` library."""
|
Loading…
Reference in a new issue