a
    ze!4                     @   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mZmZm	Z	m
Z
 G dd dejZeG dd dejZedkr|e  dS )    N)TESTFNskip_unless_symlinkcan_symlinkcreate_empty_file
change_cwdc                   @   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d Zdd Zdd Zedd Zedd Zeejdkd d!d" Zd#d$ Zd%d& Zeejdkd d'd( Zd)d* Zd+d, Zd-d. Zd/S )0	GlobTestsc                 G   s   t jt jj| jg|R  S N)ospathnormpathjointempdir)selfparts r   $/usr/lib/python3.9/test/test_glob.pynorm   s    zGlobTests.normc                    s    fdd|D S )Nc                    s"   g | ]}t jj jg|R  qS r   )r	   r
   r   r   ).0r   r   r   r   
<listcomp>       z#GlobTests.joins.<locals>.<listcomp>r   )r   Ztuplesr   r   r   joins   s    zGlobTests.joinsc                 G   s<   | j | }tj|\}}tj|s0t| t| d S r   )r   r	   r
   splitexistsmakedirsr   )r   r   filenamebasefiler   r   r   mktemp   s
    

zGlobTests.mktempc                 C   s   t d | _| dd | dd | dd | dd	 | d
d | d | d | ddd | dddd t rt| d| d td| d ttjdd| d d S )N_diraDaabF.aaG.bbHaaazzzFZZZEFbcdefghabrokensym1sym2sym3)	r   r   r   r   r	   symlinkr   r
   r   r   r   r   r   setUp   s    


zGlobTests.setUpc                 C   s   t | j d S r   )shutilrmtreer   r   r   r   r   tearDown*   s    zGlobTests.tearDownc                 O   s   t |dkr|d }ntjj| }tj| j|}tj|fi |}| tj|fi || dd |D }| tjt|fi || | tjt|fi || |S )N   r   c                 S   s   g | ]}t |qS r   )r	   fsencode)r   xr   r   r   r   5   r   z"GlobTests.glob.<locals>.<listcomp>)	lenr	   r
   r   r   globZassertCountEqualiglobr9   )r   r   kwargspatternpresZbresr   r   r   r<   -   s    
  zGlobTests.globc                 C   s<   t |}t |}| t|t| | t|t| d S r   )listassertEqualsetsorted)r   l1l2r   r   r   assertSequencesEqual_noorder:   s    z&GlobTests.assertSequencesEqual_noorderc                 C   s  | j }|| d| dg || dd| ddg || d| dg || dg  td}| dd |D th ttjtjd}| dd |D th td	}| d
d |D t	h ttjt
tjd	}| dd |D t	h d S )Nr    r!   r"   Zzymurgy*c                 S   s   h | ]}t |qS r   typer   rr   r   r   	<setcomp>H   r   z.GlobTests.test_glob_literal.<locals>.<setcomp>c                 S   s   h | ]}t |qS r   rJ   rL   r   r   r   rN   J   r      *c                 S   s   h | ]}t |qS r   rJ   rL   r   r   r   rN   M   r   c                 S   s   h | ]}t |qS r   rJ   rL   r   r   r   rN   O   r   )rH   r<   r   rC   strr	   r
   r   curdirbytesr9   )r   eqrA   r   r   r   test_glob_literal@   s    

