
    Vh                       d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 ddlmZ ej                  Z G d d	      a G d
 dt              Z G d d      Z G d dee      a G d d      Zda G d de
      Z G d de
      Zy)    )annotationsN)NoReturnrebuild)TestCase   )crash_test_dummyc                      e Zd Zy)FooN__name__
__module____qualname__     I/home/dcms/DCMS/lib/python3.12/site-packages/twisted/test/test_rebuild.pyr   r          r   r   c                      e Zd Zy)BarNr   r   r   r   r   r      r   r   r   c                      e Zd Zy)BazNr   r   r   r   r   r      r   r   r   c                      e Zd Zy)BuzNr   r   r   r   r   r      r   r   r   c                       e Zd ZdZddZddZy)HashRaisesRuntimeErrorz
    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                    d| _         y )NF)
hashCalledselfs    r   __init__zHashRaisesRuntimeError.__init__+   s	    r   c                &    d| _         t        d      )NTznot a TypeError!)r   RuntimeErrorr   s    r   __hash__zHashRaisesRuntimeError.__hash__.   s    -..r   NreturnNone)r%   r   )r   r   r   __doc__r    r#   r   r   r   r   r   #   s     /r   r   c                  X    e Zd ZdZddZddZddZddZddZddZ	ddZ
dd	Zdd
Zy)RebuildTestszH
    Simple testcase for rebuilding, to at least exercise the code.
    c                   | j                         | _        t        j                  | j                         t        j                  j                  | j                  d      | _        t        j                  | j                         t        t        j                  j                  | j                  d      d      j                          t        j                  j                  d| j                         y )Ntwisted_rebuild_fakelibz__init__.pywr   )mktemplibPathosmkdirpathjoinfakelibPathopenclosesysinsertr   s    r   setUpzRebuildTests.setUp<   s    {{}
77<<6OP
!!"RWW\\$**M:C@FFH4<<(r   c                V    t         j                  j                  | j                         y N)r6   r1   remover.   r   s    r   tearDownzRebuildTests.tearDownD   s    %r   c                L   dd l }dd l}ddlm} |j	                   |t
        d      t        j                  j                  | j                  d             ddl
m} |j                         }|j                         }|j                         }| j                  |j!                         d       |j#                  d       |j	                   |t
        d      t        j                  j                  | j                  d             t%        j$                  |       |j                         }| j                  |j'                         d	       | j                  |j'                         d	       | j                  |j!                         d
       | j                  |j!                         d       y )Nr   )sibpathzmyrebuilder1.pyzmyrebuilder.py)myrebuilderag?zmyrebuilder2.pycdb)shutiltimetwisted.python.utilr>   copyfile__file__r/   r1   r2   r3   r+   r?   ABInheritassertEqualr@   sleepr   rC   )	r   rD   rE   r>   r?   r@   rC   ib2s	            r   test_FileRebuildzRebuildTests.test_FileRebuildG   s*   /H/0GGLL))+;<	
	
 MMOMMO!$ 	

3H/0GGLL))+;<	
 	$]]_%$$$r   c                    t        j                  d      }t        j                  t         d       |j                          | j	                  |j
                  t         j                         | j	                  t        t         j                         y)z1
        Rebuilding an unchanged module.
        r@   F)doLogN)r	   Xr   dorL   	__class__ffoo)r   xs     r   test_RebuildzRebuildTests.test_Rebuildh   s^     s#(6	&6&8&89,001r   c                R   t        j                         }|j                  t         j                  t         j                         |j                  t         j                         t        j                  t         d       |j                  t         j                        }|j                          | j                  |j                  t         j                         ddl
m} | j                  t        |j                  t         j                  t         j                  t         j                         y )Nr   )
components)r	   
XComponent
setAdapterIXXAgetComponentr   methodrL   rU   twisted.pythonr[   assertRaises
ValueErrorregisterAdapterrS   )r   rX   newComponentr[   s       r   test_ComponentInteractionz&RebuildTests.test_ComponentInteractiony   s    '')	%((*:*=*=>	'**+(!,~~&6&9&9://1A1D1DE 	.&&	
r   c                    t               } G d d      a G d dt        t              a t	        j
                  |       t        |d      sJ d       t        |d      sJ d       y )	Nc                      e Zd ZddZy)r   c                     yz.
                Dummy method
                Nr   r   s    r   rW   zFoo.foo       r   Nr$   )r   r   r   rW   r   r   r   r   r          r   r   c                      e Zd ZdZy)r   
   N)r   r   r   rX   r   r   r   r   r      s    Ar   r   rW   z"Missing method on rebuilt instancerX   z+Missing class attribute on rebuilt instance)r   r   r   r   r   updateInstancehasattr)r   rC   s     r   test_UpdateInstancez RebuildTests.test_UpdateInstance   s]     E	 		#s 	 	q!q% F"FF q#M MMr   c                T    ddl m} ddlm}  |j                  |j
                         y )Nr   r   )banana)rb   r   twisted.spreadrt   latestClassBanana)r   r   rt   s      r   test_BananaInteractionz#RebuildTests.test_BananaInteraction   s    *)FMM*r   c                    t               add}| j                  |       t        j                  t               | j	                  t        j
                         y)z~
        Rebuilding something that has a __hash__ that raises a non-TypeError
        shouldn't cause rebuild to die.
        c                     d a y r:   )unhashableObjectr   r   r   _cleanupz1RebuildTests.test_hashException.<locals>._cleanup   s    #r   Nr$   )r   r{   
