+
    üÐjâd  ã                   ó‚  € R t ^ RIHt ^ RIHtHtHt ^ RIHt ^ RI	H
t
 ^ RIHtHt ^ RIHtHtHt ^ RIHt  ! R R	]
P(                  4      t ! R
 R]4      t ! R R]4      t]! ]4       ! R R]
P0                  4      4       t]! ]4       ! R R]
P0                  4      4       t ! R R]
P(                  4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t  ! R R]4      t!]! ]] ]!4       ! R  R!]
P0                  4      4       t"]! ]4       ! R" R#4      4       t# ! R$ R%4      t$ ! R& R']PJ                  ]$4      t& ! R( R)]PJ                  4      t' ! R* R+]4      t(]! ](4       ! R, R-]
P0                  4      4       t)]! ](4       ! R. R/]
P0                  4      4       t* ! R0 R14      t+ ! R2 R3]
P(                  4      t,]! ](4       ! R4 R5]
P0                  4      4       t- ! R6 R7]4      t. ! R8 R9]4      t/]! ].4       ! R: R;4      4       t0] ! R< R=4      4       t1 ! R> R?]$]PJ                  4      t2 ! R@ RA]$]PJ                  4      t3 ! RB RC]4      t4 ! RD RE]44      t5]! ]44       ! RF RG4      4       t6]! ]54       ! RH RI4      4       t7 ! RJ RK]4      t8 ! RL RM4      t9 ! RN RO]PJ                  4      t:RP# )Qz0
Test cases for Twisted component architecture.
)Úwraps)Ú	AttributeÚ	InterfaceÚimplementer)ÚAdapterRegistry)Ú
components)ÚcmpÚ
comparable)Ú_addHookÚ_removeHookÚproxyForInterface)Úunittestc                   ó*   a € ] tR t^t o ^ tR tRtV tR# )ÚCompoc                óJ   € V P                   ^,           V n         V P                   # ©é   ©Únum©Úselfs   &ÚE/usr/lib/python3/dist-packages/twisted/python/test/test_components.pyÚincÚ	Compo.inc   s   € Ø—8‘8˜a•<ˆŒØ�x‰xˆó    r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r      s   ø‡ € Ø
€C÷ð r   r   c                   ó&   a € ] tR t^t o R tRtV tR# )ÚIAdeptc                 ó   € \        4       h©N)ÚNotImplementedError© r   r   ÚadaptorFuncÚIAdept.adaptorFunc   s   € Ü!Ó#Ð#r   r(   N)r   r   r   r   r)   r   r    r!   s   @r   r$   r$      s   ø‡ € ÷$ð $r   r$   c                   ó&   a € ] tR t^"t o R tRtV tR# )ÚIElapsedc                 ó   € R# )z
1!
Nr(   r(   r   r   ÚelapsedFuncÚIElapsed.elapsedFunc#   ó   ‚ r   r(   N©r   r   r   r   r.   r   r    r!   s   @r   r,   r,   "   s   ø‡ € ÷ð r   r,   c                   ó,   a € ] tR t^)t o R tR tRtV tR# )ÚAdeptc                ó    € Wn         ^ V n        R# ©é    N©Úoriginalr   ©r   Úorigs   &&r   Ú__init__ÚAdept.__init__+   s   € ØŒØˆŽr   c                ó~   € V P                   ^,           V n         V P                   V P                  P                  4       3# r   )r   r8   r   r   s   &r   r)   ÚAdept.adaptorFunc/   s-   € Ø—8‘8˜a•<ˆŒØ�x‰x˜Ÿ™×*Ñ*Ó,Ð,Ð,r   )r   r8   N)r   r   r   r   r;   r)   r   r    r!   s   @r   r3   r3   )   s   ø‡ € ò÷-ð -r   r3   c                   ó&   a € ] tR t^4t o R tRtV tR# )ÚElapsedc                ó   € ^# r   r(   r   s   &r   r.   ÚElapsed.elapsedFunc6   s   € Ùr   r(   Nr1   r!   s   @r   r@   r@   4   s   ø‡ € ÷ð r   r@   c                   ó   € ] tR t^:tRtR# )ÚACompr(   N©r   r   r   r   r   r(   r   r   rD   rD   :   ó   † Ûr   rD   c                   ó   € ] tR t^>tRtR# )ÚBCompr(   NrE   r(   r   r   rH   rH   >   rF   r   rH   c                   ó   € ] tR t^BtRtR# )ÚCCompr(   NrE   r(   r   r   rJ   rJ   B   rF   r   rJ   c                   ó   € ] tR t^FtRtR# )ÚITestr(   NrE   r(   r   r   rL   rL   F   rF   r   rL   c                   ó   € ] tR t^JtRtR# )ÚITest2r(   NrE   r(   r   r   rN   rN   J   rF   r   rN   c                   ó   € ] tR t^NtRtR# )ÚITest3r(   NrE   r(   r   r   rP   rP   N   rF   r   rP   c                   ó   € ] tR t^RtRtR# )ÚITest4r(   NrE   r(   r   r   rR   rR   R   rF   r   rR   c                   ó&   a € ] tR t^Vt o R tRtV tR# )ÚTestc                ó   € R # r&   r(   r9   s   &&r   r;   ÚTest.__init__X   ó   € Ùr   r(   N©r   r   r   r   r;   r   r    r!   s   @r   rT   rT   V   s   ø‡ € ÷ð r   rT   c                   ó*   a € ] tR t^\t o ^tR tRtV tR# )ÚTest2c                ó   € R # r&   r(   r9   s   &&r   r;   ÚTest2.__init__`   rW   r   r(   N)r   r   r   r   ÚtemporaryAdapterr;   r   r    r!   s   @r   rZ   rZ   \   s   ø‡ € àÐ÷ð r   rZ   c                   ó*   a € ] tR t^dt o RtR tRtV tR# )ÚRegistryUsingMixinz@
Mixin for test cases which modify the global registry somehow.
c                óŠ   € \        4       pV P                  \        RV4       \        V4      pV P	                  \
        V4       R# )zs
Configure L{twisted.python.components.registerAdapter} to mutate an
alternate registry to improve test isolation.
ÚglobalRegistryN)r   Úpatchr   r
   Ú
addCleanupr   )r   ÚscratchRegistryÚhooks   &  r   ÚsetUpÚRegistryUsingMixin.setUpi   s7   € ô *Ó+ˆØ�
‰
”:Ð/°ÔAô ˜Ó(ˆØ�‰œ TÖ*r   r(   N)r   r   r   r   Ú__doc__rf   r   r    r!   s   @r   r_   r_   d   s   ø‡ € ñ÷+ð +r   r_   c                   ó`   a € ] tR t^yt o RtR tR tR tR tR t	R t
R tR	 tR
 tR tRtV tR# )ÚComponentizedTestsz0
Simple test case for caching in Componentized.
c                ó  € \         P                  V 4       \        P                  ! \        \
        \        4       \        P                  ! \        \
        \        4       \        P                  ! \        \
        \        4       R # r&   )
r_   rf   r   ÚregisterAdapterrT   rD   rL   rP   rZ   rN   r   s   &r   rf   ÚComponentizedTests.setUp~   sF   € Ü× Ñ  Ô&ä×"Ò"¤4¬´Ô6Ü×"Ò"¤4¬´Ô7Ü×"Ò"¤5¬%´Ö8r   c                ó¤  € \         P                  ! \        \        \        4       \         P                  ! \
        \        \        4       \        4       pVP                  \        4      P                  4       R8X  g   Q hVP                  \        4      P                  4       R8X  g   Q h\        \	        V4      4      P                  4       ^8X  g   Q hR# )r   N)r   r   )é   ro   )
r   rl   r3   r   r$   r@   r,   ÚgetComponentr)   r.   ©r   Úcs   & r   ÚtestComponentizedÚ$ComponentizedTests.testComponentized…   s�   € Ü×"Ò"¤5¬%´Ô8Ü×"Ò"¤7¬E´8Ô<ä‹GˆØ�~‰~œfÓ%×1Ñ1Ó3°vÔ=Ð=Ð=Ø�~‰~œfÓ%×1Ñ1Ó3°vÔ=Ð=Ð=Üœ˜q›	Ó"×.Ñ.Ó0°AÔ5Ð5Ò5r   c                óp  € \        4       pVP                  \        4      pVP                  \        4      pVP                  \        4      pVP                  \        4      pW#J g   Q hWEJg   Q hVP	                  V4       VP                  \        4      pVP                  \        4      pWgJ g   Q hW&Jg   Q hR # r&   )rJ   rp   rL   rN   ÚremoveComponent)r   rr   Úco1Úco2Úco3Úco4Úco5Úco6s   &       r   ÚtestInheritanceAdaptationÚ,ComponentizedTests.testInheritanceAdaptationŽ   s“   € Ü‹GˆØ�n‰nœUÓ#ˆØ�n‰nœUÓ#ˆØ�n‰nœVÓ$ˆØ�n‰nœVÓ$ˆØ‹zÐˆzØ‹~Ðˆ~Ø	×Ñ˜#ÔØ�n‰nœUÓ#ˆØ�n‰nœUÓ#ˆØ‹zÐˆzØ‹~ÐŠ~r   c                óÜ   € \        4       pVP                  \        4      pVP                  \        4      pVP                  \        4      pV P                  V4       V P                  W#4       R # r&   )rJ   rp   rL   rP   rR   ÚassertIsNoneÚassertIs)r   rr   rw   ry   rz   s   &    r   ÚtestMultiAdapterÚ#ComponentizedTests.testMultiAdapterœ   sM   € Ü‹GˆØ�n‰nœUÓ#ˆØ�n‰nœVÓ$ˆØ�n‰nœVÓ$ˆØ×Ñ˜#ÔØ�‰�cÖr   c                ó(  € \         P                  ! 4       p\        4       pV P                  VP	                  \
        V4      V4       V P                  VP	                  \
        VR7      V4       V P                  VP	                  \
        4      R4       R# )zy
Test that a default value specified to Componentized.getComponent if
there is no component for the requested interface.
)ÚdefaultN)r   ÚComponentizedÚobjectr�   rp   rL   )r   Úcomponentizedr…   s   &  r   Útest_getComponentDefaultsÚ,ComponentizedTests.test_getComponentDefaults¤   sk   € ô
 #×0Ò0Ó2ˆÜ“(ˆØ�‰�m×0Ñ0´¸Ó@À'ÔJØ�‰�m×0Ñ0´ÀÐ0ÓHÈ'ÔRØ�‰�m×0Ñ0´Ó7¸Ö>r   c                óò   € \         P                  ! 4       pVP                  \        \        4       VP                  \        4      pV P                  VP                  V4       V P                  V\        4       R# )zv
C{Componentized.setAdapter} sets a component for an interface by
wrapping the instance with the given adapter class.
N)	r   r†   Ú
setAdapterr$   r3   rp   ÚassertEqualr8   ÚassertIsInstance©r   rˆ   Ú	components   &  r   Útest_setAdapterÚ"ComponentizedTests.test_setAdapter¯   sX   € ô
 #×0Ò0Ó2ˆØ× Ñ ¤¬Ô/Ø!×.Ñ.¬vÓ6ˆ	Ø×Ñ˜×+Ñ+¨]Ô;Ø×Ñ˜i¬Ö/r   c                óì   € \         P                  ! 4       pVP                  \        RR7       VP	                  \
        4      pV P                  VP                  V4       V P                  V\        4       R# )z€
C{Componentized.setAdapter} adapts the instance by wrapping it with
given adapter class, then stores it using C{addComponent}.
T)ÚignoreClassN)	r   r†   Ú
addAdapterr3   rp   r$   r�   r8   rŽ   r�   s   &  r   Útest_addAdapterÚ"ComponentizedTests.test_addAdapterº   s[   € ô
 #×0Ò0Ó2ˆØ× Ñ ¤°DÐ Ô9Ø!×.Ñ.¬vÓ6ˆ	Ø×Ñ˜×+Ñ+¨]Ô;Ø×Ñ˜i¬Ö/r   c                óº   € \         P                  ! 4       p\        4       pVP                  \        V4       V P                  VP                  \        4      V4       R# )z`
C{Componentized.setComponent} stores the given component using the
given interface as the key.
N)r   r†   r‡   ÚsetComponentrL   r�   rp   ©r   rˆ   Úobjs   &  r   Útest_setComponentÚ$ComponentizedTests.test_setComponentÅ   sB   € ô
 #×0Ò0Ó2ˆÜ‹hˆØ×"Ñ"¤5¨#Ô.Ø�‰�m×0Ñ0´Ó7¸Ö=r   c                óâ   € \         P                  ! 4       p\        4       pVP                  \        V4       VP                  \        4       V P                  VP                  \        4      4       R# )zU
