ó
    ×›‘h”_  ã                   óú  • S r SSKrSSKrSSKJr  SSKJr  SSKJrJ	r	J
r
JrJr  SSKJ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 " S S\5      r " S S5      r " S S\5      r " S S5      r " S S\\5      r\" S\4SSS.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" " S, S-\5      r#g).z6
Test cases for the L{twisted.python.reflect} module.
é    N)Údeque)Úreflect)ÚaccumulateMethodsÚaddMethodNamesToDictÚfullyQualifiedNameÚprefixedMethodNamesÚprefixedMethods)ÚSynchronousTestCasec                   ó   • \ rS rSrSrS rSrg)ÚBaseé   zT
A no-op class which can be used to verify the behavior of
method-discovering APIs.
c                 ó   • g)z)
A no-op method which can be discovered.
N© ©Úselfs    Ú]C:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/test/test_reflect.pyÚmethodÚBase.method   ó   � ó    r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Ú__static_attributes__r   r   r   r   r      s   † ñõ
r   r   c                   ó   • \ rS rSrSrSrg)ÚSubé$   z>
A subclass of a class with a method which can be discovered.
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Srg)ÚSeparateé*   z5
A no-op class with methods with differing prefixes.
c                 ó   • g)z:
A no-op method which a matching prefix to be discovered.
Nr   r   s    r   Úgood_methodÚSeparate.good_method/   r   r   c                 ó   • g)z?
A no-op method with a mismatched prefix to not be discovered.
Nr   r   s    r   Ú
bad_methodÚSeparate.bad_method4   r   r   r   N)r   r   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S rSrg)ÚAccumulateMethodsTestsé:   zh
Tests for L{accumulateMethods} which finds methods on a class hierarchy and
adds them to a dictionary.
c                 ón   • [        5       n0 n[        X5        U R                  SUR                  0U5        g)zÍ
If x is and instance of Base and Base defines a method named method,
L{accumulateMethods} adds an item to the given dictionary with
C{"method"} as the key and a bound method object for Base.method value.
r   N)r   r   ÚassertEqualr   ©r   ÚxÚoutputs      r   Útest_ownClassÚ$AccumulateMethodsTests.test_ownClass@   s1   € ô ‹FˆØˆÜ˜!Ô$Ø×Ñ˜( A§H¡HÐ-¨vÕ6r   c                 ón   • [        5       n0 n[        X5        U R                  SUR                  0U5        g)zð
If x is an instance of Sub and Sub is a subclass of Base and Base
defines a method named method, L{accumulateMethods} adds an item to the
given dictionary with C{"method"} as the key and a bound method object
for Base.method as the value.
r   N)r   r   r-   r   r.   s      r   Útest_baseClassÚ%AccumulateMethodsTests.test_baseClassK   s1   € ô ‹EˆØˆÜ˜!Ô$Ø×Ñ˜( A§H¡HÐ-¨vÕ6r   c                 óp   • [        5       n0 n[        XS5        U R                  SUR                  0U5        g)z°
If a prefix is given, L{accumulateMethods} limits its results to
methods beginning with that prefix.  Keys in the resulting dictionary
also have the prefix removed from them.
Úgood_r   N)r!   r   r-   r$   r.   s      r   Útest_prefixÚ"AccumulateMethodsTests.test_prefixW   s3   € ô ‹JˆØˆÜ˜! WÔ-Ø×Ñ˜( A§M¡MÐ2°FÕ;r   r   N)	r   r   r   r   r   r1   r4   r8   r   r   r   r   r*   r*   :   s   † ñò
	7ò
7õ	<r   r*   c                   ó$   • \ rS rSrSrS rS rSrg)ÚPrefixedMethodsTestséc   zf
Tests for L{prefixedMethods} which finds methods on a class hierarchy and
adds them to a dictionary.
c                 óh   • [        5       n[        U5      nU R                  UR                  /U5        g)zK
L{prefixedMethods} returns a list of the methods discovered on an
object.
N)r   r	   r-   r   r.   s      r   Útest_onlyObjectÚ$PrefixedMethodsTests.test_onlyObjecti   s+   € ô
 ‹FˆÜ  Ó#ˆØ×Ñ˜!Ÿ(™(˜ VÕ,r   c                 ój   • [        5       n[        US5      nU R                  UR                  /U5        g)zW
If a prefix is given, L{prefixedMethods} returns only methods named
with that prefix.
r7   N)r!   r	   r-   r$   r.   s      r   r8   Ú PrefixedMethodsTests.test_prefixr   s-   € ô
 ‹JˆÜ   GÓ,ˆØ×Ñ˜!Ÿ-™-˜¨&Õ1r   r   N)r   r   r   r   r   r>   r8   r   r   r   r   r;   r;   c   s   † ñò