addCleanupr   
assertTruer   )r   r|   s     r   test_hashExceptionzRebuildTests.test_hashException   s?     23	$ 	! (334r   c                   ddl m} ddlm}  G d d|      } |       }|j	                          | j                  |j                                 |j                  t              }| j                  t        t              t        |             | j                  ||j                  |             | j                  |j                  |j                  |j                               | j                  |j                  |j                  |j                               | j                  ||j                  |             dd}| j                  ||j                  |             y)	z5
        L{twisted.python.rebuild.Sensitive}
        r   r   )	Sensitivec                      e Zd ZddZy)2RebuildTests.test_Sensitive.<locals>.TestSensitivec                     yrk   r   r   s    r   test_methodz>RebuildTests.test_Sensitive.<locals>.TestSensitive.test_method   rl   r   Nr$   )r   r   r   r   r   r   r   TestSensitiver      rm   r   r   c                      y)z&
            Dummy method
            Nr   r   r   r   
myFunctionz/RebuildTests.test_Sensitive.<locals>.myFunction   rl   r   Nr$   )rb   r   twisted.python.rebuildr   rebuildUpToDateassertFalseneedRebuildUpdaterv   	ExceptionrL   reprlatestVersionOfr   )r   r   r   r   testSensitivenewExceptionr   s          r   test_SensitivezRebuildTests.test_Sensitive   s#    	+4	I 	 &%%'88:; +w**95i$|*<=}'D'D\'RS 	%%))-*C*CD	

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

 	(E(Em(TU	 	]%B%B:%NOr   Nr$   )r   r   r   r'   r8   r<   rP   rY   rg   rr   rx   r   r   r   r   r   r)   r)   7   s7    )&%B2"
,N$+5 )Pr   r)   c                  0    e Zd ZdZddZddZddZddZy)NewStyleTestszB
    Tests for rebuilding new-style classes of various sorts.
    c                r    t        j                  d      | _        | j                  t        j                  d<   y Nwhipping)types
ModuleTypemr6   modulesr   s    r   r8   zNewStyleTests.setUp   s&    !!*-"&&&Jr   c                *    t         j                  d= | `y r   )r6   r   r   r   s    r   r<   zNewStyleTests.tearDown   s    KK
#Fr   c                   d}t        || j                  j                         | j                  j                         }d|_        t        || j                  j                         t        j                  |       | j                  |j                  d       | j                  t        |      | j                  j                         y)zF
        Try to rebuild a new style class with slots defined.
        z*class SlottedClass:
    __slots__ = ['a']
   N)
execr   __dict__SlottedClassr@   r   rp   rL   assertIstyper   classDefinitioninsts      r   
test_slotszNewStyleTests.test_slots   s     L_dffoo.vv""$_dffoo.t$#d4j$&&"5"56r   c                   d}t        || j                  j                         | j                  j                         }|j	                  d       t        || j                  j                         t        j                  |       | j                  |d   d       | j                  t        |      | j                  j                         y)z6
        Try to rebuild a base type subclass.
        z#class ListSubclass(list):
    pass
   r   N)
r   r   r   ListSubclassappendr   rp   rL   r   r   r   s      r   test_typeSubclasszNewStyleTests.test_typeSubclass   s     E_dffoo.vv""$A_dffoo.t$a!$d4j$&&"5"56r   Nr$   )r   r   r   r'   r8   r<   r   r   r   r   r   r   r      s    )77r   r   )
__future__r   r/   r6   r   typing_extensionsr   rb   r   twisted.trial.unittestr    r	   rW   rV   r   r   r   r   r   r{   r)   r   r   r   r   <module>r      s    # 	 
  & " + 	 		# 		 		#s 	/ /"  iP8 iPX'7H '7r   