C{Componentized.setComponent} removes the cached component for the
given interface.
N)r   r†   r‡   r™   rL   ÚunsetComponentr€   rp   rš   s   &  r   Útest_unsetComponentÚ&ComponentizedTests.test_unsetComponentÏ   sP   € ô
 #×0Ò0Ó2ˆÜ‹hˆØ×"Ñ"¤5¨#Ô.Ø×$Ñ$¤UÔ+Ø×Ñ˜-×4Ñ4´UÓ;Ö<r   c                óº   € \         P                  ! 4       pVP                  \        R4       \	        V4      pV P                  RV4       V P                  RV4       R# )zB
C{ReprableComponentized} has a C{__repr__} that lists its cache.
ÚhellorL   N)r   ÚReprableComponentizedr™   rL   ÚreprÚassertIn)r   ÚrcÚresults   &  r   Útest_reprableComponentizedÚ-ComponentizedTests.test_reprableComponentizedÚ   sE   € ô ×-Ò-Ó/ˆØ
�‰œ˜wÔ'Ü�b“ˆØ�‰�g˜vÔ&Ø�‰�g˜vÖ&r   r(   N)r   r   r   r   rh   rf   rs   r}   r‚   r‰   r‘   r–   rœ   r    r©   r   r    r!   s   @r   rj   rj   y   sA   ø‡ € ñò9ò6òò ò	?ò	0ò	0ò>ò	=÷'ð 'r   rj   c                   ó*   a € ] tR t^åt o RtR tRtV tR# )ÚAdapterTestszTest adapters.c                ó°   € \        4       p\        V4      pV P                  \        P                  \
        V4       V P                  \        VR 4      4       R # r&   )r‡   r3   ÚassertRaisesr   ÚCannotAdaptrL   r€   )r   ÚoÚas   &  r   ÚtestAdapterGetComponentÚ$AdapterTests.testAdapterGetComponentè   s>   € Ü‹HˆÜ�!‹HˆØ×Ñœ*×0Ñ0´%¸Ô;Ø×Ñœ%  4›.Ö)r   r(   N)r   r   r   r   rh   r²   r   r    r!   s   @r   r¬   r¬   å   s   ø‡ € Ù÷*ð *r   r¬   c                   ó   € ] tR t^ïtRtR# )ÚIMetar(   NrE   r(   r   r   rµ   rµ   ï   rF   r   rµ   c                   ó&   a € ] tR t^ót o R tRtV tR# )Ú	MetaAdderc                ó<   € V P                   P                  V,           # r&   r7   ©r   r   s   &&r   ÚaddÚMetaAdder.addõ   ó   € Ø�}‰}× Ñ  3Õ&Ð&r   r(   N©r   r   r   r   rº   r   r    r!   s   @r   r·   r·   ó   ó   ø‡ € ÷'ð 'r   r·   c                   ó&   a € ] tR t^ùt o R tRtV tR# )ÚBackwardsAdderc                ó<   € V P                   P                  V,
          # r&   r7   r¹   s   &&r   rº   ÚBackwardsAdder.addû   r¼   r   r(   Nr½   r!   s   @r   rÀ   rÀ   ù   r¾   r   rÀ   c                   ó*   a € ] tR t^ÿt o RtR tRtV tR# )Ú
