
    \d                        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 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dS )    Nrebuild)TestCase   )crash_test_dummyc                       e Zd ZdS )FooN__name__
__module____qualname__     9lib/python3.11/site-packages/twisted/test/test_rebuild.pyr	   r	              Dr   r	   c                       e Zd ZdS )BarNr
   r   r   r   r   r      r   r   r   c                       e Zd ZdS )BazNr
   r   r   r   r   r      r   r   r   c                       e Zd ZdS )BuzNr
   r   r   r   r   r      r   r   r   c                       e Zd ZdZd Zd ZdS )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| _         d S )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)r   r   r   __doc__r   r!   r   r   r   r   r       s<              / / / / /r   r   c                   H    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )RebuildTestszH
    Simple testcase for rebuilding, to at least exercise the code.
    c                    |                                  | _        t          j        | j                   t          j                            | j        d          | _        t          j        | j                   t          t          j                            | j        d          d                                           t          j        
                    d| j                   d S )Ntwisted_rebuild_fakelibz__init__.pywr   )mktemplibPathosmkdirpathjoinfakelibPathopenclosesysinsertr   s    r   setUpzRebuildTests.setUp9   s    {{}}
7<<6OPP
!"""RW\\$*M::C@@FFHHH4<(((((r   c                 N    t           j                            | j                   d S N)r1   r,   remover)   r   s    r   tearDownzRebuildTests.tearDownA   s    %%%%%r   c                    dd l }dd l}ddlm} |                     |t
          d          t          j                            | j	        d                     ddl
m} |                                }|                                }|                                }|                     |                                d           |                    d           |                     |t
          d          t          j                            | j	        d                     t%          j        |           |                                }|                     |                                d	           |                     |                                d	           |                     |                                d
           |                     |                                d           d S )Nr   )sibpathzmyrebuilder1.pyzmyrebuilder.py)myrebuilderag?zmyrebuilder2.pycdb)shutiltimetwisted.python.utilr9   copyfile__file__r*   r,   r-   r.   r&   r:   ABInheritassertEqualr;   sleepr   r>   )	r   r?   r@   r9   r:   r;   r>   ib2s	            r   test_FileRebuildzRebuildTests.test_FileRebuildD   s   //////GH/00GLL)+;<<	
 	
 	
 	877777MMOOMMOO!!$$$ 	

3GH/00GLL)+;<<	
 	
 	
 	$$$]]__%%%$$$$$$$$$$$r   c                     t          j        d          }t          j        t           d           |                                 |                     |j        t           j                   |                     t          t           j                   dS )z1
        Rebuilding an unchanged module.
        r;   F)doLogN)r   Xr   dorG   	__class__ffoo)r   xs     r   test_RebuildzRebuildTests.test_Rebuildc   ss     s##(6666	&6&8999,011111r   c                 0   t          j                    }|                    t           j        t           j                   |                    t           j                   t          j        t           d           |                    t           j                  }|                                 |                     |j	        t           j                   ddl
m} |                     t          |j        t           j        t           j        t           j                   d S )Nr   )
components)r   
XComponent
setAdapterIXXAgetComponentr   methodrG   rP   twisted.pythonrV   assertRaises
ValueErrorregisterAdapterrN   )r   rS   newComponentrV   s       r   test_ComponentInteractionz&RebuildTests.test_ComponentInteractiont   s    '))	%(*:*=>>>	'*+++(!,,,~~&6&9::/1A1DEE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            d S )	Nc                       e Zd Zd ZdS )r	   c                     dS z.
                Dummy method
                Nr   r   s    r   rR   zFoo.foo         r   N)r   r   r   rR   r   r   r   r	   r	      #            r   r	   c                       e Zd ZdZdS )r   
   N)r   r   r   rS   r   r   r   r   r      s        AAAr   r   rR   z"Missing method on rebuilt instancerS   z+Missing class attribute on rebuilt instance)r   r	   r   r   r   updateInstancehasattr)r   r>   s     r   test_UpdateInstancez RebuildTests.test_UpdateInstance   s     EE	 	 	 	 	 	 	 		 	 	 	 	#s 	 	 	 	q!!!q%  FF"FFFFq#MM MMMMMMr   c                 H    ddl m} ddlm}  |j        |j                   d S )Nr   r   )banana)r]   r   twisted.spreadro   latestClassBanana)r   r   ro   s      r   test_BananaInteractionz#RebuildTests.test_BananaInteraction   sA    ******))))))FM*****r   c                     t                      ad }|                     |           t          j        t                     |                     t          j                   dS )z~
        Rebuilding something that has a __hash__ that raises a non-TypeError
        shouldn't cause rebuild to die.
        c                  
    d a d S r5   )unhashableObjectr   r   r   _cleanupz1RebuildTests.test_hashException.<locals>._cleanup   s    #r   N)r   rv   
addCleanupr   
assertTruer   )r   rw   s     r   test_hashExceptionzRebuildTests.test_hashException   s_     233	$ 	$ 	$ 	!!!   (344444r   c                     ddl m} ddlm}  G d d|          } |            }|                                 |                     |                                            |j        t                    }| 	                    t          t                    t          |                     | 	                    ||                    |                     | 	                    |j        |                    |j                             | 	                    |j        |                    |j                             | 	                    ||                    |                     d }| 	                    ||                    |                     dS )z5
        L{twisted.python.rebuild.Sensitive}
        r   r   )	Sensitivec                       e Zd Zd ZdS )2RebuildTests.test_Sensitive.<locals>.TestSensitivec                     dS rf   r   r   s    r   test_methodz>RebuildTests.test_Sensitive.<locals>.TestSensitive.test_method   rg   r   N)r   r   r   r   r   r   r   TestSensitiver~      rh   r   r   c                      dS )z&
            Dummy method
            Nr   r   r   r   
myFunctionz/RebuildTests.test_Sensitive.<locals>.myFunction   rg   r   N)r]   r   twisted.python.rebuildr|   rebuildUpToDateassertFalseneedRebuildUpdaterq   	ExceptionrG   reprlatestVersionOfr   )r   r   r|   r   testSensitivenewExceptionr   s          r   test_SensitivezRebuildTests.test_Sensitive   s    	+*****444444	 	 	 	 	I 	 	 	 &%%'''88::;;; +w*955i$|*<*<===}'D'D\'R'RSSS 	%))-*CDD	
 	
 	

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

 	(E(Em(T(TUUU	 	 	 	]%B%B:%N%NOOOOOr   N)r   r   r   r"   r3   r7   rK   rT   rb   rm   rs   rz   r   r   r   r   r$   r$   4   s         ) ) )& & &% % %>2 2 2"
 
 
,N N N$+ + +5 5 5 )P )P )P )P )Pr   r$   c                   *    e Zd ZdZd Zd Zd Zd ZdS )NewStyleTestszB
    Tests for rebuilding new-style classes of various sorts.
    c                 `    t          j        d          | _        | j        t          j        d<   d S Nwhipping)types
ModuleTypemr1   modulesr   s    r   r3   zNewStyleTests.setUp   s(    !*--"&&Jr   c                 $    t           j        d= | `d S r   )r1   r   r   r   s    r   r7   zNewStyleTests.tearDown   s    K
#FFFr   c                 j   d}t          || j        j                   | j                                        }d|_        t          || j        j                   t          j        |           |                     |j        d           |                     t          |          | j        j                   dS )zF
        Try to rebuild a new style class with slots defined.
        z*class SlottedClass:
    __slots__ = ['a']
   N)
execr   __dict__SlottedClassr;   r   rk   rG   assertIstyper   classDefinitioninsts      r   
test_slotszNewStyleTests.test_slots   s     L_dfo...v""$$_dfo...t$$$###d4jj$&"566666r   c                    d}t          || j        j                   | j                                        }|                    d           t          || j        j                   t          j        |           |                     |d         d           |                     t          |          | j        j                   dS )z6
        Try to rebuild a base type subclass.
        z#class ListSubclass(list):
    pass
   r   N)
r   r   r   ListSubclassappendr   rk   rG   r   r   r   s      r   test_typeSubclasszNewStyleTests.test_typeSubclass   s     E_dfo...v""$$A_dfo...t$$$a!$$$d4jj$&"566666r   N)r   r   r   r"   r3   r7   r   r   r   r   r   r   r      sZ         ) ) )  7 7 77 7 7 7 7r   r   )r*   r1   r   r]   r   twisted.trial.unittestr    r   rR   rQ   r	   r   r   r   r   rv   r$   r   r   r   r   <module>r      s  
 
			 



  " " " " " " + + + + + +      	 	 	 	 	 	 	 		 	 	 	 	# 	 	 		 	 	 	 	 	 	 		 	 	 	 	#s 	 	 	/ / / / / / / /"  gP gP gP gP gP8 gP gP gPT'7 '7 '7 '7 '7H '7 '7 '7 '7 '7r   