# 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 = unittests,misc,pep257,flake8,pylint,pyroma,check-manifest

[testenv]
basepython = python3

[testenv:mkvenv]
commands = {envpython} scripts/link_pyqt.py --tox {envdir}
envdir = {toxinidir}/.venv
usedevelop = true

[testenv:unittests]
# 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
passenv = DISPLAY XAUTHORITY HOME
deps =
    -r{toxinidir}/requirements.txt
    py==1.4.27
    pytest==2.7.1
    pytest-capturelog==0.7
    pytest-qt==1.3.0
    pytest-mock==0.5
    pytest-html==1.3.1
# We don't use {[testenv:mkvenv]commands} here because that seems to be broken
# on Ubuntu Trusty.
commands =
    {envpython} scripts/link_pyqt.py --tox {envdir}
    {envpython} -m py.test --strict -rfEsw {posargs}

[testenv:coverage]
passenv = DISPLAY XAUTHORITY HOME
deps =
    {[testenv:unittests]deps}
    coverage==3.7.1
    pytest-cov==1.8.1
    cov-core==1.15.0
commands =
    {[testenv:mkvenv]commands}
    {envpython} -m py.test --strict -rfEswx -v --cov qutebrowser --cov-report term --cov-report html {posargs}

[testenv:misc]
commands =
    {envpython} scripts/misc_checks.py git
    {envpython} scripts/misc_checks.py vcs qutebrowser scripts tests
    {envpython} scripts/misc_checks.py spelling qutebrowser scripts tests

[testenv:pylint]
skip_install = true
setenv = PYTHONPATH={toxinidir}/scripts
deps =
    -r{toxinidir}/requirements.txt
    astroid==1.3.6
    beautifulsoup4==4.3.2
    pylint==1.4.3
    logilab-common==0.63.2
    six==1.9.0
commands =
    {[testenv:mkvenv]commands}
    {envdir}/bin/pylint scripts qutebrowser --rcfile=.pylintrc --output-format=colorized --reports=no
    {envpython} scripts/run_pylint_on_tests.py --rcfile=.pylintrc --output-format=colorized --reports=no

[testenv:pep257]
skip_install = true
deps = pep257==0.5.0
passenv = LANG
# Disabled checks:
# D102: Docstring missing, will be handled by others
# D209: Blank line before closing """ (removed from PEP257)
# D402: First line should not be function's signature (false-positives)
commands = {envpython} -m pep257 scripts tests qutebrowser --ignore=D102,D103,D209,D402 '--match=(?!resources|test_content_disposition).*\.py'

[testenv:flake8]
skip_install = true
deps =
    -r{toxinidir}/requirements.txt
    pyflakes==0.8.1
    pep8==1.5.7  # rq.filter: <1.6.0
    flake8==2.4.0
commands =
    {[testenv:mkvenv]commands}
    {envdir}/bin/flake8 scripts tests qutebrowser --config=.flake8

[testenv:pyroma]
skip_install = true
deps =
    pyroma==1.8.1
    docutils==0.12
commands =
    {[testenv:mkvenv]commands}
    {envdir}/bin/pyroma .

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

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

[testenv:smoke]
# 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
passenv = DISPLAY XAUTHORITY HOME USERNAME USER
deps =
    -r{toxinidir}/requirements.txt
# We don't use {[testenv:mkvenv]commands} here because that seems to be broken
# on Ubuntu Trusty.
commands =
    {envpython} scripts/link_pyqt.py --tox {envdir}
    {envpython} -m qutebrowser --no-err-windows --nowindow --temp-basedir about:blank ":later 500 quit"

[pytest]
norecursedirs = .tox .venv
markers =
    gui: Tests using the GUI (e.g. spawning widgets)