MetaNumberz1
Integer wrapper for Interface adaptation tests.
c                ó   € Wn         R # r&   r   r¹   s   &&r   r;   ÚMetaNumber.__init__  s   € ØŽr   r   N)r   r   r   r   rh   r;   r   r    r!   s   @r   rÄ   rÄ   ÿ   s   ø‡ € ñ÷ð r   rÄ   c                   ó&   a € ] tR tRt o R tRtV tR# )ÚComponentNumberi  c                óR   € ^ V n         \        P                  P                  V 4       R# r5   )r   r   r†   r;   r   s   &r   r;   ÚComponentNumber.__init__	  s   € ØˆŒÜ× Ñ ×)Ñ)¨$Ö/r   r   NrX   r!   s   @r   rÈ   rÈ     s   ø‡ € ÷0ð 0r   rÈ   c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )ÚComponentAdderi  z(
Adder for componentized adapter tests.
c                óz   € \         P                  P                  W4       V P                  P                  V n        R # r&   )r   ÚAdapterr;   r8   r   ©r   r8   s   &&r   r;   ÚComponentAdder.__init__  s'   € Ü×Ñ×#Ñ# DÔ3Ø—=‘=×$Ñ$ˆŽr   c                óL   € V ;P                   V,          un         V P                   # r&   r   r¹   s   &&r   rº   ÚComponentAdder.add  s   € Ø�Š�C��Ø�x‰xˆr   r   N)	r   r   r   r   rh   r;   rº   r   r    r!   s   @r   rÌ   rÌ     s   ø‡ € ñò%÷ð r   rÌ   c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚIAttrXi  z5
Base interface for test of adapter with C{__cmp__}.
c                 ó   € R# )z
Return a value.
Nr(   r(   r   r   ÚxÚIAttrX.x"  r0   r   r(   N©r   r   r   r   rh   rÖ   r   r    r!   s   @r   rÔ   rÔ     ó   ø‡ € ñ÷ð r   rÔ   c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚIAttrXXi(  z8
Adapted interface for test of adapter with C{__cmp__}.
c                 ó   € R# )z
Return a tuple of values.
Nr(   r(   r   r   ÚxxÚ
IAttrXX.xx-  r0   r   r(   N)r   r   r   r   rh   rÝ   r   r    r!   s   @r   rÛ   rÛ   (  rÙ   r   rÛ   c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚXcellenti3  z?
L{IAttrX} implementation for test of adapter with C{__cmp__}.
c                ó   € R# )z#
Return a value.

@return: a value
úx!r(   r   s   &r   rÖ   Ú
Xcellent.x9  s   € ñ r   r(   NrØ   r!   s   @r   rà   rà   3  s   ø‡ € ñ÷ð r   rà   c                   ó:   a € ] tR tRt o Rt^*tR tR tR tRt	V t
R# )ÚDoubleXAdapteriB  z
Adapter with __cmp__.
c                ó   € Wn         R # r&   ©r8   rÏ   s   &&r   r;   ÚDoubleXAdapter.__init__J  s   € Ø Žr   c                ój   € V P                   P                  4       V P                   P                  4       3# r&   )r8   rÖ   r   s   &r   rÝ   ÚDoubleXAdapter.xxM  s#   € Ø—‘—‘Ó! 4§=¡=§?¡?Ó#4Ð5Ð5r   c                óB   € \        V P                  VP                  4      # r&   )r   r   )r   Úothers   &&r   Ú__cmp__ÚDoubleXAdapter.__cmp__P  s   € Ü�4—8‘8˜UŸY™YÓ'Ð'r   rç   N)r   r   r   r   rh   r   r;   rÝ   rí   r   r    r!   s   @r   rå   rå   B  s%   ø‡ € ñð €Cò!ò6÷(ð (r   rå   c                   ó2   a € ] tR tRt o R tR tR tRtV tR# )ÚMetaInterfaceTestsiT  c                ó¸   € \         P                  ! \        \        \        4       \        ^4      pV P                  \	        V4      P                  ^4      ^4       R# )zC
Registered adapters can be used to adapt classes to an interface.
N)r   rl   r·   rÄ   rµ   r�   rº   )r   Úns   & r   Ú
test_basicÚMetaInterfaceTests.test_basicU  s;   € ô 	×"Ò"¤9¬j¼%Ô@Ü�q‹MˆØ×Ñœ˜q›Ÿ™ a›¨!Ö,r   c                ó  € \         P                  ! \        \        \        4       \        4       p\	        V4      P                  ^4       \	        V4      P                  ^4       V P                  \	        V4      P                  ^4      ^4       R# )r   N)r   rl   rÌ   rÈ   rµ   rº   r�   rq   s   & r   ÚtestComponentizedInteractionÚ/MetaInterfaceTests.testComponentizedInteraction]  sV   € Ü×"Ò"¤>´?ÄEÔJÜÓˆÜˆa‹�‰�QŒÜˆa‹�‰�QŒØ×Ñœ˜q›Ÿ™ a›¨!Ö,r   c                ó´   € \         P                  ! \        \        \        4       \	        \        4       4      pV P                  RVP                  4       4       R# )râ   N)râ   râ   )r   rl   rå   rÔ   rÛ   rà   r�   rÝ   )r   rÝ   s   & r   ÚtestAdapterWithCmpÚ%MetaInterfaceTests.testAdapterWithCmpd  s6   € ä×"Ò"¤>´6¼7ÔCÜ”X“ZÓ ˆØ×Ñ˜ r§u¡u£wÖ/r   r(   N)	r   r   r   r   ró   rö   rù   r   r    r!   s   @r   rð   rð   T  s   ø‡ € ò-ò-÷0ð 0r   rð   c                   ó~   a € ] tR tRt o RtR tR tR tR tR t	R t
R	 tR
 tR tR tR tR tR tR tR tRtV tR# )ÚRegistrationTestsik  z!
Tests for adapter registration.
c                óš   € R p\         P                  ! W!\        4       V P                  \         P                  ! V\        R4      V4       R# )z¬
Register an adapter with L{components.registerAdapter} for the given
class or interface and verify that the adapter can be looked up with
L{components.getAdapterFactory}.
c                 ó   € R # r&   r(   ©r°   s   &r   Ú<lambda>ÚGRegistrationTests._registerAdapterForClassOrInterface.<locals>.<lambda>v  ó   € ™Dr   N©r   rl   rL   r�   ÚgetAdapterFactory©r   r8   Úadapters   && r   Ú#_registerAdapterForClassOrInterfaceÚ5RegistrationTests._registerAdapterForClassOrInterfacep  s6   € ñ !ˆÜ×"Ò" 7´eÔ<Ø�‰”j×2Ò2°8¼UÀDÓIÈ7ÖSr   c                ó8   €  ! R R4      pV P                  V4      # )zI
Test that an adapter from a class can be registered and then looked
up.
c                   ó   € ] tR tRtRtR# )ÚCRegistrationTests.test_registerAdapterForClass.<locals>.TheOriginali€  r(   NrE   r(   r   r   ÚTheOriginalr  €  ó   † Ûr   r  )r  ©r   r  s   & r   Útest_registerAdapterForClassÚ.RegistrationTests.test_registerAdapterForClassz  s   € ÷	ñ 	ð ×7Ñ7¸ÓDÐDr   c                ó,   € V P                  \        4      # )zN
Test that an adapter from an interface can be registered and then
looked up.
)r  rN   r   s   &r   Ú test_registerAdapterForInterfaceÚ2RegistrationTests.test_registerAdapterForInterface…  s   € ð
 ×7Ñ7¼Ó?Ð?r   c                óô   € R pR p\         P                  ! W!\        4       V P                  \        \         P                  W1\        4       V P                  \         P                  ! V\        R4      V4       R# )z€
Verify that L{components.registerAdapter} raises L{ValueError} if the
from-type/interface and to-interface pair is not unique.
c                 ó   € R # ©Fr(   rÿ   s   &r   r   ÚHRegistrationTests._duplicateAdapterForClassOrInterface.<locals>.<lambda>‘  ó   € ¡r   c                 ó   € R # ©Tr(   rÿ   s   &r   r   r  ’  ó   € ¡$r   N)r   rl   rL   r®   Ú
ValueErrorr�   r  )r   r8   ÚfirstAdapterÚsecondAdapters   &&  r   Ú$_duplicateAdapterForClassOrInterfaceÚ6RegistrationTests._duplicateAdapterForClassOrInterfaceŒ  sZ   € ñ
 'ˆÙ&ˆÜ×"Ò" <¼5ÔAØ×ÑÜœ
×2Ñ2°MÌUô	
ð 	�‰”j×2Ò2°8¼UÀDÓIÈ<ÖXr   c                ó8   €  ! R R4      pV P                  V4      # )zb
Test that attempting to register a second adapter from a class
raises the appropriate exception.
c                   ó   € ] tR tRtRtR# )ÚDRegistrationTests.test_duplicateAdapterForClass.<locals>.TheOriginali   r(   NrE   r(   r   r   r  r#     r  r   r  )r  r  s   & r   Útest_duplicateAdapterForClassÚ/RegistrationTests.test_duplicateAdapterForClassš  s   € ÷	ñ 	ð ×8Ñ8¸ÓEÐEr   c                ó,   € V P                  \        4      # )zg
Test that attempting to register a second adapter from an interface
raises the appropriate exception.
)r  rN   r   s   &r   Ú!test_duplicateAdapterForInterfaceÚ3RegistrationTests.test_duplicateAdapterForInterface¥  s   € ð
 ×8Ñ8¼Ó@Ð@r   c                óÂ  € R pR p ! R R\         4      p\        P                  ! W!V4       R\        n         \        P                  ! W1V4       V P	                  \        P
                  ! WR4      V4       R\        n        V P                  \        \        P                  W!V4       V P	                  \        P
                  ! WR4      V4       R#   R\        n        i ; i)z¶
