[Checkins] SVN: zope.component/tseaver-test_cleanup/ Moar {get, query}MultiAdapter doctest to Sphinx + unittests conversion.

Tres Seaver cvs-admin at zope.org
Mon Jun 18 18:17:19 UTC 2012


Log message for revision 126957:
  Moar {get,query}MultiAdapter doctest to Sphinx + unittests conversion.

Changed:
  _U  zope.component/tseaver-test_cleanup/
  U   zope.component/tseaver-test_cleanup/docs/api.rst
  U   zope.component/tseaver-test_cleanup/src/zope/component/tests/test___init__.py
  U   zope.component/tseaver-test_cleanup/src/zope/component/tests/test_doctests.py

-=-
Modified: zope.component/tseaver-test_cleanup/docs/api.rst
===================================================================
--- zope.component/tseaver-test_cleanup/docs/api.rst	2012-06-18 18:17:11 UTC (rev 126956)
+++ zope.component/tseaver-test_cleanup/docs/api.rst	2012-06-18 18:17:15 UTC (rev 126957)
@@ -586,7 +586,7 @@
    True
 
 Invoking an Interface to Perform Adapter Lookup
-===============================================
+###############################################
 
 :mod:`zope.component` registers an adapter hook with
 :mod:`zope.interface.interface`, allowing a convenient spelling for
@@ -618,16 +618,99 @@
    >>> adapted is marker
    True
 
+Looking Up Adapters Using Multiple Objects
+##########################################
+
 .. autofunction:: zope.component.getMultiAdapter
 
 .. autofunction:: zope.component.queryMultiAdapter
 
+Multi-adapters adapt one or more objects to another interface. To make
+this demonstration non-trivial, we need to create a second object to be
+adapted:
+
+.. doctest::
+
+   >>> from zope.component.tests.test_doctests import Ob2
+   >>> ob2 = Ob2()
+
+As with regular adapters, if an adapter isn't registered for the given
+objects and interface, the :func:`~zope.component.getMultiAdapter` API
+raises `ComponentLookupError`:
+
+.. doctest::
+
+   >>> from zope.component import getMultiAdapter
+   >>> getMultiAdapter((ob, ob2), I3)
+   Traceback (most recent call last):
+   ...
+   ComponentLookupError:
+   ((<instance Ob>, <instance Ob2>),
+    <InterfaceClass zope.component.tests.test_doctests.I3>,
+    u'')
+
+while the :func:`~zope.component.queryMultiAdapter` API returns the default:
+
+.. doctest::
+
+   >>> from zope.component import queryMultiAdapter
+   >>> queryMultiAdapter((ob, ob2), I3, default='<default>')
+   '<default>'
+
+Note that ``name`` is not a required attribute here.
+
+To test multi-adapters, we also have to create an adapter class that
+handles to context objects:
+
+.. doctest::
+
+   >>> from zope.interface import implementer
+   >>> @implementer(I3)
+   ... class DoubleAdapter(object):
+   ...     def __init__(self, first, second):
+   ...         self.first = first
+   ...         self.second = second
+
+Now we can register the multi-adapter:
+
+.. doctest::
+
+   >>> from zope.component import getGlobalSiteManager
+   >>> getGlobalSiteManager().registerAdapter(DoubleAdapter, (I1, I2), I3, '')
+
+Notice how the required interfaces are simply provided by a tuple.
+
+Now we can get the adapter:
+
+.. doctest::
+
+   >>> adapter = getMultiAdapter((ob, ob2), I3)
+   >>> adapter.__class__ is DoubleAdapter
+   True
+   >>> adapter.first is ob
+   True
+   >>> adapter.second is ob2
+   True
+
+
+Finding More Than One Adapter
+#############################
+
 .. autofunction:: zope.component.getAdapters
 
+Subscription Adapters
+#####################
+
 .. autofunction:: zope.component.subscribers
 
+Event handlers
+##############
+
 .. autofunction:: zope.component.handle
 
