o
    Óó·i¥  ã                   @  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   ú_C:\Users\psant\Downloads\PAF backend\school\venv\Lib\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ÚtimeZtwisted.python.utilr2   ÚcopyfileÚ__file__r%   r'   r(   r)   r!   r3   ÚAÚBZ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)Z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   Z
XComponentZ
setAdapterZIXZXAZgetComponentr   Úmethodr>   rE   Útwisted.pythonrJ   ÚassertRaisesÚ
ValueErrorZregisterAdapterrC   )r   rH   ZnewComponentrJ   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   rG   •   ó    zFoo.fooNr   )r   r   r   rG   r   r   r   r   r
   ”   ó    r
   c                   @  s   e Zd ZdZdS )r   é
   N)r   r   r   rH   r   r   r   r   r   š   s    r   rG   z"Missing method on rebuilt instancerH   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)rL   r   Ztwisted.spreadrY   ÚlatestClassZBanana)r   r   rY   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   r\   Z
addCleanupr   Ú
assertTruer   )r   r]   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                   @  rP   )z2RebuildTests.test_Sensitive.<locals>.TestSensitiver   r   c                 S  rQ   rR   r   r   r   r   r   Útest_method¿   rS   z>RebuildTests.test_Sensitive.<locals>.TestSensitive.test_methodNr   )r   r   r   ra   r   r   r   r   ÚTestSensitive¾   rT   rb   r   r   c                   S  rQ   )z&
            Dummy method
            Nr   r   r   r   r   Ú
myFunctionÚ   rS   z/RebuildTests.test_Sensitive.<locals>.myFunctionNr   )rL   r   Ztwisted.python.rebuildr`   ZrebuildUpToDateZassertFalseZneedRebuildUpdaterZ   Ú	Exceptionr>   ÚreprZlatestVersionOfra   )r   r   r`   rb   ZtestSensitiveZnewExceptionrc   r   r   r   Útest_Sensitive·   s(   

þ
þ
zRebuildTests.test_SensitiveNr   )r   r   r   r   r.   r1   rB   rI   rO   rX   r[   r_   rf   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 ©NZwhipping)ÚtypesÚ
ModuleTypeÚmr,   Úmodulesr   r   r   r   r.   è   s   zNewStyleTests.setUpc                 C  s   t jd= | `d S rh   )r,   rl   rk   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)
Úexecrk   Ú__dict__ZSlottedClassr4   r   rV   r>   ÚassertIsÚtype©r   Z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)
rn   rk   ro   ZListSubclassÚappendr   rV   r>   rp   rq   rr   r   r   r   Útest_typeSubclassþ   s   


zNewStyleTests.test_typeSubclassNr   )r   r   r   r   r.   r1   rt   rw   r   r   r   r   rg   ã   s    


rg   )Ú
__future__r   r%   r,   ri   Ztyping_extensionsr   rL   r   Ztwisted.trial.unittestr   Ú r   rG   rF   r
   r   r   r   r   r\   r    rg   r   r   r   r   Ú<module>   s$    -