[tox]
minversion = 2.0
distshare = {homedir}/.tox/distshare
# make sure to update environment list in travis.yml and appveyor.yml
envlist =
    linting
    py27
    py34
    py35
    py36
    py37
    pypy
    {py27,py36}-{pexpect,xdist,trial,numpy,pluggymaster}
    py27-nobyte
    doctesting
    py36-freeze
    docs

[testenv]
commands = pytest --lsof -ra {posargs:testing}
passenv = USER USERNAME
deps =
    hypothesis>=3.56
    nose
    mock
    requests

[testenv:py27-subprocess]
changedir = .
deps =
    pytest-xdist>=1.13
    mock
    nose
commands =
    pytest -n3 -ra --runpytest=subprocess {posargs:testing}


[testenv:linting]
skipsdist = True
usedevelop = True
basepython = python3.6
deps = pre-commit
commands = pre-commit run --all-files --show-diff-on-failure

[testenv:py27-xdist]
deps =
    pytest-xdist>=1.13
    mock
    nose
    hypothesis>=3.56
changedir=testing
commands =
    pytest -n8 -ra {posargs:.}

[testenv:py36-xdist]
deps = {[testenv:py27-xdist]deps}
commands = {[testenv:py27-xdist]commands}

[testenv:py27-pexpect]
changedir = testing
platform = linux|darwin
deps = pexpect
commands =
    pytest -ra test_pdb.py test_terminal.py test_unittest.py

[testenv:py36-pexpect]
changedir = {[testenv:py27-pexpect]changedir}
platform = {[testenv:py27-pexpect]platform}
deps = {[testenv:py27-pexpect]deps}
commands = {[testenv:py27-pexpect]commands}

[testenv:py27-nobyte]
deps =
    pytest-xdist>=1.13
    hypothesis>=3.56
    mock
distribute = true
changedir=testing
setenv =
    PYTHONDONTWRITEBYTECODE=1
commands =
    pytest -n3 -ra {posargs:.}

[testenv:py27-trial]
deps = twisted
commands =
    pytest -ra {posargs:testing/test_unittest.py}

[testenv:py36-trial]
deps = {[testenv:py27-trial]deps}
commands = {[testenv:py27-trial]commands}

[testenv:py27-numpy]
deps = numpy
commands=
  pytest -ra {posargs:testing/python/approx.py}

[testenv:py36-numpy]
deps = {[testenv:py27-numpy]deps}
commands = {[testenv:py27-numpy]commands}

[testenv:py27-pluggymaster]
setenv=
    _PYTEST_SETUP_SKIP_PLUGGY_DEP=1
deps =
    {[testenv]deps}
    git+https://github.com/pytest-dev/pluggy.git@master

[testenv:py36-pluggymaster]
setenv = {[testenv:py27-pluggymaster]setenv}
deps = {[testenv:py27-pluggymaster]deps}

[testenv:docs]
skipsdist = True
usedevelop = True
changedir = doc/en
deps =
    attrs
    more-itertools
    PyYAML
    sphinx
    sphinxcontrib-trio

commands =
    sphinx-build -W -b html . _build

[testenv:doctesting]
basepython = python
usedevelop = True
skipsdist = True
# ensure the given pyargs can't mean anything else
changedir = doc/
deps =
    PyYAML
commands =
    pytest -ra en
    pytest --doctest-modules --pyargs _pytest

[testenv:regen]
changedir = doc/en
skipsdist = True
basepython = python3.5
deps =
    sphinx
    PyYAML
    regendoc>=0.6.1
whitelist_externals =
    rm
    make
commands =
    rm -rf /tmp/doc-exec*
    make regen

[testenv:jython]
changedir = testing
commands =
    {envpython} {envbindir}/py.test-jython -ra {posargs}

[testenv:py36-freeze]
changedir = testing/freeze
deps = pyinstaller
commands =
    {envpython} create_executable.py
    {envpython} tox_run.py


[testenv:coveralls]
passenv = TRAVIS TRAVIS_JOB_ID TRAVIS_BRANCH COVERALLS_REPO_TOKEN
usedevelop = True
changedir = .
deps =
    {[testenv]deps}
    coveralls
commands =
    coverage run --source=_pytest -m pytest testing
    coverage report -m
    coveralls

[testenv:release]
decription = do a release, required posarg of the version number
basepython = python3.6
skipsdist = True
usedevelop = True
passenv = *
deps =
    colorama
    gitpython
    pre-commit
    towncrier
    wheel
commands = python scripts/release.py {posargs}

[pytest]
minversion = 2.0
plugins = pytester
addopts = -ra -p pytester --ignore=testing/cx_freeze
rsyncdirs = tox.ini pytest.py _pytest testing
python_files = test_*.py *_test.py testing/*/*.py
python_classes = Test Acceptance
python_functions = test
norecursedirs = .tox ja .hg cx_freeze_source testing/example_scripts
xfail_strict=true
filterwarnings =
    error
    # produced by path.local
    ignore:bad escape.*:DeprecationWarning:re
    # produced by path.readlines
    ignore:.*U.*mode is deprecated:DeprecationWarning
    # produced by pytest-xdist
    ignore:.*type argument to addoption.*:DeprecationWarning
    # produced by python >=3.5 on execnet (pytest-xdist)
    ignore:.*inspect.getargspec.*deprecated, use inspect.signature.*:DeprecationWarning
    #pytests own futurewarnings
    ignore::_pytest.experiments.PytestExerimentalApiWarning
pytester_example_dir = testing/example_scripts
[flake8]
max-line-length = 120
ignore = E203,W503