0.9.24
~~~~~~
Changes
-------
* ``testtools.run discover`` will now sort the tests it discovered. This is a
workaround for http://bugs.python.org/issue16709. Non-standard test suites
are preserved, and their ``sort_tests()`` method called (if they have such an
attribute). ``testtools.testsuite.sorted_tests(suite, True)`` can be used by
such suites to do a local sort. (Robert Collins, #1091512)
* ``ThreadsafeForwardingResult`` now defines a stub ``progress`` method, which
fixes ``testr run`` of streams containing progress markers (by discarding the
progress data). (Robert Collins, #1019165)
0.9.23
~~~~~~
Changes
-------
* ``run.TestToolsTestRunner`` now accepts the verbosity, buffer and failfast
arguments the upstream python TestProgram code wants to give it, making it
possible to support them in a compatible fashion. (Robert Collins)
Improvements
------------
* ``testtools.run`` now supports the ``-f`` or ``--failfast`` parameter.
Previously it was advertised in the help but ignored.
(Robert Collins, #1090582)
* ``AnyMatch`` added, a new matcher that matches when any item in a collection
matches the given matcher. (Jonathan Lange)
* Spelling corrections to documentation. (Vincent Ladeuil)
* ``TestProgram`` now has a sane default for its ``testRunner`` argument.
(Vincent Ladeuil)
* The test suite passes on Python 3 again. (Robert Collins)
0.9.22
~~~~~~
Improvements
------------
* ``content_from_file`` and ``content_from_stream`` now accept seek_offset and
seek_whence parameters allowing them to be used to grab less than the full
stream, or to be used with StringIO streams. (Robert Collins, #1088693)
0.9.21
~~~~~~
Improvements
------------
* ``DirContains`` correctly exposed, after being accidentally hidden in the
great matcher re-organization of 0.9.17. (Jonathan Lange)
0.9.20
~~~~~~
Three new matchers that'll rock your world.
Improvements
------------
* New, powerful matchers that match items in a dictionary:
- ``MatchesDict``, match every key in a dictionary with a key in a
dictionary of matchers. For when the set of expected keys is equal to the
set of observed keys.
- ``ContainsDict``, every key in a dictionary of matchers must be
found in a dictionary, and the values for those keys must match. For when
the set of expected keys is a subset of the set of observed keys.
- ``ContainedByDict``, every key in a dictionary must be found in
a dictionary of matchers. For when the set of expected keys is a superset
of the set of observed keys.
The names are a little confusing, sorry. We're still trying to figure out
how to present the concept in the simplest way possible.
0.9.19
~~~~~~
How embarrassing! Three releases in two days.
We've worked out the kinks and have confirmation from our downstreams that
this is all good. Should be the last release for a little while. Please
ignore 0.9.18 and 0.9.17.
Improvements
------------
* Include the matcher tests in the release, allowing the tests to run and
pass from the release tarball. (Jonathan Lange)
* Fix cosmetic test failures in Python 3.3, introduced during release 0.9.17.
(Jonathan Lange)
0.9.18
~~~~~~
Due to an oversight, release 0.9.18 did not contain the new
``testtools.matchers`` package and was thus completely broken. This release
corrects that, returning us all to normality.
0.9.17
~~~~~~
This release brings better discover support and Python3.x improvements. There
are still some test failures on Python3.3 but they are cosmetic - the library
is as usable there as on any other Python 3 release.
Changes
-------
* The ``testtools.matchers`` package has been split up. No change to the
public interface. (Jonathan Lange)
Improvements
------------
* ``python -m testtools.run discover . --list`` now works. (Robert Collins)
* Correctly handling of bytes vs text in JSON content type. (Martin [gz])
0.9.16
~~~~~~
Some new matchers and a new content helper for JSON content.
This is the first release of testtools to drop support for Python 2.4 and 2.5.
If you need support for either of those versions, please use testtools 0.9.15.
Improvements
------------
* New content helper, ``json_content`` (Jonathan Lange)
* New matchers:
* ``ContainsAll`` for asserting one thing is a subset of another
(Raphaël Badin)
* ``SameMembers`` for asserting two iterators have the same members.
(Jonathan Lange)
* Reraising of exceptions in Python 3 is more reliable. (Martin [gz])
0.9.15
~~~~~~
This is the last release to support Python2.4 and 2.5. It brings in a slew of
improvements to test tagging and concurrency, making running large test suites
with partitioned workers more reliable and easier to reproduce exact test
ordering in a given worker. See our sister project ``testrepository`` for a
test runner that uses these features.
Changes
-------
* ``PlaceHolder`` and ``ErrorHolder`` now support being given result details.
(Robert Collins)
* ``ErrorHolder`` is now just a function - all the logic is in ``PlaceHolder``.
(Robert Collins)
* ``TestResult`` and all other ``TestResult``-like objects in testtools
distinguish between global tags and test-local tags, as per the subunit
specification. (Jonathan Lange)
* This is the **last** release of testtools that supports Python 2.4 or 2.5.
These releases are no longer supported by the Python community and do not
receive security updates. If this affects you, you will need to either
stay on this release or perform your own backports.
(Jonathan Lange, Robert Collins)
* ``ThreadsafeForwardingResult`` now forwards global tags as test-local tags,
making reasoning about the correctness of the multiplexed stream simpler.
This preserves the semantic value (what tags apply to a given test) while
consuming less stream size (as no negative-tag statement is needed).
(Robert Collins, Gary Poster, #986434)
Improvements
------------
* API documentation corrections. (Raphaël Badin)
* ``ConcurrentTestSuite`` now takes an optional ``wrap_result`` parameter
that can be used to wrap the ``ThreadsafeForwardingResult``s created by
the suite. (Jonathan Lange)
* ``Tagger`` added. It's a new ``TestResult`` that tags all tests sent to
it with a particular set of tags. (Jonathan Lange)
* ``testresultdecorator`` brought over from subunit. (Jonathan Lange)
* All ``TestResult`` wrappers now correctly forward ``current_tags`` from
their wrapped results, meaning that ``current_tags`` can always be relied
upon to return the currently active tags on a test result.
* ``TestByTestResult``, a ``TestResult`` that calls a method once per test,
added. (Jonathan Lange)
* ``ThreadsafeForwardingResult`` correctly forwards ``tags()`` calls where
only one of ``new_tags`` or ``gone_tags`` are specified.
(Jonathan Lange, #980263)
* ``ThreadsafeForwardingResult`` no longer leaks local tags from one test
into all future tests run. (Jonathan Lange, #985613)
* ``ThreadsafeForwardingResult`` has many, many more tests. (Jonathan Lange)
0.9.14
~~~~~~
Our sister project, `subunit <https://launchpad.net/subunit>`_, was using a
private API that was deleted in the 0.9.13 release. This release restores
that API in order to smooth out the upgrade path.
If you don't use subunit, then this release won't matter very much to you.
0.9.13
~~~~~~
Plenty of new matchers and quite a few critical bug fixes (especially to do
with stack traces from failed assertions). A net win for all.
Changes
-------
* ``MatchesAll`` now takes an ``first_only`` keyword argument that changes how
mismatches are displayed. If you were previously passing matchers to
``MatchesAll`` with keyword arguments, then this change might affect your
test results. (Jonathan Lange)
Improvements
------------
* Actually hide all of the testtools stack for assertion failures. The
previous release promised clean stack, but now we actually provide it.
(Jonathan Lange, #854769)
* ``assertRaises`` now includes the ``repr`` of the callable that failed to raise
properly. (Jonathan Lange, #881052)
* Asynchronous tests no longer hang when run with trial.
(Jonathan Lange, #926189)
* ``Content`` objects now have an ``as_text`` method to convert their contents
to Unicode text. (Jonathan Lange)
* Failed equality assertions now line up. (Jonathan Lange, #879339)
* ``FullStackRunTest`` no longer aborts the test run if a test raises an
error. (Jonathan Lange)
* ``MatchesAll`` and ``MatchesListwise`` both take a ``first_only`` keyword
argument. If True, they will report only on the first mismatch they find,
and not continue looking for other possible mismatches.
(Jonathan Lange)
* New helper, ``Nullary`` that turns callables with arguments into ones that
don't take arguments. (Jonathan Lange)
* New matchers:
* ``DirContains`` matches the contents of a directory.
(Jonathan Lange, James Westby)
* ``DirExists`` matches if a directory exists.
(Jonathan Lange, James Westby)
* ``FileContains`` matches the contents of a file.
(Jonathan Lange, James Westby)
* ``FileExists`` matches if a file exists.
(Jonathan Lange, James Westby)
* ``HasPermissions`` matches the permissions of a file. (Jonathan Lange)
* ``MatchesPredicate`` matches if a predicate is true. (Jonathan Lange)
* ``PathExists`` matches if a path exists. (Jonathan Lange, James Westby)
* ``SamePath`` matches if two paths are the same. (Jonathan Lange)
* ``TarballContains`` matches the contents of a tarball. (Jonathan Lange)
* ``MultiTestResult`` supports the ``tags`` method.
(Graham Binns, Francesco Banconi, #914279)
* ``ThreadsafeForwardingResult`` supports the ``tags`` method.
(Graham Binns, Francesco Banconi, #914279)
* ``ThreadsafeForwardingResult`` no longer includes semaphore acquisition time
in the test duration (for implicitly timed test runs).
(Robert Collins, #914362)
Remove devel/py-ctypes (only needed by and supporting python24).
Remove PYTHON_VERSIONS_ACCEPTED and PYTHON_VERSIONS_INCOMPATIBLE
lines that just mirror defaults now.
Miscellaneous cleanup while editing all these files.
0.9.12
~~~~~~
This is a very big release. We've made huge improvements on three fronts:
1. Test failures are way nicer and easier to read
2. Matchers and ``assertThat`` are much more convenient to use
3. Correct handling of extended unicode characters
We've trimmed off the fat from the stack trace you get when tests fail, we've
cut out the bits of error messages that just didn't help, we've made it easier
to annotate mismatch failures, to compare complex objects and to match raised
exceptions.
Testing code was never this fun.
Changes
-------
* ``AfterPreproccessing`` renamed to ``AfterPreprocessing``, which is a more
correct spelling. Old name preserved for backwards compatibility, but is
now deprecated. Please stop using it.
(Jonathan Lange, #813460)
* ``assertThat`` raises ``MismatchError`` instead of
``TestCase.failureException``. ``MismatchError`` is a subclass of
``AssertionError``, so in most cases this change will not matter. However,
if ``self.failureException`` has been set to a non-default value, then
mismatches will become test errors rather than test failures.
* ``gather_details`` takes two dicts, rather than two detailed objects.
(Jonathan Lange, #801027)
* ``MatchesRegex`` mismatch now says "<value> does not match /<regex>/" rather
than "<regex> did not match <value>". The regular expression contains fewer
backslashes too. (Jonathan Lange, #818079)
* Tests that run with ``AsynchronousDeferredRunTest`` now have the ``reactor``
attribute set to the running reactor. (Jonathan Lange, #720749)
Improvements
------------
* All public matchers are now in ``testtools.matchers.__all__``.
(Jonathan Lange, #784859)
* ``assertThat`` can actually display mismatches and matchers that contain
extended unicode characters. (Jonathan Lange, Martin [gz], #804127)
* ``assertThat`` output is much less verbose, displaying only what the mismatch
tells us to display. Old-style verbose output can be had by passing
``verbose=True`` to assertThat. (Jonathan Lange, #675323, #593190)
* ``assertThat`` accepts a message which will be used to annotate the matcher.
This can be given as a third parameter or as a keyword parameter.
(Robert Collins)
* Automated the Launchpad part of the release process.
(Jonathan Lange, #623486)
* Correctly display non-ASCII unicode output on terminals that claim to have a
unicode encoding. (Martin [gz], #804122)
* ``DocTestMatches`` correctly handles unicode output from examples, rather
than raising an error. (Martin [gz], #764170)
* ``ErrorHolder`` and ``PlaceHolder`` added to docs. (Jonathan Lange, #816597)
* ``ExpectedException`` now matches any exception of the given type by
default, and also allows specifying a ``Matcher`` rather than a mere regular
expression. (Jonathan Lange, #791889)
* ``FixtureSuite`` added, allows test suites to run with a given fixture.
(Jonathan Lange)
* Hide testtools's own stack frames when displaying tracebacks, making it
easier for test authors to focus on their errors.
(Jonathan Lange, Martin [gz], #788974)
* Less boilerplate displayed in test failures and errors.
(Jonathan Lange, #660852)
* ``MatchesException`` now allows you to match exceptions against any matcher,
rather than just regular expressions. (Jonathan Lange, #791889)
* ``MatchesException`` now permits a tuple of types rather than a single type
(when using the type matching mode). (Robert Collins)
* ``MatchesStructure.byEquality`` added to make the common case of matching
many attributes by equality much easier. ``MatchesStructure.byMatcher``
added in case folk want to match by things other than equality.
(Jonathan Lange)
* New convenience assertions, ``assertIsNone`` and ``assertIsNotNone``.
(Christian Kampka)
* New matchers:
* ``AllMatch`` matches many values against a single matcher.
(Jonathan Lange, #615108)
* ``Contains``. (Robert Collins)
* ``GreaterThan``. (Christian Kampka)
* New helper, ``safe_hasattr`` added. (Jonathan Lange)
* ``reraise`` added to ``testtools.compat``. (Jonathan Lange)
testtools is a set of extensions to the Python standard library's unit testing
framework. These extensions have been derived from many years of experience
with unit testing in Python and come from many different sources. testtools
also ports recent unittest changes all the way back to Python 2.4.