o
    ^ùhä   ã                   @   sÀ  d Z ddlmZ ddlm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 ddlZddlZdd	lmZ dd
lmZ G dd„ dejƒZeZd\ZZejeddgedddZe eddd¡Ze eddddg¡Ze eddd¡Ze eddd¡Z ej!ededddZ"e e"dd d!¡Z#e e#d"d#d#¡Z$e e"d$dd¡Z%ee"d%œZ&e 'e&d&¡ e 'ej(¡ 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.d0d1 dS dS )2zTest browser, coverage 90%.é    )Úbrowser)ÚrequiresN)Úmock)ÚFunc)Úpy_extensions)Údeque)ÚTk)ÚTreeNodec                   @   sL   e Zd Zedd„ ƒZedd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )ÚModuleBrowserTestc                 C   s2   t dƒ tƒ | _| j ¡  tj| jtdd| _d S )NZguiT)Z_utest)r   r   ÚrootZwithdrawr   ZModuleBrowserÚ__file__Úmb©Úcls© r   ú0lib/python3.10/idlelib/idle_test/test_browser.pyÚ
setUpClass   s   
zModuleBrowserTest.setUpClassc                 C   s*   | j  ¡  | j ¡  | j ¡  | `| ` d S ©N)r   Úcloser   Zupdate_idletasksÚdestroyr   r   r   r   ÚtearDownClass   s   


zModuleBrowserTest.tearDownClassc                 C   sB   | j }| j}||jtƒ |tji ƒ |  |jt¡ |  	t
j¡ d S r   )r   ÚassertEqualÚpathr   ÚpyclbrZ_modulesÚassertIsInstanceÚnoder	   ZassertIsNotNoner   Z	file_open)Úselfr   Úeqr   r   r   Ú	test_init"   s   zModuleBrowserTest.test_initc                 C   s6   | j }|  tj t¡|j ¡ ¡ |  |j 	¡ d¡ d S )NzModule Browser)
r   ÚassertInÚosr   Úbasenamer   ÚtopÚtitler   Ziconname©r   r   r   r   r   Útest_settitle*   s   zModuleBrowserTest.test_settitlec                 C   s    | j }| ¡ }|  |tj¡ d S r   )r   Zrootnoder   r   ÚModuleBrowserTreeItem)r   r   Zrnr   r   r   Útest_rootnode/   s   zModuleBrowserTest.test_rootnodec                 C   sR   | j }tƒ |j_tƒ |j_| ¡  |  |jjj¡ |  |jjj¡ |j`|j`d S r   )r   r   r"   r   r   r   Ú
assertTrueZcalledr$   r   r   r   Ú
test_close4   s   

zModuleBrowserTest.test_closec              	   C   sj   d}t D ].}| j|d |› |› }t |¡}|tjv}|  ||¡ W d   ƒ n1 s-w   Y  qd S )Nz/path/to/file)Úext)r   ZsubTestr   Zis_browseable_extensionZbrowseable_extension_blocklistr   )r   r   r*   ÚfilenameZactualZexpectedr   r   r   Útest_is_browseable_extension=   s   

ü€ÿz.ModuleBrowserTest.test_is_browseable_extensionN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r   r   r%   r'   r)   r,   r   r   r   r   r
      s    

	r
   )Útestztest.pyÚC0Úbaseé   é	   )Ú
end_linenoÚF1é   é   ÚC1é   Ú ÚC2é   ÚF3Úf0é   é   Úf1é   é   Úf2é   Úc1)r2   r@   r1   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTransformChildrenTestc                 C   s‚   | j }tj}t|tdƒƒ}||ttgƒ ||d jdƒ ||d jdƒ t|tdƒƒ}||d jdƒ t|tdƒƒ}||g ƒ d S )Nr1   r   úC0(base)r4   r@   zdifferent name)r   r   Útransform_childrenÚlistÚmock_pyclbr_treer2   r@   Úname©r   r   Z	transformZtclr   r   r   Útest_transform_module_children_   s   z4TransformChildrenTest.test_transform_module_childrenc                 C   s‚   | j }tj}t|tjƒƒ}||ttgƒ ||d jdƒ ||d jdƒ t|tjƒƒ}||d jdƒ |t|t	jƒƒt
tgƒ d S )Nr   r7   r4   úC1())r   r   rK   rL   r2   Úchildrenr7   r:   rN   r@   rC   rH   rO   r   r   r   Útest_transform_node_childrenn   s   z2TransformChildrenTest.test_transform_node_childrenN)r-   r.   r/   rP   rS   r   r   r   r   rI   ]   s    rI   c                   @   sZ   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
e d¡dd„ ƒZdS )ÚModuleBrowserTreeItemTestc                 C   s   t  t¡| _d S r   )r   r&   ÚfnameÚmbtr   r   r   r   r   ~   ó   z$ModuleBrowserTreeItemTest.setUpClassc                 C   s   |   | jjt¡ d S r   )r   rV   ÚfilerU   ©r   r   r   r   r   ‚   ó   z#ModuleBrowserTreeItemTest.test_initc                 C   s   |   | j ¡ t¡ d S r   )r   rV   ÚGetTextrU   rY   r   r   r   Útest_gettext…   ó   z&ModuleBrowserTreeItemTest.test_gettextc                 C   s   |   | j ¡ d¡ d S )NÚpython)r   rV   ÚGetIconNamerY   r   r   r   Útest_geticonnameˆ   r]   z*ModuleBrowserTreeItemTest.test_geticonnamec                 C   s   |   | j ¡ ¡ d S r   )r(   rV   ÚIsExpandablerY   r   r   r   Útest_isexpandable‹   rZ   z+ModuleBrowserTreeItemTest.test_isexpandablec                 C   sh   t jj}t j}ttdt j_tttgdt _z|  | j	 
¡ ttg¡ W |t j_|t _d S |t j_|t _w )N©Úresult)r   r   Zreadmodule_exrK   r   rM   r@   r2   r   rV   Úlistchildren)r   Zsave_rexZsave_tcr   r   r   Útest_listchildrenŽ   s   
ÿz+ModuleBrowserTreeItemTest.test_listchildrenc                 C   sb   | j }tttgd|_| ¡ \}}|`|  |tj¡ |  |tj¡ |  	|j
d¡ |  	|j
d¡ d S )Nrc   r@   rJ   )rV   r   r@   r2   re   Ú
GetSubListr   r   ÚChildBrowserTreeItemr   rN   )r   rV   Zsub0Zsub1r   r   r   Útest_getsublist™   s   z)ModuleBrowserTreeItemTest.test_getsublistúidlelib.browser.file_openc                 C   sŠ   | j }tjddd | ¡  | ¡  W d   ƒ n1 sw   Y  tjddd | ¡  | t¡ W d   ƒ d S 1 s>w   Y  d S )Nzos.path.existsF)Úreturn_valueT)rV   r   ÚpatchÚOnDoubleClickZassert_not_calledZassert_called_once_withrU   )r   ÚfopenrV   r   r   r   Útest_ondoubleclick£   s   
þ"þz,ModuleBrowserTreeItemTest.test_ondoubleclickN)r-   r.   r/   r0   r   r   r\   r`   rb   rf   ri   r   rl   ro   r   r   r   r   rT   |   s    

