o
    HXhc=                     @   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 dS )    N)TESTFNskip_unless_symlinkcan_symlinkcreate_empty_file
change_cwdc                   @   s   e Zd 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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d0d1 ZdS )2	GlobTestsNc                 G   s   t jt jj| jg|R  S N)ospathnormpathjointempdir)selfparts r   8/opt/python-3.10.19/usr/lib/python3.10/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>   s   " z#GlobTests.joins.<locals>.<listcomp>r   )r   Ztuplesr   r   r   joins   s   zGlobTests.joinsc                 G   s<   | j | }tj|\}}tj|st| 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 rbt| d| d td| d ttjdd| d tj	tj
htjkrtjtjv rt	| jtjtjB | _d S 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   openstatsupports_dir_fdscandirsupports_fdO_RDONLYO_DIRECTORYdir_fdr   r   r   r   setUp   s"   



zGlobTests.setUpc                 C   s&   | j d urt| j  t| j d S r   )r;   r	   closeshutilrmtreer   r   r   r   r   tearDown/   s   
zGlobTests.tearDownc                    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 || t	 jt tj|fi |}|D ]} 
tj|| qg|dks|dtj kr|dd  }	n|}	  fdd|D |	  tj|fi || t|}
dd |D } tj|
fi ||  tj|
fi || W d    n1 sw   Y   tj|fd ji||  tj|fd ji|| t j} tj|
fd|i||  tj|
fd|i||  jd ura tj|fd	 ji||  tj|fd	 ji||  tj|
fd	 ji||  tj|
fd	 ji|| |S )
N   r   c                 S      g | ]}t |qS r   r	   fsencoder   xr   r   r   r   <       z"GlobTests.glob.<locals>.<listcomp>**c                    s   g | ]
}t j j|qS r   r   rE   r   r   r   r   H   s    c                 S   rB   r   rC   rE   r   r   r   r   L   rG   root_dirr;   )lenr	   r
   r   r   globZassertCountEqualiglobrD   r   ZassertFalseisabssepr;   )r   r   kwargspatternpresZbresZres2rF   expectedZbpatternZbres2Zbtempdirr   r   r   rK   4   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_noorderd   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      h | ]}t |qS r   typer   rr   r   r   	<setcomp>r       z.GlobTests.test_glob_literal.<locals>.<setcomp>c                 S   r\   r   r]   r_   r   r   r   ra   t   rb      *c                 S   r\   r   r]   r_   r   r   r   ra   w   rb   c                 S   r\   r   r]   r_   r   r   r   ra   y   rb   )rZ   rK   r   rU   strr	   r
   r   curdirbytesrD   )r   eqrR   r   r   r   test_glob_literalj   s   

zGlobTests.test_glob_literalc                 C   s   |  tdg  |  tdg  |  tjd| jdg  |  tjdt| jdg  |  tjd| jdg  |  tjd| jdg  d S )N     )rI   )r;   )rU   rK   r   r	   rD   r;   r   r   r   r   test_glob_empty_pattern{   s   z!GlobTests.test_glob_empty_patternc                 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)rZ   rK   mapr   r   rg   r   r   r   test_glob_one_directory   s   z!GlobTests.test_glob_one_directoryc                 C   s   | j }tjddkr|| 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)rZ   r	   r
   normcaserK   r   rn   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 )Nr[   r!   r    rl   r,   r-   r.   z?a?*Fr(   r)   r"   r#   rZ   rK   r   rn   r   r   r   test_glob_directory_names   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"   )rK   r   r	   rN   rU   rJ   assertInrV   r   rR   r   r   r   'test_glob_directory_with_trailing_slash   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 ru   )	rK   r	   rD   r   rN   rU   rJ   rw   rV   rx   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   r[   r+   r-   rr   r(   r)   r"   r#   )rZ   rK   r   rw   r	   rN   rn   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   rs   rn   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   \\*\*\)rZ   rK   rn   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   )rU   rK   escaper	   rD   )r   argrS   r   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[?]r[   z[*]z[[_/*?*/_]]z[[][[]_/[*][?][*]/_]]z/[[_/*?*/_]]/z/[[][[]_/[*][?][*]/_]]/r   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	//*/*/[*]r   r   r   r   r   test_escape_windows   s   




zGlobTests.test_escape_windowsc                 O   s   | j |ddi|S )N	recursiveT)rK   )r   r   rO   r   r   r   rglob   s   zGlobTests.rglobc              
      sR  | 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 rE|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 r|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    d S 1 sw   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.   rH   )ri   ri   c                 s   s    | ]	}t jf| V  qd S r   r	   re   r   ir   r   r   	<genexpr>  s    z0GlobTests.test_recursive_glob.<locals>.<genexpr>)r    ri   )r    r,   ri   )r    r,   r-   ri   )r(   ri   )r"   ri   )r2   ri   )r2   r-   ri   r    r   r   r   r   r   r   za**r   r   r   r   r   r+   )r   r   r   r   rr   r,   r[   Tr   c                       g | ]} | qS r   r   r   r   r   r   r   *  rb   z1GlobTests.test_recursive_glob.<locals>.<listcomp>c                    r   r   r   r   r   r   r   r   ,  rb   c                    r   r   r   r   r   r   r   r   .  rb   c                       g | ]} t jg|R  qS r   r   r   r   r   r   r   0      c                    r   r   r   r   r   r   r   r   2  r   c                    r   r   r   r   r   r   r   r   4  r   zzz*Fr(   r)   z**zz*Fr2   )rZ   r   r   r   r	   re   r   r   r
   r   rK   )r   rg   fulldirsexpectr   r   r   test_recursive_glob   sr   	  

"
$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|| q6t j|dd  fd	dtdD }|}t|D ]}t j|d}|D ]
}| t|| qeqZd S )
N   Zdeepdr[   c                       g | ]	}t j d dqS Tr   rK   rL   r   jrP   r   r   r   C      z7GlobTests.test_glob_many_open_files.<locals>.<listcomp>d   rH   c                    r   r   r   r   r   r   r   r   G  r   )r	   r
   r   r   r   rangerU   next)r   depthr   rQ   Zitersitr   r   r   r   test_glob_many_open_files=  s"   
z#GlobTests.test_glob_many_open_files) __name__
__module____qualname__r;   r   r   r   r<   r@   rK   rZ   rh   rk   ro   rq   rt   ry   rz   r   r{   r|   unittestZ
skipUnlesssysplatformr~   r   r   r   r   r   r   r   r   r   r   r      s:    0
	


	
	Ar   c                   @   s   e Zd Zdd ZdS )SymlinkLoopGlobTestsc                 C   s0  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}|r|tjj	dgdg|   }| || || |sdntj	|d}| || || |d	7 }|sJtjtj	dddd}| t|tt| t|}d}|rtjj	dgdg|  dg  }| || || |d	7 }|stjtj	dd
dd}| t|tt| t|}d}|rtjj	dgdg|  d
g  }| || || |d	7 }|sW d    d S W d    d S 1 sw   Y  d S )Nr   dirr   linkrH   Tr   r   rA   ri   )r   r	   r   Z
addCleanupr>   r?   r   r   r
   r   r3   re   rK   rU   rJ   rV   rw   remove)r   r   resultsr   r
   r   r   r   test_selflinkR  sZ   






"$z"SymlinkLoopGlobTests.test_selflinkN)r   r   r   r   r   r   r   r   r   O  s    r   __main__)rK   r	   r>   r   r   Ztest.support.os_helperr   r   r   r   r   ZTestCaser   r   r   mainr   r   r   r   <module>   s      F/