a
    óñ"h^<  ã                   @   s~  d Z ddlmZ ddlZddlmZ ddlmZmZ ddl	Z	ddlm
Z
 ddlm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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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rzejd'd(d) dS )*a¼  Test query, coverage 93%.

Non-gui tests for Query, SectionName, ModuleName, and HelpSource use
dummy versions that extract the non-gui methods and add other needed
attributes.  GUI tests create an instance of each class and simulate
entries and button clicks.  Subclass tests only target the new code in
the subclass definition.

The appearance of the widgets is checked by the Query and
HelpSource htests.  These are run by running query.py.
é    )ÚqueryN©Úrequires)ÚTkÚEND)Úmock)ÚVarc                   @   sF   e Zd ZdZG dd„ dƒZdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )Ú	QueryTestzTest Query base class.c                   @   s<   e Zd ZejjZejjZejjZdd„ Zdd„ Z	dd„ Z
dS )zQueryTest.Dummy_Queryc                 C   s&   t |d| _ddi| _d | _d| _d S )N©ÚvalueÚtextÚ F)r   ÚentryÚentry_errorÚresultÚ	destroyed©ÚselfZdummy_entry© r   úD/opt/python-3.9.21/usr/lib/python3.9/idlelib/idle_test/test_query.pyÚ__init__!   s    
zQueryTest.Dummy_Query.__init__c                 C   s   || j d< d S ©Nr   ©r   ©r   Úmessager   r   r   Ú	showerror&   s    zQueryTest.Dummy_Query.showerrorc                 C   s
   d| _ d S ©NT)r   ©r   r   r   r   Údestroy(   s    zQueryTest.Dummy_Query.destroyN)Ú__name__Ú
__module__Ú__qualname__r   ÚQueryÚentry_okÚokÚcancelr   r   r   r   r   r   r   ÚDummy_Query   s   r&   c                 C   sD   |   d¡}|  | ¡ d ¡ |  |j|jfd¡ |  d|jd ¡ d S )Nú ©NFz
blank liner   )r&   ÚassertEqualr#   r   r   ÚassertInr   ©r   Údialogr   r   r   Útest_entry_ok_blank+   s    
zQueryTest.test_entry_ok_blankc                 C   sD   |   d¡}| j}|| ¡ dƒ ||j|jfdƒ ||jd dƒ d S )Nú  good Úgoodr(   r   r   )r&   r)   r#   r   r   r   )r   r,   ÚEqualr   r   r   Útest_entry_ok_good1   s
    
