B
    v9aÐ  ã               @   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   ú/usr/lib/python3.7/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 )Nr   )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 )N)ÚosÚpathÚrealpathÚ__file__Údirname)Úclsr   r   r	   Ú
setUpClass*   s    zFindfilesTest.setUpClassc             C   s   | ` | `d S )N)r   r   )r   r   r   r	   ÚtearDownClass/   s    zFindfilesTest.tearDownClassc          	   C   sD   t ƒ }tt ddd¡ƒ}W d Q R X |  |g ¡ |  d| ¡ ¡ d S )NZ
invaliddirz*.*FZ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   Ú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.txtz*.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.pyz*.pyFé   T)r   r   r   r   r   r(   r   r.   r-   r    r/   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+   r0   r4   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   sF   |t j_tƒ }t  t |¡t¡ W d Q R X | ¡  	d¡}| 
¡  |S )NÚ
)Ú_grepr   r   r   r   ÚreÚcompiler   r!   ÚsplitÚpop)r   r3   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.)r>   r   r.   r    )r   r3   r=   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:r@   Ú2é   é   z(Hint:)r>   r   r.   r    Z
assertTrueÚ
startswith)r   r3   r=   r   r   r	   Ú
test_foundŠ   s    
zGrep_itTest.test_foundN)r   r   r   r>   rA   rG   r   r   r   r	   r6   v   s   r6   c               @   s   e Zd ZdS )ÚDefault_commandTestN)r   r   r   r   r   r   r	   rH   •   s   rH   Ú__main__r?   )Ú	verbosity)r   Zidlelibr   ZunittestZtest.supportr   Zidlelib.idle_test.mock_tkr   r   r9   r   r   r   r8   ZTestCaser   r6   rH   r   Úmainr   r   r   r	   Ú<module>   s   
N