
    h                       S SK Jr  S SKrS SKrS SKrS SKJr  S SKJr  S SK	J
r
  SSKJr  \R                  r " S S	5      q " S
 S[        5      r " S S5      r " S S\\5      q " S S5      rSq " S S\
5      r " S S\
5      rg)    )annotationsN)NoReturnrebuild)TestCase   )crash_test_dummyc                      \ rS rSrSrg)Foo    N__name__
__module____qualname____firstlineno____static_attributes__r       `/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/twisted/test/test_rebuild.pyr   r          r   r   c                      \ rS rSrSrg)Bar   r   Nr   r   r   r   r   r      r   r   r   c                      \ rS rSrSrg)Baz   r   Nr   r   r   r   r   r      r   r   r   c                      \ rS rSrSrg)Buz   r   Nr   r   r   r   r   r      r   r   r   c                  ,    \ rS rSrSrSS jrSS jrSrg)	HashRaisesRuntimeError#   z
Things that don't hash (raise an Exception) should be ignored by the
rebuilder.

@ivar hashCalled: C{bool} set to True when __hash__ is called.
c                    SU l         g )NF
hashCalledselfs    r   __init__HashRaisesRuntimeError.__init__+   s	    r   c                &    SU l         [        S5      e)NTznot a TypeError!)r%   RuntimeErrorr&   s    r   __hash__HashRaisesRuntimeError.__hash__.   s    -..r   r$   NreturnNone)r/   r   )r   r   r   r   __doc__r(   r,   r   r   r   r   r!   r!   #   s     /r   r!   c                  r    \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSrg)RebuildTests7   z@
Simple testcase for rebuilding, to at least exercise the code.
c                   U R                  5       U l        [        R                  " U R                  5        [        R                  R                  U R                  S5      U l        [        R                  " U R                  5        [        [        R                  R                  U R                  S5      S5      R                  5         [        R                  R                  SU R                  5        g )Ntwisted_rebuild_fakelibz__init__.pywr   )mktemplibPathosmkdirpathjoinfakelibPathopenclosesysinsertr&   s    r   setUpRebuildTests.setUp<   s    {{}
77<<6OP
!!"RWW\\$**M:C@FFH4<<(r   c                V    [         R                  R                  U R                  5        g N)rA   r<   remover9   r&   s    r   tearDownRebuildTests.tearDownD   s    %r   c                N   SS K nSS KnSSKJn  UR	                  U" [
        S5      [        R                  R                  U R                  S5      5        SSK
Jn  UR                  5       nUR                  5       nUR                  5       nU R                  UR!                  5       S5        UR#                  S5        UR	                  U" [
        S5      [        R                  R                  U R                  S5      5        [$        R$                  " U5        UR                  5       nU R                  UR'                  5       S	5        U R                  UR'                  5       S	5        U R                  UR!                  5       S
5        U R                  UR!                  5       S5        g )Nr   )sibpathzmyrebuilder1.pyzmyrebuilder.py)myrebuilderag?zmyrebuilder2.pycdb)shutiltimetwisted.python.utilrK   copyfile__file__r:   r<   r=   r>   r6   rL   ABInheritassertEqualrM   sleepr   rP   )	r'   rQ   rR   rK   rL   rM   rP   ib2s	            r   test_FileRebuildRebuildTests.test_FileRebuildG   s*   /H/0GGLL))+;<	
	
 MMOMMO!$ 	

3H/0GGLL))+;<	
 	$]]_%$$$r   c                   [         R                  " S5      n[        R                  " [         SS9  UR                  5         U R	                  UR
                  [         R                  5        U R	                  [        [         R                  5        g)z!
Rebuilding an unchanged module.
rM   F)doLogN)r	   Xr   dorY   	__class__ffoo)r'   xs     r   test_RebuildRebuildTests.test_Rebuildh   s^     s#(6	&6&8&89,001r   c                V   [         R                  " 5       nUR                  [         R                  [         R                  5        UR                  [         R                  5        [        R                  " [         S5        UR                  [         R                  5      nUR                  5         U R                  UR                  [         R                  5        SSK
Jn  U R                  [        UR                  [         R                  [         R                  [         R                  5        g )Nr   )
components)r	   
XComponent
setAdapterIXXAgetComponentr   methodrY   rc   twisted.pythonrj   assertRaises
ValueErrorregisterAdapterra   )r'   rf   newComponentrj   s       r   test_ComponentInteraction&RebuildTests.test_ComponentInteractiony   s    '')	%((*:*=*=>	'**+(!,~~&6&9&9://1A1D1DE 	.&&	
r   c                    [        5       n " S S5      q " S S[        [        5      q [        R
                  " U5        [        US5      (       d   S5       e[        US5      (       d   S5       eg )	Nc                      \ rS rSrSS jrSrg)r      c                    gz
Dummy method
Nr   r&   s    r   re   Foo.foo       r   r   Nr.   )r   r   r   r   re   r   r   r   r   r   r          r   r   c                      \ rS rSrSrSrg)r      
   r   N)r   r   r   r   rf   r   r   r   r   r   r      s    Ar   r   re   z"Missing method on rebuilt instancerf   z+Missing class attribute on rebuilt instance)r   r   r   r   r   updateInstancehasattr)r'   rP   s     r   test_UpdateInstance RebuildTests.test_UpdateInstance   sb     E	 		#s 	 	q!q%  F"FF q#M MMr   c                T    SSK Jn  SSKJn  UR                  " UR
                  5        g )Nr   r   )banana)rq   r   twisted.spreadr   latestClassBanana)r'   r   r   s      r   test_BananaInteraction#RebuildTests.test_BananaInteraction   s    *)FMM*r   c                    [        5       qSS jnU R                  U5        [        R                  " [        5        U R	                  [        R
                  5        g)zf
Rebuilding something that has a __hash__ that raises a non-TypeError
shouldn't cause rebuild to die.
c                     S q g rF   )unhashableObjectr   r   r   _cleanup1RebuildTests.test_hashException.<locals>._cleanup   s    #r   Nr.   )r!   r   
addCleanupr   
assertTruer%   )r'   r   s     r   test_hashExceptionRebuildTests.test_hashException   s?     23	$ 	! (334r   c                   SSK Jn  SSKJn   " S SU5      nU" 5       nUR	                  5         U R                  UR                  5       5        UR                  " [        5      nU R                  [        [        5      [        U5      5        U R                  XTR                  U5      5        U R                  UR                  UR                  UR                  5      5        U R                  UR                  UR                  UR                  5      5        U R                  X4R                  U5      5        SS jnU R                  XdR                  U5      5        g)	z%
L{twisted.python.rebuild.Sensitive}
r   r   )	Sensitivec                      \ rS rSrSS jrSrg)2RebuildTests.test_Sensitive.<locals>.TestSensitive   c                    gr|   r   r&   s    r   test_method>RebuildTests.test_Sensitive.<locals>.TestSensitive.test_method   r~   r   r   Nr.   )r   r   r   r   r   r   r   r   r   TestSensitiver      r   r   r   c                     gr|   r   r   r   r   
myFunction/RebuildTests.test_Sensitive.<locals>.myFunction   r~   r   Nr.   )rq   r   twisted.python.rebuildr   rebuildUpToDateassertFalseneedRebuildUpdater   	ExceptionrY   reprlatestVersionOfr   )r'   r   r   r   testSensitivenewExceptionr   s          r   test_SensitiveRebuildTests.test_Sensitive   s    	+4	I 	 &%%'88:; **95i$|*<='D'D\'RS 	%%))-*C*CD	

 	%%))-*C*CD	

 	(E(Em(TU	 	%B%B:%NOr   )r>   r9   Nr.   )r   r   r   r   r1   rC   rH   r]   rg   rv   r   r   r   r   r   r   r   r   r3   r3   7   s7    )&%B2"
,N$+5 )Pr   r3   c                  @    \ rS rSrSrS	S jrS	S jrS	S jrS	S jrSr	g)
NewStyleTests   z:
Tests for rebuilding new-style classes of various sorts.
c                t    [         R                  " S5      U l        U R                  [        R                  S'   g Nwhipping)types
ModuleTypemrA   modulesr&   s    r   rC   NewStyleTests.setUp   s&    !!*-"&&&Jr   c                *    [         R                  S	 U ?g r   )rA   r   r   r&   s    r   rH   NewStyleTests.tearDown   s    KK
#Fr   c                   Sn[        XR                  R                  5        U R                  R                  5       nSUl        [        XR                  R                  5        [
        R                  " U5        U R                  UR                  S5        U R                  [        U5      U R                  R                  5        g)z6
Try to rebuild a new style class with slots defined.
z*class SlottedClass:
    __slots__ = ['a']
   N)
execr   __dict__SlottedClassrM   r   r   rY   assertIstyper'   classDefinitioninsts      r   
test_slotsNewStyleTests.test_slots   s     L_ffoo.vv""$_ffoo.t$#d4j$&&"5"56r   c                   Sn[        XR                  R                  5        U R                  R                  5       nUR	                  S5        [        XR                  R                  5        [
        R                  " U5        U R                  US   S5        U R                  [        U5      U R                  R                  5        g)z&
Try to rebuild a base type subclass.
z#class ListSubclass(list):
    pass
   r   N)
r   r   r   ListSubclassappendr   r   rY   r   r   r   s      r   test_typeSubclassNewStyleTests.test_typeSubclass   s     E_ffoo.vv""$A_ffoo.t$a!$d4j$&&"5"56r   )r   Nr.   )
r   r   r   r   r1   rC   rH   r   r   r   r   r   r   r   r      s    )77r   r   )
__future__r   r:   rA   r   typing_extensionsr   rq   r   twisted.trial.unittestr    r	   re   rd   r   r   r   r   r!   r   r3   r   r   r   r   <module>r      s    # 	 
  & " + 	 		# 		 		#s 	/ /"  iP8 iPX'7H '7r   