-õ2r   r;   c                   ó$   • \ rS rSrSrS rS rSrg)ÚPrefixedMethodNamesTestsé|   z#
Tests for L{prefixedMethodNames}.
c                 óF   • U R                  S/[        [        S5      5        g)zr
L{prefixedMethodNames} returns a list including methods with the given
prefix defined on the class passed to it.
r   r7   N)r-   r   r!   r   s    r   Útest_methodÚ$PrefixedMethodNamesTests.test_method�   s   € ð
 	×Ñ˜(˜Ô%8¼À7Ó%KÕLr   c                 ó\   •  " S S[         5      nU R                  S/[        US5      5        g)z�
L{prefixedMethodNames} returns a list included methods with the given
prefix defined on base classes of the class passed to it.
c                   ó   • \ rS rSrSrg)Ú<PrefixedMethodNamesTests.test_inheritedMethod.<locals>.ChildéŽ   r   N©r   r   r   r   r   r   r   r   ÚChildrJ   Ž   ó   † Úr   rM   r   r7   N)r!   r-   r   )r   rM   s     r   Útest_inheritedMethodÚ-PrefixedMethodNamesTests.test_inheritedMethodˆ   s*   € ô	”Hô 	ð 	×Ñ˜(˜Ô%8¸ÀÓ%HÕIr   r   N)r   r   r   r   r   rF   rO   r   r   r   r   rC   rC   |   s   † ñòMõ	Jr   rC   c                   ó   • \ rS rSrSrS rSrg)ÚAddMethodNamesToDictTestsé”   z$
Tests for L{addMethodNamesToDict}.
c                 ó~   •  " S S5      n " S S[         U5      n0 n[        X#SU5        U R                  SS0U5        g)	z�
If C{baseClass} is passed to L{addMethodNamesToDict}, only methods which
are a subclass of C{baseClass} are added to the result dictionary.
c                   ó   • \ rS rSrSrg)Ú;AddMethodNamesToDictTests.test_baseClass.<locals>.AlternateéŸ   r   NrL   r   r   r   Ú	AlternaterV   Ÿ   rN   r   rX   c                   ó   • \ rS rSrS rSrg)Ú7AddMethodNamesToDictTests.test_baseClass.<locals>.Childé¢   c                 ó   • g ©Nr   r   s    r   Úgood_alternateÚFAddMethodNamesToDictTests.test_baseClass.<locals>.Child.good_alternate£   ó   € Ør   r   N)r   r   r   r   r^   r   r   r   r   rM   rZ   ¢   ó   † õr   rM   r7   Ú	alternateé   N)r!   r   r-   )r   rX   rM   Úresults       r   r4   Ú(AddMethodNamesToDictTests.test_baseClass™   sB   € ÷	ñ 	ô	”H˜iô 	ð ˆÜ˜U¨G°YÔ?Ø×Ñ˜+ qÐ)¨6Õ2r   r   N)r   r   r   r   r   r4   r   r   r   r   rR   rR   ”   s   † ñõ3r   rR   c                   ó   • \ rS rSrSrS rSrg)ÚSummeré«   z1
A class we look up as part of the LookupsTests.
c                 ó   • g)z
Do something.
Nr   r   s    r   Ú	reallySetÚSummer.reallySet°   r   r   r   N)r   r   r   r   r   rj   r   r   r   r   rg   rg   «   s   † ñõr   rg   c                   óf   • \ 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)ÚLookupsTestsé¶   z;
Tests for L{namedClass}, L{namedModule}, and L{namedAny}.
c                 óX   • U R                  [        R                  " S5      [        5        g)zI
L{namedClass} should return the class object for the name it is passed.
ú twisted.test.test_reflect.SummerN)ÚassertIsr   Ú
namedClassrg   r   s    r   Útest_namedClassLookupÚ"LookupsTests.test_namedClassLookup»   s   € ð 	�‰”g×(Ò(Ð)KÓLÌfÕUr   c                 ó\   • SSK Jn  U R                  [        R                  " S5      U5        g)zK
L{namedModule} should return the module object for the name it is
passed.
r   ©Úmonkeyútwisted.python.monkeyN)Útwisted.pythonrw   rq   r   ÚnamedModule©r   rw   s     r   Útest_namedModuleLookupÚ#LookupsTests.test_namedModuleLookupÁ   s!   € õ
 	*à�‰”g×)Ò)Ð*AÓBÀFÕKr   c                 ól   • SSK nU R                  [        R                  " S5      UR                  5        g)zI
L{namedAny} should return the package object for the name it is passed.
r   Nútwisted.python)ry   rq   r   ÚnamedAnyÚpython©r   Útwisteds     r   Útest_namedAnyPackageLookupÚ'LookupsTests.test_namedAnyPackageLookupÊ   s%   € ó 	à�‰”g×&Ò&Ð'7Ó8¸'¿.¹.ÕIr   c                 ó\   • SSK Jn  U R                  [        R                  " S5      U5        g)zH
L{namedAny} should return the module object for the name it is passed.
r   rv   rx   N)ry   rw   rq   r   r€   r{   s     r   Útest_namedAnyModuleLookupÚ&LookupsTests.test_namedAnyModuleLookupÒ   s!   € õ 	*à�‰”g×&Ò&Ð'>Ó?ÀÕHr   c                 óX   • U R                  [        R                  " S5      [        5        g)zG
L{namedAny} should return the class object for the name it is passed.
rp   N)rq   r   r€   rg   r   s    r   Útest_namedAnyClassLookupÚ%LookupsTests.test_namedAnyClassLookupÚ   s   € ð 	�‰”g×&Ò&Ð'IÓJÌFÕSr   c                 ól   • U R                  [        R                  " S5      [        R                  5        g)z~
L{namedAny} should return the object an attribute of a non-module,
non-package object is bound to for the name it is passed.
z*twisted.test.test_reflect.Summer.reallySetN)r-   r   r€   rg   rj   r   s    r   Útest_namedAnyAttributeLookupÚ)LookupsTests.test_namedAnyAttributeLookupà   s*   € ð 	×ÑÜ×ÒÐIÓJÜ×Ñõ	
r   c                 ó€   • U R                  [        R                  " S5      [        R                  R
                  5        g)z©