zGlobTests.test_glob_literalc                 C   s   | j }|| dt| jg d || dt| jddg || dt| jddg || d	t| jdg || d
t| jddg || dt| jddg || dg  d S )Nza*)r    r"   r(   *ar    r(   z.*r$   r&   z?aazaa?r"   zaa[ab]z*q)rH   r<   mapr   r   rS   r   r   r   test_glob_one_directoryQ   s    z!GlobTests.test_glob_one_directoryc                 C   s   | j }tjddkr8|| ddd| dddg n,|| ddd| ddd| dddg || ddd| dddg d S )NZabCDr    r,   zE*r+   r-   z*g)rH   r	   r
   normcaser<   r   rW   r   r   r   test_glob_nested_directory[   s    "z$GlobTests.test_glob_nested_directoryc                 C   s   | j }|| dd| ddg || ddg  || dddd| ddddg || dd	| d
d| ddg d S )NrI   r!   r    rU   r,   r-   r.   z?a?*Fr(   r)   r"   r#   rH   r<   r   rW   r   r   r   test_glob_directory_namesf   s    
z#GlobTests.test_glob_directory_namesc                 C   s   t  | dtj }| |g  t  | dtj }| |g  t  | dtj }| t|d | t|| d| dh| dtj | dtj hg d S NzZ*Zr*   zaa*   r(   r"   )r<   r   r	   seprC   r;   assertInrD   r   rA   r   r   r   'test_glob_directory_with_trailing_slasho   s    
z1GlobTests.test_glob_directory_with_trailing_slashc              
   C   s   t  t| dtj }| |g  t  t| dtj }| |g  t  t| dtj }| t|d | t|t| dt| dht| dtj t| dtj hg d S r^   )	r<   r	   r9   r   r`   rC   r;   ra   rD   rb   r   r   r   -test_glob_bytes_directory_with_trailing_slash   s    
z7GlobTests.test_glob_bytes_directory_with_trailing_slashc                 C   s   | j }|| d| dg || dd| dd| ddg | | dtj | dg| dtj gg || dd| dd| dd	| ddg d S )
Nr2   rI   r+   r-   r[   r(   r)   r"   r#   )rH   r<   r   ra   r	   r`   rW   r   r   r   test_glob_symlinks   s    

zGlobTests.test_glob_symlinksc                 C   sb   | j }|| d| d| d| dg || d| dg || d| dg d S )Nzsym*r0   r1   r2   r\   rW   r   r   r   test_glob_broken_symlinks   s    z#GlobTests.test_glob_broken_symlinkswin32zWin32 specific testc                 C   s   | j }|tdg  |tdg  |tdg  |tdg  |tddg |tddg |tdg  |tdg  d S )	Nz*:s   *:z?:s   ?:z\\?\c:\s   \\?\c:\z\\*\*\s   \\*\*\)rH   r<   rW   r   r   r   test_glob_magic_in_drive   s    z"GlobTests.test_glob_magic_in_drivec                 C   s4   |  t|| |  tt|t| d S r   )rC   r<   escaper	   r9   )r   argZexpectedr   r   r   check_escape   s    zGlobTests.check_escapec                 C   sF   | j }|dd |dd |dd |dd |dd	 |d
d d S )Nabc[z[[]?z[?]rI   z[*]z[[_/*?*/_]]z[[][[]_/[*][?][*]/_]]z/[[_/*?*/_]]/z/[[][[]_/[*][?][*]/_]]/rk   r   checkr   r   r   test_escape   s    




zGlobTests.test_escapec                 C   sF   | j }|dd |dd |dd |dd |d	d
 |dd d S )Nz?:?z?:[?]z*:*z*:[*]z\\?\c:\?z
\\?\c:\[?]z\\*\*\*z	\\*\*\[*]z//?/c:/?z
//?/c:/[?]z//*/*/*z	//*/*/[*]ro   rp   r   r   r   test_escape_windows   s    




zGlobTests.test_escape_windowsc                 O   s   | j |ddi|S )N	recursiveT)r<   )r   r   r>   r   r   r   rglob   s    zGlobTests.rglobc              
      sT  | j }g d}t r |g d7 }|| d| jdg|R   || tjd| jtjdfgdd |D R   g d}t r|d	d
g7 }|| dd| jdg|R   || dd| dddddd || d| ddd ddg}t r|dg7 }|| dd| j|  g d}t r0|dg7 }|| dd| j|  || dddg  || ddd| dd || ddd| d t| j tjj	 |t
j
ddd fdd |D  |t
j
 dddd fd!d |D  |t
j
 dddd fd"d |D  |t
j
 tjddd tjdg fd#d |D   |t
