o
    JAfG=  ã                   @   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
   ú1/usr/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   ÚoutputÚ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ÚsubTestr2   ÚcompileÚsysÚexc_infor   Zget_message_linesr   r'   )	r   r0   ÚexcÚmsgÚtypÚvalr,   ÚactualÚ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codesr1   r2   )r3   r4   r2   r5   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ÚAttributeErrorr3   r>   r   r!   r"   r   rF   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   rL   )Nz
%s:unicoderM   rO   r
   r
   r   Ú__unicode__V   rQ   zS.__unicode__c                 C   r	   ©Nr   r
   rO   r
   r
   r   Ú__len__X   r   z	S.__len__c                 C   s   t dƒS )Nr/   )ÚiterrO   r
   r
   r   Ú__iter__Z   s   z
S.__iter__c                 G   rL   )Nz%s:itemrM   ©r   Úargsr
   r
   r   Ú__getitem__\   rQ   zS.__getitem__c                 G   rL   )Nz%s:slicerM   rW   r
   r
   r   Ú__getslice__^   rQ   zS.__getslice__N)	r   r   r   rP   rR   rT   rV   rY   rZ   r
   r
   r
   r   rK   S   ó    rK   c                   @   rJ   )Ú	MockShellc                 C   s   |   ¡  d S r   )ÚresetrO   r
   r
   r   Ú__init__c   s   zMockShell.__init__c                 G   s   | j  |¡ d S r   )ÚwrittenÚappendrW   r
   r
   r   Úwritee   s   zMockShell.writec                 C   s
   | j  ¡ S r   )ÚlinesÚpoprO   r
   r
   r   Úreadlineg   ó   
zMockShell.readlinec                 C   r?   r   r
   rO   r
   r
   r   Úclosei   r   zMockShell.closec                 C   s
   g | _ d S r   )r_   rO   r
   r
   r   r]   k   re   zMockShell.resetc                 C   s   t |ƒd d d… | _d S )Néÿÿÿÿ)Úlistrb   )r   rb   r
   r
   r   Úpushm   s   zMockShell.pushN)	r   r   r   r^   ra   rd   rf   r]   ri   r
   r
   r
   r   r\   b   r[   r\   c                   @   rJ   )ÚStdInputFilesTestc                 C   sž   t ƒ }t |d¡}|  |tj¡ |  |jd¡ |  |jd¡ |  	|j
¡ |  |jd¡ |  |j¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ d S )NÚstdinúutf-8Ústrictz<stdin>)r\   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 )Nrk   r   Úx)
r\   r   rn   ÚassertRaisesÚOSErrorÚfilenoÚtellÚseekra   Ú
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 )Nrk   ©úone
útwo
r1   úone
two
rg   )rŒ   r   úthree
r1   rB   Úonr   ze
tr   z	wo
three
rŒ   r   r   r1   ç      ø?Ú1rA   )r\   r   rn   ri   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 )Nrk   )rŒ   r   r   zfour
rŒ   rg   r   r   rŽ   )ÚoneÚtwoZthreer–   r—   )rŒ   r   r   rB   r   rA   r   Ú
r   r   r1   r‘   r’   )	r\   r   rn   ri   r'   rd   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 )Nrk   r‹   rŒ   r   rg   r   r   é   r‘   r’   rA   )r\   r   rn   ri   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 )Nrk   r‹   rŒ   r   rA   )r\   r   rn   ri   rw   rx   r'   rd   rf   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   rj   q   s    	rj   c                   @   rJ   )ÚStdOutputFilesTestc                 C   sž   t ƒ }t |d¡}|  |tj¡ |  |jd¡ |  |jd¡ |  	|j
¡ |  |jd¡ |  |j¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ d S )NÚstdoutrl   rm   z<stdout>)r\   r   ÚStdOutputFilero   rp   rq   r'   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   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   )
r\   r   r    r„   r…   r†   r‡   rˆ   r“   rd   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©r\   r   r    ra   r'   r_   r]   rK   rN   Ú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¤   )r\   r   r    r‰   r'   r_   r]   rK   rN   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¢   rA   )r\   r   r    rw   rx   ra   rf   ry   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_wrappersr6   Ú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 rS   )r   rµ   r¶   r·   r6   Ú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   )r6   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123TFr1   Ú
IndexErrorrB   )r'   r   r   r!   r   ÚEOFErrorr   ZMyRPCServerZhandle_errorZexit_nowr$   rÃ   Zquittingr)   Zcalled)r   ÚeqÚerrr¾   r9   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   )r6   Ú
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_inforG   r¶   rÊ   r6   rÐ   rÏ   rË   rX   r”   ry   Ú
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__rB   )Ú	verbosity)r¿   Zidlelibr   rp   r6   Ztest.supportr   r   Zunittestr   Zidlelib.idle_test.mock_idler   ZtestingZTestCaser   r¨   rK   r\   rj   rž   r²   rÁ   rÈ   r   Úmainr
   r
   r
   r   Ú<module>   s*    Dgo) ÿ