o
    HXîhN)  ã                   @   s|   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 d dlmZ G dd„ dej	ƒZ
G dd„ dej	ƒZedkr<e ¡  dS dS )	é    N)Úsupport)Ú	os_helperc                   @   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 ]}t|ddd}| |¡ W d   ƒ n1 s3w   Y  qt| jddd}| d¡ W d   ƒ n1 sQw   Y  t ¡ | _	d S )	Nz-samez-diffúContents of file go here.
Úwúutf-8©Úencodingza+zAn extra line.
)
r   ZTESTFNÚnameÚ	name_sameÚ	name_diffÚopenÚwriteÚtempfileÚ
gettempdirÚdir)ÚselfÚdatar
   Úoutput© r   ú;/opt/python-3.10.19/usr/lib/python3.10/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                   @   s\   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d„ Zdd„ ZdS )ÚDirCompareTestCasec              	   C   sV  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 ]G}t |d¡ t |¡ tj |d	¡}t |¡ | j
rb|| ju rbd
}nd}ttj ||¡ddd}| |¡ W d   ƒ n1 s€w   Y  q>ttj | jd¡ddd}| d¡ W d   ƒ d S 1 s¤w   Y  d S )Nr   zdir-samezdir-diffú.hgÚAÚar   TÚsubdirÚFiLeÚfiler   r   r   Ú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   Zsubdir_pathÚfnr   r   r   r   r   6   s,   

ÿ€"ÿzDirCompareTestCase.setUpc                 C   s$   | j | j| jfD ]}t |¡ qd S r   )r   r6   r7   r:   r;   )r   r   r   r   r   r   Q   s   ÿzDirCompareTestCase.tearDownc                 C   s   |   dtj¡ d S )Nr-   )ZassertInr    ÚDEFAULT_IGNORESr   r   r   r   Útest_default_ignoresU   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d	}| 	d
¡ W d   ƒ n1 skw   Y  |  
t | j| jddg¡dgdgg fkd¡ d S )Nr2   z#Comparing directory to itself failsz!Comparing directory to same failsFr   r3   r   r   r   úDifferent contents.
z&Comparing mismatched directories fails)r   r    Úcmpfilesr   r6   r   r   r4   r5   r   r#   )r   r   r   r   r   Útest_cmpfilesX   s@   
ÿþ
ÿþÿ
þýÿþÿÿþýz DirCompareTestCase.test_cmpfilesc                 C   s   	 |   t|ƒt|ƒ¡ d S r   )ÚassertEqualÚsorted)r   ÚactualZexpectedr   r   r   Ú_assert_listss   s   z DirCompareTestCase._assert_listsc                 C   s†  | j | j}}t ||¡}|  |j|¡ |  |j|¡ | jr1|  |j	ddg¡ |  |j
ddg¡ n|  |j	ddg¡ |  |j
ddg¡ |  |jddg¡ |  |jdg¡ |  |jg ¡ |  |jg ¡ |  |jdg¡ |  |jg ¡ d | j | j¡ddg}|  |j|¡ | j | j}}t ||¡}|  |j|¡ |  |j|¡ |  |j	ddg¡ |  |j
g d¢¡ |  |jddg¡ |  |jdg¡ |  |jg ¡ |  |jdg¡ |  |jdg¡ |  |jg ¡ d | j | j¡d	 | j¡ddg}|  |j|¡ | j | j}}t tj | jd¡tj | j d¡¡ t ||¡}|  |j|¡ |  |j|¡ |  |j	g d¢¡ |  |j
ddg¡ |  |jddg¡ |  |jdg¡ |  |jg ¡ |  |jdg¡ |  |jg ¡ d | j | j¡d	 | j ¡ddg}|  |j|¡ ttj | jd¡d
dd}| d¡ W d   ƒ n	1 s‘w   Y  t | j | j¡}|  |jdg¡ |  |jdg¡ d | j | j¡dddg}|  |j|¡ d S )Nr2   r0   r1   ú
diff {} {}úIdentical files : ['file']ú"Common subdirectories : ['subdir'])r2   r3   r0   r3   zOnly in {} : ['file2']r   r   r   r@   zDiffering files : ['file2'])r   r6   r    ÚdircmprC   ÚleftÚrightr9   rF   Ú	left_listÚ
right_listÚcommonÚcommon_dirsÚ	left_onlyÚ
right_onlyÚ
same_filesÚ
diff_filesÚformatÚ_assert_reportÚreportr7   r:   Úmover   r4   r5   r   r   )r   Úleft_dirÚ	right_dirÚdÚexpected_reportr   r   r   r   Útest_dircmpx   sŽ   ý
üþ
üÿüzDirCompareTestCase.test_dircmpc                 C   sZ   	 G dd„ dt jƒ}|| j| jƒ}|j}|  t| ¡ ƒdg¡ |d }|  t|ƒ|¡ d S )Nc                   @   s   e Zd ZdS )z=DirCompareTestCase.test_dircmp_subdirs_type.<locals>.MyDirCmpN)r)   r*   r+   r   r   r   r   ÚMyDirCmpÎ   s    r^   r0   )	r    rJ   r   r7   ÚsubdirsrC   ÚlistÚkeysÚtype)r   r^   r[   Zsub_dirsZsub_dcmpr   r   r   Útest_dircmp_subdirs_typeÌ   s   z+DirCompareTestCase.test_dircmp_subdirs_typec                 C   ój   | j | j}}t ||¡}tj |d¡}tj |d¡}d | j | j¡dddd ||¡g}|  |j	|¡ d S ©Nr0   rG   rH   rI   Ú )
r   r6   r    rJ   r   r4   r5   rU   rV   Úreport_partial_closure©r   rY   rZ   r[   Zleft_subdirZright_subdirr\   r   r   r   Útest_report_partial_closureÖ   ó   
ûz.DirCompareTestCase.test_report_partial_closurec                 C   rd   re   )
r   r6   r    rJ   r   r4   r5   rU   rV   Úreport_full_closurerh   r   r   r   Útest_report_full_closureä   rj   z+DirCompareTestCase.test_report_full_closurec                 C   sR   t  ¡ }|ƒ  | ¡  ¡  d¡}|  ||¡ W d   ƒ d S 1 s"w   Y  d S )NÚ
)r   Zcaptured_stdoutÚgetvalueÚstripÚsplitrC   )r   Zdircmp_reportZexpected_report_linesÚstdoutZreport_linesr   r   r   rV   ò   s
   
"ýz!DirCompareTestCase._assert_reportN)r)   r*   r+   r   r   r?   rB   rF   r]   rc   ri   rl   rV   r   r   r   r   r,   5   s    T
r,   Ú__main__)r    r   r:   r   ZunittestÚtestr   Ztest.supportr   ZTestCaser   r,   r)   Úmainr   r   r   r   Ú<module>   s    * Eÿ