a
    ¿ßúeŸ6  ã                   @   s   d Z 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 )zTest run, coverage 49%.é    )Ú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   ú+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   ÚoutputZ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)   r3   r   r   r   Ú__getslice__7   s    zS.__getslice__N)	r   r   r   r,   r-   r/   r2   r5   r6   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Úappendr3   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   r8   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   r9   r<   r?   r@   r8   rC   r   r   r   r   r7   ;   s   r7   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>)r7   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 )NrE   r   Úx)
r7   r   rH   ÚassertRaisesÚOSErrorÚfilenoÚtellÚseekr<   Ú
writelinesrX   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 )NrE   ©úone
útwo
Ú úone
two
rA   )re   rf   úthree
rg   é   Úonr   ze
tr   z	wo
three
re   rf   r   rg   ç      ø?Ú1é   )r7   r   rH   rC   r"   Úreadr]   Ú	TypeErrorrX   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 )NrE   )re   rf   ri   zfour
re   rA   rf   ri   rh   )ÚoneÚtwoZthreerr   rs   )re   rf   ri   rj   rk   rn   r   Ú
r   r   rg   rl   rm   )	r7   r   rH   rC   r"   r?   r]   rp   Ú	readlinesrX   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 )NrE   rd   re   rf   rA   r   r   é   rl   rm   rn   )r7   r   rH   rC   r"   ru   r]   rp   rX   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 )NrE   rd   re   rf   rn   )r7   r   rH   rC   rQ   rR   r"   r?   r@   r]   rp   rX   r   r   r   Ú
test_close¥   s    zStdInputFilesTest.test_closeN)	r   r   r   r[   rc   rq   rv   rx   ry   r   r   r   r   rD   J   s   	rD   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ÚstdoutrF   rG   z<stdout>)r7   r   ÚStdOutputFilerI   rJ   rK   r"   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   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   )
r7   r   r|   r]   r^   r_   r`   ra   ro   r?   rX   r   r   r   rc   Á   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©r7   r   r|   r<   r"   r:   r8   r(   r*   Ústrr]   rp   rX   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ƒ   rX   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{   re   rs   )re   r{   )rs   r{   õ   onÃ¨
õ   twÃ²)r‰   r{   )rŠ   r{   õ   tÃ¨st)r‹   r{   r   r   r€   )r7   r   r|   rb   r"   r:   r8   r(   r*   r„   r]   rp   rX   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~   rn   )r7   r   r|   rQ   rR   r<   r@   rS   r]   Ú
ValueErrorr"   r:   rp   rX   r   r   r   ry     s    
zStdOutputFilesTest.test_closeN)	r   r   r   r[   rc   r…   rˆ   rŒ   ry   r   r   r   r   rz   ±   s   	rz   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]   rp   r   )r	   rZ   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 )Z	docstringNr   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_callabler0   Z123TFrg   Ú
IndexErrorrj   )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   t jt jksJ ‚d S r   )r”   Ú
excepthookÚ__excepthook__)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   r­   c                 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”   r®   r­   r©   r4   rp   rS   Ú
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__rj   )Ú	verbosity)rœ   Zidlelibr   rJ   r”   Ztest.supportr   r   Zunittestr   Zidlelib.idle_test.mock_idler   ZtestingZTestCaser   r„   r(   r7   rD   rz   rŽ   rž   r¦   r   Úmainr   r   r   r   Ú<module>   s&   go) 