[tox]
envlist = py38, py39, py310, py311, pyNightly, pypy310, {py38,py39,py310,py311,pyNightly,pypy310}-no-ext, lint, check, security, docs, type-checking

[testenv]
usedevelop = true
setenv =
    {py38,py39,py310,py311,pyNightly}-no-ext: SANIC_NO_UJSON=1
    {py38,py39,py310,py311,pyNightly}-no-ext: SANIC_NO_UVLOOP=1
extras = test, http3
deps =
    httpx>=0.23
allowlist_externals =
    pytest
    coverage
commands =
    coverage run --source ./sanic -m pytest {posargs:tests}
    - coverage combine --append
    coverage report -m -i
    coverage html -i

[testenv:lint]
commands =
    ruff sanic
    ruff format sanic --check
    slotscheck --verbose -m sanic

[testenv:type-checking]
commands =
    mypy sanic

[testenv:check]
commands =
    python setup.py check -r -s

[pytest]
filterwarnings =
    ignore:.*async with lock.* instead:DeprecationWarning
addopts = --strict-markers
markers =
    asyncio

[testenv:security]

commands =
    bandit --recursive sanic --skip B404,B101

[testenv:docs]
platform = linux|linux2|darwin
allowlist_externals = make
extras = docs, http3
commands =
    make docs-test

[testenv:coverage]
commands =
    coverage run --source ./sanic -m pytest {posargs:tests}
    - coverage combine --append
    coverage xml -i
