[tox] envlist = {py38,py39,py310,py311,py312,pypy39,pypy310}-{with,without}_coverage [testenv] basepython = py38: {env:TOXPYTHON:python3.8} py39: {env:TOXPYTHON:python3.9} py310: {env:TOXPYTHON:python3.10} py311: {env:TOXPYTHON:python3.11} py312: {env:TOXPYTHON:python3.12} pypy39: {env:TOXPYTHON:pypy3.9} pypy310: {env:TOXPYTHON:pypy3.10} deps = ; use specific versions of testing tools with which this is known to work with_coverage: coverage>=5,<6 {py38,py39,py310,py311,py312,pypy39,pypy310}: biopython setenv = PYTHONUNBUFFERED=yes allowlist_externals = mv commands = ; Notes: ; * run tests both with and without the C extensions (including Cython) ; * if running with coverage, merge the coverage run results from both runs ; * for Python 2.6 use the unit2 script since -m unittest2 doesn't work ; (but when running with coverage, coverage run -m unittest2 works) {py38,py39,py310,py311,py312,pypy39,pypy310}-without_coverage: {envpython} -m unittest discover -v tests {py38,py39,py310,py311,py312,pypy39,pypy310}-with_coverage: {envbindir}/coverage run --source=fuzzysearch -m unittest discover tests with_coverage: mv .coverage .coverage.with_extensions {envpython} -c 'import os; [os.remove(os.path.join(d, fn)) for (d, dns, fns) in os.walk(os.path.join(r"{envsitepackagesdir}", "fuzzysearch")) for fn in fns if fn.endswith((".so", ".pyd"))]' {py38,py39,py310,py311,py312,pypy39,pypy310}-without_coverage: {envpython} -m unittest discover -v tests {py38,py39,py310,py311,py312,pypy39,pypy310}-with_coverage: {envbindir}/coverage run --source=fuzzysearch -m unittest discover tests with_coverage: mv .coverage .coverage.no_extensions with_coverage: {envbindir}/coverage combine