163 lines (147 sloc) 6.33 KB
# Tox ( is a tool for running tests
# in multiple virtualenvs. This configuration file will run the tornado
# test suite on all supported python versions. To use it, "pip install tox"
# and then run "tox" from this directory.
# This configuration requires tox 1.8 or higher.
# Installation tips:
# When building pycurl on my macports-based setup, I need to either set the
# environment variable ARCHFLAGS='-arch x86_64' or use
# 'port install curl +universal' to get both 32- and 64-bit versions of
# libcurl.
envlist =
# Basic configurations: Run the tests in both minimal installations
# and with all optional dependencies.
# (pypy3 doesn't have any optional deps yet)
# Also run the tests with each possible replacement of a default
# component. Run each test on both python 2 and 3 where possible.
# (Only one 2.x and one 3.x unless there are known differences).
# py2 and py3 are aliases for py27-full and py35-full.
# Alternate HTTP clients.
# Alternate IOLoops.
# Alternate Resolvers.
# Other configurations; see comments below.
# Ensure the sphinx build has no errors or warnings
# Run the doctests via sphinx (which covers things not run
# in the regular test suite and vice versa)
# Most of these are defaults, but if you specify any you can't fall back
# defaults for the others.
basepython =
py27: python2.7
py33: python3.3
py34: python3.4
py35: python3.5
pypy: pypy
pypy3: pypy3
py2: python2.7
py3: python3.5
deps =
# unittest2 doesn't add anything we need on 2.7+, but we should ensure that
# its existence doesn't break anything due to conditional imports.
py27-unittest2: unittest2
py3-unittest2: unittest2py3k
# cpython-only deps: pycurl installs but curl_httpclient doesn't work;
# twisted mostly works but is a bit flaky under pypy.
{py27,py33,py34,py35}-full: pycurl
{py2,py3}: pycurl>=
# twisted is cpython only.
{py27,py33,py34,py35}-full: twisted
{py2,py3}: twisted
# pycares installation currently fails on py33
# (
{py2,py3,py27,py33,py34,py35}-full: pycares
# futures became standard in py32
{py2,py27,pypy}-full: futures
# mock became standard in py33
{py2,py27,pypy,py3,pypy3}-full: mock
# singledispatch became standard in py34.
{py2,py27,pypy,py3,py33}-full: singledispatch
py33-asyncio: asyncio
trollius: trollius
py2-monotonic: monotonic
sphinx: sphinx
sphinx: sphinx_rtd_theme
setenv =
# The extension is mandatory on cpython.
{py2,py27,py3,py33,py34,py35}: TORNADO_EXTENSION=1
# In python 3, opening files in text mode uses a
# system-dependent encoding by default. Run the tests with "C"
# (ascii) and "utf-8" locales to ensure we don't have hidden
# dependencies on this setting.
lang_c: LANG=C
lang_utf8: LANG=en_US.utf-8
# tox's parser chokes if all the setenv entries are conditional.
{py2,py27,py3,py33,py34,py35}-no-ext: TORNADO_EXTENSION=0
# All non-comment lines but the last must end in a backslash.
# Tox filters line-by-line based on the environment name.
commands =
python \
# py3*: -b turns on an extra warning when calling
# str(bytes), and -bb makes it an error.
{py3,py33,py34,py35,pypy3}: -bb \
# Python's optimized mode disables the assert statement, so
# run the tests in this mode to ensure we haven't fallen into
# the trap of relying on an assertion's side effects or using
# them for things that should be runtime errors.
opt: -O \
-m tornado.test.runtests \
# Note that httpclient_test is always run with both client
# implementations; this flag controls which client all the
# other tests use.
curl: --httpclient=tornado.curl_httpclient.CurlAsyncHTTPClient \
select: \
twisted: --ioloop=tornado.platform.twisted.TwistedIOLoop \
twistedlayered: --ioloop=tornado.test.twisted_test.LayeredTwistedIOLoop --resolver=tornado.platform.twisted.TwistedResolver \
{asyncio,trollius}: --ioloop=tornado.platform.asyncio.AsyncIOLoop \
caresresolver: --resolver=tornado.platform.caresresolver.CaresResolver \
threadedresolver: --resolver=tornado.netutil.ThreadedResolver \
monotonic: --ioloop_time_monotonic \
# Test with a non-english locale to uncover str/bytes mixing issues.
locale: --locale=zh_TW \
# python will import relative to the current working directory by default,
# so cd into the tox working directory to avoid picking up the working
# copy of the files (especially important for the speedups module).
changedir = {toxworkdir}
# tox 1.6 passes --pre to pip by default, which currently has problems
# installing pycurl and monotime (
# Remove it (it's not a part of {opts}) to only install real releases.
install_command = pip install {opts} {packages}
changedir = docs
# For some reason the extension fails to load in this configuration,
# but it's not really needed for docs anyway.
commands =
sphinx-build -q -E -n -W -b html . {envtmpdir}/html
changedir = docs
# No -W for doctests because that disallows tests with empty output.
commands =
sphinx-build -q -E -n -b doctest . {envtmpdir}/doctest
changedir = docs
commands =
sphinx-build -q -E -n -b doctest . {envtmpdir}/doctest