# 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. [flake8] max-line-length = 120 builtins = _,_n,__request__ exclude = .git,.tox,dist,build [pycodestyle] max-line-length = 120 [tox] envlist = py27, flake8, docs, pylint minversion=1.8 [testenv] passenv = DISPLAY setenv = PYTHONPATH = {env:PWD}: sitepackages = True deps = twisted==16.6 service_identity mako chardet pyopenssl pyxdg pytest mock slimit pillow whitelist_externals = py.test commands = {envpython} setup.py test [pytest] python_functions = test_ norecursedirs = .tox .git dist build pep8maxlinelength = 120 whitelist_externals= {[testenv]whitelist_externals} commands = py.test --basetemp=_pytest_temp deluge ############## # Unit tests ############## [testenv:pydef] commands = python -c "import libtorrent as lt; print(lt.__version__)" py.test -v --basetemp=_pytest_temp -s -m "not (todo or gtkui)" deluge/tests [testenv:pygtkui] commands = py.test -v --basetemp=_pytest_temp -s -m "gtkui" deluge/tests [testenv:todo] commands = py.test -v --basetemp=_pytest_temp -s -m "todo" deluge/tests [testenv:trial] setenv = {[testenv]setenv}:{env:PWD}/deluge/tests whitelist_externals = trial commands = python -c "import libtorrent as lt; print lt.__version__" trial --reporter=deluge-reporter deluge.tests [testenv:plugins] setenv = PYTHONPATH = {env:PWD}:{env:PWD}/deluge/plugins commands = python setup.py build_plugins --develop --install-dir={env:PWD}/deluge/plugins/ py.test -v --basetemp=_pytest_temp -s -m "not gtkui" deluge/plugins [testenv:pluginsgtkui] setenv = PYTHONPATH = {env:PWD}:{env:PWD}/deluge/plugins commands = python setup.py build_plugins --develop --install-dir={env:PWD}/deluge/plugins/ py.test -v --basetemp=_pytest_temp -s deluge/plugins [testenv:py27] deps = {[testenv]deps} py2-ipaddress basepython = python2.7 commands = {[testenv:pydef]commands} [testenv:py3] basepython = python3 commands = {[testenv:pydef]commands} ########################### # Code style verification ########################### [testenv:flake8] # Disable site packages to avoid using system flake8 which uses hardcoded python path which imports the wrong libraries. sitepackages = False deps = {[testenv]deps} flake8 flake8-quotes flake8-isort pep8-naming commands = flake8 --version python -c 'import isort; print(isort.__version__)' flake8 [testenv:flake8-complexity] sitepackages = False deps = {[testenv:flake8]deps} mccabe commands = flake8 --exit-zero --max-complexity 15 deluge [testenv:pylint] # Disable site packages to avoid using system installed version sitepackages = False ignore_errors = True deps = {[testenv]deps} pylint # Use bash to enable use of wildcard paths with pylint. whitelist_externals = bash commands = pylint --version pylint deluge bash -c 'pylint *.py deluge/scripts/*.py' bash -c 'pylint deluge/plugins/*/deluge/' ###################### # Unit Test coverage ###################### [testcoveragebase] deps = {[testenv]deps} pytest-cov coverage whitelist_externals = {[testenv]whitelist_externals} coverage commands = coverage run --branch --source=deluge -m py.test -m "not todo" deluge/tests/ [testenv:testcoverage] setenv = {[testenv]setenv} deps = {[testcoveragebase]deps} whitelist_externals = {[testcoveragebase]whitelist_externals} commands = {[testcoveragebase]commands} coverage report [testenv:testcoverage-html] setenv = {[testenv]setenv} deps = {[testcoveragebase]deps} whitelist_externals = {[testcoveragebase]whitelist_externals} commands = {[testcoveragebase]commands} coverage html -d docs/build/htmlcoverage ###################### # Docs generation ###################### # We do not have all dependencies on RTD and travis so we exclude the # site packages (sitepackages=False) when building docs so that local # tests have a similar environment. [docsbase] sitepackages = False changedir = docs deps = {[testenv]deps} sphinx sphinxcontrib-napoleon whitelist_externals = {[testenv]whitelist_externals} [testenv:docs] sitepackages = {[docsbase]sitepackages} deps = {[docsbase]deps} commands = python setup.py clean_docs python -c "print '> sphinx-apidoc --force -o docs/source/modules/ deluge deluge/plugins\n'\ '> sphinx-build -v -E -T -b html -d docs/build/doctrees docs/source docs/build/html';\ import subprocess, sys; proc = subprocess.Popen(\ 'python setup.py build_docs', shell=True, stderr=subprocess.PIPE);\ err = proc.communicate()[1]; print err; sys.exit(bool(err))" [testenv:docscoverage] sitepackages = {[docsbase]sitepackages} changedir = {[docsbase]changedir} deps = {[docsbase]deps} coverage pytest-cov whitelist_externals = {[docsbase]whitelist_externals} mkdir commands = mkdir -p build/doccoverage sphinx-build -W -b coverage -d build/doctrees source build/doccoverage py.test --doctest-glob='*.rst'