L{namedAny} should return the object an attribute of an object which
itself was an attribute of a non-module, non-package object is bound to
for the name it is passed.
z2twisted.test.test_reflect.Summer.reallySet.__doc__N)rq   r   r€   rg   rj   r   r   s    r   Ú"test_namedAnySecondAttributeLookupÚ/LookupsTests.test_namedAnySecondAttributeLookupí   s.   € ð 	�‰Ü×ÒÐTÓUÜ×Ñ×$Ñ$õ	
r   c                 ó,  • U R                  [        [        R                  S5        U R                  [        [        R                  S5        U R                  [        [        R                  S5        U R                  [
        [        R                  S5        g)zu
Exceptions raised by modules which L{namedAny} causes to be imported
should pass through L{namedAny} to the caller.
ztwisted.test.reflect_helper_ZDEztwisted.test.reflect_helper_VEztwisted.test.reflect_helper_IEN)ÚassertRaisesÚZeroDivisionErrorr   r€   Ú
ValueErrorÚImportErrorr   s    r   Útest_importExceptionsÚ"LookupsTests.test_importExceptionsø   sz   € ð
 	×ÑÜœw×/Ñ/Ð1Rô	
ð 	×ÑÜœw×/Ñ/Ð1Rô	
ð 	×ÑÜœ×(Ñ(Ð*Jô	
ð
 	×ÑÜœ×)Ñ)Ð+Kõ	
r   c                 óâ   • U R                  [        [        R                  S5        U R                  [        [        R                  S5        U R                  [        [        R                  S5        g)zÏ
If segments on the end of a fully-qualified Python name represents
attributes which aren't actually present on the object represented by
the earlier segments, L{namedAny} should raise an L{AttributeError}.
ztwisted.nosuchmoduleintheworldz twisted.nosuch.modulein.theworldz0twisted.test.test_reflect.Summer.nosuchattributeN)r“   ÚAttributeErrorr   r€   r   s    r   Útest_attributeExceptionsÚ%LookupsTests.test_attributeExceptions  s]   € ð 	×ÑÜœG×,Ñ,Ð.Nô	
ð 	×ÑÜœG×,Ñ,Ð.Pô	
ð 	×ÑÜÜ×ÑØ>õ	
r   c                 ó  • U R                  [        R                  [        R                  S5      nU R	                  [        U5      S5        U R                  [        R                  [        R                  S5      nU R	                  [        U5      S5        U R                  [        R                  [        R                  S5      nU R	                  [        U5      S5        U R                  [        R                  [        R                  S5      nU R	                  [        U5      S5        S	 HQ  nU R                  [        R                  [        R                  U5      nU R	                  [        U5      S
U< 35        MS     g)aU  
Passing a name which isn't a fully-qualified Python name to L{namedAny}
should result in one of the following exceptions:
 - L{InvalidName}: the name is not a dot-separated list of Python
   objects
 - L{ObjectNotFound}: the object doesn't exist
 - L{ModuleNotFound}: the object doesn't exist and there is only one
   component in the name
Únosuchmoduleintheworldz(No module named 'nosuchmoduleintheworld'z@#$@(#.!@(#!@#z('@#$@(#.!@(#!@#' does not name an objectztcelfer.nohtyp.detsiwtz0'tcelfer.nohtyp.detsiwt' does not name an objectÚ zEmpty module name)z.twistedztwisted.ztwisted..pythonzMname must be a string giving a '.'-separated list of Python identifiers, not N)r“   r   ÚModuleNotFoundr€   r-   ÚstrÚObjectNotFoundÚInvalidName)r   ÚerrÚinvalidNames      r   Útest_invalidNamesÚLookupsTests.test_invalidNames"  s4  € ð ×ÑÜ×"Ñ"¤G×$4Ñ$4Ð6Nó
ˆð 	×Ñœ˜S›Ð#MÔNð ×ÑÜ×"Ñ"¤G×$4Ñ$4Ð6Fó
ˆð 	×Ñœ˜S›Ð#MÔNà×ÑÜ×"Ñ"¤G×$4Ñ$4Ð6Nó
ˆð 	×Ñœ˜S›Ð#UÔVà×Ñ¤× 3Ñ 3´W×5EÑ5EÀrÓJˆØ×Ñœ˜S›Ð#6Ô7ãFˆKØ×#Ñ#¤G×$7Ñ$7¼×9IÑ9IÈ;ÓWˆCØ×ÑÜ�C”â)4ð7öò Gr   c                 ót   • S H2  n[        5       n[        R                  " XS9nU R                  X25        M4     g)zS
When module import fails with ImportError it returns the specified
default value.
)Únosuchmtopoduleúno.such.module©ÚdefaultN)Úobjectr   ÚrequireModulerq   )r   Únamer¬   rd   s       r   Útest_requireModuleImportErrorÚ*LookupsTests.test_requireModuleImportErrorG  s1   € ó
 :ˆDÜ“hˆGä×*Ò*¨4ÑAˆFà�M‰M˜&Ö*ò :r   c                 óR   • [         R                  " S5      nU R                  U5        g)z9
When module import fails it returns L{None} by default.
rª   N)r   r®   ÚassertIsNone)r   rd   s     r   Útest_requireModuleDefaultNoneÚ*LookupsTests.test_requireModuleDefaultNoneS  s#   € ô ×&Ò&Ð'7Ó8ˆà×Ñ˜&Õ!r   c                 ón   • SSK Jn  [        5       nU R                  [        R
                  " SUS9U5        g)zM
When module import succeed it returns the module and not the default
value.
r   rv   rx   r«   N)ry   rw   r­   rq   r   r®   )r   rw   r¬   s      r   Ú!test_requireModuleRequestedImportÚ.LookupsTests.test_requireModuleRequestedImport[  s.   € õ
 	*ä“(ˆà�‰Ü×!Ò!Ð"9À7ÑKØõ	
r   r   N)r   r   r   r   r   rs   r|   r„   r‡   rŠ   r�   r�   r—   r›   r¦   r°   r´   r·   r   r   r   r   rm   rm   ¶   sN   † ñòVòLòJòIòTò
ò	
ò
ò*
ò*#òJ
+ò"õ
r   rm   c                   ó8   • \ rS rSrSrSrS\4S jrS\4S jrSr	g)Ú	Breakableij  FÚreturnc                 ó<   • U R                   (       a  [        S5      eg)Nzstr!z<Breakable>)ÚbreakStrÚRuntimeErrorr   s    r   Ú__str__ÚBreakable.__str__n  s   € Ø�=�=Ü˜vÓ&Ð&à r   c                 ó<   • U R                   (       a  [        S5      eg)Nzrepr!zBreakable())Ú	breakReprr¾   r   s    r   Ú__repr__ÚBreakable.__repr__t  s   € Ø�>�>Ü˜wÓ'Ð'à r   r   N)
r   r   r   r   rÂ   r½   r¡   r¿   rÃ   r   r   r   r   rº   rº   j  s$   † Ø€IØ€Hð!˜ô !ð!˜#÷ !r   rº   c                   ó(   • \ rS rSrSr\S 5       r Srg)Ú
BrokenTypei{  Fc                 ó<   • U R                   (       a  [        S5      eg)Nzno namerÆ   )Ú	breakNamer¾   r   s    r   r   ÚBrokenType.__name__~  s   € à�>�>Ü˜yÓ)Ð)Ør   r   N)r   r   r   r   rÈ   Úpropertyr   r   r   r   rÆ   rÆ   {  s   † Ø€Iàñó ór   rÆ   ÚBTBaseT)rÂ   r½   c                   ó&   • \ rS rSr\" S 5      rSrg)ÚNoClassAttriˆ  c                 ó   • U R                   $ r]   )Ú	not_class)r/   s    r   Ú<lambda>ÚNoClassAttr.<lambda>‰  s   €  1§;¢;r   r   N)r   r   r   r   rÊ   Ú	__class__r   r   r   r   rÍ   rÍ   ˆ  s   † ÙÑ.Ó/ƒIr   rÍ   c                   óH   • \ 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)ÚSafeReprTestsiŒ  z*
Tests for L{reflect.safe_repr} function.
c           	      ó¤   • / SQS4nU R                  [        [        [        R                  U5      5      [        [        [
        U5      5      5        g)zO
L{reflect.safe_repr} produces the same output as C{repr} on a working
object.
©rc   é   é   ó   aN)r-   ÚlistÚmapr   Ú	safe_reprÚrepr)r   Úxss     r   Útest_workingReprÚSafeReprTests.test_workingRepr‘  s;   € ò
 ˜ÐˆØ×Ñœœc¤'×"3Ñ"3°RÓ8Ó9¼4ÄÄDÈ"ÃÓ;NÕOr   c                 ó  • [        5       nSUl        [        R                  " U5      nU R	                  SU5        U R	                  [
        R                  R                  [        5      S   U5        U R	                  SU5        g)zj
L{reflect.safe_repr} returns a string with class name, address, and
traceback when the repr call failed.
TzBreakable instance at 0xr   úRuntimeError: repr!N)	rº   rÂ   r   rÜ   ÚassertInÚosÚpathÚsplitextÚ__file__©r   ÚbÚbReprs      r   Útest_brokenReprÚSafeReprTests.test_brokenRepr™  sd   € ô
 ‹KˆØˆŒÜ×!Ò! !Ó$ˆØ�‰Ð0°%Ô8ð 	�‰”b—g‘g×&Ñ&¤xÓ0°Ñ3°UÔ;Ø�‰Ð+¨UÕ3r   c                 ó„   • [        5       nSUl        U R                  [        R                  " U5      [        U5      5        g)zD
L{reflect.safe_repr} isn't affected by a broken C{__str__} method.
TN)rº   r½   r-   r   rÜ   rÝ   ©r   ré   s     r   Útest_brokenStrÚSafeReprTests.test_brokenStr§  s1   € ô ‹KˆØˆŒ
Ø×Ñœ×*Ò*¨1Ó-¬t°A«wÕ7r   c                 ó„   •  " S S[         5      n[        R                  " U5        [        R                  " U" 5       5        g )Nc                   ó   • \ rS rSrSrSrg)Ú-SafeReprTests.test_brokenClassRepr.<locals>.Xi°  Tr   N©r   r   r   r   rÂ   r   r   r   r   ÚXró   °  ó   † Ø‹Ir   rõ   ©rË   r   rÜ   ©r   rõ   s     r   Útest_brokenClassReprÚ"SafeReprTests.test_brokenClassRepr¯  s.   € ô	”ô 	ô 	×Ò˜!ÔÜ×Ò™!›#Õr   c                 ó´   •  " S S[         5      n[        R                  " U5      nS[        U5      S S3nU R	                  X2R                  S5      S   5        g)	z«
C{id} is used to print the ID of the object in case of an error.

L{safe_repr} includes a traceback after a newline, so we only check
against the first line of the repr.
c                   ó   • \ rS rSrSrSrg)Ú2SafeReprTests.test_brokenReprIncludesID.<locals>.Xi¾  Tr   Nrô   r   r   r   rõ   rý   ¾  rö   r   rõ   z<BrokenType instance at 0xr/   z with repr error:Ú
r   N)rË   r   rÜ   Úidr-   Úsplit)r   rõ   ÚxReprÚxReprExpecteds       r   Útest_brokenReprIncludesIDÚ'SafeReprTests.test_brokenReprIncludesID¶  sQ   € ô	”ô 	ô ×!Ò! !Ó$ˆØ4´R¸³U¸1°IÐ=NÐOˆØ×Ñ˜¯©°DÓ(9¸!Ñ(<Õ=r   c                 ó„   •  " S S[         5      n[        R                  " U5        [        R                  " U" 5       5        g )Nc                   ó   • \ rS rSrSrSrg)Ú,SafeReprTests.test_brokenClassStr.<locals>.XiÆ  Tr   N©r   r   r   r   r½   r   r   r   r   rõ   r  Æ  ó   † Ø‹Hr   rõ   r÷   rø   s     r   Útest_brokenClassStrÚ!SafeReprTests.test_brokenClassStrÅ  s.   € ô	”ô 	ô 	×Ò˜!ÔÜ×Ò™!›#Õr   c                 ó  • [        5       nSUl        [        R                  " U5      nU R	                  SU5        U R	                  [
        R                  R                  [        5      S   U5        U R	                  SU5        g)z�
If an object raises an exception when accessing its C{__class__}
attribute, L{reflect.safe_repr} uses C{type} to retrieve the class
object.
TúNoClassAttr instance at 0xr   râ   N)	rÍ   rÂ   r   rÜ   rã   rä   rå   ræ   rç   rè   s      r   Útest_brokenClassAttributeÚ'SafeReprTests.test_brokenClassAttributeÌ  sb   € ô ‹MˆØˆŒÜ×!Ò! !Ó$ˆØ�‰Ð2°EÔ:Ø�‰”b—g‘g×&Ñ&¤xÓ0°Ñ3°UÔ;Ø�‰Ð+¨UÕ3r   c                 ó  •  " S S[         5      n[        R                  " U" 5       5      nU R                  SU5        U R                  [        R
                  R                  [        5      S   U5        U R                  SU5        g)zÃ
If a class raises an exception when accessing its C{__name__} attribute
B{and} when calling its C{__str__} implementation, L{reflect.safe_repr}
returns 'BROKEN CLASS' instead of the class name.
c                   ó   • \ rS rSrSrSrg)Ú6SafeReprTests.test_brokenClassNameAttribute.<locals>.Xià  Tr   N©r   r   r   r   rÈ   r   r   r   r   rõ   r  à  rö   r   rõ   ú<BROKEN CLASS AT 0xr   râ   N)rË   r   rÜ   rã   rä   rå   ræ   rç   )r   rõ   r  s      r   Útest_brokenClassNameAttributeÚ+SafeReprTests.test_brokenClassNameAttributeÙ  sb   € ô	”ô 	ô ×!Ò!¡!£#Ó&ˆØ�‰Ð+¨UÔ3Ø�‰”b—g‘g×&Ñ&¤xÓ0°Ñ3°UÔ;Ø�‰Ð+¨UÕ3r   r   N)r   r   r   r   r   rß   rë   rï   rù   r  r
  r  r  r   r   r   r   rÔ   rÔ   Œ  s0   † ñòPò4ò8òò>òò4õ4r   rÔ   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)ÚSafeStrTestsié  z)
Tests for L{reflect.safe_str} function.
c                 ój   • / SQnU R                  [        R                  " U5      [        U5      5        g )NrÖ   )r-   r   Úsafe_strr¡   ©r   r/   s     r   Útest_workingStrÚSafeStrTests.test_workingStrî  s&   € ÚˆØ×Ñœ×)Ò)¨!Ó,¬c°!«fÕ5r   c                 óR   • [        5       nSUl        [        R                  " U5        g ©NT)rº   r½   r   r  rî   s     r   rï   ÚSafeStrTests.test_brokenStrò  s   € Ü‹KˆØˆŒ
Ü×Ò˜Õr   c                 óT   • SnU R                  [        R                  " U5      S5        g)zP
L{safe_str} for C{str} with ascii-only data should return the
value unchanged.
ÚaN)r-   r   r  r  s     r   Útest_workingAsciiÚSafeStrTests.test_workingAscii÷  s$   € ð
 ˆØ×Ñœ×)Ò)¨!Ó,¨cÕ2r   c                 ór   • SnU R                  [        R                  " U5      UR                  S5      5        g)z_
L{safe_str} for C{bytes} with utf-8 encoded data should return
the value decoded into C{str}.
s   tÃ¼stúutf-8N)r-   r   r  Údecoder  s     r   Útest_workingUtf8_3ÚSafeStrTests.test_workingUtf8_3ÿ  s-   € ð
 ˆØ×Ñœ×)Ò)¨!Ó,¨a¯h©h°wÓ.?Õ@r   c                 ój   • Sn[         R                  " U5      nU R                  U[        U5      5        g)z-
Use str() for non-utf8 bytes: "b'non-utf8'"
ó   ÿN)r   r  r-   r¡   )r   r/   ÚxStrs      r   Útest_brokenUtf8ÚSafeStrTests.test_brokenUtf8  s-   € ð ˆÜ×Ò Ó"ˆØ×Ñ˜œs 1›vÕ&r   c                 óR   • [        5       nSUl        [        R                  " U5        g r  )rº   rÂ   r   r  rî   s     r   rë   ÚSafeStrTests.test_brokenRepr  s   € Ü‹KˆØˆŒÜ×Ò˜Õr   c                 ó„   •  " S S[         5      n[        R                  " U5        [        R                  " U" 5       5        g )Nc                   ó   • \ rS rSrSrSrg)Ú+SafeStrTests.test_brokenClassStr.<locals>.Xi  Tr   Nr  r   r   r   rõ   r3    r	  r   rõ   ©rË   r   r  rø   s     r   r
  Ú SafeStrTests.test_brokenClassStr  s.   € ô	”ô 	ô 	×Ò˜ÔÜ×Ò™›Õr   c                 ó„   •  " S S[         5      n[        R                  " U5        [        R                  " U" 5       5        g )Nc                   ó   • \ rS rSrSrSrg)Ú,SafeStrTests.test_brokenClassRepr.<locals>.Xi  Tr   Nrô   r   r   r   rõ   r8    rö   r   rõ   r4  rø   s     r   rù   Ú!SafeStrTests.test_brokenClassRepr  s.   € ô	”ô 	ô 	×Ò˜ÔÜ×Ò™›Õr   c                 ó  • [        5       nSUl        [        R                  " U5      nU R	                  SU5        U R	                  [
        R                  R                  [        5      S   U5        U R	                  SU5        g)zŒ
If an object raises an exception when accessing its C{__class__}
attribute, L{reflect.safe_str} uses C{type} to retrieve the class
object.
Tr  r   úRuntimeError: str!N)	rÍ   r½   r   r  rã   rä   rå   ræ   rç   )r   ré   ÚbStrs      r   r  Ú&SafeStrTests.test_brokenClassAttribute"  sb   € ô ‹MˆØˆŒ
Ü×Ò Ó"ˆØ�‰Ð2°DÔ9Ø�‰”b—g‘g×&Ñ&¤xÓ0°Ñ3°TÔ:Ø�‰Ð*¨DÕ1r   c                 ó  •  " S S[         5      n[        R                  " U" 5       5      nU R                  SU5        U R                  [        R
                  R                  [        5      S   U5        U R                  SU5        g)zÂ
If a class raises an exception when accessing its C{__name__} attribute
B{and} when calling its C{__str__} implementation, L{reflect.safe_str}
returns 'BROKEN CLASS' instead of the class name.
c                   ó   • \ rS rSrSrSrg)Ú5SafeStrTests.test_brokenClassNameAttribute.<locals>.Xi6  Tr   Nr  r   r   r   rõ   r@  6  rö   r   rõ   r  r   r;  N)rË   r   r  rã   rä   rå   ræ   rç   )r   rõ   r,  s      r   r  Ú*SafeStrTests.test_brokenClassNameAttribute/  sb   € ô	”ô 	ô ×Ò¡£Ó$ˆØ�‰Ð+¨TÔ2Ø�‰”b—g‘g×&Ñ&¤xÓ0°Ñ3°TÔ:Ø�‰Ð*¨DÕ1r   r   N)r   r   r   r   r   r  rï   r#  r(  r-  rë   r
  rù   r  r  r   r   r   r   r  r  é  s:   † ñò6òò
3òAò'òò
òò2õ2r   r  c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	ÚFilenameToModuleTestsi?  z)
Test L{filenameToModuleName} detection.
c                 ób  • [         R                  R                  U R                  5       SS5      U l        [         R                  " U R                  5        [        [         R                  R                  U R                  S5      S5       nUR                  S5        S S S 5        [        [         R                  R                  [         R                  R                  U R                  5      S5      S5       nUR                  S5        S S S 5        g ! , (       d  f       Nz= f! , (       d  f       g = f)NÚfakepackageÚtestz__init__.pyÚwrŸ   )rä   rå   ÚjoinÚmktempÚmakedirsÚopenÚwriteÚdirname)r   Úfs     r   ÚsetUpÚFilenameToModuleTests.setUpD  s°   € Ü—G‘G—L‘L §¡£°¸vÓFˆŒ	Ü
�Š�D—I‘IÔÜ”"—'‘'—,‘,˜tŸy™y¨-Ó8¸#Ô>À!Ø�G‰G�BŒK÷ ?ä”"—'‘'—,‘,œrŸw™wŸ™¨t¯y©yÓ9¸=ÓIÈ3ÔOÐSTØ�G‰G�BŒK÷ PÐO÷ ?Õ>úçOÕOús   Â	DÃ4D Ä
DÄ 
D.c                 ó  • [         R                  " U R                  5      nU R                  US5        [         R                  " U R                  [        R                  R
                  -   5      nU R                  US5        g)zS
L{filenameToModuleName} returns the correct module (a package) given a
directory.
zfakepackage.testN)r   ÚfilenameToModuleNamerå   r-   rä   Úsep©r   Úmodules     r   Útest_directoryÚ$FilenameToModuleTests.test_directoryL  s[   € ô
 ×-Ò-¨d¯i©iÓ8ˆØ×Ñ˜Ð!3Ô4Ü×-Ò-¨d¯i©i¼"¿'¹'¿+¹+Ñ.EÓFˆØ×Ñ˜Ð!3Õ4r   c                 ó¤   • [         R                  " [        R                  R	                  U R                  S5      5      nU R                  US5        g)zP
L{filenameToModuleName} returns the correct module given the path to
its file.
ztest_reflect.pyúfakepackage.test.test_reflectN)r   rR  rä   rå   rH  r-   rT  s     r   Ú	test_fileÚFilenameToModuleTests.test_fileV  s>   € ô
 ×-Ò-Ü�G‰G�L‰L˜Ÿ™Ð$5Ó6ó
ˆð 	×Ñ˜Ð!@ÕAr   c                 óÂ   • [         R                  " [        R                  R	                  U R                  R                  S5      S5      5      nU R                  US5        g)zW
L{filenameToModuleName} returns the correct module given a C{bytes}
path to its file.
r&  s   test_reflect.pyrY  N)r   rR  rä   rå   rH  Úencoder-   rT  s     r   Ú
test_bytesÚ FilenameToModuleTests.test_bytes`  sI   € ô
 ×-Ò-Ü�G‰G�L‰L˜Ÿ™×)Ñ)¨'Ó2Ð4FÓGó
ˆð 	×Ñ˜Ð!@ÕAr   )rå   N)
r   r   r   r   r   rO  rV  rZ  r^  r   r   r   r   rC  rC  ?  s   † ñòò5òBõ	Br   rC  c                   óB   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)ÚFullyQualifiedNameTestsil  z!
Test for L{fullyQualifiedName}.
c                 ó:   • U R                  [        U5      U5        g)zM
Helper to check that fully qualified name of C{obj} results to
C{expected}.
N)r-   r   )r   ÚobjÚexpecteds      r   Ú_checkFullyQualifiedNameÚ0FullyQualifiedNameTests._checkFullyQualifiedNameq  s   € ð
 	×ÑÔ+¨CÓ0°(Õ;r   c                 óp   • SSK nU R                  US5        SSKnU R                  UR                  S5        g)zL
L{fullyQualifiedName} returns the full name of a package and a
subpackage.
r   Nrƒ   r   )rƒ   re  ry   r�   r‚   s     r   Útest_packageÚ$FullyQualifiedNameTests.test_packagex  s/   € ó
 	à×%Ñ% g¨yÔ9Ûà×%Ñ% g§n¡nÐ6FÕGr   c                 óX   • SSK nU R                  UR                  R                  S5        g)zF
L{fullyQualifiedName} returns the name of a module inside a package.
r   Nztwisted.python.compat)Útwisted.python.compatre  r�   Úcompatr‚   s     r   Útest_moduleÚ#FullyQualifiedNameTests.test_module„  s"   € ó 	%à×%Ñ% g§n¡n×&;Ñ&;Ð=TÕUr   c                 ó>   • U R                  [        [         S35        g)zC
L{fullyQualifiedName} returns the name of a class and its module.
z.FullyQualifiedNameTestsN)re  ra  r   r   s    r   Ú
test_classÚ"FullyQualifiedNameTests.test_classŒ  s   € ð 	×%Ñ%Ü#¬ zÐ1IÐ%Jõ	
r   c                 ó0   • U R                  [        S5        g)zI
L{fullyQualifiedName} returns the name of a function inside its module.
z)twisted.python.reflect.fullyQualifiedNameN)re  r   r   s    r   Útest_functionÚ%FullyQualifiedNameTests.test_function”  s   € ð 	×%Ñ%ÜÐ Kõ	
r   c                 óx   • U R                  U R                  [         SU R                  R                   S35        g)z[
L{fullyQualifiedName} returns the name of a bound method inside its
class and its module.
Ú.z.test_boundMethodN)re  Útest_boundMethodr   rÒ   r   s    r   rw  Ú(FullyQualifiedNameTests.test_boundMethodœ  s7   € ð
 	×%Ñ%Ø×!Ñ!Üˆj˜˜$Ÿ.™.×1Ñ1Ð2Ð2CÐDõ	
r   c                 óŒ   • U R                  U R                  R                  [         SU R                  R                   S35        g)z^
L{fullyQualifiedName} returns the name of an unbound method inside its
class and its module.
rv  z.test_unboundMethodN)re  rÒ   Útest_unboundMethodr   r   s    r   rz  Ú*FullyQualifiedNameTests.test_unboundMethod¦  s;   € ð
 	×%Ñ%Ø�N‰N×-Ñ-Üˆj˜˜$Ÿ.™.×1Ñ1Ð2Ð2EÐFõ	
r   r   N)r   r   r   r   r   re  rh  rm  rp  rs  rw  rz  r   r   r   r   ra  ra  l  s,   † ñò<ò
HòVò
ò
ò
õ
r   ra  c                   óJ   • \ 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)ÚObjectGrepTestsi±  c                 óü   • [        5       nSU0nUS0nU R                  S[        R                  " X![        R                  5      5        U R                  S[        R                  " X1[        R                  5      5        g)zF
Test references search through a dictionary, as a key or as a value.
Nz[None]z{None}©r­   rã   r   ÚobjgrepÚisSame)r   ÚoÚd1Úd2s       r   Útest_dictionaryÚObjectGrepTests.test_dictionary²  sW   € ô ‹HˆØ�AˆYˆØ�ˆYˆà�‰�h¤§¢°´w·~±~Ó FÔGØ�‰�h¤§¢°´w·~±~Ó FÕGr   c                 óŠ   • [        5       nSU/nU R                  S[        R                  " X![        R                  5      5        g)z(
Test references search through a list.
Nú[1]r  )r   r‚  ÚLs      r   Ú	test_listÚObjectGrepTests.test_list½  s1   € ô ‹HˆØ�1ˆIˆà�‰�eœWŸ_š_¨Q´7·>±>ÓBÕCr   c                 óŠ   • [        5       nUS4nU R                  S[        R                  " X![        R                  5      5        g)z)
Test references search through a tuple.
Nú[0]r  )r   r‚  ÚTs      r   Ú
test_tupleÚObjectGrepTests.test_tupleÆ  s1   € ô ‹HˆØ�ˆIˆà�‰�eœWŸ_š_¨Q´7·>±>ÓBÕCr   c                 ó°   •  " S S5      n[        5       nU" 5       nX#l        U R                  S[        R                  " X2[        R
                  5      5        g)z5
Test references search through an object attribute.
c                   ó   • \ rS rSrSrg)Ú,ObjectGrepTests.test_instance.<locals>.DummyiÔ  r   NrL   r   r   r   ÚDummyr“  Ô  rN   r   r”  z.oN)r­   r‚  rã   r   r€  r�  )r   r”  r‚  Úds       r   Útest_instanceÚObjectGrepTests.test_instanceÏ  s>   € ÷
	ñ 	ô ‹HˆÙ‹GˆØŒà�‰�dœGŸOšO¨A´'·.±.ÓAÕBr   c                 ó¼   •  " S S5      nU" 5       n[         R                  " U5      nU R                  S[        R                  " X2[        R
                  5      5        g)z2
Test references search through a weakref object.
c                   ó   • \ rS rSrSrg)Ú+ObjectGrepTests.test_weakref.<locals>.Dummyiâ  r   NrL   r   r   r   r”  rš  â  rN   r   r”  z()N)ÚweakrefÚrefrã   r   r€  r�  )r   r”  r‚  Úw1s       r   Útest_weakrefÚObjectGrepTests.test_weakrefÝ  s?   € ÷
	ñ 	ñ ‹GˆÜ�[Š[˜‹^ˆà�‰�dœGŸOšO¨B´7·>±>ÓBÕCr   c                 óÌ  •  " S S5      nU" 5       nUR                   nU R                  S[        R                  " X3R                  [        R
                  5      5        U R                  S[        R                  " X3R                  R                  [        R
                  5      5        U R                  S[        R                  " X3R                  [        R
                  5      5        g)z;
Test references search through method special attributes.
c                   ó   • \ rS rSrS rSrg)Ú/ObjectGrepTests.test_boundMethod.<locals>.Dummyiï  c                 ó   • g r]   r   r   s    r   ÚdummyÚ5ObjectGrepTests.test_boundMethod.<locals>.Dummy.dummyð  r`   r   r   N)r   r   r   r   r¤  r   r   r   r   r”  r¢  ï  ra   r   r”  z	.__self__z.__self__.__class__z	.__func__N)r¤  rã   r   r€  Ú__self__r�  rÒ   Ú__func__)r   r”  r‚  Úms       r   rw  Ú ObjectGrepTests.test_boundMethodê  s�   € ÷
	ñ 	ñ ‹GˆØ�G‰Gˆà�‰�k¤7§?¢?°1·j±jÄ'Ç.Á.Ó#QÔRØ�‰Ø!Ü�OŠO˜AŸz™z×3Ñ3´W·^±^ÓDô	
