o
    ^ùhG=  ã                   @   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 dS )zTest run, coverage 54%.é    )ÚrunN)Úcaptured_outputÚcaptured_stderr)Úmock)ÚFuncTc                   @   sV   e Zd Zdd„ ZdedfdedfdedffZd	d
„ Ze	j
jeddd„ ddd„ ƒZdS )ÚExceptionTestc                 C   sü   G dd„ dt ƒ}|dƒ}|dƒ}z||‚ |y[   z|‚ |yX   tƒ (}tj td¡}dd„ |_t ¡  W d   ƒ n1 sBw   Y  W d   ƒ n1 sQw   Y  Y nw Y nw | ¡  	¡  
¡ }|  dt|ƒ¡ |  d	|d
 ¡ |  d|d ¡ d S )Nc                   @   ó   e Zd Zdd„ ZdS )zJExceptionTest.test_print_exception_unhashable.<locals>.UnhashableExceptionc                 S   ó   dS )NT© )ÚselfÚotherr
   r
   ú,lib/python3.10/idlelib/idle_test/test_run.pyÚ__eq__   ó   zQExceptionTest.test_print_exception_unhashable.<locals>.UnhashableException.__eq__N)Ú__name__Ú
__module__Ú__qualname__r   r
   r
   r
   r   ÚUnhashableException   s    r   Úex1Úex2Úcleanup_tracebackc                 S   s   | S ©Nr
   ©ÚtÚer
   r
   r   Ú<lambda>    ó    z?ExceptionTest.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   s0   

þ€ÿ€ÿ€ý	z-ExceptionTest.test_print_exception_unhashableú1/0zdivision by zero
Úabcz0name 'abc' is not defined. Did you mean: 'abs'?
zint.reelzAtype object 'int' has no attribute 'reel'. Did you mean: 'real'?
c           	   
   C   s¦   | j D ]M\}}}| j|d: z
tt|ddƒƒ W n' |y@   t ¡ \}}}t |||¡d }|j› d|› }|  	||¡ Y nw W d   ƒ n1 sKw   Y  qd S )N)ÚcodeÚ Úevalr   z: )
ÚdataÚsubTestr1   ÚcompileÚsysÚexc_infor   Zget_message_linesr   r'   )	r   r/   ÚexcÚmsgÚtypÚvalr+   ÚactualZexpectr
   r
   r   Útest_get_message0   s   ü€ý€ÿzExceptionTest.test_get_messager   c                   C   s   dd„ S )Nc                 S   ó   d S r   r
   r   r
   r
   r   r   <   r   z(ExceptionTest.<lambda>.<locals>.<lambda>r
   r
   r
   r
   r   r   <   s    zExceptionTest.<lambda>©Znew_callablec                 C   s<  | j }|d |d f|d |d f|d |d ff}d}|D ]u\\}}}\}}	}
| j||fd[ z
tt|ddƒƒ W nH |yƒ   z
tt|ddƒƒ W n4 |	y€   tƒ }t ¡  W d   ƒ n1 sew   Y  | ¡ }|  ||¡ |  |
|¡ |d7 }Y nw Y nw W d   ƒ n1 sŽw   Y  q|  	|t
|ƒ¡ d S )Nr   é   é   )Zcodesr0   r1   )r2   r3   r1   r4   r   r   r#   r$   r)   r'   r(   )r   r   ÚdZdata2ZsubtestsÚcode1Zexc1Zmsg1Úcode2Zexc2Zmsg2r*   r;   r
   r
   r   Útest_get_multiple_message;   s2   .
ÿú€ý€ý€z'ExceptionTest.test_get_multiple_messageN)r   r   r   r,   ÚZeroDivisionErrorÚ	NameErrorÚAttributeErrorr2   r<   r   r!   r"   r   rD   r
   r
   r
   r   r      s    ÿý
ÿr   c                   @   ó<   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   ó   dt | ƒj S )Nz%s:str©Útyper   ©r   r
   r
   r   Ú__str__T   ó   z	S.__str__c                 C   rJ   )Nz
%s:unicoderK   rM   r
   r
   r   Ú__unicode__V   rO   zS.__unicode__c                 C   r	   ©Nr   r
   rM   r
   r
   r   Ú__len__X   r   z	S.__len__c                 C   s   t dƒS )Nr.   )ÚiterrM   r
   r
   r   Ú__iter__Z   s   z