Verify that when C{components.ALLOW_DUPLICATES} is set to C{True}, new
adapter registrations for a particular from-type/interface and
to-interface pair replace older registrations.
c                 ó   € R # r  r(   rÿ   s   &r   r   ÚORegistrationTests._duplicateAdapterForClassOrInterfaceAllowed.<locals>.<lambda>²  r  r   c                 ó   € R # r  r(   rÿ   s   &r   r   r+  ³  r  r   c                   ó   € ] tR tRtRtR# )ÚSRegistrationTests._duplicateAdapterForClassOrInterfaceAllowed.<locals>.TheInterfaceiµ  r(   NrE   r(   r   r   ÚTheInterfacer.  µ  r  r   r/  TNF)r   r   rl   ÚALLOW_DUPLICATESr�   r  r®   r  )r   r8   r  r  r/  s   &&   r   Ú+_duplicateAdapterForClassOrInterfaceAllowedÚ=RegistrationTests._duplicateAdapterForClassOrInterfaceAllowed¬  s½   € ñ 'ˆÙ&ˆô	œ9ô 	ô 	×"Ò" <¸<ÔHØ&*Œ
Ô#ð	0Ü×&Ò& }ÀÔMØ�M‰MÜ×,Ò,¨XÀTÓJØôð
 +0ŒJÔ'ð 	×ÑÜœ