+Helpers for Declaring / Testing Adapters
+########################################
+
 .. autofunction:: zope.component.adapter
 
 .. autofunction:: zope.component.adaptedBy

Modified: zope.component/tseaver-test_cleanup/src/zope/component/tests/test___init__.py
===================================================================
--- zope.component/tseaver-test_cleanup/src/zope/component/tests/test___init__.py	2012-06-18 18:17:11 UTC (rev 126956)
+++ zope.component/tseaver-test_cleanup/src/zope/component/tests/test___init__.py	2012-06-18 18:17:15 UTC (rev 126957)
@@ -307,7 +307,7 @@
         class IFoo(Interface):
             pass
         self.assertRaises(ComponentLookupError,
-                          getAdapterInContext, object, IFoo, context=None)
+                          getAdapterInContext, object(), IFoo, context=None)
 
     def test_getAdapterInContext_hit_via_sm(self):
         from zope.interface import Interface
@@ -350,7 +350,7 @@
         class IFoo(Interface):
             pass
         self.assertEqual(
-            queryAdapterInContext(object, IFoo, context=None), None)
+            queryAdapterInContext(object(), IFoo, context=None), None)
 
     def test_queryAdapterInContext_w_object_conforming(self):
         from zope.interface import Interface
@@ -411,7 +411,8 @@
         from zope.component.interfaces import ComponentLookupError
         class IFoo(Interface):
             pass
-        self.assertRaises(ComponentLookupError, getAdapter, object, IFoo, '')
+        self.assertRaises(ComponentLookupError,
+                          getAdapter, object(), IFoo, '')
 
     def test_getAdapter_named_nonesuch(self):
         from zope.interface import Interface
@@ -419,7 +420,8 @@
         from zope.component.interfaces import ComponentLookupError
         class IFoo(Interface):
             pass
-        self.assertRaises(ComponentLookupError, getAdapter, object, IFoo, 'bar')
+        self.assertRaises(ComponentLookupError,
+                          getAdapter, object(), IFoo, 'bar')
 
     def test_getAdapter_anonymous_hit(self):
         from zope.interface import Interface
@@ -593,7 +595,204 @@
         self.assertTrue(adapted.__class__ is Baz)
         self.assertTrue(adapted.context is bar)
 
+    def test_getMultiAdapter_anonymous_nonesuch(self):
+        from zope.interface import Interface
+        from zope.component import getMultiAdapter
+        from zope.component.interfaces import ComponentLookupError
+        class IFoo(Interface):
+            pass
+        self.assertRaises(ComponentLookupError,
+                          getMultiAdapter, (object(), object()), IFoo, '')
 
