Hello community,
here is the log from the commit of package python-testfixtures for
openSUSE:Factory checked in at 2019-03-29 20:42:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-testfixtures (Old)
and /work/SRC/openSUSE:Factory/.python-testfixtures.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-testfixtures"
Fri Mar 29 20:42:35 2019 rev:6 rq:689260 version:6.6.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-testfixtures/python-testfixtures.changes
2019-02-27 17:27:57.935346241 +0100
+++
/work/SRC/openSUSE:Factory/.python-testfixtures.new.25356/python-testfixtures.changes
2019-03-29 20:42:36.950678340 +0100
@@ -1,0 +2,26 @@
+Tue Mar 26 22:09:06 UTC 2019 - John Vandenberg <[email protected]>
+
+- Add docs/*.txt to %docs
+- Remove tests from the runtime package
+- Update to v6.6.2
+ * popen.MockPopen.set_command is now symmetrical with
+ popen.MockPopen process instantiation in that both can be called with
+ either lists or strings, in the same way as subprocess.Popen.
+- from 6.6.1
+ * Fixed bugs where using 'not_there' to ensure a key or attribute
+ was not there but would be set by a test would result in the test
+ attribute or key being left behind.
+ * Add support for comparing functools.partial instances and fix
+ comparison of functions and other objects where vars() returns
+ an empty dict.
+- from v6.6.0
+ * Add the ability to ignore attributes of particular object types when
+ using `compare`.
+- from v6.5.2
+ * Fix bug when `compare` was used with objects that had __slots__ inherited
+ from a base class but where their __slots__ was an empty sequence.
+- from v6.5.1
+ * Fix bug when `compare` was used with objects that had __slots__ inherited
+ from a base class.
+
+-------------------------------------------------------------------
Old:
----
testfixtures-6.5.0.tar.gz
New:
----
testfixtures-6.6.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-testfixtures.spec ++++++
--- /var/tmp/diff_new_pack.v91Bb3/_old 2019-03-29 20:42:37.942678309 +0100
+++ /var/tmp/diff_new_pack.v91Bb3/_new 2019-03-29 20:42:37.946678309 +0100
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-testfixtures
-Version: 6.5.0
+Version: 6.6.2
Release: 0
Summary: A collection of helpers and mock objects for unit tests and
doc tests
License: MIT
@@ -56,13 +56,14 @@
%prep
%setup -q -n testfixtures-%{version}
-cp docs/changes.txt changes.txt
+chmod a-x docs/*.txt
%build
%python_build
%install
%python_install
+%python_expand rm -r %{buildroot}%{$python_sitelib}/testfixtures/tests
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
@@ -71,7 +72,7 @@
%files %{python_files}
%license LICENSE.txt
-%doc README.rst changes.txt
+%doc README.rst docs/*.txt
%{python_sitelib}/*
%changelog
++++++ testfixtures-6.5.0.tar.gz -> testfixtures-6.6.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/.carthorse.yml
new/testfixtures-6.6.2/.carthorse.yml
--- old/testfixtures-6.5.0/.carthorse.yml 1970-01-01 01:00:00.000000000
+0100
+++ new/testfixtures-6.6.2/.carthorse.yml 2019-03-22 08:47:24.000000000
+0100
@@ -0,0 +1,10 @@
+carthorse:
+ version-from: setup.py
+ tag-format: "{version}"
+ when:
+ - version-not-tagged
+ actions:
+ - run: "sudo pip install -e .[build]"
+ - run: "sudo python setup.py sdist bdist_wheel"
+ - run: "twine upload -u chrisw -p $PYPI_PASS dist/*"
+ - create-tag
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/.circleci/config.yml
new/testfixtures-6.6.2/.circleci/config.yml
--- old/testfixtures-6.5.0/.circleci/config.yml 1970-01-01 01:00:00.000000000
+0100
+++ new/testfixtures-6.6.2/.circleci/config.yml 2019-03-22 08:47:24.000000000
+0100
@@ -0,0 +1,77 @@
+version: 2.1
+
+orbs:
+ python: cjw296/[email protected]
+
+common: &common
+ jobs:
+ - python/pip-run-tests:
+ name: python27
+ image: circleci/python:2.7
+ - python/pip-run-tests:
+ name: python36
+ image: circleci/python:3.6
+ - python/pip-run-tests:
+ name: python37
+ image: circleci/python:3.7
+ - python/pip-run-tests:
+ name: python36-mock-backport
+ image: circleci/python:3.6
+ extra_packages: "mock"
+ - python/pip-run-tests:
+ name: python37-mock-backport
+ image: circleci/python:3.7
+ extra_packages: "mock"
+ - python/pip-run-tests:
+ name: python27-django-1-9
+ image: circleci/python:2.7
+ extra_packages: "'django<1.10'"
+ - python/pip-run-tests:
+ name: python36-django-1-11
+ image: circleci/python:3.6
+ extra_packages: "'django<1.12'"
+ - python/pip-run-tests:
+ name: python37-django-1-11
+ image: circleci/python:3.7
+ extra_packages: "'django<1.12'"
+ - python/pip-run-tests:
+ name: python36-django-latest
+ image: circleci/python:3.6
+ - python/pip-run-tests:
+ name: python37-django-latest
+ image: circleci/python:3.7
+
+ - python/coverage:
+ name: coverage
+ requires:
+ - python27
+ - python36
+ - python37
+ - python36-mock-backport
+ - python37-mock-backport
+ - python27-django-1-9
+ - python36-django-1-11
+ - python37-django-1-11
+ - python36-django-latest
+ - python37-django-latest
+
+ - python/release:
+ name: release
+ config: .carthorse.yml
+ requires:
+ - coverage
+ filters:
+ branches:
+ only: master
+
+workflows:
+ push:
+ <<: *common
+ periodic:
+ <<: *common
+ triggers:
+ - schedule:
+ cron: "0 1 * * *"
+ filters:
+ branches:
+ only: master
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/.readthedocs.yml
new/testfixtures-6.6.2/.readthedocs.yml
--- old/testfixtures-6.5.0/.readthedocs.yml 1970-01-01 01:00:00.000000000
+0100
+++ new/testfixtures-6.6.2/.readthedocs.yml 2019-03-22 08:47:24.000000000
+0100
@@ -0,0 +1,8 @@
+version: 2
+python:
+ version: 3.7
+ install:
+ - method: pip
+ path: .
+ extra_requirements:
+ - build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/.travis.yml
new/testfixtures-6.6.2/.travis.yml
--- old/testfixtures-6.5.0/.travis.yml 2018-12-19 13:08:08.000000000 +0100
+++ new/testfixtures-6.6.2/.travis.yml 1970-01-01 01:00:00.000000000 +0100
@@ -1,90 +0,0 @@
-group: travis_latest
-dist: xenial
-sudo: true
-cache:
- directories:
- - $HOME/.cache/pip
-
-language: python
-
-env:
- global:
- # travis encrypt COVERALLS_REPO_TOKEN=...
- secure:
"UOGwoOV0DuItLsE4yDnnm+UnYbmNUVJ+vU+ePEN17kRkFZyF9GYg+ZXr0uCAAdMC3okVaj6QrCk3OEDlUN8YKJzBIfn3pC3DB9CRneOWLwh+/D+iE6dtjBz+2MWthPFs3YLWlJYmF2TUrcj7ZI+DBAAbnm4JftX/uJi/ndht7Lo="
- matrix:
- - DJANGO_VERSION=latest
- - DJANGO_VERSION=1.11
- - DJANGO_VERSION=1.9
- - MOCK_BACKPORT=true
-
-python:
- - "2.7"
- - "3.6"
- - "3.7"
-
-matrix:
-
- exclude:
- - env: DJANGO_VERSION=latest
- python: "2.7"
- - env: MOCK_BACKPORT=true
- python: "2.7"
-
-# command to install dependencies
-install:
-# remove crap from Travis image:
-- "pip uninstall -y mock nose"
-# make sure we have the latest and greated:
-- "pip install --upgrade pip setuptools"
-# install the right versions of dependencies:
-- "pip install -Ue .[test]"
-- sh -c "if [ $DJANGO_VERSION = '1.11' ]; then pip install -U 'django<1.12';
fi"
-- sh -c "if [ $DJANGO_VERSION = '1.9' ]; then pip install -U 'django<1.10'; fi"
-- sh -c "if [ ${MOCK_BACKPORT:-'false'} = 'true' ]; then pip install -U
'mock'; fi"
-# show what we have:
-- "pip freeze"
-
-# command to run tests, e.g. python setup.py test
-script: coverage run -m pytest
-
-after_success:
- - coverage combine
- - "COVERALLS_PARALLEL=true coveralls"
-
-# tell coveralls so we can ge a post back for PRs
-notifications:
- webhooks: https://coveralls.io/webhook
-
-jobs:
- include:
-
- - stage: coverage
- if: type != pull_request
- python: 3.6
- env: DJANGO_VERSION=latest
- after_success: skip
-
- install: "pip install -U coveralls-check"
- script: "coveralls-check $TRAVIS_COMMIT --parallel-build-number
$TRAVIS_BUILD_NUMBER --repo-token $COVERALLS_REPO_TOKEN"
-
- - stage: release
- if: tag IS present
- python: 3.6
- env: DJANGO_VERSION=latest
- script: skip
- # work around https://github.com/travis-ci/travis-ci/issues/8337:
- after_success: true
-
- install:
- - "pip install --upgrade pip setuptools"
- - "pip install -Ue .[build]"
- deploy:
- provider: pypi
- user: chrisw
- password:
- secure:
QrmUWPegJzGIYGI8XGY7ztjHTbpMgVDLNV6f9fjjAoo8efOubJh/BASjWD3ESPlIo1j5tGCcSRP2MN1+30zBxq7a7oiCnthISx42DP6Ih+wLHFCu7uBm12AH96hIOQUAtQotNSwB9dJAJIKKom7xkrV/nStjbcqC7hosTZlTy6o=
- on:
- tags: true
- repo: Simplistix/testfixtures
- skip_cleanup: true
- distributions: "sdist bdist_wheel"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/PKG-INFO
new/testfixtures-6.6.2/PKG-INFO
--- old/testfixtures-6.5.0/PKG-INFO 2019-01-28 23:53:02.000000000 +0100
+++ new/testfixtures-6.6.2/PKG-INFO 2019-03-22 08:47:36.000000000 +0100
@@ -1,12 +1,11 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: testfixtures
-Version: 6.5.0
+Version: 6.6.2
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: [email protected]
License: MIT
-Description-Content-Type: UNKNOWN
Description: ============
TestFixtures
============
@@ -76,3 +75,5 @@
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
+Provides-Extra: test
+Provides-Extra: build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/README.rst
new/testfixtures-6.6.2/README.rst
--- old/testfixtures-6.5.0/README.rst 2017-09-01 23:33:17.000000000 +0200
+++ new/testfixtures-6.6.2/README.rst 2019-03-22 08:47:24.000000000 +0100
@@ -1,18 +1,15 @@
-|Travis|_ |Coveralls|_ |Docs|_
+|CircleCI|_ |Docs|_
-.. |Travis| image::
https://api.travis-ci.org/Simplistix/testfixtures.svg?branch=master
-.. _Travis: https://travis-ci.org/Simplistix/testfixtures
-
-.. |Coveralls| image::
https://coveralls.io/repos/Simplistix/testfixtures/badge.svg?branch=master
-.. _Coveralls: https://coveralls.io/r/Simplistix/testfixtures?branch=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/
-TestFixtures
+Testfixtures
============
-TestFixtures is a collection of helpers and mock objects that are useful when
-writing unit tests or doc tests.
+Testfixtures is a collection of helpers and mock objects that are useful when
+writing automated tests in Python.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/docs/api.txt
new/testfixtures-6.6.2/docs/api.txt
--- old/testfixtures-6.5.0/docs/api.txt 2019-01-28 23:20:16.000000000 +0100
+++ new/testfixtures-6.6.2/docs/api.txt 2019-03-22 08:47:24.000000000 +0100
@@ -48,6 +48,10 @@
.. autofunction:: testfixtures.comparison.compare_simple
+.. autofunction:: testfixtures.comparison.compare_object
+
+.. autofunction:: testfixtures.comparison.compare_exception
+
.. autofunction:: testfixtures.comparison.compare_with_type
.. autofunction:: testfixtures.comparison.compare_sequence
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/docs/changes.txt
new/testfixtures-6.6.2/docs/changes.txt
--- old/testfixtures-6.5.0/docs/changes.txt 2019-01-28 23:25:22.000000000
+0100
+++ new/testfixtures-6.6.2/docs/changes.txt 2019-03-22 08:47:24.000000000
+0100
@@ -3,6 +3,40 @@
.. currentmodule:: testfixtures
+6.6.2 (22 Mar 2019)
+-------------------
+
+- :meth:`popen.MockPopen.set_command` is now symmetrical with
+ :class:`popen.MockPopen` process instantiation in that both can be called
with
+ either lists or strings, in the same way as :class:`subprocess.Popen`.
+
+6.6.1 (13 Mar 2019)
+-------------------
+
+- Fixed bugs where using :attr:`not_there` to ensure a key or attribute was
not there
+ but would be set by a test would result in the test attribute or key being
left behind.
+
+- Add support for comparing :func:`~functools.partial` instances and fix
comparison of
+ functions and other objects where ``vars()`` returns an empty :class:`dict`.
+
+6.6.0 (22 Feb 2019)
+-------------------
+
+- Add the ability to ignore attributes of particular object types when using
+ :func:`compare`.
+
+6.5.2 (18 Feb 2019)
+-------------------
+
+- Fix bug when :func:`compare` was used with objects that had ``__slots__``
inherited from a
+ base class but where their ``__slots__`` was an empty sequence.
+
+6.5.1 (18 Feb 2019)
+-------------------
+
+- Fix bug when :func:`compare` was used with objects that had ``__slots__``
inherited from a
+ base class.
+
6.5.0 (28 Jan 2019)
-------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/docs/conf.py
new/testfixtures-6.6.2/docs/conf.py
--- old/testfixtures-6.5.0/docs/conf.py 2017-09-01 23:33:17.000000000 +0200
+++ new/testfixtures-6.6.2/docs/conf.py 2019-03-22 08:47:24.000000000 +0100
@@ -1,12 +1,11 @@
# -*- coding: utf-8 -*-
import datetime
import os
-import pkginfo
-import sys
import time
+import pkg_resources
+
on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
-pkg_info = pkginfo.Develop(os.path.join(os.path.dirname(__file__), '..'))
build_date =
datetime.datetime.utcfromtimestamp(int(os.environ.get('SOURCE_DATE_EPOCH',
time.time())))
extensions = [
@@ -23,9 +22,9 @@
# General
source_suffix = '.txt'
master_doc = 'index'
-project = pkg_info.name
+project = 'testfixtures'
copyright = '2008-2015 Simplistix Ltd, 2016-%s Chris Withers' % build_date.year
-version = release = pkg_info.version
+version = release = pkg_resources.get_distribution(project).version
exclude_trees = ['_build']
exclude_patterns = ['description.txt']
pygments_style = 'sphinx'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/docs/development.txt
new/testfixtures-6.6.2/docs/development.txt
--- old/testfixtures-6.5.0/docs/development.txt 2017-09-01 23:33:17.000000000
+0200
+++ new/testfixtures-6.6.2/docs/development.txt 2019-03-22 08:47:24.000000000
+0100
@@ -58,10 +58,6 @@
Making a release
----------------
-To make a release, just update ``versions.txt``, update the change log, tag it
+To make a release, just update ``versions.txt``, update the change log
and push to https://github.com/Simplistix/testfixtures
-and Travis CI should take care of the rest.
-
-Once Travis CI is done, make sure to go to
-https://readthedocs.org/projects/testfixtures/versions/
-and make sure the new release is marked as an Active Version.
+and Carthorse should take care of the rest.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/requirements.txt
new/testfixtures-6.6.2/requirements.txt
--- old/testfixtures-6.5.0/requirements.txt 2015-11-15 00:44:35.000000000
+0100
+++ new/testfixtures-6.6.2/requirements.txt 1970-01-01 01:00:00.000000000
+0100
@@ -1 +0,0 @@
--e .[build]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/setup.py
new/testfixtures-6.6.2/setup.py
--- old/testfixtures-6.5.0/setup.py 2019-01-28 18:20:45.000000000 +0100
+++ new/testfixtures-6.6.2/setup.py 2019-03-22 08:47:24.000000000 +0100
@@ -35,15 +35,14 @@
include_package_data=True,
extras_require=dict(
test=['pytest>=3.6',
+ 'pytest-cov',
+ 'pytest-django',
'mock;python_version<"3"',
'sybil',
- 'coverage',
- 'coveralls',
'zope.component',
'django<2;python_version<"3"',
'django;python_version>="3"',
- 'pytest-django',
'twisted'],
- build=['sphinx', 'pkginfo', 'setuptools-git', 'wheel', 'twine']
+ build=['sphinx', 'setuptools-git', 'wheel', 'twine']
)
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures/comparison.py
new/testfixtures-6.6.2/testfixtures/comparison.py
--- old/testfixtures-6.5.0/testfixtures/comparison.py 2019-01-28
18:16:09.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures/comparison.py 2019-03-22
08:47:24.000000000 +0100
@@ -1,5 +1,6 @@
from collections import Iterable
from difflib import unified_diff
+from functools import partial
from pprint import pformat
from re import compile, MULTILINE
from types import GeneratorType
@@ -19,9 +20,12 @@
return context.label('x', repr(x)) + ' != ' + context.label('y',
repr(y))
-def _extract_attrs(obj):
- slots = getattr(obj, '__slots__', None)
- if slots:
+def _extract_attrs(obj, ignore=None):
+ has_slots = getattr(obj, '__slots__', not_there) is not not_there
+ if has_slots:
+ slots = set()
+ for cls in type(obj).__mro__:
+ slots.update(getattr(cls, '__slots__', ()))
attrs = {}
for n in slots:
value = getattr(obj, n, not_there)
@@ -35,18 +39,30 @@
else:
if isinstance(obj, BaseException):
attrs['args'] = obj.args
+ if ignore is not None:
+ if isinstance(ignore, dict):
+ ignore = ignore.get(type(obj), ())
+ for attr in ignore:
+ attrs.pop(attr, None)
return attrs
def compare_object(x, y, context):
"""
Compare the two supplied objects based on their type and attributes.
+
+ :param ignore_attributes:
+
+ Either a sequence of strings containing attribute names to be ignored
+ when comparing or a mapping of type to sequence of strings containing
+ attribute names to be ignored when comparing that type.
"""
+ ignore_attributes = context.get_option('ignore_attributes', ())
if type(x) is not type(y) or isinstance(x, ClassType):
return compare_simple(x, y, context)
- x_attrs = _extract_attrs(x)
- y_attrs = _extract_attrs(y)
- if x_attrs is None or y_attrs is None:
+ x_attrs = _extract_attrs(x, ignore_attributes)
+ y_attrs = _extract_attrs(y, ignore_attributes)
+ if x_attrs is None or y_attrs is None or not (x_attrs and y_attrs):
return compare_simple(x, y, context)
if x_attrs != y_attrs:
return _compare_mapping(x_attrs, y_attrs, context, x,
@@ -321,6 +337,14 @@
return compare_text(repr(x), repr(y), context)
+def compare_partial(x, y, context):
+ x_attrs = dict(func=x.func, args=x.args, keywords=x.keywords)
+ y_attrs = dict(func=y.func, args=y.args, keywords=y.keywords)
+ if x_attrs != y_attrs:
+ return _compare_mapping(x_attrs, y_attrs, context, x,
+ 'attributes ', '.%s')
+
+
def _short_repr(obj):
repr_ = repr(obj)
if len(repr_) > 30:
@@ -341,6 +365,7 @@
mock_call.__class__: compare_call,
unittest_mock_call.__class__: compare_call,
BaseException: compare_exception,
+ partial: compare_partial,
}
if PY3:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures/components.py
new/testfixtures-6.6.2/testfixtures/components.py
--- old/testfixtures-6.5.0/testfixtures/components.py 2018-06-16
18:29:16.000000000 +0200
+++ new/testfixtures-6.6.2/testfixtures/components.py 2019-03-22
08:47:24.000000000 +0100
@@ -2,7 +2,7 @@
import warnings
from zope.component import getSiteManager
-from zope.component.registry import Components
+from zope.interface.registry import Components
class TestComponents:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures/logcapture.py
new/testfixtures-6.6.2/testfixtures/logcapture.py
--- old/testfixtures-6.5.0/testfixtures/logcapture.py 2018-06-16
18:29:16.000000000 +0200
+++ new/testfixtures-6.6.2/testfixtures/logcapture.py 2019-03-22
08:47:24.000000000 +0100
@@ -111,7 +111,7 @@
framework for the named loggers.
This will re-instate any existing handlers for those loggers
- that were removed during installation and retore their level
+ that were removed during installation and restore their level
that prior to installation.
"""
if self in self.instances:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures/popen.py
new/testfixtures-6.6.2/testfixtures/popen.py
--- old/testfixtures-6.5.0/testfixtures/popen.py 2019-01-09
09:16:37.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures/popen.py 2019-03-22
08:47:24.000000000 +0100
@@ -1,3 +1,4 @@
+import pipes
from functools import wraps, partial
from itertools import chain
from subprocess import STDOUT, PIPE
@@ -8,6 +9,12 @@
from .mock import Mock, call
+def shell_join(command):
+ if not isinstance(command, basestring):
+ command = " ".join(pipes.quote(part) for part in command)
+ return command
+
+
class PopenBehaviour(object):
"""
An object representing the behaviour of a :class:`MockPopen` when
@@ -65,10 +72,7 @@
self.calls = []
self.all_calls = mock_class.all_calls
- if isinstance(args, basestring):
- cmd = args
- else:
- cmd = ' '.join(args)
+ cmd = shell_join(args)
behaviour = mock_class.commands.get(cmd, mock_class.default_behaviour)
if behaviour is None:
@@ -223,7 +227,7 @@
:param command: A string representing the command to be simulated.
"""
- self.commands[command] = self._resolve_behaviour(
+ self.commands[shell_join(command)] = self._resolve_behaviour(
stdout, stderr, returncode, pid, poll_count, behaviour
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures/replace.py
new/testfixtures-6.6.2/testfixtures/replace.py
--- old/testfixtures-6.5.0/testfixtures/replace.py 2018-06-16
18:29:16.000000000 +0200
+++ new/testfixtures-6.6.2/testfixtures/replace.py 2019-03-22
08:47:24.000000000 +0100
@@ -23,9 +23,15 @@
def _replace(self, container, name, method, value, strict=True):
if value is not_there:
if method == 'a':
- delattr(container, name)
+ try:
+ delattr(container, name)
+ except AttributeError:
+ pass
if method == 'i':
- del container[name]
+ try:
+ del container[name]
+ except KeyError:
+ pass
else:
if method == 'a':
setattr(container, name, value)
@@ -42,8 +48,6 @@
raise ValueError('target must contain at least one dot!')
if t_obj is not_there and strict:
raise AttributeError('Original %r not found' % attribute)
- if t_obj is not_there and replacement is not_there:
- return not_there
replacement_to_use = replacement
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/testfixtures-6.5.0/testfixtures/tests/test_compare.py
new/testfixtures-6.6.2/testfixtures/tests/test_compare.py
--- old/testfixtures-6.5.0/testfixtures/tests/test_compare.py 2018-12-19
13:08:08.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures/tests/test_compare.py 2019-03-22
08:47:24.000000000 +0100
@@ -1581,3 +1581,158 @@
"datetime.datetime(2001, 1, 1, 0, 0) != "
"datetime.datetime(2001, 1, 2, 0, 0)"
)
+
+ def test_inherited_slots(self):
+
+ class Parent(object):
+ __slots__ = ('a',)
+
+ class Child(Parent):
+ __slots__ = ('b',)
+
+ def __init__(self, a, b):
+ self.a, self.b = a, b
+
+ self.check_raises(
+ Child(1, 'x'),
+ Child(2, 'x'),
+ 'Child not as expected:\n'
+ '\n'
+ 'attributes same:\n'
+ "['b']\n"
+ '\n'
+ 'attributes differ:\n'
+ "'a': 1 != 2"
+ )
+
+ def test_empty_child_slots(self):
+
+ class Parent(object):
+ __slots__ = ('a',)
+
+ def __init__(self, a):
+ self.a = a
+
+ class Child(Parent):
+ __slots__ = ()
+
+ compare(Child(1), Child(1))
+
+ def test_partial_callable_different(self):
+
+ def foo(x): pass
+ def bar(y): pass
+
+ self.check_raises(
+ partial(foo),
+ partial(bar),
+ (
+ 'partial not as expected:\n'
+ '\n'
+ 'attributes same:\n'
+ "['args', 'keywords']\n"
+ '\n'
+ 'attributes differ:\n'
+ "'func': {foo} != {bar}\n"
+ '\n'
+ 'While comparing .func: {foo} != {bar}'
+ ).format(foo=hexsub(repr(foo)), bar=hexsub(repr(bar))))
+
+ def test_partial_args_different(self):
+
+ def foo(x): pass
+
+ self.check_raises(
+ partial(foo, 1),
+ partial(foo, 2),
+ 'partial not as expected:\n'
+ '\n'
+ 'attributes same:\n'
+ "['func', 'keywords']\n"
+ '\n'
+ 'attributes differ:\n'
+ "'args': (1,) != (2,)\n"
+ '\n'
+ 'While comparing .args: sequence not as expected:\n'
+ '\n'
+ 'same:\n'
+ '()\n'
+ '\n'
+ 'first:\n'
+ '(1,)\n'
+ '\n'
+ 'second:\n'
+ '(2,)'
+ )
+
+ def test_partial_kw_different(self):
+
+ def foo(x): pass
+
+ self.check_raises(
+ partial(foo, x=1, y=3),
+ partial(foo, x=2, z=4),
+ 'partial not as expected:\n'
+ '\n'
+ 'attributes same:\n'
+ "['args', 'func']\n"
+ '\n'
+ 'attributes differ:\n'
+ "'keywords': {'x': 1, 'y': 3} != {'x': 2, 'z': 4}\n"
+ '\n'
+ 'While comparing .keywords: dict not as expected:\n'
+ '\n'
+ 'in first but not second:\n'
+ "'y': 3\n"
+ '\n'
+ 'in second but not first:\n'
+ "'z': 4\n"
+ '\n'
+ 'values differ:\n'
+ "'x': 1 != 2"
+ )
+
+ def test_partial_equal(self):
+
+ def foo(x): pass
+
+ compare(partial(foo, 1, x=2), partial(foo, 1, x=2))
+
+
+class TestIgnore(CompareHelper):
+
+ class Parent(object):
+ def __init__(self, id, other):
+ self.id = id
+ self.other = other
+ def __repr__(self):
+ return '<{}:{}>'.format(type(self).__name__, self.id)
+
+ class Child(Parent): pass
+
+ def test_ignore_attributes(self):
+ compare(self.Parent(1, 3), self.Parent(2, 3), ignore_attributes={'id'})
+
+ def test_ignore_attributes_different_types(self):
+ self.check_raises(
+ self.Parent(1, 3),
+ self.Child(2, 3),
+ '<Parent:1> != <Child:2>',
+ ignore_attributes={'id'}
+ )
+
+ def test_ignore_attributes_per_type(self):
+ ignore = {self.Parent: {'id'}}
+ compare(self.Parent(1, 3), self.Parent(2, 3), ignore_attributes=ignore)
+ self.check_raises(
+ self.Child(1, 3),
+ self.Child(2, 3),
+ 'Child not as expected:\n'
+ '\n'
+ 'attributes same:\n'
+ "['other']\n"
+ '\n'
+ 'attributes differ:\n'
+ "'id': 1 != 2",
+ ignore_attributes=ignore
+ )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures/tests/test_popen.py
new/testfixtures-6.6.2/testfixtures/tests/test_popen.py
--- old/testfixtures-6.5.0/testfixtures/tests/test_popen.py 2019-01-09
09:16:37.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures/tests/test_popen.py 2019-03-22
08:47:24.000000000 +0100
@@ -599,6 +599,13 @@
call.Popen('a command', executable='/foo/bar')
])
+ def test_set_command_with_list(self):
+ Popen = MockPopen()
+ Popen.set_command(['a', 'command'])
+ Popen(['a', 'command'], stdout=PIPE, stderr=PIPE)
+ compare([call.Popen(['a', 'command'], stderr=-1, stdout=-1)],
+ actual=Popen.all_calls)
+
class IntegrationTests(TestCase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/testfixtures-6.5.0/testfixtures/tests/test_popen_docs.py
new/testfixtures-6.6.2/testfixtures/tests/test_popen_docs.py
--- old/testfixtures-6.5.0/testfixtures/tests/test_popen_docs.py
2018-12-19 13:08:08.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures/tests/test_popen_docs.py
2019-03-22 08:47:24.000000000 +0100
@@ -5,7 +5,7 @@
def my_func():
- process = Popen('svn ls -R foo', stdout=PIPE, stderr=PIPE, shell=True)
+ process = Popen(['svn', 'ls', '-R', 'foo'], stdout=PIPE, stderr=PIPE)
out, err = process.communicate()
if process.returncode:
raise RuntimeError('something bad happened')
@@ -36,7 +36,7 @@
compare(my_func(), b'o')
# testing calls were in the right order and with the correct
parameters:
- process = call.Popen('svn ls -R foo', shell=True, stderr=PIPE,
stdout=PIPE)
+ process = call.Popen(['svn', 'ls', '-R', 'foo'], stderr=PIPE,
stdout=PIPE)
compare(Popen.all_calls, expected=[
process,
process.communicate()
@@ -144,8 +144,8 @@
compare(my_func(), b'o')
# testing calls were in the right order and with the correct
parameters:
- root_call = call.Popen('svn ls -R foo',
- shell=True, stderr=PIPE, stdout=PIPE)
+ root_call = call.Popen(['svn', 'ls', '-R', 'foo'],
+ stderr=PIPE, stdout=PIPE)
compare(Popen.all_calls, expected=[
root_call,
root_call.communicate()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/testfixtures-6.5.0/testfixtures/tests/test_replace.py
new/testfixtures-6.6.2/testfixtures/tests/test_replace.py
--- old/testfixtures-6.5.0/testfixtures/tests/test_replace.py 2018-12-19
13:08:08.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures/tests/test_replace.py 2019-03-22
08:47:24.000000000 +0100
@@ -246,6 +246,18 @@
test_something()
+ def test_replace_delattr_not_there_restored(self):
+
+ from testfixtures.tests import sample1
+
+ @replace('testfixtures.tests.sample1.foo',
+ not_there, strict=False)
+ def test_something(obj):
+ sample1.foo = 'bar'
+
+ test_something()
+ self.failIf(hasattr(sample1, 'foo'))
+
def test_replace_delattr_cant_remove(self):
with Replacer() as r:
with ShouldRaise(TypeError(
@@ -298,6 +310,19 @@
test_something()
+ self.assertEqual(sorted(someDict.keys()), ['complex_key', 'key'])
+
+ def test_replace_dict_ensure_key_not_there_restored(self):
+
+ from testfixtures.tests.sample1 import someDict
+
+ @replace('testfixtures.tests.sample1.someDict.badkey',
+ not_there, strict=False)
+ def test_something(obj):
+ someDict['badkey'] = 'some test value'
+
+ test_something()
+
self.assertEqual(sorted(someDict.keys()), ['complex_key', 'key'])
def test_replace_dict_not_there(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures/version.txt
new/testfixtures-6.6.2/testfixtures/version.txt
--- old/testfixtures-6.5.0/testfixtures/version.txt 2019-01-28
23:25:22.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures/version.txt 2019-03-22
08:47:24.000000000 +0100
@@ -1 +1 @@
-6.5.0
+6.6.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures.egg-info/PKG-INFO
new/testfixtures-6.6.2/testfixtures.egg-info/PKG-INFO
--- old/testfixtures-6.5.0/testfixtures.egg-info/PKG-INFO 2019-01-28
23:53:02.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures.egg-info/PKG-INFO 2019-03-22
08:47:36.000000000 +0100
@@ -1,12 +1,11 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: testfixtures
-Version: 6.5.0
+Version: 6.6.2
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: [email protected]
License: MIT
-Description-Content-Type: UNKNOWN
Description: ============
TestFixtures
============
@@ -76,3 +75,5 @@
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
+Provides-Extra: test
+Provides-Extra: build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures.egg-info/SOURCES.txt
new/testfixtures-6.6.2/testfixtures.egg-info/SOURCES.txt
--- old/testfixtures-6.5.0/testfixtures.egg-info/SOURCES.txt 2019-01-28
23:53:02.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures.egg-info/SOURCES.txt 2019-03-22
08:47:36.000000000 +0100
@@ -1,11 +1,12 @@
+.carthorse.yml
.coveragerc
.gitignore
-.travis.yml
+.readthedocs.yml
LICENSE.txt
README.rst
-requirements.txt
setup.cfg
setup.py
+.circleci/config.yml
docs/Makefile
docs/api.txt
docs/changes.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/testfixtures-6.5.0/testfixtures.egg-info/requires.txt
new/testfixtures-6.6.2/testfixtures.egg-info/requires.txt
--- old/testfixtures-6.5.0/testfixtures.egg-info/requires.txt 2019-01-28
23:53:02.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures.egg-info/requires.txt 2019-03-22
08:47:36.000000000 +0100
@@ -1,18 +1,16 @@
[build]
sphinx
-pkginfo
setuptools-git
wheel
twine
[test]
pytest>=3.6
+pytest-cov
+pytest-django
sybil
-coverage
-coveralls
zope.component
-pytest-django
twisted
[test:python_version < "3"]