o
    JAfÍ,  ã                   @   sÜ   	 d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d
Zdd„ ZG dd„ dejejƒZG dd„ dejƒZdd„ Zedkrleeƒ ƒ dS dS )é    N)Údebug)ÚWARN)ÚDistutilsTemplateError)Ú
glob_to_reÚtranslate_patternÚFileList)Úfilelist)Ú	os_helper)Úcaptured_stdoutÚrun_unittest)ÚsupportzÎinclude ok
include xo
exclude xo
include foo.tmp
include buildout.cfg
global-include *.x
global-include *.txt
global-exclude *.tmp
recursive-include f *.oo
recursive-exclude global *.x
graft dir
prune dir3
c                 C   s   	 |   dtj¡S )Nú/)ÚreplaceÚosÚsep)Ús© r   ú4/usr/lib/python3.10/distutils/tests/test_filelist.pyÚmake_local_path   s   r   c                   @   sd   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d„ ZdS )ÚFileListTestCasec                 C   s   |   |  t¡g ¡ |  ¡  d S ©N)ÚassertEqualÚget_logsr   Ú
clear_logs©Úselfr   r   r   ÚassertNoWarnings'   s   z!FileListTestCase.assertNoWarningsc                 C   s"   |   t|  t¡ƒd¡ |  ¡  d S )Nr   )ZassertGreaterÚlenr   r   r   r   r   r   r   ÚassertWarnings+   s   zFileListTestCase.assertWarningsc                 C   sJ   t j}t jdkrt t j¡}dD ]\}}|d|i }|  t|ƒ|¡ qd S )Nú\))zfoo*z(?s:foo[^%(sep)s]*)\Z)zfoo?z(?s:foo[^%(sep)s])\Z)zfoo??z(?s:foo[^%(sep)s][^%(sep)s])\Z)zfoo\\*z(?s:foo\\\\[^%(sep)s]*)\Z)zfoo\\\*z(?s:foo\\\\\\[^%(sep)s]*)\Z)zfoo????z2(?s:foo[^%(sep)s][^%(sep)s][^%(sep)s][^%(sep)s])\Z)zfoo\\??z"(?s:foo\\\\[^%(sep)s][^%(sep)s])\Zr   )r   r   ÚreÚescaper   r   )r   r   ÚglobÚregexr   r   r   Útest_glob_to_re/   s   

õz FileListTestCase.test_glob_to_rec                 C   s¾   t ƒ }t}ddddd|dƒ|dƒ|dƒ|d	ƒ|d
ƒ|dƒ|dƒ|dƒ|dƒ|dƒg|_t d¡D ]}| ¡ dkr9q0| |¡ q0ddd|dƒ|dƒ|dƒ|dƒ|dƒ|dƒg	}|  |j|¡ d S )Nzfoo.tmpÚokZxozfour.txtzbuildout.cfgz.hg/last-message.txtzglobal/one.txtzglobal/two.txtzglobal/files.xzglobal/here.tmpzf/o/f.oozdir/graft-onezdir/dir2/graft2zdir3/okzdir3/sub/ok.txtÚ
Ú )	r   r   ÚallfilesÚMANIFEST_INÚsplitÚstripÚprocess_template_liner   Úfiles)r   Ú	file_listÚlÚlineZwantedr   r   r   Útest_process_template_lineA   s<   óøz+FileListTestCase.test_process_template_linec                 C   s¢   t ƒ }tƒ }| d¡ W d   ƒ n1 sw   Y  |  | ¡ d¡ dt_z&tƒ }| d¡ W d   ƒ n1 s:w   Y  |  | ¡ d¡ W dt_d S dt_w )NZxxxr'   Tzxxx
F)r   r
   Zdebug_printr   Úgetvaluer   ÚDEBUG)r   r.   Ústdoutr   r   r   Útest_debug_printi   s   ÿÿz!FileListTestCase.test_debug_printc                 C   s*   t ƒ }g d¢}| |¡ |  |j|¡ d S )N)ÚaÚbÚc)r   Úset_allfilesr   r(   )r   r.   r-   r   r   r   Útest_set_allfilesw   s   
z"FileListTestCase.test_set_allfilesc                 C   s6   t ƒ }g d¢|_| ¡  | ¡  |  |jg d¢¡ d S )N)r6   r7   r6   Úgr8   r;   )r6   r7   r8   r;   )r   r-   ÚsortZremove_duplicatesr   ©r   r.   r   r   r   Útest_remove_duplicates}   s
   
z'FileListTestCase.test_remove_duplicatesc                 C   sr   |   ttdddddƒ¡ t d¡}|  t|ddd|¡ |   ttdddddƒ¡ |   tdddd d¡¡ d S )Nr6   TF)ÚanchorZis_regexÚsearchú*.pyzfilelist.py)Ú
assertTrueÚhasattrr   r    Úcompiler   r@   )r   r#   r   r   r   Útest_translate_pattern…   s$   þ
þþÿÿz'FileListTestCase.test_translate_patternc                 C   sd   t ƒ }|  | d¡¡ t ƒ }ddg|_|  | d¡¡ t ƒ }ddg|_| d¡ |  |jdg¡ d S )NrA   úa.pyzb.pyza.txt)r   ÚassertFalseZexclude_patternr-   rB   r   r=   r   r   r   Útest_exclude_patternš   s   


