o
    JAf                      @   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re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   5/usr/lib/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   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+   filename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)r4   rB   r3   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 )Nr3   r   C0(base)r6   rB   zdifferent name)r   r   transform_childrenlistmock_pyclbr_treer4   rB   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   r9   r6   C1())r   r   rM   rN   r4   childrenr9   r<   rP   rB   rE   rJ   rQ   r   r   r   test_transform_node_childrenn   s   z2TransformChildrenTest.test_transform_node_childrenN)r/   r0   r1   rR   rU   r   r   r   r   rK   ]   s    rK   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   rX   filerW   r   r   r   r   r         z#ModuleBrowserTreeItemTest.test_initc                 C   s   |  | j t d S r   )r   rX   GetTextrW   r[   r   r   r   test_gettext      z&ModuleBrowserTreeItemTest.test_gettextc                 C   s   |  | j d d S )Npython)r   rX   GetIconNamer[   r   r   r   test_geticonname   r_   z*ModuleBrowserTreeItemTest.test_geticonnamec                 C   s   |  | j  d S r   )r)   rX   IsExpandabler[   r   r   r   test_isexpandable   r\   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_exrM   r   rO   rB   r4   r   rX   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 )Nre   rB   rL   )rX   r   rB   r4   rg   
GetSubListr   r   ChildBrowserTreeItemr   rP   )r   rX   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 sBw   Y  d S )Nzos.path.existsF)return_valueT)rX   r   patchOnDoubleClickZassert_not_calledassert_calledZcalled_withrW   )r   fopenrX   r   r   r   test_ondoubleclick   s   
"z,ModuleBrowserTreeItemTest.test_ondoubleclickN)r/   r0   r1   r2   r   r   r^   rb   rd   rh   rk   r   rn   rr   r   r   r   r   rV   |   s    

rV   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   rj   rE   cbt_f1r<   cbt_C1r9   cbt_F1)r   CBTr   r   r   r      s   

z#ChildBrowserTreeItemTest.setUpClassc                 C   s   | ` | `| `d S r   )ru   rt   rv   r   r   r   r   r      rY   z&ChildBrowserTreeItemTest.tearDownClassc                 C   sB   | j }|| jjd | | jj || jjd | | jj d S )NrS   rE   )r   ru   rP   assertFalseZ
isfunctionrt   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   ru   r]   rt   r[   r   r   r   r^         z%ChildBrowserTreeItemTest.test_gettextc                 C   ry   )Nfolderr`   )r   ru   ra   rt   r[   r   r   r   rb      rz   z)ChildBrowserTreeItemTest.test_geticonnamec                 C   s4   |  | j  |  | j  | | j  d S r   )r)   ru   rc   rt   rx   rv   r[   r   r   r   rd      s   z*ChildBrowserTreeItemTest.test_isexpandablec                 C   sX   | j }tj}| j }| |d | |t|d ||d jd || j g  d S )Nr   r6   rH   )	r   r   rj   rt   ri   r   lenrP   rv   )r   r   rw   Z	f1sublistr   r   r   rk      s   
z(ChildBrowserTreeItemTest.test_getsublistrl   c                 C   s>   t   }|j_| j  |  |  || jjj	 d S r   )
r   ZMockrm   Zgotolinerv   ro   rp   Zassert_called_withobjlineno)r   rq   Zgotor   r   r   rr      s
   
z+ChildBrowserTreeItemTest.test_ondoubleclickN)r/   r0   r1   r2   r   r   r   r^   rb   rd   rk   r   rn   rr   r   r   r   r   rs      s    

rs   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)	rB   rL   rE   rJ   r9   rS   rH   r?   rA   )r`   r{   )r   r   rj   extendrB   r4   popleftri   r   rP   r]   ra   ZassertIsrc   appendr   )r   queueZactual_namesZexpected_namesrw   cbZsublistr   r   r   test_nested   s   
zNestedChildrenTest.test_nestedN)r/   r0   r1   __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   Zos.pathr    r   tkinterr   Zidlelib.treer	   ZTestCaser
   r   modulerW   ZClassr4   Z_nest_functionr9   Z_nest_classr<   r?   rA   ZFunctionrB   rE   rH   rJ   rO   rM   rT   rK   rV   rs   r   r/   mainr   r   r   r   <module>   sD    6
56