a
    åzeŸ6  ã                   @   sü   d dl mZ d dlZd dlZd dlmZmZ d dlZd dlmZ d dl Z d dl	m
Z
 de _G dd„ dejƒZG d	d
„ d
eƒZG dd„ dƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZedkrøejdd dS )é    )ÚrunN)Úcaptured_outputÚcaptured_stderr)Úmock)ÚFuncTc                   @   s   e Zd Zdd„ ZdS )ÚPrintExceptionTestc                 C   s  G dd„ dt ƒ}|dƒ}|dƒ}z
||‚W n” |y¾   z|‚W nx |y¸   tƒ P}tj td¡"}dd„ |_t ¡  W d   ƒ n1 sŒ0    Y  W d   ƒ n1 sª0    Y  Y n0 Y n0 | ¡  	¡  
¡ }|  dt|ƒ¡ |  d	|d
 ¡ |  d|d ¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )zOPrintExceptionTest.test_print_exception_unhashable.<locals>.UnhashableExceptionc                 S   s   dS )NT© )ÚselfÚotherr   r   ú0/usr/lib/python3.9/idlelib/idle_test/test_run.pyÚ__eq__   s    zVPrintExceptionTest.test_print_exception_unhashable.<locals>.UnhashableException.__eq__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   ÚUnhashableException   s   r   Úex1Úex2Zcleanup_tracebackc                 S   s   | S ©Nr   )ÚtÚer   r   r   Ú<lambda>!   ó    zDPrintExceptionTest.test_print_exception_unhashable.<locals>.<lambda>é   zUnhashableException: ex2é   zUnhashableException: ex1é
   )Ú	Exceptionr   r   ÚpatchÚobjectr   Zside_effectÚprint_exceptionÚgetvalueÚstripÚ
splitlinesÚassertEqualÚlenÚassertIn)r	   r   r   r   ÚoutputÚctÚtbr   r   r   Útest_print_exception_unhashable   s(    
ÿ
Pz2PrintExceptionTest.test_print_exception_unhashableN)r   r   r   r(   r   r   r   r   r      s   r   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚSc                 C   s   dt | ƒj S )Nz%s:str©Útyper   ©r	   r   r   r   Ú__str__-   s    z	S.__str__c                 C   s   dt | ƒj S )Nz
%s:unicoder*   r,   r   r   r   Ú__unicode__/   s    zS.__unicode__c                 C   s   dS ©Nr   r   r,   r   r   r   Ú__len__1   s    z	S.__len__c                 C   s   t dƒS )NÚabc)Úiterr,   r   r   r   Ú__iter__3   s    z
S.__iter__c                 G   s   dt | ƒj S )Nz%s:itemr*   ©r	   Úargsr   r   r   Ú__getitem__5   s    zS.__getitem__c                 G   s   dt | ƒj S )Nz%s:slicer*   r4   r   r   r   Ú__getslice__7   s    zS.__getslice__N)	r   r   r   r-   r.   r0   r3   r6   r7   r   r   r   r   r)   ,   s   r)   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú	MockShellc                 C   s   |   ¡  d S r   )Úresetr,   r   r   r   Ú__init__<   s    zMockShell.__init__c                 G   s   | j  |¡ d S r   )ÚwrittenÚappendr4   r   r   r   Úwrite>   s    zMockShell.writec                 C   s
   | j  ¡ S r   )ÚlinesÚpopr,   r   r   r   Úreadline@   s    zMockShell.readlinec                 C   s   d S r   r   r,   r   r   r   ÚcloseB   s    zMockShell.closec                 C   s
   g | _ d S r   )r;   r,   r   r   r   r9   D   s    zMockShell.resetc                 C   s   t |ƒd d d… | _d S )Néÿÿÿÿ)Úlistr>   )r	   r>   r   r   r   ÚpushF   s    zMockShell.pushN)	r   r   r   r:   r=   r@   rA   r9   rD   r   r   r   r   r8   ;   s   r8   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚStdInputFilesTestc                 C   sž   t ƒ }t |d¡}|  |tj¡ |  |jd¡ |  |jd¡ |  	|j
