B
    ˦Z^"                 @   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   C/work/yifan.wang/lscsoft/opt/python37/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rd	}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   * "