+    def test_getMultiAdapter_named_nonesuch(self):
+        from zope.interface import Interface
+        from zope.component import getMultiAdapter
+        from zope.component.interfaces import ComponentLookupError
+        class IFoo(Interface):
+            pass
+        self.assertRaises(ComponentLookupError,
+                          getMultiAdapter, (object(), object()), IFoo, 'bar')
+
+    def test_getMultiAdapter_anonymous_hit(self):
+        from zope.interface import Interface
+        from zope.interface import implementer
+        from zope.component import getGlobalSiteManager
+        from zope.component import getMultiAdapter
+        class IFoo(Interface):
+            pass
+        class IBar(Interface):
+            pass
+        class IBaz(Interface):
+            pass
+        @implementer(IBar)
+        class Bar(object):
+            pass
+        @implementer(IBaz)
+        class Baz(object):
+            pass
+        @implementer(IFoo)
+        class FooAdapter(object):
+            def __init__(self, first, second):
+                self.first, self.second = first, second
+        getGlobalSiteManager().registerAdapter(
+                                FooAdapter, (IBar, IBaz), IFoo, '')
+        bar = Bar()
+        baz = Baz()
+        adapted = getMultiAdapter((bar, baz), IFoo, '')
+        self.assertTrue(adapted.__class__ is FooAdapter)
+        self.assertTrue(adapted.first is bar)
+        self.assertTrue(adapted.second is baz)
+
+    def test_getMultiAdapter_named_hit(self):
+        from zope.interface import Interface
+        from zope.interface import implementer
+        from zope.component import getMultiAdapter
+        from zope.component import getGlobalSiteManager
+        class IFoo(Interface):
+            pass
+        class IBar(Interface):
+            pass
+        class IBaz(Interface):
+            pass
+        @implementer(IBar)
+        class Bar(object):
+            pass
+        @implementer(IBaz)
+        class Baz(object):
+            pass
+        @implementer(IFoo)
+        class FooAdapter(object):
+            def __init__(self, first, second):
+                self.first, self.second = first, second
+        getGlobalSiteManager().registerAdapter(
+                                    FooAdapter, (IBar, IBaz), IFoo, 'named')
+        bar = Bar()
+        baz = Baz()
+        adapted = getMultiAdapter((bar, baz), IFoo, 'named')
+        self.assertTrue(adapted.__class__ is FooAdapter)
+        self.assertTrue(adapted.first is bar)
+        self.assertTrue(adapted.second is baz)
+
+    def test_queryMultiAdapter_anonymous_nonesuch(self):
+        from zope.interface import Interface
+        from zope.component import queryMultiAdapter
+        class IFoo(Interface):
+            pass
+        self.assertEqual(queryMultiAdapter((object(), object()), IFoo, '',
+                                            '<default>'),
+                         '<default>')
+
+    def test_queryMultiAdapter_named_nonesuch(self):
+        from zope.interface import Interface
+        from zope.component import queryMultiAdapter
+        class IFoo(Interface):
+            pass
+        self.assertEqual(queryMultiAdapter((object(), object()), IFoo, 'bar'),
+                         None)
+
+    def test_queryMultiAdapter_anonymous_hit(self):
+        from zope.interface import Interface
+        from zope.interface import implementer
+        from zope.component import getGlobalSiteManager
+        from zope.component import queryMultiAdapter
+        class IFoo(Interface):
+            pass
+        class IBar(Interface):
+            pass
+        class IBaz(Interface):
+            pass
+        @implementer(IBar)
+        class Bar(object):
+            pass
+        @implementer(IBaz)
+        class Baz(object):
+            pass
+        @implementer(IFoo)
+        class FooAdapter(object):
+            def __init__(self, first, second):
+                self.first, self.second = first, second
+        getGlobalSiteManager().registerAdapter(
+                                    FooAdapter, (IBar, IBaz), IFoo, '')
+        bar = Bar()
+        baz = Baz()
+        adapted = queryMultiAdapter((bar, baz), IFoo, '')
+        self.assertTrue(adapted.__class__ is FooAdapter)
+        self.assertTrue(adapted.first is bar)
+        self.assertTrue(adapted.second is baz)
+
+    def test_queryMultiAdapter_named_hit(self):
+        from zope.interface import Interface
+        from zope.interface import implementer
+        from zope.component import getGlobalSiteManager
+        from zope.component import queryMultiAdapter
+        class IFoo(Interface):
+            pass
+        class IBar(Interface):
+            pass
+        class IBaz(Interface):
+            pass
+        @implementer(IBar)
+        class Bar(object):
+            pass
+        @implementer(IBaz)
+        class Baz(object):
+            pass
+        @implementer(IFoo)
+        class FooAdapter(object):
+            def __init__(self, first, second):
+                self.first, self.second = first, second
+        getGlobalSiteManager().registerAdapter(
+                                    FooAdapter, (IBar, IBaz), IFoo, 'named')
+        bar = Bar()
+        baz = Baz()
+        adapted = queryMultiAdapter((bar, baz), IFoo, 'named')
+        self.assertTrue(adapted.__class__ is FooAdapter)
+        self.assertTrue(adapted.first is bar)
+        self.assertTrue(adapted.second is baz)
+
+    def test_queryMultiAdapter_nested(self):
+        from zope.interface import Interface
+        from zope.interface import implementer
+        from zope.interface.registry import Components
+        from zope.component import getGlobalSiteManager
+        from zope.component import queryMultiAdapter
+        from zope.component.tests.test_doctests \
+            import ConformsToIComponentLookup
+        class IFoo(Interface):
+            pass
+        class IBar(Interface):
+            pass
+        class IBaz(Interface):
+            pass
+        @implementer(IBar)
+        class Bar(object):
+            pass
+        @implementer(IBaz)
+        class Baz(object):
+            pass
+        @implementer(IFoo)
+        class Global(object):
+            def __init__(self, first, second):
+                self.first, self.second = first, second
+        @implementer(IFoo)
+        class Local(object):
+            def __init__(self, first, second):
+                self.first, self.second = first, second
+        class Context(ConformsToIComponentLookup):
+            def __init__(self, sm):
+                self.sitemanager = sm
+        gsm = getGlobalSiteManager()
+        gsm.registerAdapter(Global, (IBar, IBaz), IFoo, '')
+        sm1 = Components('sm1', bases=(gsm, ))
+        sm1.registerAdapter(Local, (IBar, IBaz), IFoo, '')
+        bar = Bar()
+        baz = Baz()
+        adapted = queryMultiAdapter((bar, baz), IFoo, '', context=Context(sm1))
+        self.assertTrue(adapted.__class__ is Local)
+        self.assertTrue(adapted.first is bar)
+        self.assertTrue(adapted.second is baz)
+
+
 IMyUtility = None
 def _makeMyUtility(name, sm):
     global IMyUtility