zQueryTest.test_entry_ok_goodc                 C   sT   |   d¡}t ¡ |j_|  | ¡ d ¡ |  |jjj¡ |j`|  |j	|j
fd¡ d S )Nr   r(   )r&   r   ÚMockr   Z	focus_setr)   r$   Ú
assertTrueÚcalledr   r   r+   r   r   r   Útest_ok_blank8   s    
zQueryTest.test_ok_blankc                 C   s2   |   d¡}|  | ¡ d ¡ |  |j|jfd¡ d S )Nr/   )r/   T)r&   r)   r$   r   r   r+   r   r   r   Útest_ok_good@   s    
zQueryTest.test_ok_goodc                 C   s2   |   d¡}|  | ¡ d ¡ |  |j|jfd¡ d S )Nzdoes not matterr   )r&   r)   r%   r   r   r+   r   r   r   Útest_cancelE   s    
zQueryTest.test_cancelN)
r   r    r!   Ú__doc__r&   r-   r1   r5   r6   r7   r   r   r   r   r	      s   r	   c                   @   s>   e Zd ZdZG dd„ dƒZdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚSectionNameTestz#Test SectionName subclass of Query.c                   @   s*   e Zd ZejjZdgZdd„ Zdd„ ZdS )z!SectionNameTest.Dummy_SectionNameÚusedc                 C   s   t |d| _ddi| _d S ©Nr
   r   r   ©r   r   r   r   r   r   r   r   Q   s    z*SectionNameTest.Dummy_SectionName.__init__c                 C   s   || j d< d S r   r   r   r   r   r   r   T   s    z+SectionNameTest.Dummy_SectionName.showerrorN)	r   r    r!   r   ÚSectionNamer#   Ú
used_namesr   r   r   r   r   r   ÚDummy_SectionNameN   s   r?   c                 C   s0   |   d¡}|  | ¡ d ¡ |  d|jd ¡ d S ©Nr'   zno namer   ©r?   r)   r#   r*   r   r+   r   r   r   Útest_blank_section_nameW   s    
z'SectionNameTest.test_blank_section_namec                 C   s0   |   d¡}|  | ¡ d ¡ |  d|jd ¡ d S )Nr:   Zuser   rA   r+   r   r   r   Útest_used_section_name\   s    
z&SectionNameTest.test_used_section_namec                 C   s0   |   d¡}|  | ¡ d ¡ |  d|jd ¡ d S )NZ goodgoodgoodgoodgoodgoodgoodgoodzlonger than 30r   rA   r+   r   r   r   Útest_long_section_namea   s    
z&SectionNameTest.test_long_section_namec                 C   s0   |   d¡}|  | ¡ d¡ |  |jd d¡ d S )Nr.   r/   r   r   )r?   r)   r#   r   r+   r   r   r   Útest_good_section_namef   s    
z&SectionNameTest.test_good_section_nameN)	r   r    r!   r8   r?   rB   rC   rD   rE   r   r   r   r   r9   K   s   	r9   c                   @   s>   e Zd ZdZG dd„ dƒZdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚModuleNameTestz"Test ModuleName subclass of Query.c                   @   s(   e Zd ZejjZdZdd„ Zdd„ ZdS )zModuleNameTest.Dummy_ModuleNamer   c                 C   s   t |d| _ddi| _d S r;   r<   r   r   r   r   r   r   s    z(ModuleNameTest.Dummy_ModuleName.__init__c                 C   s   || j d< d S r   r   r   r   r   r   r   u   s    z)ModuleNameTest.Dummy_ModuleName.showerrorN)	r   r    r!   r   Ú
ModuleNamer#   Útext0r   r   r   r   r   r   ÚDummy_ModuleNameo   s   rI   c                 C   s0   |   d¡}|  | ¡ d ¡ |  d|jd ¡ d S r@   ©rI   r)   r#   r*   r   r+   r   r   r   Útest_blank_module_namex   s    
z%ModuleNameTest.test_blank_module_namec                 C   s0   |   d¡}|  | ¡ d ¡ |  d|jd ¡ d S )NZ __name_xyz123_should_not_exist__z	not foundr   rJ   r+   r   r   r   Útest_bogus_module_name}   s    
z%ModuleNameTest.test_bogus_module_namec                 C   s0   |   d¡}|  | ¡ d ¡ |  d|jd ¡ d S )NÚ	itertoolszsource-basedr   rJ   r+   r   r   r   Útest_c_source_name‚   s    
z!ModuleNameTest.test_c_source_namec                 C   sd   |   d¡}|  | ¡  d¡¡ |  |jd d¡ |   d¡}|  | ¡  d¡¡ |  |jd d¡ d S )NÚidlelibú__init__.pyr   r   zidlelib.idlezidle.py)rI   r3   r#   Úendswithr)   r   r+   r   r   r   Útest_good_module_name‡   s    

z$ModuleNameTest.test_good_module_nameN)	r   r    r!   r8   rI   rK   rL   rN   rR   r   r   r   r   rF   l   s   	rF   c                   @   s6   e Zd ZdZG dd„ dƒZdd„ Zdd„ Zdd	„ Zd
S )ÚGotoTestzTest Goto subclass of Query.c                   @   s$   e Zd ZejjZdd„ Zdd„ ZdS )zGotoTest.Dummy_ModuleNamec                 C   s   t |d| _ddi| _d S r;   r<   r   r   r   r   r   •   s    z"GotoTest.Dummy_ModuleName.__init__c                 C   s   || j d< d S r   r   r   r   r   r   r   ˜   s    z#GotoTest.Dummy_ModuleName.showerrorN)r   r    r!   r   ÚGotor#   r   r   r   r   r   r   rI   “   s   rI   c                 C   s0   |   d¡}|  | ¡ d ¡ |  d|jd ¡ d S )NÚaznot a base 10 integerr   rJ   r+   r   r   r   Útest_bogus_goto›   s    
zGotoTest.test_bogus_gotoc                 C   s0   |   d¡}|  | ¡ d ¡ |  d|jd ¡ d S )NÚ0znot a positive integerr   rJ   r+   r   r   r   Útest_bad_goto    s    
zGotoTest.test_bad_gotoc                 C   s0   |   d¡}|  | ¡ d¡ |  |jd d¡ d S )NÚ1é   r   r   )rI   r)   r#   r   r+   r   r   r   Útest_good_goto¥   s    
zGotoTest.test_good_gotoN)r   r    r!   r8   rI   rV   rX   r[   r   r   r   r   rS      s
   rS   c                   @   s&   e Zd ZdZG dd„ dƒZdd„ ZdS )ÚHelpsourceBrowsefileTestz8Test browse_file method of ModuleName subclass of Query.c                   @   s   e Zd ZejjZeƒ ZdS )z)HelpsourceBrowsefileTest.Dummy_HelpSourceN)r   r    r!   r   Ú
HelpSourceÚbrowse_filer   Úpathvarr   r   r   r   ÚDummy_HelpSource°   s   r`   c              	   C   s    |   ¡ }ddd„ dfddd„ tfddd„ dfddd„ tffD ]^\}}}|  ¡ < |j |¡ ||_| ¡  |  |j ¡ |¡ W d   ƒ q<1 s0    Y  q<d S )Nr   c                 S   s   dS ©Nr   r   ©rU   ÚbÚcr   r   r   Ú<lambda>»   ó    zBHelpsourceBrowsefileTest.test_file_replaces_path.<locals>.<lambda>c                 S   s   t S ©N©Ú__file__rb   r   r   r   re   ¼   rf   Zhtestc                 S   s   dS ra   r   rb   r   r   r   re   ½   rf   c                 S   s   t S rg   rh   rb   r   r   r   re   ¾   rf   )	r`   ri   ÚsubTestr_   ÚsetZaskfilenamer^   r)   Úget)r   r,   ÚpathÚfuncr   r   r   r   Útest_file_replaces_path´   s    ü
z0HelpsourceBrowsefileTest.test_file_replaces_pathN)r   r    r!   r8   r`   ro   r   r   r   r   r\   ­   s   r\   c                   @   sP   e Zd ZdZG dd„ dƒZejZedd„ ƒZ	dd„ Z
dd	„ Zd
d„ Zdd„ ZdS )ÚHelpsourcePathokTestz4Test path_ok method of HelpSource subclass of Query.c                   @   s&   e Zd ZejjZdd„ Zddd„ZdS )z%HelpsourcePathokTest.Dummy_HelpSourcec                 C   s   t |d| _ddi| _d S r;   )r   rm   Ú
path_error)r   Z
dummy_pathr   r   r   r   Ë   s    z.HelpsourcePathokTest.Dummy_HelpSource.__init__Nc                 C   s   || j d< d S r   )rq   )r   r   Zwidgetr   r   r   r   Î   s    z/HelpsourcePathokTest.Dummy_HelpSource.showerror)N)r   r    r!   r   r]   Úpath_okr   r   r   r   r   r   r`   É   s   r`   c                 C   s   | j t_d S rg   )Úorig_platformr   Úplatform©Úclsr   r   r   ÚtearDownClassÒ   s    z"HelpsourcePathokTest.tearDownClassc                 C   s0   |   d¡}|  | ¡ d ¡ |  d|jd ¡ d S )Nr'   zno help filer   )r`   r)   rr   r*   rq   r+   r   r   r   Útest_path_ok_blankÖ   s    
z'HelpsourcePathokTest.test_path_ok_blankc                 C   s4   |   td ¡}|  | ¡ d ¡ |  d|jd ¡ d S )Nzbad-bad-badz	not existr   )r`   ri   r)   rr   r*   rq   r+   r   r   r   Útest_path_ok_badÛ   s    z%HelpsourcePathokTest.test_path_ok_badc              	   C   st   |   d¡}| j}dD ]Z}|  ¡ > |j |¡ |  | ¡ |¡ |  |jd d¡ W d   ƒ q1 sd0    Y  qd S )Nr   )z
www.py.orgzhttp://py.orgr   )r`   r)   rj   rm   rk   rr   rq   )r   r,   r0   Úurlr   r   r   Útest_path_ok_webà   s    

z%HelpsourcePathokTest.test_path_ok_webc              	   C   s|   |   d¡}dD ]h\}}|  ¡ H |t_|j t¡ |  | ¡ |t ¡ |  |j	d d¡ W d   ƒ q1 sl0    Y  qd S )Nr   ))Údarwinúfile://)Úotherr   r   )
r`   rj   r   rt   rm   rk   ri   r)   rr   rq   )r   r,   rt   Úprefixr   r   r   Útest_path_ok_fileé   s    

z&HelpsourcePathokTest.test_path_ok_fileN)r   r    r!   r8   r`   r   rt   rs   Úclassmethodrw   rx   ry   r{   r€   r   r   r   r   rp   Æ   s   
	rp   c                   @   s&   e Zd ZdZG dd„ dƒZdd„ ZdS )ÚHelpsourceEntryokTestz5Test entry_ok method of HelpSource subclass of Query.c                   @   s,   e Zd ZejjZi Zi Zdd„ Zdd„ Z	dS )z&HelpsourceEntryokTest.Dummy_HelpSourcec                 C   s   | j S rg   )Únamer   r   r   r   Úitem_okú   s    z.HelpsourceEntryokTest.Dummy_HelpSource.item_okc                 C   s   | j S rg   )rm   r   r   r   r   rr   ü   s    z.HelpsourceEntryokTest.Dummy_HelpSource.path_okN)
r   r    r!   r   r]   r#   r   rq   r„   rr   r   r   r   r   r`   ö   s
   r`   c              	   C   sb   |   ¡ }dD ]P\}}}|  ¡ . || |_|_|  | ¡ |¡ W d   ƒ q1 sR0    Y  qd S )N))NNN)Núdoc.txtN)ÚdocNN)r†   r…   )r†   r…   )r`   rj   rƒ   rm   r)   r#   )r   r,   rƒ   rm   r   r   r   r   Útest_entry_ok_helpsourceÿ   s
    
z.HelpsourceEntryokTest.test_entry_ok_helpsourceN)r   r    r!   r8   r`   r‡   r   r   r   r   r‚   ó   s   	r‚   c                   @   s6   e Zd ZdZG dd„ dƒZdd„ Zdd„ Zdd	„ Zd
S )ÚCustomRunCLIargsokTestz6Test cli_ok method of the CustomRun subclass of Query.c                   @   s$   e Zd ZejjZdd„ Zdd„ ZdS )z&CustomRunCLIargsokTest.Dummy_CustomRunc                 C   s   t |d| _ddi| _d S r;   r<   r   r   r   r   r     s    z/CustomRunCLIargsokTest.Dummy_CustomRun.__init__c                 C   s   || j d< d S r   r   r   r   r   r   r     s    z0CustomRunCLIargsokTest.Dummy_CustomRun.showerrorN)r   r    r!   r   Ú	CustomRunÚcli_args_okr   r   r   r   r   r   ÚDummy_CustomRun  s   r‹   c                 C   s   |   d¡}|  | ¡ g ¡ d S )Nr'   )r‹   r)   rŠ   r+   r   r   r   Útest_blank_args  s    
z&CustomRunCLIargsokTest.test_blank_argsc                 C   s0   |   d¡}|  | ¡ d ¡ |  d|jd ¡ d S )Nz'no-closing-quotez
No closingr   )r‹   r)   rŠ   r*   r   r+   r   r   r   Útest_invalid_args  s    
z(CustomRunCLIargsokTest.test_invalid_argsc                 C   sH   g d¢}|   d |¡d ¡}|  | ¡ |dg ¡ |  |jd d¡ d S )N)z-nZ10z	--verbosez-pz/pathz--namer'   z
 "my name"zmy namer   r   )r‹   Újoinr)   rŠ   r   )r   Úargsr,   r   r   r   Útest_good_args   s    z%CustomRunCLIargsokTest.test_good_argsN)r   r    r!   r8   r‹   rŒ   r   r   r   r   r   r   rˆ     s
   rˆ   c                   @   s&   e Zd ZdZG dd„ dƒZdd„ ZdS )ÚCustomRunEntryokTestz8Test entry_ok method of the CustomRun subclass of Query.c                   @   s&   e Zd ZejjZi Zeƒ Zdd„ Z	dS )z$CustomRunEntryokTest.Dummy_CustomRunc                 C   s   | j S rg   )Úcli_argsr   r   r   r   rŠ   .  s    z0CustomRunEntryokTest.Dummy_CustomRun.cli_args_okN)
r   r    r!   r   r‰   r#   r   r   Ú
restartvarrŠ   r   r   r   r   r‹   *  s   r‹   c              
   C   s„   |   ¡ }dD ]r}|j |¡ ddgdg|fffD ]L\}}| j||d& ||_|  | ¡ |¡ W d   ƒ q01 sr0    Y  q0qd S )N>   FT)NNzmy arg)Úrestartr’   )r‹   r“   rk   rj   r’   r)   r#   )r   r,   r”   r’   r   r   r   r   Útest_entry_ok_customrun1  s    ÿz,CustomRunEntryokTest.test_entry_ok_customrunN)r   r    r!   r8   r‹   r•   r   r   r   r   r‘   '  s   r‘   c                   @   sD   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S )ÚQueryGuiTestc                 C   sB   t dƒ tƒ  | _}| j ¡  tj|dddd| _t ¡ | j_	d S )NÚguiZTESTÚtestT©Ú_utest)
r   r   ÚrootÚwithdrawr   r"   r,   r   r2   r   )rv   r›   r   r   r   Ú
setUpClass@  s
    
zQueryGuiTest.setUpClassc                 C   s   | j `| ` | j ¡  | `d S rg   )r,   r   r›   ru   r   r   r   rw   H  s    
zQueryGuiTest.tearDownClassc                 C   s(   | j j dd¡ d | j _| j j ¡  d S )Nr   Úend)r,   r   Údeleter   r   Z
reset_mockr   r   r   r   ÚsetUpO  s    zQueryGuiTest.setUpc                 C   s>   | j }|j dd¡ |j ¡  |  |jd¡ |  |jj	¡ d S ©Nr   Úabc)
r,   r   ÚinsertÚ	button_okÚinvoker)   r   r3   r   r4   r+   r   r   r   Útest_click_okT  s
    
zQueryGuiTest.test_click_okc                 C   s0   | j }|j ¡  |  |jd ¡ |  |jj¡ d S rg   )r,   r¤   r¥   r)   r   ZassertFalser   r4   r+   r   r   r   Útest_click_blank[  s    
zQueryGuiTest.test_click_blankc                 C   s>   | j }|j dd¡ |j ¡  |  |jd ¡ |  |jj	¡ d S r¡   )
r,   r   r£   Zbutton_cancelr¥   r)   r   r3   r   r4   r+   r   r   r   Útest_click_cancela  s
    
zQueryGuiTest.test_click_cancelN)
r   r    r!   r   r   rw   r    r¦   r§   r¨   r   r   r   r   r–   >  s   

r–   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚSectionnameGuiTestc                 C   s   t dƒ d S ©Nr—   r   ru   r   r   r   r   k  s    zSectionnameGuiTest.setUpClassc                 C   sl   t ƒ }| ¡  tj|dddhdd}| j}|  |jdh¡ |j dd¡ |j 	¡  |  |j
d¡ | ¡  d S )NÚTÚtr¢   Tr™   r   Zokay)r   rœ   r   r=   r)   r>   r   r£   r¤   r¥   r   r   )r   r›   r,   r0   r   r   r   Útest_click_section_nameo  s    
z*SectionnameGuiTest.test_click_section_nameN)r   r    r!   r   r   r­   r   r   r   r   r©   i  s   
r©   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚModulenameGuiTestc                 C   s   t dƒ d S rª   r   ru   r   r   r   r   }  s    zModulenameGuiTest.setUpClassc                 C   sj   t ƒ }| ¡  tj|ddddd}|  |jd¡ |  |j ¡ d¡ |j 	¡  |  
|j d¡¡ | ¡  d S )Nr«   r¬   rO   Tr™   rP   )r   rœ   r   rG   r)   rH   r   rl   r¤   r¥   r3   r   rQ   r   ©r   r›   r,   r   r   r   Útest_click_module_name  s    
z(ModulenameGuiTest.test_click_module_nameN©r   r    r!   r   r   r°   r   r   r   r   r®   {  s   
r®   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚGotoGuiTestc                 C   s   t dƒ d S rª   r   ru   r   r   r   r   Ž  s    zGotoGuiTest.setUpClassc                 C   sR   t ƒ }| ¡  tj|dddd}|j dd¡ |j ¡  |  |j	d¡ | 
¡  d S )Nr«   r¬   Tr™   r   Z22é   )r   rœ   r   rT   r   r£   r¤   r¥   r)   r   r   r¯   r   r   r   r°   ’  s    
z"GotoGuiTest.test_click_module_nameNr±   r   r   r   r   r²   Œ  s   
r²   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚHelpsourceGuiTestc                 C   s   t dƒ d S rª   r   ru   r   r   r   r   ž  s    zHelpsourceGuiTest.setUpClassc                 C   s„   t ƒ }| ¡  tj|ddtdd}| j}||j ¡ dƒ ||j ¡ tƒ |j	 
¡  tjdkr`dnd}||jd|t fƒ | ¡  d S )Nr«   Z__test__T)ZmenuitemÚfilepathrš   r|   r}   r   )r   rœ   r   r]   ri   r)   r   rl   rm   r¤   r¥   Úsysrt   r   r   )r   r›   r,   r0   r   r   r   r   Útest_click_help_source¢  s    
ÿ
z(HelpsourceGuiTest.test_click_help_sourceN)r   r    r!   r   r   r·   r   r   r   r   r´   œ  s   
r´   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚCustomRunGuiTestc                 C   s   t dƒ d S rª   r   ru   r   r   r   r   ²  s    zCustomRunGuiTest.setUpClassc                 C   sp   t ƒ }| ¡  tj|dddgdd}|  |j ¡ d¡ |j td¡ |j	 
¡  |  |jg d¢df¡ | ¡  d S )	NZTitlerU   úb=1T)r’   rš   za b=1z c)rU   r¹   rd   )r   rœ   r   r‰   r)   r   rl   r£   r   r¤   r¥   r   r   r¯   r   r   r   Útest_click_args¶  s    ÿ
z CustomRunGuiTest.test_click_argsN)r   r    r!   r   r   rº   r   r   r   r   r¸   °  s   
r¸   Ú__main__é   F)Ú	verbosityÚexit)r8   rO   r   ZunittestZtest.supportr   Útkinterr   r   r¶   r   Zidlelib.idle_test.mock_tkr   ZTestCaser	   r9   rF   rS   r\   rp   r‚   rˆ   r‘   r–   r©   r®   r²   r´   r¸   r   Úmainr   r   r   r   Ú<module>   s0   3!$-+