¡ |  |jd¡ |  |j¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ d S )NÚstdinúutf-8Ústrictz<stdin>)r8   r   ÚStdInputFileÚassertIsInstanceÚioÚ
TextIOBaser"   ÚencodingÚerrorsÚassertIsNoneÚnewlinesÚnameÚassertFalseÚclosedÚ
assertTrueÚisattyÚreadableÚwritableÚseekable©r	   ÚshellÚfr   r   r   Ú	test_miscL   s    zStdInputFilesTest.test_miscc                 C   sd   t ƒ }t |d¡}|  t|j¡ |  t|j¡ |  t|jd¡ |  t|jd¡ |  t|j	dg¡ d S )NrF   r   Úx)
r8   r   rI   ÚassertRaisesÚOSErrorÚfilenoÚtellÚseekr=   Ú
writelinesrY   r   r   r   Útest_unsupportedZ   s    z"StdInputFilesTest.test_unsupportedc                 C   s
  t ƒ }t |d¡}| g d¢¡ |  | ¡ d¡ | g d¢¡ |  | d¡d¡ | g d¢¡ |  | d ¡d¡ | g d¢¡ |  | d¡d¡ |  | d¡d	¡ |  | d
¡d¡ | ddg¡ |  | d¡d¡ |  t|jd¡ |  t|jd¡ |  t|jdd¡ d S )NrF   ©úone
útwo
Ú úone
two
rB   )rf   rg   úthree
rh   é   Úonr   ze
tr   z	wo
three
rf   rg   r   rh   ç      ø?Ú1é   )r8   r   rI   rD   r"   Úreadr^   Ú	TypeErrorrY   r   r   r   Ú	test_readc   s"    zStdInputFilesTest.test_readc                 C   sZ  t ƒ }t |d¡}| g d¢¡ |  | ¡ d¡ |  | d¡d¡ |  | d ¡d¡ | dg¡ |  | ¡ d¡ |  | ¡ d¡ | g d¢¡ |  | ¡ d	¡ |  | ¡ d
¡ | g d¢¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d¡ | ddg¡ |  | d¡d¡ |  t|jd¡ |  t|jd¡ |  t|jdd¡ d S )NrF   )rf   rg   rj   zfour
rf   rB   rg   rj   ri   )ÚoneÚtwoZthreers   rt   )rf   rg   rj   rk   rl   ro   r   Ú
r   r   rh   rm   rn   )	r8   r   rI   rD   r"   r@   r^   rq   Ú	readlinesrY   r   r   r   Útest_readlinew   s,    zStdInputFilesTest.test_readlinec                 C   s*  t ƒ }t |d¡}| g d¢¡ |  | ¡ ddg¡ | g d¢¡ |  | d¡ddg¡ | g d¢¡ |  | d ¡ddg¡ | g d¢¡ |  | d¡ddg¡ | g d¢¡ |  | d¡dg¡ | g d¢¡ |  | d¡ddg¡ | g d¢¡ |  t|jd	¡ |  t|jd
¡ |  t|jdd¡ d S )NrF   re   rf   rg   rB   r   r   é   rm   rn   ro   )r8   r   rI   rD   r"   rv   r^   rq   rY   r   r   r   Útest_readlines   s$    z StdInputFilesTest.test_readlinesc                 C   st   t ƒ }t |d¡}| g d¢¡ |  |j¡ |  | ¡ d¡ | ¡  |  |j¡ |  | ¡ d¡ |  	t
|jd¡ d S )NrF   re   rf   rg   ro   )r8   r   rI   rD   rR   rS   r"   r@   rA   r^   rq   rY   r   r   r   Ú
test_close¥   s    zStdInputFilesTest.test_closeN)	r   r   r   r\   rd   rr   rw   ry   rz   r   r   r   r   rE   J   s   	rE   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚStdOutputFilesTestc                 C   sž   t ƒ }t |d¡}|  |tj¡ |  |jd¡ |  |jd¡ |  	|j
¡ |  |jd¡ |  |j¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ d S )NÚstdoutrG   rH   z<stdout>)r8   r   ÚStdOutputFilerJ   rK   rL   r"   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   r   r   r   r\   ³   s    zStdOutputFilesTest.test_miscc                 C   sb   t ƒ }t |d¡}|  t|j¡ |  t|j¡ |  t|jd¡ |  t|jd¡ |  t|j	d¡ d S )Nr|   r   )
r8   r   r}   r^   r_   r`   ra   rb   rp   r@   rY   r   r   r   rd   Á   s    z#StdOutputFilesTest.test_unsupportedc                 C   s  t ƒ }t |d¡}| d¡ |  |jdg¡ | ¡  | d¡ |  |jdg¡ | ¡  | tdƒ¡ |  |jdg¡ |  t|jd d ƒt	¡ | ¡  |  
t|j¡ |  |jg ¡ |  
t|jd¡ |  
t|jd¡ |  |jg ¡ |  
t|jdd	¡ |  |jg ¡ d S )
Nr|   Útest©r~   r|   õ	   tÃ¨Å›ð–™)r€   r|   r   ó   testé{   Úspam©r8   r   r}   r=   r"   r;   r9   r)   r+   Ústrr^   rq   rY   r   r   r   Ú
test_writeÊ   s&    

zStdOutputFilesTest.test_writec                 C   sæ   t ƒ }t |ddd¡}| d¡ |  |jdg¡ | ¡  | tdƒ¡ |  |jdg¡ |  t|jd d ƒt	¡ | ¡  |  
t|j¡ |  |jg ¡ |  
t|jd¡ |  
t|jd¡ |  |jg ¡ |  
t|jd	d
¡ |  |jg ¡ d S )NÚstderrziso-8859-15Úbackslashreplaceu   tÃ¨Å›ð–™Â¤)u   tÃ¨\u015b\U0001d599\xa4r‡   r   r   r‚   r~   rƒ   r„   rY   r   r   r   Útest_write_stderr_nonencodableá   s     
z1StdOutputFilesTest.test_write_stderr_nonencodablec                 C   sT  t ƒ }t |d¡}| g ¡ |  |jg ¡ | ¡  | ddg¡ |  |jddg¡ | ¡  | ddg¡ |  |jdd	g¡ | ¡  | td
ƒg¡ |  |jdg¡ |  t|jd d ƒt	¡ | ¡  |  
t|j¡ |  |jg ¡ |  
t|jd¡ |  |jg ¡ |  
t|jdg¡ |  
t|jdg¡ |  |jg ¡ |  
t|jg g ¡ |  |jg ¡ d S )Nr|   rf   rt   )rf   r|   )rt   r|   õ   onÃ¨
õ   twÃ²)rŠ   r|   )r‹   r|   õ   tÃ¨st)rŒ   r|   r   r‚   r   )r8   r   r}   rc   r"   r;   r9   r)   r+   r…   r^   rq   rY   r   r   r   Útest_writelinesõ   s8    
ÿÿz"StdOutputFilesTest.test_writelinesc                 C   sx   t ƒ }t |d¡}|  |j¡ | d¡ | ¡  |  |j¡ |  t	|jd¡ |  
|jdg¡ | ¡  |  t|jd¡ d S )Nr|   r~   r]   r   ro   )r8   r   r}   rR   rS   r=   rA   rT   r^   Ú
ValueErrorr"   r;   rq   rY   r   r   r   rz     s    
zStdOutputFilesTest.test_closeN)	r   r   r   r\   rd   r†   r‰   r   rz   r   r   r   r   r{   ±   s   	r{   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚRecursionLimitTestc                 C   sL   t  ¡  |  t j¡ tj}| jt|dd |  t|dd¡ |  t|d¡ d S )Néd   )Úlimitiè  r   )	r   Úinstall_recursionlimit_wrappersÚ
addCleanupÚ!uninstall_recursionlimit_wrappersÚsysÚsetrecursionlimitr^   rq   rŽ   )r	   r[   r   r   r   Ú test_bad_setrecursionlimit_calls#  s    z3RecursionLimitTest.test_bad_setrecursionlimit_callsc                 C   sT   t  ¡  |  t j¡ t ¡ }|  tj|¡ t |d ¡ t ¡ }|  ||d ¡ d S r/   )r   r’   r“   r”   r•   Úgetrecursionlimitr–   r"   ©r	   Zorig_reclimitZnew_reclimitr   r   r   Útest_roundtrip+  s    z!RecursionLimitTest.test_roundtripc                 C   s4   t  ¡ }t ¡  |  tj¡ t  ¡ }|  ||¡ d S r   )r•   r˜   r   r’   r“   r”   r"   r™   r   r   r   Ú&test_default_recursion_limit_preserved8  s
    z9RecursionLimitTest.test_default_recursion_limit_preservedc                 C   sF   dd„ }t  |d¡ |  |jd¡ d |_t  |d¡ |  |jd¡ d S )Nc                   S   s   d S r   r   r   r   r   r   ÚfuncA  r   z,RecursionLimitTest.test_fixdoc.<locals>.funcZmorezdocstring

more)r   Zfixdocr"   Ú__doc__)r	   rœ   r   r   r   Útest_fixdoc?  s    zRecursionLimitTest.test_fixdocN)r   r   r   r—   rš   r›   rž   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd„ ZdS )ÚHandleErrorTestc              
   C   s&  | j }tdƒ }tjdtdÒ}zt‚W n" tyL   tj d dd¡ Y n0 |tj	dƒ dt_	|| 
¡ dƒ zt‚W n" ty˜   tj d dd¡ Y n0 |tjdƒ dt_| 
¡ }|  d|¡ |  d|¡ |  d	|¡ ||jd
ƒ W d   ƒ n1 sø0    Y  W d   ƒ n1 s0    Y  d S )NÚ
__stderr__z!idlelib.run.thread.interrupt_main)Znew_callabler1   Z123TFrh   Ú
IndexErrorrk   )r"   r   r   r   r   ÚEOFErrorr   ZMyRPCServerZhandle_errorZexit_nowr   r¡   Zquittingr$   Zcalled)r	   ÚeqÚerrrœ   Úmsgr   r   r   Útest_fatal_errorK  s2    ÿÿz HandleErrorTest.test_fatal_errorN)r   r   r   r¦   r   r   r   r   rŸ   I  s   rŸ   c                   @   s,   e Zd Zedd„ ƒZedd„ ƒZdd„ ZdS )ÚExecRuncodeTestc                 C   sH   |   ttdtj¡ tƒ | _| jt_t ¡ }tdd|j_	t 
|¡| _d S )Nr   F)Úresult)ZaddClassCleanupÚsetattrr   r   r   Úprtr   ZMockZconsoleZgetvarZ	ExecutiveÚex)ÚclsZmockrpcr   r   r   Ú
setUpClassg  s    zExecRuncodeTest.setUpClassc                 C   s   d S r   r   )r¬   r   r   r   ÚtearDownClassp  s    zExecRuncodeTest.tearDownClassc                 C   sž   | j }| d¡ |  |jd t¡ |  ttdtj¡ dd„ t_	| d¡ |  | j
jd t¡ dd„ t_	| d¡ |j\}}}|  |t¡ |  t|jtƒ¡ d S )Nz1/0r   Ú
excepthookc                 S   s
   t  | ¡S r   )r   r   )r   r   r'   r   r   r   r   z  r   z1ExecRuncodeTest.test_exceptions.<locals>.<lambda>c                   S   s   d S r   r   r   r   r   r   r   ~  r   )r«   ZruncodeZassertIsZuser_exc_infoÚZeroDivisionErrorr“   r©   r•   Ú__excepthook__r¯   rª   r5   rq   rT   Ú
isinstanceÚ__context__)r	   r«   r   r   r'   r   r   r   Útest_exceptionst  s    




zExecRuncodeTest.test_exceptionsN)r   r   r   Úclassmethodr­   r®   r´   r   r   r   r   r§   e  s
   

r§   Ú__main__rk   )Ú	verbosity)Zidlelibr   rK   r•   Ztest.supportr   r   Zunittestr   Zidlelib.idle_test.mock_idler   ZtestingZTestCaser   r…   r)   r8   rE   r{   r   rŸ   r§   r   Úmainr   r   r   r   Ú<module>   s$   go) 