S.__iter__c                 G   rJ   )Nz%s:itemrK   ©r   Úargsr
   r
   r   Ú__getitem__\   rO   zS.__getitem__c                 G   rJ   )Nz%s:slicerK   rU   r
   r
   r   Ú__getslice__^   rO   zS.__getslice__N)	r   r   r   rN   rP   rR   rT   rW   rX   r
   r
   r
   r   rI   S   ó    rI   c                   @   rH   )Ú	MockShellc                 C   s   |   ¡  d S r   )ÚresetrM   r
   r
   r   Ú__init__c   s   zMockShell.__init__c                 G   s   | j  |¡ d S r   )ÚwrittenÚappendrU   r
   r
   r   Úwritee   s   zMockShell.writec                 C   s
   | j  ¡ S r   )ÚlinesÚpoprM   r
   r
   r   Úreadlineg   ó   
zMockShell.readlinec                 C   r=   r   r
   rM   r
   r
   r   Úclosei   r   zMockShell.closec                 C   s
   g | _ d S r   )r]   rM   r
   r
   r   r[   k   rc   zMockShell.resetc                 C   s   t |ƒd d d… | _d S )Néÿÿÿÿ)Úlistr`   )r   r`   r
   r
   r   Úpushm   s   zMockShell.pushN)	r   r   r   r\   r_   rb   rd   r[   rg   r
   r
   r
   r   rZ   b   rY   rZ   c                   @   rH   )ÚStdInputFilesTestc                 C   sž   t ƒ }t |d¡}|  |tj¡ |  |jd¡ |  |jd¡ |  	|j
¡ |  |jd¡ |  |j¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ d S )NÚstdinúutf-8Ústrictz<stdin>)rZ   r   ÚStdInputFileÚassertIsInstanceÚioÚ
TextIOBaser'   ÚencodingÚerrorsÚassertIsNoneÚnewlinesÚnameÚassertFalseÚclosedÚ
assertTrueÚisattyÚreadableÚwritableÚseekable©r   ÚshellÚfr
   r
   r   Ú	test_miscs   ó   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 )Nri   r   Úx)
rZ   r   rl   ÚassertRaisesÚOSErrorÚfilenoÚtellÚseekr_   Ú
writelinesr|   r
   r
   r   Útest_unsupported   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 )Nri   ©úone
útwo
r0   úone
two
re   )rŠ   r‹   úthree
r0   r@   Úonr   ze
tr   z	wo
three
rŠ   r‹   r   r0   ç      ø?Ú1r?   )rZ   r   rl   rg   r'   Úreadr‚   Ú	TypeErrorr|   r
   r
   r   Ú	test_readŠ   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 )Nri   )rŠ   r‹   r   zfour
rŠ   re   r‹   r   rŒ   )ÚoneÚtwoZthreer”   r•   )rŠ   r‹   r   r@   rŽ   r?   r   Ú
r   r   r0   r   r   )	rZ   r   rl   rg   r'   rb   r‚   r’   Ú	readlinesr|   r
   r
   r   Útest_readlinež   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 )Nri   r‰   rŠ   r‹   re   r   r   é   r   r   r?   )rZ   r   rl   rg   r'   r—   r‚   r’   r|   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 )Nri   r‰   rŠ   r‹   r?   )rZ   r   rl   rg   ru   rv   r'   rb   rd   r‚   r’   r|   r
   r
   r   Ú
test_closeÌ   s   zStdInputFilesTest.test_closeN)	r   r   r   r   rˆ   r“   r˜   rš   r›   r
   r
   r
   r   rh   q   s    	rh   c                   @   rH   )ÚStdOutputFilesTestc                 C   sž   t ƒ }t |d¡}|  |tj¡ |  |jd¡ |  |jd¡ |  	|j
¡ |  |jd¡ |  |j¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ d S )NÚstdoutrj   rk   z<stdout>)rZ   r   ÚStdOutputFilerm   rn   ro   r'   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r
   r
   r   r   Ú   r€   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   )
rZ   r   rž   r‚   rƒ   r„   r…   r†   r‘   rb   r|   r
   r
   r   rˆ   è   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©rZ   r   rž   r_   r'   r]   r[   rI   rL   Ústrr‚   r’   r|   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¥   r|   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   rŠ   r•   )rŠ   r   )r•   r   õ   onÃ¨
