CHANGES
=======

2.4.0
-----

* Release 2.4.0
* Add myself to contributors list
* Add support for Python 3.7 and 3.8
* Cache pip directory
* Test CI on PyPy3
* Tell pip not to install for Python 3.4
* Drop support for EOL Python 3.4
* Extra space expected in PyPy output
* PyCharm IDE unittest detection compatibility fix
* Don't use eval()
* Fix the tests on Python 3.7
* Drop support for EOL Python 3.3
* Ignore IDE metadata
* Update classifiers
* Remove old Python 2.6 code
* Spelling fixes (#261)
* Python 3.6 invalid escape sequence deprecation fixes (#262)

2.3.0
-----

* Release 2.3.0
* Add ResourcedToStreamDecorator test result decorator for testresources integration (#243)
* Make KeysEqual usable with no arguments, i.e. match a dict with no keys. (#241)
* Add testtools.assertions to the documented API modules (#257)
* Add Python 3.6 to the list of Travis targets (#255)
* Don't add file details without content (#252)
* Don't run Sphinx on Travis Python 3.3 target (#250)
* Make twistedsupport and tests work on Python 3

2.2.0
-----

* Release 2.2.0
* Depend on the extras 1.0.0 release
* Unbreak fixtures test suite / use of gather\_details
* UTF-8 encode Twisted logs (allenap)
* Use inlineCallbacks instead of deferredGenerator
* Fix \_lp\_release: NEXT is case sensitive

2.1.0
-----

* Release 2.1.0
* Correct docs for skip deprecation
* Add matchers for detecting emitted warnings
* Revert usage of pyrsistent
* Add unique\_text\_generator
* Become compatible with newer Fixtures \_setUp() API
* Better handling of KeyboardInterrupt
* Fix example in docstring for \`failed\`
* Move all Twisted code to twistedsupport package
* Revert "Move all Twisted code to twistedsupport package"
* Move all Twisted code to twistedsupport package
* Add Always & Never matchers
* Support TestResults without stop/shouldStop
* Stop using deprecated \`skip()\` internally

2.0.0
-----

* Release 2.0.0
* Options for logging in AsynchronousDeferredRunTest
* Twisted tests now pass under --debug-stacktraces
* Decouple log handling from Deferred wrangling
* Fix typo: flexability
* Review tweaks
* Drop support for Python 2.6 and 3.2

1.9.0
-----

* Release 1.9.0
* Missed one
* 19.4.1 refers to importlib machinery. Avoid that
* See if setuptools 19.5 is bad
* PIP\_VERSION is used by pip itself
* Correct spelling of 'less than 8', maybe
* Use only pip 7.\* on pypy3 & py3.2
* Longer timeout not necessary
* NEWS update
* Handle case where Deferred fires after timeout
* Explicitly separate fake stop method
* Lint & copyright
* NO\_RESULT -> has\_no\_result
* Make twistedsupport a package
* Rename \`successful\` to \`succeeded\`
* Improve NEWS
* Conditionally import matchers
* Use non-inplace install and add a comment
* New module for twisted support code
* Minor documentation tweaks
* Make no\_result a constant
* Style & documentation tweaks from review
* Review tweaks
* Import extract\_result from correct location
* expectThat works under AsynchronousDeferredRunTest
* Correct string literal syntax
* Avoid .format
* Give up on some TODOs
* Maybe we need to install our thing?
* Add requirements for readthedocs
* Move non-matcher code to \_deferred
* Nicer links
* Link to Twisted API docs
* More todos
* Documentation with examples
* Pass the Deferred to the handlers
* Docstring formatting
* Use \_on\_deferred\_result in \_NoResult
* Make \_on\_deferred\_result transparent to Deferred
* Extract common Deferred logic
* Use same error messages as Twisted
* Matcher for Deferreds that have failed
* TODOs & XXXs
* successResultOf equivalent
* Docstring formatting
* Docstring
* Move formatting to exception
* Extract \`extract\_result\`
* Matcher for no result
* Actually use \`skipException\`
* NEWS update
* Suppress skip traceback based on skipException
* Deprecate Python 2.6
* Actually use pformat in errors
* Deterministic test
* NEWS update
* NEWS update
* Factor out counting
* ids has no apostrophe
* Lint
* Collect all duplicate test id's before raise
* Document checking release milestone before release
* Don't need our own assertRaisesRegexp
* Clarify the tests
* Add assertRaisesRegexp method
* Document early evaluation of details
* Update NEWS
* Deprecate TestCase.skip
* Deprecate \_BinaryMismatch.{expected,observed}
* Make sure reference and actual align
* Put expected on the right for binary mismatch
* Fix typo
* Support Python 3.5, announce deprecation 3.2
* API docs for deferredruntest
* Need Deferred reference
* Remove scare warnings from deferredruntest
* Documentation tweaks
* Move Twisted docs to separate file
* Better error message for MatchesListwise
* NEWS update
* Clarify some things
* Move \_cleanups reset to \_reset
* Rewrite patch tests using make\_test\_case
* \`throw\` helper
* Rewrite addCleanup tests in terms of make\_test\_case
* Use method for value, to avoid \`self\` weirdness
* Move useful matchers to helper module
* Move unique\_id\_gen to reset
* Clean up comments
* No need for special case
* Get pre\_set\_up & post\_tear\_down from scenario
* Spell setUp consistently
* Allow pre setUp & post tearDown to be set
* Complete suite of tests
* Encapsulate construction
* Start to use generated behaviors
* Wrap the constructor, hide the class
* Handle more test bodies
* Begin implementing full matrix
* Easy review comments
* 15.5.0 claims to support Python 2.6 but does not
* Run tests on last Twisted version to support 2.6
* Latest Twisted doesn't run on Python 2.6
* Non-deterministic test case
* Simplify cleanup code
* Rename all\_sample\_cases\_scenarios to deterministic\_sample\_cases\_scenarios
* Treat tear down failure as a scenario
* Begin to write scenario-based tests
* Split run twice tests to separate case
* Acquire testscenarios as a dependency
* Fix travis :(
* Add testscenarios for use by tests
* Handle failure in tearDown
* Test \_run\_teardown, rather than tearDown
* Allow tests to be run twice
* Don't use private APIs

1.8.1
-----

* Update NEWS for 1.8.1
* Hide TestRecord and StreamToTestRecord
* Old-fashioned set syntax
* Abstract text\_or\_bytes
* Add pyrsistent dependency to Travis CI
* Change PRecord to PClass
* Move test\_dict\_to\_case near StreamToDict
* Don't use StreamToDict internally
* \_streamer -> \_hook
* StreamSummary with composition, not inheritance
* Extract StreamToTestRecord base class
* Move \_make\_content\_type closer to where it is used
* Put to\_test\_case logic on TestRecord
* Make \_status\_map persistent
* Move test\_dict\_to\_case closer to test\_dict definition
* Remove temporary variable 'case'
* Extract got\_file
* Extract got\_timestamp function
* Move creation logic to TestRecord itself
* Actually use TestRecord internally
* Extract methods for making and updating record
* Extract \_make\_content\_type
* Use \`case\` consistently, over \`\_inprogress[key]\`
* Use name for interim states
* Aspirational documentation
* Remove VWS
* Update PlaceHolder indentation
* Restore & deprecate domap
* Spell out \`f\` and \`xs\`
* Drop \`\_\_metaclass\_\_\` declaration
* Document confusing \`domap\`
* Remove duplicate implementation of method
* Allow event\_log to be passed to result doubles
* Fix lint in testresult.real
* Lint clear-up
* Uncap test matrix entries for modern Twisted
* Fix Travis matrix.include
* Only run Twisted tests on Python 2
* Test with Twisted 13.0.0/15.2.0
* Port twisted.deferredruntest to Twisted >= 15.1.0
* Update hacking documentation
* Fix tests with unittest2 1.1.0 and higher
* Programmatically declare test dependencies
* Fix the call to the parent setup

1.8.0
-----

* Release 1.8.0
* Switch to pbr as a build system
* Add some custom matchers to make deferred log tests more readable
* Simplify AsynchronousDeferredRunTest.\_run\_core's StringIO handling
* Rewind the deferred test log before attaching it
* Open 1.8.0 for dev
* Release 1.7.1
* Clamp Sphinx below 1.3 for travis on pypy3/3.2
* Fix pypy3 tests by using ceil when reporting duration
* Fix building universal wheels on Python 3
* Open next version
* Release 1.7.0
* Fix output of empty attachments
* Open 1.7.0 again
* Bug #1430076 fix installing when extras is not installed
* Opening 1.7.0 for development
* Release 1.6.0
* Overhaul exception reporting
* Release 1.5.0
* Show import error details
* Release 1.4.0
* Fix setUpClass upcalls on Python 2.6
* Release 1.3.0
* Build universal wheels
* Fix setup.py to work without six installed
* Fix skipping setUpClass with self.skipException
* Release 1.2.1
* Use a PEP-440 dev version instead of snapshot-
* Express our required unittest2 version
* Opening 1.2.1 for development
* Release 1.2.0
* Expand test matrix to include Python 3.4 and pypy3
* Pin Pygments below 2.0 for our 3.2 build
* Use unittest2 TestProgram implementation
* Update testtools.compat.\_\_all\_\_
* Make discover run the same tests as 'make test'
* Improve support for discovery on testtools.tests
* Fixup travis. OOPS
* Depend on unittest2
* We now publish wheels of testtools
* Fixed docstrings in content.py
* Make text\_content more explicit about the types that it accepts
* Fix unit tests which failed under pypy due to a change in the way tracebacks were reported
* Release 1.1.0
* Fix masking of fixture.setUp errors
* Openning 1.0.1 for development
* Release 1.0.0
* Fix handling of uncatchable exceptions
* Fix issue where using the skip\* family of decorators still ran the setUp and tearDown test methods
* Document backwards compatibility policy
* Document release pre-requisites
* Opening 0.9.40 for development
* Unbreak discovery from 0.9.38
* Opening 0.9.39 for development
* Bumped version number for release
* Backport fix for load\_tests in package modules
* Implement discover import error detection on 2.6
* Fix broken links to old mumak.net documentation
* Go back to capitalized testtools for now
* Fix rST error in \`StreamResult\`
* Initial cut of API changes
* Ignore all the things
* Some minor tweaks
* Opening 0.9.38 for development
* Release 0.9.37
* Honour stdout on TestProgram more fully
* Handle content objects better
* Opening 0.9.37 for development
* Release 0.9.36
* Error if setUp or tearDown are called twice
* Revert back to explicit test identification
* Remove newline in url that broke the link in the docs
* abandoned pull request revived to comply with comments in review
* Raise a TypeError when text\_content is passed bytes, so we get an error as early as possible
* Added failing test for python 3.4 unittest.expectedFailure decorator changes
* Add optional message to assert(Not)In
* Opening 0.9.36 for development
* Fix automation harder
* Release 0.9.35
* Use a credentials file rather than global keyring
* Don't try to release 'NEXT'
* Add expectThat method to testtools.TestCase
* Build docs as part of the Travis build
* Add assert\_that NEWS entry
* Copy assertThat docstring on to assert\_that
* Add assert\_that function documentation
* Move assertThat tests to separate module and apply them to assert\_that as well
* Create assert\_that function and use it from TestCase.assertThat
* Add NEWS entry for Python 2.4/2.5 code path removal
* Use explanatory functions for gnarly exception handling logic
* Use super correctly
* Remove workaround for getincrementaldecoder not being in 2.4
* Remove documentation suggestion that we support anything older than 2.6
* Revert "Workaround 2.4 threading bug in test\_spinner."
* Use a context manager as suggested by a comment
* Don't support Python 2.4 test method naming
* Remove Python 2.4 deprecation warning special-casing
* Remove (always skipped) test for string exceptions
* Remove another Python 2.4 special case
* Remove and relocate some now un-needed compatibility functions
* We no longer need to handle Python 2.4's KeyboardInterrupt specially
* Remove trailing whitespace
* We no longer need to handle string exceptions in TestCase
* Use proper super call in MismatchError
* Open 0.9.35 for dev
* Release 0.9.34
* Fix test\_bom Python 3.3 test failure
* In Python 3.3, if there are duplicate test ids, tests.sort() will fail and raise TypeError
* Add 'force\_failure' feature to testtools.TestCase
* Add testtools.StacktraceContent
* Fix NEWS item sorting
* Indicate failed imports in list-tests
* Be more paranoid about list-tests behaviour
* Cleanup sys.modules correctly in test\_run
* run network test on the loopback interface only
* Export AnyMatch properly
* Some notes on discussing changes
* Fix Typo in StreamResult docs
* Export testtools.content.json\_content properly
* Release 0.9.33
* Fix StreamSummary counting of testsRun
* Fix NEWS formatting
* Comment about disabled test
* Add StackLinesContent, reimplement TracebackContent to use this new class
* Remove unused code
* Added missing line in NEWS file for features merged previously
* Refactor testtools.compat.\_format\_exc\_info into two separate functions
* Add the 'addDetailUniqueName' method to TestCase
* Fix a KeysEqual bug
* Setup gerrit metadata
* Fixed a few typos in the documentation related to IsDivisibleBy
* Opening 0.9.33 for development
* Prepare for 0.9.32
* Disable hiding internal frames within user frames
* Fix TestSkipped importing with unittest2
* Update NEWS
* Clarify docstrings for skipIf and skipUnless
* Move HasLength doc to the correct section
* Clarify docstrings for skipIf and skipUnless
* fix a typo
* adjust HasLength doc position
* Opening 0.9.32 for development
* Release 0.9.31
* Teach ExpectedException how to annotate errors
* Opening 0.9.31 for development
* Release 0.9.30
* Make epytext documentation work
* Fix doc builds
* DecorateTestCaseResult was missing some used attributes in its exclusion of forwarded attributes
* ExtendedToStreamDecorator wasn't using kwargs consistently
* Allow customisation of testtools.run --list-tests behaviour
* Add a StreamResult Router
* Fix assertRaises when the exception has a metaclass
* Add a StreamResult safe for use in threaded/concurrent code
* Add a timestamping StreamResult
* Fixed SyntaxError when installing via Python 3
* Add StreamTagger, for tagging StreamResult events
* Add an adapter to adapt StreamResult event streams into ExtendedTestResult
* Add an adapter to convert ExtendedTestResult to StreamResult
* Add a dedicated interface for controlling an in-progress TestRun
* Add StreamSummary to generate summary statistics and capture failures
* Provide a loosely typed buffer layer for simple processing of completed tests
* Adds a CopyStreamResult which copies StreamResult events to multiple outputs
* Adds a recording StreamResult for writing tests with
* This defines a new sort of TestResult, StreamResult
* Add a helper for decorating the result object given to \`\`case.(\_\_call\_\_/run)\`\` - DecorateTestCaseResult
* Add support for timestamp events to Placeholder objects
* Placeholder couldn't hold tags, which limits its use
* The error message for setUp and tearDown upcall errors was broken on Python 3.4. (Monty Taylor, Robert Collins, #1140688)
* The ContentType repr() incorrectly used , instead of ;
* Add NEWS entry for pypy fix
* Make test pass with PyPy
* Handle broken test run() methods in ConcurrentTestSuite
* Ignore .testrepository more effectively
* Opening 0.9.30 for development
* Release 0.9.29
* Report filenames in upcall errors
* Further fix to unicode\_output\_stream
* Fix handling of io.StringIO in unicode\_output\_stream
* Opening 0.9.29 for development
* Release testtools-0.9.28
* Add travis-ci continuous integration configuration
* Fix epytext for \*args
* Add a nosetests attr-like extension to enable more ways of filtering tests
* Delete Python 2.4 only code
* Instructions for tagging with git
* Be clear on when HasLength passes or fails
* Code quote \*args and \*\*kwargs
* Fix minor rST error
* Whitespace correction
* Correct URL for testing cabal
* Refer to Github, not Launchpad
* Remove logic to get version from bzr revno
* Code is now hosted on Github
* Use .gitignore rather than .bzrignore
* Rename README to README.rst
* Refer to LICENSE, rather than README
* Opening 0.9.28 for development
* Release 0.9.27
* \* New matcher \`\`HasLength\`\` for matching the length of a collection.   (Robert Collins)
* \* New matcher \`\`HasLength\`\` for matching the length of a collection.   (Robert Collins)
* \* New matcher \`\`MatchesPredicateWithParams\`\` make it still easier to create   adhoc matchers. (Robert Collins)
* \* We have a simpler release process in future - see doc/hacking.rst.   (Robert Collins)
* Release 0.9.26
* Brown paper bag fix: failed to document the need for setup to be able to use extras. Compounded by pip not supporting setup\_requires
* Release 0.9.25
* \* \`\`python -m testtools.run --load-list\`\` will now preserve any custom suites   (such as \`\`testtools.FixtureSuite\`\` or \`\`testresources.OptimisingTestSuite\`\`)   rather than flattening them.   (Robert Collins, #827175)
* Update docs about 2.4 and 2.5 compatability
* \* Testtools will no longer override test code registered details called   'traceback' when reporting caught exceptions from test code.   (Robert Collins, #812793)
* \* Testtools now depends on extras, a small library split out from it to contain   generally useful non-testing facilities. Since extras has been around for a   couple of testtools releases now, we're making this into a hard dependency of   testtools. (Robert Collins)
* Post-release merge of 0.9.24
* Release 0.9.24
* Fix grammatical error
* \* \`\`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)
* \* \`\`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)

0.9.23
------

* Release 0.9.23
* \* \`\`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)
* Add a Python 3 Trove entry
* Restore test suite passing status on Python 3
* Restore test suite compatability with Python 3.x
* Adjust trunk for TestToolsTestRunner change
* New matcher, AnyMatch
* \* \`\`testtools.run\`\` now supports the \`\`-f\`\` or \`\`--failfast\`\` parameter.   Previously it was advertised in the help but ignored.   (Robert Collins, #1090582)
* \* \`\`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)
* NEWS bump
* New matcher: AnyMatch
* Post 0.9.22 release fixup
* Release 0.9.22
* \* \`\`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)
* Typo in doc and a fix for TestProgram being constructed without an explicit testRunner argument
* Not zip\_safe
* Post-release cleanup
* Release 0.9.21
* Re-expose DirContains
* Post-release cleanup
* Release 0.9.20
* Expose new dict matchers
* Expose dict matchers
* Remove a dead line of code in compat.py
* Bump for release
* Fix Python 3.3 failures and make tests pass in release tarball
* Address mgz's comment
* Broaden the check to include PermissionError
* NEWS update
* Fix all of the cosmetic Python 3.3 failures
* Remove HACKING and MANUAL from MANIFEST, as they are now in docs. Should silence warnings about missing files
* Include matchers
* Oops. Should have been committed
* Bump to 0.9.18 final
* Prep for 0.9.18 release
* Release 0.9.17
* Release 0.9.17
* Correct handling of text vs bytes in json content type (mgz)
* Fix --list (lifeless)
* \* \`\`python -m testtools.run discover . --list\`\` now works. (Robert Collins)
* Epytext fixes
* Fix epytext errors
* Update documentation to refer correctly to supported Python versions
* More documentation updates
* Update overviews
* Update the README for new Python versions
* Split testtools.matchers into several submodules
* Rename core to impl
* NEWS entry
* More \_\_all\_\_ stuff
* Add interface again
* Rationalize imports
* Clear out \_\_init\_\_
* Move MatchesPredicate to \_higherorder
* Move MatchesRegex to \_basic
* Split up the tests
* Massive split
* Flakes
* Move filesystem tests
* Import all from basic
* Move the tests
* Move basic matchers into separate module
* Notes
* Move the filesystem matchers out
* Move the tests to match the module
* TODOs
* Create a package for matchers, move all of the existing matchers into \_core and expose them all from the package's \_\_init\_\_
* Post-release bump
* Release 0.9.16
* Fix up  SameMembers
* Fix a glitch
* Include what's missing and what's extra
* Move \_format out
* Restore properly
* Get the other matcher passing the tests
* Explicitly encode JSON data
* Drop support for 2.4 and 2.5
* Add dict matchers.  Merges dict-matcher
* Rename the matchers
* Make it more clear what \_CombinedMatcher is
* Rename dict of matchers to expected
* Heaps of docstrings
* Restore accidentally deleted docstring
* Move and rename helper
* Be a little more explicit
* Docstrings
* Save code through subclassing
* Remove a tiny bit of duplicate code
* Revert keys equal
* Makes more sense to me this way. Rename PrefixMismatch to PrefixedMismatch. Rename AnnotatedMismatch to PostfixedMismatch, alias to original name
* Add a thing like MatchesAll but that takes a dict, make the new dict matchers use that
* Back to being more data driven
* Clean up
* Define in terms of matchers
* Try another approach
* More explicit
* Extract something more general out of KeysEqual
* Copy the rule-based implementation
* Return the helpers to matchers.  Try a more rule-based implementation
* SuperDict!
* Add a subdict
* Less repetition
* Explain what I mean
* Drop a couple of XXXs
* Make things clearer, maybe
* Move to helpers
* Spell 'Extra' and 'Missing' differently
* Last minute TODO notes
* Maybe a little simpler
* Simplify implementation by introducing more mismatches
* Show mismatched keys nicely
* Simplify by creating a couple of slightly weird helper functions
* Drop the 'Differences' header from MismatchesAll
* More detailed information about missing & extra
* Initial cut of dict matcher.  Really poor error reporting.  No docstrings
* Fix JSON tests
* Fix some tests to account for new py3k quirks
* Fix json\_content helper on pythons with a unicode native str type
* Fix JSON content type test to not expect charset param
* Reraising of exceptions in Python 3 is more reliable. (Martin [gz])
* Simply reraise from the exception instance on py3k
* Only assert that a reraised traceback has the original as a tail
* Add tests for compat.reraise details that fail on py3k
* Add json\_content
* Don't specify encoding for JSON.  Already known to be UTF8
* Add a JSON content type
* Add a json\_content helper
* New matcher, SameMembers
* Hopefully a nice error message
* Implement \_\_str\_\_
* Guarantee unhashable things can be handled
* Initial cut of SameMembers
* OK, it wasn't r261 that broke Jenkins, but rather, Jenkins broke between r260 and r261. Great
* r261 broke Jenkins. Reverting
* Add new matcher, ContainsAll. Thanks rvba
* Open 0.9.16 for business
* Clarification in hacking.rst
* 0.9.15 ~~~~~~
* \`\`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)
* Refactor tests.  Improve doc
* Add ContainsAll matcher
* Fix doc
* Announce intentions
* Make sure the tests run & pass in Python 2.4 as well
* Make the tests pass in Python 2.4 again
* Restore Python 3 compatibility.  Thanks Benji!
* use a better name
* restore python 3 compatability
* Don't leak tags
* Clear the tags once we send them
* Failing test to reproduce the bug
* A million tests for threadsafeforwarding result, and a bug fix
* ConcurrentTestSuite now takes a wrap\_result parameter
* Better docs
* Parametrize wrap\_result, rather than relying on inheritance
* Documentation tweaks
* Add a TestResultDecorator that tags every test
* pyflakes
* Add a hook for wrapping the per-thread result
* Initial cleanup
* Test local tag support
* Rename the method to avoid negatives and hopefully increase clarity
* More tests for global tags, addressing a logic bug
* Start testing TSFR's tag support
* Actually test the threadsafe bit, sort of
* Split up test\_forwarding\_methods
* Make \_merge\_tags a function
* Change the API so that merge\_tags takes a tuple of (new, gone) for both parameters
* rewrite the tags\_helper test to be a little clearer
* Make the event log when making the result
* Make the results in the tests, rather than setUp
* Fix the indentation!
* Add test-result-decorator
* Add test-by-test-result
* Change get\_parent() to simple attribute access
* Better tag handling
* Add TestByTestResult
* Bring over TestResultDecorator
* Fix typo. Thanks Gary
* Handle the nesting behaviour that subunit describes
* Check that startTestRun always resets tags
* Begin to have proper interface tests for tag support
* Documentation
* Remove the layer of abstraction
* Drop the function-based approach
* A class-based approach
* Abstract the methods in the tests so we can experiment with a different approach
* Simplify
* Make it possible to get the parent context
* Cleaner, shorter
* Allow for child contexts
* Externalize tag support as a bit of an experiment
* Remove an incorrect part of the testing contract for Python 2.7 and 2.6
* Delete a redundant test added during this branch
* Simplify \_add\_reason a little
* \* \`\`PlaceHolder\`\` and \`\`ErrorHolder\`\` now support being given result details.   (Robert Collins)
* Notes for 0.9.14
* Restore private method that subunit relies on
* Restore \_exc\_info\_to\_unicode so that subunit can continue to work with latest testtools
* Make the tests pass on Python 3
* Release 0.9.13
* Move stack trace logic to TracebackContent, simplify the way we handle verbose tracebacks. FullStackRunTest no longer aborts the test run if a test raises an error
* More NEWS
* NEWS
* Tweaks
* Copyright. Flakes
* Fix a glaring bug where any test that raised on FullStackRunTest would abort the test suite
* Use TracebackContent as the point to pivot whether or not we hide stack
* Have everything use TracebackContent
* Give TracebackContent the ability to format exceptions itself, rather than delegating to TestResult
* Use the new helper
* Add as\_text, a content helper
* I think this is the right thing to do
* Asynchronous tests no longer hang when run with triial
* Make sure that we actually capture the list of observers, rather than just storing a reference
* assertRaises includes the function name in its error message
* Document
* In the NEWS
* Move to testcase so it doesn't appear in stack traces
* Extract Nullary and move it into helpers
* Format properly
* NEWS update
* Make sure the repr of the callable passed to assertRaises is included in the error message generated when assertRaises fails
* \`\`ThreadsafeForwardingResult\`\` no longer includes semaphore acquisition time in the test duration (for implicitly timed test runs). (Robert Collins, #914362)
* \`\`MultiTestResult\`\` supports the \`\`tags\`\` method. (Graham Binns, Francesco Banconi, #914279)
* Fixed ThreadsafeForwardingResult so that it supports tags
* Added a test for general tags()
* Rob says MultiTestResult is fixed
* Refactored TestResult.tags() and removed unnecessary reimplementations. Actually implemented tags() in the base class, too
* Added tags() stubs to various TestResult implementations
* Test suite fixes for Python 3 and pypy
* Correctly skip test\_real\_path if os.symlink is unsupported
* Silly dancing over a single space difference in SyntaxError formatting depending on codec implementation
* Seems pypy forgets to lower() the cookie encoding name
* Avoid fixed-in-py3k-only resource usage bug with reading .tar.gz files
* Close files properly in test\_from\_stream\_eager\_loading
* Respond to helpful review suggestions from Robert
* End user docs
* Allow passing arbitrary matcher to FileContains
* DirContains now takes a matcher also
* Docstrings for MatchesPredicate
* Many new matchers
* Remove TODO list
* NEWS update
* More doc tweaks
* Doc tweaks
* Lots of docs
* More matchers still
* Add SamePath
* Add tarball matcher
* Documentation
* Add a first\_only option to MatchesListwise
* Remove heaps of boiler plate by using MatchesPredicate
* Add a matcher that just takes a predicate and a message
* Add a short-circuit option to MatchesAll
* Add FileExists and correct tests for DirExists
* Even more tests
* Initial import of matchers from pkgme, plus some tests and some edits
* Include version number in the snapshot version, so virtualenv can work proper
* Add the version to the snapshot string
* Hide even more of the stack by default
* Handle earlier Python versions
* Python 3 work
* Hide stack from MismatchErrors
* Copy in exc\_info\_to\_string, rather than the funky monkey patching
* Better repr for results
* Better repr for results
* Align actual and reference = symbols
* Prepare for release
* Test that not passing multiline to text\_repr defaults based on input
* Add third state to multiline argument of text\_repr and comment the internal logic
* Add cautions about unprintable strings to Mismatch documentation
* Fix spelling error noted in review by jml
* Extra tests to ensure multiline quoting is correct on Python 3
* Avoid potential bytes and unicode mixing with DocTestMismatch on Python 2
* Fix MatchesRegex mismatch description with a little transcoding dance
* Make StartsWith and EndsWith stringify more like other matchers
* Use text\_repr for DoesNotStartWith and DoesNotEndWith describe methods
* Hack over bump with bytes till things can be rewritten in a better way
* Test and fix \_BinaryMismatch.describe long forms using text\_repr
* Remove now unused to\_text alias for unicode string type from compat
* Make MismatchError stringification return appropriate types on Python 2
* Use (possibly extended) repr rather than "%s" for matchee in verbose form of MismatchError
* Messy first pass at implementing text\_repr
* Correct a couple of the examples for text\_repr tests
* Tests for repr function to replace broken stringification schemes in matchers
* Tests can be run independently now
* Fix documentation to refer to fromExample, rather than non-existent from\_example
* HACKING updates
* Hide the stack using a RunTest method
*  \* Migrate assert\* methods to use matchers  \* Add optional message parameter to assertThat
* Remove the word 'present', which is unnecessary
* Review changes
* \*  \`\`MatchesException\`\` now permits a tuple of types rather than a single type   (when using the type matching mode).  (Robert Collins)
* Port assertIsInstance to matchers
* Add an IsInstance matcher
* assertNotIn using assertThat
* Reduce spelling of assert\* functions which call assertThat
* \* 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)
* More convert-to-matchers tweaks
* Migrate assertIn to be matcher based
* New matcher Contains
* Some new docs
* Take parameters
* Docstring
* Use the right level API to check the error output
* NEWS
* Add an example
* Correctly handle unicode output from doctest example in DocTestMatches
* NEWS update
* Trailing whitespace nit
* Implement \_NonManglingOutputChecker class to work around doctest problems in recent Python versions
* Correct tests to expect unicode from describe and Python 3 str
* Oh, and the bug itself
* assertThat docs & NEWS update for change
* Add MismatchError, with tests. Change assertThat to raise MismatchError rather than AssertionError. Fixes bug 804127, I hope
* Add 'to\_text', a compatibility helper that turns an object into a unicode string
* Failing test
* Documentation for placeholders
* Don't include a symlink to NEWS, instead generate docs on the fly
* Generate news symlink when making docs
* Ahem
* Don't depend on fixtures to run the tests
* Nicer regex error message
* Make it so the test suite will run without fixtures installed
* Tests don't run if fixtures is not there
* News update
* Nicer error message for regex fail
* ExpectedException now more useful
* Fixes for Python 2.4, 2.5 & 3.x. Add a build script that runs tests against all versions. Make a 'scripts' directory for all build scripts
* Add reraise helper
* NEWS & docs
* Show that we get the mismatch if passed in
* ExpectedException will now match any exception of the type by default, and can take any kind of matcher
* Add an option to AfterPreprocessing to hide the extra annotation
* Move update-rtfd script in
* Add a link to the API docs. Just in case
* Export 'reactor' to tests running with Twisted
* More robust against slow computers
* For some reason, using string here caused the subunit stream to get corrupted
* Content takes bytes, not text
* Not sure if this is correct, but it makes the test pass
* Python 3 changes
* A version that actually works
* Add helper
* Annotations and fixes
* Remove the '.' from the name so jenkins doesn't think that they are sub-components
* Use the repr of the exception object, rather than specifying the string explicitly. Makes it work on Python 2.4
* Missed one
* Can't use 'with'
* Make a note
* Might as well make it runnable
* Fix for when tests are run from other directory
* Some docs
* Add a script that runs the tests against all installed Pythons
* Move \_lp\_release into 'scripts'
* Make the directory
* Update NEWS to reflect mgz's initial work on stack frame bug
* Update NEWS to reflect mgz's contribution
* Add something to update rtfd docs
* Include NEWS in generated docs
* Tweaks to make NEWS a little nicer in generated docs
* Link NEWS from Sphinx docs
* Make assertThat errors less verbose by default
* Allow MatchesException to take any matcher
* Don't show testtools' own stack frames when showing errors in test runs
* Switch to using a FunctionFixture, per Rob's suggestion
* Add a new matcher \`\`AllMatch\`\`
* Change gather\_details to take dicts, not detailed objects
* Correct the spelling for AfterPreprocessing
* Micro-optimize
* Fix typo
* Change gather\_details to take a dict, rather than detailed objects
* Docstring update
* Make the error message a little better
* Oh, actually, make it work. Update the description tests
* Update description test
* Allow value\_re to be a matcher
* Use MatchesRegex internally in MatchesException. Change MatchesRegex to have a nicer error message
* Fix test\_traceback\_formatting to work correctly with Windows
* NEWS update
* Completely unused code
* Direct tests for assertThat output
* No need to be so verbose about the matcher. Trust the mismatch to know how to display the error
* NEWS entry
* Export reactor to the test
* More NEWS
* Docs and export
* Document FixtureSuite
* Tests for safe\_hasattr
* Move safe\_hasattr
* Be explicit in our higher level tests about what levels of the stack we want to see
* Make sure we show testtools own stack levels during run
* Use matchers for better tests
* Bring docs up to date with new spelling
* NEWS update & comments
* Rename AfterPreproccessing to AfterPreprocessing, keeping a backward compatibility shim
* Add FixtureSuite and a fixture for hiding/showing the debug levels of stack
* NEWS and docs
* Add a new matcher
* Cleanups
* Helper method to show and hide test results
* Don't re-export from helpers
* Add some more convenient ways to match stuff
* Docs and news update
* Add byMatcher
* NEWS and doc update
* Hide many testtools frames on the stack
* Docs & NEWS update
* Add a 'byEquality' helper
* Display less boilerplate in test failures and errors
* Rename test\_testtools to test\_testcase for greater consistency
* Revert previous change, since it breaks the test suite
* Manually merge in the diff
* Incrementally improve DocTestMatchers handling of unicode
* Correctly display non-ASCII unicode output on terminals that claim to have a unicode encoding. (Martin [gz], #804122)
* Split the compat test
* Automate the Launchpad part of the release process
* Fix test on Python 3
* NEWS update
* Make it live
* Add some more checking before actually releasing to prevent embarrassing mistakes
* Close the milestone after releasing
* Untarget from milestone if not fixed
* Remove the dry run support
* Integrate the new release script into docs & Makefile
* Many fixes based on testing against staging
* Clean up
* Wrap unicode streams on Python 2 so writing as well as printing unicode to them works
* Use the right APP\_NAME
* Some refactoring
* Instrument more. Create the new milestone. Mark bugs as fixed
* Get the release name from NEWS
* More constants
* Relatively known good state
* Correctly spell next
* Restore matchers
* Move the "Run tests" line closer to OK
* Incomplete fix for using unicode with DocTestMatches, needs doctest.\_indent issue fixing still
* Oh man I hope this works
* Python 3 fixes. Test suite now runs with Python 3
* Add public matchers to testtools.matchers.\_\_all\_\_
* Also specially mark up tracebacks when we convert them to strings
* Work with Python 3
* NEWS update
* Remove XXX
* Update documentation
* Combine single-line attachments
* Assume that 'traceback' is the special attachment
* Support the special attachment in multiple versions
* Aim closer at the actual results we want
* A more integration-y test for our current behaviour
* Basic support for a "special" text attachment
* Factor out text attachment formatting
* Don't have a line below the final text attachment
* Copyright
* Don't say "Text attachment"
* Reduce the amount of duplicated code
* Add a new Matcher, GreaterThan, to complement LessThan
* API docs
* NEWS entry
* Fix up whitespace problems
* Add a convenience method to Annotate that just passes through when there's no message. Make the built-in assertions use that
* Use Is, rather than Equals
* Flakes
* New convenience methods, assertIsNone and assertIsNotNone
* NEWS update and a formatting cleanup
* \* Add convenience methods assertIsNone and assertIsNotNone
* \* New GreaterThan matcher
* 0.9.11 released
* release 0.9.11
* NEWS entry
* LICENSE vs README normalization
* Add myself to the authors list
* Add tests for error\_callback
* Add an error\_callback parameter to try\_import and try\_imports
* A bunch of improvements to detail & fixture handling, courtesy Gavin Panella
* Hide copy\_content, it's internal only
* Expose gather\_details from \_\_all\_\_
* NEWS update, make sure Gavin's in the credits
* Improve copy\_content()'s docstring
* Fix closure error when gathering multiple details from a fixture
* Gather details from fixtures that fail to set-up
* Change gather\_details()'s signature and update the docstring
* Change TestCase.\_gather\_details() into a plain function so that it can be reused elsewhere
* Use super, rather than upcalling
* use super() in setUp and tearDown
* Thanks so much to mgz
* \* Additional compat helper for \`\`BytesIO\`\` for libraries that build on   testtools and are working on Python 3 porting. (Robert Collins)
* Add a BytesIO alias for use when writing bytes aware code
* Refix various problems that broke Python 3 support
* Land allenap's change to LessThan
* Update documentation for MatchesStructure, make it correct
* Another test for LessThan mismatch descriptions that reveals the order in which the expected and observed values appear
* Rewrite details\_to\_str as line-bsaed rather than char based
* Correct the message than LessThan() provides on mismatch
* Release 0.9.10
* Include the doc directory in sdist, making testtools installable from PyPI again (Tres Seaver)
* Get 'doc' included properly in sdist
* Some thoughts on what to do next
* Just list empty attachments, rather than demonstrate that they are indeed empty
* repr that I like better
* Another test for the current behaviour
* Make mismatches between big blocks of text easier to read
* Test current behaviour
* Test the current behaviour
* Delete unused mixin
* More factoring out
* Factor out some common methods into top-level functions
* Remove unused imports
* Things that would have made the release smoother
* Things that would have made the release go smoother
* Correct version
* NEWS update for the release
* Fix AnnotatedMismatch to correctly return details
* Use the decorator. Give the decorator a repr
* Docs!
* Add a MismatchDecorator
* Forward details from annotated mismatch
* Remove the decorators, correctly credit lifeless in the news file
* NEWS update.:
* Fix a typo
* Allow building snapshot when it's not a working tree
* API doc markup cleanups
* Slightly better markup
* Clean up errors
* Correct REST
* \* added basic documentation on how to use testtools with distutils
* \* Fixes TestCommand import and reexports it from the testtools package \* Adds a sample setup.cfg configuration for the distutils TestCommand   to demonstrate the proper usage of the command and so that   \`\`python setup.py test\`\` may actually do something useful by default
* Catch both NotBranchError /and/ NoworkingTree as different versions of bzr seem to raise a different error
* Catch NoWorkingTree rather than NotBranchError
* Support building a snapshot from something that is not a bzr working tree
* Tweaks for Jono's consideration
* Rename 'command' to 'distutilscmd'
* Rename 'command' to 'distutilscmd'
* Oops. "Kampka", not "Kampa"
* NEWS update
* Typo
* Cosmetic & legal cleanups
* Make the tests skip when fixtures is not installed, rather than raising NameError
* Use local variables instead of instance variables
* Copyright bump
* Actually run the new tests
* Style changes
* More tests for attach\_file, make lazy read work
* read\_now => lazy\_read, as per review
* Change the order of parameters to attach\_file
* Move attachFile from TestCase to be a standalone function
* Fix up the documentation
* Move Content.from\_stream to be content\_from\_stream
* Delete from\_text
* Copyright bump
* Clarify copyright: correct owners and dates
* Make something easier
* Clarify who they are
* Get it right
* More matchers than you can possibly imagine (mwhudson)
* Add stuff about them in the manual
* Some documentation for MatchesListwise
* Update NEWS
* Rename \`\`EachOf\`\` to \`\`MatchesListwise\`\`
* New ExpectedException class
* Update the manual
* NEWS for my change
* Increased clarity
* Tweaks
* Add option regular expression matching logic to MatchesException
* NEWS, copyright bumps, docstring
* Add \_\_future\_\_ import
* Add ExpectedException
* Fix some trivial API doc generation issues
* More fixes to epytext
* Fix some epytext failures
* Don't emit warnings on lucid
* \* Use unittest2 exception classes if available. (Jelmer Vernooij)
* Use unittest2 exception classes if available
* Update the README to point at the other docs, and clarify that the copyright is joint
* Re-export the eager loading convenience
* Add eager loading options to from\_file and from\_stream
* More documentation
* attachFile helper
* Update NEWS and MANUAL
* Remove duplication
* Basic convenience method for reading content from a file
* Make it a classmethod, and make text\_content one too
* Update NEWS
* Add a \`stream\_content\` helper
* Republish StringIO through compat to avoid repeated code
* PEP 8
* Mention the difference between Python 2.7's startTestRun and ours in the docstring
* Add all matchers to matchers \_\_all\_\_, fixing bug 692158
* Make sure all matchers are in matchers \_\_all\_\_
* Vastly improved documentation
* Fix reST and add overview to index<
* Use the overview document for the PyPI release
* Overview document for testtools
* Documentation for KeysEqual
* Actually document 'expectFailure', incorporating notes on testtools's deviance
* Update for startTestRun changes
* Changes -------
* 0.9.8 was released
* Release 0.9.8
* Tests will now pass on Python 2.6.4 : an \`\`Exception\`\` change made only in 2.6.4 and reverted in Python 2.6.5 was causing test failures on that version. (Martin [gz], #689858)
* Avoid issue with broken \_\_unicode\_\_ method on some Python 2.6 minor versions
* Workaround 2.4 threading bug in test\_spinner
* Avoid race condition in test\_spinner.TestRunInReactor.test\_clean\_running\_threads due to twisted threadpool not joining stopped workers
* update NEWS
* merge trunk
* add AfterPreprocessing
* \`\`assertIsInstance\`\` supports a custom error message to be supplied, which is necessary when using \`\`assertDictEqual\`\` on Python 2.7 with a \`\`testtools.TestCase\`\` base class. (Jelmer Vernooij)
* \`\`MismatchesAll.describe\`\` no longer appends a trailing newline. (Michael Hudson-Doyle, #686790)
* add MatchesSetwise
* add MatchesRegex
* add EachOf and MatchesStructure matchers
* merge no-newline-for-mismatchesall
* remove the final newline from the description of MismatchesAll
* merge my trivial fixes
* ignore .testrepository
* trivial test fix
* Support optional 'msg' argument to TestCase.assertIsInstance
* Fix bug 688724 by implementing 'all' for Python 2.4. (mgz)
* Expose 'all' from compat and implement it for Python 2.4
* Make use of StringIO in testtools.tests.test\_run Python 3 compatible
* Let stdout default to sys.stdout in TestProgram
* Use shiny new parallel test facility for testr
* Explain the startTestRun behaviour in testtools
* Fix the regression caused when fixing bug 654474 by permitting decorated test results to set their own policy for what constitutes and error and what doesn't. (Robert Collins, #683332)
* Deferred debugging support
* Make debug available from the factory
* Add flag to make debugging twisted tests easier
* Whitespace correction
* Functional programming ftw!
* Tell testr how to use --load-list now that it exists
* \* \`\`testtools.run\`\` now supports \`\`--load-list\`\`, which takes a file containing   test ids, one per line, and intersects those ids with the tests found. This   allows fine grained control of what tests are run even when the tests cannot   be named as objects to import (e.g. due to test parameterisation via   testscenarios). (Robert Collins)
* Fix thinko - first param is program is ignored
* Refactor for reusability
* Forgot to actually assert that list worked
* \* \`\`testtools.run\`\` now supports \`\`-l\`\` to list tests rather than executing   them. This is useful for integration with external test analysis/processing   tools like subunit and testrepository. (Robert Collins)
* Fix some more glitches
* Remove whack
* Grammar change
* Fix up the rest of the unexpected success issues, changing wasSuccessful to return False after unexpected success and adding unexpected success output to TextTestResult
* Fix a inaccurate unexpected success, hidden by our broken Python 3 support
* Actually report the error in TextTestResult (thanks mgz)
* Make RunTest responsible for running cleanups on tests
* NEWS update
* startTestRun resets unexpected successes and other errors
* Make MultiTestResult at all usable in Python 3
* minor nits
* Update NEWS
* Thoroughly test the Python 2.6 and 2.7 contracts, make sure that the adapted versions of our implementations behave according to the extended contract
* Test the extended double's contract
* Change the contract so that wasSuccessful should return False after unexpected successes
* Test the current contract for wasSuccessful, make some of our component results enforce it
* Link to the API docs
* Update for discovery
* Oops
* Publish the correct manual to PyPI on release
* Top-level documentation
* Don't version the built documentation
* Lots more documentation goodness
* Add Sphinx documentation building
* Lots of rst fixes
* End-to-end first draft
* Docstring tweaks
* Make cleanup running use run\_user and make the run\_user error handler understand MultipleExceptions.  Makes the whole thing easier to follow
* Pass through kwargs
* Skip unit tests for optional dependencies, rather than eliding them
* New EndsWith matcher
* Go back to using repr for exception types in MatchesException.\_\_str\_\_
* Start of manual for test authors, based on current manual
* Tweaks to HACKING
* Whitespace
* Make a 'doc' directory and move things there
* EndsWith matcher
* Do the same for fixtures
* Always run the deferred run tests
* Skip the spinner tests, rather than elide them
* Move responsibility for running cleanups to RunTest
* Add 'try\_import' and 'try\_imports'
* Polymorphism!
* I am a tool
* Nicer formatting
* More info for DelayedCalls
* Make the default iterations strict and good; add a new runner for broken Twisted
* Ugh.  It turns out that bugs like http://twistedmatrix.com/trac/ticket/2579 make this necessary
* Actually iterate the reactor after each thing. It seems this is necessary
* Implement isbaseexception to resolve failures from exception hierarchy changes in Python 2.5
* Rearrange MatchesException code and change str representation to work better with Python 2.4
* More Python 3 fixes
* Adapt MatchesException to work with old-style Exception classes in Python 2.4
* Weaken MatchesException stringification tests so they don't break on Exception implementation variations
* Use plain raise in Raises.match which is wrong on Python 2 but untested
* Make sure a byte string is used to join iterated bytes in Content obejcts
* Actually provide tracebacks for errors and failures in Deferred tests!
* Remove silly failing test
* Add new matchers for raising exceptions. (lifeless, jml)
* Add 'raises'
* Whitespace
* Update the MANUAL to make the lambda thing extra clear
* Tracebacks for errors from Deferred tests!
* Fix up the docstring
* We actually don't need this.  Methods that call loseConnection really ought to provide some other Deferred-based way of signalling that the connection has indeed been lost
* Clearer variable name in test code
* Convert assertRaises usage to assertThat
* Propograte KeyboardInterrupt from Raises
* Support matching exception types in MatchesException
* Cleaner code
* Convert MatchesException tests to the interface mixin
* Add a Raises matcher
* Add MatchesException matcher
* Use try\_import and try\_imports in actual code
* Change the helpers to get \*any\* object
* Document new helpers
* Raise an error if no alternative provided and can't import a module
* Add to all
* Support fallback imports
* \_\_all\_\_
* Make the tests more robust
* Handle submodules
* Add the twisted log unconditionally
* Use the new KeysEqual matcher
* Implement KeysEqual matcher
* Some simple changes from code review
* Make the test more robust in the face of a slow computer
* Actually, no we don't
* Things I need to do before I land
* Ugly hack, but I think necessary.  Spin the reactor once before cleaning
* Actually display the trapped log information in failing tests
* Silence the dump of logging to stdout/stderr by completely masking the log observers for the test
* Move out the bit that actually runs the test so we can more easily wrap it with things
* Fail tests on logged errors, include the error
* Extract some common code for logging user failures
* Actually make the tests fail when they have errors in Deferreds
* Log the creator and invoker data if we have them
* Add a convenience function for string content
* Make it possible to use the factory as a class variable
* Allow the reactor and timeout to be unspecified.  Sometimes you only care about one
* Move fixture tests to a separate module so we can import optionally
* Only run fixture support tests when fixtures is installed
* Add a .testr.conf
* \* \`\`testools.TestCase.useFixture\`\` has been added to glue with fixtures nicely.   (Robert Collins)
* Update manual to describe how to run testtools.run on Python 2.4
* Use deferredGenerator rather than inlineCallbacks
* Don't use inlineCallbacks, instead use deferredGenerator, since it works on Python 2.4
* \* \`\`testools.TestCase.useFixture\`\` has been added to glue with fixtures nicely.   (Robert Collins)
* Don't need twisted to run tests
* Skip signal tests on non-POSIX platforms
* Upcall exceptions so that we can work in Python 2.4
* Avoid functools or twisted dependency by updating wrapper function metadata inline
* UTF-8 encoded text needs the b marker on py3k
* Make test\_preserve\_signal\_handler valid on windows by only expecting as many handlers as will be created
* On non-posix platforms skip tests that require posix signal semantics
* Just call Exception.\_\_init\_\_ rather than using super for Python 2.4 compatibility
* Treat addUnexpectedSuccess as addFailure if the underlying result does not support addUnexpectedSuccess
* NEWS update
* Translate addUnexpectedSuccess to addFailure instead of addSuccess
* Fix the tests on win32, and make the Twisted-depending tests optional
* Might as well document this bit
* Only run the Twisted-depending tests unconditionally
* Guard the use of signals
* Don't import functools unconditionally, making tests runnable on Python 2.4
* Don't depend on functools, since it's only available in Python 2.5 or later
* Fix gratuitous Python 3 breakage
* I am not really into thongs
* Make SyntaxError decoding robust against malformed instances
* delete completely pointless line of code
* Better snapshot support for buildout
* run-tests is no more
* Less confusing version number for snapshot (for buildout)
* Get the version from PKG-INFO if it exists
* Refactor for comprehensibility by jml
* Add experimental support for running tests that return Deferreds and rely on the Twisted reactor
* Better documentation
* Mark unhandled errors in deferreds differently to regular errors
* Provide convenient ways to specify a RunTest factory for tests
* Test for inner-most decorator and comments
* Don't use extract result, instead use custom test runner
* News!
* Bring the behaviour in line with the documentation
* Improve manual for RunTest handling
* Extend the decorator to take kwargs and pass them on. Documentation, and rename to grammatically correct run\_test\_with
* Add a decorator for specifying the RunTest object to use
* Factor out the bit that gets the test method
* Add a class variable, run\_tests\_with, to allow controlling which runner to run tests with
* Make the runTest argument actually work
* Done!
* More tests, allow customization of failureException in assert\_fails\_with
* First pass at assert\_fails\_with
* Fix the version number
* Release documentation tweaks
* Update NEWS for 0.9.7 release
* Release improvements
* News
* StartsWith and DoesNotStartWith matchers from Launchpad
* More things to think about
* Less code, yay
* Test threading support
* Report tracebacks of unhandled errors
* TimeoutError is now reported as a test error
* Manual updates, todos, docstrings
* Scary
* Scarier docstring
* Rename \_Spinner to Spinner, now that it's in a private module
* Move the reactor spinning stuff into a separate module
* Move the spinner tests to a different module
* Make run() responsible for running \_clean(), and add a state-based thing for getting at junk
* Rename \_Spinner.clean to \_Spinner.\_clean, add a get\_junk() method
* whitespace
* Add a test to verify that we only call addError once
* Test faster keyboard interrupt
* Push the SIGINT tests lower, improving the documentation and fixing a state bug
* Fix one kind of KeyboardInterrupt case
* News update
* Remove another XXX
* Add some integration tests to make sure that tests run the way we expect them
* Don't let the reactor screw up signal handlers
* Documentation
* Handle cleanups that return Deferreds
* Make the test a little clearer
* Use timeout more nicely in tests
* Parametrize reactor and timeout
* Make sure the reactor is always cleaned
* Remove XXX
* Fail tests that have Deferreds with unhandled errors
* Helper for trapping unhandled errors in Deferreds
* Minor refactoring.  Add a test for handling unhandled errors
* Run all the test inside the one reactor start/crash cycle
* Raise errors when the reactor is unclean
* Stop using trial
* Another todo
* Tests for the not\_reentrant decorator
* Docs
* Tests for extract\_result
* XXX comments and tests
* Start to implement reactor cleaning, but doing it wrong. Should be only cleaning up stuff that wasn't there before
* Tweak tests to call \_Spinner class directly
* Expand the function into a much bigger class
* Extract the re-entrancy check
* Make a run\_in\_reactor function that has timeouts
* Make the damn thing work, crappily
* Add an AsynchronousDeferredRunTest class and a test for it that's actually no good
* Rename DeferredRunTest to SynchronousDeferredRunTest
* Make TestThreadSafeForwardingResult forward times to the wrapped result class
* Only show the reason for unittest on 2.7 rather than all the details
* Remove things not needed to make the test run
* The very start of Deferred support. Currently cheats by assuming that the Deferred has already fired
* Return the return values of setUp(), test-method and tearDown() so that RunTest objects can do things based on what they are
* Remove needless metaclass declaration
* Cleanups can now report multiple exceptions
* Enchance addCleanups for Fixtures
* Add test and minimal fix for \_\_details dict being shared among cloned TestCases
* \* Code duplication between assertEqual and the matcher Equals has been removed
* Code duplication between assertEqual and the matcher Equals has been removed
* Set the license and the long description. Useful for publishing to PyPI
* Make the release process more prescriptive. Add an item about tagging the release
* Release 0.9.6
* Added PlaceHolder & TestHolder
* Nicer formatting for assertEqual failures
* Add a test to verify the (very common) "no message" case
* NEWS entry
* Consistent case
* 1, not 0
* Add an ErrorHolder class
* NEWS entry
* Nice bzrlib-style assertEqual formatting
* Group the tests which rely on constructor details together
* Add a place-holder test case
* Add optional parameters to Mismatch
* Avoid exc\_info cycles in several places and comment on trickier ones
* Rename PLAIN\_TEXT to UTF8\_TEXT, the code must match the documentation
* New LessThan matcher
* NEWS
* Cheat. Return the results of \_dispatch always
* Pass back the results we get
* Update years in the LICENSE file
* Add TestCase.patch() and new testtools.monkey module for help with monkey-patching
* Make TestCase.patch() use the new patch() helper method. Becomes slightly less useful but more pure
* Add a convenience function to just patch a single thing
* Not necessary
* Handle missing attributes better
* Restore monkey code
* Handle cases where attributes don't exist
* Add an Is matcher and fix a bug preventing mismatches from being handled at all
* NEWS
* Documentation is great!
* Don't look for the monkey tests
* Just not needed
* Add patch() support to TestCase
* Initial implementation of try\_import
* More NEWS
* I can't believe we let this happen
* Add an Is matcher
* Refactor some more
* Refactor to reduce boilerplate
* Flakes
* Copyright, wuu
* Whitespace
* Docstring formatting
* Add UTF8\_TEXT helper
* Release testtools 0.9.5
* Handle string exceptions (mgz)
* Enable test for string exceptions in test results
* Catch string exceptions raised by tests on old versions which may raise them
* Correct variable name for string exceptions noticed by jml
* Use testtools for running these tests
* New style classes for matchers and runtest. (jkakar)
* Ignore Trial turds
* Cope with source line being None for unicode tracebacks
* Test exposing issue with trying to decode None for unicode traceback
* Whitespace, flakes
* - All old-style classes are now new-style classes
* Make \_details\_to\_str unicode correct, for really finally the absolute last time
* Out of date MANIFESTS make for bad tarballs
* Release 0.9.4
* Really get unicode conversion working in testresult.real.TestResult
* Improve the discovery support for use by other runners (like subunit.run)
* Unbreak Python 3 again, my unicode tweak was thoughtless
* Fix the code to use naming conventions
* Nicer comments
* Death to braces
* Better names, better conventions
* Add monkeypatcher code
* Copyright bump
* Do not generate str objects for StringException's internally
* testtools.utils has been renamed to testtools.compat. Importing testtools.utils will now generate a deprecation warning
* Move Python 2 \_StringException argument type check to \_\_init\_\_ from stringify methods
* Fix Python 3.1 support - remove the use of iteritems
* Unbreak test\_assertion\_text\_shift\_jis for Pythons with a unicode str type
* Add NEWS for unicode tracebacks on Python 2
* Make StringException.\_\_str\_\_ return UTF-8 rather than ascii/replace to prepare for merge
* Don't encode output as UTF-8 for TestNonAsciiResults
* Change a test from using iso-8859-7 to iso-8859-5 which doesn't happen to have the test character on the same codepoint as iso-8859-1
* Avoid problem introduced with fix to Python bug #1031213 by ignoring the SyntaxError line and rereading the file instead
* Document in tests the problems caused by CPython patch for issue #1031213
* Allow for mangling in shift\_jis test if the exception encoding is incompatible
* Allow detect encoding tests to work when a Python implementation may object to compiling them
* getlocale can return None if no locale is set, default to ascii
* Trivial issues seen when scanning the diff for review
* Move most of utils module to compat and put iterate\_tests in testsuite module
* Fix and test a bug with encoding of SyntaxError lines
* Make Jython skip unicode filesystem tests correctly again
* Sanitise unicode\_output\_stream a bit and add some tests, needs more work
* Revert no longer needed cosmetic changes to test\_content
* Unbreak test\_non\_ascii\_dirname from IronPython returning filesystem encoding as None
* Found \`ascii\` function in Python 3 which saves some reimplementation
* Fix test\_traceback\_rechecks\_encoding which got broken when adding Python 3 support
* Poke encoding specific code in TestNonAsciiResults some more
* Document and polish test discovery support
* Capitals for python in the MANUAL
* Revert work around for IronPython coding declaration as it breaks Python 2
* Work around a couple of quirks in non-mainstream Python implementations
* Use flag in utils to record whether the str type is unicode rather than checking version and platform in multiple places
* Rearrange some TestNonAsciiResults helpers
* Make final problem test for Python 3 run rather than skip
* Changes to make tests work on Python 3, and a short term hack to make output robust
* Polish the discovery support
* \* Thanks to a patch from James Westby testtools.matchers.Mismatch can now   supply a get\_details method, which assertThat will query to provide   additional attachments. This can be used to provide additional detail   about the mismatch that doesn't suite being included in describe(). For   instance, if the match process was complex, a log of the process could be   included, permitting debugging
* Rename details from Mismatches that clash with already added ones
* Switch get\_details to return a dict
* Fixes from Rob's review, thanks
* Add a getDetails that returns [] to the Mismatch class
* If getDetails is on Mismatch then thunk the results through to addDetail
* \* testtools.testresults.real.\_StringException will now answer \_\_str\_\_ if its   value is unicode by encoding with UTF8, and vice versa to answer \_\_unicode\_\_.   This permits subunit decoded exceptions to contain unicode and still format   correctly
* Add TestCase.skipTest as per Python2.7
* Support python3.1
* Fix a bunch of boneheaded errors in TestNonAsciiResults
* \* James Westby has supplied test discovery support using the Python 2.7   TestRunner in testtools.run. This requires the 'discover' module. This   closes bug #250764
* Add (C)/License information
* Comment on the changes made to TestProgram
* Move has\_discover = True until we know we have set up everything we need
* Import Queue class from queue/Queue module to make life less confusing
* Ignore \_\_pycache\_\_ directories, and ./build which setup.py creates
* Fix TestTextTestResult.test\_stopTestRun\_shows\_details yet again for another ZeroDivisionError message variation
* Remove relative import in testtools.testresult to make package work in py3k again
* Support discovery by backporting code from python2.7
* PEP 8 style fixes raised in review
* TestCase.addCleanup has had its docstring corrected about when cleanups run
* Tests work on IronPython patch from Martin[gz] applied
* Make testsuite pass on IronPython, also change an unused supercalss
* Pull out code for improving rather than just emulating formatting, work on tests some more, and other minor changes
* First pass at implementing unicode tracebacks for Python 2
* Time for 0.9.3
* When a cleanUp or tearDown exception occurs, it is now accumulated as a new traceback in the test details, rather than as a separate call to addError / addException. This makes testtools work better with most TestResult objects and fixes bug #335816
* PLAIN\_TEXT helper
* Tweak content type tests without changing content
* Add a new "Annotation" matcher. It doesn't do anything, but it lets you add strings to other matchers
* Remove \_\_repr\_\_ thing from NEWS
* Revert the matcher change
* NEWS tweaks
* Use repr for showing matchers, rather than str
* Add an 'Annotation' file
* Add some new matchers
* Raise more helpful errors when we fail to upcall setUp or tearDown
* Make the docs REST compliant
* Add optional message parameters to assertIs and assertIsNot
* Allow optional message parameters to assertIs and assertIsNot
* Make the documentation more general in the case of a deep test hierarchy
* Rich, meaningful errors when setUp or tearDown not called
* Add a target for making apidocs
* Fix many simple mistakes in the epytext
* Add a 'make apidocs' target, and fix the docstrings with errors
* Make the docs REST compliant
* Change from using deepcopy to copy in testcase.clone\_test\_with\_new\_id
* More docs on NotEquals
* getUniqueString now takes an optional prefix
* Amend docstring
* Remove documentation for the deprecated 'done' method
* Normalize vertical whitespace
* Add a MatchesAll matcher
* A NotEquals matcher
* News update
* Add a Not matcher
* done() is deprecated. Document startTestRun and stopTestRun instead
* News updates
* Bonus docstrings
* Allow passing a prefix to getUniqueString
* Correct mistake in addCleanup docstring -- cleanups are run after tearDown
* Various tweaks to increase PEP 8 and pyflakes compatibility
* Truth in copyright statements
* Lots of little coding cleanups
* Release is phony
* Remove trailing whitespace
* Change from using deepcopy to copy in testcase.clone\_test\_with\_new\_id
* Monkeypatch deepcopy for python 2.4 to support copying function objects
* Fix issue with test\_stopTestRun\_shows\_details on windows
* Fix test\_now\_datetime\_now on win32 where time.time() returns the same value multiple times
* Rephrase
* Clarify
* RELEASE!
* Add a hook, self.addOnException, called before non-success outcomes
* Make running tests with testtools doable from the command-line without python glue
* Make some of our test doubles available for external use for developers of unittest extensions
* Add TestCase.addOnException
* Make running tests with testtools doable from the commandline without python glue
* Include more stuff in 'setup.py sdist' so that what is in bzr matches
* Make some of our test doubles available for external use
* Move for-use test results to a submodule of a testresult package
* Make overwriting tarballs a little harder to do and expose a version number to clients
* Review feedback
* Cleanup overall branch
* Handle unicode tracebacks more gracefully
* 3.1 compatible run\_test.py
* Discard deepcopy approach, error rate is unacceptably high
* Change copyright assignment policy as per jml
* Reuse the standard library SkipTest exception when it is defined
* Make TracebackContent explicit about it's encoding to avoid issues if non-ascii characters are present in the traceback
* Add two new matchers, MatchesAny and Equals
* Handle TestSkipped exceptions that are raised without parameters
* Make ExtendedToOriginalDecorate more transparent to callers, to permit other users extensions to TestResult to work
* Fix setup.py version number, and add release process management notes
* Add milestone note
* merge from trunk; alter slightly for py3 support
* Slightly simplify getUniqueInteger using itertoolscount, patch from Benjamin Peterson
* use itertools.count() for unique ids
* account for different error message in py3
* add fake hash
* remove another StringIO.reset()
* add a sample non-empty exc-info
* use bytes for binary details
* don't store decoded value on traceback content
* no reset() on real StringIO
* Make TracebackContent suitable for py3k porting
* fake hashing on \_StringException
* kill itervalues()
* fix traceback Content and add a \_b() fake literal
* replace iteritems
* fix StringIO import on py3
* add a \_u function to imitate unicode literals on python3
* fix another except case
* fix except syntax in test
* handle Queue import
* fix except syntax
* the caught exception object isn't actually used here
* Handle TestSkipped being raised with no parameters
* Document NEWS and releasing, make setup.py executable
* Pass attributes unknown to ExtendedToOriginalDecorator to the decorated result
* Fix a typo in TestCase
* Remove a use of super that isn't quite right
* Clone tests before executing them
* Convert ConcurrentTestSuite tests to be cleaner using MatchesAny(Equals, Equals)
* Add an Equals matcher
* Add a new matchers MatchesAny
* Release 0.9.1
* Apply review feedback
* Python 2.4 support
* Support Python2.4 again
* Minor docstring tweak
* Clarity tweaks from Martin
* Change the Matcher API to be robust even if matching were to have side effects
* Tweak docs
* Docs, and make exception handlers modifiable
* More fully factored runtest
* Teach \_run\_core to indicate if an exception was caught and processed
* Consistent interface for handling exceptions in RunTest
* RunTest.handlers fully implemented
* Ensure KeyboardInterrupt isn't masked
* Permit passed in handlers to RunTest
* News announcement for 0.9
* We are now in development of 0.9.0
* Add a TextTestResult that supports our extended protocol
* Restore the hyphen
* Add a 'time' method to TestResult
* Tweak docs, capitalizing Python
* Add initial support for 'Matchers', inspired by hamcrest
* Point to hamcrest
* Fix spacing and typos
* Releasing improvements
* Correct example of test failure output
* 0.9.0. That was easy
* Implement a TextTestResult using the testtools API
* Implement TestResult.time()
* Add docs
* Implement a built in DocTestMatches matcher
* Add assertThat assertion to TestCase
* Finish Content - supply charset support
* Consolidate all the exception handling blocks into one
* Create a specific method to run the user code in a test
* Add python 2.4 support for run() - untested
* Move startTest/stopTest to RunTest
* Better name for RunTest.\_run\_decorated\_result
* Move result decoration to RunTest
* Move dynamic creation of test cases to RunTest
* Start moving TestCase.run() logic to testtools.RunTest
* Expose the details API for use from within test code
* Review feedback
* Remove duplicate test
* Support xfail and unexpected success
* Add a a way for TestCase to signal UnexpectedSuccess to itself
* Use details API in TestCase outcome reporting
* Add TestCase.add / get Details()
* Add the details API to the TestResults supported by testtools
* Alternative fix for nose - don't define a null test case method, its only useful for testing testtools
* Bring in the ExtendedToOriginal decorator from subunit
* Add mime support code for details API from subunit
* Prevent nose finding 'runTest' tests in classes derived from testtools.testcase.TestCase (bug 312257)
* Python 2.7 TestResult API support
* Error if setUp or tearDown are not called
* Compatible with python 2.7 at the TestResult layer
* Project meta cleanups: setup.py executable, multiple committers in HACKING, NEWS file created
* Start on 0.0.2: fix tests with python 2.6 (which defines \_\_eq\_\_)
* Compatibility with TestResult.startTestRun/stopTestRun
* Compatibility with TestResult.startTestRun/stopTestRun
* (statik) Add a manifest file so that LICENSE is included in the tarball generated by 'python setup.py sdist'
* Added MANIFEST.in so that LICENSE is included
* (statik) Add skip, skipIf and skipUnless decorators for Python standard library compatibility
* Reformatted imports per code review comments from jml
* Merged trunk
* Add a test suite and a test result to support concurrent testing
* Add a note to the manual about things that might upset people
* Review feedback
* Added tests for skipIf, skipUnless
* This adds some decorators:  skip, skipIf, and skipUnless
* Add ConcurrentTestSuite for running tests concurrently
* Add a ThreadsafeForwardingResult to testtools for use with parallel test execution
* Add skip support to testtools
* Correct some spelling and text in Rob's addSkip patch
* Add test skipping inspired by nose, bzr and trial to testtools. Calling self.skip('foo') in a test will cause the test to stop processing immediately. The test is reported as a skip to the result using addSkip if it is available, and addError if it is not
* Remove ITestResult and thus the undocumented dependency on zope.interfaces
* Rename pyunit3k to testtools
* Rename pyunit3k to testtools
* Add assertIs and assertIsNot to TestCase
* Add documentation to the manual
* Add assertIs and assertIsNot
* Improve user documentation: add HACKING and MANUAL files, and expand README
* Improve user documentation: add HACKING and MANUAL files, and expand README too
* Tests for pyunit3k's TestResult extensions
* Respond to review comments
* Complete tests for MultiTestResult
* Add tests for change\_test\_id, renaming to clone\_test\_with\_new\_id
* Start tests for MultiTestResult
* Some test factoring
* Change change\_test\_id to clone\_test\_with\_new\_id
* Add test for change\_test\_id, and modify change\_test\_id to do as the name implies
* Some tests for our TestResult extensions
* Split pyunit3k into several modules
* Last bit of splitting things up
* Move test result stuff
* Move interfaces to separate module
* It's only fair
* Fix up Makefile
* setup.py file
* Decide on MIT license
* Initial version of pyunit3k
