
Kc           @   s  d  Z  d d l Z d d l Z d d l Z d d l m Z d e j j f d     YZ	 d e	 f d     YZ
 d e j j f d	     YZ d
 e f d     YZ d e j j f d     YZ d e f d     YZ d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e d  k re j  d! d"  n  d S(#   sS   Adapter registry tests

$Id: test_adapter.py 110736 2010-04-11 10:59:30Z regebro $
iN(   t   AdapterRegistryt   IF0c           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyR      s   t   IF1c           B   s   e  Z RS(    (   R   R   (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyR      s   t   IB0c           B   s   e  Z RS(    (   R   R   (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyR      s   t   IB1c           B   s   e  Z RS(    (   R   R   (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyR      s   t   IR0c           B   s   e  Z RS(    (   R   R   (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyR   "   s   t   IR1c           B   s   e  Z RS(    (   R   R   (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyR   $   s   c           C   s   d S(   sb  
    >>> registry = AdapterRegistry()

    >>> class IB2(IB0):
    ...     pass
    >>> class IB3(IB2, IB1):
    ...     pass
    >>> class IB4(IB1, IB2):
    ...     pass

    >>> registry.register([None, IB1], IR0, '', 'A1')
    >>> registry.register([None, IB0], IR0, '', 'A0')
    >>> registry.register([None, IB2], IR0, '', 'A2')

    >>> registry.lookup((IF1, IB1), IR0, '')
    'A1'
    >>> registry.lookup((IF1, IB2), IR0, '')
    'A2'
    >>> registry.lookup((IF1, IB0), IR0, '')
    'A0'
    >>> registry.lookup((IF1, IB3), IR0, '')
    'A2'
    >>> registry.lookup((IF1, IB4), IR0, '')
    'A1'
    N(    (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt!   test_multi_adapter_get_best_match'   s    c           C   s   d S(   s  
    >>> registry = AdapterRegistry()

    >>> class IB2(IB0):
    ...     pass
    >>> class IB3(IB2, IB1):
    ...     pass
    >>> class IB4(IB1, IB2):
    ...     pass

    >>> registry.register([None, IB1], IR0, '', 'A1')
    >>> registry.register([None, IB0], IR0, '', 'A0')
    >>> registry.register([None, IB2], IR0, '', 'A2')

    >>> tuple(registry.lookupAll((IF1, IB1), IR0))[0][1]
    'A1'
    >>> tuple(registry.lookupAll((IF1, IB2), IR0))[0][1]
    'A2'
    >>> tuple(registry.lookupAll((IF1, IB0), IR0))[0][1]
    'A0'
    >>> tuple(registry.lookupAll((IF1, IB3), IR0))[0][1]
    'A2'
    >>> tuple(registry.lookupAll((IF1, IB4), IR0))[0][1]
    'A1'
    N(    (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt-   test_multi_adapter_lookupAll_get_best_matchesB   s    c           C   s   d S(   s  
    >>> registry = AdapterRegistry()
    
    >>> registry.register([None, None], IB1, 'bob', 'A0')

    >>> registry.lookup((IF1, IR1), IB0, 'bob')
    'A0'
    
    >>> registry.register([None, IR0], IB1, 'bob', 'A1')

    >>> registry.lookup((IF1, IR1), IB0, 'bob')
    'A1'
    
    >>> registry.lookup((IF1, IR1), IB0, 'bruce')

    >>> registry.register([None, IR1], IB1, 'bob', 'A2')
    >>> registry.lookup((IF1, IR1), IB0, 'bob')
    'A2'
    N(    (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt   test_multi_adapter_w_default^   s    c           C   s   d S(   s  
    >>> registry = AdapterRegistry()

    >>> class IX(zope.interface.Interface):
    ...    pass

    >>> registry.register([IF0, IR0], IB1, 'bob', 'A1')
    >>> registry.register([IF1, IX], IB1, 'bob', 'AX')

    >>> registry.lookup((IF1, IR1), IB0, 'bob')
    'A1'
    N(    (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt9   test_multi_adapter_w_inherited_and_multiple_registrationss   s    c           C   s   d S(   s  Query a named simple adapter

    >>> registry = AdapterRegistry()

    If we ask for a named adapter, we won't get a result unless there
    is a named adapter, even if the object implements the interface:

    >>> registry.lookup([IF1], IF0, 'bob')

    >>> registry.register([None], IB1, 'bob', 'A1')
    >>> registry.lookup([IF1], IB0, 'bob')
    'A1'

    >>> registry.lookup([IF1], IB0, 'bruce')

    >>> registry.register([None], IB0, 'bob', 'A2')
    >>> registry.lookup([IF1], IB0, 'bob')
    'A2'
    N(    (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt   test_named_adapter_with_default   s    c           C   s   d S(   s7  
    >>> registry = AdapterRegistry()
    >>> registry.register([IF1, IR0], IB0, 'bob', 'A1')
    >>> registry.register((IF1, IR0), IB1, 'bob', 'A2')
    >>> registry.lookup((IF1, IR1), IB0, 'bob')
    'A1'

    >>> registry = AdapterRegistry()
    >>> registry.register([IF1, IR0], IB1, 'bob', 'A2')
    >>> registry.register([IF1, IR0], IB0, 'bob', 'A1')
    >>> registry.lookup([IF1, IR0], IB0, 'bob')
    'A1'

    >>> registry = AdapterRegistry()
    >>> registry.register([IF1, IR0], IB0, 'bob', 'A1')
    >>> registry.register([IF1, IR1], IB1, 'bob', 'A2')
    >>> registry.lookup([IF1, IR1], IB0, 'bob')
    'A2'

    >>> registry = AdapterRegistry()
    >>> registry.register([IF1, IR1], IB1, 'bob', 2)
    >>> registry.register([IF1, IR0], IB0, 'bob', 1)
    >>> registry.lookup([IF1, IR1], IB0, 'bob')
    2
    N(    (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt(   test_multi_adapter_gets_closest_provided   s    c           C   s   d S(   s  
    >>> registry = AdapterRegistry()

    >>> class IX(zope.interface.Interface):
    ...     pass


    >>> registry.register([None, IR0], IB0, 'bob', 1)
    >>> registry.register([IF1,   IX], IB0, 'bob', 2)
    >>> registry.lookup([IF1, IR1], IB0, 'bob')
    1
    N(    (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt6   test_multi_adapter_check_non_default_dont_hide_default   s    c           C   s   d S(   sf  
    >>> registry = AdapterRegistry()
    >>> default = object()
    
    >>> class Object1(object):
    ...     zope.interface.implements(IF0)
    >>> class Object2(object):
    ...     zope.interface.implements(IF0)

    >>> def factory(context):
    ...     if isinstance(context, Object1):
    ...         return 'adapter'
    ...     return None

    >>> registry.register([IF0], IB0, '', factory)

    >>> registry.adapter_hook(IB0, Object1())
    'adapter'
    >>> registry.adapter_hook(IB0, Object2()) is None
    True
    >>> registry.adapter_hook(IB0, Object2(), default=default) is default
    True
    N(    (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt-   test_adapter_hook_with_factory_producing_None   s    c           C   s   d S(   s  
    Let's first create a adapter registry and a simple adaptation hook:

    >>> globalRegistry = AdapterRegistry()

    >>> def _hook(iface, ob, lookup=globalRegistry.lookup1):
    ...     factory = lookup(zope.interface.providedBy(ob), iface)
    ...     if factory is None:
    ...         return None
    ...     else:
    ...         return factory(ob)

    >>> zope.interface.interface.adapter_hooks.append(_hook)

    Now we create some interfaces and an implementation:

    >>> class IX(zope.interface.Interface):
    ...   pass

    >>> class IY(zope.interface.Interface):
    ...   pass

    >>> class X(object):
    ...  pass

    >>> class Y(object):
    ...  zope.interface.implements(IY)
    ...  def __init__(self, original):
    ...   self.original=original

    and register an adapter:

    >>> globalRegistry.register((IX,), IY, '', Y)

    at first, we still expect the adapter lookup from `X` to `IY` to fail:

    >>> IY(X()) #doctest: +NORMALIZE_WHITESPACE +ELLIPSIS
    Traceback (most recent call last):
    ...
    TypeError: ('Could not adapt',
                <zope.interface.tests.test_adapter.X object at ...>,
                <InterfaceClass zope.interface.tests.test_adapter.IY>)

    But after we declare an interface on the class `X`, it should pass:

    >>> zope.interface.classImplementsOnly(X, IX)

    >>> IY(X()) #doctest: +ELLIPSIS
    <zope.interface.tests.test_adapter.Y object at ...>

    >>> hook = zope.interface.interface.adapter_hooks.pop()
    N(    (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt8   test_adapter_registry_update_upon_interface_bases_change   s    c           C   s   d S(   s  

    If we change declarations for a class, those adapter lookup should
    eflect the changes:

    >>> class I1(zope.interface.Interface):
    ...     pass
    >>> class I2(zope.interface.Interface):
    ...     pass

    >>> registry = AdapterRegistry()
    >>> registry.register([I1], I2, '', 42)

    >>> class C:
    ...     pass

    >>> registry.lookup([zope.interface.implementedBy(C)], I2, '')

    >>> zope.interface.classImplements(C, I1)

    >>> registry.lookup([zope.interface.implementedBy(C)], I2, '')
    42
    N(    (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt   test_changing_declarations  s    c           C   s   d S(   s   
    >>> registry = AdapterRegistry()
    >>> registry.register([IF0, IB1], IR0, '', 'A01')
    >>> registry.register([IF1, IB0], IR0, '', 'A10')
    >>> registry.lookup((IF1, IB1), IR0, '')
    'A10'
    N(    (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt!   test_correct_multi_adapter_lookup(  s    c           C   s   d S(   s  
There was a bug that caused problems if a spec had multiple bases:

    >>> class I(zope.interface.Interface):
    ...     pass
    >>> class I2(I, I):
    ...     pass
    >>> registry = AdapterRegistry()
    >>> registry.register([I2], IR0, 'x', 'X')
    >>> registry.lookup((I2, ), IR0, 'x')
    'X'
    >>> registry.register([I2], IR0, 'y', 'Y')
    >>> registry.lookup((I2, ), IR0, 'x')
    'X'
    >>> registry.lookup((I2, ), IR0, 'y')
    'Y'
N(    (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt   test_duplicate_bases1  s    c           C   s   d S(   sb  
    The registry should never use == as that will tend to fail when
    objects are picky about what they are compared with:

    >>> class Picky:
    ...     def __cmp__(self, other):
    ...         raise TypeError("I'm too picky for comparison!")
    >>> class I(zope.interface.Interface):
    ...     pass
    >>> class I2(I, I):
    ...     pass

    >>> registry = AdapterRegistry()
    >>> picky = Picky()
    >>> registry.register([I2], IR0, '', picky)
    >>> registry.unregister([I2], IR0, '', picky)

    >>> registry.subscribe([I2], IR0, picky)
    >>> registry.unsubscribe([I2], IR0, picky)

    N(    (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt   test_register_objects_with_cmpD  s    c           C   s   d S(   s  
    >>> class I(zope.interface.Interface):
    ...     pass
    >>> class IP(zope.interface.Interface):
    ...     pass
    >>> class C(object):
    ...     pass

    >>> registry = AdapterRegistry()

    >>> registry.register([], IP, '', C)
    >>> registry.register([I], IP, '', C)
    >>> registry.register([I], IP, 'name', C)
    >>> registry.register([I, I], IP, '', C)
    >>> len(registry._adapters)
    3
    >>> map(len, registry._adapters)
    [1, 1, 1]

    >>> registry.unregister([], IP, '', C)
    >>> registry.unregister([I], IP, '', C)
    >>> registry.unregister([I], IP, 'name', C)
    >>> registry.unregister([I, I], IP, '', C)
    >>> registry._adapters
    []

    N(    (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt!   test_unregister_cleans_up_empties[  s    c           C   s   d S(   sO  
    >>> class I1(zope.interface.Interface):
    ...     pass
    >>> class I2(zope.interface.Interface):
    ...     pass
    >>> class IP(zope.interface.Interface):
    ...     pass

    >>> registry = AdapterRegistry()
    >>> def handler(event):
    ...     pass

    >>> registry.subscribe([I1], I1, handler)
    >>> registry.subscribe([I2], I1, handler)
    >>> len(registry._subscribers)
    2
    >>> map(len, registry._subscribers)
    [0, 2]

    >>> registry.unsubscribe([I1], I1, handler)
    >>> registry.unsubscribe([I2], I1, handler)
    >>> registry._subscribers
    []

    N(    (    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt"   test_unsubscribe_cleans_up_emptiesx  s    c           C   s;   t  j t j d d d d d d i d d 6t j   f  S(	   Ns   ../adapter.txts   ../adapter.ru.txts   ../human.txts   ../human.ru.txts   foodforthought.txtt   globst   __main__R   (   t   unittestt	   TestSuitet   doctestt   DocFileSuitet   DocTestSuite(    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt
   test_suite  s    R   t   defaultTestR   (!   t   __doc__R   R   t   zope.interfacet   zopet   zope.interface.adapterR    t	   interfacet	   InterfaceR   R   R   R   R   R   R	   R
   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   t   main(    (    (    sE   /usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt   <module>   s8   									7									