×2Ñ2°LÈLô	
ð 	�‰Ü×(Ò(¨ÀÓFÈö	
øð +0ŒJÕ'ús   ¹>C ÃCc                ó8   €  ! R R4      pV P                  V4      # )zŸ
Test that when L{components.ALLOW_DUPLICATES} is set to a true
value, duplicate registrations from classes are allowed to override
the original registration.
c                   ó   € ] tR tRtRtR# )ÚKRegistrationTests.test_duplicateAdapterForClassAllowed.<locals>.TheOriginaliÓ  r(   NrE   r(   r   r   r  r5  Ó  r  r   r  )r1  r  s   & r   Ú$test_duplicateAdapterForClassAllowedÚ6RegistrationTests.test_duplicateAdapterForClassAllowedÌ  s   € ÷	ñ 	ð ×?Ñ?ÀÓLÐLr   c                óB   €  ! R R\         4      pV P                  V4      # )z¢
Test that when L{components.ALLOW_DUPLICATES} is set to a true
value, duplicate registrations from interfaces are allowed to
override the original registration.
c                   ó   € ] tR tRtRtR# )ÚORegistrationTests.test_duplicateAdapterForInterfaceAllowed.<locals>.TheOriginaliß  r(   NrE   r(   r   r   r  r:  ß  r  r   r  )r   r1  r  s   & r   Ú(test_duplicateAdapterForInterfaceAllowedÚ:RegistrationTests.test_duplicateAdapterForInterfaceAllowedØ  s!   € ô	œ)ô 	ð ×?Ñ?ÀÓLÐLr   c                óü   € R p\         P                  ! W!\        \        4       V P	                  \         P
                  ! V\        R4      V4       V P	                  \         P
                  ! V\        R4      V4       R# )zP
Verify that an adapter can be registered for multiple to-interfaces at a
time.
c                 ó   € R # r&   r(   rÿ   s   &r   r   ÚJRegistrationTests._multipleInterfacesForClassOrInterface.<locals>.<lambda>é  r  r   N)r   rl   rL   rN   r�   r  r  s   && r   Ú&_multipleInterfacesForClassOrInterfaceÚ8RegistrationTests._multipleInterfacesForClassOrInterfaceä  sU   € ñ
 !ˆÜ×"Ò" 7´e¼VÔDØ�‰”j×2Ò2°8¼UÀDÓIÈ7ÔSØ�‰”j×2Ò2°8¼VÀTÓJÈGÖTr   c                ó8   €  ! R R4      pV P                  V4      # )zQ
Test the registration of an adapter from a class to several
interfaces at once.
c                   ó   € ] tR tRtRtR# )ÚFRegistrationTests.test_multipleInterfacesForClass.<locals>.TheOriginaliô  r(   NrE   r(   r   r   r  rD  ô  r  r   r  )r@  r  s   & r   Útest_multipleInterfacesForClassÚ1RegistrationTests.test_multipleInterfacesForClassî  s   € ÷	ñ 	ð ×:Ñ:¸;ÓGÐGr   c                ó,   € V P                  \        4      # )zV
Test the registration of an adapter from an interface to several
interfaces at once.
)r@  rP   r   s   &r   Ú#test_multipleInterfacesForInterfaceÚ5RegistrationTests.test_multipleInterfacesForInterfaceù  s   € ð
 ×:Ñ:¼6ÓBÐBr   c                óD  € R pR p ! R RV4      p\         P                  ! W!\        4       \         P                  ! W4\        4       V P                  \         P                  ! V\        R4      V4       V P                  \         P                  ! V\        R4      V4       R# )zø
Verify that a new adapter can be registered for a particular
to-interface from a subclass of a type or interface which already has an
adapter registered to that interface and that the subclass adapter takes
precedence over the base class adapter.
c                 ó   € R # r  r(   rÿ   s   &r   r   ÚSRegistrationTests._subclassAdapterRegistrationForClassOrInterface.<locals>.<lambda>  s   € ¡r   c                 ó   € R # r  r(   rÿ   s   &r   r   rL    s   € ¡%r   c                   ó   € ] tR tRtRtR# )ÚVRegistrationTests._subclassAdapterRegistrationForClassOrInterface.<locals>.TheSubclassi
  r(   NrE   r(   r   r   ÚTheSubclassrO  
  r  r   rP  Nr  )r   r8   r  r  rP  s   &&   r   Ú/_subclassAdapterRegistrationForClassOrInterfaceÚARegistrationTests._subclassAdapterRegistrationForClassOrInterface   sy   € ñ &ˆÙ'ˆô	˜(ô 	ô 	×"Ò" <¼5ÔAÜ×"Ò" =¼uÔEØ�‰”j×2Ò2°8¼UÀDÓIÈ<ÔXØ�‰Ü×(Ò(¨´e¸TÓBÀMö	
r   c                ó8   €  ! R R4      pV P                  V4      # )zf
Test that an adapter to a particular interface can be registered
from both a class and its subclass.
c                   ó   € ] tR tRtRtR# )ÚORegistrationTests.test_subclassAdapterRegistrationForClass.<locals>.TheOriginali  r(   NrE   r(   r   r   r  rU    r  r   r  )rQ  r  s   & r   Ú(test_subclassAdapterRegistrationForClassÚ:RegistrationTests.test_subclassAdapterRegistrationForClass  s   € ÷	ñ 	ð ×CÑCÀKÓPÐPr   c                ó,   € V P                  \        4      # )zk
Test that an adapter to a particular interface can be registered
from both an interface and its subclass.
)rQ  rN   r   s   &r   Ú,test_subclassAdapterRegistrationForInterfaceÚ>RegistrationTests.test_subclassAdapterRegistrationForInterface  s   € ð
 ×CÑCÄFÓKÐKr   r(   N)r   r   r   r   rh   r  r  r  r  r$  r'  r1  r6  r;  r@  rE  rH  rQ  rV  rY  r   r    r!   s   @r   rü   rü   k  si   ø‡ € ñòTò	Eò@òYò	FòAò
