Hello community, here is the log from the commit of package python3-testtools for openSUSE:Factory checked in at 2015-11-17 14:23:00 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python3-testtools (Old) and /work/SRC/openSUSE:Factory/.python3-testtools.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python3-testtools" Changes: -------- --- /work/SRC/openSUSE:Factory/python3-testtools/python3-testtools.changes 2015-10-28 17:30:40.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.python3-testtools.new/python3-testtools.changes 2015-11-17 14:23:01.000000000 +0100 @@ -1,0 +2,9 @@ +Sat Nov 14 20:37:13 UTC 2015 - [email protected] + +- update to version 1.8.1: + * Documented more explicitly how to build and install testtools in + the hacking documentation. (Thomi Richards) + * "deferredruntest" now works with Twisted 15.1.0 and later. (Colin + Watson, #1488710) + +------------------------------------------------------------------- Old: ---- testtools-1.8.0.tar.gz New: ---- testtools-1.8.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python3-testtools.spec ++++++ --- /var/tmp/diff_new_pack.Dii5X3/_old 2015-11-17 14:23:02.000000000 +0100 +++ /var/tmp/diff_new_pack.Dii5X3/_new 2015-11-17 14:23:02.000000000 +0100 @@ -20,7 +20,7 @@ # enable testing with a build conditional (off by default): Name: python3-testtools -Version: 1.8.0 +Version: 1.8.1 Release: 0 Summary: Extensions to the Python Standard Library Unit Testing Framework License: MIT ++++++ testtools-1.8.0.tar.gz -> testtools-1.8.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testtools-1.8.0/.travis.yml new/testtools-1.8.1/.travis.yml --- old/testtools-1.8.0/.travis.yml 2015-03-11 02:13:24.000000000 +0100 +++ new/testtools-1.8.1/.travis.yml 2015-11-13 11:33:14.000000000 +0100 @@ -9,21 +9,35 @@ # We have to pin Jinja2 < 2.7 for Python 3.2 because 2.7 drops/breaks support: # http://jinja.pocoo.org/docs/changelog/#version-2-7 -# And Spinx to < 1.3 for pypy3 and python 3.2 similarly. +# And Sphinx to < 1.3 for pypy3 and python 3.2 similarly. # # See also: # http://stackoverflow.com/questions/18252804/syntax-error-in-jinja-2-library +# +# Twisted tests currently only work on Python 2. matrix: include: + - python: "2.6" + env: TWISTED_REQ="Twisted==13.0.0" + - python: "2.6" + env: TWISTED_REQ="Twisted" + - python: "2.7" + env: TWISTED_REQ="Twisted==13.0.0" + - python: "2.7" + env: TWISTED_REQ="Twisted" - python: "3.2" env: - JINJA_REQ="jinja2<2.7, Pygments<2.0" - SPHINX="<1.3" + - python: "pypy" + env: TWISTED_REQ="Twisted==13.0.0" + - python: "pypy" + env: TWISTED_REQ="Twisted" - python: "pypy3" env: SPHINX="<1.3" install: - - pip install fixtures $JINJA_REQ sphinx$SPHINX + - pip install fixtures $JINJA_REQ sphinx$SPHINX $TWISTED_REQ - python setup.py install script: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testtools-1.8.0/AUTHORS new/testtools-1.8.1/AUTHORS --- old/testtools-1.8.0/AUTHORS 2015-05-05 01:50:03.000000000 +0200 +++ new/testtools-1.8.1/AUTHORS 2015-11-13 17:17:18.000000000 +0100 @@ -24,6 +24,7 @@ Jonathan Lange <[email protected]> Jonathan Lange <[email protected]> Kui Shi <[email protected]> +Leo Arias <[email protected]> Martin <[email protected]> Martin Packman <[email protected]> Martin Pool <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testtools-1.8.0/ChangeLog new/testtools-1.8.1/ChangeLog --- old/testtools-1.8.0/ChangeLog 2015-05-05 01:50:03.000000000 +0200 +++ new/testtools-1.8.1/ChangeLog 2015-11-13 17:17:18.000000000 +0100 @@ -1,6 +1,30 @@ CHANGES ======= +1.8.1 +----- + +* Update NEWS for 1.8.1 +* 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 ----- @@ -253,7 +277,7 @@ * 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 +* 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) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testtools-1.8.0/NEWS new/testtools-1.8.1/NEWS --- old/testtools-1.8.0/NEWS 2015-05-05 01:49:16.000000000 +0200 +++ new/testtools-1.8.1/NEWS 2015-11-13 15:48:57.000000000 +0100 @@ -4,8 +4,17 @@ Changes and improvements to testtools_, grouped by release. -NEXT -~~~~ +1.8.1 +~~~~~ + +Improvements +------------ + +* Documented more explicitly how to build and install testtools in the hacking + documentation. (Thomi Richards) + +* ``deferredruntest`` now works with Twisted 15.1.0 and later. + (Colin Watson, #1488710) 1.8.0 ~~~~~ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testtools-1.8.0/PKG-INFO new/testtools-1.8.1/PKG-INFO --- old/testtools-1.8.0/PKG-INFO 2015-05-05 01:50:03.000000000 +0200 +++ new/testtools-1.8.1/PKG-INFO 2015-11-13 17:17:18.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: testtools -Version: 1.8.0 +Version: 1.8.1 Summary: Extensions to the Python standard library unit testing framework Home-page: https://github.com/testing-cabal/testtools Author: Jonathan M. Lange @@ -27,7 +27,7 @@ class TestSillySquareServer(TestCase): def setUp(self): - super(TestSillySquare, self).setUp() + super(TestSillySquareServer, self).setUp() self.server = self.useFixture(SillySquareServer()) self.addCleanup(self.attach_log_file) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testtools-1.8.0/doc/hacking.rst new/testtools-1.8.1/doc/hacking.rst --- old/testtools-1.8.0/doc/hacking.rst 2015-05-05 00:34:09.000000000 +0200 +++ new/testtools-1.8.1/doc/hacking.rst 2015-11-02 22:17:32.000000000 +0100 @@ -39,6 +39,20 @@ uses, so that testtools can ship it. +Building +-------- + +Building and installing testtools requires a reasonably recent version of pip. +At the time of writing, pip version 7.1.0 (which is bundled with virtualenv +13.1.0) is a good choice. To install testtools from source and all its test +dependencies, install the ``test`` extra:: + + pip install -e .[test] + +Installing via ``python setup.py install`` may not work, due to issues with +easy_install. + + Testing ------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testtools-1.8.0/doc/overview.rst new/testtools-1.8.1/doc/overview.rst --- old/testtools-1.8.0/doc/overview.rst 2014-08-21 19:20:07.000000000 +0200 +++ new/testtools-1.8.1/doc/overview.rst 2015-11-02 22:17:32.000000000 +0100 @@ -19,7 +19,7 @@ class TestSillySquareServer(TestCase): def setUp(self): - super(TestSillySquare, self).setUp() + super(TestSillySquareServer, self).setUp() self.server = self.useFixture(SillySquareServer()) self.addCleanup(self.attach_log_file) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testtools-1.8.0/setup.cfg new/testtools-1.8.1/setup.cfg --- old/testtools-1.8.0/setup.cfg 2015-05-05 01:50:03.000000000 +0200 +++ new/testtools-1.8.1/setup.cfg 2015-11-13 17:17:18.000000000 +0100 @@ -9,6 +9,11 @@ License :: OSI Approved :: MIT License Programming Language :: Python :: 3 +[extras] +test = + fixtures + unittest2>=1.1.0 + [files] packages = testtools diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testtools-1.8.0/testtools/deferredruntest.py new/testtools-1.8.1/testtools/deferredruntest.py --- old/testtools-1.8.0/testtools/deferredruntest.py 2015-05-05 00:25:07.000000000 +0200 +++ new/testtools-1.8.1/testtools/deferredruntest.py 2015-11-02 22:17:32.000000000 +0100 @@ -27,8 +27,15 @@ ) from twisted.internet import defer +try: + from twisted.logger import globalLogPublisher +except ImportError: + globalLogPublisher = None from twisted.python import log -from twisted.trial.unittest import _LogObserver +try: + from twisted.trial.unittest import _LogObserver +except ImportError: + from twisted.trial._synctest import _LogObserver class _DeferredRunTest(RunTest): @@ -53,9 +60,21 @@ def run_with_log_observers(observers, function, *args, **kwargs): """Run 'function' with the given Twisted log observers.""" - real_observers = list(log.theLogPublisher.observers) + if globalLogPublisher is not None: + # Twisted >= 15.2.0, with the new twisted.logger framework. + # log.theLogPublisher.observers will only contain legacy observers; + # we need to look at globalLogPublisher._observers, which contains + # both legacy and modern observers, and add and remove them via + # globalLogPublisher. However, we must still add and remove the + # observers we want to run with via log.theLogPublisher, because + # _LogObserver may consider old keys and require them to be mapped. + publisher = globalLogPublisher + real_observers = list(publisher._observers) + else: + publisher = log.theLogPublisher + real_observers = list(publisher.observers) for observer in real_observers: - log.theLogPublisher.removeObserver(observer) + publisher.removeObserver(observer) for observer in observers: log.theLogPublisher.addObserver(observer) try: @@ -64,7 +83,7 @@ for observer in observers: log.theLogPublisher.removeObserver(observer) for observer in real_observers: - log.theLogPublisher.addObserver(observer) + publisher.addObserver(observer) # Observer of the Twisted log that we install during tests. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testtools-1.8.0/testtools/testresult/doubles.py new/testtools-1.8.1/testtools/testresult/doubles.py --- old/testtools-1.8.0/testtools/testresult/doubles.py 2013-03-08 13:12:34.000000000 +0100 +++ new/testtools-1.8.1/testtools/testresult/doubles.py 2015-11-09 14:23:54.000000000 +0100 @@ -1,4 +1,4 @@ -# Copyright (c) 2009-2010 testtools developers. See LICENSE for details. +# Copyright (c) 2009-2015 testtools developers. See LICENSE for details. """Doubles of test result objects, useful for testing unittest code.""" @@ -16,8 +16,10 @@ class LoggingBase(object): """Basic support for logging of results.""" - def __init__(self): - self._events = [] + def __init__(self, event_log=None): + if event_log is None: + event_log = [] + self._events = event_log self.shouldStop = False self._was_successful = True self.testsRun = 0 @@ -54,8 +56,8 @@ class Python27TestResult(Python26TestResult): """A precisely python 2.7 like test result, that logs.""" - def __init__(self): - super(Python27TestResult, self).__init__() + def __init__(self, event_log=None): + super(Python27TestResult, self).__init__(event_log) self.failfast = False def addError(self, test, err): @@ -89,8 +91,8 @@ class ExtendedTestResult(Python27TestResult): """A test result like the proposed extended unittest result API.""" - def __init__(self): - super(ExtendedTestResult, self).__init__() + def __init__(self, event_log=None): + super(ExtendedTestResult, self).__init__(event_log) self._tags = TagContext() def addError(self, test, err=None, details=None): @@ -157,8 +159,10 @@ All events are logged to _events. """ - def __init__(self): - self._events = [] + def __init__(self, event_log=None): + if event_log is None: + event_log = [] + self._events = event_log def startTestRun(self): self._events.append(('startTestRun',)) @@ -167,8 +171,9 @@ self._events.append(('stopTestRun',)) def status(self, test_id=None, test_status=None, test_tags=None, - runnable=True, file_name=None, file_bytes=None, eof=False, - mime_type=None, route_code=None, timestamp=None): - self._events.append(('status', test_id, test_status, test_tags, - runnable, file_name, file_bytes, eof, mime_type, route_code, - timestamp)) + runnable=True, file_name=None, file_bytes=None, eof=False, + mime_type=None, route_code=None, timestamp=None): + self._events.append( + ('status', test_id, test_status, test_tags, + runnable, file_name, file_bytes, eof, mime_type, route_code, + timestamp)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testtools-1.8.0/testtools/testresult/real.py new/testtools-1.8.1/testtools/testresult/real.py --- old/testtools-1.8.0/testtools/testresult/real.py 2015-03-11 01:03:38.000000000 +0100 +++ new/testtools-1.8.1/testtools/testresult/real.py 2015-11-13 11:33:14.000000000 +0100 @@ -1,8 +1,7 @@ -# Copyright (c) 2008-2012 testtools developers. See LICENSE for details. +# Copyright (c) 2008-2015 testtools developers. See LICENSE for details. """Test results and related things.""" -__metaclass__ = type __all__ = [ 'ExtendedToOriginalDecorator', 'ExtendedToStreamDecorator', @@ -27,6 +26,7 @@ from operator import methodcaller import sys import unittest +import warnings from extras import safe_hasattr, try_import, try_imports parse_mime_type = try_import('mimeparse.parse_mime_type') @@ -47,7 +47,6 @@ # From http://docs.python.org/library/datetime.html _ZERO = datetime.timedelta(0) -# A UTC class. class UTC(datetime.tzinfo): """UTC""" @@ -110,8 +109,8 @@ :param details: Alternative way to supply details about the outcome. see the class docstring for more information. """ - self.errors.append((test, - self._err_details_to_string(test, err, details))) + self.errors.append( + (test, self._err_details_to_string(test, err, details))) if self.failfast: self.stop() @@ -122,8 +121,8 @@ :param details: Alternative way to supply details about the outcome. see the class docstring for more information. """ - self.failures.append((test, - self._err_details_to_string(test, err, details))) + self.failures.append( + (test, self._err_details_to_string(test, err, details))) if self.failfast: self.stop() @@ -325,8 +324,8 @@ """ def status(self, test_id=None, test_status=None, test_tags=None, - runnable=True, file_name=None, file_bytes=None, eof=False, - mime_type=None, route_code=None, timestamp=None): + runnable=True, file_name=None, file_bytes=None, eof=False, + mime_type=None, route_code=None, timestamp=None): """Inform the result about a test status. :param test_id: The test whose status is being reported. None to @@ -342,24 +341,24 @@ * None - no particular status is being reported, or status being reported is not associated with a test (e.g. when reporting on stdout / stderr chatter). - * inprogress - the test is currently running. Emitted by tests when - they start running and at any intermediary point they might - choose to indicate their continual operation. + * inprogress - the test is currently running. Emitted by tests + when they start running and at any intermediary point they + might choose to indicate their continual operation. Final states: * exists - the test exists. This is used when a test is not being - executed. Typically this is when querying what tests could be run - in a test run (which is useful for selecting tests to run). + executed. Typically this is when querying what tests could be + run in a test run (which is useful for selecting tests to run). * xfail - the test failed but that was expected. This is purely informative - the test is not considered to be a failure. * uxsuccess - the test passed but was expected to fail. The test will be considered a failure. * success - the test has finished without error. - * fail - the test failed (or errored). The test will be considered - a failure. - * skip - the test was selected to run but chose to be skipped. E.g. - a test dependency was missing. This is purely informative - the - test is not considered to be a failure. + * fail - the test failed (or errored). The test will be + considered a failure. + * skip - the test was selected to run but chose to be skipped. + e.g. a test dependency was missing. This is purely informative- + the test is not considered to be a failure. :param test_tags: Optional set of tags to apply to the test. Tags have no intrinsic meaning - that is up to the test author. @@ -386,8 +385,21 @@ """ -def domap(*args, **kwargs): - return list(map(*args, **kwargs)) +def domap(function, *sequences): + """A strict version of 'map' that's guaranteed to run on all inputs. + + DEPRECATED since testtools 1.8.1: Internal code should use _strict_map. + External code should look for other solutions for their strict mapping + needs. + """ + warnings.warn( + "domap deprecated since 1.8.1. Please implement your own strict map.", + DeprecationWarning, stacklevel=2) + return _strict_map(function, *sequences) + + +def _strict_map(function, *sequences): + return list(map(function, *sequences)) class CopyStreamResult(StreamResult): @@ -404,15 +416,15 @@ def startTestRun(self): super(CopyStreamResult, self).startTestRun() - domap(methodcaller('startTestRun'), self.targets) + _strict_map(methodcaller('startTestRun'), self.targets) def stopTestRun(self): super(CopyStreamResult, self).stopTestRun() - domap(methodcaller('stopTestRun'), self.targets) + _strict_map(methodcaller('stopTestRun'), self.targets) def status(self, *args, **kwargs): super(CopyStreamResult, self).status(*args, **kwargs) - domap(methodcaller('status', *args, **kwargs), self.targets) + _strict_map(methodcaller('status', *args, **kwargs), self.targets) class StreamFailFast(StreamResult): @@ -428,8 +440,8 @@ self.on_error = on_error def status(self, test_id=None, test_status=None, test_tags=None, - runnable=True, file_name=None, file_bytes=None, eof=False, - mime_type=None, route_code=None, timestamp=None): + runnable=True, file_name=None, file_bytes=None, eof=False, + mime_type=None, route_code=None, timestamp=None): if test_status in ('uxsuccess', 'fail'): self.on_error() @@ -449,7 +461,8 @@ >>> sink = doubles.StreamResult() >>> router.add_rule(sink, 'route_code_prefix', route_prefix='0', ... consume_route=True) - >>> router.status(test_id='foo', route_code='0/1', test_status='uxsuccess') + >>> router.status( + ... test_id='foo', route_code='0/1', test_status='uxsuccess') StreamResultRouter has no buffering. @@ -617,9 +630,10 @@ self._inprogress = {} def status(self, test_id=None, test_status=None, test_tags=None, - runnable=True, file_name=None, file_bytes=None, eof=False, - mime_type=None, route_code=None, timestamp=None): - super(StreamToDict, self).status(test_id, test_status, + runnable=True, file_name=None, file_bytes=None, eof=False, + mime_type=None, route_code=None, timestamp=None): + super(StreamToDict, self).status( + test_id, test_status, test_tags=test_tags, runnable=runnable, file_name=file_name, file_bytes=file_bytes, eof=eof, mime_type=mime_type, route_code=route_code, timestamp=timestamp) @@ -646,7 +660,7 @@ content_type = ContentType(primary, sub, parameters) content_bytes = [] case['details'][file_name] = Content( - content_type, lambda:content_bytes) + content_type, lambda: content_bytes) case['details'][file_name].iter_bytes().append(file_bytes) if test_tags is not None: self._inprogress[key]['tags'] = test_tags @@ -697,9 +711,9 @@ if PlaceHolder is None: from testtools.testcase import PlaceHolder outcome = _status_map[test_dict['status']] - return PlaceHolder(test_dict['id'], outcome=outcome, - details=test_dict['details'], tags=test_dict['tags'], - timestamps=test_dict['timestamps']) + return PlaceHolder( + test_dict['id'], outcome=outcome, details=test_dict['details'], + tags=test_dict['tags'], timestamps=test_dict['timestamps']) class StreamSummary(StreamToDict): @@ -812,12 +826,14 @@ def _get_failfast(self): return getattr(self._results[0], 'failfast', False) + def _set_failfast(self, value): self._dispatch('__setattr__', 'failfast', value) failfast = property(_get_failfast, _set_failfast) def _get_shouldStop(self): return any(self._dispatch('__getattr__', 'shouldStop')) + def _set_shouldStop(self, value): # Called because we subclass TestResult. Probably should not do that. pass @@ -895,8 +911,9 @@ # to decide whether to round/floor/ceiling. This was added when we # had pyp3 test failures that suggest a floor was happening. shift = 10 ** precision - return math.ceil((a_timedelta.days * 86400.0 + a_timedelta.seconds + - a_timedelta.microseconds / 1000000.0) * shift) / shift + return math.ceil( + (a_timedelta.days * 86400.0 + a_timedelta.seconds + + a_timedelta.microseconds / 1000000.0) * shift) / shift def _show_list(self, label, error_list): for test, output in error_list: @@ -922,9 +939,10 @@ self.stream.write( "%sUNEXPECTED SUCCESS: %s\n%s" % ( self.sep1, test.id(), self.sep2)) - self.stream.write("\nRan %d test%s in %.3fs\n" % - (self.testsRun, plural, - self._delta_to_float(stop - self.__start, 3))) + self.stream.write( + "\nRan %d test%s in %.3fs\n" % ( + self.testsRun, plural, + self._delta_to_float(stop - self.__start, 3))) if self.wasSuccessful(): self.stream.write("OK\n") else: @@ -1004,28 +1022,28 @@ self._test_start = None def addError(self, test, err=None, details=None): - self._add_result_with_semaphore(self.result.addError, - test, err, details=details) + self._add_result_with_semaphore( + self.result.addError, test, err, details=details) def addExpectedFailure(self, test, err=None, details=None): - self._add_result_with_semaphore(self.result.addExpectedFailure, - test, err, details=details) + self._add_result_with_semaphore( + self.result.addExpectedFailure, test, err, details=details) def addFailure(self, test, err=None, details=None): - self._add_result_with_semaphore(self.result.addFailure, - test, err, details=details) + self._add_result_with_semaphore( + self.result.addFailure, test, err, details=details) def addSkip(self, test, reason=None, details=None): - self._add_result_with_semaphore(self.result.addSkip, - test, reason, details=details) + self._add_result_with_semaphore( + self.result.addSkip, test, reason, details=details) def addSuccess(self, test, details=None): - self._add_result_with_semaphore(self.result.addSuccess, - test, details=details) + self._add_result_with_semaphore( + self.result.addSuccess, test, details=details) def addUnexpectedSuccess(self, test, details=None): - self._add_result_with_semaphore(self.result.addUnexpectedSuccess, - test, details=details) + self._add_result_with_semaphore( + self.result.addUnexpectedSuccess, test, details=details) def progress(self, offset, whence): pass @@ -1044,6 +1062,7 @@ return self.result.shouldStop finally: self.semaphore.release() + def _set_shouldStop(self, value): # Another case where we should not subclass TestResult pass @@ -1212,7 +1231,8 @@ if details is not None: param_count += 1 if param_count != 1: - raise ValueError("Must pass only one of err '%s' and details '%s" + raise ValueError( + "Must pass only one of err '%s' and details '%s" % (err, details)) def _details_to_exc_info(self, details): @@ -1235,6 +1255,7 @@ def _get_failfast(self): return getattr(self.decorated, 'failfast', self._failfast) + def _set_failfast(self, value): if safe_hasattr(self.decorated, 'failfast'): self.decorated.failfast = value @@ -1311,6 +1332,7 @@ def _get_failfast(self): return len(self.targets) == 2 + def _set_failfast(self, value): if value: if len(self.targets) == 2: @@ -1323,7 +1345,8 @@ def startTest(self, test): if not self._started: self.startTestRun() - self.status(test_id=test.id(), test_status='inprogress', timestamp=self._now()) + self.status( + test_id=test.id(), test_status='inprogress', timestamp=self._now()) self._tags = TagContext(self._tags) def stopTest(self, test): @@ -1349,18 +1372,23 @@ file_bytes = None for next_bytes in content.iter_bytes(): if file_bytes is not None: - self.status(file_name=name, file_bytes=file_bytes, - mime_type=mime_type, test_id=test_id, timestamp=now) + self.status( + file_name=name, file_bytes=file_bytes, + mime_type=mime_type, test_id=test_id, + timestamp=now) file_bytes = next_bytes if file_bytes is None: file_bytes = _b("") - self.status(file_name=name, file_bytes=file_bytes, eof=True, + self.status( + file_name=name, file_bytes=file_bytes, eof=True, mime_type=mime_type, test_id=test_id, timestamp=now) if reason is not None: - self.status(file_name='reason', file_bytes=reason.encode('utf8'), + self.status( + file_name='reason', file_bytes=reason.encode('utf8'), eof=True, mime_type="text/plain; charset=utf8", test_id=test_id, timestamp=now) - self.status(test_id=test_id, test_status=status, + self.status( + test_id=test_id, test_status=status, test_tags=self.current_tags, timestamp=now) def addExpectedFailure(self, test, err=None, details=None): @@ -1383,7 +1411,8 @@ if details is not None: param_count += 1 if param_count != 1: - raise ValueError("Must pass only one of err '%s' and details '%s" + raise ValueError( + "Must pass only one of err '%s' and details '%s" % (err, details)) def startTestRun(self): @@ -1393,9 +1422,6 @@ self.__now = None self._started = True - def stopTest(self, test): - self._tags = self._tags.parent - @property def current_tags(self): """The currently set tags.""" @@ -1512,9 +1538,10 @@ self.queue.put(dict(event='startTestRun', result=self)) def status(self, test_id=None, test_status=None, test_tags=None, - runnable=True, file_name=None, file_bytes=None, eof=False, - mime_type=None, route_code=None, timestamp=None): - self.queue.put(dict(event='status', test_id=test_id, + runnable=True, file_name=None, file_bytes=None, eof=False, + mime_type=None, route_code=None, timestamp=None): + self.queue.put(dict( + event='status', test_id=test_id, test_status=test_status, test_tags=test_tags, runnable=runnable, file_name=file_name, file_bytes=file_bytes, eof=eof, mime_type=mime_type, route_code=self.route_code(route_code), @@ -1718,8 +1745,8 @@ if not str_is_unicode: def __init__(self, string): if type(string) is not unicode: - raise TypeError("_StringException expects unicode, got %r" % - (string,)) + raise TypeError( + "_StringException expects unicode, got %r" % (string,)) Exception.__init__(self, string) def __str__(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testtools-1.8.0/testtools/tests/test_run.py new/testtools-1.8.1/testtools/tests/test_run.py --- old/testtools-1.8.0/testtools/tests/test_run.py 2015-03-10 00:19:47.000000000 +0100 +++ new/testtools-1.8.1/testtools/tests/test_run.py 2015-11-02 22:17:32.000000000 +0100 @@ -201,6 +201,7 @@ run.main, ['prog', 'discover', '-l', broken.package.base, '*.py'], out) self.assertEqual(2, exc.args[0]) self.assertThat(out.getvalue(), DocTestMatches("""\ +unittest2.loader._FailedTest.runexample Failed to import test module: runexample Traceback (most recent call last): File ".../loader.py", line ..., in _find_test_path diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testtools-1.8.0/testtools/tests/test_testresult.py new/testtools-1.8.1/testtools/tests/test_testresult.py --- old/testtools-1.8.0/testtools/tests/test_testresult.py 2015-03-11 00:48:49.000000000 +0100 +++ new/testtools-1.8.1/testtools/tests/test_testresult.py 2015-11-09 14:24:00.000000000 +0100 @@ -1,4 +1,4 @@ -# Copyright (c) 2008-2012 testtools developers. See LICENSE for details. +# Copyright (c) 2008-2015 testtools developers. See LICENSE for details. """Test TestResults and related things.""" @@ -15,7 +15,6 @@ import tempfile import threading from unittest import TestSuite -import warnings from extras import safe_hasattr, try_imports @@ -520,8 +519,15 @@ result.startTestRun() self.addCleanup(result.stopTestRun) now = datetime.datetime.now(utc) - args = [[_u("foo"), s] for s in ['exists', 'inprogress', 'xfail', - 'uxsuccess', 'success', 'fail', 'skip']] + args = [[_u("foo"), s] for s in [ + 'exists', + 'inprogress', + 'xfail', + 'uxsuccess', + 'success', + 'fail', + 'skip', + ]] inputs = list(dict( runnable=False, test_tags=set(['quux']), @@ -537,7 +543,8 @@ "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)" s = list(iterable) param_dicts = [] - for ss in chain.from_iterable(combinations(s, r) for r in range(len(s)+1)): + combos = (combinations(s, r) for r in range(len(s) + 1)) + for ss in chain.from_iterable(combos): param_dicts.append(dict(ss)) return param_dicts diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testtools-1.8.0/testtools.egg-info/PKG-INFO new/testtools-1.8.1/testtools.egg-info/PKG-INFO --- old/testtools-1.8.0/testtools.egg-info/PKG-INFO 2015-05-05 01:50:03.000000000 +0200 +++ new/testtools-1.8.1/testtools.egg-info/PKG-INFO 2015-11-13 17:17:18.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: testtools -Version: 1.8.0 +Version: 1.8.1 Summary: Extensions to the Python standard library unit testing framework Home-page: https://github.com/testing-cabal/testtools Author: Jonathan M. Lange @@ -27,7 +27,7 @@ class TestSillySquareServer(TestCase): def setUp(self): - super(TestSillySquare, self).setUp() + super(TestSillySquareServer, self).setUp() self.server = self.useFixture(SillySquareServer()) self.addCleanup(self.attach_log_file) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testtools-1.8.0/testtools.egg-info/pbr.json new/testtools-1.8.1/testtools.egg-info/pbr.json --- old/testtools-1.8.0/testtools.egg-info/pbr.json 2015-05-05 01:50:03.000000000 +0200 +++ new/testtools-1.8.1/testtools.egg-info/pbr.json 2015-11-13 17:17:18.000000000 +0100 @@ -1 +1 @@ -{"is_release": true, "git_version": "a18c904"} \ No newline at end of file +{"is_release": true, "git_version": "e7b82f6"} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testtools-1.8.0/testtools.egg-info/requires.txt new/testtools-1.8.1/testtools.egg-info/requires.txt --- old/testtools-1.8.0/testtools.egg-info/requires.txt 2015-05-05 01:50:03.000000000 +0200 +++ new/testtools-1.8.1/testtools.egg-info/requires.txt 2015-11-13 17:17:18.000000000 +0100 @@ -2,4 +2,8 @@ extras python-mimeparse unittest2>=1.0.0 -traceback2 \ No newline at end of file +traceback2 + +[test] +fixtures +unittest2>=1.1.0
