Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-testfixtures for openSUSE:Factory checked in at 2021-10-20 20:23:17 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-testfixtures (Old) and /work/SRC/openSUSE:Factory/.python-testfixtures.new.1890 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-testfixtures" Wed Oct 20 20:23:17 2021 rev:19 rq:924047 version:6.18.3 Changes: -------- --- /work/SRC/openSUSE:Factory/python-testfixtures/python-testfixtures.changes 2021-05-12 19:31:28.479222736 +0200 +++ /work/SRC/openSUSE:Factory/.python-testfixtures.new.1890/python-testfixtures.changes 2021-10-20 20:23:57.725366141 +0200 @@ -1,0 +2,16 @@ +Thu Oct 7 15:01:20 UTC 2021 - Ben Greiner <c...@bnavigator.de> + +- update to 6.18.3 + * Fix bug when using :func:`compare` on two regular expressions + that have very long patterns. + * Fix bug that meant :class:`LogCapture` didn't preserve or + provide a clean testing environment for filters. + * Fix bug when showing differences between mappings found by + :func:`compare` when mismatching values contained the same + number more than once. + * Add support for lazy resolution of prefix and suffix when using + :func:`compare`. +- Drop appease-django-320.patch merged upstream +- Drop unresolvable Python 2 build + +------------------------------------------------------------------- Old: ---- appease-django-320.patch testfixtures-6.17.1.tar.gz New: ---- testfixtures-6.18.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-testfixtures.spec ++++++ --- /var/tmp/diff_new_pack.ewp8fK/_old 2021-10-20 20:23:58.209366440 +0200 +++ /var/tmp/diff_new_pack.ewp8fK/_new 2021-10-20 20:23:58.217366445 +0200 @@ -16,17 +16,15 @@ # -%{?!python_module:%define python_module() python-%{**} python3-%{**}} -%bcond_without python2 +%{?!python_module:%define python_module() python3-%{**}} +%define skip_python2 1 Name: python-testfixtures -Version: 6.17.1 +Version: 6.18.3 Release: 0 Summary: A collection of helpers and mock objects for unit tests and doc tests License: MIT URL: https://github.com/Simplistix/testfixtures Source: https://files.pythonhosted.org/packages/source/t/testfixtures/testfixtures-%{version}.tar.gz -# PATCH-FIX-UPSTREAM: gh#Simplistix/testfixtures/commit/52a14d92a122665b1a101e6398eca3982de01739 -Patch0: appease-django-320.patch BuildRequires: %{python_module Django} BuildRequires: %{python_module Twisted} BuildRequires: %{python_module pytest >= 3.6} @@ -41,9 +39,6 @@ Suggests: python-sybil Suggests: python-zope.component BuildArch: noarch -%if %{with python2} -BuildRequires: python2-mock -%endif %python_subpackages %description @@ -78,6 +73,7 @@ %files %{python_files} %license LICENSE.txt %doc README.rst docs/*.txt -%{python_sitelib}/* +%{python_sitelib}/testfixtures +%{python_sitelib}/testfixtures-%{version}*-info %changelog ++++++ testfixtures-6.17.1.tar.gz -> testfixtures-6.18.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.17.1/.circleci/config.yml new/testfixtures-6.18.3/.circleci/config.yml --- old/testfixtures-6.17.1/.circleci/config.yml 2021-01-14 09:34:46.000000000 +0100 +++ new/testfixtures-6.18.3/.circleci/config.yml 2021-09-29 11:03:20.000000000 +0200 @@ -44,11 +44,6 @@ name: python39 image: circleci/python:3.9 - python/pip-run-tests: - name: python36-mock-backport - # so we test the mock monkey patches aren't used: - image: circleci/python:3.6.4 - extra_packages: "mock" - - python/pip-run-tests: name: python39-mock-backport image: circleci/python:3.9 extra_packages: "mock" @@ -73,7 +68,6 @@ - python37 - python38 - python39 - - python36-mock-backport - python39-mock-backport - python27-django-1-9 - python36-django-1-11 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.17.1/CHANGELOG.rst new/testfixtures-6.18.3/CHANGELOG.rst --- old/testfixtures-6.17.1/CHANGELOG.rst 2021-01-14 09:34:46.000000000 +0100 +++ new/testfixtures-6.18.3/CHANGELOG.rst 2021-09-29 11:03:20.000000000 +0200 @@ -1,6 +1,33 @@ Changes ======= +6.18.3 (29 Sep 2021) +-------------------- + +- Fix bug when using :func:`compare` on two regular expressions that have very long patterns. + +Thanks to Christoph Ludwig for the report. + +6.18.2 (21 Sep 2021) +-------------------- + +- Fix bug that meant :class:`LogCapture` didn't preserve or provide a clean testing environment + for filters. + +Thanks to Jesse Rittner for the fix. + +6.18.1 (20 Aug 2021) +-------------------- + +- Fix bug when showing differences between mappings found by :func:`compare` when + mismatching values contained the same number more than once. + +6.18.0 (15 Jul 2021) +-------------------- + +- Add support for lazy resolution of ``prefix`` and ``suffix`` when using + :func:`compare`. + 6.17.1 (14 Jan 2020) -------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.17.1/PKG-INFO new/testfixtures-6.18.3/PKG-INFO --- old/testfixtures-6.17.1/PKG-INFO 2021-01-14 09:34:53.000000000 +0100 +++ new/testfixtures-6.18.3/PKG-INFO 2021-09-29 11:03:25.000000000 +0200 @@ -1,71 +1,11 @@ Metadata-Version: 2.1 Name: testfixtures -Version: 6.17.1 +Version: 6.18.3 Summary: A collection of helpers and mock objects for unit tests and doc tests. Home-page: https://github.com/Simplistix/testfixtures Author: Chris Withers Author-email: ch...@simplistix.co.uk License: MIT -Description: Testfixtures - ============ - - |CircleCI|_ |Docs|_ - - .. |CircleCI| image:: https://circleci.com/gh/Simplistix/testfixtures/tree/master.svg?style=shield - .. _CircleCI: https://circleci.com/gh/Simplistix/testfixtures/tree/master - - .. |Docs| image:: https://readthedocs.org/projects/testfixtures/badge/?version=latest - .. _Docs: http://testfixtures.readthedocs.org/en/latest/ - - Testfixtures is a collection of helpers and mock objects that are useful when - writing automated tests in Python. - - The areas of testing this package can help with are listed below: - - **Comparing objects and sequences** - - Better feedback when the results aren't as you expected along with - support for comparison of objects that don't normally support - comparison and comparison of deeply nested datastructures. - - **Mocking out objects and methods** - - Easy to use ways of stubbing out objects, classes or individual - methods for both doc tests and unit tests. Special helpers are - provided for testing with dates and times. - - **Testing logging** - - Helpers for capturing logging output in both doc tests and - unit tests. - - **Testing stream output** - - Helpers for capturing stream output, such as that from print - statements, and making assertion about it. - - **Testing with files and directories** - - Support for creating and checking files and directories in sandboxes - for both doc tests and unit tests. - - **Testing exceptions and warnings** - - Easy to use ways of checking that a certain exception is raised, - or a warning is issued, even down the to the parameters provided. - - **Testing subprocesses** - - A handy mock for testing code that uses subprocesses. - - **Testing when using django** - - Helpers for comparing instances of django models. - - **Testing when using zope.component** - - An easy to use sterile component registry. - Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers @@ -80,3 +20,66 @@ Provides-Extra: test Provides-Extra: docs Provides-Extra: build +License-File: LICENSE.txt + +Testfixtures +============ + +|CircleCI|_ |Docs|_ + +.. |CircleCI| image:: https://circleci.com/gh/simplistix/testfixtures/tree/master.svg?style=shield +.. _CircleCI: https://circleci.com/gh/simplistix/testfixtures/tree/master + +.. |Docs| image:: https://readthedocs.org/projects/testfixtures/badge/?version=latest +.. _Docs: http://testfixtures.readthedocs.org/en/latest/ + +Testfixtures is a collection of helpers and mock objects that are useful when +writing automated tests in Python. + +The areas of testing this package can help with are listed below: + +**Comparing objects and sequences** + +Better feedback when the results aren't as you expected along with +support for comparison of objects that don't normally support +comparison and comparison of deeply nested datastructures. + +**Mocking out objects and methods** + +Easy to use ways of stubbing out objects, classes or individual +methods for both doc tests and unit tests. Special helpers are +provided for testing with dates and times. + +**Testing logging** + +Helpers for capturing logging output in both doc tests and +unit tests. + +**Testing stream output** + +Helpers for capturing stream output, such as that from print +statements, and making assertion about it. + +**Testing with files and directories** + +Support for creating and checking files and directories in sandboxes +for both doc tests and unit tests. + +**Testing exceptions and warnings** + +Easy to use ways of checking that a certain exception is raised, +or a warning is issued, even down the to the parameters provided. + +**Testing subprocesses** + +A handy mock for testing code that uses subprocesses. + +**Testing when using django** + +Helpers for comparing instances of django models. + +**Testing when using zope.component** + +An easy to use sterile component registry. + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.17.1/README.rst new/testfixtures-6.18.3/README.rst --- old/testfixtures-6.17.1/README.rst 2021-01-14 09:34:46.000000000 +0100 +++ new/testfixtures-6.18.3/README.rst 2021-09-29 11:03:20.000000000 +0200 @@ -3,8 +3,8 @@ |CircleCI|_ |Docs|_ -.. |CircleCI| image:: https://circleci.com/gh/Simplistix/testfixtures/tree/master.svg?style=shield -.. _CircleCI: https://circleci.com/gh/Simplistix/testfixtures/tree/master +.. |CircleCI| image:: https://circleci.com/gh/simplistix/testfixtures/tree/master.svg?style=shield +.. _CircleCI: https://circleci.com/gh/simplistix/testfixtures/tree/master .. |Docs| image:: https://readthedocs.org/projects/testfixtures/badge/?version=latest .. _Docs: http://testfixtures.readthedocs.org/en/latest/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.17.1/testfixtures/comparison.py new/testfixtures-6.18.3/testfixtures/comparison.py --- old/testfixtures-6.17.1/testfixtures/comparison.py 2021-01-14 09:34:46.000000000 +0100 +++ new/testfixtures-6.18.3/testfixtures/comparison.py 2021-09-29 11:03:20.000000000 +0200 @@ -44,13 +44,15 @@ return compare_with_type(x, y, context) x_attrs = _extract_attrs(x) y_attrs = _extract_attrs(y) - diff = _compare_mapping(x_attrs, y_attrs, context, x, - 'attributes ', '.%s') - if not diff: - return 'Both %s and %s appear as %r, but are not equal!' % ( - context.x_label or 'x', context.y_label or 'y', repr_x - ) - return diff + diff_ = None + if not (x_attrs is None or y_attrs is None): + diff_ = _compare_mapping(x_attrs, y_attrs, context, x, + 'attributes ', '.%s') + if diff_: + return diff_ + return 'Both %s and %s appear as %r, but are not equal!' % ( + context.x_label or 'x', context.y_label or 'y', repr_x + ) return context.label('x', repr_x) + ' != ' + context.label('y', repr_y) @@ -568,8 +570,9 @@ return '\n\nWhile comparing %s: ' % ''.join(self.breadcrumbs[1:]) def seen(self, x, y): - # don't get confused by string interning: - if isinstance(x, basestring) and isinstance(y, basestring): + # don't get confused by interning: + singleton_types = basestring, int, float + if isinstance(x, singleton_types) and isinstance(y, singleton_types): return False key = id(x), id(y) if key in self._seen: @@ -620,6 +623,10 @@ self.breadcrumbs.pop() +def _resolve_lazy(source): + return str(source() if callable(source) else source) + + def compare(*args, **kw): """ Compare two objects, raising an :class:`AssertionError` if they are not @@ -637,11 +644,13 @@ :param prefix: If provided, in the event of an :class:`AssertionError` being raised, the prefix supplied will be prepended to the - message in the :class:`AssertionError`. + message in the :class:`AssertionError`. This may be a + callable, in which case it will only be resolved if needed. :param suffix: If provided, in the event of an :class:`AssertionError` being raised, the suffix supplied will be appended to the - message in the :class:`AssertionError`. + message in the :class:`AssertionError`. This may be a + callable, in which case it will only be resolved if needed. :param x_label: If provided, in the event of an :class:`AssertionError` being raised, the object passed as the first positional @@ -692,9 +701,9 @@ message = context.message if prefix: - message = prefix + ': ' + message + message = _resolve_lazy(prefix) + ': ' + message if suffix: - message += '\n' + suffix + message += '\n' + _resolve_lazy(suffix) if raises: raise AssertionError(message) @@ -1080,6 +1089,7 @@ self.failed = '\n\n'.join(message) return True + return False class StringComparison: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.17.1/testfixtures/logcapture.py new/testfixtures-6.18.3/testfixtures/logcapture.py --- old/testfixtures-6.17.1/testfixtures/logcapture.py 2021-01-14 09:34:46.000000000 +0100 +++ new/testfixtures-6.18.3/testfixtures/logcapture.py 2021-09-29 11:03:20.000000000 +0200 @@ -147,10 +147,12 @@ for name in self.names: logger = logging.getLogger(name) self.old['levels'][name] = logger.level + self.old['filters'][name] = logger.filters self.old['handlers'][name] = logger.handlers self.old['disabled'][name] = logger.disabled self.old['propagate'][name] = logger.propagate logger.setLevel(self.level) + logger.filters = [] logger.handlers = [self] logger.disabled = False if self.propagate is not None: @@ -173,6 +175,7 @@ for name in self.names: logger = logging.getLogger(name) logger.setLevel(self.old['levels'][name]) + logger.filters = self.old['filters'][name] logger.handlers = self.old['handlers'][name] logger.disabled = self.old['disabled'][name] logger.propagate = self.old['propagate'][name] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.17.1/testfixtures/tests/test_compare.py new/testfixtures-6.18.3/testfixtures/tests/test_compare.py --- old/testfixtures-6.17.1/testfixtures/tests/test_compare.py 2021-01-14 09:34:46.000000000 +0100 +++ new/testfixtures-6.18.3/testfixtures/tests/test_compare.py 2021-09-29 11:03:20.000000000 +0200 @@ -1,3 +1,4 @@ +import re from datetime import date, datetime from decimal import Decimal @@ -38,6 +39,15 @@ _compare = compare +class Lazy: + + def __init__(self, message): + self.message = message + + def __str__(self): + return self.message + + def check_raises(x=marker, y=marker, message=None, regex=None, compare=compare, **kw): args = [] @@ -390,6 +400,26 @@ "'x': 1 != 2" ) + def test_dict_identical_non_matching_ints(self): + self.check_raises( + dict(x=1, y=1), dict(x=2, y=2), + "dict not as expected:\n" + "\n" + "values differ:\n" + "'x': 1 != 2\n" + "'y': 1 != 2" + ) + + def test_dict_identical_non_matching_floats(self): + self.check_raises( + dict(x=1.0, y=1.0), dict(x=2.0, y=2.0), + "dict not as expected:\n" + "\n" + "values differ:\n" + "'x': 1.0 != 2.0\n" + "'y': 1.0 != 2.0" + ) + def test_dict_labels_specified(self): self.check_raises( dict(x=1, y=2), dict(x=2, z=3), @@ -1036,6 +1066,17 @@ prefix='file content' ) + def test_prefix_callable(self): + with ShouldAssert('foo: 1 != 2'): + compare(1, 2, prefix=lambda: 'foo') + + def test_prefix_stringable(self): + with ShouldAssert('foo: 1 != 2'): + compare(1, 2, prefix=Lazy('foo')) + + def test_prefix_lazy(self): + compare(2, 2, prefix=Mock(side_effect=Exception('boom!'))) + def test_suffix(self): self.check_raises( 1, 2, @@ -1044,6 +1085,17 @@ suffix='additional context', ) + def test_suffix_callable(self): + with ShouldAssert('1 != 2\n3'): + compare(1, 2, suffix=lambda: 3) + + def test_suffix_stringable(self): + with ShouldAssert('1 != 2\nfoo'): + compare(1, 2, suffix=Lazy('foo')) + + def test_suffix_lazy(self): + compare(2, 2, suffix=Mock(side_effect=Exception('boom!'))) + def test_labels_multiline(self): self.check_raises( 'x'*5+'\n'+'y'*5, 'x'*5+'\n'+'z'*5, @@ -1888,6 +1940,16 @@ "While comparing [2]: 'foo' != 'bar'" ) + def test_regex(self): + if PY2: + return + shared_prefix = "a" * 199 + self.check_raises( + re.compile(shared_prefix + "x"), + re.compile(shared_prefix + "y"), + 'Both x and y appear as "re.compile(\''+'a'*199+')", but are not equal!' + ) + class TestIgnore(CompareHelper): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.17.1/testfixtures/tests/test_django/settings.py new/testfixtures-6.18.3/testfixtures/tests/test_django/settings.py --- old/testfixtures-6.17.1/testfixtures/tests/test_django/settings.py 2021-01-14 09:34:46.000000000 +0100 +++ new/testfixtures-6.18.3/testfixtures/tests/test_django/settings.py 2021-09-29 11:03:20.000000000 +0200 @@ -6,3 +6,5 @@ ] DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3'}} + +DEFAULT_AUTO_FIELD='django.db.models.AutoField' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.17.1/testfixtures/tests/test_logcapture.py new/testfixtures-6.18.3/testfixtures/tests/test_logcapture.py --- old/testfixtures-6.17.1/testfixtures/tests/test_logcapture.py 2021-01-14 09:34:46.000000000 +0100 +++ new/testfixtures-6.18.3/testfixtures/tests/test_logcapture.py 2021-09-29 11:03:20.000000000 +0200 @@ -1,5 +1,5 @@ from __future__ import print_function -from logging import getLogger, ERROR +from logging import getLogger, ERROR, Filter from textwrap import dedent from unittest import TestCase from warnings import catch_warnings @@ -15,6 +15,11 @@ child = getLogger('one.child') +class DummyFilter(Filter): + def filter(self, _): + return True + + class TestLogCapture(TestCase): def test_simple(self): @@ -135,6 +140,10 @@ root = getLogger() child = getLogger('child') + # Add a dummy filter so we can verify it is swapped out + # during the capture, and swapped back in after `uninstall`. + root.addFilter(DummyFilter()) + # Lets also record the handlers for these loggers before # we start the test: @@ -146,6 +155,11 @@ old_root_level=root.level old_child_level=child.level + # Also record the filters: + + old_root_filters = root.filters[:] + old_child_filters = child.filters[:] + # Now the test: try: @@ -159,6 +173,9 @@ assert root.level == 1 assert child.level == 1 + assert root.filters == [] + assert child.filters == [] + child.info('2') assert str(l1) == ( "root INFO\n 1\n" @@ -167,6 +184,11 @@ assert str(l2) == ( "child INFO\n 2" ) + + # Add a dummy filter to the child, + # which should be removed by `uninstall`. + child.addFilter(DummyFilter()) + l2.uninstall() l1.uninstall() assert root.level == 49 @@ -180,6 +202,10 @@ assert root.handlers == before_root assert child.handlers == before_child + # Also check the filters were restored: + assert root.filters == old_root_filters + assert child.filters == old_child_filters + def test_uninstall_all(self): before_handlers_root = root.handlers[:] before_handlers_child = child.handlers[:] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.17.1/testfixtures/tests/test_mappingcomparison.py new/testfixtures-6.18.3/testfixtures/tests/test_mappingcomparison.py --- old/testfixtures-6.17.1/testfixtures/tests/test_mappingcomparison.py 2021-01-14 09:34:46.000000000 +0100 +++ new/testfixtures-6.18.3/testfixtures/tests/test_mappingcomparison.py 2021-09-29 11:03:20.000000000 +0200 @@ -304,3 +304,8 @@ m = MappingComparison(partial=True) assert m != [] check_repr(m, '<MappingComparison(ordered=False, partial=True)(failed)>bad type</>') + + def test_boolean_return(self): + m = MappingComparison({'k': 'v'}) + result = m != {'k': 'v'} + assert isinstance(result, bool) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.17.1/testfixtures/version.txt new/testfixtures-6.18.3/testfixtures/version.txt --- old/testfixtures-6.17.1/testfixtures/version.txt 2021-01-14 09:34:46.000000000 +0100 +++ new/testfixtures-6.18.3/testfixtures/version.txt 2021-09-29 11:03:20.000000000 +0200 @@ -1 +1 @@ -6.17.1 +6.18.3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.17.1/testfixtures.egg-info/PKG-INFO new/testfixtures-6.18.3/testfixtures.egg-info/PKG-INFO --- old/testfixtures-6.17.1/testfixtures.egg-info/PKG-INFO 2021-01-14 09:34:53.000000000 +0100 +++ new/testfixtures-6.18.3/testfixtures.egg-info/PKG-INFO 2021-09-29 11:03:25.000000000 +0200 @@ -1,71 +1,11 @@ Metadata-Version: 2.1 Name: testfixtures -Version: 6.17.1 +Version: 6.18.3 Summary: A collection of helpers and mock objects for unit tests and doc tests. Home-page: https://github.com/Simplistix/testfixtures Author: Chris Withers Author-email: ch...@simplistix.co.uk License: MIT -Description: Testfixtures - ============ - - |CircleCI|_ |Docs|_ - - .. |CircleCI| image:: https://circleci.com/gh/Simplistix/testfixtures/tree/master.svg?style=shield - .. _CircleCI: https://circleci.com/gh/Simplistix/testfixtures/tree/master - - .. |Docs| image:: https://readthedocs.org/projects/testfixtures/badge/?version=latest - .. _Docs: http://testfixtures.readthedocs.org/en/latest/ - - Testfixtures is a collection of helpers and mock objects that are useful when - writing automated tests in Python. - - The areas of testing this package can help with are listed below: - - **Comparing objects and sequences** - - Better feedback when the results aren't as you expected along with - support for comparison of objects that don't normally support - comparison and comparison of deeply nested datastructures. - - **Mocking out objects and methods** - - Easy to use ways of stubbing out objects, classes or individual - methods for both doc tests and unit tests. Special helpers are - provided for testing with dates and times. - - **Testing logging** - - Helpers for capturing logging output in both doc tests and - unit tests. - - **Testing stream output** - - Helpers for capturing stream output, such as that from print - statements, and making assertion about it. - - **Testing with files and directories** - - Support for creating and checking files and directories in sandboxes - for both doc tests and unit tests. - - **Testing exceptions and warnings** - - Easy to use ways of checking that a certain exception is raised, - or a warning is issued, even down the to the parameters provided. - - **Testing subprocesses** - - A handy mock for testing code that uses subprocesses. - - **Testing when using django** - - Helpers for comparing instances of django models. - - **Testing when using zope.component** - - An easy to use sterile component registry. - Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers @@ -80,3 +20,66 @@ Provides-Extra: test Provides-Extra: docs Provides-Extra: build +License-File: LICENSE.txt + +Testfixtures +============ + +|CircleCI|_ |Docs|_ + +.. |CircleCI| image:: https://circleci.com/gh/simplistix/testfixtures/tree/master.svg?style=shield +.. _CircleCI: https://circleci.com/gh/simplistix/testfixtures/tree/master + +.. |Docs| image:: https://readthedocs.org/projects/testfixtures/badge/?version=latest +.. _Docs: http://testfixtures.readthedocs.org/en/latest/ + +Testfixtures is a collection of helpers and mock objects that are useful when +writing automated tests in Python. + +The areas of testing this package can help with are listed below: + +**Comparing objects and sequences** + +Better feedback when the results aren't as you expected along with +support for comparison of objects that don't normally support +comparison and comparison of deeply nested datastructures. + +**Mocking out objects and methods** + +Easy to use ways of stubbing out objects, classes or individual +methods for both doc tests and unit tests. Special helpers are +provided for testing with dates and times. + +**Testing logging** + +Helpers for capturing logging output in both doc tests and +unit tests. + +**Testing stream output** + +Helpers for capturing stream output, such as that from print +statements, and making assertion about it. + +**Testing with files and directories** + +Support for creating and checking files and directories in sandboxes +for both doc tests and unit tests. + +**Testing exceptions and warnings** + +Easy to use ways of checking that a certain exception is raised, +or a warning is issued, even down the to the parameters provided. + +**Testing subprocesses** + +A handy mock for testing code that uses subprocesses. + +**Testing when using django** + +Helpers for comparing instances of django models. + +**Testing when using zope.component** + +An easy to use sterile component registry. + +