Run tests
=========
Run tests with tox
------------------
The `tox project `_ can be used to build a
virtual environment with all runtime and test dependencies and run tests
against different Python versions (2.6, 2.7, 3.2, 3.3).
For example, to run tests with Python 2.7, just type::
tox -e py27
To run tests against other Python versions:
* ``py26``: Python 2.6
* ``py27``: Python 2.7
* ``py32``: Python 3.2
* ``py33``: Python 3.3
Test Dependencies
-----------------
On Python older than 3.3, unit tests require the `mock
`_ module. Python 2.6 and 2.7 require also
`unittest2 `_.
To run ``run_aiotest.py``, you need the `aiotest
`_ test suite: ``pip install aiotest``.
Run tests on UNIX
-----------------
Run the following commands from the directory of the Trollius project.
To run tests::
make test
To run coverage (``coverage`` package is required)::
make coverage
Run tests on Windows
--------------------
Run the following commands from the directory of the Trollius project.
You can run the tests as follows::
C:\Python27\python.exe runtests.py
And coverage as follows::
C:\Python27\python.exe runtests.py --coverage
CPython bugs
============
The development of asyncio and trollius helped to identify different bugs in CPython:
* 2.5.0 <= python <= 3.4.2: `sys.exc_info() bug when yield/yield-from is used
in an except block in a generator (#23353>)
`_. The fix will be part of Python 3.4.3.
_UnixSelectorEventLoop._make_subprocess_transport() and
ProactorEventLoop._make_subprocess_transport() work around the bug.
* python == 3.4.0: `Segfault in gc with cyclic trash (#21435)
`_.
Regression introduced in Python 3.4.0, fixed in Python 3.4.1.
Status in Ubuntu the February, 3th 2015: only Ubuntu Trusty (14.04 LTS) is
impacted (`bug #1367907: Segfault in gc with cyclic trash
`_, see
also `update Python3 for trusty #1348954
`_)
* 3.3.0 <= python <= 3.4.0: `gen.send(tuple) unpacks the tuple instead of
passing 1 argument (the tuple) when gen is an object with a send() method,
not a classic generator (#21209) `_.
Regression introduced in Python 3.4.0, fixed in Python 3.4.1.
trollius.CoroWrapper.send() works around the issue, the bug is checked at
runtime once, when the module is imported.