ò@
Mò
MòUò	HòCò
ò(	Q÷Lð Lr   rü   c                   ó:   a € ] tR tRt o Rt]! R4      tR tRtV t	R# )ÚIProxiedInterfacei'  z5
An interface class for use by L{proxyForInterface}.
z@
        An example declared attribute, which should be proxied.c                 ó   € R# )z*
A sample method which should be proxied.
Nr(   )r±   Úkws   *,r   ÚyayÚIProxiedInterface.yay1  r0   r   r(   N)
r   r   r   r   rh   r   ÚifaceAttributer_  r   r    r!   s   @r   r\  r\  '  s&   ø‡ € ññ ð	Có€N÷
ð r   r\  c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚIProxiedSubInterfacei7  zK
An interface that derives from another for use with L{proxyForInterface}.
c                 ó   € R# )z4
A different sample method which should be proxied.
Nr(   r(   r   r   ÚbooÚIProxiedSubInterface.boo<  r0   r   r(   N©r   r   r   r   rh   re  r   r    r!   s   @r   rc  rc  7  rÙ   r   rc  c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )ÚYayableiB  z’
A provider of L{IProxiedInterface} which increments a counter for
every call to C{yay}.

@ivar yays: The number of times C{yay} has been called.
c                ó"   € ^ V n         . V n        R# r5   )ÚyaysÚyayArgsr   s   &r   r;   ÚYayable.__init__M  s   € ØˆŒ	ØˆŽr   c                ó„   € V ;P                   ^,          un         V P                  P                  W34       V P                   # )z
Increment C{self.yays}.
)rk  rl  Úappend©r   r±   r^  s   &*,r   r_  ÚYayable.yayQ  s/   € ð 	�	Š	�Q��	Ø�‰×Ñ˜Q˜GÔ$Ø�y‰yÐr   )rl  rk  N)	r   r   r   r   rh   r;   r_  r   r    r!   s   @r   ri  ri  B  s   ø‡ € ñò÷ð r   ri  c                   ó8   a € ] tR tRt o RtRtRtR tR tRt	V t
R# )ÚBooableiZ  z+
An implementation of IProxiedSubInterface
Fc                ó   € RV n         R# )z+
Mark the fact that 'yay' has been called.
TN)Úyayedrp  s   &*,r   r_  ÚBooable.yaye  ó   € ð ˆŽ
r   c                ó   € RV n         R# )z,
Mark the fact that 'boo' has been called.1
TN)Úbooedr   s   &r   re  ÚBooable.book  rw  r   )ry  ru  N)r   r   r   r   rh   ru  ry  r_  re  r   r    r!   s   @r   rs  rs  Z  s%   ø‡ € ñð €EØ€Eò÷ð r   rs  c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )ÚIMultipleMethodsir  z%
An interface with multiple methods.
c                 ó   € R# )z$
The first method. Should return 1.
Nr(   r(   r   r   Ú	methodOneÚIMultipleMethods.methodOnew  r0   r   c                 ó   € R# )z%
The second method. Should return 2.
Nr(   r(   r   r   Ú	methodTwoÚIMultipleMethods.methodTwo|  r0   r   r(   N©	r   r   r   r   rh   r~  r�  r   r    r!   s   @r   r|  r|  r  s   ø‡ € ñò÷
ð r   r|  c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )ÚMultipleMethodImplementori‚  z2
A precise implementation of L{IMultipleMethods}.
c                ó   € ^# )z
@return: 1
r(   r   s   &r   r~  Ú#MultipleMethodImplementor.methodOne‡  ó   € ñ r   c                ó   € ^# )z
@return: 2
r(   r   s   &r   r�  Ú#MultipleMethodImplementor.methodTwo�  rˆ  r   r(   Nrƒ  r!   s   @r   r…  r…  ‚  s   ø‡ € ñò÷ð r   r…  c                   óx   a € ] tR tRt o RtR tR tR tR tR t	R t
R	 tR
 tR tR tR tR tR tR tRtV tR# )ÚProxyForInterfaceTestsi”  z!
Tests for L{proxyForInterface}.
c                ó|   € \        4       p\        \        4      ! V4      pV P                  VP                  V4       R# )zs
Proxy objects should have an C{original} attribute which refers to the
original object passed to the constructor.
N)r‡   r   r\  r�   r8   )r   r8   Úproxys   &  r   Útest_originalÚ$ProxyForInterfaceTests.test_original™  s-   € ô
 “8ˆÜ!Ô"3Ô4°XÓ>ˆØ�‰�e—n‘n hÖ/r   c                óà   € \        \        4      p\        4       pV! V4      pVP                  4        V P	                  VP                  4       ^4       V P	                  VP
                  ^4       R# )z~
The class created from L{proxyForInterface} passes methods on an
interface to the object which is passed to its constructor.
N©r   r\  ri  r_  r�   rk  )r   ÚklassÚyayablerŽ  s   &   r   Útest_proxyMethodÚ'ProxyForInterfaceTests.test_proxyMethod¢  sR   € ô
 "Ô"3Ó4ˆÜ“)ˆÙ�g“ˆØ�	‰	ŒØ×Ñ˜Ÿ™› aÔ(Ø×Ñ˜Ÿ™ qÖ)r   c                ó¾   a€ \        \        4      o ! V3R lRS4      p\        4       pV! V4      pVP                  4        V P	                  ^VP
                  4       R# )zr
Methods of the class created from L{proxyForInterface} can be used with
the decorator-helper L{functools.wraps}.
c                   óZ   <a € ] tR tRt o ]!  ZP
                  4      V3R l4       tRtV tR# )Ú?ProxyForInterfaceTests.test_decoratedProxyMethod.<locals>.klassiµ  c                ól   <€ V P                   ;P                  ^,          un        SP                  V 4      # r   )r8   rk  r_  )r   Úbases   &€r   r_  ÚCProxyForInterfaceTests.test_decoratedProxyMethod.<locals>.klass.yay¶  s&   ø€ à—‘×"Ò" aÕ'Õ"Ø—x‘x “~Ð%r   r(   N)r   r   r   r   r   r_  r   r    )r"   r›  s   @€r   r“  r™  µ  s   ù‡ € Ù‘4—8‘8‹_ô&ó ö&r   r“  Nr’  )r   r“  r8   r”  r›  s   &   @r   Útest_decoratedProxyMethodÚ0ProxyForInterfaceTests.test_decoratedProxyMethod®  sK   ø€ ô
 !Ô!2Ó3ˆ÷	&�Dô 	&ô “9ˆÙ˜“/ˆØ�‰ŒØ×Ñ˜˜HŸM™MÖ*r   c                óä   a€ \        4       p\        4       Vn        \        \        4      ! V4      oV P                  SP                  VP                  4       V P                  \        V3R l4       R# )zK
