* ``assertRaises`` works properly for exception classes that have custom
metaclasses
* ``ConcurrentTestSuite`` was silently eating exceptions that propagate from
the test.run(result) method call. Ignoring them is fine in a normal test
runner, but when they happen in a different thread, the thread that called
suite.run() is not in the stack anymore, and the exceptions are lost. We now
create a synthetic test recording any such exception.
(Robert Collins, #1130429)
* Fixed SyntaxError raised in ``_compat2x.py`` when installing via Python 3.
(Will Bond, #941958)
* New class ``StreamResult`` which defines the API for the new result type.
(Robert Collins)
* New support class ``ConcurrentStreamTestSuite`` for convenient construction
and utilisation of ``StreamToQueue`` objects. (Robert Collins)
* New support class ``CopyStreamResult`` which forwards events onto multiple
``StreamResult`` objects (each of which receives all the events).
(Robert Collins)
* New support class ``StreamSummary`` which summarises a ``StreamResult``
stream compatibly with ``TestResult`` code. (Robert Collins)
* New support class ``StreamTagger`` which adds or removes tags from
``StreamResult`` events. (RobertCollins)
* New support class ``StreamToDict`` which converts a ``StreamResult`` to a
series of dicts describing a test. Useful for writing trivial stream
analysers. (Robert Collins)
* New support class ``TestControl`` which permits cancelling an in-progress
run. (Robert Collins)
* New support class ``StreamFailFast`` which calls a ``TestControl`` instance
to abort the test run when a failure is detected. (Robert Collins)
* New support class ``ExtendedToStreamDecorator`` which translates both regular
unittest TestResult API calls and the ExtendedTestResult API which testtools
has supported into the StreamResult API. ExtendedToStreamDecorator also
forwards calls made in the StreamResult API, permitting it to be used
anywhere a StreamResult is used. Key TestResult query methods like
wasSuccessful and shouldStop are synchronised with the StreamResult API
calls, but the detailed statistics like the list of errors are not - a
separate consumer will be created to support that.
(Robert Collins)
* New support class ``StreamToExtendedDecorator`` which translates
``StreamResult`` API calls into ``ExtendedTestResult`` (or any older
``TestResult``) calls. This permits using un-migrated result objects with
new runners / tests. (Robert Collins)
* New support class ``StreamToQueue`` for sending messages to one
``StreamResult`` from multiple threads. (Robert Collins)
* New support class ``TimestampingStreamResult`` which adds a timestamp to
events with no timestamp. (Robert Collins)
* New ``TestCase`` decorator ``DecorateTestCaseResult`` that adapts the
``TestResult`` or ``StreamResult`` a case will be run with, for ensuring that
a particular result object is used even if the runner running the test doesn't
know to use it. (Robert Collins)
* New test support class ``testtools.testresult.doubles.StreamResult``, which
captures all the StreamResult events. (Robert Collins)
* ``PlaceHolder`` can now hold tags, and applies them before, and removes them
after, the test. (Robert Collins)
* ``PlaceHolder`` can now hold timestamps, and applies them before the test and
then before the outcome. (Robert Collins)
* ``StreamResultRouter`` added. This is useful for demultiplexing - e.g. for
partitioning analysis of events or sending feedback encapsulated in
StreamResult events back to their source. (Robert Collins)
* ``testtools.run.TestProgram`` now supports the ``TestRunner`` taking over
responsibility for formatting the output of ``--list-tests``.
(Robert Collins)
* The error message for setUp and tearDown upcall errors was broken on Python
3.4. (Monty Taylor, Robert Collins, #1140688)
* The repr of object() on pypy includes the object id, which was breaking a
test that accidentally depended on the CPython repr for object().
(Jonathan Lange)