õ   twÃ²)r«   r   )r¬   r   õ   tÃ¨st)r­   r   r   r£   r¢   )rZ   r   rž   r‡   r'   r]   r[   rI   rL   r¦   r‚   r’   r|   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    r?   )rZ   r   rž   ru   rv   r_   rd   rw   r‚   Ú
ValueErrorr'   r]   r’   r|   r
   r
   r   r›   :  s   
zStdOutputFilesTest.test_closeN)	r   r   r   r   rˆ   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	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_wrappersr5   Úsetrecursionlimitr‚   r’   r¯   )r   r~   r
   r
   r   Ú test_bad_setrecursionlimit_callsJ  s   z3RecursionLimitTest.test_bad_setrecursionlimit_callsc                 C   sT   t  ¡  |  t j¡ t ¡ }|  tj|¡ t |d ¡ t ¡ }|  ||d ¡ d S rQ   )r   r³   r´   rµ   r5   Úgetrecursionlimitr¶   r'   ©r   Zorig_reclimitZnew_reclimitr
   r
   r   Útest_roundtripR  s   z!RecursionLimitTest.test_roundtripc                 C   s4   t  ¡ }t ¡  |  tj¡ t  ¡ }|  ||¡ d S r   )r5   r¸   r   r³   r´   rµ   r'   r¹   r
   r
   r   Ú&test_default_recursion_limit_preserved_  s
   z9RecursionLimitTest.test_default_recursion_limit_preservedc                 C   sF   dd„ }t  |d¡ |  |jd¡ d |_t  |d¡ |  |jd¡ d S )Nc                   S   r	   )Z	docstringNr
   r
   r
   r
   r   Úfunch  r   z,RecursionLimitTest.test_fixdoc.<locals>.funcZmorezdocstring

more)r   Zfixdocr'   Ú__doc__)r   r¼   r
   r
   r   Útest_fixdocf  s   zRecursionLimitTest.test_fixdocN)r   r   r   r·   rº   r»   r¾   r
   r
   r
   r   r°   G  s
    r°   c                   @   r   )ÚHandleErrorTestc              
   C   s,  | j }tdƒ…}tjdtde}zt‚ ty#   tj d dd¡ Y nw |tj	dƒ dt_	|| 
¡ dƒ zt‚ tyG   tj d dd¡ Y nw |tjdƒ dt_| 
¡ }|  d|¡ |  d|¡ |  d	|¡ ||jd
ƒ W d   ƒ n1 sww   Y  W d   ƒ d S W d   ƒ d S 1 sw   Y  d S )NÚ
__stderr__z!idlelib.run.thread.interrupt_mainr>   r.   Z123TFr0   Ú
IndexErrorr@   )r'   r   r   r!   r   ÚEOFErrorr   ZMyRPCServerZhandle_errorZexit_nowr$   rÁ   Zquittingr)   Zcalled)r   ÚeqÚerrr¼   r8   r
   r
   r   Útest_fatal_errorr  s8   
ÿÿÿÿPëz HandleErrorTest.test_fatal_errorN)r   r   r   rÅ   r
   r
   r
   r   r¿   p  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   Ú
setUpClassŽ  s   zExecRuncodeTest.setUpClassc                 C   s   t jt jksJ ‚d S r   )r5   Ú
excepthookÚ__excepthook__)rË   r
   r
   r   ÚtearDownClass—  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 )Nr-   r   rÍ   c                 S   s
   t  | ¡S r   )r   r#   )r   r   r+   r
   r
   r   r   ¡  s   
 z1ExecRuncodeTest.test_exceptions.<locals>.<lambda>c                   S   r=   r   r
   r
   r
   r
   r   r   ¥  r   )rÊ   ZruncodeZassertIsZuser_exc_inforE   r´   rÈ   r5   rÎ   rÍ   rÉ   rV   r’   rw   Ú
isinstanceÚ__context__)r   rÊ   r   r   r+   r
   r
   r   Útest_exceptions›  s   




zExecRuncodeTest.test_exceptionsN)r   r   r   ÚclassmethodrÌ   rÏ   rÒ   r
   r
   r
   r   rÆ   Œ  s    

rÆ   Ú__main__r@   )Ú	verbosity)r½   Zidlelibr   rn   r5   Ztest.supportr   r   Zunittestr   Zidlelib.idle_test.mock_idler   ZtestingZTestCaser   r¦   rI   rZ   rh   rœ   r°   r¿   rÆ   r   Úmainr
   r
   r
   r   Ú<module>   s*    Dgo) ÿ