a
    äzen"  ã                   @   sl   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	e
dkrhe ¡  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}| j| j| jfD ]8}t|dƒ}| |¡ W d   ƒ q41 sb0    Y  q4t| jdƒ}| d¡ W d   ƒ n1 sš0    Y  t ¡ | _	d S )Nz-samez-diffú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.9/test/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 )NFr   r   z+Cache not cleared after calling clear_cache)	r   r   r   r   r   Ú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   s6  t  ¡ }tj |d¡| _tj |d¡| _tj |d¡| _tj | jd¡| _tj 	d¡tj 	d¡k| _
d}| j| j| j| jfD ]r}t |d¡ t |¡ | j
r¬|| ju r¬d	}nd
}ttj ||¡dƒ}| |¡ W d   ƒ q|1 sä0    Y  q|ttj | jd¡dƒ}| d¡ W d   ƒ n1 s(0    Y  d S )Nr   zdir-samezdir-diffú.hgÚAÚar   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$   | j | j| jfD ]}t |¡ qd S r   )r   r1   r2   r5   r6   )r   r   r   r   r   r   N   s    zDirCompareTestCase.tearDownc                 C   s   |   dtj¡ d S )Nr)   )ZassertInr   ÚDEFAULT_IGNORESr   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   ƒ n1 sÒ0    Y  |  
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 failsFr   r.   r   úDifferent contents.
z&Comparing mismatched directories fails)r   r   Úcmpfilesr   r1   r	   r   r/   r0   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   ƒ n1 sÞ0    Y  t | j | j¡}|  |jdg¡ |  |jdg¡ d | j | j¡dd	g}|  |j|¡ d S )
Nr-   r,   ú
diff {} {}úIdentical files : ['file']r.   zOnly in {} : ['file2']r   r;   zDiffering files : ['file2'])r   r1   r   ÚdircmpÚassertEqualÚleftÚrightr4   Ú	left_listÚ
right_listÚcommonÚ	left_onlyÚ
right_onlyÚ
same_filesÚ
diff_filesÚformatÚ_assert_reportÚreportr2   r5   Úmover   r/   r0   r	   r
   )r   Úleft_dirÚ	right_dirÚdÚexpected_reportr   r   r   r   Útest_dircmpp   s|    þ
ýþ
ý*ýzDirCompareTestCase.test_dircmpc                 C   s@   | j | j }}t ||¡}d | j | j¡dg}|  |j|¡ d S ©Nr>   r?   )r   r1   r   r@   rK   rL   Úreport_partial_closure©r   rO   rP   rQ   rR   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 rT   )r   r1   r   r@   rK   rL   Úreport_full_closurerV   r   r   r   Útest_report_full_closureÅ   s    þz+DirCompareTestCase.test_report_full_closurec                 C   sP   t  ¡ 4}|ƒ  | ¡  ¡  d¡}|  ||¡ W d   ƒ n1 sB0    Y  d S )NÚ
)r   Zcaptured_stdoutÚgetvalueÚstripÚsplitrA   )r   Zdircmp_reportZexpected_report_linesÚstdoutZreport_linesr   r   r   rL   Î   s    
z!DirCompareTestCase._assert_reportN)r%   r&   r'   r   r   r:   r=   rS   rW   rY   rL   r   r   r   r   r(   4   s   L		r(   Ú__main__)r   r   r5   r   ZunittestÚtestr   ZTestCaser   r(   r%   Úmainr   r   r   r   Ú<module>   s   * "