# 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
distshare = {toxworkdir}
skipsdist = true

[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_* QUTE_*
deps =
    -r{toxinidir}/misc/requirements/requirements-pip.txt
    -r{toxinidir}/requirements.txt
    -r{toxinidir}/misc/requirements/requirements-tests.txt
commands =
    {envpython} scripts/link_pyqt.py --tox {envdir}
    {envpython} scripts/dev/run_pytest.py {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} scripts/dev/run_pytest.py --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} scripts/dev/run_pytest.py --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

# This is used for Windows, since binary name is different
[testenv:mkvenv-win]
basepython = python.exe
commands = {envpython} scripts/link_pyqt.py --tox {envdir}
envdir = {toxinidir}/.venv
usedevelop = true
deps =
    -r{toxinidir}/requirements.txt

# This is undocumented, but it's a common typo, so let's make it work
[testenv:mkenv]
basepython = {[testenv:mkvenv]basepython}
commands = {[testenv:mkvenv]commands}
envdir = {[testenv:mkvenv]envdir}
usedevelop = {[testenv:mkvenv]usedevelop}
deps = {[testenv:mkvenv]deps}

[testenv:unittests-frozen]
# cx_Freeze doesn't support Python 3.5 yet
basepython = python3.4
passenv = {[testenv]passenv}
deps =
    {[testenv]deps}
    -r{toxinidir}/misc/requirements/requirements-cxfreeze.txt
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: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 =
    -r{toxinidir}/misc/requirements/requirements-pip.txt
    -r{toxinidir}/requirements.txt
    -r{toxinidir}/misc/requirements/requirements-vulture.txt
setenv = PYTHONPATH={toxinidir}
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}
    -r{toxinidir}/misc/requirements/requirements-pylint.txt
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}
    -r{toxinidir}/misc/requirements/requirements-pylint-master.txt
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
    -r{toxinidir}/misc/requirements/requirements-flake8.txt
commands =
    {envpython} -m flake8 {posargs:qutebrowser tests scripts}

[testenv:pyroma]
basepython = python3
passenv =
deps =
    -r{toxinidir}/misc/requirements/requirements-pip.txt
    -r{toxinidir}/misc/requirements/requirements-pyroma.txt
commands =
    {envdir}/bin/pyroma .

[testenv:check-manifest]
basepython = python3
passenv =
deps =
    -r{toxinidir}/misc/requirements/requirements-pip.txt
     -r{toxinidir}/misc/requirements/requirements-check-manifest.txt
commands =
    {envdir}/bin/check-manifest --ignore 'qutebrowser/git-commit-id,qutebrowser/html/doc,qutebrowser/html/doc/*,*/__pycache__'

[testenv:docs]
basepython = python3
whitelist_externals = git
passenv = TRAVIS_PULL_REQUEST
deps =
    -r{toxinidir}/misc/requirements/requirements-pip.txt
    -r{toxinidir}/requirements.txt
commands =
    {envpython} scripts/link_pyqt.py --tox {envdir}
    {envpython} scripts/dev/src2asciidoc.py {posargs}
    {envpython} scripts/dev/check_doc_changes.py {posargs}
    {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
deps =
    -r{toxinidir}/misc/requirements/requirements-pip.txt
    -r{toxinidir}/requirements.txt
    -r{toxinidir}/misc/requirements/requirements-cxfreeze.txt
commands =
    {envpython} -m pip install -U setuptools
    {envpython} scripts/link_pyqt.py --tox {envdir}
    {envpython} scripts/dev/freeze.py {posargs}

[testenv:pyinstaller]
basepython = python3
deps =
    -r{toxinidir}/misc/requirements/requirements-pip.txt
    -r{toxinidir}/requirements.txt
    -r{toxinidir}/misc/requirements/requirements-pyinstaller.txt
commands =
    {envpython} scripts/link_pyqt.py --tox {envdir}
    {envbindir}/pyinstaller --noconfirm misc/qutebrowser.spec

[testenv:eslint]
deps =
whitelist_externals = eslint
commands = eslint --color qutebrowser/javascript