j
 tjdddd tjdg fd$d |D   |t
j
 tjdddd fd%d |D  |t
j
 dd&dd d'd(g |t
j
d)ddg   ddddg}t r| d*dg7 }|t
j
 dddd| W d    n1 sF0    Y  d S )+N)r+   )r*   r    r    r!   r    r,   r    r,   r+   r    r,   r-   r    r,   r-   r.   r(   r(   r)   r"   r"   r#   ))r0   )r1   )r2   r2   r+   )r2   r-   )r2   r-   r.   **) r   c                 s   s   | ]}t jf| V  qd S r   r	   rQ   r   ir   r   r   	<genexpr>   r   z0GlobTests.test_recursive_glob.<locals>.<genexpr>)r    r   )r    r,   r   )r    r,   r-   r   )r(   r   )r"   r   )r2   r   )r2   r-   r   r    r   rx   ry   rz   r{   r|   za**rw   r}   r   rv   r   r+   )rz   r~   r   rv   r[   r,   rI   Trt   c                    s   g | ]} | qS r   r   r   r   r   r   r      r   z1GlobTests.test_recursive_glob.<locals>.<listcomp>c                    s   g | ]} | qS r   r   r   r   r   r   r      r   c                    s   g | ]} | qS r   r   r   r   r   r   r      r   c                    s   g | ]} t jg|R  qS r   r   r   r   r   r   r      r   c                    s   g | ]} t jg|R  qS r   r   r   r   r   r   r      r   c                    s   g | ]} t jg|R  qS r   r   r   r   r   r   r     r   zzz*Fr(   r)   z**zz*Fr2   )rH   r   ru   r   r	   rQ   r   r   r
   r   r<   )r   rS   fulldirsexpectr   r   r   test_recursive_glob   sp    	  

"
zGlobTests.test_recursive_globc                    s   d}t j| jd}t jj|gdg| R  }t | t jj|gdg| R    fddtdD }|D ]}| t|| qlt j|dd  fd	dtdD }|}t|D ],}t j|d}|D ]}| t|| qqd S )
N   ZdeepdrI   c                    s   g | ]}t j d dqS Tr   r<   r=   r   jr?   r   r   r     r   z7GlobTests.test_glob_many_open_files.<locals>.<listcomp>d   r   c                    s   g | ]}t j d dqS r   r   r   r   r   r   r     r   )r	   r
   r   r   r   rangerC   next)r   depthr   r@   Zitersitr   r   r   r   test_glob_many_open_files  s    
z#GlobTests.test_glob_many_open_filesN)__name__
__module____qualname__r   r   r   r4   r7   r<   rH   rT   rX   rZ   r]   rc   rd   r   re   rf   unittestZ
skipUnlesssysplatformrh   rk   rr   rs   ru   r   r   r   r   r   r   r      s4   
	


	
	Ar   c                   @   s   e Zd Zdd ZdS )SymlinkLoopGlobTestsc                 C   s   t d }t| | tj| t| td ttj	dd t
tjtj	dd tjddd}| t|tt| t|}d}|rtjj	dgdg|   }| || || |sqtj	|d}| || || |d	7 }qtjtj	dddd}| t|tt| t|}d}|rztjj	dgdg|  dg  }| || || |d	7 }q4tjtj	dd
dd}| t|tt| t|}d}|rtjj	dgdg|  d
g  }| || || |d	7 }qW d    n1 s0    Y  d S )Nr   dirr   linkr   Tr   r   r8   r   )r   r	   r   Z
addCleanupr5   r6   r   r   r
   r   r3   rQ   r<   rC   r;   rD   ra   remove)r   r   resultsr   r
   r   r   r   test_selflink   sN    






z"SymlinkLoopGlobTests.test_selflinkN)r   r   r   r   r   r   r   r   r     s   r   __main__)r<   r	   r5   r   r   Ztest.supportr   r   r   r   r   ZTestCaser   r   r   mainr   r   r   r   <module>   s     /