o
    >h                     @  s   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	 d	aG d
d dtZG dd dZG dd deeaG dd dZdaG dd de
ZG dd de
ZdS )    )annotationsN)NoReturnrebuild)TestCase   )crash_test_dummyc                   @     e Zd ZdS )FooN__name__
__module____qualname__ r   r   y/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/twisted/test/test_rebuild.pyr
          r
   c                   @  r	   )BarNr   r   r   r   r   r      r   r   c                   @  r	   )BazNr   r   r   r   r   r      r   r   c                   @  r	   )BuzNr   r   r   r   r   r      r   r   c                   @  s$   e Zd ZdZd
ddZdd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.
    returnNonec                 C  s
   d| _ d S )NF)
hashCalledselfr   r   r   __init__+   s   
zHashRaisesRuntimeError.__init__r   c                 C  s   d| _ td)NTznot a TypeError!)r   RuntimeErrorr   r   r   r   __hash__.   s   zHashRaisesRuntimeError.__hash__Nr   r   )r   r   )r   r   r   __doc__r   r   r   r   r   r   r   #   s    
r   c                   @  sj   e Zd ZdZdddZdddZddd	Zdd
dZdddZdddZ	dddZ
dddZdddZdS )RebuildTestszH
    Simple testcase for rebuilding, to at least exercise the code.
    r   r   c                 C  sb   |   | _t| j tj| jd| _t| 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   r   r   r   setUp<   s   
zRebuildTests.setUpc                 C  s   t j| j d S N)r,   r'   remover$   r   r   r   r   tearDownD   s   zRebuildTests.tearDownc           	      C  s   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| | }| | d	 | | d	 | | d
 | | d d S )Nr   )sibpathzmyrebuilder1.pyzmyrebuilder.py)myrebuilderag?zmyrebuilder2.pycdb)shutiltimetwisted.python.utilr2   copyfile__file__r%   r'   r(   r)   r!   r3   ABInheritassertEqualr4   sleepr   r7   )	r   r8   r9   r2   r3   r4   r7   ib2r   r   r   test_FileRebuildG   s.   

zRebuildTests.test_FileRebuildc                 C  sB   t d}tjt dd |  | |jt j | tt j dS )z1
        Rebuilding an unchanged module.
        r4   F)doLogN)r   Xr   dor@   	__class__ffoo)r   xr   r   r   test_Rebuildh   s
   
zRebuildTests.test_Rebuildc                 C  s~   t  }|t jt j |t j t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   methodr@   rH   twisted.pythonrM   assertRaises
ValueErrorregisterAdapterrF   )r   rK   newComponentrM   r   r   r   test_ComponentInteractiony   s   z&RebuildTests.test_ComponentInteractionc                 C  sX   t  }G dd daG dd dtta t| t|ds!J dt|ds*J dd S )	Nc                   @     e Zd ZdddZdS )r
   r   r   c                 S     dS z.
                Dummy method
                Nr   r   r   r   r   rJ          zFoo.fooNr   )r   r   r   rJ   r   r   r   r   r
          r
   c                   @  s   e Zd ZdZdS )r   
   N)r   r   r   rK   r   r   r   r   r      s    r   rJ   z"Missing method on rebuilt instancerK   z+Missing class attribute on rebuilt instance)r   r
   r   r   r   updateInstancehasattr)r   r7   r   r   r   test_UpdateInstance   s   
z RebuildTests.test_UpdateInstancec                 C  s(   ddl m} ddlm} ||j d S )Nr   r   )banana)rT   r   twisted.spreadrc   latestClassBanana)r   r   rc   r   r   r   test_BananaInteraction   s   z#RebuildTests.test_BananaInteractionc                 C  s4   t  addd}| | tt | tj dS )z~
        Rebuilding something that has a __hash__ that raises a non-TypeError
        shouldn't cause rebuild to die.
        r   r   c                   S  s   d a d S r/   )unhashableObjectr   r   r   r   _cleanup   s   z1RebuildTests.test_hashException.<locals>._cleanupNr   )r   rh   
addCleanupr   
assertTruer   )r   ri   r   r   r   test_hashException   s
   


zRebuildTests.test_hashExceptionc                 C  s   ddl m} ddlm} G dd d|}| }|  | |  |t}| 	t
tt
| | 	||| | 	|j||j | 	|j||j | 	||| ddd	}| 	||| d
S )z5
        L{twisted.python.rebuild.Sensitive}
        r   r   )	Sensitivec                   @  rZ   )z2RebuildTests.test_Sensitive.<locals>.TestSensitiver   r   c                 S  r[   r\   r   r   r   r   r   test_method   r]   z>RebuildTests.test_Sensitive.<locals>.TestSensitive.test_methodNr   )r   r   r   rn   r   r   r   r   TestSensitive   r^   ro   r   r   c                   S  r[   )z&
            Dummy method
            Nr   r   r   r   r   
myFunction   r]   z/RebuildTests.test_Sensitive.<locals>.myFunctionNr   )rT   r   twisted.python.rebuildrm   rebuildUpToDateassertFalseneedRebuildUpdatere   	Exceptionr@   reprlatestVersionOfrn   )r   r   rm   ro   testSensitivenewExceptionrp   r   r   r   test_Sensitive   s(   



zRebuildTests.test_SensitiveNr   )r   r   r   r   r.   r1   rD   rL   rY   rb   rg   rl   rz   r   r   r   r   r    7   s    



!



r    c                   @  s8   e Zd ZdZdddZdddZddd	Zdd
dZdS )NewStyleTestszB
    Tests for rebuilding new-style classes of various sorts.
    r   r   c                 C  s   t d| _| jtjd< d S Nwhipping)types
ModuleTypemr,   modulesr   r   r   r   r.      s   zNewStyleTests.setUpc                 C  s   t jd= | `d S r|   )r,   r   r   r   r   r   r   r1      s   zNewStyleTests.tearDownc                 C  s`   d}t || jj | j }d|_t || jj t| | |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__SlottedClassr4   r   r`   r@   assertIstyper   classDefinitioninstr   r   r   
test_slots   s   

zNewStyleTests.test_slotsc                 C  sf   d}t || jj | j }|d t || jj t| | |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   r`   r@   r   r   r   r   r   r   test_typeSubclass   s   


zNewStyleTests.test_typeSubclassNr   )r   r   r   r   r.   r1   r   r   r   r   r   r   r{      s    


r{   )
__future__r   r%   r,   r~   typing_extensionsr   rT   r   twisted.trial.unittestr    r   rJ   rI   r
   r   r   r   r   rh   r    r{   r   r   r   r   <module>   s$    -