# 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. # # Usage: `pip install tox` and then run `tox` from this directory. [tox] envlist = py27, py3, lint, docs minversion=3.0 [pytest] # Hide logged warnings and errors in test output. log_cli_level = CRITICAL addopts = -p no:warnings --basetemp=_pytest_temp # ================= # Base dependencies # ================= [basesetup] # Minimum pip and setuptools versions to fix system and travis issues. deps = pip >= 10, <= 18.1 setuptools >= 40 [basetests] deps = {[basesetup]deps} -rrequirements.txt -rrequirements-tests.txt [baselint] deps = {[basesetup]deps} -rrequirements-tests.txt [basedev] deps = {[basesetup]deps} -rrequirements.txt -rrequirements-dev.txt -rrequirements-tests.txt [basedocs] deps = {[basesetup]deps} -rdocs/requirements.txt # ====================== # Test environment setup # ====================== [testenv] install_command = python -m pip install --ignore-installed {opts} {packages} passenv = DISPLAY PYTHONPATH setenv = PYTHONPATH = {toxinidir} PYTEST_ADDOPTS = -v -s sitepackages = True deps = {[basetests]deps} commands = python -c "import libtorrent as lt; print(lt.__version__)" pytest -m "not (todo or gtkui or security)" deluge/tests # ========== # Unit tests # ========== [testenv:security] setenv = SECURITY_TESTS = True commands = pytest -m "security" deluge/tests [testenv:gtkui] commands = pytest -m "gtkui" deluge/tests [testenv:todo] commands = pytest -m "todo" deluge/tests [testenv:trial] setenv = {[testenv]setenv}{:}{toxinidir}/deluge/tests commands = python -c "import libtorrent as lt; print(lt.__version__)" python -m twisted.trial --reporter=deluge-reporter deluge.tests [testenv:plugins] setenv = PYTHONPATH = {toxinidir}{:}{toxinidir}/deluge/plugins commands = python setup.py build_plugins --develop --install-dir={toxinidir}/deluge/plugins/ pytest -m "not gtkui" deluge/plugins [testenv:pluginsgtkui] setenv = PYTHONPATH = {toxinidir}{:}{toxinidir}/deluge/plugins commands = python setup.py build_plugins --develop --install-dir={toxinidir}/deluge/plugins/ pytest deluge/plugins # ============ # Code linting # ============ # Disable site-packages to avoid using system installed commands. [testenv:lint] sitepackages = False passenv = HOMEPATH SSH_AUTH_SOCK deps = {[baselint]deps} commands = pre-commit run --all-files [testenv:flake8] sitepackages = False deps = {[baselint]deps} commands = flake8 --version python -c 'import isort; print(isort.__version__)' flake8 *.py deluge [testenv:flake8-complexity] sitepackages = False deps = {[baselint]deps} commands = flake8 --exit-zero --max-complexity 15 deluge [testenv:pylint] sitepackages = False ignore_errors = True deps = {[baselint]deps} commands = pylint --version pylint deluge # Use python to enable use of wildcard paths with pylint. python -m pylint *.py deluge/scripts/*.py python -m pylint deluge/plugins/*/deluge/ # ======== # Coverage # ======== [coveragebase] commands = coverage run --branch --source=deluge -m pytest -m "not todo" deluge/tests [testenv:coverage] commands = {[coveragebase]commands} coverage html -d docs/build/htmlcoverage coverage report # =================== # Documentation build # =================== [testenv:docs] # Exclude site-packages so local builds have a similar environment to ReadTheDocs. sitepackages = False skip_install = True deps = {[basedocs]deps} commands = python setup.py clean_docs sphinx-build -v -j auto -E -T -b html -d docs/build/doctrees docs/source docs/build/html [testenv:docscoverage] basepython = python2.7 sitepackages = False skip_install = True changedir = docs deps = {[basedocs]deps} pytest-cov whitelist_externals = mkdir commands = mkdir -p build/doccoverage sphinx-build -W -b coverage -d build/doctrees source build/doccoverage pytest --doctest-glob='*.rst' # ======================== # Development Environment # ======================== [testenv:denv2] basepython = python2.7 envdir = .venv2 usedevelop = True deps = {[basedev]deps} commands = [testenv:denv3] basepython = python3 envdir = .venv3 usedevelop = True deps = {[basedev]deps} commands =