Proxy objects should proxy declared attributes, but not other
attributes.
c                  ó   <€ S P                   # r&   )rk  )rŽ  s   €r   r   Ú<ProxyForInterfaceTests.test_proxyAttribute.<locals>.<lambda>É  s	   ø€ °%·*²*r   N)ri  r‡   ra  r   r\  r�   r®   ÚAttributeError©r   r”  rŽ  s   & @r   Útest_proxyAttributeÚ*ProxyForInterfaceTests.test_proxyAttributeÀ  sQ   ø€ ô
 “)ˆÜ!'£ˆÔÜ!Ô"3Ô4°WÓ=ˆØ�‰�e×*Ñ*¨G×,BÑ,BÔCØ×Ñœ.Ô*<Ö=r   c                óœ   € \        4       p\        \        4      ! V4      p\        4       pW2n        V P                  VP                  V4       R# )z^
The attributes that proxy objects proxy should be assignable and affect
the original object.
N)ri  r   r\  r‡   ra  r�   ©r   r”  rŽ  Úthingys   &   r   Útest_proxySetAttributeÚ-ProxyForInterfaceTests.test_proxySetAttributeË  s<   € ô
 “)ˆÜ!Ô"3Ô4°WÓ=ˆÜ“ˆØ%ÔØ�‰�g×,Ñ,¨fÖ5r   c                óŒ   € \        4       pRVn        \        \        4      ! V4      pV=V P	                  \        VR4      4       R# )z]
The attributes that proxy objects proxy should be deletable and affect
the original object.
Nra  )ri  ra  r   r\  ÚassertFalseÚhasattrr£  s   &  r   Útest_proxyDeleteAttributeÚ0ProxyForInterfaceTests.test_proxyDeleteAttributeÖ  s?   € ô
 “)ˆØ!%ˆÔÜ!Ô"3Ô4°WÓ=ˆØÐ Ø×Ñœ Ð*:Ó;Ö<r   c                óÄ   € \        4       p\        \        4      ! V4      pV P                  VP	                  4       ^4       V P                  VP                  4       ^4       R# )zh
[Regression test] The proxy should send its method calls to the correct
method, not the incorrect one.
N)r…  r   r|  r�   r~  r�  )r   ÚmultirŽ  s   &  r   Útest_multipleMethodsÚ+ProxyForInterfaceTests.test_multipleMethodsá  sJ   € ô
 *Ó+ˆÜ!Ô"2Ô3°EÓ:ˆØ×Ñ˜Ÿ™Ó*¨AÔ.Ø×Ñ˜Ÿ™Ó*¨AÖ.r   c                óê   €  ! R R\        \        4      4      p\        4       pV! V4      pV P                  VP                  ^ 4       VP                  4        V P                  VP                  R4       R# )z@
It is possible to subclass the result of L{proxyForInterface}.
c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚAProxyForInterfaceTests.test_subclassing.<locals>.SpecializedProxyið  z=
A specialized proxy which can decrement the number of yays.
c                óL   € V P                   ;P                  ^,          un        R# )z
Decrement the number of yays.
N)r8   rk  r   s   &r   re  ÚEProxyForInterfaceTests.test_subclassing.<locals>.SpecializedProxy.booõ  s   € ð —‘×"Ò" aÕ'×"r   r(   Nrg  r!   s   @r   ÚSpecializedProxyr¶  ð  s   ø‡ € ñ÷(ð (r   r¹  Néÿÿÿÿ)r   r\  ri  r�   rk  re  )r   r¹  r”  Úspecials   &   r   Útest_subclassingÚ'ProxyForInterfaceTests.test_subclassingë  sY   € ô
		(Ô0Ô1BÓCô 		(ô “)ˆÙ" 7Ó+ˆØ×Ñ˜Ÿ™ qÔ)Ø�‰ŒØ×Ñ˜Ÿ™ rÖ*r   c                ó\   € \        \        4      pV P                  VP                  R4       R# )zA
The name of a proxy class indicates which interface it proxies.
zA(Proxy for twisted.python.test.test_components.IProxiedInterface)N)r   r\  r�   r   ©r   rŽ  s   & r   Útest_proxyNameÚ%ProxyForInterfaceTests.test_proxyName  s'   € ô "Ô"3Ó4ˆØ×ÑØ�N‰NØRö	
r   c                ól   € \        \        4      pV P                  \        P                  V4      4       R# )z?
The resulting proxy implements the interface that it proxies.
N)r   r\  Ú
assertTrueÚimplementedByr¿  s   & r   Útest_implementsÚ&ProxyForInterfaceTests.test_implements  s'   € ô "Ô"3Ó4ˆØ�‰Ô)×7Ñ7¸Ó>Ö?r   c                ó.  €  ! R R4      pV! 4       pV! 4       pW2n         \        P                  ! RR4      pV P                  VP	                  V4      VP
                  4       VP	                  R4      pV! V4       V P                  VP                  4       R# )aô  
_ProxyDescriptor's __get__ method should return the appropriate
attribute of its argument's 'original' attribute if it is invoked with
an object.  If it is invoked with None, it should return a false
class-method emulator instead.

For some reason, Python's documentation recommends to define
descriptors' __get__ methods with the 'type' parameter as optional,
despite the fact that Python itself never actually calls the descriptor
that way.  This is probably do to support 'foo.__get__(bar)' as an
idiom.  Let's make sure that the behavior is correct.  Since we don't
actually use the 'type' argument at all, this test calls it the
idiomatic way to ensure that signature works; test_proxyInheritance
verifies the how-Python-actually-calls-it signature.
c                   ó*   a € ] tR tRt o RtR tRtV tR# )Ú>ProxyForInterfaceTests.test_proxyDescriptorGet.<locals>.Samplei#  Fc                ó   € R V n         R# )TN©Úcalledr   s   &r   r£   ÚDProxyForInterfaceTests.test_proxyDescriptorGet.<locals>.Sample.hello&  s	   € Ø"�–r   rË  N)r   r   r   r   rÌ  r£   r   r    r!   s   @r   ÚSamplerÉ  #  s   ø‡ € ØˆF÷#ð #r   rÎ  r£   r8   N)r8   r   Ú_ProxyDescriptorr�   Ú__get__r£   rÃ  rÌ  )r   rÎ  Ú	fakeProxyÚ
testObjectÚpdÚfakeClassMethods   &     r   Útest_proxyDescriptorGetÚ.ProxyForInterfaceTests.test_proxyDescriptorGet  s{   € ÷"	#ñ 	#ñ “Hˆ	Ù“Xˆ
Ø'ÔÜ×(Ò(¨°*Ó=ˆØ×Ñ˜Ÿ™ IÓ.°
×0@Ñ0@ÔAØŸ*™* TÓ*ˆÙ˜	Ô"Ø�‰˜
×)Ñ)Ö*r   c           	     ó  a€  ! R R\        \        4      4      o ! V3R lRS4      p\        4       pV! V4      pV P                  VP	                  ^^^^R7      ^4       V P                  VP
                  R\        ^^R7      3.4       R# )zŸ
