B
    u9a1                 @   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-S ).	GlobTestsc             G   s   t jt jj| jf| S )N)ospathnormpathjointempdir)selfparts r   /usr/lib/python3.7/test_glob.pynorm   s    zGlobTests.normc                s    fdd|D S )Nc                s    g | ]}t jj jf| 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|s0t| t| d S )N)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Fz.aaGz.bbHaaazzzFZZZEFbcdefghaZ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 )N)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|}| tj|f|| dd |D }| tjt|f|| | tjt|f|| |S )N   r   c             S   s   g | ]}t |qS r   )r   fsencode)r   xr   r   r   r   5   s    z"GlobTests.glob.<locals>.<listcomp>)	lenr   r	   r   r   globZassertCountEqualZiglobr3   )r   r   kwargspatternpresZbresr   r   r   r6   -   s    
zGlobTests.globc             C   s<   t |}t |}| t|t| | t|t| d S )N)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   s    z.GlobTests.test_glob_literal.<locals>.<setcomp>c             S   s   h | ]}t |qS r   )rC   )r   rD   r   r   r   rE   J   s       *c             S   s   h | ]}t |qS r   )rC   )r   rD   r   r   r   rE   M   s    c             S   s   h | ]}t |qS r   )rC   )r   rD   r   r   r   rE   O   s    )rA   r6   r   r<   strr   r	   r   curdirbytesr3   )r   eqr:   r   r   r   test_glob_literal@   s    

zGlobTests.test_glob_literalc             C   s   | j }|| dt| jdddg || 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#   z*az.*z.aaz.bbz?aazaa?zaa[ab]z*q)rA   r6   mapr   )r   rJ   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)rA   r   r	   normcaser6   r   )r   rJ   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 )NrB   r   r   z*ar'   r(   r)   z?a?z*Fr#   r$   r   r    )rA   r6   r   )r   rJ   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   )r6   r   r   sepr<   r5   assertInr=   )r   r:   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 )NzZ*Zr%   zaa*rQ   r#   r   )	r6   r   r3   r   rR   r<   r5   rS   r=   )r   r:   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 )
Nr,   rB   r&   r(   z*Fr#   r$   r   r    )rA   r6   r   rS   r   rR   )r   rJ   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*r*   r+   r,   )rA   r6   r   )r   rJ   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   \\*\*\)rA   r6   )r   rJ   r   r   r   test_glob_magic_in_drive   s    z"GlobTests.test_glob_magic_in_drivec             C   s4   |  t|| |  tt|t| d S )N)r<   r6   escaper   r3   )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[?]rB   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   r   test_escape_windows   s    




zGlobTests.test_escape_windowsc             O   s   | j |ddi|S )N	recursiveT)r6   )r   r   r7   r   r   r   rglob   s    zGlobTests.rglobc                s\  | j }ddddddddd	d
ddg}t r<|ddddddg7 }|| d| jd3|  || tjd| jtjdffdd |D   dddddg}t r|ddg7 }|| dd| jd4|  || dd| dddddd || d | dd	d ddg}t r|dg7 }|| dd!| j|  dd
ddg}t rN|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/d0g |t
j
d1d%d&g   dd#d!d!g}t r4| d2d!g7 }|t
j
 dd!d%d&| W d Q R X d S )5N)r&   )r%   )r   )r   r   )r   r'   )r   r'   r&   )r   r'   r(   )r   r'   r(   r)   )r#   )r#   r$   )r   )r   r    )r*   )r+   )r,   )r,   r&   )r,   r(   )r,   r(   r)   z** rf   c             s   s   | ]}t jf| V  qd S )N)r   rH   )r   ir   r   r   	<genexpr>   s    z0GlobTests.test_recursive_glob.<locals>.<genexpr>)r   rf   )r   r'   rf   )r   r'   r(   rf   )r#   rf   )r   rf   )r,   rf   )r,   r(   rf   r   za**r&   z*Fr'   rB   T)rc   c                s   g | ]} | qS r   r   )r   rg   )r   r   r   r      s    z1GlobTests.test_recursive_glob.<locals>.<listcomp>c                s   g | ]} | qS r   r   )r   rg   )r   r   r   r      s    c                s   g | ]} | qS r   r   )r   rg   )r   r   r   r      s    c                s   g | ]} t jf| qS r   )r   rH   )r   rg   )r   r   r   r      s    c                s   g | ]} t jf| qS r   )r   rH   )r   rg   )r   r   r   r      s    c                s   g | ]} t jf| qS r   )r   rH   )r   rg   )r   r   r   r     s    zzz*Fr#   r$   z**zz*Fr,   )re   )re   )rA   r   rd   r   r   rH   r   r   r	   r   r6   )r   rJ   Zfulldirsexpectr   )r   r   test_recursive_glob   sv    "



"""zGlobTests.test_recursive_globN)__name__
__module____qualname__r   r   r   r.   r1   r6   rA   rK   rM   rO   rP   rT   rU   r   rV   rW   unittestZ
skipUnlesssysplatformrY   r\   ra   rb   rd   rk   r   r   r   r   r      s*   
		
r   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}xh|rtjj	dgdg|   }| || || |sP tj	|d}| || || |d	7 }qW tjtj	dddd}| t|tt| t|}d}xH|rtjj	dgdg|  dg  }| || || |d	7 }q:W tjtj	dd
dd}| t|tt| t|}d}xH|rtjj	dgdg|  d
g  }| || || |d	7 }qW W d Q R X d S )Nr   dirr   linkz**T)rc   r   r2   rf   )r   r   r   Z
addCleanupr/   r0   r   r   r	   r   r-   rH   r6   r<   r5   r=   rS   remove)r   r   resultsdepthr	   r   r   r   test_selflink  sN    





z"SymlinkLoopGlobTests.test_selflinkN)rl   rm   rn   rx   r   r   r   r   rr     s   rr   __main__)r6   r   r/   rp   ro   Ztest.supportr   r   r   r   r   ZTestCaser   rr   rl   mainr   r   r   r   <module>   s     
/