[tox]
-envlist = py{36,37,38,39},fuzz
+isolated_build = true
+envlist = {,ci-}py{38,39,310,311,py3},fuzz,run_self
[testenv]
+setenv =
+ PYTHONPATH = {toxinidir}/src
+ PYTHONWARNDEFAULTENCODING = 1
+skip_install = True
+# We use `recreate=True` because otherwise, on the second run of `tox -e py`,
+# the `no_jupyter` tests would run with the jupyter extra dependencies installed.
+# See https://github.com/psf/black/issues/2367.
+recreate = True
+deps =
+ -r{toxinidir}/test_requirements.txt
+; parallelization is disabled on CI because pytest-dev/pytest-xdist#620 occurs too frequently
+; local runs can stay parallelized since they aren't rolling the dice so many times as like on CI
+commands =
+ pip install -e .[d]
+ coverage erase
+ pytest tests --run-optional no_jupyter \
+ !ci: --numprocesses auto \
+ --cov {posargs}
+ pip install -e .[jupyter]
+ pytest tests --run-optional jupyter \
+ -m jupyter \
+ !ci: --numprocesses auto \
+ --cov --cov-append {posargs}
+ coverage report
+
+[testenv:{,ci-}pypy3]
setenv = PYTHONPATH = {toxinidir}/src
skip_install = True
+recreate = True
+deps =
+ -r{toxinidir}/test_requirements.txt
+; a separate worker is required in ci due to https://foss.heptapod.net/pypy/pypy/-/issues/3317
+; this seems to cause tox to wait forever
+; remove this when pypy releases the bugfix
+commands =
+ pip install -e .[d]
+ pytest tests \
+ --run-optional no_jupyter \
+ !ci: --numprocesses auto \
+ ci: --numprocesses 1
+ pip install -e .[jupyter]
+ pytest tests --run-optional jupyter \
+ -m jupyter \
+ !ci: --numprocesses auto \
+ ci: --numprocesses 1
+
+[testenv:{,ci-}311]
+setenv =
+ PYTHONPATH = {toxinidir}/src
+ AIOHTTP_NO_EXTENSIONS = 1
+skip_install = True
+recreate = True
deps =
+; We currently need > aiohttp 3.8.1 that is on PyPI for 3.11
+ git+https://github.com/aio-libs/aiohttp
-r{toxinidir}/test_requirements.txt
+; a separate worker is required in ci due to https://foss.heptapod.net/pypy/pypy/-/issues/3317
+; this seems to cause tox to wait forever
+; remove this when pypy releases the bugfix
commands =
- pip install -e .[d,python2]
+ pip install -e .[d]
coverage erase
- coverage run -m pytest tests {posargs}
+ pytest tests \
+ --run-optional no_jupyter \
+ !ci: --numprocesses auto \
+ ci: --numprocesses 1 \
+ --cov {posargs}
+ pip install -e .[jupyter]
+ pytest tests --run-optional jupyter \
+ -m jupyter \
+ !ci: --numprocesses auto \
+ ci: --numprocesses 1 \
+ --cov --cov-append {posargs}
coverage report
[testenv:fuzz]
deps =
-r{toxinidir}/test_requirements.txt
hypothesmith
- lark-parser < 0.10.0
-; lark-parser's version is set due to a bug in hypothesis. Once it solved, that would be fixed.
+ lark-parser
commands =
pip install -e .[d]
coverage erase
- coverage run fuzz.py
+ coverage run {toxinidir}/scripts/fuzz.py
coverage report
+
+[testenv:run_self]
+setenv = PYTHONPATH = {toxinidir}/src
+skip_install = True
+commands =
+ pip install -e .[d]
+ black --check {toxinidir}/src {toxinidir}/tests