Modified: zope.component/tseaver-test_cleanup/src/zope/component/tests/test_doctests.py
===================================================================
--- zope.component/tseaver-test_cleanup/src/zope/component/tests/test_doctests.py	2012-06-18 18:17:11 UTC (rev 126956)
+++ zope.component/tseaver-test_cleanup/src/zope/component/tests/test_doctests.py	2012-06-18 18:17:15 UTC (rev 126957)
@@ -165,64 +165,6 @@
         if interface is IComponentLookup:
             return self.sitemanager
 
-def testMultiAdapter():
-    """Adapting a combination of 2 objects to an interface
-
-    Multi-adapters adapt one or more objects to another interface. To make
-    this demonstration non-trivial, we need to create a second object to be
-    adapted:
-
-      >>> from zope.component.testing import setUp, tearDown
-      >>> setUp()
-      >>> ob2 = Ob2()
-
-    Like for regular adapters, if an adapter isn't registered for the given
-    objects and interface, and you provide no default, raise
-    `ComponentLookupError`...
-
-      >>> component.getMultiAdapter((ob, ob2), I3) \\
-      ... #doctest: +NORMALIZE_WHITESPACE
-      Traceback (most recent call last):
-      ...
-      ComponentLookupError:
-      ((<instance Ob>, <instance Ob2>),
-       <InterfaceClass zope.component.tests.test_doctests.I3>,
-       u'')
-
-    ...otherwise, you get the default
-
-      >>> component.queryMultiAdapter((ob, ob2), I3, default='<default>')
-      '<default>'
-
-    Note that the name is not a required attribute here.
-
-    To test multi-adapters, we also have to create an adapter class that
-    handles to context objects:
-
-      >>> class DoubleAdapter(object):
-      ...     interface.implements(I3)
-      ...     def __init__(self, first, second):
-      ...         self.first = first
-      ...         self.second = second
-
-    Now we can register the multi-adapter using
-
-      >>> component.getGlobalSiteManager().registerAdapter(
-      ...     DoubleAdapter, (I1, I2), I3, '')
-
-    Notice how the required interfaces are simply provided by a tuple. Now we
-    can get the adapter:
-
-      >>> adapter = component.getMultiAdapter((ob, ob2), I3)
-      >>> adapter.__class__ is DoubleAdapter
-      True
-      >>> adapter.first is ob
-      True
-      >>> adapter.second is ob2
-      True
-      >>> tearDown()
-    """
-
 def testAdapterForInterfaceNone():
     """Providing an adapter for None says that your adapter can adapt anything
     to `I2`.



More information about the checkins mailing list