Subclasses of the class returned from L{proxyForInterface} should be
able to upcall methods by reference to their superclass, as any normal
Python class can.
c                   ó   € ] tR tRtRtRtR# )ÚDProxyForInterfaceTests.test_proxyInheritance.<locals>.YayableWrapperi9  z1
This class does not override any functionality.
r(   N)r   r   r   r   rh   r   r(   r   r   ÚYayableWrapperrÙ  9  s   † õr   rÚ  c                   ó6   <a € ] tR tRt o Rt^tV3R ltRtV tR# )ÚEProxyForInterfaceTests.test_proxyInheritance.<locals>.EnhancedWrapperi>  z(
This class overrides the 'yay' method.
c                óp   <€ V ;P                   ^,          un         SP                  ! V .VO5/ VB ^,           # r   )ÚwrappedYaysr_  )r   r±   ÚkrÚ  s   &*,€r   r_  ÚIProxyForInterfaceTests.test_proxyInheritance.<locals>.EnhancedWrapper.yayE  s4   ø€ Ø× Ò  AÕ%Õ Ø%×)Ò)¨$Ð8°Ò8°aÑ8¸1Õ<Ð<r   r(   N)	r   r   r   r   rh   rÞ  r_  r   r    )r"   rÚ  s   @€r   ÚEnhancedWrapperrÜ  >  s   ù‡ € ñð ˆK÷=ó =r   rá  )rÖ   ÚyN)é   é   )r   r\  ri  r�   r_  rl  Údict)r   rá  r”  ÚwrapperrÚ  s   &   @r   Útest_proxyInheritanceÚ,ProxyForInterfaceTests.test_proxyInheritance2  sx   ø€ ô	Ô.Ô/@ÓAô 	÷
		=˜nô 		=ô “)ˆÙ! 'Ó*ˆØ×Ñ˜Ÿ™ Q¨¨Q°!˜Ó4°aÔ8Ø×Ñ˜Ÿ™¨F´D¸1À´NÐ+CÐ*DÖEr   c                óô   € \        \        4      p\        4       pV! V4      pVP                  4        VP	                  4        V P                  VP                  4       V P                  VP                  4       R# )zˆ
Proxies of subinterfaces generated with proxyForInterface should allow
access to attributes of both the child and the base interfaces.
N)r   rc  rs  r_  re  rÃ  ru  ry  )r   Ú
proxyClassÚbooablerŽ  s   &   r   Útest_interfaceInheritanceÚ0ProxyForInterfaceTests.test_interfaceInheritanceN  sR   € ô
 'Ô';Ó<ˆ
Ü“)ˆÙ˜7Ó#ˆØ�	‰	ŒØ�	‰	ŒØ�‰˜Ÿ™Ô&Ø�‰˜Ÿ™Ö&r   c                ó¼  € \        4       p\        4       Vn        \        \        RR7      ! V4      pV P                  VP                  V4       V P                  VP                  4       ^4       V P                  VP                  VP                  4       \        4       pW2n        V P                  VP                  V4       V=V P                  \        VR4      4       R# )zñ
The original attribute name can be customized via the
C{originalAttribute} argument of L{proxyForInterface}: the attribute
should change, but the methods of the original object should still be
callable, and the attributes still accessible.
Úfoo)ÚoriginalAttributera  N)ri  r‡   ra  r   r\  r�   rï  r�   r_  r¬  r­  r§  s   &   r   Útest_attributeCustomizationÚ2ProxyForInterfaceTests.test_attributeCustomization[  s¨   € ô “)ˆÜ!'£ˆÔÜ!Ô"3ÀuÕMÈgÓVˆØ�‰�e—i‘i Ô)ð 	×Ñ˜Ÿ™› aÔ(Ø�‰�e×*Ñ*¨G×,BÑ,BÔCÜ“ˆØ%ÔØ�‰�g×,Ñ,¨fÔ5ØÐ Ø×Ñœ Ð*:Ó;Ö<r   r(   N)r   r   r   r   rh   r�  r•  r�  r¤  r©  r®  r²  r¼  rÀ  rÅ  rÕ  rç  rì  rñ  r   r    r!   s   @r   rŒ  rŒ  ”  sX   ø‡ € ñò0ò
*ò+ò$	>ò	6ò	=ò/ò+ò,
ò@ò+ò@Fò8'÷=ð =r   rŒ  N);rh   Ú	functoolsr   Úzope.interfacer   r   r   Úzope.interface.adapterr   Útwisted.pythonr   Útwisted.python.compatr   r	   Útwisted.python.componentsr
   r   r   Útwisted.trialr   r†   r   r$   r,   rÎ   r3   r@   rD   rH   rJ   rL   rN   rP   rR   rT   rZ   r_   ÚSynchronousTestCaserj   r¬   rµ   r·   rÀ   rÄ   rÈ   rÌ   rÔ   rÛ   rà   rå   rð   rü   r\  rc  ri  rs  r|  r…  rŒ  r(   r   r   Ú<module>rû     s  ðñ
õ
 ç <Ñ <Ý 2å %ß 1ß NÑ NÝ "ôˆJ×$Ñ$ô ô$ˆYô $ô
ˆyô ñ ˆVÓô-ˆJ×Ñó -ó ð-ñ ˆXÓôˆj× Ñ ó ó ðô
	ˆJ×$Ñ$ô 	ô	ˆEô 	ô	ˆEô 	ô	ˆIô 	ô	ˆYô 	ô	ˆYô 	ô	ˆYô 	ñ ˆU�F˜FÓ#ôˆ:×Ñó ó $ðñ
 ˆVÓ÷ð ó ð÷+ñ +ô*i'˜×5Ñ5Ð7Iô i'ôX*�8×/Ñ/ô *ô	ˆIô 	ñ ˆUÓô'�
×"Ñ"ó 'ó ð'ñ
 ˆUÓô'�Z×'Ñ'ó 'ó ð'÷
ñ ô0�j×.Ñ.ô 0ñ ˆUÓô�Z×'Ñ'ó ó ðôˆYô ôˆiô ñ ˆVÓ÷ð ó ðð ÷(ð (ó ð(ô"0Ð+¨X×-IÑ-Iô 0ô.yLÐ*¨H×,HÑ,Hô yLôx˜	ô ô Ð,ô ñ ÐÓ÷ð ó  ðñ. Ð!Ó"÷ð ó #ðô.�yô ÷ ñ ô$Z=˜X×9Ñ9ö Z=r   