B
    u9a¾"  ã               @   sr   d dl Z d dlZd dlZd dlZd dlZd dlmZ G dd„ dejƒZG dd„ dejƒZ	dd„ Z
ed	krne
ƒ  dS )
é    N)Úsupportc               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚFileCompareTestCasec          
   C   sŽ   t j| _t jd | _t jd | _d}x8| j| j| jgD ]$}t|dƒ}| |¡ W d Q R X q6W t| jdƒ}| d¡ W d Q R X t ¡ | _	d S )Nz-samez-diffzContents of file go here.
Úwza+zAn extra line.
)
r   ZTESTFNÚnameÚ	name_sameÚ	name_diffÚopenÚwriteÚtempfileÚ
gettempdirÚdir)ÚselfÚdatar   Úoutput© r   ú"/usr/lib/python3.7/test_filecmp.pyÚsetUp   s    zFileCompareTestCase.setUpc             C   s(   t  | j¡ t  | j¡ t  | j¡ d S )N)ÚosÚunlinkr   r   r   )r   r   r   r   ÚtearDown   s    zFileCompareTestCase.tearDownc             C   sl   |   t | j| j¡d¡ |   tj| j| jddd¡ |   t | j| j¡d¡ |   tj| j| jddd¡ d S )NzComparing file to itself failsF)Úshallowz&Comparing file to identical file fails)Ú
assertTrueÚfilecmpÚcmpr   r   )r   r   r   r   Útest_matching   s    z!FileCompareTestCase.test_matchingc             C   s4   |   t | j| j¡d¡ |   t | j| j¡d¡ d S )Nz!Mismatched files compare as equalz#File and directory compare as equal)ÚassertFalser   r   r   r   r   )r   r   r   r   Útest_different'   s    z"FileCompareTestCase.test_differentc             C   sJ   t j| j| jdd}t j| j| jdd}t  ¡  |  tt jƒdkd¡ d S )NF)r   r   z+Cache not cleared after calling clear_cache)	r   r   r   r   r   Zclear_cacher   ÚlenÚ_cache)r   Zfirst_compareZsecond_comparer   r   r   Útest_cache_clear-   s
    z$FileCompareTestCase.test_cache_clearN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r   r   
   s
   
r   c               @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚDirCompareTestCasec          
   C   s  t  ¡ }tj |d¡| _tj |d¡| _tj |d¡| _tj | jd¡| _tj 	d¡tj 	d¡k| _
d}xv| j| j| j| jfD ]^}t |d¡ t |¡ | j
r®|| jkr®d	}nd
}ttj ||¡dƒ}| |¡ W d Q R X q~W ttj | jd¡dƒ}| d¡ W d Q R X d S )Nr   zdir-samezdir-diffz.hgÚAÚazContents of file go here.
TÚFiLeÚfiler   Úfile2zAn extra file.
)r
   r   r   ÚpathÚjoinr   Údir_sameÚdir_diffZdir_ignoredÚnormcaseÚcaseinsensitiveÚshutilÚrmtreeÚmkdirr   r	   )r   Ztmpdirr   r   Úfnr   r   r   r   r   5   s"    
zDirCompareTestCase.setUpc             C   s(   x"| j | j| jfD ]}t |¡ qW d S )N)r   r+   r,   r/   r0   )r   r   r   r   r   r   N   s    zDirCompareTestCase.tearDownc             C   s   |   dtj¡ d S )Nz.hg)ZassertInr   ZDEFAULT_IGNORES)r   r   r   r   Útest_default_ignoresR   s    z'DirCompareTestCase.test_default_ignoresc          	   C   sø   |   t | j| jdg¡dgg g fkd¡ |   t | j| jdg¡dgg g fkd¡ |   tj| j| jdgdddgg g fkd¡ |   tj| j| jdgddd¡ ttj | jd¡dƒ}| 	d¡ W d Q R X |  
t | j| jddg¡dgdgg fkd	¡ d S )
Nr'   z#Comparing directory to itself failsz!Comparing directory to same failsF)r   r(   r   zDifferent contents.
z&Comparing mismatched directories fails)r   r   Zcmpfilesr   r+   r   r   r)   r*   r	   r   )r   r   r   r   r   Útest_cmpfilesU   s&    z DirCompareTestCase.test_cmpfilesc          	   C   s*  | j | j }}t ||¡}|  |j|¡ |  |j|¡ | jrZ|  |j|j	gdgdgg¡ n|  |j|j	gdgdgg¡ |  |j
dg¡ |  |jg ¡ |  |jg ¡ |  |jdg¡ |  |jg ¡ d | j | j¡dg}|  |j|¡ | j | j }}t ||¡}|  |j|¡ |  |j|¡ |  |jdg¡ |  |j	ddg¡ |  |j
dg¡ |  |jg ¡ |  |jdg¡ |  |jdg¡ |  |jg ¡ d | j | j¡d | j¡dg}|  |j|¡ | j | j }}t tj | jd¡tj | j d¡¡ t ||¡}|  |j|¡ |  |j|¡ |  |jddg¡ |  |j	dg¡ |  |j
dg¡ |  |jdg¡ |  |jg ¡ |  |jdg¡ |  |jg ¡ d | j | j¡d | j ¡dg}|  |j|¡ ttj | jd¡dƒ}| d¡ W d Q R X t | j | j¡}|  |jdg¡ |  |jdg¡ d | j | j¡dd	g}|  |j|¡ d S )
Nr'   r&   z
diff {} {}zIdentical files : ['file']r(   zOnly in {} : ['file2']r   zDifferent contents.
zDiffering files : ['file2'])r   r+   r   ÚdircmpÚassertEqualÚleftÚrightr.   Z	left_listZ
right_listÚcommonZ	left_onlyZ
right_onlyZ
same_filesZ
diff_filesÚformatÚ_assert_reportZreportr,   r/   Zmover   r)   r*   r   r	   )r   Úleft_dirÚ	right_dirÚdÚexpected_reportr   r   r   r   Útest_dircmpp   sr    

zDirCompareTestCase.test_dircmpc             C   s@   | j | j }}t ||¡}d | j | j¡dg}|  |j|¡ d S )Nz
diff {} {}zIdentical files : ['file'])r   r+   r   r5   r:   r;   Zreport_partial_closure)r   r<   r=   r>   r?   r   r   r   Útest_report_partial_closure¼   s
    z.DirCompareTestCase.test_report_partial_closurec             C   s@   | j | j }}t ||¡}d | j | j¡dg}|  |j|¡ d S )Nz
diff {} {}zIdentical files : ['file'])r   r+   r   r5   r:   r;   Zreport_full_closure)r   r<   r=   r>   r?   r   r   r   Útest_report_full_closureÅ   s
    z+DirCompareTestCase.test_report_full_closurec          	   C   s<   t  ¡ *}|ƒ  | ¡  ¡  d¡}|  ||¡ W d Q R X d S )NÚ
)r   Zcaptured_stdoutÚgetvalueÚstripÚsplitr6   )r   Zdircmp_reportZexpected_report_linesÚstdoutZreport_linesr   r   r   r;   Î   s    
z!DirCompareTestCase._assert_reportN)r    r!   r"   r   r   r3   r4   r@   rA   rB   r;   r   r   r   r   r#   4   s   L		r#   c               C   s   t  tt¡ d S )N)r   Zrun_unittestr   r#   r   r   r   r   Ú	test_mainÕ   s    rH   Ú__main__)r   r   r/   r
   ZunittestZtestr   ZTestCaser   r#   rH   r    r   r   r   r   Ú<module>   s   * "