z%FileListTestCase.test_exclude_patternc                 C   s„   t ƒ }| g ¡ |  | d¡¡ t ƒ }| ddg¡ |  | d¡¡ t ƒ }|  |j¡ | ddg¡ | d¡ |  |jddg¡ d S )NrA   rF   úb.txtÚ*)r   r9   rG   Zinclude_patternrB   ZassertIsNoner(   r   r=   r   r   r   Útest_include_patternª   s   

z%FileListTestCase.test_include_patternc                 C   sˆ  t }tƒ }dD ]
}|  t|j|¡ qtƒ }| dd|dƒg¡ | d¡ |  |jdg¡ |  ¡  | d¡ |  |jdg¡ |  	¡  tƒ }dd|dƒg|_| d¡ |  |jd|dƒg¡ |  ¡  | d¡ |  |jd|dƒg¡ |  	¡  tƒ }| dd|dƒg¡ | d	¡ |  |jd|dƒg¡ |  ¡  | d
¡ |  |jd|dƒg¡ |  	¡  tƒ }dd|dƒg|_| d¡ |  |jdg¡ |  ¡  | d¡ |  |jdg¡ |  	¡  tƒ }| d|dƒ|dƒ|dƒg¡ | d¡ |  |j|dƒ|dƒg¡ |  ¡  | d¡ |  |j|dƒ|dƒg¡ |  	¡  tƒ }d|dƒ|dƒ|dƒg|_| d¡ |  |jd|dƒg¡ |  ¡  | d¡ |  |jd|dƒg¡ |  	¡  tƒ }| d|dƒ|dƒ|dƒg¡ | d¡ |  |j|dƒ|dƒg¡ |  ¡  | d¡ |  |j|dƒ|dƒg¡ |  	¡  tƒ }d|dƒ|dƒ|dƒg|_| d¡ |  |jd|dƒg¡ |  ¡  | d¡ |  |jd|dƒg¡ |  	¡  d S )N)	ZincludeZexcludezglobal-includezglobal-excludezrecursive-includezrecursive-excludeZgraftZpruneZblargrF   rI   zd/c.pyzinclude *.pyzinclude *.rbzexclude *.pyzexclude *.rbzglobal-include *.pyzglobal-include *.rbzglobal-exclude *.pyzglobal-exclude *.rbzd/b.pyzd/c.txtzd/d/e.pyzrecursive-include d *.pyzrecursive-include e *.pyzrecursive-exclude d *.pyzrecursive-exclude e *.pyzf/f.pyzgraft dzgraft ezprune dzprune e)
r   r   ZassertRaisesr   r,   r9   r   r-   r   r   )r   r/   r.   Úactionr   r   r   Útest_process_template¼   s”   ÿ







ÿ



ÿ



z&FileListTestCase.test_process_templateN)Ú__name__Ú
__module__Ú__qualname__r   r   r$   r1   r5   r:   r>   rE   rH   rK   rM   r   r   r   r   r   $   s    (r   c                   @   s*   e Zd Zejdd„ ƒZdd„ Zdd„ ZdS )ÚFindAllTestCasec                 C   sJ   t  ¡  t dd¡ |  t ¡ g ¡ W d   ƒ d S 1 sw   Y  d S )NÚfooÚbar)r	   Útemp_cwdr   Úsymlinkr   r   Úfindallr   r   r   r   Útest_missing_symlink*  s   
"þz$FindAllTestCase.test_missing_symlinkc                 C   s   	 t  ¡ 9 t d¡ tj dd¡}t  |¡ t d¡ tj dd¡}t  |¡ ||g}|  tt	 
¡ ƒ|¡ W d   ƒ d S 1 sAw   Y  d S )NrR   ú	file1.txtrS   z	file2.txt)r	   rT   r   ÚmkdirÚpathÚjoinÚcreate_empty_filer   Úsortedr   rV   )r   Úfile1Zfile2Úexpectedr   r   r   Útest_basic_discovery0  s   




"øz$FindAllTestCase.test_basic_discoveryc                 C   s`   	 t  ¡ !}tj |d¡}t  |¡ |g}|  t |¡|¡ W d   ƒ d S 1 s)w   Y  d S )NrX   )	r	   Útemp_dirr   rZ   r[   r\   r   r   rV   )r   ra   r^   r_   r   r   r   Útest_non_local_discovery@  s   

"üz(FindAllTestCase.test_non_local_discoveryN)rN   rO   rP   r	   Zskip_unless_symlinkrW   r`   rb   r   r   r   r   rQ   )  s
    
rQ   c                   C   s   t  t  t¡t  t¡g¡S r   )ÚunittestZ	TestSuiteZ	makeSuiter   rQ   r   r   r   r   Ú
test_suiteL  s   þrd   Ú__main__)r   r    rc   Z	distutilsr   Zdistutils.logr   Zdistutils.errorsr   Zdistutils.filelistr   r   r   r   Ztest.supportr	   r
   r   Zdistutils.testsr   r)   r   ZLoggingSilencerZTestCaser   rQ   rd   rN   r   r   r   r   Ú<module>   s0    ÿ  #ÿ