Your IP : 172.28.240.42


Current Path : /usr/lib/python2.7/dist-packages/zope/interface/tests/
Upload File :
Current File : //usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyc


Kc@sdZddlZddlZddlZddlmZdejjfdYZ	de	fdYZ
dejjfd	YZd
efdYZdejjfd
YZ
de
fdYZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZed krej d!d"ndS(#sSAdapter registry tests

$Id: test_adapter.py 110736 2010-04-11 10:59:30Z regebro $
iN(tAdapterRegistrytIF0cBseZRS((t__name__t
__module__(((sE/usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyRstIF1cBseZRS((RR(((sE/usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyRstIB0cBseZRS((RR(((sE/usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyRstIB1cBseZRS((RR(((sE/usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyRstIR0cBseZRS((RR(((sE/usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyR"stIR1cBseZRS((RR(((sE/usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyR$scCsdS(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'scCsdS(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_matchesBscCsdS(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.pyttest_multi_adapter_w_default^scCsdS(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.pyt9test_multi_adapter_w_inherited_and_multiple_registrationssscCsdS(sQuery 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.pyttest_named_adapter_with_defaultscCsdS(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_providedscCsdS(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.pyt6test_multi_adapter_check_non_default_dont_hide_defaultscCsdS(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_NonescCsdS(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.pyt8test_adapter_registry_update_upon_interface_bases_changescCsdS(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.pyttest_changing_declarationsscCsdS(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(scCsdS(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.pyttest_duplicate_bases1scCsdS(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.pyttest_register_objects_with_cmpDscCsdS(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[scCsdS(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_emptiesxscCs;tjtjddddddidd6tjfS(	Ns../adapter.txts../adapter.ru.txts../human.txts../human.ru.txtsfoodforthought.txttglobst__main__R(tunittestt	TestSuitetdoctesttDocFileSuitetDocTestSuite(((sE/usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt
test_suites
RtdefaultTestR(!t__doc__RRtzope.interfacetzopetzope.interface.adapterRt	interfacet	InterfaceRRRRRRR	R
RRR
RRRRRRRRRRRRtmain(((sE/usr/lib/python2.7/dist-packages/zope/interface/tests/test_adapter.pyt<module>s8									7