a
    ¾ßúeÐ  ã                   @   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 )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
   ú,lib/python3.9/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.0    Y  |  |g ¡ |  d| ¡ ¡ d S )NZ
invaliddirz*.*FZinvalid)r   Úlistr   Ú	findfilesÚassertEqualÚassertInÚgetvalue)r	   ÚsÚfilelistr
   r
   r   Útest_invaliddir3   s    0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	   ÚffZ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.pyr/   Fé   T)r   r!   r   r   r   r+   r    r2   r1   r#   r3   r   )r	   r,   ÚparentZgrepfileÚpatr&   Zparent_sizer
   r
   r   Útest_recurseY   s     zFindfilesTest.test_recurseN)
r   r   r   Úclassmethodr   r   r'   r.   r4   r8   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 s60    Y  | ¡  	d¡}| 
¡  |S )NÚ
)Ú_grepr   r   r   r   ÚreÚcompiler   r$   ÚsplitÚpop)r	   r7   r%   Úlinesr
   r
   r   Úreport{   s    0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.)rB   r"   r2   r#   ©r	   r7   rA   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:rD   Ú2é   é   z(Hint:)rB   r"   r2   r#   Z
assertTrueÚ
startswithrE   r
   r
   r   Ú
test_foundŠ   s    
zGrep_itTest.test_foundN)r   r   r   rB   rF   rL   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   rM   •   s   rM   Ú__main__rC   )Ú	verbosity)r   Zidlelibr   ZunittestZtest.supportr   Zidlelib.idle_test.mock_tkr   r   r=   r   r   r   r<   ZTestCaser   r:   rM   r   Úmainr
   r
   r
   r   Ú<module>   s   
N