diff -Nru zope.interface-4.1.1/bootstrap.py zope.interface-4.1.2/bootstrap.py --- zope.interface-4.1.1/bootstrap.py 2013-07-10 00:33:10.000000000 +0000 +++ zope.interface-4.1.2/bootstrap.py 2014-12-28 00:28:18.000000000 +0000 @@ -35,7 +35,7 @@ Simply run this script in a directory containing a buildout.cfg, using the Python that you want bin/buildout to use. -Note that by using --find-links to point to local resources, you can keep +Note that by using --find-links to point to local resources, you can keep this script from going over the network. ''' @@ -56,6 +56,11 @@ "file to be used.")) parser.add_option("-f", "--find-links", help=("Specify a URL to search for buildout releases")) +parser.add_option("--allow-site-packages", + action="store_true", default=False, + help=("Let bootstrap.py use existing site packages")) +parser.add_option("--setuptools-version", + help="use a specific setuptools version") options, args = parser.parse_args() @@ -63,32 +68,42 @@ ###################################################################### # load/install setuptools -to_reload = False try: - import pkg_resources - import setuptools + if options.allow_site_packages: + import setuptools + import pkg_resources + from urllib.request import urlopen except ImportError: - ez = {} + from urllib2 import urlopen + +ez = {} +exec(urlopen('https://bootstrap.pypa.io/ez_setup.py').read(), ez) - try: - from urllib.request import urlopen - except ImportError: - from urllib2 import urlopen - - # XXX use a more permanent ez_setup.py URL when available. - exec(urlopen('https://bitbucket.org/pypa/setuptools/raw/0.7.2/ez_setup.py' - ).read(), ez) - setup_args = dict(to_dir=tmpeggs, download_delay=0) - ez['use_setuptools'](**setup_args) - - if to_reload: - reload(pkg_resources) - import pkg_resources - # This does not (always?) update the default working set. We will - # do it. - for path in sys.path: - if path not in pkg_resources.working_set.entries: - pkg_resources.working_set.add_entry(path) +if not options.allow_site_packages: + # ez_setup imports site, which adds site packages + # this will remove them from the path to ensure that incompatible versions + # of setuptools are not in the path + import site + # inside a virtualenv, there is no 'getsitepackages'. + # We can't remove these reliably + if hasattr(site, 'getsitepackages'): + for sitepackage_path in site.getsitepackages(): + sys.path[:] = [x for x in sys.path if sitepackage_path not in x] + +setup_args = dict(to_dir=tmpeggs, download_delay=0) + +if options.setuptools_version is not None: + setup_args['version'] = options.setuptools_version + +ez['use_setuptools'](**setup_args) +import setuptools +import pkg_resources + +# This does not (always?) update the default working set. We will +# do it. +for path in sys.path: + if path not in pkg_resources.working_set.entries: + pkg_resources.working_set.add_entry(path) ###################################################################### # Install buildout @@ -119,10 +134,15 @@ _final_parts = '*final-', '*final' def _final_version(parsed_version): - for part in parsed_version: - if (part[:1] == '*') and (part not in _final_parts): - return False - return True + try: + return not parsed_version.is_prerelease + except AttributeError: + # Older setuptools + for part in parsed_version: + if (part[:1] == '*') and (part not in _final_parts): + return False + return True + index = setuptools.package_index.PackageIndex( search_path=[setuptools_path]) if find_links: @@ -149,8 +169,7 @@ import subprocess if subprocess.call(cmd, env=dict(os.environ, PYTHONPATH=setuptools_path)) != 0: raise Exception( - "Failed to execute command:\n%s", - repr(cmd)[1:-1]) + "Failed to execute command:\n%s" % repr(cmd)[1:-1]) ###################################################################### # Import and run buildout diff -Nru zope.interface-4.1.1/CHANGES.rst zope.interface-4.1.2/CHANGES.rst --- zope.interface-4.1.1/CHANGES.rst 2014-03-19 18:34:00.000000000 +0000 +++ zope.interface-4.1.2/CHANGES.rst 2014-12-28 00:46:09.000000000 +0000 @@ -1,32 +1,43 @@ -``zope.interface Changelog`` -============================ +Changes +======= + +4.1.2 (2014-12-27) +------------------ + +- Add support for PyPy3. + +- Remove unittest assertions deprecated in Python3.x. + +- Add ``zope.interface.document.asReStructuredText``, which formats the + generated text for an interface using ReST double-backtick markers. + 4.1.1 (2014-03-19) ------------------ -- Added support for Python 3.4. +- Add support for Python 3.4. 4.1.0 (2014-02-05) ------------------ -- Updated ``boostrap.py`` to version 2.2. +- Update ``boostrap.py`` to version 2.2. -- Added ``@named(name)`` declaration, that specifies the component name, so it +- Add ``@named(name)`` declaration, that specifies the component name, so it does not have to be passed in during registration. 4.0.5 (2013-02-28) ------------------ -- Fixed a bug where a decorated method caused false positive failures on +- Fix a bug where a decorated method caused false positive failures on ``verifyClass()``. 4.0.4 (2013-02-21) ------------------ -- Fixed a bug that was revealed by porting zope.traversing. During a loop, the +- Fix a bug that was revealed by porting zope.traversing. During a loop, the loop body modified a weakref dict causing a ``RuntimeError`` error. 4.0.3 (2012-12-31) @@ -37,7 +48,7 @@ 4.0.2 (2012-11-21) ------------------ -- Added support for Python 3.3. +- Add support for Python 3.3. - Restored ability to install the package in the absence of ``setuptools``. @@ -47,7 +58,7 @@ 4.0.1 (2012-05-22) ------------------ -- Dropped explicit ``DeprecationWarnings`` for "class advice" APIS (these +- Drop explicit ``DeprecationWarnings`` for "class advice" APIS (these APIs are still deprecated under Python 2.x, and still raise an exception under Python 3.x, but no longer cause a warning to be emitted under Python 2.x). @@ -57,29 +68,29 @@ - Automated build of Sphinx HTML docs and running doctest snippets via tox. -- Deprecated the "class advice" APIs from ``zope.interface.declarations``: +- Deprecate the "class advice" APIs from ``zope.interface.declarations``: ``implements``, ``implementsOnly``, and ``classProvides``. In their place, prefer the equivalent class decorators: ``@implementer``, ``@implementer_only``, and ``@provider``. Code which uses the deprecated APIs will not work as expected under Py3k. -- Removed use of '2to3' and associated fixers when installing under Py3k. +- Remove use of '2to3' and associated fixers when installing under Py3k. The code is now in a "compatible subset" which supports Python 2.6, 2.7, and 3.2, including PyPy 1.8 (the version compatible with the 2.7 language spec). -- Dropped explicit support for Python 2.4 / 2.5 / 3.1. +- Drop explicit support for Python 2.4 / 2.5 / 3.1. -- Added support for PyPy. +- Add support for PyPy. -- Added support for continuous integration using ``tox`` and ``jenkins``. +- Add support for continuous integration using ``tox`` and ``jenkins``. -- Added 'setup.py dev' alias (runs ``setup.py develop`` plus installs +- Add 'setup.py dev' alias (runs ``setup.py develop`` plus installs ``nose`` and ``coverage``). -- Added 'setup.py docs' alias (installs ``Sphinx`` and dependencies). +- Add 'setup.py docs' alias (installs ``Sphinx`` and dependencies). -- Replaced all unittest coverage previously accomplished via doctests with +- Replace all unittest coverage previously accomplished via doctests with unittests. The doctests have been moved into a ``docs`` section, managed as a Sphinx collection. @@ -136,7 +147,7 @@ - LP #570942: Now correctly compare interfaces from different modules but with the same names. - + N.B.: This is a less intrusive / destabilizing fix than the one applied in 3.6.3: we only fix the underlying cmp-alike function, rather than adding the other "rich comparison" functions. @@ -191,7 +202,7 @@ - A non-ASCII character in the changelog made 3.6.0 uninstallable on Python 3 systems with another default encoding than UTF-8. -- Fixed compiler warnings under GCC 4.3.3. +- Fix compiler warnings under GCC 4.3.3. 3.6.0 (2010-04-29) ------------------ @@ -199,7 +210,7 @@ - LP #185974: Clear the cache used by ``Specificaton.get`` inside ``Specification.changed``. Thanks to Jacob Holm for the patch. -- Added support for Python 3.1. Contributors: +- Add support for Python 3.1. Contributors: Lennart Regebro Martin v Loewis @@ -269,7 +280,7 @@ 3.5.0 (2008-10-26) ------------------ -- Fixed declaration of _zope_interface_coptimizations, it's not a top level +- Fix declaration of _zope_interface_coptimizations, it's not a top level package. - Add a DocTestSuite for odd.py module, so their tests are run. @@ -279,17 +290,17 @@ - Fix https://bugs.launchpad.net/zope3/3.3/+bug/98388: ISpecification was missing a declaration for __iro__. -- Added optional code optimizations support, which allows the building +- Add optional code optimizations support, which allows the building of C code optimizations to fail (Jython). -- Replaced `_flatten` with a non-recursive implementation, effectively making +- Replace `_flatten` with a non-recursive implementation, effectively making it 3x faster. 3.4.1 (2007-10-02) ------------------ -- Fixed a setup bug that prevented installation from source on systems +- Fix a setup bug that prevented installation from source on systems without setuptools. @@ -303,9 +314,8 @@ -------------------- -- Objects with picky custom comparison methods couldn't be added to - component registries. Now, when checking whether an object is - already registered, identity comparison is used. +- When checking whether an object is already registered, use identity + comparison, to allow adding registering with picky custom comparison methods. 3.3.0.1 (2007-01-03) @@ -321,20 +331,19 @@ New Features ++++++++++++ -- The adapter-lookup algorithim was refactored to make it - much simpler and faster. +- Refactor the adapter-lookup algorithim to make it much simpler and faster. - Also, more of the adapter-lookup logic is implemented in C, making + Also, implement more of the adapter-lookup logic in C, making debugging of application code easier, since there is less infrastructre code to step through. -- We now treat objects without interface declarations as if they - declared that they provide zope.interface.Interface. +- Treat objects without interface declarations as if they + declared that they provide ``zope.interface.Interface``. -- There are a number of richer new adapter-registration interfaces +- Add a number of richer new adapter-registration interfaces that provide greater control and introspection. -- Added a new interface decorator to zope.interface that allows the +- Add a new interface decorator to zope.interface that allows the setting of tagged values on an interface at definition time (see zope.interface.taggedValue). @@ -373,7 +382,7 @@ - Made attribute resolution order consistent with component lookup order, i.e. new-style class MRO semantics. -- Deprecated 'isImplementedBy' and 'isImplementedByInstancesOf' APIs in +- Deprecate 'isImplementedBy' and 'isImplementedByInstancesOf' APIs in favor of 'implementedBy' and 'providedBy'. @@ -383,7 +392,7 @@ - Corresponds to the verison of the zope.interface package shipped as part of the Zope X3.0.1 release. -- Fixed a bug reported by James Knight, which caused adapter registries +- Fix a bug reported by James Knight, which caused adapter registries to fail occasionally to reflect declaration changes. diff -Nru zope.interface-4.1.1/.coveragerc zope.interface-4.1.2/.coveragerc --- zope.interface-4.1.1/.coveragerc 1970-01-01 00:00:00.000000000 +0000 +++ zope.interface-4.1.2/.coveragerc 2014-12-09 07:49:25.000000000 +0000 @@ -0,0 +1,4 @@ +[report] +exclude_lines = + # pragma: no cover + class I[A-Z]\w+\((Interface|I[A-Z].*)\): diff -Nru zope.interface-4.1.1/debian/changelog zope.interface-4.1.2/debian/changelog --- zope.interface-4.1.1/debian/changelog 2014-12-28 12:25:29.000000000 +0000 +++ zope.interface-4.1.2/debian/changelog 2015-07-08 23:42:39.000000000 +0000 @@ -1,3 +1,17 @@ +zope.interface (4.1.2-1) unstable; urgency=medium + + * New upstream release. + * d/control: + - Bump Standards-Version with no other changes necessary. + - wrap-and-sort + * d/rules: Restore cross building rules. + * d/tests: + - Add DEP-8 tests for python{,3}-dbg interpreter. + - Ensure that the C extension module can be imported in all interpreters. + * d/watch: Use pypi.debian.net redirector. + + -- Barry Warsaw Wed, 08 Jul 2015 19:42:22 -0400 + zope.interface (4.1.1-3.1) unstable; urgency=medium * Non-maintainer upload. diff -Nru zope.interface-4.1.1/debian/control zope.interface-4.1.2/debian/control --- zope.interface-4.1.1/debian/control 2014-12-28 12:25:29.000000000 +0000 +++ zope.interface-4.1.2/debian/control 2015-07-08 20:30:28.000000000 +0000 @@ -4,18 +4,23 @@ Maintainer: Debian/Ubuntu Zope Team Uploaders: Brian Sutherland , Fabio Tranchitella , - Barry Warsaw + Barry Warsaw , Build-Depends: debhelper (>= 9), dh-python, - python-all-dev (>= 2.6.6-3~), - python-all-dbg, + dpkg-dev (>= 1.16.1~), + libpython-all-dbg, + libpython-all-dev, + libpython3-all-dbg, + libpython3-all-dev, + python-all-dbg:any, + python-all-dev:any (>= 2.6.6-3~), python-setuptools, python-zope.event, - python3-all-dev, - python3-all-dbg, + python3-all-dbg:any, + python3-all-dev:any, python3-setuptools, - python3-zope.event, -Standards-Version: 3.9.5 + python3-zope.event +Standards-Version: 3.9.6 X-Python-Version: >= 2.6 X-Python3-Version: >= 3.2 XS-Testsuite: autopkgtest @@ -25,7 +30,7 @@ Package: python-zope.interface Architecture: any -Depends: ${python:Depends}, ${misc:Depends}, ${shlibs:Depends} +Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends} Provides: python-zope, python-zopeinterface, ${python:Provides} Replaces: python-zope, python-zopeinterface Conflicts: python-zope, python-zopeinterface, zope3 @@ -42,8 +47,8 @@ Section: debug Architecture: any Pre-Depends: dpkg (>= 1.17.5) -Depends: python-zope.interface (= ${binary:Version}), - python-dbg, +Depends: python-dbg, + python-zope.interface (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} Conflicts: python-zopeinterface-dbg @@ -59,7 +64,7 @@ Package: python3-zope.interface Architecture: any -Depends: ${python3:Depends}, ${misc:Depends}, ${shlibs:Depends} +Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends} Provides: python3-zope, ${python3:Provides} Description: Interfaces for Python3 This package provides an implementation of object interfaces for Python. @@ -74,8 +79,8 @@ Section: debug Architecture: any Pre-Depends: dpkg (>= 1.17.5) -Depends: python3-zope.interface (= ${binary:Version}), - python3-dbg, +Depends: python3-dbg, + python3-zope.interface (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} Description: Interfaces for Python3 (debug extension) diff -Nru zope.interface-4.1.1/debian/rules zope.interface-4.1.2/debian/rules --- zope.interface-4.1.1/debian/rules 2014-12-28 12:25:29.000000000 +0000 +++ zope.interface-4.1.2/debian/rules 2015-06-19 14:55:54.000000000 +0000 @@ -9,12 +9,77 @@ package=python-zope.interface package3=python3-zope.interface +include /usr/share/dpkg/architecture.mk +ifneq ($(DEB_BUILD_MULTIARCH),$(DEB_HOST_MULTIARCH)) + SET_CROSS_ENV = PYTHONPATH=/usr/lib/python$$pv/plat-$(DEB_HOST_MULTIARCH) + + # FIXME: is this sufficient? + SET_CROSS_ENV += _PYTHON_HOST_PLATFORM=$(DEB_HOST_GNU_CPU) +endif + +override_dh_auto_build: + set -xe; for pv in $(shell pyversions -vr); do \ + $(SET_CROSS_ENV) python$$pv setup.py build; \ + done + set -xe; for pv in $(shell py3versions -sv); do \ + $(SET_CROSS_ENV) python$$pv setup.py build; \ + done + override_dh_auto_install: - dh_auto_install + set -xe; \ + for pv in $(shell pyversions -vr); do \ + $(SET_CROSS_ENV) python$$pv setup.py install --install-layout=deb \ + --root $(CURDIR)/debian/$(package); \ + done + set -xe; \ + for pv in $(shell py3versions -vs); do \ + $(SET_CROSS_ENV) python$$pv setup.py install --install-layout=deb \ + --root $(CURDIR)/debian/$(package3); \ + done # Remove C sources. find debian/$(package) -name '*.c' | xargs -r rm -f find debian/$(package3) -name '*.c' | xargs -r rm -f +override_dh_install: + # remove C source + find debian/$(package) -name '*.c' | xargs -r rm -f + # remove debug symbols + #rm debian/$(package)/usr/lib/python*/*-packages/zope/interface/_zope_interface_coptimizations_d.so + # zope.interface provides the zope namespace __init__.py + for pv in $(shell pyversions -vr debian/control); do \ + cp src/zope/__init__.py debian/$(package)/usr/lib/python$$pv/*-packages/zope/; \ + done + # python-zope.interface-dbg package + for pv in $(shell pyversions -vr debian/control); do \ + $(SET_CROSS_ENV) python$$pv-dbg setup.py install \ + --no-compile --single-version-externally-managed \ + $(py_setup_install_args) --root=debian/$(package)-dbg \ + --install-layout=deb; \ + done + find debian/$(package)-dbg + find debian/$(package)-dbg ! -type d ! -name '*.so' | xargs rm -f + find debian/$(package)-dbg -depth -empty -exec rmdir {} \; + + + # remove C source + find debian/$(package3) -name '*.c' | xargs -r rm -f + # remove debug symbols + #-rm debian/$(package3)/usr/lib/python3/dist-packages/zope/interface/_zope_interface_coptimizations_d.so + # zope.interface provides the zope namespace __init__.py + for py in $(shell py3versions -vs); do \ + cp src/zope/__init__.py debian/$(package3)/usr/lib/python3/dist-packages/zope/; \ + done + # python3-zope.interface-dbg package + for pv in $(shell py3versions -vs); do \ + $(SET_CROSS_ENV) python$$pv-dbg setup.py install \ + --no-compile --single-version-externally-managed \ + $(py_setup_install_args) --root=debian/$(package3)-dbg \ + --install-layout=deb; \ + done + find debian/$(package3)-dbg + find debian/$(package3)-dbg ! -type d ! -name '*.so' | xargs rm -f + find debian/$(package3)-dbg -depth -empty -exec rmdir {} \; + override_dh_installdocs: dh_installdocs dh_installdocs -p$(package) README.rst @@ -27,3 +92,7 @@ dh_installchangelogs dh_installchangelogs -p$(package) CHANGES.rst dh_installchangelogs -p$(package3) CHANGES.rst + +override_dh_strip: + dh_strip -p$(package) --dbg-package=$(package)-dbg + dh_strip -p$(package3) --dbg-package=$(package3)-dbg diff -Nru zope.interface-4.1.1/debian/tests/all zope.interface-4.1.2/debian/tests/all --- zope.interface-4.1.1/debian/tests/all 2014-12-28 12:25:29.000000000 +0000 +++ zope.interface-4.1.2/debian/tests/all 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -#!/usr/bin/python - -import zope.interface -print zope.interface diff -Nru zope.interface-4.1.1/debian/tests/all-2 zope.interface-4.1.2/debian/tests/all-2 --- zope.interface-4.1.1/debian/tests/all-2 1970-01-01 00:00:00.000000000 +0000 +++ zope.interface-4.1.2/debian/tests/all-2 2015-06-19 14:55:54.000000000 +0000 @@ -0,0 +1,8 @@ +#!/usr/bin/python + +import zope.interface +print zope.interface + +# Make sure the optimization module is importable. +import zope.interface._zope_interface_coptimizations +print zope.interface._zope_interface_coptimizations diff -Nru zope.interface-4.1.1/debian/tests/all-3 zope.interface-4.1.2/debian/tests/all-3 --- zope.interface-4.1.1/debian/tests/all-3 2014-12-28 12:25:29.000000000 +0000 +++ zope.interface-4.1.2/debian/tests/all-3 2015-06-19 14:55:54.000000000 +0000 @@ -2,3 +2,7 @@ import zope.interface print(zope.interface) + +# Make sure the optimization module is importable. +import zope.interface._zope_interface_coptimizations +print(zope.interface._zope_interface_coptimizations) diff -Nru zope.interface-4.1.1/debian/tests/all-dbg-2 zope.interface-4.1.2/debian/tests/all-dbg-2 --- zope.interface-4.1.1/debian/tests/all-dbg-2 1970-01-01 00:00:00.000000000 +0000 +++ zope.interface-4.1.2/debian/tests/all-dbg-2 2015-06-19 14:55:54.000000000 +0000 @@ -0,0 +1,8 @@ +#!/usr/bin/python-dbg + +import zope.interface +print zope.interface + +# Make sure the optimization module is importable. +import zope.interface._zope_interface_coptimizations +print zope.interface._zope_interface_coptimizations diff -Nru zope.interface-4.1.1/debian/tests/all-dbg-3 zope.interface-4.1.2/debian/tests/all-dbg-3 --- zope.interface-4.1.1/debian/tests/all-dbg-3 1970-01-01 00:00:00.000000000 +0000 +++ zope.interface-4.1.2/debian/tests/all-dbg-3 2015-06-19 14:55:54.000000000 +0000 @@ -0,0 +1,8 @@ +#!/usr/bin/python3-dbg + +import zope.interface +print(zope.interface) + +# Make sure the optimization module is importable. +import zope.interface._zope_interface_coptimizations +print(zope.interface._zope_interface_coptimizations) diff -Nru zope.interface-4.1.1/debian/tests/control zope.interface-4.1.2/debian/tests/control --- zope.interface-4.1.1/debian/tests/control 2014-12-28 12:25:29.000000000 +0000 +++ zope.interface-4.1.2/debian/tests/control 2015-06-19 14:55:54.000000000 +0000 @@ -1,5 +1,6 @@ -Tests: all +Tests: all-2 all-3 all-dbg-3 Depends: @ -Tests: all-3 +Tests: all-dbg-2 Depends: @ +Restrictions: allow-stderr diff -Nru zope.interface-4.1.1/debian/watch zope.interface-4.1.2/debian/watch --- zope.interface-4.1.1/debian/watch 2014-12-28 12:25:29.000000000 +0000 +++ zope.interface-4.1.2/debian/watch 2015-06-01 18:47:43.000000000 +0000 @@ -1,2 +1,3 @@ version=3 -http://pypi.python.org/packages/source/z/zope.interface/zope.interface-(.*)(?:\.tar\.gz|\.zip) +opts=uversionmangle=s/(rc|a|b|c)/~$1/ \ +http://pypi.debian.net/zope.interface/zope.interface-(.+)\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz))) diff -Nru zope.interface-4.1.1/PKG-INFO zope.interface-4.1.2/PKG-INFO --- zope.interface-4.1.1/PKG-INFO 2014-03-19 18:34:39.000000000 +0000 +++ zope.interface-4.1.2/PKG-INFO 2014-12-28 00:46:40.000000000 +0000 @@ -1,13 +1,16 @@ -Metadata-Version: 1.0 +Metadata-Version: 1.1 Name: zope.interface -Version: 4.1.1 +Version: 4.1.2 Summary: Interfaces for Python Home-page: http://pypi.python.org/pypi/zope.interface Author: Zope Foundation and Contributors Author-email: zope-dev@zope.org License: ZPL 2.1 -Description: ``zope.interface`` README - ========================= +Description: ``zope.interface`` + ================== + + .. image:: https://travis-ci.org/zopefoundation/zope.interface.png?branch=master + :target: https://travis-ci.org/zopefoundation/zope.interface This package is intended to be independently reusable in any Python project. It is maintained by the `Zope Toolkit project @@ -22,35 +25,46 @@ For detailed documentation, please see http://docs.zope.org/zope.interface - ``zope.interface Changelog`` - ============================ + Changes + ======= + + 4.1.2 (2014-12-27) + ------------------ + + - Add support for PyPy3. + + - Remove unittest assertions deprecated in Python3.x. + + - Add ``zope.interface.document.asReStructuredText``, which formats the + generated text for an interface using ReST double-backtick markers. + 4.1.1 (2014-03-19) ------------------ - - Added support for Python 3.4. + - Add support for Python 3.4. 4.1.0 (2014-02-05) ------------------ - - Updated ``boostrap.py`` to version 2.2. + - Update ``boostrap.py`` to version 2.2. - - Added ``@named(name)`` declaration, that specifies the component name, so it + - Add ``@named(name)`` declaration, that specifies the component name, so it does not have to be passed in during registration. 4.0.5 (2013-02-28) ------------------ - - Fixed a bug where a decorated method caused false positive failures on + - Fix a bug where a decorated method caused false positive failures on ``verifyClass()``. 4.0.4 (2013-02-21) ------------------ - - Fixed a bug that was revealed by porting zope.traversing. During a loop, the + - Fix a bug that was revealed by porting zope.traversing. During a loop, the loop body modified a weakref dict causing a ``RuntimeError`` error. 4.0.3 (2012-12-31) @@ -61,7 +75,7 @@ 4.0.2 (2012-11-21) ------------------ - - Added support for Python 3.3. + - Add support for Python 3.3. - Restored ability to install the package in the absence of ``setuptools``. @@ -71,7 +85,7 @@ 4.0.1 (2012-05-22) ------------------ - - Dropped explicit ``DeprecationWarnings`` for "class advice" APIS (these + - Drop explicit ``DeprecationWarnings`` for "class advice" APIS (these APIs are still deprecated under Python 2.x, and still raise an exception under Python 3.x, but no longer cause a warning to be emitted under Python 2.x). @@ -81,29 +95,29 @@ - Automated build of Sphinx HTML docs and running doctest snippets via tox. - - Deprecated the "class advice" APIs from ``zope.interface.declarations``: + - Deprecate the "class advice" APIs from ``zope.interface.declarations``: ``implements``, ``implementsOnly``, and ``classProvides``. In their place, prefer the equivalent class decorators: ``@implementer``, ``@implementer_only``, and ``@provider``. Code which uses the deprecated APIs will not work as expected under Py3k. - - Removed use of '2to3' and associated fixers when installing under Py3k. + - Remove use of '2to3' and associated fixers when installing under Py3k. The code is now in a "compatible subset" which supports Python 2.6, 2.7, and 3.2, including PyPy 1.8 (the version compatible with the 2.7 language spec). - - Dropped explicit support for Python 2.4 / 2.5 / 3.1. + - Drop explicit support for Python 2.4 / 2.5 / 3.1. - - Added support for PyPy. + - Add support for PyPy. - - Added support for continuous integration using ``tox`` and ``jenkins``. + - Add support for continuous integration using ``tox`` and ``jenkins``. - - Added 'setup.py dev' alias (runs ``setup.py develop`` plus installs + - Add 'setup.py dev' alias (runs ``setup.py develop`` plus installs ``nose`` and ``coverage``). - - Added 'setup.py docs' alias (installs ``Sphinx`` and dependencies). + - Add 'setup.py docs' alias (installs ``Sphinx`` and dependencies). - - Replaced all unittest coverage previously accomplished via doctests with + - Replace all unittest coverage previously accomplished via doctests with unittests. The doctests have been moved into a ``docs`` section, managed as a Sphinx collection. @@ -160,7 +174,7 @@ - LP #570942: Now correctly compare interfaces from different modules but with the same names. - + N.B.: This is a less intrusive / destabilizing fix than the one applied in 3.6.3: we only fix the underlying cmp-alike function, rather than adding the other "rich comparison" functions. @@ -215,7 +229,7 @@ - A non-ASCII character in the changelog made 3.6.0 uninstallable on Python 3 systems with another default encoding than UTF-8. - - Fixed compiler warnings under GCC 4.3.3. + - Fix compiler warnings under GCC 4.3.3. 3.6.0 (2010-04-29) ------------------ @@ -223,7 +237,7 @@ - LP #185974: Clear the cache used by ``Specificaton.get`` inside ``Specification.changed``. Thanks to Jacob Holm for the patch. - - Added support for Python 3.1. Contributors: + - Add support for Python 3.1. Contributors: Lennart Regebro Martin v Loewis @@ -293,7 +307,7 @@ 3.5.0 (2008-10-26) ------------------ - - Fixed declaration of _zope_interface_coptimizations, it's not a top level + - Fix declaration of _zope_interface_coptimizations, it's not a top level package. - Add a DocTestSuite for odd.py module, so their tests are run. @@ -303,17 +317,17 @@ - Fix https://bugs.launchpad.net/zope3/3.3/+bug/98388: ISpecification was missing a declaration for __iro__. - - Added optional code optimizations support, which allows the building + - Add optional code optimizations support, which allows the building of C code optimizations to fail (Jython). - - Replaced `_flatten` with a non-recursive implementation, effectively making + - Replace `_flatten` with a non-recursive implementation, effectively making it 3x faster. 3.4.1 (2007-10-02) ------------------ - - Fixed a setup bug that prevented installation from source on systems + - Fix a setup bug that prevented installation from source on systems without setuptools. @@ -327,9 +341,8 @@ -------------------- - - Objects with picky custom comparison methods couldn't be added to - component registries. Now, when checking whether an object is - already registered, identity comparison is used. + - When checking whether an object is already registered, use identity + comparison, to allow adding registering with picky custom comparison methods. 3.3.0.1 (2007-01-03) @@ -345,20 +358,19 @@ New Features ++++++++++++ - - The adapter-lookup algorithim was refactored to make it - much simpler and faster. + - Refactor the adapter-lookup algorithim to make it much simpler and faster. - Also, more of the adapter-lookup logic is implemented in C, making + Also, implement more of the adapter-lookup logic in C, making debugging of application code easier, since there is less infrastructre code to step through. - - We now treat objects without interface declarations as if they - declared that they provide zope.interface.Interface. + - Treat objects without interface declarations as if they + declared that they provide ``zope.interface.Interface``. - - There are a number of richer new adapter-registration interfaces + - Add a number of richer new adapter-registration interfaces that provide greater control and introspection. - - Added a new interface decorator to zope.interface that allows the + - Add a new interface decorator to zope.interface that allows the setting of tagged values on an interface at definition time (see zope.interface.taggedValue). @@ -397,7 +409,7 @@ - Made attribute resolution order consistent with component lookup order, i.e. new-style class MRO semantics. - - Deprecated 'isImplementedBy' and 'isImplementedByInstancesOf' APIs in + - Deprecate 'isImplementedBy' and 'isImplementedByInstancesOf' APIs in favor of 'implementedBy' and 'providedBy'. @@ -407,7 +419,7 @@ - Corresponds to the verison of the zope.interface package shipped as part of the Zope X3.0.1 release. - - Fixed a bug reported by James Knight, which caused adapter registries + - Fix a bug reported by James Knight, which caused adapter registries to fail occasionally to reflect declaration changes. diff -Nru zope.interface-4.1.1/README.rst zope.interface-4.1.2/README.rst --- zope.interface-4.1.1/README.rst 2013-01-07 22:36:49.000000000 +0000 +++ zope.interface-4.1.2/README.rst 2014-12-28 00:40:18.000000000 +0000 @@ -1,5 +1,8 @@ -``zope.interface`` README -========================= +``zope.interface`` +================== + +.. image:: https://travis-ci.org/zopefoundation/zope.interface.png?branch=master + :target: https://travis-ci.org/zopefoundation/zope.interface This package is intended to be independently reusable in any Python project. It is maintained by the `Zope Toolkit project diff -Nru zope.interface-4.1.1/setup.cfg zope.interface-4.1.2/setup.cfg --- zope.interface-4.1.1/setup.cfg 2014-03-19 18:34:39.000000000 +0000 +++ zope.interface-4.1.2/setup.cfg 2014-12-28 00:46:40.000000000 +0000 @@ -1,12 +1,9 @@ -[egg_info] -tag_build = -tag_date = 0 -tag_svn_revision = 0 - [nosetests] -cover-package = zope.interface nocapture = 1 +cover-package = zope.interface cover-erase = 1 +cover-min-percentage = 100 +cover-branches = 1 with-doctest = 0 where = src @@ -14,3 +11,8 @@ dev = develop easy_install zope.interface[testing] docs = easy_install zope.interface[docs] +[egg_info] +tag_build = +tag_date = 0 +tag_svn_revision = 0 + diff -Nru zope.interface-4.1.1/setup.py zope.interface-4.1.2/setup.py --- zope.interface-4.1.1/setup.py 2014-03-19 18:33:39.000000000 +0000 +++ zope.interface-4.1.2/setup.py 2014-12-28 00:43:28.000000000 +0000 @@ -103,7 +103,8 @@ ) def read(*rnames): - return open(os.path.join(os.path.dirname(__file__), *rnames)).read() + with open(os.path.join(os.path.dirname(__file__), *rnames)) as f: + return f.read() long_description=( read('README.rst') @@ -112,7 +113,7 @@ ) setup(name='zope.interface', - version='4.1.1', + version='4.1.2', url='http://pypi.python.org/pypi/zope.interface', license='ZPL 2.1', description='Interfaces for Python', diff -Nru zope.interface-4.1.1/src/coverage.xml zope.interface-4.1.2/src/coverage.xml --- zope.interface-4.1.1/src/coverage.xml 2013-01-07 22:38:25.000000000 +0000 +++ zope.interface-4.1.2/src/coverage.xml 2014-12-28 00:35:26.000000000 +0000 @@ -1,15 +1,17 @@ - - + + + + /home/tseaver/projects/Zope/Z3/zope.interface + - + - @@ -35,10 +37,11 @@ - - - - + + + + + @@ -49,7 +52,7 @@ - + @@ -73,38 +76,38 @@ - + - + - + - + - + - + - + - + @@ -112,13 +115,13 @@ - + - + - + @@ -126,34 +129,34 @@ - + - + - + - + - + - - + + - + - + - + @@ -163,341 +166,340 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - - + + - + - - + + - - + + - + - + - - + + - + - + - + - + - - + + - + - + - + - - + + - + - + - + - - - + + + - - + + - - - - + + + + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - - + + + - + - - + + - - + + - + - + - + - - - + + + - + - + - + - + - - + + - - - - + + + + - + - + - - + + - + - + - - - - - - + + + + + + - - + + - + - - + + - - + + - - + + - + - + - - - - + + + + - - - - + + + + - + - + - + - + - + - - - - + + + + - + - + - + - - - + + + - + - + - + - + - - + @@ -515,11 +517,11 @@ - + - + - + @@ -530,13 +532,13 @@ - + - - + + - + @@ -548,21 +550,21 @@ - + - + - + - - - + + + - + @@ -579,170 +581,43 @@ - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + @@ -766,35 +641,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -804,44 +650,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -862,354 +673,365 @@ + - + - - - + + + + + - - - - - - - - - - - + + + + + + + - - - + + + - - - + + + + + + - - + + - - - - - - - + + + + + - - + + + + - - - + - + - + - - - + - + + + + - + - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + - + - - + + - - + + - + - - - - - - - + + + + + + + - - + - - - - - + + + + + + + + - - - + + + + - - + + - - - + - - - - - - + + + + + + + + - - - + + - - - + + + + + - - - - + + - - - - - - - - - + + + + + + - + + - - - - - - - - - - + + + + + + + + + + + + - - - - - + + + + + - + + + - + - - - - - + + + - + + + - - - - - - + + + + - - - - + + + + - + - - - - - - + + + + + + - - - - - - - - + + + + + + - - + + + + + + - - - - - - + + + + + + - - + + - - - + + - - - - - - - + + + + + - + + + + + - - - - - - - - - - - + + + + + + + + + + + + - + - - - - - - - + + + + + - - + - - - - + + - + + - - + - - + + + - - - + + + + + + + - - - - - + + - + - + - - - - + + + + + + + + + + + + + @@ -1238,7 +1060,7 @@ - + @@ -1267,7 +1089,7 @@ - + @@ -1302,22 +1124,22 @@ - + - + - + - + - + - + - + @@ -1336,19 +1158,19 @@ - + - + - + - + - + @@ -1358,25 +1180,25 @@ - + - + - + - - - + + + - + @@ -1385,54 +1207,54 @@ - - + + - + - + - + - + - + - - - + + + - + - - + + - - + + - - + + - + - + - + - + @@ -1444,25 +1266,25 @@ - + - + - + - + - + @@ -1473,158 +1295,133 @@ - + + - - - + + + + + - - + + + + - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - + + - - + + + + + + + + + + + + + + + - + + + - - - - - - - - - - - - - - - + - + + + + + + + + + + - + + + + + + - + - + - - + - - + + + + + - - - - + + - - - + - - - + - + - + - - + - - + + + - + + - + + - - - - - - - - - - - - - - - - - - + @@ -1634,142 +1431,31 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + - - + - - - - - - - - - - - - - - - + @@ -1793,7 +1479,7 @@ - + @@ -1817,290 +1503,294 @@ - + - - + + - + - + - - - + + + - - + + - + - - + + - - + + - - - + + + - + - - + + - - + + - - - + + + - + - + - - + + - + - - + + + - - - + + + - - - + + + - - - + + + - + + + - - - - - - + + + - + + + - - - + - - + + + - - - + + + + - - - - + + + + - + + - - - + + - - - - - - + + + + + - + - - - - - - + + + + + + + + - - - + + - - + + - - + + - - - - + + + - + - - - - - + + + + + - - - - + + + + - - + + + - - - - + + + - - - + + + + + - - - + - - - - + + + + + + + - - - + + + + + - - - - - + - + - + - + - + - + + - - + + + + + - - - - - + - + - + - + - + + - - - + + + + + + + + + - + - - - + + + + + + + - - - + - - - - + - - - - - + - + @@ -2111,46 +1801,48 @@ - + - + - + - + - + - + - + - - - - - + + + + + - - + - - - - - + + + + + - - + + + + + diff -Nru zope.interface-4.1.1/src/zope/interface/adapter.py zope.interface-4.1.2/src/zope/interface/adapter.py --- zope.interface-4.1.1/src/zope/interface/adapter.py 2013-01-07 22:36:49.000000000 +0000 +++ zope.interface-4.1.2/src/zope/interface/adapter.py 2014-12-08 15:00:18.000000000 +0000 @@ -270,8 +270,7 @@ # is often a problem when an interface is slated for # removal; a hold-over entry in the registry can make it # difficult to remove such interfaces. - if _BLANK in components: - del components[_BLANK] + del components[_BLANK] for comp, k in reversed(lookups): d = comp[k] if d: diff -Nru zope.interface-4.1.1/src/zope/interface/advice.py zope.interface-4.1.2/src/zope/interface/advice.py --- zope.interface-4.1.1/src/zope/interface/advice.py 2013-01-07 22:36:49.000000000 +0000 +++ zope.interface-4.1.2/src/zope/interface/advice.py 2014-12-09 07:54:32.000000000 +0000 @@ -64,7 +64,7 @@ kind = "class" elif not sameNamespace: kind = "function call" - else: # pragma NO COVER + else: # pragma: no cover # How can you have f_locals is f_globals, and have '__module__' set? # This is probably module-level code, but with a '__module__' variable. kind = "unknown" @@ -111,7 +111,7 @@ # ) previousMetaclass = caller_locals.get('__metaclass__') - if __python3: # pragma NO COVER + if __python3: # pragma: no cover defaultMetaclass = caller_globals.get('__metaclass__', type) else: defaultMetaclass = caller_globals.get('__metaclass__', ClassType) diff -Nru zope.interface-4.1.1/src/zope/interface/common/sequence.py zope.interface-4.1.2/src/zope/interface/common/sequence.py --- zope.interface-4.1.1/src/zope/interface/common/sequence.py 2013-01-07 22:36:49.000000000 +0000 +++ zope.interface-4.1.2/src/zope/interface/common/sequence.py 2014-12-09 07:51:08.000000000 +0000 @@ -14,9 +14,9 @@ """Sequence Interfaces """ __docformat__ = 'restructuredtext' -from zope import interface +from zope.interface import Interface -class IMinimalSequence(interface.Interface): +class IMinimalSequence(Interface): """Most basic sequence interface. All sequences are iterable. This requires at least one of the @@ -94,7 +94,7 @@ `L.index(value, [start, [stop]])` -> integer""" -class IUniqueMemberWriteSequence(interface.Interface): +class IUniqueMemberWriteSequence(Interface): """The write contract for a sequence that may enforce unique members""" def __setitem__(index, item): diff -Nru zope.interface-4.1.1/src/zope/interface/common/tests/basemapping.py zope.interface-4.1.2/src/zope/interface/common/tests/basemapping.py --- zope.interface-4.1.1/src/zope/interface/common/tests/basemapping.py 2013-01-07 22:36:49.000000000 +0000 +++ zope.interface-4.1.2/src/zope/interface/common/tests/basemapping.py 2014-12-28 00:29:27.000000000 +0000 @@ -19,7 +19,7 @@ for key in state: self.assertEqual(inst[key], state[key]) self.assertEqual(inst.get(key, None), state[key]) - self.failUnless(key in inst) + self.assertTrue(key in inst) for key in absent: self.assertEqual(inst.get(key, None), None) diff -Nru zope.interface-4.1.1/src/zope/interface/declarations.py zope.interface-4.1.2/src/zope/interface/declarations.py --- zope.interface-4.1.1/src/zope/interface/declarations.py 2014-03-18 19:52:43.000000000 +0000 +++ zope.interface-4.1.2/src/zope/interface/declarations.py 2014-12-08 15:45:12.000000000 +0000 @@ -103,9 +103,8 @@ seen = {} result = [] for i in self.interfaces(): - if i not in seen: - seen[i] = 1 - result.append(i) + seen[i] = 1 + result.append(i) for i in other.interfaces(): if i not in seen: seen[i] = 1 diff -Nru zope.interface-4.1.1/src/zope/interface/document.py zope.interface-4.1.2/src/zope/interface/document.py --- zope.interface-4.1.1/src/zope/interface/document.py 2013-01-07 22:36:49.000000000 +0000 +++ zope.interface-4.1.2/src/zope/interface/document.py 2014-10-30 18:02:02.000000000 +0000 @@ -18,11 +18,21 @@ """ import zope.interface -def asStructuredText(I, munge=0): + +def asStructuredText(I, munge=0, rst=False): """ Output structured text format. Note, this will whack any existing - 'structured' format of the text. """ + 'structured' format of the text. + + If `rst=True`, then the output will quote all code as inline literals in + accordance with 'reStructuredText' markup principles. + """ + + if rst: + inline_literal = lambda s: "``%s``" % (s,) + else: + inline_literal = lambda s: s - r = [I.getName()] + r = [inline_literal(I.getName())] outp = r.append level = 1 @@ -37,7 +47,7 @@ outp(_justify_and_indent("This interface extends:", level, munge)) level += 1 for b in bases: - item = "o %s" % b.getName() + item = "o %s" % inline_literal(b.getName()) outp(_justify_and_indent(_trim_doc_string(item), level, munge)) level -= 1 @@ -47,7 +57,7 @@ level += 1 for name, desc in namesAndDescriptions: if not hasattr(desc, 'getSignatureString'): # ugh... - item = "%s -- %s" % (desc.getName(), + item = "%s -- %s" % (inline_literal(desc.getName()), desc.getDoc() or 'no documentation') outp(_justify_and_indent(_trim_doc_string(item), level, munge)) level -= 1 @@ -56,14 +66,20 @@ level += 1 for name, desc in namesAndDescriptions: if hasattr(desc, 'getSignatureString'): # ugh... - item = "%s%s -- %s" % (desc.getName(), - desc.getSignatureString(), - desc.getDoc() or 'no documentation') + _call = "%s%s" % (desc.getName(), desc.getSignatureString()) + item = "%s -- %s" % (inline_literal(_call), + desc.getDoc() or 'no documentation') outp(_justify_and_indent(_trim_doc_string(item), level, munge)) return "\n\n".join(r) + "\n\n" +def asReStructuredText(I, munge=0): + """ Output reStructuredText format. Note, this will whack any existing + 'structured' format of the text.""" + return asStructuredText(I, munge=munge, rst=True) + + def _trim_doc_string(text): """ Trims a doc string to make it format correctly with structured text. """ diff -Nru zope.interface-4.1.1/src/zope/interface/interface.py zope.interface-4.1.2/src/zope/interface/interface.py --- zope.interface-4.1.1/src/zope/interface/interface.py 2013-06-12 22:43:21.000000000 +0000 +++ zope.interface-4.1.2/src/zope/interface/interface.py 2014-12-09 07:55:51.000000000 +0000 @@ -431,20 +431,6 @@ def queryDescriptionFor(self, name, default=None): return self.get(name, default) - def deferred(self): - """Return a defered class corresponding to the interface.""" - if hasattr(self, "_deferred"): return self._deferred - - klass={} - exec("class %s: pass" % self.__name__, klass) - klass=klass[self.__name__] - - self.__d(klass) - - self._deferred=klass - - return klass - def validateInvariants(self, obj, errors=None): """validate object to defined invariants.""" for call in self.queryTaggedValue('invariants', []): @@ -464,20 +450,7 @@ if errors: raise Invalid(errors) - #XXX I believe this is a fossil: nobody calls it anywhere. - #def _getInterface(self, ob, name): - # """Retrieve a named interface.""" - # return None - - def __d(self, klass): - for k, v in self.__attrs.items(): - if isinstance(v, Method) and not (k in klass.__dict__): - setattr(klass, k, v) - - for b in self.__bases__: - b.__d(klass) - - def __repr__(self): + def __repr__(self): # pragma: no cover try: return self._v_repr except AttributeError: diff -Nru zope.interface-4.1.1/src/zope/interface/ro.py zope.interface-4.1.2/src/zope/interface/ro.py --- zope.interface-4.1.1/src/zope/interface/ro.py 2013-01-07 22:36:49.000000000 +0000 +++ zope.interface-4.1.2/src/zope/interface/ro.py 2014-12-08 18:14:30.000000000 +0000 @@ -15,13 +15,7 @@ """ __docformat__ = 'restructuredtext' - -def ro(object): - """Compute a "resolution order" for an object - """ - return mergeOrderings([_flatten(object)]) - -def mergeOrderings(orderings, seen=None): +def _mergeOrderings(orderings): """Merge multiple orderings so that within-ordering order is preserved Orderings are constrained in such a way that if an object appears @@ -30,7 +24,7 @@ For example: - >>> mergeOrderings([ + >>> _mergeOrderings([ ... ['x', 'y', 'z'], ... ['q', 'z'], ... [1, 3, 5], @@ -40,19 +34,14 @@ """ - if seen is None: - seen = {} + seen = {} result = [] - orderings.reverse() - for ordering in orderings: - ordering = list(ordering) - ordering.reverse() - for o in ordering: + for ordering in reversed(orderings): + for o in reversed(ordering): if o not in seen: seen[o] = 1 - result.append(o) + result.insert(0, o) - result.reverse() return result def _flatten(ob): @@ -67,3 +56,9 @@ # by definition. result[i:i] = ob.__bases__ return result + + +def ro(object): + """Compute a "resolution order" for an object + """ + return _mergeOrderings([_flatten(object)]) diff -Nru zope.interface-4.1.1/src/zope/interface/tests/test_adapter.py zope.interface-4.1.2/src/zope/interface/tests/test_adapter.py --- zope.interface-4.1.1/src/zope/interface/tests/test_adapter.py 2013-01-07 22:36:49.000000000 +0000 +++ zope.interface-4.1.2/src/zope/interface/tests/test_adapter.py 2014-12-28 00:33:28.000000000 +0000 @@ -15,17 +15,6 @@ """ import unittest -class _SilencePy3Deprecations(unittest.TestCase): - # silence deprecation warnings under py3 - - def failUnless(self, expr): - # St00pid speling. - return self.assertTrue(expr) - - def failIf(self, expr): - # St00pid speling. - return self.assertFalse(expr) - def _makeInterfaces(): from zope.interface import Interface @@ -45,7 +34,7 @@ return IB0, IB1, IB2, IB3, IB4, IF0, IF1, IR0, IR1 -class BaseAdapterRegistryTests(_SilencePy3Deprecations): +class BaseAdapterRegistryTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.adapter import BaseAdapterRegistry @@ -72,7 +61,7 @@ CUT = self._getTargetClass() registry = CUT() for name in CUT._delegated: - self.failUnless( + self.assertTrue( getattr(registry, name) is getattr(registry._v_lookup, name)) def test__generation_on_first_creation(self): @@ -159,7 +148,7 @@ nomatch = object() registry.register([IB1], None, '', orig) registry.unregister([IB1], None, '', nomatch) #doesn't raise - self.failUnless(registry.registered([IB1], None, '') is orig) + self.assertTrue(registry.registered([IB1], None, '') is orig) def test_unregister_hit_clears_empty_subcomponents(self): IB0, IB1, IB2, IB3, IB4, IF0, IF1, IR0, IR1 = _makeInterfaces() @@ -168,11 +157,11 @@ another = object() registry.register([IB1, IB2], None, '', one) registry.register([IB1, IB3], None, '', another) - self.failUnless(IB2 in registry._adapters[2][IB1]) - self.failUnless(IB3 in registry._adapters[2][IB1]) + self.assertTrue(IB2 in registry._adapters[2][IB1]) + self.assertTrue(IB3 in registry._adapters[2][IB1]) registry.unregister([IB1, IB3], None, '', another) - self.failUnless(IB2 in registry._adapters[2][IB1]) - self.failIf(IB3 in registry._adapters[2][IB1]) + self.assertTrue(IB2 in registry._adapters[2][IB1]) + self.assertFalse(IB3 in registry._adapters[2][IB1]) def test_unsubscribe_empty(self): registry = self._makeOne() @@ -193,9 +182,12 @@ first = object() second = object() third = object() + fourth = object() registry.subscribe([IB1], None, first) registry.subscribe([IB1], None, second) registry.subscribe([IB1], IR0, third) + registry.subscribe([IB1], IR0, fourth) + registry.unsubscribe([IB1], IR0, fourth) registry.unsubscribe([IB1], IR0, third) registry.unsubscribe([IB1], None, second) registry.unsubscribe([IB1], None, first) @@ -238,7 +230,7 @@ self.assertEqual(len(registry._subscribers), 2) -class LookupBaseFallbackTests(_SilencePy3Deprecations): +class LookupBaseFallbackTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.adapter import LookupBaseFallback @@ -268,7 +260,7 @@ return None lb = self._makeOne(uc_lookup=_lookup) found = lb.lookup(('A',), 'B', 'C') - self.failUnless(found is None) + self.assertTrue(found is None) self.assertEqual(_called_with, [(('A',), 'B', 'C')]) def test_lookup_miss_w_default(self): @@ -279,7 +271,7 @@ return None lb = self._makeOne(uc_lookup=_lookup) found = lb.lookup(('A',), 'B', 'C', _default) - self.failUnless(found is _default) + self.assertTrue(found is _default) self.assertEqual(_called_with, [(('A',), 'B', 'C')]) def test_lookup_not_cached(self): @@ -291,7 +283,7 @@ return _results.pop(0) lb = self._makeOne(uc_lookup=_lookup) found = lb.lookup(('A',), 'B', 'C') - self.failUnless(found is a) + self.assertTrue(found is a) self.assertEqual(_called_with, [(('A',), 'B', 'C')]) self.assertEqual(_results, [b, c]) @@ -305,7 +297,7 @@ lb = self._makeOne(uc_lookup=_lookup) found = lb.lookup(('A',), 'B', 'C') found = lb.lookup(('A',), 'B', 'C') - self.failUnless(found is a) + self.assertTrue(found is a) self.assertEqual(_called_with, [(('A',), 'B', 'C')]) self.assertEqual(_results, [b, c]) @@ -318,7 +310,7 @@ return _results.pop(0) lb = self._makeOne(uc_lookup=_lookup) found = lb.lookup(('A', 'D'), 'B', 'C') - self.failUnless(found is a) + self.assertTrue(found is a) self.assertEqual(_called_with, [(('A', 'D'), 'B', 'C')]) self.assertEqual(_results, [b, c]) @@ -332,7 +324,7 @@ lb = self._makeOne(uc_lookup=_lookup) found = lb.lookup(('A', 'D'), 'B', 'C') found = lb.lookup(('A', 'D'), 'B', 'C') - self.failUnless(found is a) + self.assertTrue(found is a) self.assertEqual(_called_with, [(('A', 'D'), 'B', 'C')]) self.assertEqual(_results, [b, c]) @@ -347,7 +339,7 @@ found = lb.lookup(('A',), 'B', 'C') lb.changed(lb) found = lb.lookup(('A',), 'B', 'C') - self.failUnless(found is b) + self.assertTrue(found is b) self.assertEqual(_called_with, [(('A',), 'B', 'C'), (('A',), 'B', 'C')]) self.assertEqual(_results, [c]) @@ -359,7 +351,7 @@ return None lb = self._makeOne(uc_lookup=_lookup) found = lb.lookup1('A', 'B', 'C') - self.failUnless(found is None) + self.assertTrue(found is None) self.assertEqual(_called_with, [(('A',), 'B', 'C')]) def test_lookup1_miss_w_default(self): @@ -370,7 +362,7 @@ return None lb = self._makeOne(uc_lookup=_lookup) found = lb.lookup1('A', 'B', 'C', _default) - self.failUnless(found is _default) + self.assertTrue(found is _default) self.assertEqual(_called_with, [(('A',), 'B', 'C')]) def test_lookup1_miss_w_default_negative_cache(self): @@ -381,9 +373,9 @@ return None lb = self._makeOne(uc_lookup=_lookup) found = lb.lookup1('A', 'B', 'C', _default) - self.failUnless(found is _default) + self.assertTrue(found is _default) found = lb.lookup1('A', 'B', 'C', _default) - self.failUnless(found is _default) + self.assertTrue(found is _default) self.assertEqual(_called_with, [(('A',), 'B', 'C')]) def test_lookup1_not_cached(self): @@ -395,7 +387,7 @@ return _results.pop(0) lb = self._makeOne(uc_lookup=_lookup) found = lb.lookup1('A', 'B', 'C') - self.failUnless(found is a) + self.assertTrue(found is a) self.assertEqual(_called_with, [(('A',), 'B', 'C')]) self.assertEqual(_results, [b, c]) @@ -409,7 +401,7 @@ lb = self._makeOne(uc_lookup=_lookup) found = lb.lookup1('A', 'B', 'C') found = lb.lookup1('A', 'B', 'C') - self.failUnless(found is a) + self.assertTrue(found is a) self.assertEqual(_called_with, [(('A',), 'B', 'C')]) self.assertEqual(_results, [b, c]) @@ -424,7 +416,7 @@ found = lb.lookup1('A', 'B', 'C') lb.changed(lb) found = lb.lookup1('A', 'B', 'C') - self.failUnless(found is b) + self.assertTrue(found is b) self.assertEqual(_called_with, [(('A',), 'B', 'C'), (('A',), 'B', 'C')]) self.assertEqual(_results, [c]) @@ -433,13 +425,13 @@ req, prv = object(), object() lb = self._makeOne() found = lb.adapter_hook(prv, req, '') - self.failUnless(found is None) + self.assertTrue(found is None) def test_adapter_hook_miss_w_default(self): req, prv, _default = object(), object(), object() lb = self._makeOne() found = lb.adapter_hook(prv, req, '', _default) - self.failUnless(found is _default) + self.assertTrue(found is _default) def test_adapter_hook_hit_factory_returns_None(self): _f_called_with = [] @@ -451,7 +443,7 @@ req, prv, _default = object(), object(), object() lb = self._makeOne(uc_lookup=_lookup) adapted = lb.adapter_hook(prv, req, 'C', _default) - self.failUnless(adapted is _default) + self.assertTrue(adapted is _default) self.assertEqual(_f_called_with, [req]) def test_adapter_hook_hit_factory_returns_adapter(self): @@ -465,7 +457,7 @@ req, prv, _default = object(), object(), object() lb = self._makeOne(uc_lookup=_lookup) adapted = lb.adapter_hook(prv, req, 'C', _default) - self.failUnless(adapted is _adapter) + self.assertTrue(adapted is _adapter) self.assertEqual(_f_called_with, [req]) def test_queryAdapter(self): @@ -479,7 +471,7 @@ req, prv, _default = object(), object(), object() lb = self._makeOne(uc_lookup=_lookup) adapted = lb.queryAdapter(req, prv, 'C', _default) - self.failUnless(adapted is _adapter) + self.assertTrue(adapted is _adapter) self.assertEqual(_f_called_with, [req]) def test_lookupAll_uncached(self): @@ -536,7 +528,7 @@ return LookupBase -class VerifyingBaseFallbackTests(_SilencePy3Deprecations): +class VerifyingBaseFallbackTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.adapter import VerifyingBaseFallback @@ -583,12 +575,12 @@ lb = self._makeOne(reg, uc_lookup=_lookup) found = lb.lookup(('A',), 'B', 'C') found = lb.lookup(('A',), 'B', 'C') - self.failUnless(found is a) + self.assertTrue(found is a) self.assertEqual(_called_with, [(('A',), 'B', 'C')]) self.assertEqual(_results, [b, c]) reg.ro[1]._generation += 1 found = lb.lookup(('A',), 'B', 'C') - self.failUnless(found is b) + self.assertTrue(found is b) self.assertEqual(_called_with, [(('A',), 'B', 'C'), (('A',), 'B', 'C')]) self.assertEqual(_results, [c]) @@ -604,12 +596,12 @@ lb = self._makeOne(reg, uc_lookup=_lookup) found = lb.lookup1('A', 'B', 'C') found = lb.lookup1('A', 'B', 'C') - self.failUnless(found is a) + self.assertTrue(found is a) self.assertEqual(_called_with, [(('A',), 'B', 'C')]) self.assertEqual(_results, [b, c]) reg.ro[1]._generation += 1 found = lb.lookup1('A', 'B', 'C') - self.failUnless(found is b) + self.assertTrue(found is b) self.assertEqual(_called_with, [(('A',), 'B', 'C'), (('A',), 'B', 'C')]) self.assertEqual(_results, [c]) @@ -629,12 +621,12 @@ reg = self._makeRegistry(3) lb = self._makeOne(reg, uc_lookup=_lookup) adapted = lb.adapter_hook(prv, req, 'C', _default) - self.failUnless(adapted is a) + self.assertTrue(adapted is a) adapted = lb.adapter_hook(prv, req, 'C', _default) - self.failUnless(adapted is a) + self.assertTrue(adapted is a) reg.ro[1]._generation += 1 adapted = lb.adapter_hook(prv, req, 'C', _default) - self.failUnless(adapted is b) + self.assertTrue(adapted is b) def test_queryAdapter(self): a, b, c = [object(), object(), object()] @@ -651,12 +643,12 @@ reg = self._makeRegistry(3) lb = self._makeOne(reg, uc_lookup=_lookup) adapted = lb.queryAdapter(req, prv, 'C', _default) - self.failUnless(adapted is a) + self.assertTrue(adapted is a) adapted = lb.queryAdapter(req, prv, 'C', _default) - self.failUnless(adapted is a) + self.assertTrue(adapted is a) reg.ro[1]._generation += 1 adapted = lb.adapter_hook(prv, req, 'C', _default) - self.failUnless(adapted is b) + self.assertTrue(adapted is b) def test_lookupAll(self): _results_1 = [object(), object(), object()] @@ -698,7 +690,7 @@ return VerifyingBase -class AdapterLookupBaseTests(_SilencePy3Deprecations): +class AdapterLookupBaseTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.adapter import AdapterLookupBase @@ -836,7 +828,7 @@ result = alb._uncached_lookup((IFoo,), IBar) self.assertEqual(result, None) self.assertEqual(len(alb._required), 1) - self.failUnless(IFoo.weakref() in alb._required) + self.assertTrue(IFoo.weakref() in alb._required) def test__uncached_lookup_order_miss(self): from zope.interface.interface import InterfaceClass @@ -862,13 +854,38 @@ result = alb._uncached_lookup((IFoo,), IBar) self.assertEqual(result, None) - def test__uncached_lookup_components_miss(self): + def test__uncached_lookup_components_miss_wrong_iface(self): from zope.interface.interface import InterfaceClass IFoo = InterfaceClass('IFoo') IBar = InterfaceClass('IBar', IFoo) + IQux = InterfaceClass('IQux') registry = self._makeRegistry(IFoo, IBar) subr = self._makeSubregistry() - subr._adapters = [{}, {}] #utilities, single adapters + irrelevant = object() + subr._adapters = [ #utilities, single adapters + {}, + {IFoo: {IQux: {'': irrelevant}, + }}, + ] + registry.ro.append(subr) + alb = self._makeOne(registry) + subr._v_lookup = alb + result = alb._uncached_lookup((IFoo,), IBar) + self.assertEqual(result, None) + + def test__uncached_lookup_components_miss_wrong_name(self): + from zope.interface.interface import InterfaceClass + IFoo = InterfaceClass('IFoo') + IBar = InterfaceClass('IBar', IFoo) + registry = self._makeRegistry(IFoo, IBar) + subr = self._makeSubregistry() + irrelevant = object() + wrongname = object() + subr._adapters = [ #utilities, single adapters + {}, + {IFoo: {IBar: {'wrongname': wrongname}, + }}, + ] registry.ro.append(subr) alb = self._makeOne(registry) subr._v_lookup = alb @@ -890,7 +907,26 @@ alb = self._makeOne(registry) subr._v_lookup = alb result = alb._uncached_lookup((IFoo,), IBar) - self.failUnless(result is _expected) + self.assertTrue(result is _expected) + + def test__uncached_lookup_repeated_hit(self): + from zope.interface.interface import InterfaceClass + IFoo = InterfaceClass('IFoo') + IBar = InterfaceClass('IBar', IFoo) + registry = self._makeRegistry(IFoo, IBar) + subr = self._makeSubregistry() + _expected = object() + subr._adapters = [ #utilities, single adapters + {}, + {IFoo: {IBar: {'': _expected}}}, + ] + registry.ro.append(subr) + alb = self._makeOne(registry) + subr._v_lookup = alb + result = alb._uncached_lookup((IFoo,), IBar) + result2 = alb._uncached_lookup((IFoo,), IBar) + self.assertTrue(result is _expected) + self.assertTrue(result2 is _expected) def test_queryMultiAdaptor_lookup_miss(self): from zope.interface.declarations import implementer @@ -913,7 +949,7 @@ subr._v_lookup = alb _default = object() result = alb.queryMultiAdapter((foo,), IBar, default=_default) - self.failUnless(result is _default) + self.assertTrue(result is _default) def test_queryMultiAdaptor_factory_miss(self): from zope.interface.declarations import implementer @@ -941,7 +977,7 @@ subr._v_lookup = alb _default = object() result = alb.queryMultiAdapter((foo,), IBar, default=_default) - self.failUnless(result is _default) + self.assertTrue(result is _default) self.assertEqual(_called_with, [foo]) def test_queryMultiAdaptor_factory_hit(self): @@ -970,7 +1006,7 @@ subr._v_lookup = alb _default = object() result = alb.queryMultiAdapter((foo,), IBar, default=_default) - self.failUnless(result is _expected) + self.assertTrue(result is _expected) self.assertEqual(_called_with, [foo]) def test__uncached_lookupAll_empty_ro(self): @@ -982,7 +1018,7 @@ result = alb._uncached_lookupAll((IFoo,), IBar) self.assertEqual(result, ()) self.assertEqual(len(alb._required), 1) - self.failUnless(IFoo.weakref() in alb._required) + self.assertTrue(IFoo.weakref() in alb._required) def test__uncached_lookupAll_order_miss(self): from zope.interface.interface import InterfaceClass @@ -1013,9 +1049,14 @@ from zope.interface.interface import InterfaceClass IFoo = InterfaceClass('IFoo') IBar = InterfaceClass('IBar', IFoo) + IQux = InterfaceClass('IQux') registry = self._makeRegistry(IFoo, IBar) subr = self._makeSubregistry() - subr._adapters = [{}, {}] #utilities, single adapters + irrelevant = object() + subr._adapters = [ #utilities, single adapters + {}, + {IFoo: {IQux: {'': irrelevant}}}, + ] registry.ro.append(subr) alb = self._makeOne(registry) subr._v_lookup = alb @@ -1068,7 +1109,7 @@ result = alb._uncached_subscriptions((IFoo,), IBar) self.assertEqual(result, []) self.assertEqual(len(alb._required), 1) - self.failUnless(IFoo.weakref() in alb._required) + self.assertTrue(IFoo.weakref() in alb._required) def test__uncached_subscriptions_order_miss(self): from zope.interface.interface import InterfaceClass @@ -1095,13 +1136,35 @@ result = alb._uncached_subscriptions((IFoo,), IBar) self.assertEqual(result, []) - def test__uncached_subscriptions_components_miss(self): + def test__uncached_subscriptions_components_miss_wrong_iface(self): from zope.interface.interface import InterfaceClass IFoo = InterfaceClass('IFoo') IBar = InterfaceClass('IBar', IFoo) + IQux = InterfaceClass('IQux') registry = self._makeRegistry(IFoo, IBar) subr = self._makeSubregistry() - subr._subscribers = [{}, {}] #utilities, single adapters + irrelevant = object() + subr._subscribers = [ #utilities, single adapters + {}, + {IFoo: {IQux: {'': irrelevant}}}, + ] + registry.ro.append(subr) + alb = self._makeOne(registry) + subr._v_lookup = alb + result = alb._uncached_subscriptions((IFoo,), IBar) + self.assertEqual(result, []) + + def test__uncached_subscriptions_components_miss_wrong_name(self): + from zope.interface.interface import InterfaceClass + IFoo = InterfaceClass('IFoo') + IBar = InterfaceClass('IBar', IFoo) + registry = self._makeRegistry(IFoo, IBar) + subr = self._makeSubregistry() + wrongname = object() + subr._subscribers = [ #utilities, single adapters + {}, + {IFoo: {IBar: {'wrongname': wrongname}}}, + ] registry.ro.append(subr) alb = self._makeOne(registry) subr._v_lookup = alb @@ -1177,9 +1240,12 @@ def _factory2(context): _called.setdefault('_factory2', []).append(context) return _exp2 + def _side_effect_only(context): + _called.setdefault('_side_effect_only', []).append(context) + return None subr._subscribers = [ #utilities, single adapters {}, - {IFoo: {IBar: {'': (_factory1, _factory2)}}}, + {IFoo: {IBar: {'': (_factory1, _factory2, _side_effect_only)}}}, ] registry.ro.append(subr) alb = self._makeOne(registry) @@ -1187,10 +1253,14 @@ subr._v_lookup = alb result = alb.subscribers((foo,), IBar) self.assertEqual(result, [_exp1, _exp2]) - self.assertEqual(_called, {'_factory1': [foo], '_factory2': [foo]}) + self.assertEqual(_called, + {'_factory1': [foo], + '_factory2': [foo], + '_side_effect_only': [foo], + }) -class AdapterRegistryTests(_SilencePy3Deprecations): +class AdapterRegistryTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.adapter import AdapterRegistry @@ -1208,7 +1278,7 @@ sub = self._makeOne([base]) self.assertEqual(len(sub._v_subregistries), 0) self.assertEqual(len(base._v_subregistries), 1) - self.failUnless(sub in base._v_subregistries) + self.assertTrue(sub in base._v_subregistries) # test _addSubregistry / _removeSubregistry via only caller, _setBases @@ -1219,7 +1289,28 @@ sub.__bases__ = [after] self.assertEqual(len(before._v_subregistries), 0) self.assertEqual(len(after._v_subregistries), 1) - self.failUnless(sub in after._v_subregistries) + self.assertTrue(sub in after._v_subregistries) + + def test__setBases_wo_stray_entry(self): + before = self._makeOne() + stray = self._makeOne() + after = self._makeOne() + sub = self._makeOne([before]) + sub.__dict__['__bases__'].append(stray) + sub.__bases__ = [after] + self.assertEqual(len(before._v_subregistries), 0) + self.assertEqual(len(after._v_subregistries), 1) + self.assertTrue(sub in after._v_subregistries) + + def test__setBases_w_existing_entry_continuing(self): + before = self._makeOne() + after = self._makeOne() + sub = self._makeOne([before]) + sub.__bases__ = [before, after] + self.assertEqual(len(before._v_subregistries), 1) + self.assertEqual(len(after._v_subregistries), 1) + self.assertTrue(sub in before._v_subregistries) + self.assertTrue(sub in after._v_subregistries) def test_changed_w_subregistries(self): base = self._makeOne() @@ -1232,21 +1323,21 @@ base._addSubregistry(derived2) orig = object() base.changed(orig) - self.failUnless(derived1._changed is orig) - self.failUnless(derived2._changed is orig) + self.assertTrue(derived1._changed is orig) + self.assertTrue(derived2._changed is orig) -class Test_utils(_SilencePy3Deprecations): +class Test_utils(unittest.TestCase): def test__convert_None_to_Interface_w_None(self): from zope.interface.adapter import _convert_None_to_Interface from zope.interface.interface import Interface - self.failUnless(_convert_None_to_Interface(None) is Interface) + self.assertTrue(_convert_None_to_Interface(None) is Interface) def test__convert_None_to_Interface_w_other(self): from zope.interface.adapter import _convert_None_to_Interface other = object() - self.failUnless(_convert_None_to_Interface(other) is other) + self.assertTrue(_convert_None_to_Interface(other) is other) def test__normalize_name_str(self): import sys diff -Nru zope.interface-4.1.1/src/zope/interface/tests/test_advice.py zope.interface-4.1.2/src/zope/interface/tests/test_advice.py --- zope.interface-4.1.1/src/zope/interface/tests/test_advice.py 2013-01-07 22:36:49.000000000 +0000 +++ zope.interface-4.1.2/src/zope/interface/tests/test_advice.py 2014-12-28 00:30:36.000000000 +0000 @@ -32,19 +32,7 @@ from zope.interface._compat import _skip_under_py3k -class _SilencePy3Deprecations(unittest.TestCase): - # silence deprecation warnings under py3 - - def failUnless(self, expr): - # St00pid speling. - return self.assertTrue(expr) - - def failIf(self, expr): - # St00pid speling. - return self.assertFalse(expr) - - -class FrameInfoTest(_SilencePy3Deprecations): +class FrameInfoTest(unittest.TestCase): def test_w_module(self): from zope.interface.tests import advisory_testing @@ -52,7 +40,7 @@ f_locals, f_globals) = advisory_testing.moduleLevelFrameInfo self.assertEqual(kind, "module") for d in module.__dict__, f_locals, f_globals: - self.failUnless(d is advisory_testing.my_globals) + self.assertTrue(d is advisory_testing.my_globals) @_skip_under_py3k def test_w_ClassicClass(self): @@ -65,10 +53,10 @@ f_globals) = advisory_testing.ClassicClass.classLevelFrameInfo self.assertEqual(kind, "class") - self.failUnless( + self.assertTrue( f_locals is advisory_testing.ClassicClass.__dict__) # ??? for d in module.__dict__, f_globals: - self.failUnless(d is advisory_testing.my_globals) + self.assertTrue(d is advisory_testing.my_globals) def test_w_NewStyleClass(self): from zope.interface.tests import advisory_testing @@ -79,15 +67,15 @@ self.assertEqual(kind, "class") for d in module.__dict__, f_globals: - self.failUnless(d is advisory_testing.my_globals) + self.assertTrue(d is advisory_testing.my_globals) def test_inside_function_call(self): from zope.interface.advice import getFrameInfo kind, module, f_locals, f_globals = getFrameInfo(sys._getframe()) self.assertEqual(kind, "function call") - self.failUnless(f_locals is locals()) # ??? + self.assertTrue(f_locals is locals()) # ??? for d in module.__dict__, f_globals: - self.failUnless(d is globals()) + self.assertTrue(d is globals()) def test_inside_exec(self): from zope.interface.advice import getFrameInfo @@ -95,9 +83,9 @@ _locals = {} exec(_FUNKY_EXEC, _globals, _locals) self.assertEqual(_locals['kind'], "exec") - self.failUnless(_locals['f_locals'] is _locals) - self.failUnless(_locals['module'] is None) - self.failUnless(_locals['f_globals'] is _globals) + self.assertTrue(_locals['f_locals'] is _locals) + self.assertTrue(_locals['module'] is None) + self.assertTrue(_locals['f_globals'] is _globals) _FUNKY_EXEC = """\ @@ -105,7 +93,7 @@ kind, module, f_locals, f_globals = getFrameInfo(sys._getframe()) """ -class AdviceTests(_SilencePy3Deprecations): +class AdviceTests(unittest.TestCase): @_skip_under_py3k def test_order(self): @@ -118,7 +106,7 @@ # Strip the list nesting for i in 1, 2, 3: - self.failUnless(isinstance(Foo, list)) + self.assertTrue(isinstance(Foo, list)) Foo, = Foo self.assertEqual(log, [(1, Foo), (2, [Foo]), (3, [[Foo]])]) @@ -147,7 +135,7 @@ ping([],1) Concrete, = Concrete - self.failUnless(Concrete.__class__ is Metaclass) + self.assertTrue(Concrete.__class__ is Metaclass) @_skip_under_py3k @@ -182,9 +170,9 @@ __metaclass__ = Metaclass3 ping([], 1) - self.failUnless(isinstance(Derived, list)) + self.assertTrue(isinstance(Derived, list)) Derived, = Derived - self.failUnless(isinstance(Derived, Metaclass3)) + self.assertTrue(isinstance(Derived, Metaclass3)) @_skip_under_py3k def test_meta_no_bases(self): @@ -199,7 +187,7 @@ self.assertEqual(type(klass), ClassType) -class Test_isClassAdvisor(_SilencePy3Deprecations): +class Test_isClassAdvisor(unittest.TestCase): def _callFUT(self, *args, **kw): from zope.interface.advice import isClassAdvisor @@ -220,7 +208,7 @@ self.assertEqual(self._callFUT(bar), True) -class Test_determineMetaclass(_SilencePy3Deprecations): +class Test_determineMetaclass(unittest.TestCase): def _callFUT(self, *args, **kw): from zope.interface.advice import determineMetaclass @@ -334,7 +322,7 @@ self.assertRaises(TypeError, self._callFUT, (A, B)) -class Test_minimalBases(_SilencePy3Deprecations): +class Test_minimalBases(unittest.TestCase): def _callFUT(self, klasses): from zope.interface.advice import minimalBases diff -Nru zope.interface-4.1.1/src/zope/interface/tests/test_declarations.py zope.interface-4.1.2/src/zope/interface/tests/test_declarations.py --- zope.interface-4.1.1/src/zope/interface/tests/test_declarations.py 2014-03-18 19:52:43.000000000 +0000 +++ zope.interface-4.1.2/src/zope/interface/tests/test_declarations.py 2014-12-28 00:33:33.000000000 +0000 @@ -18,18 +18,6 @@ from zope.interface._compat import _skip_under_py3k, _u -class _SilencePy3Deprecations(unittest.TestCase): - # silence deprecation warnings under py3 - - def failUnless(self, expr): - # St00pid speling. - return self.assertTrue(expr) - - def failIf(self, expr): - # St00pid speling. - return self.assertFalse(expr) - - class _Py3ClassAdvice(object): def _run_generated_code(self, code, globs, locs, @@ -84,7 +72,7 @@ self.assertEqual(foo.__component_name__, _u('foo')) -class DeclarationTests(_SilencePy3Deprecations): +class DeclarationTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.declarations import Declaration @@ -112,31 +100,31 @@ def test_changed_wo_existing__v_attrs(self): decl = self._makeOne() decl.changed(decl) # doesn't raise - self.failIf('_v_attrs' in decl.__dict__) + self.assertFalse('_v_attrs' in decl.__dict__) def test_changed_w_existing__v_attrs(self): decl = self._makeOne() decl._v_attrs = object() decl.changed(decl) - self.failIf('_v_attrs' in decl.__dict__) + self.assertFalse('_v_attrs' in decl.__dict__) def test___contains__w_self(self): from zope.interface.interface import InterfaceClass IFoo = InterfaceClass('IFoo') decl = self._makeOne() - self.failIf(decl in decl) + self.assertFalse(decl in decl) def test___contains__w_unrelated_iface(self): from zope.interface.interface import InterfaceClass IFoo = InterfaceClass('IFoo') decl = self._makeOne() - self.failIf(IFoo in decl) + self.assertFalse(IFoo in decl) def test___contains__w_base_interface(self): from zope.interface.interface import InterfaceClass IFoo = InterfaceClass('IFoo') decl = self._makeOne(IFoo) - self.failUnless(IFoo in decl) + self.assertTrue(IFoo in decl) def test___iter___empty(self): decl = self._makeOne() @@ -212,7 +200,7 @@ IBar = InterfaceClass('IBar') before = self._makeOne(IFoo) after = before - IBar - self.failUnless(isinstance(after, self._getTargetClass())) + self.assertTrue(isinstance(after, self._getTargetClass())) self.assertEqual(list(after), [IFoo]) def test___sub___related_interface(self): @@ -236,7 +224,7 @@ IBar = InterfaceClass('IBar') before = self._makeOne(IFoo) after = before + IBar - self.failUnless(isinstance(after, self._getTargetClass())) + self.assertTrue(isinstance(after, self._getTargetClass())) self.assertEqual(list(after), [IFoo, IBar]) def test___add___related_interface(self): @@ -250,7 +238,7 @@ self.assertEqual(list(after), [IFoo, IBar, IBaz]) -class ImplementsTests(_SilencePy3Deprecations): +class ImplementsTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.declarations import Implements @@ -277,7 +265,7 @@ self.assertEqual(impl.__reduce__(), (implementedBy, (None,))) -class Test_implementedByFallback(_SilencePy3Deprecations): +class Test_implementedByFallback(unittest.TestCase): def _callFUT(self, *args, **kw): from zope.interface.declarations import implementedByFallback @@ -309,7 +297,7 @@ with _MonkeyDict(declarations, 'BuiltinImplementationSpecifications') as specs: specs[foo] = reg - self.failUnless(self._callFUT(foo) is reg) + self.assertTrue(self._callFUT(foo) is reg) def test_dictless_w_existing_Implements(self): from zope.interface.declarations import Implements @@ -318,7 +306,7 @@ __slots__ = ('__implemented__',) foo = Foo() foo.__implemented__ = impl - self.failUnless(self._callFUT(foo) is impl) + self.assertTrue(self._callFUT(foo) is impl) def test_dictless_w_existing_not_Implements(self): from zope.interface.interface import InterfaceClass @@ -334,7 +322,7 @@ impl = Implements() class Foo(object): __implemented__ = impl - self.failUnless(self._callFUT(Foo) is impl) + self.assertTrue(self._callFUT(Foo) is impl) def test_builtins_added_to_cache(self): from zope.interface import declarations @@ -347,7 +335,7 @@ self.assertEqual(list(self._callFUT(dict)), []) for typ in (tuple, list, dict): spec = specs[typ] - self.failUnless(isinstance(spec, Implements)) + self.assertTrue(isinstance(spec, Implements)) self.assertEqual(repr(spec), '' % (_BUILTINS, typ.__name__)) @@ -360,9 +348,9 @@ specs[tuple] = t_spec specs[list] = l_spec specs[dict] = d_spec - self.failUnless(self._callFUT(tuple) is t_spec) - self.failUnless(self._callFUT(list) is l_spec) - self.failUnless(self._callFUT(dict) is d_spec) + self.assertTrue(self._callFUT(tuple) is t_spec) + self.assertTrue(self._callFUT(list) is l_spec) + self.assertTrue(self._callFUT(dict) is d_spec) def test_oldstyle_class_no_assertions(self): # TODO: Figure out P3 story @@ -393,10 +381,10 @@ spec = self._callFUT(foo) self.assertEqual(spec.__name__, 'zope.interface.tests.test_declarations.foo') - self.failUnless(spec.inherit is foo) - self.failUnless(foo.__implemented__ is spec) - self.failUnless(foo.__providedBy__ is objectSpecificationDescriptor) - self.failIf('__provides__' in foo.__dict__) + self.assertTrue(spec.inherit is foo) + self.assertTrue(foo.__implemented__ is spec) + self.assertTrue(foo.__providedBy__ is objectSpecificationDescriptor) + self.assertFalse('__provides__' in foo.__dict__) def test_w_None_no_bases_w_class(self): from zope.interface.declarations import ClassProvides @@ -405,10 +393,10 @@ spec = self._callFUT(Foo) self.assertEqual(spec.__name__, 'zope.interface.tests.test_declarations.Foo') - self.failUnless(spec.inherit is Foo) - self.failUnless(Foo.__implemented__ is spec) - self.failUnless(isinstance(Foo.__providedBy__, ClassProvides)) - self.failUnless(isinstance(Foo.__provides__, ClassProvides)) + self.assertTrue(spec.inherit is Foo) + self.assertTrue(Foo.__implemented__ is spec) + self.assertTrue(isinstance(Foo.__providedBy__, ClassProvides)) + self.assertTrue(isinstance(Foo.__provides__, ClassProvides)) self.assertEqual(Foo.__provides__, Foo.__providedBy__) def test_w_existing_Implements(self): @@ -416,7 +404,7 @@ impl = Implements() class Foo(object): __implemented__ = impl - self.failUnless(self._callFUT(Foo) is impl) + self.assertTrue(self._callFUT(Foo) is impl) class Test_implementedBy(Test_implementedByFallback): @@ -427,7 +415,7 @@ return implementedBy(*args, **kw) -class Test_classImplementsOnly(_SilencePy3Deprecations): +class Test_classImplementsOnly(unittest.TestCase): def _callFUT(self, *args, **kw): from zope.interface.declarations import classImplementsOnly @@ -443,10 +431,10 @@ spec = Foo.__implemented__ self.assertEqual(spec.__name__, 'zope.interface.tests.test_declarations.Foo') - self.failUnless(spec.inherit is None) - self.failUnless(Foo.__implemented__ is spec) - self.failUnless(isinstance(Foo.__providedBy__, ClassProvides)) - self.failUnless(isinstance(Foo.__provides__, ClassProvides)) + self.assertTrue(spec.inherit is None) + self.assertTrue(Foo.__implemented__ is spec) + self.assertTrue(isinstance(Foo.__providedBy__, ClassProvides)) + self.assertTrue(isinstance(Foo.__provides__, ClassProvides)) self.assertEqual(Foo.__provides__, Foo.__providedBy__) def test_w_existing_Implements(self): @@ -461,12 +449,12 @@ impl.inherit = Foo self._callFUT(Foo, IBar) # Same spec, now different values - self.failUnless(Foo.__implemented__ is impl) + self.assertTrue(Foo.__implemented__ is impl) self.assertEqual(impl.inherit, None) self.assertEqual(impl.declared, (IBar,)) -class Test_classImplements(_SilencePy3Deprecations): +class Test_classImplements(unittest.TestCase): def _callFUT(self, *args, **kw): from zope.interface.declarations import classImplements @@ -482,10 +470,10 @@ spec = Foo.__implemented__ self.assertEqual(spec.__name__, 'zope.interface.tests.test_declarations.Foo') - self.failUnless(spec.inherit is Foo) - self.failUnless(Foo.__implemented__ is spec) - self.failUnless(isinstance(Foo.__providedBy__, ClassProvides)) - self.failUnless(isinstance(Foo.__provides__, ClassProvides)) + self.assertTrue(spec.inherit is Foo) + self.assertTrue(Foo.__implemented__ is spec) + self.assertTrue(isinstance(Foo.__providedBy__, ClassProvides)) + self.assertTrue(isinstance(Foo.__provides__, ClassProvides)) self.assertEqual(Foo.__provides__, Foo.__providedBy__) def test_w_existing_Implements(self): @@ -500,7 +488,7 @@ impl.inherit = Foo self._callFUT(Foo, IBar) # Same spec, now different values - self.failUnless(Foo.__implemented__ is impl) + self.assertTrue(Foo.__implemented__ is impl) self.assertEqual(impl.inherit, Foo) self.assertEqual(impl.declared, (IFoo, IBar,)) @@ -509,24 +497,26 @@ from zope.interface.interface import InterfaceClass IFoo = InterfaceClass('IFoo') IBar = InterfaceClass('IBar') - IBaz = InterfaceClass('IBar') + IBaz = InterfaceClass('IBaz', IFoo) b_impl = Implements(IBaz) impl = Implements(IFoo) impl.declared = (IFoo,) - class Base(object): + class Base1(object): + __implemented__ = b_impl + class Base2(object): __implemented__ = b_impl - class Foo(Base): + class Foo(Base1, Base2): __implemented__ = impl impl.inherit = Foo self._callFUT(Foo, IBar) # Same spec, now different values - self.failUnless(Foo.__implemented__ is impl) + self.assertTrue(Foo.__implemented__ is impl) self.assertEqual(impl.inherit, Foo) self.assertEqual(impl.declared, (IFoo, IBar,)) self.assertEqual(impl.__bases__, (IFoo, IBar, b_impl)) -class Test__implements_advice(_SilencePy3Deprecations): +class Test__implements_advice(unittest.TestCase): def _callFUT(self, *args, **kw): from zope.interface.declarations import _implements_advice @@ -540,12 +530,12 @@ class Foo(object): __implements_advice_data__ = ((IFoo,), classImplements) self._callFUT(Foo) - self.failIf('__implements_advice_data__' in Foo.__dict__) - self.failUnless(isinstance(Foo.__implemented__, Implements)) + self.assertFalse('__implements_advice_data__' in Foo.__dict__) + self.assertTrue(isinstance(Foo.__implemented__, Implements)) self.assertEqual(list(Foo.__implemented__), [IFoo]) -class Test_implementer(_SilencePy3Deprecations): +class Test_implementer(unittest.TestCase): def _getTargetClass(self): from zope.interface.declarations import implementer @@ -563,14 +553,14 @@ pass decorator = self._makeOne(IFoo) returned = decorator(Foo) - self.failUnless(returned is Foo) + self.assertTrue(returned is Foo) spec = Foo.__implemented__ self.assertEqual(spec.__name__, 'zope.interface.tests.test_declarations.Foo') - self.failUnless(spec.inherit is Foo) - self.failUnless(Foo.__implemented__ is spec) - self.failUnless(isinstance(Foo.__providedBy__, ClassProvides)) - self.failUnless(isinstance(Foo.__provides__, ClassProvides)) + self.assertTrue(spec.inherit is Foo) + self.assertTrue(Foo.__implemented__ is spec) + self.assertTrue(isinstance(Foo.__providedBy__, ClassProvides)) + self.assertTrue(isinstance(Foo.__provides__, ClassProvides)) self.assertEqual(Foo.__provides__, Foo.__providedBy__) def test_newstyle_class(self): @@ -581,14 +571,14 @@ pass decorator = self._makeOne(IFoo) returned = decorator(Foo) - self.failUnless(returned is Foo) + self.assertTrue(returned is Foo) spec = Foo.__implemented__ self.assertEqual(spec.__name__, 'zope.interface.tests.test_declarations.Foo') - self.failUnless(spec.inherit is Foo) - self.failUnless(Foo.__implemented__ is spec) - self.failUnless(isinstance(Foo.__providedBy__, ClassProvides)) - self.failUnless(isinstance(Foo.__provides__, ClassProvides)) + self.assertTrue(spec.inherit is Foo) + self.assertTrue(Foo.__implemented__ is spec) + self.assertTrue(isinstance(Foo.__providedBy__, ClassProvides)) + self.assertTrue(isinstance(Foo.__provides__, ClassProvides)) self.assertEqual(Foo.__provides__, Foo.__providedBy__) def test_nonclass_cannot_assign_attr(self): @@ -605,14 +595,14 @@ foo = Foo() decorator = self._makeOne(IFoo) returned = decorator(foo) - self.failUnless(returned is foo) + self.assertTrue(returned is foo) spec = foo.__implemented__ self.assertEqual(spec.__name__, '?') - self.failUnless(spec.inherit is None) - self.failUnless(foo.__implemented__ is spec) + self.assertTrue(spec.inherit is None) + self.assertTrue(foo.__implemented__ is spec) -class Test_implementer_only(_SilencePy3Deprecations): +class Test_implementer_only(unittest.TestCase): def _getTargetClass(self): from zope.interface.declarations import implementer_only @@ -647,11 +637,11 @@ __implemented__ = old_spec decorator = self._makeOne(IFoo) returned = decorator(Foo) - self.failUnless(returned is Foo) + self.assertTrue(returned is Foo) spec = Foo.__implemented__ self.assertEqual(spec.__name__, '?') - self.failUnless(spec.inherit is None) - self.failUnless(Foo.__implemented__ is spec) + self.assertTrue(spec.inherit is None) + self.assertTrue(Foo.__implemented__ is spec) def test_newstyle_class(self): from zope.interface.declarations import Implements @@ -663,16 +653,16 @@ __implemented__ = old_spec decorator = self._makeOne(IFoo) returned = decorator(Foo) - self.failUnless(returned is Foo) + self.assertTrue(returned is Foo) spec = Foo.__implemented__ self.assertEqual(spec.__name__, '?') - self.failUnless(spec.inherit is None) - self.failUnless(Foo.__implemented__ is spec) + self.assertTrue(spec.inherit is None) + self.assertTrue(Foo.__implemented__ is spec) # Test '_implements' by way of 'implements{,Only}', its only callers. -class Test_implementsOnly(_SilencePy3Deprecations, _Py3ClassAdvice): +class Test_implementsOnly(unittest.TestCase, _Py3ClassAdvice): def _getFUT(self): from zope.interface.declarations import implementsOnly @@ -731,7 +721,7 @@ self.assertEqual(list(spec), [IBar]) -class Test_implements(_SilencePy3Deprecations, _Py3ClassAdvice): +class Test_implements(unittest.TestCase, _Py3ClassAdvice): def _getFUT(self): from zope.interface.declarations import implements @@ -795,7 +785,7 @@ self.assertEqual(list(spec), [IFoo]) -class ProvidesClassTests(_SilencePy3Deprecations): +class ProvidesClassTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.declarations import ProvidesClass @@ -820,7 +810,7 @@ pass spec = self._makeOne(Foo, IFoo) klass, args = spec.__reduce__() - self.failUnless(klass is Provides) + self.assertTrue(klass is Provides) self.assertEqual(args, (Foo, IFoo)) def test___get___class(self): @@ -830,7 +820,7 @@ pass spec = self._makeOne(Foo, IFoo) Foo.__provides__ = spec - self.failUnless(Foo.__provides__ is spec) + self.assertTrue(Foo.__provides__ is spec) def test___get___instance(self): from zope.interface.interface import InterfaceClass @@ -845,7 +835,7 @@ self.assertRaises(AttributeError, _test) -class Test_Provides(_SilencePy3Deprecations): +class Test_Provides(unittest.TestCase): def _callFUT(self, *args, **kw): from zope.interface.declarations import Provides @@ -861,7 +851,7 @@ with _Monkey(declarations, InstanceDeclarations=cache): spec = self._callFUT(Foo, IFoo) self.assertEqual(list(spec), [IFoo]) - self.failUnless(cache[(Foo, IFoo)] is spec) + self.assertTrue(cache[(Foo, IFoo)] is spec) def test_w_cached_spec(self): from zope.interface import declarations @@ -873,10 +863,10 @@ cache = {(Foo, IFoo): prior} with _Monkey(declarations, InstanceDeclarations=cache): spec = self._callFUT(Foo, IFoo) - self.failUnless(spec is prior) + self.assertTrue(spec is prior) -class Test_directlyProvides(_SilencePy3Deprecations): +class Test_directlyProvides(unittest.TestCase): def _callFUT(self, *args, **kw): from zope.interface.declarations import directlyProvides @@ -890,7 +880,7 @@ pass obj = Foo() self._callFUT(obj, IFoo) - self.failUnless(isinstance(obj.__provides__, ProvidesClass)) + self.assertTrue(isinstance(obj.__provides__, ProvidesClass)) self.assertEqual(list(obj.__provides__), [IFoo]) def test_w_class(self): @@ -900,7 +890,7 @@ class Foo(object): pass self._callFUT(Foo, IFoo) - self.failUnless(isinstance(Foo.__provides__, ClassProvides)) + self.assertTrue(isinstance(Foo.__provides__, ClassProvides)) self.assertEqual(list(Foo.__provides__), [IFoo]) @_skip_under_py3k @@ -937,11 +927,11 @@ the_dict[name] = value obj = Foo() self._callFUT(obj, IFoo) - self.failUnless(isinstance(the_dict['__provides__'], ProvidesClass)) + self.assertTrue(isinstance(the_dict['__provides__'], ProvidesClass)) self.assertEqual(list(the_dict['__provides__']), [IFoo]) -class Test_alsoProvides(_SilencePy3Deprecations): +class Test_alsoProvides(unittest.TestCase): def _callFUT(self, *args, **kw): from zope.interface.declarations import alsoProvides @@ -955,7 +945,7 @@ pass obj = Foo() self._callFUT(obj, IFoo) - self.failUnless(isinstance(obj.__provides__, ProvidesClass)) + self.assertTrue(isinstance(obj.__provides__, ProvidesClass)) self.assertEqual(list(obj.__provides__), [IFoo]) def test_w_existing_provides(self): @@ -969,11 +959,11 @@ obj = Foo() directlyProvides(obj, IFoo) self._callFUT(obj, IBar) - self.failUnless(isinstance(obj.__provides__, ProvidesClass)) + self.assertTrue(isinstance(obj.__provides__, ProvidesClass)) self.assertEqual(list(obj.__provides__), [IFoo, IBar]) -class Test_noLongerProvides(_SilencePy3Deprecations): +class Test_noLongerProvides(unittest.TestCase): def _callFUT(self, *args, **kw): from zope.interface.declarations import noLongerProvides @@ -1022,7 +1012,7 @@ self.assertRaises(ValueError, self._callFUT, obj, IFoo) -class ClassProvidesBaseFallbackTests(_SilencePy3Deprecations): +class ClassProvidesBaseFallbackTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.declarations import ClassProvidesBaseFallback @@ -1043,7 +1033,7 @@ class Foo(object): pass cpbp = Foo.__provides__ = self._makeOne(Foo, IFoo) - self.failUnless(Foo.__provides__ is cpbp) + self.assertTrue(Foo.__provides__ is cpbp) def test_w_same_class_via_instance(self): from zope.interface.interface import InterfaceClass @@ -1052,7 +1042,7 @@ pass foo = Foo() cpbp = Foo.__provides__ = self._makeOne(Foo, IFoo) - self.failUnless(foo.__provides__ is IFoo) + self.assertTrue(foo.__provides__ is IFoo) def test_w_different_class(self): from zope.interface.interface import InterfaceClass @@ -1075,7 +1065,7 @@ return ClassProvidesBase -class ClassProvidesTests(_SilencePy3Deprecations): +class ClassProvidesTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.declarations import ClassProvides @@ -1093,7 +1083,7 @@ class Foo(object): pass cp = Foo.__provides__ = self._makeOne(Foo, type(Foo), IBar) - self.failUnless(Foo.__provides__ is cp) + self.assertTrue(Foo.__provides__ is cp) self.assertEqual(list(Foo().__provides__), [IFoo]) def test___reduce__(self): @@ -1109,7 +1099,7 @@ (self._getTargetClass(), (Foo, type(Foo), IBar))) -class Test_directlyProvidedBy(_SilencePy3Deprecations): +class Test_directlyProvidedBy(unittest.TestCase): def _callFUT(self, *args, **kw): from zope.interface.declarations import directlyProvidedBy @@ -1155,7 +1145,7 @@ self.assertEqual(list(self._callFUT(foo)), [IBar]) -class Test_classProvides(_SilencePy3Deprecations, _Py3ClassAdvice): +class Test_classProvides(unittest.TestCase, _Py3ClassAdvice): def _getFUT(self): from zope.interface.declarations import classProvides @@ -1223,7 +1213,7 @@ # Test _classProvides_advice through classProvides, its only caller. -class Test_provider(_SilencePy3Deprecations): +class Test_provider(unittest.TestCase): def _getTargetClass(self): from zope.interface.declarations import provider @@ -1239,11 +1229,11 @@ @self._makeOne(IFoo) class Foo(object): pass - self.failUnless(isinstance(Foo.__provides__, ClassProvides)) + self.assertTrue(isinstance(Foo.__provides__, ClassProvides)) self.assertEqual(list(Foo.__provides__), [IFoo]) -class Test_moduleProvides(_SilencePy3Deprecations): +class Test_moduleProvides(unittest.TestCase): def _getFUT(self): from zope.interface.declarations import moduleProvides @@ -1314,7 +1304,7 @@ assert False, 'TypeError not raised' -class Test_getObjectSpecificationFallback(_SilencePy3Deprecations): +class Test_getObjectSpecificationFallback(unittest.TestCase): def _callFUT(self, *args, **kw): from zope.interface.declarations import getObjectSpecificationFallback @@ -1345,7 +1335,7 @@ pass directlyProvides(foo, IFoo) spec = self._callFUT(foo) - self.failUnless(spec is foo.__provides__) + self.assertTrue(spec is foo.__provides__) def test_existing_provides_is_not_spec(self): def foo(): @@ -1392,7 +1382,7 @@ return getObjectSpecification(*args, **kw) -class Test_providedByFallback(_SilencePy3Deprecations): +class Test_providedByFallback(unittest.TestCase): def _callFUT(self, *args, **kw): from zope.interface.declarations import providedByFallback @@ -1443,7 +1433,7 @@ foo.__providedBy__ = object() expected = foo.__provides__ = object() spec = self._callFUT(foo) - self.failUnless(spec is expected) + self.assertTrue(spec is expected) def test_w_providedBy_invalid_spec_w_provides_diff_provides_on_class(self): class Foo(object): @@ -1453,7 +1443,7 @@ expected = foo.__provides__ = object() Foo.__provides__ = object() spec = self._callFUT(foo) - self.failUnless(spec is expected) + self.assertTrue(spec is expected) def test_w_providedBy_invalid_spec_w_provides_same_provides_on_class(self): from zope.interface.declarations import implementer @@ -1477,7 +1467,7 @@ return providedBy(*args, **kw) -class ObjectSpecificationDescriptorFallbackTests(_SilencePy3Deprecations): +class ObjectSpecificationDescriptorFallbackTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.declarations \ diff -Nru zope.interface-4.1.1/src/zope/interface/tests/test_document.py zope.interface-4.1.2/src/zope/interface/tests/test_document.py --- zope.interface-4.1.1/src/zope/interface/tests/test_document.py 2013-01-07 22:36:49.000000000 +0000 +++ zope.interface-4.1.2/src/zope/interface/tests/test_document.py 2014-10-30 18:02:02.000000000 +0000 @@ -13,7 +13,7 @@ ############################################################################## """Documentation tests. """ -import unittest +import unittest class Test_asStructuredText(unittest.TestCase): @@ -239,6 +239,231 @@ self.assertEqual(self._callFUT(IDerived), EXPECTED) + +class Test_asReStructuredText(unittest.TestCase): + + def _callFUT(self, iface): + from zope.interface.document import asReStructuredText + return asReStructuredText(iface) + + def test_asReStructuredText_no_docstring(self): + from zope.interface import Interface + EXPECTED = '\n\n'.join([ + "``INoDocstring``", + " Attributes:", + " Methods:", + "" + ]) + class INoDocstring(Interface): + pass + self.assertEqual(self._callFUT(INoDocstring), EXPECTED) + + def test_asReStructuredText_empty_with_docstring(self): + from zope.interface import Interface + EXPECTED = '\n\n'.join([ + "``IEmpty``", + " This is an empty interface.", + " Attributes:", + " Methods:", + "" + ]) + class IEmpty(Interface): + """ This is an empty interface. + """ + self.assertEqual(self._callFUT(IEmpty), EXPECTED) + + def test_asReStructuredText_empty_with_multiline_docstring(self): + from zope.interface import Interface + EXPECTED = '\n'.join([ + "``IEmpty``", + "", + " This is an empty interface.", + " ", + (" It can be used to annotate any class or object, " + "because it promises"), + " nothing.", + "", + " Attributes:", + "", + " Methods:", + "", + "" + ]) + class IEmpty(Interface): + """ This is an empty interface. + + It can be used to annotate any class or object, because it promises + nothing. + """ + self.assertEqual(self._callFUT(IEmpty), EXPECTED) + + def test_asReStructuredText_with_attribute_no_docstring(self): + from zope.interface import Attribute + from zope.interface import Interface + EXPECTED = '\n\n'.join([ + "``IHasAttribute``", + " This interface has an attribute.", + " Attributes:", + " ``an_attribute`` -- no documentation", + " Methods:", + "" + ]) + class IHasAttribute(Interface): + """ This interface has an attribute. + """ + an_attribute = Attribute('an_attribute') + + self.assertEqual(self._callFUT(IHasAttribute), EXPECTED) + + def test_asReStructuredText_with_attribute_with_docstring(self): + from zope.interface import Attribute + from zope.interface import Interface + EXPECTED = '\n\n'.join([ + "``IHasAttribute``", + " This interface has an attribute.", + " Attributes:", + " ``an_attribute`` -- This attribute is documented.", + " Methods:", + "" + ]) + class IHasAttribute(Interface): + """ This interface has an attribute. + """ + an_attribute = Attribute('an_attribute', + 'This attribute is documented.') + + self.assertEqual(self._callFUT(IHasAttribute), EXPECTED) + + def test_asReStructuredText_with_method_no_args_no_docstring(self): + from zope.interface import Interface + EXPECTED = '\n\n'.join([ + "``IHasMethod``", + " This interface has a method.", + " Attributes:", + " Methods:", + " ``aMethod()`` -- no documentation", + "" + ]) + class IHasMethod(Interface): + """ This interface has a method. + """ + def aMethod(): + pass + + self.assertEqual(self._callFUT(IHasMethod), EXPECTED) + + def test_asReStructuredText_with_method_positional_args_no_docstring(self): + from zope.interface import Interface + EXPECTED = '\n\n'.join([ + "``IHasMethod``", + " This interface has a method.", + " Attributes:", + " Methods:", + " ``aMethod(first, second)`` -- no documentation", + "" + ]) + class IHasMethod(Interface): + """ This interface has a method. + """ + def aMethod(first, second): + pass + + self.assertEqual(self._callFUT(IHasMethod), EXPECTED) + + def test_asReStructuredText_with_method_starargs_no_docstring(self): + from zope.interface import Interface + EXPECTED = '\n\n'.join([ + "``IHasMethod``", + " This interface has a method.", + " Attributes:", + " Methods:", + " ``aMethod(first, second, *rest)`` -- no documentation", + "" + ]) + class IHasMethod(Interface): + """ This interface has a method. + """ + def aMethod(first, second, *rest): + pass + + self.assertEqual(self._callFUT(IHasMethod), EXPECTED) + + def test_asReStructuredText_with_method_kwargs_no_docstring(self): + from zope.interface import Interface + EXPECTED = '\n\n'.join([ + "``IHasMethod``", + " This interface has a method.", + " Attributes:", + " Methods:", + " ``aMethod(first, second, **kw)`` -- no documentation", + "" + ]) + class IHasMethod(Interface): + """ This interface has a method. + """ + def aMethod(first, second, **kw): + pass + + self.assertEqual(self._callFUT(IHasMethod), EXPECTED) + + def test_asReStructuredText_with_method_with_docstring(self): + from zope.interface import Interface + EXPECTED = '\n\n'.join([ + "``IHasMethod``", + " This interface has a method.", + " Attributes:", + " Methods:", + " ``aMethod()`` -- This method is documented.", + "" + ]) + class IHasMethod(Interface): + """ This interface has a method. + """ + def aMethod(): + """This method is documented. + """ + + self.assertEqual(self._callFUT(IHasMethod), EXPECTED) + + def test_asReStructuredText_derived_ignores_base(self): + from zope.interface import Attribute + from zope.interface import Interface + EXPECTED = '\n\n'.join([ + "``IDerived``", + " IDerived doc", + " This interface extends:", + " o ``IBase``", + " Attributes:", + " ``attr1`` -- no documentation", + " ``attr2`` -- attr2 doc", + " Methods:", + " ``method3()`` -- method3 doc", + " ``method4()`` -- no documentation", + " ``method5()`` -- method5 doc", + "", + ]) + + class IBase(Interface): + def method1(): + pass + def method2(): + pass + + class IDerived(IBase): + "IDerived doc" + attr1 = Attribute('attr1') + attr2 = Attribute('attr2', 'attr2 doc') + + def method3(): + "method3 doc" + def method4(): + pass + def method5(): + "method5 doc" + + self.assertEqual(self._callFUT(IDerived), EXPECTED) + + class Test__justify_and_indent(unittest.TestCase): def _callFUT(self, text, level, **kw): @@ -282,5 +507,6 @@ def test_suite(): return unittest.TestSuite(( unittest.makeSuite(Test_asStructuredText), + unittest.makeSuite(Test_asReStructuredText), unittest.makeSuite(Test__justify_and_indent), )) diff -Nru zope.interface-4.1.1/src/zope/interface/tests/test_interface.py zope.interface-4.1.2/src/zope/interface/tests/test_interface.py --- zope.interface-4.1.1/src/zope/interface/tests/test_interface.py 2013-01-07 22:36:49.000000000 +0000 +++ zope.interface-4.1.2/src/zope/interface/tests/test_interface.py 2014-12-28 00:33:38.000000000 +0000 @@ -17,17 +17,6 @@ _marker = object() -class _SilencePy3Deprecations(unittest.TestCase): - # silence deprecation warnings under py3 - - def failUnless(self, expr): - # St00pid speling. - return self.assertTrue(expr) - - def failIf(self, expr): - # St00pid speling. - return self.assertFalse(expr) - class Test_invariant(unittest.TestCase): @@ -146,7 +135,7 @@ self.assertEqual(element.queryTaggedValue('foo'), 'bar') -class SpecificationBasePyTests(_SilencePy3Deprecations): +class SpecificationBasePyTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.interface import SpecificationBasePy @@ -162,7 +151,7 @@ def _providedBy(obj): return _empty with _Monkey(interface, providedBy=_providedBy): - self.failIf(sb.providedBy(object())) + self.assertFalse(sb.providedBy(object())) def test_providedBy_hit(self): from zope.interface import interface @@ -172,7 +161,7 @@ def _providedBy(obj): return _Decl() with _Monkey(interface, providedBy=_providedBy): - self.failUnless(sb.providedBy(object())) + self.assertTrue(sb.providedBy(object())) def test_implementedBy_miss(self): from zope.interface import interface @@ -181,7 +170,7 @@ def _implementedBy(obj): return _empty with _Monkey(interface, implementedBy=_implementedBy): - self.failIf(sb.implementedBy(object())) + self.assertFalse(sb.implementedBy(object())) def test_implementedBy_hit(self): from zope.interface import interface @@ -191,32 +180,32 @@ def _implementedBy(obj): return _Decl() with _Monkey(interface, implementedBy=_implementedBy): - self.failUnless(sb.implementedBy(object())) + self.assertTrue(sb.implementedBy(object())) def test_isOrExtends_miss(self): sb = self._makeOne() sb._implied = {} # not defined by SpecificationBasePy - self.failIf(sb.isOrExtends(object())) + self.assertFalse(sb.isOrExtends(object())) def test_isOrExtends_hit(self): sb = self._makeOne() testing = object() sb._implied = {testing: {}} # not defined by SpecificationBasePy - self.failUnless(sb(testing)) + self.assertTrue(sb(testing)) def test___call___miss(self): sb = self._makeOne() sb._implied = {} # not defined by SpecificationBasePy - self.failIf(sb.isOrExtends(object())) + self.assertFalse(sb.isOrExtends(object())) def test___call___hit(self): sb = self._makeOne() testing = object() sb._implied = {testing: {}} # not defined by SpecificationBasePy - self.failUnless(sb(testing)) + self.assertTrue(sb(testing)) -class InterfaceBasePyTests(_SilencePy3Deprecations): +class InterfaceBasePyTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.interface import InterfaceBasePy @@ -236,7 +225,7 @@ class _Adapted(object): def __conform__(self, iface): return conformed - self.failUnless(ib(_Adapted()) is conformed) + self.assertTrue(ib(_Adapted()) is conformed) def test___call___w___conform___miss_ob_provides(self): ib = self._makeOne(True) @@ -244,13 +233,13 @@ def __conform__(self, iface): return None adapted = _Adapted() - self.failUnless(ib(adapted) is adapted) + self.assertTrue(ib(adapted) is adapted) def test___call___wo___conform___ob_no_provides_w_alternate(self): ib = self._makeOne(False) adapted = object() alternate = object() - self.failUnless(ib(adapted, alternate) is alternate) + self.assertTrue(ib(adapted, alternate) is alternate) def test___call___w___conform___ob_no_provides_wo_alternate(self): ib = self._makeOne(False) @@ -260,7 +249,7 @@ def test___adapt___ob_provides(self): ib = self._makeOne(True) adapted = object() - self.failUnless(ib.__adapt__(adapted) is adapted) + self.assertTrue(ib.__adapt__(adapted) is adapted) def test___adapt___ob_no_provides_uses_hooks(self): from zope.interface import interface @@ -273,11 +262,11 @@ def _hook_hit(iface, obj): return obj with _Monkey(interface, adapter_hooks=[_hook_miss, _hook_hit]): - self.failUnless(ib.__adapt__(adapted) is adapted) + self.assertTrue(ib.__adapt__(adapted) is adapted) self.assertEqual(_missed, [(ib, adapted)]) -class SpecificationTests(_SilencePy3Deprecations): +class SpecificationTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.interface import Specification @@ -293,8 +282,8 @@ spec = self._makeOne() self.assertEqual(spec.__bases__, ()) self.assertEqual(len(spec._implied), 2) - self.failUnless(spec in spec._implied) - self.failUnless(Interface in spec._implied) + self.assertTrue(spec in spec._implied) + self.assertTrue(Interface in spec._implied) self.assertEqual(len(spec.dependents), 0) def test_subscribe_first_time(self): @@ -324,7 +313,7 @@ spec.unsubscribe(dep) self.assertEqual(spec.dependents[dep], 1) spec.unsubscribe(dep) - self.failIf(dep in spec.dependents) + self.assertFalse(dep in spec.dependents) def test___setBases_subscribes_bases_and_notifies_dependents(self): from zope.interface.interface import Interface @@ -350,11 +339,49 @@ spec._v_attrs = 'Foo' spec._implied[I] = () spec.changed(spec) - self.failUnless(getattr(spec, '_v_attrs', self) is self) - self.failIf(I in spec._implied) + self.assertTrue(getattr(spec, '_v_attrs', self) is self) + self.assertFalse(I in spec._implied) + + def test_interfaces_skips_already_seen(self): + from zope.interface.interface import Interface + class IFoo(Interface): + pass + spec = self._makeOne([IFoo, IFoo]) + self.assertEqual(list(spec.interfaces()), [IFoo]) + def test_extends_strict_wo_self(self): + from zope.interface.interface import Interface + class IFoo(Interface): + pass + spec = self._makeOne(IFoo) + self.assertFalse(spec.extends(IFoo, strict=True)) -class InterfaceClassTests(_SilencePy3Deprecations): + def test_extends_strict_w_self(self): + spec = self._makeOne() + self.assertFalse(spec.extends(spec, strict=True)) + + def test_extends_non_strict_w_self(self): + spec = self._makeOne() + self.assertTrue(spec.extends(spec, strict=False)) + + def test_get_hit_w__v_attrs(self): + spec = self._makeOne() + foo = object() + spec._v_attrs = {'foo': foo} + self.assertTrue(spec.get('foo') is foo) + + def test_get_hit_from_base_wo__v_attrs(self): + from zope.interface.interface import Attribute + from zope.interface.interface import Interface + class IFoo(Interface): + foo = Attribute('foo') + class IBar(Interface): + bar = Attribute('bar') + spec = self._makeOne([IFoo, IBar]) + self.assertTrue(spec.get('foo') is IFoo.get('foo')) + self.assertTrue(spec.get('bar') is IBar.get('bar')) + +class InterfaceClassTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.interface import InterfaceClass @@ -410,12 +437,18 @@ self.assertEqual(inst.__bases__, ()) self.assertEqual(list(inst.names()), []) - def test_ctor_attrs_w_invalide_attr_type(self): + def test_ctor_attrs_w_invalid_attr_type(self): from zope.interface.exceptions import InvalidInterface ATTRS = {'invalid': object()} klass = self._getTargetClass() self.assertRaises(InvalidInterface, klass, 'ITesting', attrs=ATTRS) + def test_ctor_w_explicit___doc__(self): + ATTRS = {'__doc__': 'ATTR'} + klass = self._getTargetClass() + inst = klass('ITesting', attrs=ATTRS, __doc__='EXPLICIT') + self.assertEqual(inst.__doc__, 'EXPLICIT') + def test_interfaces(self): iface = self._makeOne() self.assertEqual(list(iface.interfaces()), [iface]) @@ -427,19 +460,19 @@ def test_isEqualOrExtendedBy_identity(self): iface = self._makeOne() - self.failUnless(iface.isEqualOrExtendedBy(iface)) + self.assertTrue(iface.isEqualOrExtendedBy(iface)) def test_isEqualOrExtendedBy_subiface(self): iface = self._makeOne() sub = self._makeOne('ISub', bases=(iface,)) - self.failUnless(iface.isEqualOrExtendedBy(sub)) - self.failIf(sub.isEqualOrExtendedBy(iface)) + self.assertTrue(iface.isEqualOrExtendedBy(sub)) + self.assertFalse(sub.isEqualOrExtendedBy(iface)) def test_isEqualOrExtendedBy_unrelated(self): one = self._makeOne('One') another = self._makeOne('Another') - self.failIf(one.isEqualOrExtendedBy(another)) - self.failIf(another.isEqualOrExtendedBy(one)) + self.assertFalse(one.isEqualOrExtendedBy(another)) + self.assertFalse(another.isEqualOrExtendedBy(one)) def test_names_w_all_False_ignores_bases(self): from zope.interface.interface import Attribute @@ -619,7 +652,7 @@ def test___contains___miss(self): one = self._makeOne() - self.failIf('nonesuch' in one) + self.assertFalse('nonesuch' in one) def test___contains___hit(self): from zope.interface.interface import Attribute @@ -630,8 +663,8 @@ 'bar': fromFunction(_bar), } one = self._makeOne(attrs=ATTRS) - self.failUnless('foo' in one) - self.failUnless('bar' in one) + self.assertTrue('foo' in one) + self.assertTrue('bar' in one) def test_direct_miss(self): one = self._makeOne() @@ -666,12 +699,6 @@ iface = self._makeOne(attrs=ATTRS) self.assertEqual(iface.queryDescriptionFor('attr'), ATTRS['attr']) - - #TODO (or not: 'deferred' looks like a fossil to me. - #def test_deferred_cache_hit(self): - #def test_deferred_cache_miss(self): - #def test_deferred_cache_miss_w_bases(self): - def test_validateInvariants_pass(self): _called_with = [] def _passable(*args, **kw): @@ -713,7 +740,7 @@ self.assertRaises(Invalid, iface.validateInvariants, obj, _errors) self.assertEqual(_fail_called_with, [((obj,), {})]) self.assertEqual(len(_errors), 1) - self.failUnless(isinstance(_errors[0], Invalid)) + self.assertTrue(isinstance(_errors[0], Invalid)) def test_validateInvariants_fail_in_base_wo_errors_passed(self): from zope.interface.exceptions import Invalid @@ -734,7 +761,6 @@ self.assertEqual(_passable_called_with, [((obj,), {})]) self.assertEqual(_fail_called_with, [((obj,), {})]) - #TODO def test_validateInvariants_fail_in_base_w_errors_passed(self): from zope.interface.exceptions import Invalid _errors = [] @@ -755,7 +781,7 @@ self.assertEqual(_passable_called_with, [((obj,), {})]) self.assertEqual(_fail_called_with, [((obj,), {})]) self.assertEqual(len(_errors), 1) - self.failUnless(isinstance(_errors[0], Invalid)) + self.assertTrue(isinstance(_errors[0], Invalid)) def test___reduce__(self): iface = self._makeOne('PickleMe') @@ -781,56 +807,56 @@ warnings.simplefilter('always') # see LP #825249 self.assertEqual(hash(derived), 1) self.assertEqual(len(warned), 1) - self.failUnless(warned[0].category is UserWarning) + self.assertTrue(warned[0].category is UserWarning) self.assertEqual(str(warned[0].message), 'Hashing uninitialized InterfaceClass instance') def test_comparison_with_None(self): iface = self._makeOne() - self.failUnless(iface < None) - self.failUnless(iface <= None) - self.failIf(iface == None) - self.failUnless(iface != None) - self.failIf(iface >= None) - self.failIf(iface > None) - - self.failIf(None < iface) - self.failIf(None <= iface) - self.failIf(None == iface) - self.failUnless(None != iface) - self.failUnless(None >= iface) - self.failUnless(None > iface) + self.assertTrue(iface < None) + self.assertTrue(iface <= None) + self.assertFalse(iface == None) + self.assertTrue(iface != None) + self.assertFalse(iface >= None) + self.assertFalse(iface > None) + + self.assertFalse(None < iface) + self.assertFalse(None <= iface) + self.assertFalse(None == iface) + self.assertTrue(None != iface) + self.assertTrue(None >= iface) + self.assertTrue(None > iface) def test_comparison_with_same_instance(self): iface = self._makeOne() - self.failIf(iface < iface) - self.failUnless(iface <= iface) - self.failUnless(iface == iface) - self.failIf(iface != iface) - self.failUnless(iface >= iface) - self.failIf(iface > iface) + self.assertFalse(iface < iface) + self.assertTrue(iface <= iface) + self.assertTrue(iface == iface) + self.assertFalse(iface != iface) + self.assertTrue(iface >= iface) + self.assertFalse(iface > iface) def test_comparison_with_same_named_instance_in_other_module(self): one = self._makeOne('IName', __module__='zope.interface.tests.one') other = self._makeOne('IName', __module__='zope.interface.tests.other') - self.failUnless(one < other) - self.failIf(other < one) - self.failUnless(one <= other) - self.failIf(other <= one) - self.failIf(one == other) - self.failIf(other == one) - self.failUnless(one != other) - self.failUnless(other != one) - self.failIf(one >= other) - self.failUnless(other >= one) - self.failIf(one > other) - self.failUnless(other > one) + self.assertTrue(one < other) + self.assertFalse(other < one) + self.assertTrue(one <= other) + self.assertFalse(other <= one) + self.assertFalse(one == other) + self.assertFalse(other == one) + self.assertTrue(one != other) + self.assertTrue(other != one) + self.assertFalse(one >= other) + self.assertTrue(other >= one) + self.assertFalse(one > other) + self.assertTrue(other > one) -class InterfaceTests(_SilencePy3Deprecations): +class InterfaceTests(unittest.TestCase): def test_attributes_link_to_interface(self): from zope.interface import Interface @@ -839,7 +865,7 @@ class I1(Interface): attr = Attribute("My attr") - self.failUnless(I1['attr'].interface is I1) + self.assertTrue(I1['attr'].interface is I1) def test_methods_link_to_interface(self): from zope.interface import Interface @@ -849,7 +875,7 @@ def method(foo, bar, bingo): pass - self.failUnless(I1['method'].interface is I1) + self.assertTrue(I1['method'].interface is I1) def test_classImplements_simple(self): from zope.interface import Interface @@ -874,12 +900,12 @@ current = Current() - self.failUnless(ICurrent.implementedBy(Current)) - self.failIf(IOther.implementedBy(Current)) - self.failUnless(ICurrent in implementedBy(Current)) - self.failIf(IOther in implementedBy(Current)) - self.failUnless(ICurrent in providedBy(current)) - self.failIf(IOther in providedBy(current)) + self.assertTrue(ICurrent.implementedBy(Current)) + self.assertFalse(IOther.implementedBy(Current)) + self.assertTrue(ICurrent in implementedBy(Current)) + self.assertFalse(IOther in implementedBy(Current)) + self.assertTrue(ICurrent in providedBy(current)) + self.assertFalse(IOther in providedBy(current)) def test_classImplements_base_not_derived(self): from zope.interface import Interface @@ -896,12 +922,12 @@ pass current = Current() - self.failUnless(IBase.implementedBy(Current)) - self.failIf(IDerived.implementedBy(Current)) - self.failUnless(IBase in implementedBy(Current)) - self.failIf(IDerived in implementedBy(Current)) - self.failUnless(IBase in providedBy(current)) - self.failIf(IDerived in providedBy(current)) + self.assertTrue(IBase.implementedBy(Current)) + self.assertFalse(IDerived.implementedBy(Current)) + self.assertTrue(IBase in implementedBy(Current)) + self.assertFalse(IDerived in implementedBy(Current)) + self.assertTrue(IBase in providedBy(current)) + self.assertFalse(IDerived in providedBy(current)) def test_classImplements_base_and_derived(self): from zope.interface import Interface @@ -922,14 +948,14 @@ current = Current() - self.failUnless(IBase.implementedBy(Current)) - self.failUnless(IDerived.implementedBy(Current)) - self.failIf(IBase in implementedBy(Current)) - self.failUnless(IBase in implementedBy(Current).flattened()) - self.failUnless(IDerived in implementedBy(Current)) - self.failIf(IBase in providedBy(current)) - self.failUnless(IBase in providedBy(current).flattened()) - self.failUnless(IDerived in providedBy(current)) + self.assertTrue(IBase.implementedBy(Current)) + self.assertTrue(IDerived.implementedBy(Current)) + self.assertFalse(IBase in implementedBy(Current)) + self.assertTrue(IBase in implementedBy(Current).flattened()) + self.assertTrue(IDerived in implementedBy(Current)) + self.assertFalse(IBase in providedBy(current)) + self.assertTrue(IBase in providedBy(current).flattened()) + self.assertTrue(IDerived in providedBy(current)) def test_classImplements_multiple(self): from zope.interface import Interface @@ -957,12 +983,12 @@ ambi = Ambi() - self.failUnless(ILeft.implementedBy(Ambi)) - self.failUnless(IRight.implementedBy(Ambi)) - self.failUnless(ILeft in implementedBy(Ambi)) - self.failUnless(IRight in implementedBy(Ambi)) - self.failUnless(ILeft in providedBy(ambi)) - self.failUnless(IRight in providedBy(ambi)) + self.assertTrue(ILeft.implementedBy(Ambi)) + self.assertTrue(IRight.implementedBy(Ambi)) + self.assertTrue(ILeft in implementedBy(Ambi)) + self.assertTrue(IRight in implementedBy(Ambi)) + self.assertTrue(ILeft in providedBy(ambi)) + self.assertTrue(IRight in providedBy(ambi)) def test_classImplements_multiple_w_explict_implements(self): from zope.interface import Interface @@ -997,30 +1023,15 @@ mixed = Mixed() - self.failUnless(ILeft.implementedBy(Mixed)) - self.failIf(IRight.implementedBy(Mixed)) - self.failUnless(IOther.implementedBy(Mixed)) - self.failUnless(ILeft in implementedBy(Mixed)) - self.failIf(IRight in implementedBy(Mixed)) - self.failUnless(IOther in implementedBy(Mixed)) - self.failUnless(ILeft in providedBy(mixed)) - self.failIf(IRight in providedBy(mixed)) - self.failUnless(IOther in providedBy(mixed)) - - def test_interface_deferred_class_method_broken(self): - from zope.interface import Interface - from zope.interface.exceptions import BrokenImplementation - - class IDeferring(Interface): - def method(): - pass - - class Deferring(IDeferring.deferred()): - __implemented__ = IDeferring - - deferring = Deferring() - - self.assertRaises(BrokenImplementation, deferring.method) + self.assertTrue(ILeft.implementedBy(Mixed)) + self.assertFalse(IRight.implementedBy(Mixed)) + self.assertTrue(IOther.implementedBy(Mixed)) + self.assertTrue(ILeft in implementedBy(Mixed)) + self.assertFalse(IRight in implementedBy(Mixed)) + self.assertTrue(IOther in implementedBy(Mixed)) + self.assertTrue(ILeft in providedBy(mixed)) + self.assertFalse(IRight in providedBy(mixed)) + self.assertTrue(IOther in providedBy(mixed)) def testInterfaceExtendsInterface(self): from zope.interface import Interface @@ -1031,13 +1042,13 @@ BobInterface = new('BobInterface') BazInterface = new('BazInterface', [BobInterface, BarInterface]) - self.failUnless(BazInterface.extends(BobInterface)) - self.failUnless(BazInterface.extends(BarInterface)) - self.failUnless(BazInterface.extends(FunInterface)) - self.failIf(BobInterface.extends(FunInterface)) - self.failIf(BobInterface.extends(BarInterface)) - self.failUnless(BarInterface.extends(FunInterface)) - self.failIf(BarInterface.extends(BazInterface)) + self.assertTrue(BazInterface.extends(BobInterface)) + self.assertTrue(BazInterface.extends(BarInterface)) + self.assertTrue(BazInterface.extends(FunInterface)) + self.assertFalse(BobInterface.extends(FunInterface)) + self.assertFalse(BobInterface.extends(BarInterface)) + self.assertTrue(BarInterface.extends(FunInterface)) + self.assertFalse(BarInterface.extends(BazInterface)) def test_verifyClass(self): from zope.interface import Attribute @@ -1058,7 +1069,7 @@ def method(self): pass - self.failUnless(verifyClass(ICheckMe, CheckMe)) + self.assertTrue(verifyClass(ICheckMe, CheckMe)) def test_verifyObject(self): from zope.interface import Attribute @@ -1081,7 +1092,7 @@ check_me = CheckMe() - self.failUnless(verifyObject(ICheckMe, check_me)) + self.assertTrue(verifyObject(ICheckMe, check_me)) def test_interface_object_provides_Interface(self): from zope.interface import Interface @@ -1089,7 +1100,7 @@ class AnInterface(Interface): pass - self.failUnless(Interface.providedBy(AnInterface)) + self.assertTrue(Interface.providedBy(AnInterface)) def test_names_simple(self): from zope.interface import Attribute @@ -1145,11 +1156,11 @@ self.assertEqual(len(name_values), 2) self.assertEqual(name_values[0][0], 'attr') - self.failUnless(isinstance(name_values[0][1], Attribute)) + self.assertTrue(isinstance(name_values[0][1], Attribute)) self.assertEqual(name_values[0][1].__name__, 'attr') self.assertEqual(name_values[0][1].__doc__, 'My attr') self.assertEqual(name_values[1][0], 'method') - self.failUnless(isinstance(name_values[1][1], Method)) + self.assertTrue(isinstance(name_values[1][1], Method)) self.assertEqual(name_values[1][1].__name__, 'method') self.assertEqual(name_values[1][1].__doc__, 'My method') @@ -1178,15 +1189,15 @@ self.assertEqual(len(name_values), 3) self.assertEqual(name_values[0][0], 'attr2') - self.failUnless(isinstance(name_values[0][1], Attribute)) + self.assertTrue(isinstance(name_values[0][1], Attribute)) self.assertEqual(name_values[0][1].__name__, 'attr2') self.assertEqual(name_values[0][1].__doc__, 'My attr2') self.assertEqual(name_values[1][0], 'method') - self.failUnless(isinstance(name_values[1][1], Method)) + self.assertTrue(isinstance(name_values[1][1], Method)) self.assertEqual(name_values[1][1].__name__, 'method') self.assertEqual(name_values[1][1].__doc__, 'My method, overridden') self.assertEqual(name_values[2][0], 'method2') - self.failUnless(isinstance(name_values[2][1], Method)) + self.assertTrue(isinstance(name_values[2][1], Method)) self.assertEqual(name_values[2][1].__name__, 'method2') self.assertEqual(name_values[2][1].__doc__, 'My method2') @@ -1194,19 +1205,19 @@ self.assertEqual(len(name_values), 4) self.assertEqual(name_values[0][0], 'attr') - self.failUnless(isinstance(name_values[0][1], Attribute)) + self.assertTrue(isinstance(name_values[0][1], Attribute)) self.assertEqual(name_values[0][1].__name__, 'attr') self.assertEqual(name_values[0][1].__doc__, 'My attr') self.assertEqual(name_values[1][0], 'attr2') - self.failUnless(isinstance(name_values[1][1], Attribute)) + self.assertTrue(isinstance(name_values[1][1], Attribute)) self.assertEqual(name_values[1][1].__name__, 'attr2') self.assertEqual(name_values[1][1].__doc__, 'My attr2') self.assertEqual(name_values[2][0], 'method') - self.failUnless(isinstance(name_values[2][1], Method)) + self.assertTrue(isinstance(name_values[2][1], Method)) self.assertEqual(name_values[2][1].__name__, 'method') self.assertEqual(name_values[2][1].__doc__, 'My method, overridden') self.assertEqual(name_values[3][0], 'method2') - self.failUnless(isinstance(name_values[3][1], Method)) + self.assertTrue(isinstance(name_values[3][1], Method)) self.assertEqual(name_values[3][1].__name__, 'method2') self.assertEqual(name_values[3][1].__doc__, 'My method2') @@ -1231,12 +1242,12 @@ "My method" a_desc = ISimple.getDescriptionFor('attr') - self.failUnless(isinstance(a_desc, Attribute)) + self.assertTrue(isinstance(a_desc, Attribute)) self.assertEqual(a_desc.__name__, 'attr') self.assertEqual(a_desc.__doc__, 'My attr') m_desc = ISimple.getDescriptionFor('method') - self.failUnless(isinstance(m_desc, Method)) + self.assertTrue(isinstance(m_desc, Method)) self.assertEqual(m_desc.__name__, 'method') self.assertEqual(m_desc.__doc__, 'My method') @@ -1262,22 +1273,22 @@ "My method2" a_desc = IDerived.getDescriptionFor('attr') - self.failUnless(isinstance(a_desc, Attribute)) + self.assertTrue(isinstance(a_desc, Attribute)) self.assertEqual(a_desc.__name__, 'attr') self.assertEqual(a_desc.__doc__, 'My attr') m_desc = IDerived.getDescriptionFor('method') - self.failUnless(isinstance(m_desc, Method)) + self.assertTrue(isinstance(m_desc, Method)) self.assertEqual(m_desc.__name__, 'method') self.assertEqual(m_desc.__doc__, 'My method, overridden') a2_desc = IDerived.getDescriptionFor('attr2') - self.failUnless(isinstance(a2_desc, Attribute)) + self.assertTrue(isinstance(a2_desc, Attribute)) self.assertEqual(a2_desc.__name__, 'attr2') self.assertEqual(a2_desc.__doc__, 'My attr2') m2_desc = IDerived.getDescriptionFor('method2') - self.failUnless(isinstance(m2_desc, Method)) + self.assertTrue(isinstance(m2_desc, Method)) self.assertEqual(m2_desc.__name__, 'method2') self.assertEqual(m2_desc.__doc__, 'My method2') @@ -1302,12 +1313,12 @@ "My method" a_desc = ISimple['attr'] - self.failUnless(isinstance(a_desc, Attribute)) + self.assertTrue(isinstance(a_desc, Attribute)) self.assertEqual(a_desc.__name__, 'attr') self.assertEqual(a_desc.__doc__, 'My attr') m_desc = ISimple['method'] - self.failUnless(isinstance(m_desc, Method)) + self.assertTrue(isinstance(m_desc, Method)) self.assertEqual(m_desc.__name__, 'method') self.assertEqual(m_desc.__doc__, 'My method') @@ -1333,22 +1344,22 @@ "My method2" a_desc = IDerived['attr'] - self.failUnless(isinstance(a_desc, Attribute)) + self.assertTrue(isinstance(a_desc, Attribute)) self.assertEqual(a_desc.__name__, 'attr') self.assertEqual(a_desc.__doc__, 'My attr') m_desc = IDerived['method'] - self.failUnless(isinstance(m_desc, Method)) + self.assertTrue(isinstance(m_desc, Method)) self.assertEqual(m_desc.__name__, 'method') self.assertEqual(m_desc.__doc__, 'My method, overridden') a2_desc = IDerived['attr2'] - self.failUnless(isinstance(a2_desc, Attribute)) + self.assertTrue(isinstance(a2_desc, Attribute)) self.assertEqual(a2_desc.__name__, 'attr2') self.assertEqual(a2_desc.__doc__, 'My attr2') m2_desc = IDerived['method2'] - self.failUnless(isinstance(m2_desc, Method)) + self.assertTrue(isinstance(m2_desc, Method)) self.assertEqual(m2_desc.__name__, 'method2') self.assertEqual(m2_desc.__doc__, 'My method2') @@ -1358,7 +1369,7 @@ class IEmpty(Interface): pass - self.failIf('nonesuch' in IEmpty) + self.assertFalse('nonesuch' in IEmpty) def test___contains__simple(self): from zope.interface import Attribute @@ -1371,8 +1382,8 @@ def method(): "My method" - self.failUnless('attr' in ISimple) - self.failUnless('method' in ISimple) + self.assertTrue('attr' in ISimple) + self.assertTrue('method' in ISimple) def test___contains__derived(self): from zope.interface import Attribute @@ -1394,10 +1405,10 @@ def method2(): "My method2" - self.failUnless('attr' in IDerived) - self.failUnless('method' in IDerived) - self.failUnless('attr2' in IDerived) - self.failUnless('method2' in IDerived) + self.assertTrue('attr' in IDerived) + self.assertTrue('method' in IDerived) + self.assertTrue('attr2' in IDerived) + self.assertTrue('method2' in IDerived) def test___iter__empty(self): from zope.interface import Interface @@ -1697,7 +1708,7 @@ pass self.assertEqual(ITagged.getTaggedValue('qux'), 'Spam') - self.failUnless('qux' in ITagged.getTaggedValueTags()) + self.assertTrue('qux' in ITagged.getTaggedValueTags()) def test_description_cache_management(self): # See https://bugs.launchpad.net/zope.interface/+bug/185974 @@ -1715,10 +1726,10 @@ class I3(I2): pass - self.failUnless(I3.get('a') is I1.get('a')) + self.assertTrue(I3.get('a') is I1.get('a')) I2.__bases__ = (Interface,) - self.failUnless(I3.get('a') is None) + self.assertTrue(I3.get('a') is None) def test___call___defers_to___conform___(self): from zope.interface import Interface @@ -1746,7 +1757,7 @@ pass c = C() - self.failUnless(I(c) is c) + self.assertTrue(I(c) is c) def test___call___miss_wo_alternate(self): from zope.interface import Interface @@ -1770,7 +1781,7 @@ pass c = C() - self.failUnless(I(c, self) is self) + self.assertTrue(I(c, self) is self) def test___call___w_adapter_hook(self): from zope.interface import Interface @@ -1794,7 +1805,7 @@ old_adapter_hooks = adapter_hooks[:] adapter_hooks[:] = [_miss, _hit] try: - self.failUnless(I(c) is self) + self.assertTrue(I(c) is self) finally: adapter_hooks[:] = old_adapter_hooks diff -Nru zope.interface-4.1.1/src/zope/interface/tests/test_interfaces.py zope.interface-4.1.2/src/zope/interface/tests/test_interfaces.py --- zope.interface-4.1.1/src/zope/interface/tests/test_interfaces.py 2013-01-07 22:36:49.000000000 +0000 +++ zope.interface-4.1.2/src/zope/interface/tests/test_interfaces.py 2014-12-28 00:32:07.000000000 +0000 @@ -1,16 +1,5 @@ import unittest -class _SilencePy3Deprecations(unittest.TestCase): - # silence deprecation warnings under py3 - - def failUnless(self, expr): - # St00pid speling. - return self.assertTrue(expr) - - def failIf(self, expr): - # St00pid speling. - return self.assertFalse(expr) - class _ConformsToIObjectEvent(object): @@ -43,7 +32,7 @@ verifyObject(IRegistrationEvent, self._makeOne()) -class ObjectEventTests(_SilencePy3Deprecations, _ConformsToIObjectEvent): +class ObjectEventTests(unittest.TestCase, _ConformsToIObjectEvent): def _getTargetClass(self): from zope.interface.interfaces import ObjectEvent @@ -52,10 +41,10 @@ def test_ctor(self): target = object() event = self._makeOne(target) - self.failUnless(event.object is target) + self.assertTrue(event.object is target) -class RegistrationEventTests(_SilencePy3Deprecations, +class RegistrationEventTests(unittest.TestCase, _ConformsToIRegistrationEvent): def _getTargetClass(self): @@ -70,7 +59,7 @@ ['RegistrationEvent event:', repr(target)]) -class RegisteredTests(_SilencePy3Deprecations, +class RegisteredTests(unittest.TestCase, _ConformsToIRegistrationEvent): def _getTargetClass(self): @@ -88,7 +77,7 @@ verifyObject(IRegistered, self._makeOne()) -class UnregisteredTests(_SilencePy3Deprecations, +class UnregisteredTests(unittest.TestCase, _ConformsToIRegistrationEvent): def _getTargetClass(self): diff -Nru zope.interface-4.1.1/src/zope/interface/tests/test_odd_declarations.py zope.interface-4.1.2/src/zope/interface/tests/test_odd_declarations.py --- zope.interface-4.1.1/src/zope/interface/tests/test_odd_declarations.py 2013-01-07 22:36:49.000000000 +0000 +++ zope.interface-4.1.2/src/zope/interface/tests/test_odd_declarations.py 2014-12-28 00:34:36.000000000 +0000 @@ -58,12 +58,6 @@ class Test(unittest.TestCase): - def failUnless(self, expr): # silence deprecation warnings under py3 - return self.assertTrue(expr) - - def failIf(self, expr): # silence deprecation warnings under py3 - return self.assertFalse(expr) - def test_ObjectSpecification(self): c = C() directlyProvides(c, I4) @@ -73,11 +67,11 @@ self.assertEqual([i.getName() for i in providedBy(c).flattened()], ['I4', 'I31', 'I3', 'I1', 'I2', 'Interface'] ) - self.failUnless(I1 in providedBy(c)) - self.failIf(I3 in providedBy(c)) - self.failUnless(providedBy(c).extends(I3)) - self.failUnless(providedBy(c).extends(I31)) - self.failIf(providedBy(c).extends(I5)) + self.assertTrue(I1 in providedBy(c)) + self.assertFalse(I3 in providedBy(c)) + self.assertTrue(providedBy(c).extends(I3)) + self.assertTrue(providedBy(c).extends(I31)) + self.assertFalse(providedBy(c).extends(I5)) class COnly(A, B): pass @@ -95,12 +89,12 @@ ['I4', 'I5', 'I31']) self.assertEqual([i.getName() for i in providedBy(c).flattened()], ['I4', 'I5', 'I31', 'I3', 'Interface']) - self.failIf(I1 in providedBy(c)) - self.failIf(I3 in providedBy(c)) - self.failUnless(providedBy(c).extends(I3)) - self.failIf(providedBy(c).extends(I1)) - self.failUnless(providedBy(c).extends(I31)) - self.failUnless(providedBy(c).extends(I5)) + self.assertFalse(I1 in providedBy(c)) + self.assertFalse(I3 in providedBy(c)) + self.assertTrue(providedBy(c).extends(I3)) + self.assertFalse(providedBy(c).extends(I1)) + self.assertTrue(providedBy(c).extends(I31)) + self.assertTrue(providedBy(c).extends(I5)) class COnly(A, B): __implemented__ = I31 class D(COnly): @@ -114,12 +108,12 @@ ['I4', 'I5', 'I31']) self.assertEqual([i.getName() for i in providedBy(c).flattened()], ['I4', 'I5', 'I31', 'I3', 'Interface']) - self.failIf(I1 in providedBy(c)) - self.failIf(I3 in providedBy(c)) - self.failUnless(providedBy(c).extends(I3)) - self.failIf(providedBy(c).extends(I1)) - self.failUnless(providedBy(c).extends(I31)) - self.failUnless(providedBy(c).extends(I5)) + self.assertFalse(I1 in providedBy(c)) + self.assertFalse(I3 in providedBy(c)) + self.assertTrue(providedBy(c).extends(I3)) + self.assertFalse(providedBy(c).extends(I1)) + self.assertTrue(providedBy(c).extends(I31)) + self.assertTrue(providedBy(c).extends(I5)) def test_classImplements(self): @@ -176,19 +170,19 @@ ob = C() directlyProvides(ob, I1, I2) - self.failUnless(I1 in providedBy(ob)) - self.failUnless(I2 in providedBy(ob)) - self.failUnless(IA1 in providedBy(ob)) - self.failUnless(IA2 in providedBy(ob)) - self.failUnless(IB in providedBy(ob)) - self.failUnless(IC in providedBy(ob)) + self.assertTrue(I1 in providedBy(ob)) + self.assertTrue(I2 in providedBy(ob)) + self.assertTrue(IA1 in providedBy(ob)) + self.assertTrue(IA2 in providedBy(ob)) + self.assertTrue(IB in providedBy(ob)) + self.assertTrue(IC in providedBy(ob)) directlyProvides(ob, directlyProvidedBy(ob)-I2) - self.failUnless(I1 in providedBy(ob)) - self.failIf(I2 in providedBy(ob)) - self.failIf(I2 in providedBy(ob)) + self.assertTrue(I1 in providedBy(ob)) + self.assertFalse(I2 in providedBy(ob)) + self.assertFalse(I2 in providedBy(ob)) directlyProvides(ob, directlyProvidedBy(ob), I2) - self.failUnless(I2 in providedBy(ob)) + self.assertTrue(I2 in providedBy(ob)) @_skip_under_py3k def test_directlyProvides_fails_for_odd_class(self): diff -Nru zope.interface-4.1.1/src/zope/interface/tests/test_registry.py zope.interface-4.1.2/src/zope/interface/tests/test_registry.py --- zope.interface-4.1.1/src/zope/interface/tests/test_registry.py 2014-03-18 19:52:43.000000000 +0000 +++ zope.interface-4.1.2/src/zope/interface/tests/test_registry.py 2014-12-28 00:33:47.000000000 +0000 @@ -14,18 +14,8 @@ """Component Registry Tests""" import unittest -class _SilencePy3Deprecations(unittest.TestCase): - # silence deprecation warnings under py3 - def failUnless(self, expr): - # St00pid speling. - return self.assertTrue(expr) - - def failIf(self, expr): - # St00pid speling. - return self.assertFalse(expr) - -class ComponentsTests(_SilencePy3Deprecations): +class ComponentsTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.registry import Components @@ -47,8 +37,8 @@ comp = self._makeOne('testing') self.assertEqual(comp.__name__, 'testing') self.assertEqual(comp.__bases__, ()) - self.failUnless(isinstance(comp.adapters, AdapterRegistry)) - self.failUnless(isinstance(comp.utilities, AdapterRegistry)) + self.assertTrue(isinstance(comp.adapters, AdapterRegistry)) + self.assertTrue(isinstance(comp.utilities, AdapterRegistry)) self.assertEqual(comp.adapters.__bases__, ()) self.assertEqual(comp.utilities.__bases__, ()) self.assertEqual(comp._utility_registrations, {}) @@ -124,7 +114,7 @@ _monkey, _events = self._wrapEvents() with _monkey: comp.registerUtility(_to_reg, ifoo, _name, _info) - self.failUnless(comp.utilities._adapters[0][ifoo][_name] is _to_reg) + self.assertTrue(comp.utilities._adapters[0][ifoo][_name] is _to_reg) self.assertEqual(comp._utility_registrations[ifoo, _name], (_to_reg, _info, None)) self.assertEqual(comp.utilities._subscribers[0][ifoo][''], (_to_reg,)) @@ -132,14 +122,14 @@ args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Registered)) - self.failUnless(isinstance(event.object, UtilityRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) - self.failUnless(event.object.name is _name) - self.failUnless(event.object.component is _to_reg) - self.failUnless(event.object.info is _info) - self.failUnless(event.object.factory is None) + self.assertTrue(isinstance(event, Registered)) + self.assertTrue(isinstance(event.object, UtilityRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) + self.assertTrue(event.object.name is _name) + self.assertTrue(event.object.component is _to_reg) + self.assertTrue(event.object.info is _info) + self.assertTrue(event.object.factory is None) def test_registerUtility_w_factory(self): from zope.interface.declarations import InterfaceClass @@ -162,14 +152,14 @@ args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Registered)) - self.failUnless(isinstance(event.object, UtilityRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) - self.failUnless(event.object.name is _name) - self.failUnless(event.object.component is _to_reg) - self.failUnless(event.object.info is _info) - self.failUnless(event.object.factory is _factory) + self.assertTrue(isinstance(event, Registered)) + self.assertTrue(isinstance(event.object, UtilityRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) + self.assertTrue(event.object.name is _name) + self.assertTrue(event.object.component is _to_reg) + self.assertTrue(event.object.info is _info) + self.assertTrue(event.object.factory is _factory) def test_registerUtility_no_provided_available(self): from zope.interface.declarations import InterfaceClass @@ -209,14 +199,14 @@ args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Registered)) - self.failUnless(isinstance(event.object, UtilityRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) - self.failUnless(event.object.name is _name) - self.failUnless(event.object.component is _to_reg) - self.failUnless(event.object.info is _info) - self.failUnless(event.object.factory is None) + self.assertTrue(isinstance(event, Registered)) + self.assertTrue(isinstance(event.object, UtilityRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) + self.assertTrue(event.object.name is _name) + self.assertTrue(event.object.component is _to_reg) + self.assertTrue(event.object.info is _info) + self.assertTrue(event.object.factory is None) def test_registerUtility_duplicates_existing_reg(self): from zope.interface.declarations import InterfaceClass @@ -234,6 +224,51 @@ comp.registerUtility(_to_reg, ifoo, _name, _info) self.assertEqual(len(_events), 0) + def test_registerUtility_w_different_info(self): + from zope.interface.declarations import InterfaceClass + from zope.interface._compat import _u + class IFoo(InterfaceClass): + pass + ifoo = IFoo('IFoo') + _info1 = _u('info1') + _info2 = _u('info2') + _name = _u('name') + _to_reg = object() + comp = self._makeOne() + comp.registerUtility(_to_reg, ifoo, _name, _info1) + _monkey, _events = self._wrapEvents() + with _monkey: + comp.registerUtility(_to_reg, ifoo, _name, _info2) + self.assertEqual(len(_events), 2) # unreg, reg + self.assertEqual(comp._utility_registrations[(ifoo, _name)], + (_to_reg, _info2, None)) # replaced + self.assertEqual(comp.utilities._subscribers[0][ifoo][_u('')], + (_to_reg,)) + + def test_registerUtility_w_different_names_same_component(self): + from zope.interface.declarations import InterfaceClass + from zope.interface._compat import _u + class IFoo(InterfaceClass): + pass + ifoo = IFoo('IFoo') + _info = _u('info') + _name1 = _u('name1') + _name2 = _u('name2') + _other_reg = object() + _to_reg = object() + comp = self._makeOne() + comp.registerUtility(_other_reg, ifoo, _name1, _info) + _monkey, _events = self._wrapEvents() + with _monkey: + comp.registerUtility(_to_reg, ifoo, _name2, _info) + self.assertEqual(len(_events), 1) # reg + self.assertEqual(comp._utility_registrations[(ifoo, _name1)], + (_other_reg, _info, None)) + self.assertEqual(comp._utility_registrations[(ifoo, _name2)], + (_to_reg, _info, None)) + self.assertEqual(comp.utilities._subscribers[0][ifoo][_u('')], + (_other_reg, _to_reg,)) + def test_registerUtility_replaces_existing_reg(self): from zope.interface.declarations import InterfaceClass from zope.interface.interfaces import Unregistered @@ -255,25 +290,25 @@ args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Unregistered)) - self.failUnless(isinstance(event.object, UtilityRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) - self.failUnless(event.object.name is _name) - self.failUnless(event.object.component is _before) - self.failUnless(event.object.info is _info) - self.failUnless(event.object.factory is None) + self.assertTrue(isinstance(event, Unregistered)) + self.assertTrue(isinstance(event.object, UtilityRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) + self.assertTrue(event.object.name is _name) + self.assertTrue(event.object.component is _before) + self.assertTrue(event.object.info is _info) + self.assertTrue(event.object.factory is None) args, kw = _events[1] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Registered)) - self.failUnless(isinstance(event.object, UtilityRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) - self.failUnless(event.object.name is _name) - self.failUnless(event.object.component is _after) - self.failUnless(event.object.info is _info) - self.failUnless(event.object.factory is None) + self.assertTrue(isinstance(event, Registered)) + self.assertTrue(isinstance(event.object, UtilityRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) + self.assertTrue(event.object.name is _name) + self.assertTrue(event.object.component is _after) + self.assertTrue(event.object.info is _info) + self.assertTrue(event.object.factory is None) def test_registerUtility_w_existing_subscr(self): from zope.interface.declarations import InterfaceClass @@ -332,8 +367,8 @@ _monkey, _events = self._wrapEvents() with _monkey: unreg = comp.unregisterUtility(_to_reg, ifoo, _name) - self.failIf(unreg) - self.failIf(_events) + self.assertFalse(unreg) + self.assertFalse(_events) def test_unregisterUtility_w_component(self): from zope.interface.declarations import InterfaceClass @@ -350,21 +385,21 @@ _monkey, _events = self._wrapEvents() with _monkey: unreg = comp.unregisterUtility(_to_reg, ifoo, _name) - self.failUnless(unreg) - self.failIf(comp.utilities._adapters) # all erased - self.failIf((ifoo, _name) in comp._utility_registrations) - self.failIf(comp.utilities._subscribers) + self.assertTrue(unreg) + self.assertFalse(comp.utilities._adapters) # all erased + self.assertFalse((ifoo, _name) in comp._utility_registrations) + self.assertFalse(comp.utilities._subscribers) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Unregistered)) - self.failUnless(isinstance(event.object, UtilityRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) - self.failUnless(event.object.name is _name) - self.failUnless(event.object.component is _to_reg) - self.failUnless(event.object.factory is None) + self.assertTrue(isinstance(event, Unregistered)) + self.assertTrue(isinstance(event.object, UtilityRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) + self.assertTrue(event.object.name is _name) + self.assertTrue(event.object.component is _to_reg) + self.assertTrue(event.object.factory is None) def test_unregisterUtility_w_factory(self): from zope.interface.declarations import InterfaceClass @@ -384,18 +419,18 @@ _monkey, _events = self._wrapEvents() with _monkey: unreg = comp.unregisterUtility(None, ifoo, _name, factory=_factory) - self.failUnless(unreg) + self.assertTrue(unreg) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Unregistered)) - self.failUnless(isinstance(event.object, UtilityRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) - self.failUnless(event.object.name is _name) - self.failUnless(event.object.component is _to_reg) - self.failUnless(event.object.factory is _factory) + self.assertTrue(isinstance(event, Unregistered)) + self.assertTrue(isinstance(event.object, UtilityRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) + self.assertTrue(event.object.name is _name) + self.assertTrue(event.object.component is _to_reg) + self.assertTrue(event.object.factory is _factory) def test_unregisterUtility_wo_explicit_provided(self): from zope.interface.declarations import directlyProvides @@ -417,19 +452,19 @@ _monkey, _events = self._wrapEvents() with _monkey: unreg = comp.unregisterUtility(_to_reg, None, _name) - self.failUnless(unreg) + self.assertTrue(unreg) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Unregistered)) - self.failUnless(isinstance(event.object, UtilityRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) - self.failUnless(event.object.name is _name) - self.failUnless(event.object.component is _to_reg) - self.failUnless(event.object.info is _info) - self.failUnless(event.object.factory is None) + self.assertTrue(isinstance(event, Unregistered)) + self.assertTrue(isinstance(event.object, UtilityRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) + self.assertTrue(event.object.name is _name) + self.assertTrue(event.object.component is _to_reg) + self.assertTrue(event.object.info is _info) + self.assertTrue(event.object.factory is None) def test_unregisterUtility_wo_component_or_factory(self): from zope.interface.declarations import directlyProvides @@ -452,19 +487,19 @@ with _monkey: # Just pass the interface / name unreg = comp.unregisterUtility(provided=ifoo, name=_name) - self.failUnless(unreg) + self.assertTrue(unreg) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Unregistered)) - self.failUnless(isinstance(event.object, UtilityRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) - self.failUnless(event.object.name is _name) - self.failUnless(event.object.component is _to_reg) - self.failUnless(event.object.info is _info) - self.failUnless(event.object.factory is None) + self.assertTrue(isinstance(event, Unregistered)) + self.assertTrue(isinstance(event.object, UtilityRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) + self.assertTrue(event.object.name is _name) + self.assertTrue(event.object.component is _to_reg) + self.assertTrue(event.object.info is _info) + self.assertTrue(event.object.factory is None) def test_unregisterUtility_w_existing_subscr(self): from zope.interface.declarations import InterfaceClass @@ -484,6 +519,26 @@ comp.unregisterUtility(_to_reg, ifoo, _name2) self.assertEqual(comp.utilities._subscribers[0][ifoo][''], (_to_reg,)) + def test_unregisterUtility_w_existing_subscr_other_component(self): + from zope.interface.declarations import InterfaceClass + from zope.interface._compat import _u + class IFoo(InterfaceClass): + pass + ifoo = IFoo('IFoo') + _info = _u('info') + _name1 = _u('name1') + _name2 = _u('name2') + _other_reg = object() + _to_reg = object() + comp = self._makeOne() + comp.registerUtility(_other_reg, ifoo, _name1, _info) + comp.registerUtility(_to_reg, ifoo, _name2, _info) + _monkey, _events = self._wrapEvents() + with _monkey: + comp.unregisterUtility(_to_reg, ifoo, _name2) + self.assertEqual(comp.utilities._subscribers[0][ifoo][''], + (_other_reg,)) + def test_registeredUtilities_empty(self): comp = self._makeOne() self.assertEqual(list(comp.registeredUtilities()), []) @@ -504,20 +559,20 @@ comp.registerUtility(_to_reg, ifoo, _name2, _info) reg = sorted(comp.registeredUtilities(), key=lambda r: r.name) self.assertEqual(len(reg), 2) - self.failUnless(isinstance(reg[0], UtilityRegistration)) - self.failUnless(reg[0].registry is comp) - self.failUnless(reg[0].provided is ifoo) - self.failUnless(reg[0].name is _name1) - self.failUnless(reg[0].component is _to_reg) - self.failUnless(reg[0].info is _info) - self.failUnless(reg[0].factory is None) - self.failUnless(isinstance(reg[1], UtilityRegistration)) - self.failUnless(reg[1].registry is comp) - self.failUnless(reg[1].provided is ifoo) - self.failUnless(reg[1].name is _name2) - self.failUnless(reg[1].component is _to_reg) - self.failUnless(reg[1].info is _info) - self.failUnless(reg[1].factory is None) + self.assertTrue(isinstance(reg[0], UtilityRegistration)) + self.assertTrue(reg[0].registry is comp) + self.assertTrue(reg[0].provided is ifoo) + self.assertTrue(reg[0].name is _name1) + self.assertTrue(reg[0].component is _to_reg) + self.assertTrue(reg[0].info is _info) + self.assertTrue(reg[0].factory is None) + self.assertTrue(isinstance(reg[1], UtilityRegistration)) + self.assertTrue(reg[1].registry is comp) + self.assertTrue(reg[1].provided is ifoo) + self.assertTrue(reg[1].name is _name2) + self.assertTrue(reg[1].component is _to_reg) + self.assertTrue(reg[1].info is _info) + self.assertTrue(reg[1].factory is None) def test_queryUtility_miss_no_default(self): from zope.interface.declarations import InterfaceClass @@ -525,7 +580,7 @@ pass ifoo = IFoo('IFoo') comp = self._makeOne() - self.failUnless(comp.queryUtility(ifoo) is None) + self.assertTrue(comp.queryUtility(ifoo) is None) def test_queryUtility_miss_w_default(self): from zope.interface.declarations import InterfaceClass @@ -534,7 +589,7 @@ ifoo = IFoo('IFoo') comp = self._makeOne() _default = object() - self.failUnless(comp.queryUtility(ifoo, default=_default) is _default) + self.assertTrue(comp.queryUtility(ifoo, default=_default) is _default) def test_queryUtility_hit(self): from zope.interface.declarations import InterfaceClass @@ -544,7 +599,7 @@ _to_reg = object() comp = self._makeOne() comp.registerUtility(_to_reg, ifoo) - self.failUnless(comp.queryUtility(ifoo) is _to_reg) + self.assertTrue(comp.queryUtility(ifoo) is _to_reg) def test_getUtility_miss(self): from zope.interface.declarations import InterfaceClass @@ -563,7 +618,7 @@ _to_reg = object() comp = self._makeOne() comp.registerUtility(_to_reg, ifoo) - self.failUnless(comp.getUtility(ifoo) is _to_reg) + self.assertTrue(comp.getUtility(ifoo) is _to_reg) def test_getUtilitiesFor_miss(self): from zope.interface.declarations import InterfaceClass @@ -650,7 +705,7 @@ _monkey, _events = self._wrapEvents() with _monkey: comp.registerAdapter(_factory, (ibar,), ifoo, _name, _info) - self.failUnless(comp.adapters._adapters[1][ibar][ifoo][_name] + self.assertTrue(comp.adapters._adapters[1][ibar][ifoo][_name] is _factory) self.assertEqual(comp._adapter_registrations[(ibar,), ifoo, _name], (_factory, _info)) @@ -658,14 +713,14 @@ args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Registered)) - self.failUnless(isinstance(event.object, AdapterRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) + self.assertTrue(isinstance(event, Registered)) + self.assertTrue(isinstance(event.object, AdapterRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) self.assertEqual(event.object.required, (ibar,)) - self.failUnless(event.object.name is _name) - self.failUnless(event.object.info is _info) - self.failUnless(event.object.factory is _factory) + self.assertTrue(event.object.name is _name) + self.assertTrue(event.object.info is _info) + self.assertTrue(event.object.factory is _factory) def test_registerAdapter_no_provided_available(self): from zope.interface.declarations import InterfaceClass @@ -705,7 +760,7 @@ _monkey, _events = self._wrapEvents() with _monkey: comp.registerAdapter(_Factory, (ibar,), name=_name, info=_info) - self.failUnless(comp.adapters._adapters[1][ibar][ifoo][_name] + self.assertTrue(comp.adapters._adapters[1][ibar][ifoo][_name] is _Factory) self.assertEqual(comp._adapter_registrations[(ibar,), ifoo, _name], (_Factory, _info)) @@ -713,14 +768,14 @@ args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Registered)) - self.failUnless(isinstance(event.object, AdapterRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) + self.assertTrue(isinstance(event, Registered)) + self.assertTrue(isinstance(event.object, AdapterRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) self.assertEqual(event.object.required, (ibar,)) - self.failUnless(event.object.name is _name) - self.failUnless(event.object.info is _info) - self.failUnless(event.object.factory is _Factory) + self.assertTrue(event.object.name is _name) + self.assertTrue(event.object.info is _info) + self.assertTrue(event.object.factory is _Factory) def test_registerAdapter_no_required_available(self): from zope.interface.declarations import InterfaceClass @@ -773,7 +828,7 @@ with _monkey: comp.registerAdapter(_Factory, [None], provided=ifoo, name=_name, info=_info) - self.failUnless(comp.adapters._adapters[1][Interface][ifoo][_name] + self.assertTrue(comp.adapters._adapters[1][Interface][ifoo][_name] is _Factory) self.assertEqual(comp._adapter_registrations[(Interface,), ifoo, _name], (_Factory, _info)) @@ -781,14 +836,14 @@ args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Registered)) - self.failUnless(isinstance(event.object, AdapterRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) + self.assertTrue(isinstance(event, Registered)) + self.assertTrue(isinstance(event.object, AdapterRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) self.assertEqual(event.object.required, (Interface,)) - self.failUnless(event.object.name is _name) - self.failUnless(event.object.info is _info) - self.failUnless(event.object.factory is _Factory) + self.assertTrue(event.object.name is _name) + self.assertTrue(event.object.info is _info) + self.assertTrue(event.object.factory is _Factory) def test_registerAdapter_w_required_containing_class(self): from zope.interface.declarations import InterfaceClass @@ -815,7 +870,7 @@ with _monkey: comp.registerAdapter(_Factory, [_Context], provided=ifoo, name=_name, info=_info) - self.failUnless(comp.adapters._adapters[1][_ctx_impl][ifoo][_name] + self.assertTrue(comp.adapters._adapters[1][_ctx_impl][ifoo][_name] is _Factory) self.assertEqual(comp._adapter_registrations[(_ctx_impl,), ifoo, _name], (_Factory, _info)) @@ -823,14 +878,14 @@ args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Registered)) - self.failUnless(isinstance(event.object, AdapterRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) + self.assertTrue(isinstance(event, Registered)) + self.assertTrue(isinstance(event.object, AdapterRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) self.assertEqual(event.object.required, (_ctx_impl,)) - self.failUnless(event.object.name is _name) - self.failUnless(event.object.info is _info) - self.failUnless(event.object.factory is _Factory) + self.assertTrue(event.object.name is _name) + self.assertTrue(event.object.info is _info) + self.assertTrue(event.object.factory is _Factory) def test_registerAdapter_w_required_containing_junk(self): from zope.interface.declarations import InterfaceClass @@ -868,7 +923,7 @@ with _monkey: comp.registerAdapter(_Factory, provided=ifoo, name=_name, info=_info) - self.failUnless(comp.adapters._adapters[1][ibar][ifoo][_name] + self.assertTrue(comp.adapters._adapters[1][ibar][ifoo][_name] is _Factory) self.assertEqual(comp._adapter_registrations[(ibar,), ifoo, _name], (_Factory, _info)) @@ -876,14 +931,14 @@ args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Registered)) - self.failUnless(isinstance(event.object, AdapterRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) + self.assertTrue(isinstance(event, Registered)) + self.assertTrue(isinstance(event.object, AdapterRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) self.assertEqual(event.object.required, (ibar,)) - self.failUnless(event.object.name is _name) - self.failUnless(event.object.info is _info) - self.failUnless(event.object.factory is _Factory) + self.assertTrue(event.object.name is _name) + self.assertTrue(event.object.info is _info) + self.assertTrue(event.object.factory is _Factory) def test_registerAdapter_wo_event(self): from zope.interface.declarations import InterfaceClass @@ -931,7 +986,7 @@ _monkey, _events = self._wrapEvents() with _monkey: unreg = comp.unregisterAdapter(_Factory, (ibar,), ifoo) - self.failIf(unreg) + self.assertFalse(unreg) def test_unregisterAdapter_hit_w_explicit_provided_and_required(self): from zope.interface.declarations import InterfaceClass @@ -949,21 +1004,21 @@ _monkey, _events = self._wrapEvents() with _monkey: unreg = comp.unregisterAdapter(_Factory, (ibar,), ifoo) - self.failUnless(unreg) - self.failIf(comp.adapters._adapters) - self.failIf(comp._adapter_registrations) + self.assertTrue(unreg) + self.assertFalse(comp.adapters._adapters) + self.assertFalse(comp._adapter_registrations) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Unregistered)) - self.failUnless(isinstance(event.object, AdapterRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) + self.assertTrue(isinstance(event, Unregistered)) + self.assertTrue(isinstance(event.object, AdapterRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, '') self.assertEqual(event.object.info, '') - self.failUnless(event.object.factory is _Factory) + self.assertTrue(event.object.factory is _Factory) def test_unregisterAdapter_wo_explicit_provided(self): from zope.interface.declarations import InterfaceClass @@ -983,19 +1038,19 @@ _monkey, _events = self._wrapEvents() with _monkey: unreg = comp.unregisterAdapter(_Factory, (ibar,)) - self.failUnless(unreg) + self.assertTrue(unreg) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Unregistered)) - self.failUnless(isinstance(event.object, AdapterRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) + self.assertTrue(isinstance(event, Unregistered)) + self.assertTrue(isinstance(event.object, AdapterRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, '') self.assertEqual(event.object.info, '') - self.failUnless(event.object.factory is _Factory) + self.assertTrue(event.object.factory is _Factory) def test_unregisterAdapter_wo_explicit_required(self): from zope.interface.declarations import InterfaceClass @@ -1014,19 +1069,19 @@ _monkey, _events = self._wrapEvents() with _monkey: unreg = comp.unregisterAdapter(_Factory, provided=ifoo) - self.failUnless(unreg) + self.assertTrue(unreg) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Unregistered)) - self.failUnless(isinstance(event.object, AdapterRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) + self.assertTrue(isinstance(event, Unregistered)) + self.assertTrue(isinstance(event.object, AdapterRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, '') self.assertEqual(event.object.info, '') - self.failUnless(event.object.factory is _Factory) + self.assertTrue(event.object.factory is _Factory) def test_registeredAdapters_empty(self): comp = self._makeOne() @@ -1051,20 +1106,20 @@ comp.registerAdapter(_Factory, (ibar,), ifoo, _name2, _info) reg = sorted(comp.registeredAdapters(), key=lambda r: r.name) self.assertEqual(len(reg), 2) - self.failUnless(isinstance(reg[0], AdapterRegistration)) - self.failUnless(reg[0].registry is comp) - self.failUnless(reg[0].provided is ifoo) + self.assertTrue(isinstance(reg[0], AdapterRegistration)) + self.assertTrue(reg[0].registry is comp) + self.assertTrue(reg[0].provided is ifoo) self.assertEqual(reg[0].required, (ibar,)) - self.failUnless(reg[0].name is _name1) - self.failUnless(reg[0].info is _info) - self.failUnless(reg[0].factory is _Factory) - self.failUnless(isinstance(reg[1], AdapterRegistration)) - self.failUnless(reg[1].registry is comp) - self.failUnless(reg[1].provided is ifoo) + self.assertTrue(reg[0].name is _name1) + self.assertTrue(reg[0].info is _info) + self.assertTrue(reg[0].factory is _Factory) + self.assertTrue(isinstance(reg[1], AdapterRegistration)) + self.assertTrue(reg[1].registry is comp) + self.assertTrue(reg[1].provided is ifoo) self.assertEqual(reg[1].required, (ibar,)) - self.failUnless(reg[1].name is _name2) - self.failUnless(reg[1].info is _info) - self.failUnless(reg[1].factory is _Factory) + self.assertTrue(reg[1].name is _name2) + self.assertTrue(reg[1].info is _info) + self.assertTrue(reg[1].factory is _Factory) def test_queryAdapter_miss_no_default(self): from zope.interface.declarations import InterfaceClass @@ -1073,7 +1128,7 @@ ifoo = IFoo('IFoo') comp = self._makeOne() _context = object() - self.failUnless(comp.queryAdapter(_context, ifoo) is None) + self.assertTrue(comp.queryAdapter(_context, ifoo) is None) def test_queryAdapter_miss_w_default(self): from zope.interface.declarations import InterfaceClass @@ -1083,7 +1138,7 @@ comp = self._makeOne() _context = object() _default = object() - self.failUnless( + self.assertTrue( comp.queryAdapter(_context, ifoo, default=_default) is _default) def test_queryAdapter_hit(self): @@ -1103,8 +1158,8 @@ comp = self._makeOne() comp.registerAdapter(_Factory, (ibar,), ifoo) adapter = comp.queryAdapter(_context, ifoo) - self.failUnless(isinstance(adapter, _Factory)) - self.failUnless(adapter.context is _context) + self.assertTrue(isinstance(adapter, _Factory)) + self.assertTrue(adapter.context is _context) def test_getAdapter_miss(self): from zope.interface.declarations import InterfaceClass @@ -1139,8 +1194,8 @@ comp = self._makeOne() comp.registerAdapter(_Factory, (ibar,), ifoo) adapter = comp.getAdapter(_context, ifoo) - self.failUnless(isinstance(adapter, _Factory)) - self.failUnless(adapter.context is _context) + self.assertTrue(isinstance(adapter, _Factory)) + self.assertTrue(adapter.context is _context) def test_queryMultiAdapter_miss(self): from zope.interface.declarations import InterfaceClass @@ -1180,7 +1235,7 @@ _context2 = _Context2() _default = object() comp = self._makeOne() - self.failUnless( + self.assertTrue( comp.queryMultiAdapter((_context1, _context2), ifoo, default=_default) is _default) @@ -1206,7 +1261,7 @@ comp = self._makeOne() comp.registerAdapter(_Factory, (ibar, ibaz), ifoo) adapter = comp.queryMultiAdapter((_context1, _context2), ifoo) - self.failUnless(isinstance(adapter, _Factory)) + self.assertTrue(isinstance(adapter, _Factory)) self.assertEqual(adapter.context, (_context1, _context2)) def test_getMultiAdapter_miss(self): @@ -1252,7 +1307,7 @@ comp = self._makeOne() comp.registerAdapter(_Factory, (ibar, ibaz), ifoo) adapter = comp.getMultiAdapter((_context1, _context2), ifoo) - self.failUnless(isinstance(adapter, _Factory)) + self.assertTrue(isinstance(adapter, _Factory)) self.assertEqual(adapter.context, (_context1, _context2)) def test_getAdapters_empty(self): @@ -1275,6 +1330,32 @@ self.assertEqual( list(comp.getAdapters((_context1, _context2), ifoo)), []) + def test_getAdapters_factory_returns_None(self): + from zope.interface.declarations import InterfaceClass + from zope.interface.declarations import implementer + class IFoo(InterfaceClass): + pass + ifoo = IFoo('IFoo') + ibar = IFoo('IBar') + ibaz = IFoo('IBaz') + @implementer(ibar) + class _Context1(object): + pass + @implementer(ibaz) + class _Context2(object): + pass + _context1 = _Context1() + _context2 = _Context2() + comp = self._makeOne() + _called_with = [] + def _side_effect_only(context1, context2): + _called_with.append((context1, context2)) + return None + comp.registerAdapter(_side_effect_only, (ibar, ibaz), ifoo) + self.assertEqual( + list(comp.getAdapters((_context1, _context2), ifoo)), []) + self.assertEqual(_called_with, [(_context1, _context2)]) + def test_getAdapters_non_empty(self): from zope.interface.declarations import InterfaceClass from zope.interface.declarations import implementer @@ -1306,9 +1387,9 @@ found = sorted(comp.getAdapters((_context1, _context2), ifoo)) self.assertEqual(len(found), 2) self.assertEqual(found[0][0], _name1) - self.failUnless(isinstance(found[0][1], _Factory1)) + self.assertTrue(isinstance(found[0][1], _Factory1)) self.assertEqual(found[1][0], _name2) - self.failUnless(isinstance(found[1][1], _Factory2)) + self.assertTrue(isinstance(found[1][1], _Factory2)) def test_registerSubscriptionAdapter_w_nonblank_name(self): from zope.interface.declarations import InterfaceClass @@ -1347,21 +1428,21 @@ info=_info) reg = comp.adapters._subscribers[1][ibar][ifoo][_blank] self.assertEqual(len(reg), 1) - self.failUnless(reg[0] is _factory) + self.assertTrue(reg[0] is _factory) self.assertEqual(comp._subscription_registrations, [((ibar,), ifoo, _blank, _factory, _info)]) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Registered)) - self.failUnless(isinstance(event.object, SubscriptionRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) + self.assertTrue(isinstance(event, Registered)) + self.assertTrue(isinstance(event.object, SubscriptionRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, _blank) - self.failUnless(event.object.info is _info) - self.failUnless(event.object.factory is _factory) + self.assertTrue(event.object.info is _info) + self.assertTrue(event.object.factory is _factory) def test_registerSubscriptionAdapter_wo_explicit_provided(self): from zope.interface.declarations import InterfaceClass @@ -1386,21 +1467,21 @@ comp.registerSubscriptionAdapter(_Factory, (ibar,), info=_info) reg = comp.adapters._subscribers[1][ibar][ifoo][_blank] self.assertEqual(len(reg), 1) - self.failUnless(reg[0] is _Factory) + self.assertTrue(reg[0] is _Factory) self.assertEqual(comp._subscription_registrations, [((ibar,), ifoo, _blank, _Factory, _info)]) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Registered)) - self.failUnless(isinstance(event.object, SubscriptionRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) + self.assertTrue(isinstance(event, Registered)) + self.assertTrue(isinstance(event.object, SubscriptionRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, _blank) - self.failUnless(event.object.info is _info) - self.failUnless(event.object.factory is _Factory) + self.assertTrue(event.object.info is _info) + self.assertTrue(event.object.factory is _Factory) def test_registerSubscriptionAdapter_wo_explicit_required(self): from zope.interface.declarations import InterfaceClass @@ -1424,21 +1505,21 @@ _Factory, provided=ifoo, info=_info) reg = comp.adapters._subscribers[1][ibar][ifoo][_blank] self.assertEqual(len(reg), 1) - self.failUnless(reg[0] is _Factory) + self.assertTrue(reg[0] is _Factory) self.assertEqual(comp._subscription_registrations, [((ibar,), ifoo, _blank, _Factory, _info)]) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Registered)) - self.failUnless(isinstance(event.object, SubscriptionRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) + self.assertTrue(isinstance(event, Registered)) + self.assertTrue(isinstance(event.object, SubscriptionRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, _blank) - self.failUnless(event.object.info is _info) - self.failUnless(event.object.factory is _Factory) + self.assertTrue(event.object.info is _info) + self.assertTrue(event.object.factory is _Factory) def test_registerSubscriptionAdapter_wo_event(self): from zope.interface.declarations import InterfaceClass @@ -1481,20 +1562,20 @@ comp.registerSubscriptionAdapter(_Factory, (ibar,), ifoo, info=_info) reg = list(comp.registeredSubscriptionAdapters()) self.assertEqual(len(reg), 2) - self.failUnless(isinstance(reg[0], SubscriptionRegistration)) - self.failUnless(reg[0].registry is comp) - self.failUnless(reg[0].provided is ifoo) + self.assertTrue(isinstance(reg[0], SubscriptionRegistration)) + self.assertTrue(reg[0].registry is comp) + self.assertTrue(reg[0].provided is ifoo) self.assertEqual(reg[0].required, (ibar,)) self.assertEqual(reg[0].name, _blank) - self.failUnless(reg[0].info is _info) - self.failUnless(reg[0].factory is _Factory) - self.failUnless(isinstance(reg[1], SubscriptionRegistration)) - self.failUnless(reg[1].registry is comp) - self.failUnless(reg[1].provided is ifoo) + self.assertTrue(reg[0].info is _info) + self.assertTrue(reg[0].factory is _Factory) + self.assertTrue(isinstance(reg[1], SubscriptionRegistration)) + self.assertTrue(reg[1].registry is comp) + self.assertTrue(reg[1].provided is ifoo) self.assertEqual(reg[1].required, (ibar,)) self.assertEqual(reg[1].name, _blank) - self.failUnless(reg[1].info is _info) - self.failUnless(reg[1].factory is _Factory) + self.assertTrue(reg[1].info is _info) + self.assertTrue(reg[1].factory is _Factory) def test_unregisterSubscriptionAdapter_w_nonblank_name(self): from zope.interface.declarations import InterfaceClass @@ -1535,8 +1616,8 @@ _monkey, _events = self._wrapEvents() with _monkey: unreg = comp.unregisterSubscriptionAdapter(_Factory, (ibar,), ifoo) - self.failIf(unreg) - self.failIf(_events) + self.assertFalse(unreg) + self.assertFalse(_events) def test_unregisterSubscriptionAdapter_hit_wo_factory(self): from zope.interface.declarations import InterfaceClass @@ -1554,21 +1635,21 @@ _monkey, _events = self._wrapEvents() with _monkey: unreg = comp.unregisterSubscriptionAdapter(None, (ibar,), ifoo) - self.failUnless(unreg) - self.failIf(comp.adapters._subscribers) - self.failIf(comp._subscription_registrations) + self.assertTrue(unreg) + self.assertFalse(comp.adapters._subscribers) + self.assertFalse(comp._subscription_registrations) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Unregistered)) - self.failUnless(isinstance(event.object, SubscriptionRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) + self.assertTrue(isinstance(event, Unregistered)) + self.assertTrue(isinstance(event.object, SubscriptionRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, '') self.assertEqual(event.object.info, '') - self.failUnless(event.object.factory is None) + self.assertTrue(event.object.factory is None) def test_unregisterSubscriptionAdapter_hit_w_factory(self): from zope.interface.declarations import InterfaceClass @@ -1586,21 +1667,21 @@ _monkey, _events = self._wrapEvents() with _monkey: unreg = comp.unregisterSubscriptionAdapter(_Factory, (ibar,), ifoo) - self.failUnless(unreg) - self.failIf(comp.adapters._subscribers) - self.failIf(comp._subscription_registrations) + self.assertTrue(unreg) + self.assertFalse(comp.adapters._subscribers) + self.assertFalse(comp._subscription_registrations) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Unregistered)) - self.failUnless(isinstance(event.object, SubscriptionRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) + self.assertTrue(isinstance(event, Unregistered)) + self.assertTrue(isinstance(event.object, SubscriptionRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, '') self.assertEqual(event.object.info, '') - self.failUnless(event.object.factory is _Factory) + self.assertTrue(event.object.factory is _Factory) def test_unregisterSubscriptionAdapter_wo_explicit_provided(self): from zope.interface.declarations import InterfaceClass @@ -1620,19 +1701,19 @@ _monkey, _events = self._wrapEvents() with _monkey: unreg = comp.unregisterSubscriptionAdapter(_Factory, (ibar,)) - self.failUnless(unreg) + self.assertTrue(unreg) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Unregistered)) - self.failUnless(isinstance(event.object, SubscriptionRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) + self.assertTrue(isinstance(event, Unregistered)) + self.assertTrue(isinstance(event.object, SubscriptionRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, '') self.assertEqual(event.object.info, '') - self.failUnless(event.object.factory is _Factory) + self.assertTrue(event.object.factory is _Factory) def test_unregisterSubscriptionAdapter_wo_explicit_required(self): from zope.interface.declarations import InterfaceClass @@ -1651,19 +1732,19 @@ _monkey, _events = self._wrapEvents() with _monkey: unreg = comp.unregisterSubscriptionAdapter(_Factory, provided=ifoo) - self.failUnless(unreg) + self.assertTrue(unreg) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Unregistered)) - self.failUnless(isinstance(event.object, SubscriptionRegistration)) - self.failUnless(event.object.registry is comp) - self.failUnless(event.object.provided is ifoo) + self.assertTrue(isinstance(event, Unregistered)) + self.assertTrue(isinstance(event.object, SubscriptionRegistration)) + self.assertTrue(event.object.registry is comp) + self.assertTrue(event.object.provided is ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, '') self.assertEqual(event.object.info, '') - self.failUnless(event.object.factory is _Factory) + self.assertTrue(event.object.factory is _Factory) def test_subscribers_empty(self): from zope.interface.declarations import InterfaceClass @@ -1704,8 +1785,8 @@ return x.__class__.__name__ subscribers = sorted(subscribers, key=_klassname) self.assertEqual(len(subscribers), 2) - self.failUnless(isinstance(subscribers[0], _Derived)) - self.failUnless(isinstance(subscribers[1], _Factory)) + self.assertTrue(isinstance(subscribers[0], _Derived)) + self.assertTrue(isinstance(subscribers[1], _Factory)) def test_registerHandler_w_nonblank_name(self): from zope.interface.declarations import InterfaceClass @@ -1739,25 +1820,23 @@ comp.registerHandler(_factory, (ifoo,), info=_info) reg = comp.adapters._subscribers[1][ifoo][None][_blank] self.assertEqual(len(reg), 1) - self.failUnless(reg[0] is _factory) + self.assertTrue(reg[0] is _factory) self.assertEqual(comp._handler_registrations, [((ifoo,), _blank, _factory, _info)]) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Registered)) - self.failUnless(isinstance(event.object, HandlerRegistration)) - self.failUnless(event.object.registry is comp) + self.assertTrue(isinstance(event, Registered)) + self.assertTrue(isinstance(event.object, HandlerRegistration)) + self.assertTrue(event.object.registry is comp) self.assertEqual(event.object.required, (ifoo,)) self.assertEqual(event.object.name, _blank) - self.failUnless(event.object.info is _info) - self.failUnless(event.object.factory is _factory) + self.assertTrue(event.object.info is _info) + self.assertTrue(event.object.factory is _factory) - def test_registerHandler_wo_explicit_required(self): + def test_registerHandler_wo_explicit_required_no_event(self): from zope.interface.declarations import InterfaceClass - from zope.interface.interfaces import Registered - from zope.interface.registry import HandlerRegistration from zope.interface._compat import _u class IFoo(InterfaceClass): pass @@ -1771,30 +1850,20 @@ comp = self._makeOne() _monkey, _events = self._wrapEvents() with _monkey: - comp.registerHandler(_Factory, info=_info) + comp.registerHandler(_Factory, info=_info, event=False) reg = comp.adapters._subscribers[1][ifoo][None][_blank] self.assertEqual(len(reg), 1) - self.failUnless(reg[0] is _Factory) + self.assertTrue(reg[0] is _Factory) self.assertEqual(comp._handler_registrations, [((ifoo,), _blank, _Factory, _info)]) - self.assertEqual(len(_events), 1) - args, kw = _events[0] - event, = args - self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Registered)) - self.failUnless(isinstance(event.object, HandlerRegistration)) - self.failUnless(event.object.registry is comp) - self.assertEqual(event.object.required, (ifoo,)) - self.assertEqual(event.object.name, _blank) - self.failUnless(event.object.info is _info) - self.failUnless(event.object.factory is _Factory) + self.assertEqual(len(_events), 0) def test_registeredHandlers_empty(self): from zope.interface.declarations import InterfaceClass class IFoo(InterfaceClass): pass comp = self._makeOne() - self.failIf(list(comp.registeredHandlers())) + self.assertFalse(list(comp.registeredHandlers())) def test_registeredHandlers_non_empty(self): from zope.interface.declarations import InterfaceClass @@ -1813,12 +1882,12 @@ return x.factory.__code__.co_name subscribers = sorted(comp.registeredHandlers(), key=_factory_name) self.assertEqual(len(subscribers), 2) - self.failUnless(isinstance(subscribers[0], HandlerRegistration)) + self.assertTrue(isinstance(subscribers[0], HandlerRegistration)) self.assertEqual(subscribers[0].required, (ifoo,)) self.assertEqual(subscribers[0].name, '') self.assertEqual(subscribers[0].factory, _factory1) self.assertEqual(subscribers[0].info, '') - self.failUnless(isinstance(subscribers[1], HandlerRegistration)) + self.assertTrue(isinstance(subscribers[1], HandlerRegistration)) self.assertEqual(subscribers[1].required, (ifoo,)) self.assertEqual(subscribers[1].name, '') self.assertEqual(subscribers[1].factory, _factory2) @@ -1850,7 +1919,7 @@ ifoo = IFoo('IFoo') comp = self._makeOne() unreg = comp.unregisterHandler(required=(ifoo,)) - self.failIf(unreg) + self.assertFalse(unreg) def test_unregisterHandler_hit_w_factory_and_explicit_provided(self): from zope.interface.declarations import InterfaceClass @@ -1868,17 +1937,17 @@ _monkey, _events = self._wrapEvents() with _monkey: unreg = comp.unregisterHandler(_factory, (ifoo,)) - self.failUnless(unreg) + self.assertTrue(unreg) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Unregistered)) - self.failUnless(isinstance(event.object, HandlerRegistration)) - self.failUnless(event.object.registry is comp) + self.assertTrue(isinstance(event, Unregistered)) + self.assertTrue(isinstance(event.object, HandlerRegistration)) + self.assertTrue(event.object.registry is comp) self.assertEqual(event.object.required, (ifoo,)) self.assertEqual(event.object.name, '') - self.failUnless(event.object.factory is _factory) + self.assertTrue(event.object.factory is _factory) def test_unregisterHandler_hit_w_only_explicit_provided(self): from zope.interface.declarations import InterfaceClass @@ -1896,17 +1965,17 @@ _monkey, _events = self._wrapEvents() with _monkey: unreg = comp.unregisterHandler(required=(ifoo,)) - self.failUnless(unreg) + self.assertTrue(unreg) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Unregistered)) - self.failUnless(isinstance(event.object, HandlerRegistration)) - self.failUnless(event.object.registry is comp) + self.assertTrue(isinstance(event, Unregistered)) + self.assertTrue(isinstance(event.object, HandlerRegistration)) + self.assertTrue(event.object.registry is comp) self.assertEqual(event.object.required, (ifoo,)) self.assertEqual(event.object.name, '') - self.failUnless(event.object.factory is None) + self.assertTrue(event.object.factory is None) def test_unregisterHandler_wo_explicit_required(self): from zope.interface.declarations import InterfaceClass @@ -1924,18 +1993,18 @@ _monkey, _events = self._wrapEvents() with _monkey: unreg = comp.unregisterHandler(_Factory) - self.failUnless(unreg) + self.assertTrue(unreg) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.failUnless(isinstance(event, Unregistered)) - self.failUnless(isinstance(event.object, HandlerRegistration)) - self.failUnless(event.object.registry is comp) + self.assertTrue(isinstance(event, Unregistered)) + self.assertTrue(isinstance(event.object, HandlerRegistration)) + self.assertTrue(event.object.registry is comp) self.assertEqual(event.object.required, (ifoo,)) self.assertEqual(event.object.name, '') self.assertEqual(event.object.info, '') - self.failUnless(event.object.factory is _Factory) + self.assertTrue(event.object.factory is _Factory) def test_handle_empty(self): from zope.interface.declarations import InterfaceClass @@ -1978,7 +2047,7 @@ # callers (Component.registerUtility, Component.registerAdapter). -class UtilityRegistrationTests(_SilencePy3Deprecations): +class UtilityRegistrationTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.registry import UtilityRegistration @@ -2052,49 +2121,49 @@ def test___eq___identity(self): _component = object() ur, _registry, _name = self._makeOne(_component) - self.failUnless(ur == ur) + self.assertTrue(ur == ur) def test___eq___hit(self): _component = object() ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component) - self.failUnless(ur == ur2) + self.assertTrue(ur == ur2) def test___eq___miss(self): _component = object() _component2 = object() ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component2) - self.failIf(ur == ur2) + self.assertFalse(ur == ur2) def test___ne___identity(self): _component = object() ur, _registry, _name = self._makeOne(_component) - self.failIf(ur != ur) + self.assertFalse(ur != ur) def test___ne___hit(self): _component = object() ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component) - self.failIf(ur != ur2) + self.assertFalse(ur != ur2) def test___ne___miss(self): _component = object() _component2 = object() ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component2) - self.failUnless(ur != ur2) + self.assertTrue(ur != ur2) def test___lt___identity(self): _component = object() ur, _registry, _name = self._makeOne(_component) - self.failIf(ur < ur) + self.assertFalse(ur < ur) def test___lt___hit(self): _component = object() ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component) - self.failIf(ur < ur2) + self.assertFalse(ur < ur2) def test___lt___miss(self): _component = object() @@ -2102,18 +2171,18 @@ ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component2) ur2.name = _name + '2' - self.failUnless(ur < ur2) + self.assertTrue(ur < ur2) def test___le___identity(self): _component = object() ur, _registry, _name = self._makeOne(_component) - self.failUnless(ur <= ur) + self.assertTrue(ur <= ur) def test___le___hit(self): _component = object() ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component) - self.failUnless(ur <= ur2) + self.assertTrue(ur <= ur2) def test___le___miss(self): _component = object() @@ -2121,12 +2190,12 @@ ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component2) ur2.name = _name + '2' - self.failUnless(ur <= ur2) + self.assertTrue(ur <= ur2) def test___gt___identity(self): _component = object() ur, _registry, _name = self._makeOne(_component) - self.failIf(ur > ur) + self.assertFalse(ur > ur) def test___gt___hit(self): _component = object() @@ -2134,18 +2203,18 @@ ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component2) ur2.name = _name + '2' - self.failUnless(ur2 > ur) + self.assertTrue(ur2 > ur) def test___gt___miss(self): _component = object() ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component) - self.failIf(ur2 > ur) + self.assertFalse(ur2 > ur) def test___ge___identity(self): _component = object() ur, _registry, _name = self._makeOne(_component) - self.failUnless(ur >= ur) + self.assertTrue(ur >= ur) def test___ge___miss(self): _component = object() @@ -2153,17 +2222,17 @@ ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component2) ur2.name = _name + '2' - self.failIf(ur >= ur2) + self.assertFalse(ur >= ur2) def test___ge___hit(self): _component = object() ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component) ur2.name = _name + '2' - self.failUnless(ur2 >= ur) + self.assertTrue(ur2 >= ur) -class AdapterRegistrationTests(_SilencePy3Deprecations): +class AdapterRegistrationTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.registry import AdapterRegistration @@ -2238,38 +2307,38 @@ def test___eq___identity(self): _component = object() ar, _registry, _name = self._makeOne(_component) - self.failUnless(ar == ar) + self.assertTrue(ar == ar) def test___eq___hit(self): _component = object() ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component) - self.failUnless(ar == ar2) + self.assertTrue(ar == ar2) def test___eq___miss(self): _component = object() _component2 = object() ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component2) - self.failIf(ar == ar2) + self.assertFalse(ar == ar2) def test___ne___identity(self): _component = object() ar, _registry, _name = self._makeOne(_component) - self.failIf(ar != ar) + self.assertFalse(ar != ar) def test___ne___miss(self): _component = object() ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component) - self.failIf(ar != ar2) + self.assertFalse(ar != ar2) def test___ne___hit_component(self): _component = object() _component2 = object() ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component2) - self.failUnless(ar != ar2) + self.assertTrue(ar != ar2) def test___ne___hit_provided(self): from zope.interface.declarations import InterfaceClass @@ -2280,7 +2349,7 @@ ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component) ar2.provided = ibaz - self.failUnless(ar != ar2) + self.assertTrue(ar != ar2) def test___ne___hit_required(self): from zope.interface.declarations import InterfaceClass @@ -2292,18 +2361,18 @@ ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component2) ar2.required = (ibaz,) - self.failUnless(ar != ar2) + self.assertTrue(ar != ar2) def test___lt___identity(self): _component = object() ar, _registry, _name = self._makeOne(_component) - self.failIf(ar < ar) + self.assertFalse(ar < ar) def test___lt___hit(self): _component = object() ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component) - self.failIf(ar < ar2) + self.assertFalse(ar < ar2) def test___lt___miss(self): _component = object() @@ -2311,18 +2380,18 @@ ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component2) ar2.name = _name + '2' - self.failUnless(ar < ar2) + self.assertTrue(ar < ar2) def test___le___identity(self): _component = object() ar, _registry, _name = self._makeOne(_component) - self.failUnless(ar <= ar) + self.assertTrue(ar <= ar) def test___le___hit(self): _component = object() ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component) - self.failUnless(ar <= ar2) + self.assertTrue(ar <= ar2) def test___le___miss(self): _component = object() @@ -2330,12 +2399,12 @@ ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component2) ar2.name = _name + '2' - self.failUnless(ar <= ar2) + self.assertTrue(ar <= ar2) def test___gt___identity(self): _component = object() ar, _registry, _name = self._makeOne(_component) - self.failIf(ar > ar) + self.assertFalse(ar > ar) def test___gt___hit(self): _component = object() @@ -2343,18 +2412,18 @@ ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component2) ar2.name = _name + '2' - self.failUnless(ar2 > ar) + self.assertTrue(ar2 > ar) def test___gt___miss(self): _component = object() ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component) - self.failIf(ar2 > ar) + self.assertFalse(ar2 > ar) def test___ge___identity(self): _component = object() ar, _registry, _name = self._makeOne(_component) - self.failUnless(ar >= ar) + self.assertTrue(ar >= ar) def test___ge___miss(self): _component = object() @@ -2362,14 +2431,14 @@ ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component2) ar2.name = _name + '2' - self.failIf(ar >= ar2) + self.assertFalse(ar >= ar2) def test___ge___hit(self): _component = object() ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component) ar2.name = _name + '2' - self.failUnless(ar2 >= ar) + self.assertTrue(ar2 >= ar) class SubscriptionRegistrationTests(unittest.TestCase): @@ -2409,7 +2478,7 @@ verifyObject(ISubscriptionAdapterRegistration, sar) -class HandlerRegistrationTests(_SilencePy3Deprecations): +class HandlerRegistrationTests(unittest.TestCase): def _getTargetClass(self): from zope.interface.registry import HandlerRegistration @@ -2448,9 +2517,9 @@ def _factory(context): pass hr, _, _ = self._makeOne(_factory) - self.failUnless(hr.handler is _factory) - self.failUnless(hr.factory is hr.handler) - self.failUnless(hr.provided is None) + self.assertTrue(hr.handler is _factory) + self.assertTrue(hr.factory is hr.handler) + self.assertTrue(hr.provided is None) def test___repr___factory_w_name(self): class _Factory(object): diff -Nru zope.interface-4.1.1/src/zope/interface/tests/test_ro.py zope.interface-4.1.2/src/zope/interface/tests/test_ro.py --- zope.interface-4.1.1/src/zope/interface/tests/test_ro.py 1970-01-01 00:00:00.000000000 +0000 +++ zope.interface-4.1.2/src/zope/interface/tests/test_ro.py 2014-12-08 18:14:30.000000000 +0000 @@ -0,0 +1,115 @@ +############################################################################## +# +# Copyright (c) 2014 Zope Foundation and Contributors. +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# +############################################################################## +"""Resolution ordering utility tests""" +import unittest + + +class Test__mergeOrderings(unittest.TestCase): + + def _callFUT(self, orderings): + from zope.interface.ro import _mergeOrderings + return _mergeOrderings(orderings) + + def test_empty(self): + self.assertEqual(self._callFUT([]), []) + + def test_single(self): + self.assertEqual(self._callFUT(['a', 'b', 'c']), ['a', 'b', 'c']) + + def test_w_duplicates(self): + self.assertEqual(self._callFUT([['a'], ['b', 'a']]), ['b', 'a']) + + def test_suffix_across_multiple_duplicats(self): + O1 = ['x', 'y', 'z'] + O2 = ['q', 'z'] + O3 = [1, 3, 5] + O4 = ['z'] + self.assertEqual(self._callFUT([O1, O2, O3, O4]), + ['x', 'y', 'q', 1, 3, 5, 'z']) + + +class Test__flatten(unittest.TestCase): + + def _callFUT(self, ob): + from zope.interface.ro import _flatten + return _flatten(ob) + + def test_w_empty_bases(self): + class Foo(object): + pass + foo = Foo() + foo.__bases__ = () + self.assertEqual(self._callFUT(foo), [foo]) + + def test_w_single_base(self): + class Foo(object): + pass + self.assertEqual(self._callFUT(Foo), [Foo, object]) + + def test_w_bases(self): + class Foo(object): + pass + class Bar(Foo): + pass + self.assertEqual(self._callFUT(Bar), [Bar, Foo, object]) + + def test_w_diamond(self): + class Foo(object): + pass + class Bar(Foo): + pass + class Baz(Foo): + pass + class Qux(Bar, Baz): + pass + self.assertEqual(self._callFUT(Qux), + [Qux, Bar, Foo, object, Baz, Foo, object]) + + +class Test_ro(unittest.TestCase): + + def _callFUT(self, ob): + from zope.interface.ro import ro + return ro(ob) + + def test_w_empty_bases(self): + class Foo(object): + pass + foo = Foo() + foo.__bases__ = () + self.assertEqual(self._callFUT(foo), [foo]) + + def test_w_single_base(self): + class Foo(object): + pass + self.assertEqual(self._callFUT(Foo), [Foo, object]) + + def test_w_bases(self): + class Foo(object): + pass + class Bar(Foo): + pass + self.assertEqual(self._callFUT(Bar), [Bar, Foo, object]) + + def test_w_diamond(self): + class Foo(object): + pass + class Bar(Foo): + pass + class Baz(Foo): + pass + class Qux(Bar, Baz): + pass + self.assertEqual(self._callFUT(Qux), + [Qux, Bar, Baz, Foo, object]) diff -Nru zope.interface-4.1.1/src/zope.interface.egg-info/PKG-INFO zope.interface-4.1.2/src/zope.interface.egg-info/PKG-INFO --- zope.interface-4.1.1/src/zope.interface.egg-info/PKG-INFO 2014-03-19 18:34:38.000000000 +0000 +++ zope.interface-4.1.2/src/zope.interface.egg-info/PKG-INFO 2014-12-28 00:46:38.000000000 +0000 @@ -1,13 +1,16 @@ -Metadata-Version: 1.0 +Metadata-Version: 1.1 Name: zope.interface -Version: 4.1.1 +Version: 4.1.2 Summary: Interfaces for Python Home-page: http://pypi.python.org/pypi/zope.interface Author: Zope Foundation and Contributors Author-email: zope-dev@zope.org License: ZPL 2.1 -Description: ``zope.interface`` README - ========================= +Description: ``zope.interface`` + ================== + + .. image:: https://travis-ci.org/zopefoundation/zope.interface.png?branch=master + :target: https://travis-ci.org/zopefoundation/zope.interface This package is intended to be independently reusable in any Python project. It is maintained by the `Zope Toolkit project @@ -22,35 +25,46 @@ For detailed documentation, please see http://docs.zope.org/zope.interface - ``zope.interface Changelog`` - ============================ + Changes + ======= + + 4.1.2 (2014-12-27) + ------------------ + + - Add support for PyPy3. + + - Remove unittest assertions deprecated in Python3.x. + + - Add ``zope.interface.document.asReStructuredText``, which formats the + generated text for an interface using ReST double-backtick markers. + 4.1.1 (2014-03-19) ------------------ - - Added support for Python 3.4. + - Add support for Python 3.4. 4.1.0 (2014-02-05) ------------------ - - Updated ``boostrap.py`` to version 2.2. + - Update ``boostrap.py`` to version 2.2. - - Added ``@named(name)`` declaration, that specifies the component name, so it + - Add ``@named(name)`` declaration, that specifies the component name, so it does not have to be passed in during registration. 4.0.5 (2013-02-28) ------------------ - - Fixed a bug where a decorated method caused false positive failures on + - Fix a bug where a decorated method caused false positive failures on ``verifyClass()``. 4.0.4 (2013-02-21) ------------------ - - Fixed a bug that was revealed by porting zope.traversing. During a loop, the + - Fix a bug that was revealed by porting zope.traversing. During a loop, the loop body modified a weakref dict causing a ``RuntimeError`` error. 4.0.3 (2012-12-31) @@ -61,7 +75,7 @@ 4.0.2 (2012-11-21) ------------------ - - Added support for Python 3.3. + - Add support for Python 3.3. - Restored ability to install the package in the absence of ``setuptools``. @@ -71,7 +85,7 @@ 4.0.1 (2012-05-22) ------------------ - - Dropped explicit ``DeprecationWarnings`` for "class advice" APIS (these + - Drop explicit ``DeprecationWarnings`` for "class advice" APIS (these APIs are still deprecated under Python 2.x, and still raise an exception under Python 3.x, but no longer cause a warning to be emitted under Python 2.x). @@ -81,29 +95,29 @@ - Automated build of Sphinx HTML docs and running doctest snippets via tox. - - Deprecated the "class advice" APIs from ``zope.interface.declarations``: + - Deprecate the "class advice" APIs from ``zope.interface.declarations``: ``implements``, ``implementsOnly``, and ``classProvides``. In their place, prefer the equivalent class decorators: ``@implementer``, ``@implementer_only``, and ``@provider``. Code which uses the deprecated APIs will not work as expected under Py3k. - - Removed use of '2to3' and associated fixers when installing under Py3k. + - Remove use of '2to3' and associated fixers when installing under Py3k. The code is now in a "compatible subset" which supports Python 2.6, 2.7, and 3.2, including PyPy 1.8 (the version compatible with the 2.7 language spec). - - Dropped explicit support for Python 2.4 / 2.5 / 3.1. + - Drop explicit support for Python 2.4 / 2.5 / 3.1. - - Added support for PyPy. + - Add support for PyPy. - - Added support for continuous integration using ``tox`` and ``jenkins``. + - Add support for continuous integration using ``tox`` and ``jenkins``. - - Added 'setup.py dev' alias (runs ``setup.py develop`` plus installs + - Add 'setup.py dev' alias (runs ``setup.py develop`` plus installs ``nose`` and ``coverage``). - - Added 'setup.py docs' alias (installs ``Sphinx`` and dependencies). + - Add 'setup.py docs' alias (installs ``Sphinx`` and dependencies). - - Replaced all unittest coverage previously accomplished via doctests with + - Replace all unittest coverage previously accomplished via doctests with unittests. The doctests have been moved into a ``docs`` section, managed as a Sphinx collection. @@ -160,7 +174,7 @@ - LP #570942: Now correctly compare interfaces from different modules but with the same names. - + N.B.: This is a less intrusive / destabilizing fix than the one applied in 3.6.3: we only fix the underlying cmp-alike function, rather than adding the other "rich comparison" functions. @@ -215,7 +229,7 @@ - A non-ASCII character in the changelog made 3.6.0 uninstallable on Python 3 systems with another default encoding than UTF-8. - - Fixed compiler warnings under GCC 4.3.3. + - Fix compiler warnings under GCC 4.3.3. 3.6.0 (2010-04-29) ------------------ @@ -223,7 +237,7 @@ - LP #185974: Clear the cache used by ``Specificaton.get`` inside ``Specification.changed``. Thanks to Jacob Holm for the patch. - - Added support for Python 3.1. Contributors: + - Add support for Python 3.1. Contributors: Lennart Regebro Martin v Loewis @@ -293,7 +307,7 @@ 3.5.0 (2008-10-26) ------------------ - - Fixed declaration of _zope_interface_coptimizations, it's not a top level + - Fix declaration of _zope_interface_coptimizations, it's not a top level package. - Add a DocTestSuite for odd.py module, so their tests are run. @@ -303,17 +317,17 @@ - Fix https://bugs.launchpad.net/zope3/3.3/+bug/98388: ISpecification was missing a declaration for __iro__. - - Added optional code optimizations support, which allows the building + - Add optional code optimizations support, which allows the building of C code optimizations to fail (Jython). - - Replaced `_flatten` with a non-recursive implementation, effectively making + - Replace `_flatten` with a non-recursive implementation, effectively making it 3x faster. 3.4.1 (2007-10-02) ------------------ - - Fixed a setup bug that prevented installation from source on systems + - Fix a setup bug that prevented installation from source on systems without setuptools. @@ -327,9 +341,8 @@ -------------------- - - Objects with picky custom comparison methods couldn't be added to - component registries. Now, when checking whether an object is - already registered, identity comparison is used. + - When checking whether an object is already registered, use identity + comparison, to allow adding registering with picky custom comparison methods. 3.3.0.1 (2007-01-03) @@ -345,20 +358,19 @@ New Features ++++++++++++ - - The adapter-lookup algorithim was refactored to make it - much simpler and faster. + - Refactor the adapter-lookup algorithim to make it much simpler and faster. - Also, more of the adapter-lookup logic is implemented in C, making + Also, implement more of the adapter-lookup logic in C, making debugging of application code easier, since there is less infrastructre code to step through. - - We now treat objects without interface declarations as if they - declared that they provide zope.interface.Interface. + - Treat objects without interface declarations as if they + declared that they provide ``zope.interface.Interface``. - - There are a number of richer new adapter-registration interfaces + - Add a number of richer new adapter-registration interfaces that provide greater control and introspection. - - Added a new interface decorator to zope.interface that allows the + - Add a new interface decorator to zope.interface that allows the setting of tagged values on an interface at definition time (see zope.interface.taggedValue). @@ -397,7 +409,7 @@ - Made attribute resolution order consistent with component lookup order, i.e. new-style class MRO semantics. - - Deprecated 'isImplementedBy' and 'isImplementedByInstancesOf' APIs in + - Deprecate 'isImplementedBy' and 'isImplementedByInstancesOf' APIs in favor of 'implementedBy' and 'providedBy'. @@ -407,7 +419,7 @@ - Corresponds to the verison of the zope.interface package shipped as part of the Zope X3.0.1 release. - - Fixed a bug reported by James Knight, which caused adapter registries + - Fix a bug reported by James Knight, which caused adapter registries to fail occasionally to reflect declaration changes. diff -Nru zope.interface-4.1.1/src/zope.interface.egg-info/requires.txt zope.interface-4.1.2/src/zope.interface.egg-info/requires.txt --- zope.interface-4.1.1/src/zope.interface.egg-info/requires.txt 2014-03-19 18:34:38.000000000 +0000 +++ zope.interface-4.1.2/src/zope.interface.egg-info/requires.txt 2014-12-28 00:46:38.000000000 +0000 @@ -1,13 +1,13 @@ setuptools -[test] -zope.event - [docs] Sphinx repoze.sphinx.autointerface +[test] +zope.event + [testing] zope.event nose -coverage \ No newline at end of file +coverage diff -Nru zope.interface-4.1.1/src/zope.interface.egg-info/SOURCES.txt zope.interface-4.1.2/src/zope.interface.egg-info/SOURCES.txt --- zope.interface-4.1.1/src/zope.interface.egg-info/SOURCES.txt 2014-03-19 18:34:39.000000000 +0000 +++ zope.interface-4.1.2/src/zope.interface.egg-info/SOURCES.txt 2014-12-28 00:46:40.000000000 +0000 @@ -1,3 +1,4 @@ +.coveragerc .gitignore .travis.yml CHANGES.rst @@ -54,6 +55,7 @@ docs/_build/html/searchindex.js docs/_build/html/verify.html docs/_build/html/_modules/index.html +docs/_build/html/_modules/zope/interface.html docs/_build/html/_modules/zope/interface/declarations.html docs/_build/html/_modules/zope/interface/interfaces.html docs/_build/html/_sources/README.ru.txt @@ -77,12 +79,14 @@ docs/_build/html/_static/down-pressed.png docs/_build/html/_static/down.png docs/_build/html/_static/file.png +docs/_build/html/_static/jquery-1.11.1.js docs/_build/html/_static/jquery.js docs/_build/html/_static/minus.png docs/_build/html/_static/plus.png docs/_build/html/_static/pygments.css docs/_build/html/_static/searchtools.js docs/_build/html/_static/sidebar.js +docs/_build/html/_static/underscore-1.3.1.js docs/_build/html/_static/underscore.js docs/_build/html/_static/up-pressed.png docs/_build/html/_static/up.png @@ -138,5 +142,6 @@ src/zope/interface/tests/test_interfaces.py src/zope/interface/tests/test_odd_declarations.py src/zope/interface/tests/test_registry.py +src/zope/interface/tests/test_ro.py src/zope/interface/tests/test_sorting.py src/zope/interface/tests/test_verify.py \ No newline at end of file diff -Nru zope.interface-4.1.1/tox.ini zope.interface-4.1.2/tox.ini --- zope.interface-4.1.1/tox.ini 2014-03-18 19:52:43.000000000 +0000 +++ zope.interface-4.1.2/tox.ini 2014-12-08 21:46:00.000000000 +0000 @@ -1,9 +1,6 @@ [tox] envlist = -# Jython support pending 2.7 support, due 2012-07-15 or so. See: -# http://fwierzbicki.blogspot.com/2012/03/adconion-to-fund-jython-27.html -# py26,py27,py32,jython,pypy,coverage - py26,py27,py32,py33,py34,pypy,coverage,docs + py26,py27,py32,py33,py34,pypy,pypy3,coverage,docs [testenv] commands = @@ -11,6 +8,9 @@ deps = zope.event [testenv:jython] +# Jython 2.7b1 support pending fix for Jython incompat. w/ pip's vendored-in +# requests -> html5 libraries. See +# https://github.com/html5lib/html5lib-python/pull/150 commands = jython setup.py test -q diff -Nru zope.interface-4.1.1/.travis.yml zope.interface-4.1.2/.travis.yml --- zope.interface-4.1.1/.travis.yml 2013-06-12 22:43:21.000000000 +0000 +++ zope.interface-4.1.2/.travis.yml 2014-12-18 16:51:32.000000000 +0000 @@ -1,10 +1,13 @@ language: python +sudo: false python: - 2.6 - 2.7 - 3.2 - 3.3 + - 3.4 - pypy + - pypy3 install: - pip install . --use-mirrors script: