o
    JAfÐ  ã                   @   sº   d Z ddlmZ ddlZddlmZ ddlmZ ddlZddl	Z	G dd„ dƒZ
e
ƒ ZG dd	„ d	ƒZeƒ 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 )a    !Changing this line will break Test_findfile.test_found!
Non-gui unit tests for grep.GrepDialog methods.
dummy_command calls grep_it calls findfiles.
An exception raised in one method will fail callers.
Otherwise, tests are mostly independent.
Currently only test grep_it, coverage 51%.
é    )ÚgrepN)Úcaptured_stdout)ÚVarc                   @   s   e Zd ZdZdd„ ZdS )ÚDummy_searchenginezÒGrepDialog.__init__ calls parent SearchDiabolBase which attaches the
    passed in SearchEngine instance as attribute 'engine'. Only a few of the
    many possible self.engine.x attributes are needed here.
    c                 C   s   | j S ©N)Ú_pat©Úself© r
   ú2/usr/lib/python3.10/idlelib/idle_test/test_grep.pyÚgetpat   s   zDummy_searchengine.getpatN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r
   r
   r
   r   r      s    r   c                   @   s(   e Zd ZejjZedƒZeZ	dd„ Z
dS )Ú
Dummy_grepFc                 C   s   d S r   r
   r   r
   r
   r   Úclose"   s   zDummy_grep.closeN)r   r   r   r   Z
GrepDialogÚgrep_itr   ZrecvarÚsearchengineÚenginer   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 )ÚFindfilesTestc                 C   s"   t j t¡| _t j | j¡| _d S r   )ÚosÚpathÚrealpathÚ__file__Údirname©Úclsr
   r
   r   Ú
setUpClass*   s   zFindfilesTest.setUpClassc                 C   s   | ` | `d S r   )r   r   r   r
   r
   r   ÚtearDownClass/   s   zFindfilesTest.tearDownClassc                 C   sX   t ƒ }tt ddd¡ƒ}W d   ƒ n1 sw   Y  |  |g ¡ |  d| ¡ ¡ d S )NZ
invaliddirz*.*FÚinvalid)r   Úlistr   Ú	findfilesÚassertEqualÚassertInÚgetvalue)r	   ÚsÚfilelistr
   r
   r   Útest_invaliddir3   s
   ÿzFindfilesTest.test_invaliddirc                 C   sV   t j}t ¡ }t | j¡ d}t|tj|dƒƒ}|  tj 	tj|¡|¡ t |¡ d S )Nztest_grep.pyF)
r   r"   r   ÚgetcwdÚchdirr   r!   Úcurdirr$   Újoin)r	   ÚffÚsave_cwdÚfilenamer'   r
   r
   r   Útest_curdir9   s   zFindfilesTest.test_curdirc                 C   sÂ   t j}tj | jd¡}t|| jddƒƒ}|  t|ƒd¡ |  | j	|¡ |  
||¡ t|| jddƒƒ}|  t|ƒd¡ |  
| j	|¡ |  ||¡ t|| jddƒƒ}|  t|ƒd¡ |  
| j	|¡ d S )Nz
README.txtú*.pyFé
   z*.txtr   zgrep.*)r   r"   r   r   r,   r!   ÚassertGreaterÚlenr$   r   ÚassertNotInZassertNotEqualr#   )r	   r-   Zreadmer'   r
   r
   r   Ú	test_baseC   s   zFindfilesTest.test_basec                 C   sÌ   t j}tj | j¡}tj |d¡}d}t|||dƒƒ}t|ƒ}|  |d¡ |  	||¡ |  
| j|¡ t|||dƒƒ}|  t|ƒ|¡ |  	||¡ |  	| j|¡ tj |¡}t||ddƒƒ}|  	| j|¡ d S )Nzgrep.pyr1   Fé   T)r   r"   r   r   r   r,   r!   r4   r3   r$   r5   r   )r	   r-   ÚparentZgrepfileÚpatr'   Zparent_sizer
   r
   r   Útest_recurseY   s    zFindfilesTest.test_recurseN)
r   r   r   Úclassmethodr   r   r(   r0   r6   r:   r
   r
   r
   r   r   (   s    


r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚGrep_itTestc                 C   sZ   |t j_tƒ }t  t |¡t¡ W d   ƒ n1 sw   Y  | ¡  	d¡}| 
¡  |S )NÚ
)Ú_grepr   r   r   r   ÚreÚcompiler   r%   ÚsplitÚpop)r	   r9   r&   Úlinesr
   r
   r   Úreport{   s   ÿzGrep_itTest.reportc                 C   sB   d}|   |¡}|  t|ƒd¡ |  ||d ¡ |  |d d¡ d S )Nzxyz*xyz*xyz*xyz*xyz*xyz*xyz*é   r   é   zNo hits.)rD   r#   r4   r$   ©r	   r9   rC   r
   r
   r   Útest_unfoundƒ   s
   
zGrep_itTest.test_unfoundc                 C   sf   d}|   |¡}|  t|ƒd¡ |  ||d ¡ |  d|d ¡ |  d|d ¡ |  |d  d	¡¡ d S )
Nz<""" !Changing this line will break Test_findfile.test_found!é   r   zpy: 1:rF   Ú2é   é   z(Hint:)rD   r#   r4   r$   Z
assertTrueÚ
startswithrG   r
   r
   r   Ú
test_foundŠ   s   
zGrep_itTest.test_foundN)r   r   r   rD   rH   rN   r
   r
   r
   r   r<   v   s    r<   c                   @   s   e Zd ZdS )ÚDefault_commandTestN)r   r   r   r
   r
   r
   r   rO   •   s    rO   Ú__main__rE   )Ú	verbosity)r   Zidlelibr   ZunittestZtest.supportr   Zidlelib.idle_test.mock_tkr   r   r?   r   r   r   r>   ZTestCaser   r<   rO   r   Úmainr
   r
   r
   r   Ú<module>   s"    
Nÿ