From 409194915fccbef599b2b4c817f35a54483dedab Mon Sep 17 00:00:00 2001 From: Kurt Griffiths Date: Fri, 29 Jan 2016 16:54:38 -0600 Subject: [PATCH] test(tox): Clean up tox config and add debug envs Organize and DRY up the tox config file. Remove basepython directives that aren't very useful and actually cause problems when using pyenv. Replace {posargs} with [], since the latter seems to be better supported (e.g., it works with substitution directives). Also add debug environments that pass through positional args, such as -s and test suites or names to run, and may include additional debugging tools, starting with support for enhanced pdb's such as pdbpp and ipdb. --- tox.ini | 169 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 86 insertions(+), 83 deletions(-) diff --git a/tox.ini b/tox.ini index 3950cde..fbdeaa5 100644 --- a/tox.ini +++ b/tox.ini @@ -1,37 +1,24 @@ [tox] +# NOTE(kgriffs): The py26, py27, and py34 evns are required when +# checking combined coverage. After running all three envs, execute +# "tools/combine_coverage.sh" to create a combined coverage report +# that can be viewed by opening ".coverage_html/index.html". envlist = py26, py27, - py27_cython, - ; py33, - ; py33_cython, py34, - py34_cython, - ; py35, - ; py35_cython, - pypy, - ; pypy3, pep8, pylint, - py27_smoke, - py27_smoke_cython, - ; py26_bench, - ; py27_bench, - ; py27_bench_cython, - ; py33_bench, - ; py33_bench_cython, - ; py34_bench, - ; py34_bench_cython, - ; py35_bench, - ; py35_bench_cython, - ; pypy_bench - ; pypy3_bench [testenv] deps = -r{toxinidir}/tools/test-requires commands = {toxinidir}/tools/clean.sh {toxinidir}/falcon - nosetests {posargs} + nosetests [] -[testenv:py26] +# -------------------------------------------------------------------- +# Coverage +# -------------------------------------------------------------------- + +[with-coverage] whitelist_externals = bash mv commands = {toxinidir}/tools/clean.sh {toxinidir}/falcon @@ -39,48 +26,86 @@ commands = {toxinidir}/tools/clean.sh {toxinidir}/falcon bash -c "if [ ! -d .coverage_data ]; then mkdir .coverage_data; fi" mv {toxinidir}/.coverage {toxinidir}/.coverage_data/.coverage.{envname} + +[testenv:py26] +whitelist_externals = {[with-coverage]whitelist_externals} +commands = {[with-coverage]commands} + [testenv:py27] -whitelist_externals = bash - mv -commands = {[testenv:py26]commands} +whitelist_externals = {[with-coverage]whitelist_externals} +commands = {[with-coverage]commands} [testenv:py34] -whitelist_externals = bash - mv -commands = {[testenv:py26]commands} +whitelist_externals = {[with-coverage]whitelist_externals} +commands = {[with-coverage]commands} + +# -------------------------------------------------------------------- +# Debugging +# -------------------------------------------------------------------- + +[with-debug-tools] +deps = -r{toxinidir}/tools/test-requires + ipdb + pdbpp + +[testenv:py27_debug] +deps = {[with-debug-tools]deps} + +[testenv:py34_debug] +deps = {[with-debug-tools]deps} [testenv:py27_profile] deps = -r{toxinidir}/tools/test-requires nose-cprof -basepython = python2.7 commands = {toxinidir}/tools/clean.sh {toxinidir}/falcon nosetests \ --with-cprofile \ --cprofile-stats-erase \ --cprofile-stats-file=cprofile.dat \ - {posargs} + -s \ + [] -[testenv:py27_cython] +# -------------------------------------------------------------------- +# Cython +# -------------------------------------------------------------------- + +[with-cython] deps = -r{toxinidir}/tools/test-requires cython -basepython = python2.7 -commands = {toxinidir}/tools/clean.sh {toxinidir}/falcon - nosetests + +[testenv:py27_cython] +deps = {[with-cython]deps} [testenv:py33_cython] -deps = {[testenv:py27_cython]deps} -basepython = python3.3 -commands = {[testenv:py27_cython]commands} +deps = {[with-cython]deps} [testenv:py34_cython] -deps = {[testenv:py27_cython]deps} -basepython = python3.4 -commands = {[testenv:py27_cython]commands} +deps = {[with-cython]deps} [testenv:py35_cython] -deps = {[testenv:py27_cython]deps} -basepython = python3.5 -commands = {[testenv:py27_cython]commands} +deps = {[with-cython]deps} + +# -------------------------------------------------------------------- +# Smoke testing +# -------------------------------------------------------------------- + +[smoke-test] +commands = falcon-bench -t 1 -b falcon-ext + +[testenv:py27_smoke] +# This test smoke-tests a basic Falcon app +deps = -r{toxinidir}/tools/bench-requires +commands = {[smoke-test]commands} + +[testenv:py27_smoke_cython] +# This test ensures that a falcon app will run fine under Cython +deps = -r{toxinidir}/tools/bench-requires + cython +commands = {[smoke-test]commands} + +# -------------------------------------------------------------------- +# Lint +# -------------------------------------------------------------------- [testenv:py3kwarn] deps = py3kwarn @@ -88,90 +113,68 @@ commands = py3kwarn falcon [testenv:pep8] deps = flake8 -basepython = python2.7 commands = flake8 \ --max-complexity=15 \ --exclude=./build,.venv,.tox,dist,doc,./falcon/bench/nuts \ --ignore=F403 \ --max-line-length=99 \ - {posargs} + [] [testenv:pylint] deps = pylint -basepython = python2.7 commands = pylint falcon \ --ignore=bench,tests \ -E \ - {posargs} + [] + +# -------------------------------------------------------------------- +# Benchmarking +# -------------------------------------------------------------------- [testenv:py26_bench] deps = -r{toxinidir}/tools/bench-requires -basepython = python2.6 -commands = falcon-bench {posargs} +commands = falcon-bench [] [testenv:py27_bench] deps = -r{toxinidir}/tools/bench-requires -basepython = python2.7 -commands = falcon-bench {posargs} +commands = falcon-bench [] [testenv:py27_bench_cython] deps = -r{toxinidir}/tools/bench-requires cython -basepython = python2.7 -commands = falcon-bench {posargs} +commands = falcon-bench [] [testenv:py33_bench] deps = -r{toxinidir}/tools/bench-requires -basepython = python3.3 -commands = falcon-bench {posargs} +commands = falcon-bench [] [testenv:py33_bench_cython] deps = -r{toxinidir}/tools/bench-requires cython -basepython = python3.3 -commands = falcon-bench {posargs} +commands = falcon-bench [] [testenv:py34_bench] deps = -r{toxinidir}/tools/bench-requires -basepython = python3.4 -commands = falcon-bench {posargs} +commands = falcon-bench [] [testenv:py34_bench_cython] deps = -r{toxinidir}/tools/bench-requires cython -basepython = python3.4 -commands = falcon-bench {posargs} +commands = falcon-bench [] [testenv:py35_bench] deps = -r{toxinidir}/tools/bench-requires -basepython = python3.5 -commands = falcon-bench {posargs} +commands = falcon-bench [] [testenv:py35_bench_cython] deps = -r{toxinidir}/tools/bench-requires cython -basepython = python3.5 -commands = falcon-bench {posargs} +commands = falcon-bench [] [testenv:pypy_bench] deps = -r{toxinidir}/tools/bench-requires -basepython = pypy -commands = falcon-bench {posargs} +commands = falcon-bench [] [testenv:pypy3_bench] deps = -r{toxinidir}/tools/bench-requires -basepython = pypy3 -commands = falcon-bench {posargs} - -[testenv:py27_smoke] -# This test smoke-tests a basic Falcon app -deps = -r{toxinidir}/tools/bench-requires -basepython = python2.7 -commands = falcon-bench -t 1 -b falcon-ext - -[testenv:py27_smoke_cython] -# This test ensures that a falcon app will run fine under Cython -deps = -r{toxinidir}/tools/bench-requires - cython -basepython = python2.7 -commands = falcon-bench -t 1 -b falcon-ext +commands = falcon-bench []