ð 	�‰�k¤7§?¢?°1·j±jÄ'Ç.Á.Ó#QÕRr   c                 ó*  •  " S S5      nU" 5       nSSSSUS0nSSUS/nU0 U" 5       4nS	S
US.nU" 5       nXgl         UR                  n[        R                  " U5      n	U R	                  S[
        R                  " X’[
        R                  5      5        g)z6
Test references search using complex set of objects.
c                   ó   • \ rS rSrS rSrg)Ú.ObjectGrepTests.test_everything.<locals>.Dummyi  c                 ó   • g r]   r   r   s    r   r   Ú5ObjectGrepTests.test_everything.<locals>.Dummy.method  r`   r   r   N)r   r   r   r   r   r   r   r   r   r”  r¬    ra   r   r”  r   ÚbazNÚQuuxÚFooshrØ   ÚfooÚbar)r   rc   r×   z"().__self__.attr[2][0][2]{'Foosh'})Úattrr   r›  rœ  rã   r   r€  r�  )
r   r”  r‚  ÚD1r‰  rŽ  ÚD2Úir¨  rG  s
             r   Útest_everythingÚObjectGrepTests.test_everythingý  s‘   € ÷
	ñ 	ñ ‹GˆØ�%˜˜v q¨'Ð2ˆØ�2�r˜1ÐˆØ�‘E“GÐˆØ˜5 QÑ'ˆÙ‹GˆØŒØ�H‰HˆÜ�KŠK˜‹Nˆà�‰Ø0´'·/²/À!ÌÏÉÓ2Wõ	
r   c           
      ó\  • / nU/nX/nX/nU R                  S/[        R                  " XA[        R                  SS95        U R                  SS/[        R                  " XA[        R                  SS95        U R                  / SQ[        R                  " XA[        R                  SS95        g)	z&
Test the depth of references search.
r�  rc   )ÚmaxDepthú[1][0]r×   )r�  r¼  z	[1][1][0]rØ   N)r-   r   r€  r�  )r   r"  ré   Úcr•  s        r   Útest_depthLimitÚObjectGrepTests.test_depthLimit  s’   € ð ˆØˆCˆØˆFˆØˆFˆà×Ñ˜%˜¤'§/¢/°!¼¿¹ÐQRÑ"SÔTØ×ÑØ�HÐœwŸš¨q´W·^±^ÈaÑPô	
ð 	×ÑÚ*Ü�OŠO˜A¤'§.¡.¸1Ñ=õ	
r   c                 óÚ   • [        5       n[        5       nUR                  S5        UR                  U5        U R                  S[        R
                  " X![        R                  5      5        g)z0
Test references search through a deque object.
Nrˆ  )r­   r   Úappendrã   r   r€  r�  )r   r‚  ÚDs      r   Ú
test_dequeÚObjectGrepTests.test_deque&  sE   € ô ‹HˆÜ‹GˆØ	�‰�ŒØ	�‰�Œà�‰�eœWŸ_š_¨Q´7·>±>ÓBÕCr   r   N)r   r   r   r   r…  rŠ  r�  r–  rž  rw  r¸  r¾  rÃ  r   r   r   r   r}  r}  ±  s6   † ò	HòDòDòCòDòSò&
ò.
õ$	Dr   r}  c                   ó   • \ rS rSrS rSrg)ÚGetClassTestsi2  c                 óæ   •  " S S5      nU" 5       nU R                  [        R                  " U5      R                  S5        U R                  [        R                  " U5      R                  S5        g )Nc                   ó   • \ rS rSrSrg)Ú(GetClassTests.test_new.<locals>.NewClassi4  r   NrL   r   r   r   ÚNewClassrÉ  4  rN   r   rÊ  Útype)r-   r   ÚgetClassr   )r   rÊ  Únews      r   Útest_newÚGetClassTests.test_new3  sW   € ÷	ñ 	ñ ‹jˆØ×Ñœ×)Ò)¨(Ó3×<Ñ<¸fÔEØ×Ñœ×)Ò)¨#Ó.×7Ñ7¸ÕDr   r   N)r   r   r   r   rÎ  r   r   r   r   rÆ  rÆ  2  s   † õEr   rÆ  )$r   rä   r›  Úcollectionsr   ry   r   Útwisted.python.reflectr   r   r   r   r	   Útwisted.trial.unittestr
   ÚTestCaser   r   r!   r*   r;   rC   rR   rg   rm   rº   rË  rÆ   rË   rÍ   rÔ   r  rC  ra  r}  rÆ  r   r   r   Ú<module>rÔ     s*  ðñó
 
Û Ý å "÷õ õ C÷	ñ 	ôˆ$ô ÷ñ ô &<˜Xô &<ôR2˜8ô 2ô2J˜xô Jô03 ô 3÷.ñ ôq
�8ô q
÷h!ñ !ô"�˜Dô ñ 
�H˜y˜l¸$ÈDÑ,QÓ	R€ô0�)ô 0ôZ4�Hô Z4ôzS2�8ô S2ôl*B˜Hô *BôZB
˜hô B
ôJ~D�hô ~DôBE�Hõ Er   