ó
    Ö›‘hâd  ã                   ó€  • S r SSKJr  SSKJrJrJr  SSKJr  SSK	J
r
  SSKJrJr  SSKJrJrJr  SSKJr   " S	 S
\
R(                  5      r " S S\5      r " S S\5      r\" \5       " S S\
R0                  5      5       r\" \5       " S S\
R0                  5      5       r " S S\
R(                  5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r  " S S \5      r!\" \\ \!5       " S! S"\
R0                  5      5       r"\" \5       " S# S$5      5       r# " S% S&5      r$ " S' S(\RJ                  \$5      r& " S) S*\RJ                  5      r' " S+ S,\5      r(\" \(5       " S- S.\
R0                  5      5       r)\" \(5       " S/ S0\
R0                  5      5       r* " S1 S25      r+ " S3 S4\
R(                  5      r,\" \(5       " S5 S6\
R0                  5      5       r- " S7 S8\5      r. " S9 S:\5      r/\" \.5       " S; S<5      5       r0\ " S= S>5      5       r1 " S? S@\$\RJ                  5      r2 " SA SB\$\RJ                  5      r3 " SC SD\5      r4 " SE SF\45      r5\" \45       " SG SH5      5       r6\" \55       " SI SJ5      5       r7 " SK SL\5      r8 " SM SN5      r9 " SO SP\RJ                  5      r:gQ)Rz0
Test cases for Twisted component architecture.
é    )Úwraps)Ú	AttributeÚ	InterfaceÚimplementer)ÚAdapterRegistry)Ú
components)ÚcmpÚ
comparable)Ú_addHookÚ_removeHookÚproxyForInterface)Úunittestc                   ó   • \ rS rSrSrS rSrg)ÚCompoé   r   c                 óB   • U R                   S-   U l         U R                   $ ©Né   ©Únum©Úselfs    ÚgC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-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__© r   r   r   r      s   † Ø
€Cõr   r   c                   ó   • \ rS rSrS rSrg)ÚIAdepté   c                  ó   • [        5       e©N)ÚNotImplementedErrorr"   r   r   ÚadaptorFuncÚIAdept.adaptorFunc   s   € Ü!Ó#Ð#r   r"   N)r   r   r   r    r)   r!   r"   r   r   r$   r$      s   † õ$r   r$   c                   ó   • \ rS rSrS rSrg)ÚIElapsedé"   c                  ó   • g)z
1!
Nr"   r"   r   r   ÚelapsedFuncÚIElapsed.elapsedFunc#   ó   � r   r"   N©r   r   r   r    r/   r!   r"   r   r   r,   r,   "   s   † õr   r,   c                   ó    • \ rS rSrS rS rSrg)ÚAdepté)   c                 ó   • Xl         SU l        g ©Nr   ©Úoriginalr   ©r   Úorigs     r   Ú__init__ÚAdept.__init__+   s   € ØŒØˆ�r   c                 óv   • U R                   S-   U l         U R                   U R                  R                  5       4$ r   )r   r9   r   r   s    r   r)   ÚAdept.adaptorFunc/   s-   € Ø—8‘8˜a‘<ˆŒØ�x‰x˜Ÿ™×*Ñ*Ó,Ð,Ð,r   )r   r9   N)r   r   r   r    r<   r)   r!   r"   r   r   r4   r4   )   s   † òõ-r   r4   c                   ó   • \ rS rSrS rSrg)ÚElapsedé4   c                 ó   • gr   r"   r   s    r   r/   ÚElapsed.elapsedFunc6   s   € Ør   r"   Nr2   r"   r   r   rA   rA   4   s   † õr   rA   c                   ó   • \ rS rSrSrg)ÚACompé:   r"   N©r   r   r   r    r!   r"   r   r   rF   rF   :   ó   † Úr   rF   c                   ó   • \ rS rSrSrg)ÚBCompé>   r"   NrH   r"   r   r   rK   rK   >   rI   r   rK   c                   ó   • \ rS rSrSrg)ÚCCompéB   r"   NrH   r"   r   r   rN   rN   B   rI   r   rN   c                   ó   • \ rS rSrSrg)ÚITestéF   r"   NrH   r"   r   r   rQ   rQ   F   rI   r   rQ   c                   ó   • \ rS rSrSrg)ÚITest2éJ   r"   NrH   r"   r   r   rT   rT   J   rI   r   rT   c                   ó   • \ rS rSrSrg)ÚITest3éN   r"   NrH   r"   r   r   rW   rW   N   rI   r   rW   c                   ó   • \ rS rSrSrg)ÚITest4éR   r"   NrH   r"   r   r   rZ   rZ   R   rI   r   rZ   c                   ó   • \ rS rSrS rSrg)ÚTestéV   c                 ó   • g r'   r"   r:   s     r   r<   ÚTest.__init__X   ó   € Ør   r"   N©r   r   r   r    r<   r!   r"   r   r   r]   r]   V   s   † õr   r]   c                   ó   • \ rS rSrSrS rSrg)ÚTest2é\   r   c                 ó   • g r'   r"   r:   s     r   r<   ÚTest2.__init__`   ra   r   r"   N)r   r   r   r    ÚtemporaryAdapterr<   r!   r"   r   r   rd   rd   \   s   † àÐõr   rd   c                   ó   • \ rS rSrSrS rSrg)ÚRegistryUsingMixinéd   z@
Mixin for test cases which modify the global registry somehow.
c                 óˆ   • [        5       nU R                  [        SU5        [        U5      nU R	                  [
        U5        g)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__rr   r!   r"   r   r   rj   rj   d   s   † ñõ+r   rj   c                   óT   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)ÚComponentizedTestséy   z0
Simple test case for caching in Componentized.
c                 ó  • [         R                  U 5        [        R                  " [        [
        [        5        [        R                  " [        [
        [        5        [        R                  " [        [
        [        5        g r'   )
rj   rr   r   ÚregisterAdapterr]   rF   rQ   rW   rd   rT   r   s    r   rr   ÚComponentizedTests.setUp~   sF   € Ü× Ñ  Ô&ä×"Ò"¤4¬´Ô6Ü×"Ò"¤4¬´Ô7Ü×"Ò"¤5¬%´Õ8r   c                 óœ  • [         R                  " [        [        [        5        [         R                  " [
        [        [        5        [        5       nUR                  [        5      R                  5       S:X  d   eUR                  [        5      R                  5       S:X  d   e[        [	        U5      5      R                  5       S:X  d   eg )N)r   r   )é   r|   r   )
r   ry   r4   r   r$   rA   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                 óf  • [        5       nUR                  [        5      nUR                  [        5      nUR                  [        5      nUR                  [        5      nX#L d   eXELd   eUR	                  U5        UR                  [        5      nUR                  [        5      nXgL d   eX&Ld   eg r'   )rN   r}   rQ   rT   ÚremoveComponent)r   r   Ú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                 óÚ   • [        5       nUR                  [        5      nUR                  [        5      nUR                  [        5      nU R                  U5        U R                  X#5        g r'   )rN   r}   rQ   rW   rZ   ÚassertIsNoneÚassertIs)r   r   r„   r†   r‡   s        r   ÚtestMultiAdapterÚ#ComponentizedTests.testMultiAdapterœ   sM   € Ü‹GˆØ�n‰nœUÓ#ˆØ�n‰nœVÓ$ˆØ�n‰nœVÓ$ˆØ×Ñ˜#ÔØ�‰�cÕr   c                 ó   • [         R                  " 5       n[        5       nU R                  UR	                  [
        U5      U5        U R                  UR	                  [
        US9U5        U R                  UR	                  [
        5      S5        g)zy
Test that a default value specified to Componentized.getComponent if
there is no component for the requested interface.
)ÚdefaultN)r   ÚComponentizedÚobjectrŽ   r}   rQ   )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                 óð   • [         R                  " 5       nUR                  [        [        5        UR                  [        5      nU R                  UR                  U5        U R                  U[        5        g)zv
C{Componentized.setAdapter} sets a component for an interface by
wrapping the instance with the given adapter class.
N)	r   r“   Ú
setAdapterr$   r4   r}   ÚassertEqualr9   ÚassertIsInstance©r   r•   Ú	components      r   Útest_setAdapterÚ"ComponentizedTests.test_setAdapter¯   sX   € ô
 #×0Ò0Ó2ˆØ× Ñ ¤¬Ô/Ø!×.Ñ.¬vÓ6ˆ	Ø×Ñ˜×+Ñ+¨]Ô;Ø×Ñ˜i¬Õ/r   c                 óä   • [         R                  " 5       nUR                  [        SS9  UR	                  [
        5      nU R                  UR                  U5        U R                  U[        5        g)z€
C{Componentized.setAdapter} adapts the instance by wrapping it with
given adapter class, then stores it using C{addComponent}.
T)ÚignoreClassN)	r   r“   Ú
addAdapterr4   r}   r$   rš   r9   r›   rœ   s      r   Útest_addAdapterÚ"ComponentizedTests.test_addAdapterº   s[   € ô
 #×0Ò0Ó2ˆØ× Ñ ¤°DÐ Ñ9Ø!×.Ñ.¬vÓ6ˆ	Ø×Ñ˜×+Ñ+¨]Ô;Ø×Ñ˜i¬Õ/r   c                 ó¸   • [         R                  " 5       n[        5       nUR                  [        U5        U R                  UR                  [        5      U5        g)z`
C{Componentized.setComponent} stores the given component using the
given interface as the key.
N)r   r“   r”   ÚsetComponentrQ   rŽ   r}   ©r   r•   Úobjs      r   Útest_setComponentÚ$ComponentizedTests.test_setComponentÅ   sB   € ô
 #×0Ò0Ó2ˆÜ‹hˆØ×"Ñ"¤5¨#Ô.Ø�‰�m×0Ñ0´Ó7¸Õ=r   c                 óà   • [         R                  " 5       n[        5       nUR                  [        U5        UR                  [        5        U R                  UR                  [        5      5        g)zU
C{Componentized.setComponent} removes the cached component for the
given interface.
N)r   r“   r”   r¦   rQ   ÚunsetComponentr�   r}   r§   s      r   Útest_unsetComponentÚ&ComponentizedTests.test_unsetComponentÏ   sP   € ô
 #×0Ò0Ó2ˆÜ‹hˆØ×"Ñ"¤5¨#Ô.Ø×$Ñ$¤UÔ+Ø×Ñ˜-×4Ñ4´UÓ;Õ<r   c                 ó¸   • [         R                  " 5       nUR                  [        S5        [	        U5      nU R                  SU5        U R                  SU5        g)zB
C{ReprableComponentized} has a C{__repr__} that lists its cache.
ÚhellorQ   N)r   ÚReprableComponentizedr¦   rQ   Ú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    rt   rr   r€   rŠ   r�   r–   rž   r£   r©   r­   r¶   r!   r"   r   r   rv   rv   y   s9   † ñò9ò6òò ò	?ò	0ò	0ò>ò	=õ'r   rv   c                   ó   • \ rS rSrSrS rSrg)ÚAdapterTestséå   zTest adapters.c                 ó®   • [        5       n[        U5      nU R                  [        R                  [
        U5        U R                  [        US 5      5        g r'   )r”   r4   ÚassertRaisesr   ÚCannotAdaptrQ   r�   )r   ÚoÚas      r   ÚtestAdapterGetComponentÚ$AdapterTests.testAdapterGetComponentè   s>   € Ü‹HˆÜ�!‹HˆØ×Ñœ*×0Ñ0´%¸Ô;Ø×Ñœ%  4›.Õ)r   r"   N)r   r   r   r    rt   rÀ   r!   r"   r   r   r¹   r¹   å   s
   † Ùõ*r   r¹   c                   ó   • \ rS rSrSrg)ÚIMetaéï   r"   NrH   r"   r   r   rÃ   rÃ   ï   rI   r   rÃ   c                   ó   • \ rS rSrS rSrg)Ú	MetaAdderéó   c                 ó4   • U R                   R                  U-   $ r'   r8   ©r   r   s     r   ÚaddÚMetaAdder.addõ   ó   € Ø�}‰}× Ñ  3Ñ&Ð&r   r"   N©r   r   r   r    rÊ   r!   r"   r   r   rÆ   rÆ   ó   ó   † õ'r   rÆ   c                   ó   • \ rS rSrS rSrg)ÚBackwardsAdderéù   c                 ó4   • U R                   R                  U-
  $ r'   r8   rÉ   s     r   rÊ   ÚBackwardsAdder.addû   rÌ   r   r"   NrÍ   r"   r   r   rÐ   rÐ   ù   rÎ   r   rÐ   c                   ó   • \ rS rSrSrS rSrg)Ú
MetaNumberéÿ   z1
Integer wrapper for Interface adaptation tests.
c                 ó   • Xl         g r'   r   rÉ   s     r   r<   ÚMetaNumber.__init__  s   € Ø�r   r   N)r   r   r   r    rt   r<   r!   r"   r   r   rÕ   rÕ   ÿ   s   † ñõr   rÕ   c                   ó   • \ rS rSrS rSrg)ÚComponentNumberi  c                 óP   • SU l         [        R                  R                  U 5        g r7   )r   r   r“   r<   r   s    r   r<   ÚComponentNumber.__init__	  s   € ØˆŒÜ× Ñ ×)Ñ)¨$Õ/r   r   Nrb   r"   r   r   rÚ   rÚ     s   † õ0r   rÚ   c                   ó$   • \ rS rSrSrS rS rSrg)ÚComponentAdderi  z(
Adder for componentized adapter tests.
c                 óx   • [         R                  R                  X5        U R                  R                  U l        g r'   )r   ÚAdapterr<   r9   r   ©r   r9   s     r   r<   ÚComponentAdder.__init__  s'   € Ü×Ñ×#Ñ# DÔ3Ø—=‘=×$Ñ$ˆ�r   c                 óD   • U =R                   U-  sl         U R                   $ r'   r   rÉ   s     r   rÊ   ÚComponentAdder.add  s   € Ø�Š�C‰�Ø�x‰xˆr   r   N)r   r   r   r    rt   r<   rÊ   r!   r"   r   r   rÞ   rÞ     s   † ñò%õr   rÞ   c                   ó   • \ rS rSrSrS rSrg)ÚIAttrXi  z5
Base interface for test of adapter with C{__cmp__}.
c                  ó   • g)z
Return a value.
Nr"   r"   r   r   ÚxÚIAttrX.x"  r1   r   r"   N©r   r   r   r    rt   rè   r!   r"   r   r   ræ   ræ     ó   † ñõr   ræ   c                   ó   • \ rS rSrSrS rSrg)ÚIAttrXXi(  z8
Adapted interface for test of adapter with C{__cmp__}.
c                  ó   • g)z
Return a tuple of values.
Nr"   r"   r   r   ÚxxÚ
IAttrXX.xx-  r1   r   r"   N)r   r   r   r    rt   rï   r!   r"   r   r   rí   rí   (  rë   r   rí   c                   ó   • \ rS rSrSrS rSrg)ÚXcellenti3  z?
L{IAttrX} implementation for test of adapter with C{__cmp__}.
c                 ó   • g)z#
Return a value.

@return: a value
úx!r"   r   s    r   rè   Ú
Xcellent.x9  s   € ð r   r"   Nrê   r"   r   r   rò   rò   3  s   † ñõr   rò   c                   ó.   • \ rS rSrSrSrS rS rS rSr	g)	ÚDoubleXAdapteriB  z
Adapter with __cmp__.
é*   c                 ó   • Xl         g r'   ©r9   rá   s     r   r<   ÚDoubleXAdapter.__init__J  s   € Ø �r   c                 ój   • U R                   R                  5       U R                   R                  5       4$ r'   )r9   rè   r   s    r   rï   ÚDoubleXAdapter.xxM  s#   € Ø—‘—‘Ó! 4§=¡=§?¡?Ó#4Ð5Ð5r   c                 óB   • [        U R                  UR                  5      $ r'   )r	   r   )r   Úothers     r   Ú__cmp__ÚDoubleXAdapter.__cmp__P  s   € Ü�4—8‘8˜UŸY™YÓ'Ð'r   rú   N)
r   r   r   r    rt   r   r<   rï   r   r!   r"   r   r   r÷   r÷   B  s   † ñð €Cò!ò6õ(r   r÷   c                   ó&   • \ rS rSrS rS rS rSrg)ÚMetaInterfaceTestsiT  c                 ó¶   • [         R                  " [        [        [        5        [        S5      nU R                  [	        U5      R                  S5      S5        g)zC
Registered adapters can be used to adapt classes to an interface.
r   r|   N)r   ry   rÆ   rÕ   rÃ   rš   rÊ   )r   Úns     r   Ú
test_basicÚMetaInterfaceTests.test_basicU  s;   € ô 	×"Ò"¤9¬j¼%Ô@Ü�q‹MˆØ×Ñœ˜q›Ÿ™ a›¨!Õ,r   c                 ó  • [         R                  " [        [        [        5        [        5       n[	        U5      R                  S5        [	        U5      R                  S5        U R                  [	        U5      R                  S5      S5        g )Nr   é   )r   ry   rÞ   rÚ   rÃ   rÊ   rš   r~   s     r   ÚtestComponentizedInteractionÚ/MetaInterfaceTests.testComponentizedInteraction]  sV   € Ü×"Ò"¤>´?ÄEÔJÜÓˆÜˆa‹�‰�QŒÜˆa‹�‰�QŒØ×Ñœ˜q›Ÿ™ a›¨!Õ,r   c                 ó²   • [         R                  " [        [        [        5        [	        [        5       5      nU R                  SUR                  5       5        g )N)rô   rô   )r   ry   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   r   r  r  T  s   † ò-ò-õ0r   r  c                   ór   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rSrg)ÚRegistrationTestsik  z!
Tests for adapter registration.
c                 ó˜   • S n[         R                  " X![        5        U R                  [         R                  " U[        S5      U5        g)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                 ó   • g r'   r"   ©r¾   s    r   Ú<lambda>ÚGRegistrationTests._registerAdapterForClassOrInterface.<locals>.<lambda>v  ó   € ˜Dr   N©r   ry   rQ   rŽ   ÚgetAdapterFactory©r   r9   Úadapters      r   Ú#_registerAdapterForClassOrInterfaceÚ5RegistrationTests._registerAdapterForClassOrInterfacep  s6   € ñ !ˆÜ×"Ò" 7´eÔ<Ø�‰”j×2Ò2°8¼UÀDÓIÈ7ÕSr   c                 ó8   •  " S S5      nU R                  U5      $ )zI
Test that an adapter from a class can be registered and then looked
up.
c                   ó   • \ rS rSrSrg)ÚCRegistrationTests.test_registerAdapterForClass.<locals>.TheOriginali€  r"   NrH   r"   r   r   ÚTheOriginalr  €  ó   † Úr   r   )r  ©r   r   s     r   Útest_registerAdapterForClassÚ.RegistrationTests.test_registerAdapterForClassz  s   € ÷	ñ 	ð ×7Ñ7¸ÓDÐDr   c                 ó,   • U R                  [        5      $ )zN
Test that an adapter from an interface can be registered and then
looked up.
)r  rT   r   s    r   Ú test_registerAdapterForInterfaceÚ2RegistrationTests.test_registerAdapterForInterface…  s   € ð
 ×7Ñ7¼Ó?Ð?r   c                 óò   • S nS n[         R                  " X![        5        U R                  [        [         R                  X1[        5        U R                  [         R                  " U[        S5      U5        g)z€
Verify that L{components.registerAdapter} raises L{ValueError} if the
from-type/interface and to-interface pair is not unique.
c                 ó   • g©NFr"   r  s    r   r  ÚHRegistrationTests._duplicateAdapterForClassOrInterface.<locals>.<lambda>‘  ó   €  r   c                 ó   • g©NTr"   r  s    r   r  r+  ’  ó   €  $r   N)r   ry   rQ   r¼   Ú
ValueErrorrŽ   r  )r   r9   ÚfirstAdapterÚsecondAdapters       r   Ú$_duplicateAdapterForClassOrInterfaceÚ6RegistrationTests._duplicateAdapterForClassOrInterfaceŒ  sZ   € ñ
 'ˆÙ&ˆÜ×"Ò" <¼5ÔAØ×ÑÜœ
×2Ñ2°MÌUô	
ð 	�‰”j×2Ò2°8¼UÀDÓIÈ<ÕXr   c                 ó8   •  " S S5      nU R                  U5      $ )zb
Test that attempting to register a second adapter from a class
raises the appropriate exception.
c                   ó   • \ rS rSrSrg)ÚDRegistrationTests.test_duplicateAdapterForClass.<locals>.TheOriginali   r"   NrH   r"   r   r   r   r7     r!  r   r   )r3  r"  s     r   Útest_duplicateAdapterForClassÚ/RegistrationTests.test_duplicateAdapterForClassš  s   € ÷	ñ 	ð ×8Ñ8¸ÓEÐEr   c                 ó,   • U R                  [        5      $ )zg
Test that attempting to register a second adapter from an interface
raises the appropriate exception.
)r3  rT   r   s    r   Ú!test_duplicateAdapterForInterfaceÚ3RegistrationTests.test_duplicateAdapterForInterface¥  s   € ð
 ×8Ñ8¼Ó@Ð@r   c                 óÀ  • S nS n " S S[         5      n[        R                  " X!U5        S[        l         [        R                  " X1U5        U R	                  [        R
                  " XS5      U5        S[        l        U R                  [        [        R                  X!U5        U R	                  [        R
                  " XS5      U5        g! S[        l        f = f)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                 ó   • gr*  r"   r  s    r   r  ÚORegistrationTests._duplicateAdapterForClassOrInterfaceAllowed.<locals>.<lambda>²  r,  r   c                 ó   • gr.  r"   r  s    r   r  r?  ³  r/  r   c                   ó   • \ rS rSrSrg)ÚSRegistrationTests._duplicateAdapterForClassOrInterfaceAllowed.<locals>.TheInterfaceiµ  r"   NrH   r"   r   r   ÚTheInterfacerB  µ  r!  r   rC  TNF)r   r   ry   ÚALLOW_DUPLICATESrŽ   r  r¼   r0  )r   r9   r1  r2  rC  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   •  " S S5      nU R                  U5      $ )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                   ó   • \ rS rSrSrg)ÚKRegistrationTests.test_duplicateAdapterForClassAllowed.<locals>.TheOriginaliÓ  r"   NrH   r"   r   r   r   rI  Ó  r!  r   r   )rE  r"  s     r   Ú$test_duplicateAdapterForClassAllowedÚ6RegistrationTests.test_duplicateAdapterForClassAllowedÌ  s   € ÷	ñ 	ð ×?Ñ?ÀÓLÐLr   c                 óB   •  " S S[         5      nU R                  U5      $ )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                   ó   • \ rS rSrSrg)ÚORegistrationTests.test_duplicateAdapterForInterfaceAllowed.<locals>.TheOriginaliß  r"   NrH   r"   r   r   r   rN  ß  r!  r   r   )r   rE  r"  s     r   Ú(test_duplicateAdapterForInterfaceAllowedÚ:RegistrationTests.test_duplicateAdapterForInterfaceAllowedØ  s!   € ô	œ)ô 	ð ×?Ñ?ÀÓLÐLr   c                 óú   • S n[         R                  " X![        [        5        U R	                  [         R
                  " U[        S5      U5        U R	                  [         R
                  " U[        S5      U5        g)zP
Verify that an adapter can be registered for multiple to-interfaces at a
time.
c                 ó   • g r'   r"   r  s    r   r  ÚJRegistrationTests._multipleInterfacesForClassOrInterface.<locals>.<lambda>é  r  r   N)r   ry   rQ   rT   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   •  " S S5      nU R                  U5      $ )zQ
Test the registration of an adapter from a class to several
interfaces at once.
c                   ó   • \ rS rSrSrg)ÚFRegistrationTests.test_multipleInterfacesForClass.<locals>.TheOriginaliô  r"   NrH   r"   r   r   r   rX  ô  r!  r   r   )rT  r"  s     r   Útest_multipleInterfacesForClassÚ1RegistrationTests.test_multipleInterfacesForClassî  s   € ÷	ñ 	ð ×:Ñ:¸;ÓGÐGr   c                 ó,   • U R                  [        5      $ )zV
Test the registration of an adapter from an interface to several
interfaces at once.
)rT  rW   r   s    r   Ú#test_multipleInterfacesForInterfaceÚ5RegistrationTests.test_multipleInterfacesForInterfaceù  s   € ð
 ×:Ñ:¼6ÓBÐBr   c                 óB  • S nS n " S SU5      n[         R                  " X![        5        [         R                  " X4[        5        U R                  [         R                  " U[        S5      U5        U R                  [         R                  " U[        S5      U5        g)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                 ó   • gr.  r"   r  s    r   r  ÚSRegistrationTests._subclassAdapterRegistrationForClassOrInterface.<locals>.<lambda>  s   €  r   c                 ó   • gr*  r"   r  s    r   r  r`    s   €  %r   c                   ó   • \ rS rSrSrg)ÚVRegistrationTests._subclassAdapterRegistrationForClassOrInterface.<locals>.TheSubclassi
  r"   NrH   r"   r   r   ÚTheSubclassrc  
  r!  r   rd  Nr  )r   r9   r1  r2  rd  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   •  " S S5      nU R                  U5      $ )zf
Test that an adapter to a particular interface can be registered
from both a class and its subclass.
c                   ó   • \ rS rSrSrg)ÚORegistrationTests.test_subclassAdapterRegistrationForClass.<locals>.TheOriginali  r"   NrH   r"   r   r   r   ri    r!  r   r   )re  r"  s     r   Ú(test_subclassAdapterRegistrationForClassÚ:RegistrationTests.test_subclassAdapterRegistrationForClass  s   € ÷	ñ 	ð ×CÑCÀKÓPÐPr   c                 ó,   • U R                  [        5      $ )zk
Test that an adapter to a particular interface can be registered
from both an interface and its subclass.
)re  rT   r   s    r   Ú,test_subclassAdapterRegistrationForInterfaceÚ>RegistrationTests.test_subclassAdapterRegistrationForInterface  s   € ð
 ×CÑCÄFÓKÐKr   r"   N)r   r   r   r    rt   r  r#  r&  r3  r8  r;  rE  rJ  rO  rT  rY  r\  re  rj  rm  r!   r"   r   r   r  r  k  s`   † ñòTò	Eò@òYò	FòAò
ò@
Mò
MòUò	HòCò
ò(	QõLr   r  c                   ó.   • \ rS rSrSr\" S5      rS rSrg)ÚIProxiedInterfacei'  z5
An interface class for use by L{proxyForInterface}.
z@
        An example declared attribute, which should be proxied.c                  ó   • g)z*
A sample method which should be proxied.
Nr"   )r¿   Úkws     r   ÚyayÚIProxiedInterface.yay1  r1   r   r"   N)	r   r   r   r    rt   r   ÚifaceAttributers  r!   r"   r   r   rp  rp  '  s   † ññ ð	Có€Nõ
r   rp  c                   ó   • \ rS rSrSrS rSrg)ÚIProxiedSubInterfacei7  zK
An interface that derives from another for use with L{proxyForInterface}.
c                  ó   • g)z4
A different sample method which should be proxied.
Nr"   r"   r   r   ÚbooÚIProxiedSubInterface.boo<  r1   r   r"   N©r   r   r   r    rt   ry  r!   r"   r   r   rw  rw  7  rë   r   rw  c                   ó$   • \ rS rSrSrS rS rSrg)Ú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                 ó    • SU l         / U l        g r7   )ÚyaysÚyayArgsr   s    r   r<   ÚYayable.__init__M  s   € ØˆŒ	Øˆ�r   c                 ó|   • U =R                   S-  sl         U R                  R                  X45        U R                   $ )z
Increment C{self.yays}.
r   )r  r€  Úappend©r   r¿   rr  s      r   rs  ÚYayable.yayQ  s/   € ð 	�	Š	�Q‰�	Ø�‰×Ñ˜Q˜GÔ$Ø�y‰yÐr   )r€  r  N)r   r   r   r    rt   r<   rs  r!   r"   r   r   r}  r}  B  s   † ñòõr   r}  c                   ó,   • \ rS rSrSrSrSrS rS rSr	g)ÚBooableiZ  z+
An implementation of IProxiedSubInterface
Fc                 ó   • SU l         g)z+
Mark the fact that 'yay' has been called.
TN)Úyayedr„  s      r   rs  ÚBooable.yaye  ó   € ð ˆ�
r   c                 ó   • SU l         g)z,
Mark the fact that 'boo' has been called.1
TN)Úbooedr   s    r   ry  ÚBooable.book  r‹  r   )r�  r‰  N)
r   r   r   r    rt   r‰  r�  rs  ry  r!   r"   r   r   r‡  r‡  Z  s   † ñð €EØ€Eòõr   r‡  c                   ó$   • \ rS rSrSrS rS rSrg)ÚIMultipleMethodsir  z%
An interface with multiple methods.
c                  ó   • g)z$
The first method. Should return 1.
Nr"   r"   r   r   Ú	methodOneÚIMultipleMethods.methodOnew  r1   r   c                  ó   • g)z%
The second method. Should return 2.
Nr"   r"   r   r   Ú	methodTwoÚIMultipleMethods.methodTwo|  r1   r   r"   N©r   r   r   r    rt   r’  r•  r!   r"   r   r   r�  r�  r  s   † ñòõ
r   r�  c                   ó$   • \ rS rSrSrS rS rSrg)ÚMultipleMethodImplementori‚  z2
A precise implementation of L{IMultipleMethods}.
c                 ó   • g)z
@return: 1
r   r"   r   s    r   r’  Ú#MultipleMethodImplementor.methodOne‡  ó   € ð r   c                 ó   • g)z
@return: 2
r|   r"   r   s    r   r•  Ú#MultipleMethodImplementor.methodTwo�  rœ  r   r"   Nr—  r"   r   r   r™  r™  ‚  s   † ñòõr   r™  c                   ól   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rSrg)ÚProxyForInterfaceTestsi”  z!
Tests for L{proxyForInterface}.
c                 óz   • [        5       n[        [        5      " U5      nU R                  UR                  U5        g)zs
Proxy objects should have an C{original} attribute which refers to the
original object passed to the constructor.
N)r”   r   rp  rŽ   r9   )r   r9   Úproxys      r   Útest_originalÚ$ProxyForInterfaceTests.test_original™  s-   € ô
 “8ˆÜ!Ô"3Ô4°XÓ>ˆØ�‰�e—n‘n hÕ/r   c                 óÞ   • [        [        5      n[        5       nU" U5      nUR                  5         U R	                  UR                  5       S5        U R	                  UR
                  S5        g)z~
The class created from L{proxyForInterface} passes methods on an
interface to the object which is passed to its constructor.
r|   N©r   rp  r}  rs  rš   r  )r   ÚklassÚyayabler¢  s       r   Útest_proxyMethodÚ'ProxyForInterfaceTests.test_proxyMethod¢  sR   € ô
 "Ô"3Ó4ˆÜ“)ˆÙ�g“ˆØ�	‰	ŒØ×Ñ˜Ÿ™› aÔ(Ø×Ñ˜Ÿ™ qÕ)r   c                 ó¼   ^• [        [        5      m " U4S jST5      n[        5       nU" U5      nUR                  5         U R	                  SUR
                  5        g)zr
Methods of the class created from L{proxyForInterface} can be used with
the decorator-helper L{functools.wraps}.
c                   óN   >• \ rS rSr\"  Y R
                  5      U 4S j5       rSrg)Ú?ProxyForInterfaceTests.test_decoratedProxyMethod.<locals>.klassiµ  c                 ód   >• U R                   =R                  S-  sl        TR                  U 5      $ r   )r9   r  rs  )r   Úbases    €r   rs  ÚCProxyForInterfaceTests.test_decoratedProxyMethod.<locals>.klass.yay¶  s&   ø€ à—‘×"Ò" aÑ'Õ"Ø—x‘x “~Ð%r   r"   N)r   r   r   r    r   rs  r!   )r¯  s   €r   r§  r­  µ  s   ø† Ù‘4—8‘8‹_ô&ó ó&r   r§  r|   Nr¦  )r   r§  r9   r¨  r¯  s       @r   Útest_decoratedProxyMethodÚ0ProxyForInterfaceTests.test_decoratedProxyMethod®  sK   ø€ ô
 !Ô!2Ó3ˆ÷	&�Dô 	&ô “9ˆÙ˜“/ˆØ�‰ŒØ×Ñ˜˜HŸM™MÕ*r   c                 óâ   ^• [        5       n[        5       Ul        [        [        5      " U5      mU R                  TR                  UR                  5        U R                  [        U4S j5        g)zK
Proxy objects should proxy declared attributes, but not other
attributes.
c                  ó   >• T R                   $ r'   )r  )r¢  s   €r   r  Ú<ProxyForInterfaceTests.test_proxyAttribute.<locals>.<lambda>É  s	   ø€ °%·*²*r   N)r}  r”   ru  r   rp  rŽ   r¼   ÚAttributeError©r   r¨  r¢  s     @r   Útest_proxyAttributeÚ*ProxyForInterfaceTests.test_proxyAttributeÀ  sQ   ø€ ô
 “)ˆÜ!'£ˆÔÜ!Ô"3Ô4°WÓ=ˆØ�‰�e×*Ñ*¨G×,BÑ,BÔCØ×Ñœ.Ô*<Õ=r   c                 óš   • [        5       n[        [        5      " U5      n[        5       nX2l        U R                  UR                  U5        g)z^
The attributes that proxy objects proxy should be assignable and affect
the original object.
N)r}  r   rp  r”   ru  rŽ   ©r   r¨  r¢  Úthingys       r   Útest_proxySetAttributeÚ-ProxyForInterfaceTests.test_proxySetAttributeË  s<   € ô
 “)ˆÜ!Ô"3Ô4°WÓ=ˆÜ“ˆØ%ÔØ�‰�g×,Ñ,¨fÕ5r   c                 óŠ   • [        5       nSUl        [        [        5      " U5      nU?U R	                  [        US5      5        g)z]
The attributes that proxy objects proxy should be deletable and affect
the original object.
Nru  )r}  ru  r   rp  ÚassertFalseÚhasattrr·  s      r   Útest_proxyDeleteAttributeÚ0ProxyForInterfaceTests.test_proxyDeleteAttributeÖ  s?   € ô
 “)ˆØ!%ˆÔÜ!Ô"3Ô4°WÓ=ˆØÐ Ø×Ñœ Ð*:Ó;Õ<r   c                 óÂ   • [        5       n[        [        5      " U5      nU R                  UR	                  5       S5        U R                  UR                  5       S5        g)zh
[Regression test] The proxy should send its method calls to the correct
method, not the incorrect one.
r   r|   N)r™  r   r�  rš   r’  r•  )r   Úmultir¢  s      r   Útest_multipleMethodsÚ+ProxyForInterfaceTests.test_multipleMethodsá  sJ   € ô
 *Ó+ˆÜ!Ô"2Ô3°EÓ:ˆØ×Ñ˜Ÿ™Ó*¨AÔ.Ø×Ñ˜Ÿ™Ó*¨AÕ.r   c                 óè   •  " S S[        [        5      5      n[        5       nU" U5      nU R                  UR                  S5        UR                  5         U R                  UR                  S5        g)z@
It is possible to subclass the result of L{proxyForInterface}.
c                   ó   • \ rS rSrSrS rSrg)ÚAProxyForInterfaceTests.test_subclassing.<locals>.SpecializedProxyið  z=
A specialized proxy which can decrement the number of yays.
c                 óB   • U R                   =R                  S-  sl        g)z
Decrement the number of yays.
r   N)r9   r  r   s    r   ry  ÚEProxyForInterfaceTests.test_subclassing.<locals>.SpecializedProxy.booõ  s   € ð —‘×"Ò" aÑ'Ö"r   r"   Nr{  r"   r   r   ÚSpecializedProxyrÊ  ð  s   † ñõ(r   rÍ  r   éÿÿÿÿN)r   rp  r}  rš   r  ry  )r   rÍ  r¨  Úspecials       r   Útest_subclassingÚ'ProxyForInterfaceTests.test_subclassingë  sY   € ô
		(Ô0Ô1BÓCô 		(ô “)ˆÙ" 7Ó+ˆØ×Ñ˜Ÿ™ qÔ)Ø�‰ŒØ×Ñ˜Ÿ™ rÕ*r   c                 óZ   • [        [        5      nU R                  UR                  S5        g)zA
The name of a proxy class indicates which interface it proxies.
zA(Proxy for twisted.python.test.test_components.IProxiedInterface)N)r   rp  rš   r   ©r   r¢  s     r   Útest_proxyNameÚ%ProxyForInterfaceTests.test_proxyName  s'   € ô "Ô"3Ó4ˆØ×ÑØ�N‰NØRõ	
r   c                 ój   • [        [        5      nU R                  [        R                  U5      5        g)z?
The resulting proxy implements the interface that it proxies.
N)r   rp  Ú
assertTrueÚimplementedByrÓ  s     r   Útest_implementsÚ&ProxyForInterfaceTests.test_implements  s'   € ô "Ô"3Ó4ˆØ�‰Ô)×7Ñ7¸Ó>Õ?r   c                 ó,  •  " S S5      nU" 5       nU" 5       nX2l         [        R                  " SS5      nU R                  UR	                  U5      UR
                  5        UR	                  S5      nU" U5        U R                  UR                  5        g)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                   ó   • \ rS rSrSrS rSrg)Ú>ProxyForInterfaceTests.test_proxyDescriptorGet.<locals>.Samplei#  Fc                 ó   • SU l         g r.  ©Úcalledr   s    r   r°   ÚDProxyForInterfaceTests.test_proxyDescriptorGet.<locals>.Sample.hello&  s	   € Ø"�•r   rß  N)r   r   r   r    rà  r°   r!   r"   r   r   ÚSamplerÝ  #  s   † ØˆFõ#r   râ  r°   r9   N)r9   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           	      ó  ^•  " S S[        [        5      5      m " U4S jST5      n[        5       nU" U5      nU R                  UR	                  SSSSS	9S
5        U R                  UR
                  S[        SSS	94/5        g)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                   ó   • \ rS rSrSrSrg)ÚDProxyForInterfaceTests.test_proxyInheritance.<locals>.YayableWrapperi9  z1
This class does not override any functionality.
r"   N)r   r   r   r    rt   r!   r"   r   r   ÚYayableWrapperrí  9  s   † ôr   rî  c                   ó*   >• \ rS rSrSrSrU 4S jrSrg)ÚEProxyForInterfaceTests.test_proxyInheritance.<locals>.EnhancedWrapperi>  z(
This class overrides the 'yay' method.
r   c                 ó`   >• U =R                   S-  sl         TR                  " U /UQ70 UD6S-   $ )Nr   é   )ÚwrappedYaysrs  )r   r¿   Úkrî  s      €r   rs  ÚIProxyForInterfaceTests.test_proxyInheritance.<locals>.EnhancedWrapper.yayE  s4   ø€ Ø× Ò  AÑ%Õ Ø%×)Ò)¨$Ð8°Ò8°aÑ8¸1Ñ<Ð<r   r"   N)r   r   r   r    rt   ró  rs  r!   )rî  s   €r   ÚEnhancedWrapperrð  >  s   ø† ñð ˆK÷=ð =r   rö  r	  é   é   é   )rè   Úyé   )r	  r÷  N)r   rp  r}  rš   rs  r€  Ú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                 óò   • [        [        5      n[        5       nU" U5      nUR                  5         UR	                  5         U R                  UR                  5        U R                  UR                  5        g)zˆ
Proxies of subinterfaces generated with proxyForInterface should allow
access to attributes of both the child and the base interfaces.
N)r   rw  r‡  rs  ry  r×  r‰  r�  )r   Ú
proxyClassÚbooabler¢  s       r   Útest_interfaceInheritanceÚ0ProxyForInterfaceTests.test_interfaceInheritanceN  sR   € ô
 'Ô';Ó<ˆ
Ü“)ˆÙ˜7Ó#ˆØ�	‰	ŒØ�	‰	ŒØ�‰˜Ÿ™Ô&Ø�‰˜Ÿ™Õ&r   c                 ó´  • [        5       n[        5       Ul        [        [        SS9" U5      nU R                  UR                  U5        U R                  UR                  5       S5        U R                  UR                  UR                  5        [        5       nX2l        U R                  UR                  U5        U?U R                  [        US5      5        g)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)ÚoriginalAttributer   ru  N)r}  r”   ru  r   rp  rŽ   r  rš   rs  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    rt   r£  r©  r±  r¸  r½  rÂ  rÆ  rÐ  rÔ  rÙ  ré  rþ  r  r  r!   r"   r   r   r   r   ”  sP   † ñò0ò
*ò+ò$	>ò	6ò	=ò/ò+ò,
ò@ò+ò@Fò8'õ=r   r   N);rt   Ú	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à   r4   rA   rF   rK   rN   rQ   rT   rW   rZ   r]   rd   rj   ÚSynchronousTestCaserv   r¹   rÃ   rÆ   rÐ   rÕ   rÚ   rÞ   ræ   rí   rò   r÷   r  r  rp  rw  r}  r‡  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   