rT   c                   @   s^   e Zd Zedd„ ƒZedd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
e d¡dd„ ƒZdS )ÚChildBrowserTreeItemTestc                 C   s(   t j}|tƒ| _|tƒ| _|tƒ| _d S r   )r   rh   rC   Úcbt_f1r:   Úcbt_C1r7   Úcbt_F1)r   ÚCBTr   r   r   r   ²   s   

z#ChildBrowserTreeItemTest.setUpClassc                 C   s   | ` | `| `d S r   )rr   rq   rs   r   r   r   r   r   ¹   rW   z&ChildBrowserTreeItemTest.tearDownClassc                 C   sB   | j }|| jjdƒ |  | jj¡ || jjdƒ |  | jj¡ d S )NrQ   rC   )r   rr   rN   ÚassertFalseZ
isfunctionrq   r(   )r   r   r   r   r   r   ½   s
   z"ChildBrowserTreeItemTest.test_initc                 C   ó(   |   | j ¡ d¡ |   | j ¡ d¡ d S )Nz
class C1()zdef f1(...))r   rr   r[   rq   rY   r   r   r   r\   Ä   ó   z%ChildBrowserTreeItemTest.test_gettextc                 C   rv   )NÚfolderr^   )r   rr   r_   rq   rY   r   r   r   r`   È   rw   z)ChildBrowserTreeItemTest.test_geticonnamec                 C   s4   |   | j ¡ ¡ |   | j ¡ ¡ |  | j ¡ ¡ d S r   )r(   rr   ra   rq   ru   rs   rY   r   r   r   rb   Ì   s   z*ChildBrowserTreeItemTest.test_isexpandablec                 C   sX   | j }tj}| j ¡ }|  |d |¡ |t|ƒdƒ ||d jdƒ || j ¡ g ƒ d S )Nr   r4   rF   )	r   r   rh   rq   rg   r   ÚlenrN   rs   )r   r   rt   Z	f1sublistr   r   r   ri   Ñ   s   
z(ChildBrowserTreeItemTest.test_getsublistrj   c                 C   s>   t  ¡  }|j_| j ¡  | ¡  | ¡  | | jjj	¡ d S r   )
r   ZMockrk   Zgotoliners   rm   Zassert_calledZassert_called_withÚobjÚlineno)r   rn   Zgotor   r   r   ro   Ü   s
   
z+ChildBrowserTreeItemTest.test_ondoubleclickN)r-   r.   r/   r0   r   r   r   r\   r`   rb   ri   r   rl   ro   r   r   r   r   rp   °   s    

rp   c                   @   s   e Zd ZdZdd„ ZdS )ÚNestedChildrenTestzFTest that all the nodes in a nested tree are added to the BrowserTree.c                 C   s¢   t ƒ }g }g d¢}tj}| |tƒ|tƒf¡ |rI| ¡ }| ¡ }| |¡ |  |j	| 
¡ ¡ |  | ¡ d¡ |  | ¡ |g k¡ | |j	¡ |s|  ||¡ d S )N)	r@   rJ   rC   rH   r7   rQ   rF   r=   r?   )r^   rx   )r   r   rh   Úextendr@   r2   Úpopleftrg   r   rN   r[   r_   ZassertIsra   Úappendr   )r   ÚqueueZactual_namesZexpected_namesrt   ÚcbZsublistr   r   r   Útest_nestedé   s   
ùzNestedChildrenTest.test_nestedN)r-   r.   r/   Ú__doc__r‚   r   r   r   r   r|   æ   s    r|   Ú__main__é   )Ú	verbosity)/rƒ   Zidlelibr   Ztest.supportr   Zunittestr   Zidlelib.idle_test.mock_idler   Zidlelib.utilr   Úcollectionsr   Úos.pathr    r   Ztkinterr   Zidlelib.treer	   ZTestCaser
   r   ÚmodulerU   ZClassr2   Z_nest_functionr7   Z_nest_classr:   r=   r?   ZFunctionr@   rC   rF   rH   rM   rK   rR   rI   rT   rp   r|   r-   Úmainr   r   r   r   Ú<module>   sD    6
46ÿ