# Tox (http://tox.testrun.org/) is a tool for running tests
# in multiple virtualenvs. This configuration file will run the
# test suite on all supported python versions. To use it, "pip install tox"
# and then run "tox" from this directory.

[tox]
envlist = py34,py35-cov,misc,vulture,flake8,pylint,pyroma,check-manifest

[testenv]
# https://bitbucket.org/hpk42/tox/issue/246/ - only needed for Windows though
setenv =
    QT_QPA_PLATFORM_PLUGIN_PATH={envdir}/Lib/site-packages/PyQt5/plugins/platforms
    PYTEST_QT_API=pyqt5
passenv = PYTHON DISPLAY XAUTHORITY HOME USERNAME USER CI TRAVIS XDG_*
deps =
    -r{toxinidir}/requirements.txt
    beautifulsoup4==4.4.1
    coverage==4.0.3
    decorator==4.0.9
    Flask==0.10.1
    glob2==0.4.1
    httpbin==0.4.1
    hypothesis==3.1.0
    itsdangerous==0.24
    Mako==1.0.3
    parse==1.6.6
    parse-type==0.3.4
    py==1.4.31
    pytest==2.9.0
    pytest-bdd==2.16.0
    pytest-catchlog==1.2.2
    pytest-cov==2.2.1
    pytest-faulthandler==1.3.0
    pytest-html==1.8.0
    pytest-mock==0.11.0
    pytest-qt==1.11.0
    pytest-instafail==0.3.0
    pytest-travis-fold==1.2.0
    pytest-repeat==0.2
    pytest-rerunfailures==1.0.1
    pytest-xvfb==0.2.0
    six==1.10.0
    termcolor==1.1.0
    vulture==0.8.1
    Werkzeug==0.11.4
    wheel==0.29.0
    cherrypy==5.0.1
commands =
    {envpython} scripts/link_pyqt.py --tox {envdir}
    {envpython} -m py.test {posargs:tests}

[testenv:py35-cov]
basepython = python3.5
setenv = {[testenv]setenv}
passenv = {[testenv]passenv}
deps = {[testenv]deps}
commands =
    {envpython} scripts/link_pyqt.py --tox {envdir}
    {envpython} -m py.test --cov --cov-report xml --cov-report=html --cov-report= {posargs:tests}
    {envpython} scripts/dev/check_coverage.py {posargs}

[testenv:py34-cov]
basepython = python3.4
setenv = {[testenv]setenv}
passenv = {[testenv]passenv}
deps = {[testenv]deps}
commands =
    {envpython} scripts/link_pyqt.py --tox {envdir}
    {envpython} -m py.test --cov --cov-report xml --cov-report=html --cov-report= {posargs:tests}
    {envpython} scripts/dev/check_coverage.py {posargs}

[testenv:mkvenv]
basepython = python3
commands = {envpython} scripts/link_pyqt.py --tox {envdir}
envdir = {toxinidir}/.venv
usedevelop = true
deps =
    -r{toxinidir}/requirements.txt

[testenv:unittests-frozen]
# cx_Freeze doesn't support Python 3.5 yet
basepython = python3.4
passenv = {[testenv]passenv}
skip_install = true
deps =
    {[testenv]deps}
    cx_Freeze==4.3.4
commands =
    {envpython} scripts/link_pyqt.py --tox {envdir}
    {envpython} scripts/dev/freeze_tests.py build_exe -b {envdir}/build
    {envdir}/build/run-frozen-tests {posargs}

[testenv:unittests-nodisp]
basepython = python3
passenv = {[testenv]passenv}
deps = {[testenv]deps}
setenv =
    DISPLAY=
    QUTE_NO_DISPLAY=1
commands =
    {envpython} scripts/link_pyqt.py --tox {envdir}
    {envpython} -m py.test {posargs:tests}

[testenv:misc]
ignore_errors = true
basepython = python3
# For global .gitignore files
passenv = HOME
deps =
commands =
    {envpython} scripts/dev/misc_checks.py git
    {envpython} scripts/dev/misc_checks.py vcs
    {envpython} scripts/dev/misc_checks.py spelling

[testenv:vulture]
basepython = python3
deps = vulture==0.8.1
commands =
    {envpython} scripts/link_pyqt.py --tox {envdir}
    {envpython} scripts/dev/run_vulture.py

[testenv:pylint]
basepython = python3
ignore_errors = true
passenv =
deps =
    {[testenv]deps}
    {[testenv:misc]deps}
    astroid==1.4.4
    pylint==1.5.4
    requests==2.9.1
    ./scripts/dev/pylint_checkers
commands =
    {envpython} scripts/link_pyqt.py --tox {envdir}
    {envpython} -m pylint scripts qutebrowser --output-format=colorized --reports=no {posargs}
    {envpython} scripts/dev/run_pylint_on_tests.py {toxinidir} --output-format=colorized --reports=no {posargs}

[testenv:pylint-master]
basepython = python3
passenv = {[testenv:pylint]passenv}
deps =
    {[testenv]deps}
    {[testenv:misc]deps}
    git+https://github.com/PyCQA/astroid.git
    git+https://github.com/PyCQA/pylint.git
    requests==2.9.1
    ./scripts/dev/pylint_checkers
commands =
    {envpython} scripts/link_pyqt.py --tox {envdir}
    {envpython} -m pylint scripts qutebrowser --output-format=colorized --reports=no {posargs}
    {envpython} scripts/dev/run_pylint_on_tests.py --output-format=colorized --reports=no {posargs}

[testenv:flake8]
basepython = python3
passenv =
deps =
    -r{toxinidir}/requirements.txt
    flake8==2.5.4
    flake8-debugger==1.4.0
    pep8-naming==0.3.3
    flake8-putty==0.2.0
    ebb-lint==0.4.4
    flake8-copyright==0.1
    mccabe==0.4.0
    pep8==1.7.0
    pyflakes==1.1.0
    flake8-string-format==0.2.1
    flake8-deprecated==1.0
    flake8-mock==0.2
    flake8-pep3101==0.3
    flake8-docstrings==0.2.5
    pep257==0.7.0  # still needed by flake8-docstrings but ignored
    pydocstyle==1.0.0
commands =
    {envpython} -m flake8

[testenv:pyroma]
basepython = python3
skip_install = true
passenv =
deps =
    pyroma==2.0.2
    docutils==0.12
commands =
    {envdir}/bin/pyroma .

[testenv:check-manifest]
basepython = python3
skip_install = true
passenv =
deps =
    check-manifest==0.31
commands =
    {envdir}/bin/check-manifest --ignore 'qutebrowser/git-commit-id,qutebrowser/html/doc,qutebrowser/html/doc/*,*/__pycache__'

[testenv:docs]
basepython = python3
skip_install = true
whitelist_externals = git
passenv =
deps =
    -r{toxinidir}/requirements.txt
commands =
    {envpython} scripts/link_pyqt.py --tox {envdir}
    {envpython} scripts/dev/src2asciidoc.py
    git --no-pager diff --exit-code --stat
    {envpython} scripts/asciidoc2html.py {posargs}

[testenv:cxfreeze-windows]
# PYTHON is actually required when using this env, but the entire tox.ini would
# fail if we didn't have a fallback defined.
basepython = {env:PYTHON:}/python.exe
skip_install = true
deps =
    -r{toxinidir}/requirements.txt
    cx_Freeze==4.3.4
commands =
    {envpython} scripts/link_pyqt.py --tox {envdir}
    {envpython} scripts/dev/freeze.py {posargs}

[testenv:eslint]
skip_install = True
deps =
whitelist_externals = eslint
commands = eslint qutebrowser