o
    HXhn                    @   s(  d dl Zd dlZd dlZd dlZd dlZd dlZ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 d dlmZ d dlmZmZ z
d dlZd dlZW n ey]   d ZZY nw G dd deZG dd	 d	eejZG d
d deejZG dd deZG dd deejZG dd deejZG dd deejZej eZ!dd Z"dd Z#e$ej%dkdZ&e$ej%dkdZ'e'G dd deZ(e&G dd deZ)G dd deZ*G d d! d!e*ejZ+e'G d"d# d#e*ejZ,e&G d$d% d%e*ejZ-G d&d' d'ejZ.e/d(kre0  dS dS ))    N)mock)import_helper)	os_helper)TESTFNFakePathc                   @   s   e Zd Zdd Zdd ZdS )_BaseFlavourTestc                    sh   | j j}| j j| j j |fdd|D }| ||  r2| fdd|D }| || d S d S )Nc                       g | ]}| d  qS /replace.0x)sep ;/opt/python-3.10.19/usr/lib/python3.10/test/test_pathlib.py
<listcomp>       z7_BaseFlavourTest._check_parse_parts.<locals>.<listcomp>c                    r   r	   r   r   )altsepr   r   r   !   r   )flavourparse_partsr   r   assertEqual)selfargexpectedfactualr   )r   r   r   _check_parse_parts   s   z#_BaseFlavourTest._check_parse_partsc                 C   s  | j }| jj}|g ddg f |dgdddgf |dgdddgf |ddgddddgf |dgddddgf |dgddddgf |g dddg df |g d	ddg df |g d
ddg df |dgddg f |g ddddgf |g dddddgf |g ddddgf |dgd||ddgf |ddgd||ddgf |ddgd||ddgf |g dd||ddgf |g dd||dgf d S )N aa/ba/ba/b/)r    zb/cd)r    r"   cr%   )r    zb//cr%   )r    zb/c/r%   .)r'   r'   r"   )r    r'   r"   )r    r'   r'   /a/b/a/a/r    /br&   r&   )r    r,   /c)r   r   r   )r   checkr   r   r   r   test_parse_parts_common$   s(   z(_BaseFlavourTest.test_parse_parts_commonN)__name__
__module____qualname__r   r/   r   r   r   r   r      s    
r   c                   @   "   e Zd ZejZdd Zdd ZdS )PosixFlavourTestc                 C   s   | j }|ddgddg df |ddgddg df |d	dgddg df |d
gddd
gf |dgdddgf |dgdddgf d S )N//ar"   r   //)r6   r    r"   ///ar
   )r
   r    r"   z////ac:ac:\a\ar   r   r.   r   r   r   test_parse_partsD   s   z!PosixFlavourTest.test_parse_partsc                 C   s   | j j}| |dd | |dd | |dd | |dd | |d	d
 | |dd | |dd | |dd | |dd
 | |dd | |dd | |dd | |dd d S )Nr   r   r   r   r    r   r   r    r#   )r   r   r#   r$   )r   r   r$   r)   )r   r
   r    r(   )r   r
   r#   /a/b/)r   r
   r$   r5   )r   r6   r    r7   ///a/bc:/a/b)r   r   rB   \/a/b)r   r   rC   \a\b)r   r   rD   r   	splitrootr   r   r   r   r   r   test_splitrootP   s   zPosixFlavourTest.test_splitrootN)r0   r1   r2   pathlib_posix_flavourr   r=   rH   r   r   r   r   r4   A   s    r4   c                   @   r3   )NTFlavourTestc                 C   s  | j }|dgdddgf |dgdddgf |dgdddgf |dgddddgf |d	gddddgf |d
gddddgf |dgdddgf |dgdddgf |dgddddgf |g dddg df |g dddg df |g dddddgf |g dddg df |g dddddgf |dgdddgf |d gddddgf |d d!gdddd"gf |d#gd$dd%gf |d&gd$dd%dgf |g d'ddg d(f |g d)ddg df |g d*d+dg d,f d S )-Nc:r   c:/\c:\r
   r8   r    c:/ar)   //a/b\\a\b\\a\b\//a/b///a/b/cr&   )r    zZ:br&   Z:)rV   r"   r&   )r    zZ:/br&   )Z:\r"   r&   )r    z//b/cr%   z\\b\cz\\b\c\r%   )r    z	Z://b//c/d/)rW   r"   r&   r%   )r    z//b/c//r%   z//?/c:/z\\?\c:z\\?\c:\z//?/c:/ar,   r"   z//?/UNC/b/cz\\?\UNC\b\cz\\?\UNC\b\c\z//?/UNC/b/c/dr+   )rN   r"   r&   )zZ:/ar,   r&   )z//?/Z:/ar,   r&   z\\?\Z:)z\\?\Z:\r"   r&   r;   r<   r   r   r   r=   h   s.   zNTFlavourTest.test_parse_partsc                 C   s  | j j}| |dd | |dd | |dd | |dd | |d	d
 | |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd
 | |dd d S )Nr   r>   r    r?   a\b)r   r   rY   r:   )r   rN   r    rD   )r   rN   rY   zc:a\b)rL   r   rY   zc:\a\b)rL   rN   rY   z\\az\\\a/b)r   rN   r#   zc:\\a)rL   rN   r    zc:\\\a/b)rL   rN   r#   rR   )rR   rN   r   rS   	\\a\b\c\d)rR   rN   c\dz\\\a\brE   rG   r   r   r   rH      s"   zNTFlavourTest.test_splitrootN)r0   r1   r2   rI   _windows_flavourr   r=   rH   r   r   r   r   rK   e   s    "rK   c                   @   s&  e Zd Zg dg 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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d0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Z d>d? Z!d@dA Z"dBdC Z#dDdE Z$dFS )G_BasePurePathTest)
r    r"   )r!   r"   )r    b/)r!   r_   )r$   )za//b)za//b//)r   r    r"   )r    r   r"   )r    r"   r   ))r    /b/cr%   )r    z///b//crX   )r)   r`   r%   )r
   r"   r   c/d)r
   r   zb/c/d)r   /b/c/d)r#   rb   c                 C   s*   |  d}|j| _| jj| _| jj| _d S Nr    )cls_flavourr   r   r   r   pr   r   r   setUp   s   

z_BasePurePathTest.setUpc                 C   s   | j }|d}| || |ddd |ddd |d |d |td | ||d|d | ||dd|d | ||d|d|d | ||d|d|d|td d S )Nr    r"   r&   r)   a/b/c/a/b/cr#   )rd   assertIsInstancer   r   r   Prg   r   r   r   test_constructor_common   s   ,z)_BasePurePathTest.test_constructor_commonc                    s\   G dd dt  | j}| fdd|D  }| |||  |jD ]
}| t|t  q!d S )Nc                   @   s   e Zd ZdS )z:_BasePurePathTest._check_str_subclass.<locals>.StrSubclassN)r0   r1   r2   r   r   r   r   StrSubclass   s    ro   c                 3   s    | ]} |V  qd S Nr   r   ro   r   r   	<genexpr>   s    z8_BasePurePathTest._check_str_subclass.<locals>.<genexpr>)strrd   r   partsassertIstype)r   argsrm   rg   partr   rq   r   _check_str_subclass   s   
z%_BasePurePathTest._check_str_subclassc                 C   s6   |  d |  d |  d |  d |  d d S )Nr   r'   r    za/b.txtz/a/b.txtry   r   r   r   r   test_str_subclass_common   s
   



z*_BasePurePathTest.test_str_subclass_commonc                 C   s   | j }|d}|d}| ||d | t|t| |dd}| ||d ||d}| ||d |d}| ||d d S )Nr#   r&   ri   r%   a/b/c/dr-   )rd   joinpathr   ru   rv   r   rm   rg   ppr   r   r   test_join_common   s   

z"_BasePurePathTest.test_join_commonc                 C   s   | j }|d}|d }| ||d | t|t| |d }| ||d |d d }| ||d d| d }| ||d ||d }| ||d |d }| ||d d S )	Nr#   r&   ri   ra   r}   r%   zc/a/b/dr-   )rd   r   ru   rv   r   r   r   r   test_div_common   s   z!_BasePurePathTest.test_div_commonc                 C   s(   | j | }| t||d| j d S Nr
   )rd   r   rs   r   r   )r   r   rw   rg   r   r   r   
_check_str   s   
z_BasePurePathTest._check_strc                 C   s(   dD ]	}|  ||f q|  dd d S )Nr    r#   ri   r
   r(   rj   r'   )r   )r   )r   pathstrr   r   r   test_str_common  s   z!_BasePurePathTest.test_str_commonc                 C   s(   | j }dD ]}| || | qd S )Nr   )rd   r   as_posix)r   rm   r   r   r   r   test_as_posix_common  s   z&_BasePurePathTest.test_as_posix_commonc                 C   s2   t | j}| j}| t|dd| d  d S )Nr#      a   b)osfsencoder   rd   r   bytes)r   r   rm   r   r   r   test_as_bytes_common  s    z&_BasePurePathTest.test_as_bytes_commonc                 C   sv   | j }| t |d  W d    n1 sw   Y  | t |   W d    d S 1 s4w   Y  d S rc   )rd   assertRaises
ValueErroras_urir   rm   r   r   r   test_as_uri_common  s   "z$_BasePurePathTest.test_as_uri_commonc                 C   s   dD ]S}|  |}|jj}t|}| ||d | | |d| |t|d d }| t	||
  t	|tj}| |j|j | || | t|| qd S )Nr   ()   )rd   	__class__r0   repr
assertTrue
startswithendswithlenr   evalr   rI   __dict__ru   )r   r   rg   Zclsnamerinnerqr   r   r   test_repr_common  s   
z"_BasePurePathTest.test_repr_commonc                 C   s   | j }| |d|d | |d|dd | |d|d | |d|d | |d|  | |d|d | | |d | | d | | i  | | t d S )Nr#   r    r"   r(   r
   r   )rd   r   assertNotEqualintr   r   r   r   test_eq_common.  s   z _BasePurePathTest.test_eq_commonc                 C   sN  | j }| t|djd | t|djd | |dd | |dd | |dd | |dd | |dd | |d	d | |d
d | |dd | |dd | |dd | |dd | |dd | |d
d | |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd d S )Nr    r   r'   b.pya/b.py/a/b.pyza.pyzb/pyz/a.pyzb.py/cz*.pyzb.pyczb./pyzab/c.pyza*/*.pyz
/d/ab/c.pyz	/dab/c.pyz	ab/c.py/d/b.py/*.pyz/a/*.pyz/ab.pyz	/a/b/c.pyz/**/*.pyz
/a/**/*.py)rd   r   r   matchr   assertFalser   r   r   r   test_match_common;  s<   z#_BasePurePathTest.test_match_commonc                    s    fdd} j }|d}|d}|d}|d}||| ||| ||| ||| |||  j }|d}|d}|d	}|d
}||| ||| ||| ||| |||  t | i k  W d    d S 1 stw   Y  d S )Nc                         | |  ||  d S rp   )
assertLessZassertGreaterr^   r{   r   r   r   c     z:_BasePurePathTest.test_ordering_common.<locals>.assertLessr    r#   abcr"   r)   r(   z/abcr,   )rd   r   	TypeError)r   r   rm   r    r"   r&   r%   r   r{   r   test_ordering_commona  s0   









"z&_BasePurePathTest.test_ordering_commonc                 C   sX   | j }| j}|d}|j}| |d | ||j |d}|j}| ||ddf d S )Nr#   r^   r(   r    r"   )r   rd   rt   r   ru   )r   r   rm   rg   rt   r   r   r   test_parts_common}  s   z#_BasePurePathTest.test_parts_commonc                 C   s4   | j }|d}| | d | t|d d S )Nr#   )r#   )rd   r   
__fspath__r   fspathrl   r   r   r   test_fspath_common  s   z$_BasePurePathTest.test_fspath_commonc              	      s    j  D ]Z\}}|d j}| jd}||kr,| fdd|D  }||f  |}|D ]+} j| } ||d|  t|t|  t	||  |
 | q3qd S )Nr
   c                    s"   g | ]}t  fd d|D qS )c                 3   s    | ]
}| d  jV  qdS )r
   N)r   r   )r   rx   r{   r   r   rr     s    zA_BasePurePathTest.test_equivalences.<locals>.<listcomp>.<genexpr>)tuple)r   tr{   r   r   r     s    z7_BasePurePathTest.test_equivalences.<locals>.<listcomp>zfailed with args {})equivalencesitemsr   r   appendrd   r   formathashrs   r   )r   kZtuplesZcanonposixZpcanonr   rg   r   r{   r   test_equivalences  s"   

z#_BasePurePathTest.test_equivalencesc                 C   s   | j }|d}| |j|d | |jj|d | |jjj|  | |jjjj|  |d}| |j|d | |jj|d | |jjj|d | |jjjj|d d S )Nri   r#   r    rj   r(   r)   r
   rd   r   parentrl   r   r   r   test_parent_common  s   z$_BasePurePathTest.test_parent_commonc                 C   s  | j }|d}|j}| t|d | |d |d | |d |d | |d |d | |d	 |d | |d
 |d | |d |d | |dd |df | |d d |d|df | |d d	 |d|df | |dd  |d|df | |d d d |d|df | |d d d	 |d|d|df | t||d|d|dg | t |d  W d    n1 sw   Y  | t |d  W d    n1 sw   Y  | t ||d< W d    n	1 sw   Y  |d}|j}| t|d | |d |d | |d |d | |d |d | |d	 |d | |d
 |d | |d |d | |dd |df | |d d |d|df | |d d	 |d|df | |dd  |d|df | |d d d |d|df | |d d d	 |d|d|df | t||d|d|dg | t |d  W d    n	1 sw   Y  | t |d  W d    d S 1 sw   Y  d S )Nri      r   r#   r   r       r'   r   rj   r(   r)   r
   )rd   parentsr   r   listr   
IndexErrorr   r   rm   rg   Zparr   r   r   test_parents_common  s`      "("


   "("

$z%_BasePurePathTest.test_parents_commonc                 C   s@   | j }| |djd | |djd | |djd d S )Nr#   r   r(   rd   r   driver   r   r   r   test_drive_common  s   z#_BasePurePathTest.test_drive_commonc                 C   X   | j }| j}| |djd | |djd | |dj| | |dj| d S Nr   r#   r
   r(   )rd   r   r   rootr   rm   r   r   r   r   test_root_common     z"_BasePurePathTest.test_root_commonc                 C   r   r   )rd   r   r   anchorr   r   r   r   test_anchor_common  r   z$_BasePurePathTest.test_anchor_commonc                 C   s   | j }| |djd | |djd | |djd | |djd | |djd | |djd | |djd	 | |d
jd	 d S )Nr   r'   r
   r#   r"   r(   /a/b/.r   r   r   rd   r   namer   r   r   r   test_name_common     z"_BasePurePathTest.test_name_commonc                 C   s<  | j }| |djd | |djd | |djd | |djd | |djd | |djd | |djd | |djd	 | |d
jd	 | |djd | |djd | |djd | |djd | |djd | |djd | |djd | |djd d S )Nr   r'   ..r
   r#   r(   r   r   .pyr   a/.hgrc/a/.hgrca/.hg.rc.rc	/a/.hg.rc
a/b.tar.gz.gz/a/b.tar.gza/Some name. Ending with a dot. /a/Some name. Ending with a dot.rd   r   suffixr   r   r   r   test_suffix_common  s$   z$_BasePurePathTest.test_suffix_commonc                 C   s:  | j }| |djg  | |djg  | |djg  | |djg  | |djg  | |djg  | |djdg | |d	jdg | |d
jg  | |djg  | |djdg | |djdg | |djddg | |djddg | |djg  | |djg  d S )Nr   r'   r
   r#   r(   r   r   r   r   r   r   r   r   r   r   .tarr   r   r   r   rd   r   suffixesr   r   r   r   test_suffixes_common  s"   z&_BasePurePathTest.test_suffixes_commonc                 C   s   | j }| |djd | |djd | |djd | |djd | |djd | |djd | |djd	 | |d
jd | |djd | |djd d S )Nr   r'   r   r
   r#   r"   r   r   .hgrcr   .hgr   b.tarr   Some name. Ending with a dot.rd   r   stemr   r   r   r   test_stem_common)     z"_BasePurePathTest.test_stem_commonc                 C   s2  | j }| |dd|d | |dd|d | |dd|d | |dd|d | |dd|d | |d	d|d | t|d
jd | t|djd | t|djd | t|djd
 | t|djd | t|djd | t|djd d S )Nr#   d.xmlza/d.xmlr(   z/a/d.xmlr   r   a/Dot ending./a/Dot ending.r   r'   r
   r-   c/ra   rd   r   	with_namer   r   r   r   r   r   test_with_name_common7  s   z'_BasePurePathTest.test_with_name_commonc                 C   sL  | j }| |dd|d | |dd|d | |dd|d | |dd|d	 | |d
d|d | |dd|d | |dd|d | t|djd | t|djd | t|djd | t|djd | t|djd | t|djd | t|djd d S )Nr#   r%   za/dr(   z/a/dr   za/d.pyr   z/a/d.pyr   z/a/d.gzr   r   r   r'   r
   r-   r   ra   rd   r   	with_stemr   r   r   r   r   r   test_with_stem_commonG  s   z'_BasePurePathTest.test_with_stem_commonc                 C   s  | j }| |dd|d | |dd|d | |dd|d | |dd|d | |dd|d | |dd|d | t|djd | t|d	jd | t|d
jd | t|djd | t|djd
 | t|djd	 | t|djd | t|djd | t|djd | t|djd | t|djd | t|dj| jjdf d S )Nr#   r   za/b.gzr(   z/a/b.gzr   r   r   r'   r
   gz/.gzra   z.c/.dz./.dz.d/.r%   )rd   r   with_suffixr   r   r   r   r   r   r   r   test_with_suffix_commonX  s*   
z)_BasePurePathTest.test_with_suffix_commonc                 C   sR  | j }|d}| t|j | t|jd | || |d | |d|d | ||d|d | |d|d | |d|d | ||d|  | |d|  | |dd|  | t|j|d | t|j|d | t|j|d	 | t|j|d
 |d}| ||d|d | |d|d | ||d
|d | |d
|d | |d|d | ||d|  | |d|  | t|j|d | t|j|d | t|j|d | t|j|  | t|jd | t|j|d d S )Nr#   r   r   r    r"   r!   r&   ri   a/cr)   r(   r
   r*   r-   rj   /a/c)rd   r   r   relative_tor   r   rl   r   r   r   test_relative_to_commonq  s<   z)_BasePurePathTest.test_relative_to_commonc                 C   s  | j }|d}| t|j | t|jd | ||  | |d | ||d | |d | ||d | |d | |dd | ||d | ||d | ||d	 | ||d
 |d}| ||d | |d | ||d
 | |d
 | |d | ||d | |d | ||d | ||d | ||d | ||  | |d | ||d d S )Nr#   r   r   r    r!   r"   r&   ri   r
  r)   r(   r
   r*   r-   rj   r  )rd   r   r   is_relative_tor   r   rl   r   r   r   test_is_relative_to_common  s:   z,_BasePurePathTest.test_is_relative_to_commonc                 C   s   | j }|d}tdtjd D ]/}t||}t|}| |j|j | || | t	|t	| | t
|t
| qd S )Nr(   r   r   )rd   rangepickleHIGHEST_PROTOCOLdumpsloadsru   r   r   r   rs   )r   rm   rg   protodumpedr   r   r   r   test_pickling_common  s   
z&_BasePurePathTest.test_pickling_commonN)%r0   r1   r2   r   rh   rn   ry   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   r   r]      sJ    &/#"r]   c                   @   sZ   e Zd Zej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 )PurePosixPathTestc                 C   s@   | j }| |djd | |djd | |djd d S )Nr(   r
   rA   rQ   r6   rd   r   r   r   r   r   r   	test_root  s   zPurePosixPathTest.test_rootc                 C   sF   | j }| |d|d | |d|d | |d|d d S )Nr#   A/br)   r7   r5   )rd   r   r   r   r   r   r   test_eq     zPurePosixPathTest.test_eqc                 C   sF   | j }| |d d | |d d | |d d d S )Nr
   zfile:///z/a/b.czfile:///a/b.cz/a/b%#czfile:///a/b%25%23c)rd   r   r   r   r   r   r   test_as_uri  r  zPurePosixPathTest.test_as_uric                 C   sd   ddl m} | j}ztd W n ty   | d Y nw | |d d|td  d S )Nr   )quote_from_bytes   éz1\xe9 cannot be encoded to the filesystem encodingu   /a/bézfile:///a/b)	urllib.parser  rd   r   r   UnicodeEncodeErrorskipTestr   r   )r   r  rm   r   r   r   test_as_uri_non_ascii  s   z'PurePosixPathTest.test_as_uri_non_asciic                 C   s   | j }| |dd d S )NzA.pyza.PY)rd   r   r   r   r   r   r   
test_match  s   zPurePosixPathTest.test_matchc                 C   s   | j }| |   | |d  | |d  | |d  | |d  | |d  | |d  | |d  d S )Nr    r$   r
   r)   r@   r5   rQ   rd   r   is_absoluter   r   r   r   r   test_is_absolute  s   z"PurePosixPathTest.test_is_absolutec                 C   sZ   | j }| d|d  | d|d  | d|d  | d|d  d S )NFr   r
   /foo/barz/dev/con/PRN/NULrd   ru   is_reservedr   r   r   r   test_is_reserved  s
   z"PurePosixPathTest.test_is_reservedc                 C   sh   | j }|d}|d}| ||d |dd}| ||d |dd}| ||d d S Nr5   r"   rQ   r)   z//cr-   rd   r~   r   r   r   r   r   	test_join  s   
zPurePosixPathTest.test_joinc                 C   sb   | j }|d}|d }| ||d |dd }| ||d |dd }| ||d d S r-  rd   r   r   r   r   r   test_div  s   zPurePosixPathTest.test_divN)r0   r1   r2   rI   PurePosixPathrd   r  r  r  r$  r%  r(  r,  r/  r1  r   r   r   r   r    s    

r  c                   @   s  e Zd ZejZej Ze	g dg ddgddgd 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d#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Z d5d6 Z!d7d8 Z"d9S ):PureWindowsPathTest))rL   r    )rL   r!   )r
   rL   r    ))rM   r    )rL   r
   r    )rL   r)   )z/zrM   r    )z//x/yrM   r    )rQ   )rQ   r&   )rT   r&   )r8   rP   rT   rU   c                 C   s   |  d}| t|d |  d}| t|d |  d}| t|d |  d}| t|d |  d	}| t|d
 d S )Nri   za\b\czc:/a/b/czc:\a\b\crQ   rS   rU   z\\a\b\c	//a/b/c/drZ   )rd   r   rs   rf   r   r   r   test_str  s   




zPureWindowsPathTest.test_strc                 C   s^   |  d |  d |  d |  d |  d |  d |  d |  d |  d	 d S )
NrL   r8   z	c:a\b.txtrO   r9   z
c:\a\b.txtz\\some\sharez\\some\share\az\\some\share\a\b.txtrz   r{   r   r   r   test_str_subclass*  s   







z%PureWindowsPathTest.test_str_subclassc                 C   s   | j }| |d|d | |d|ddd | |d|d | |d|d | |d|d | |d|d	 | |d
|d | |d|d d S )Nc:a/brL   r    r"   zd:a/brB   r(   za/Br  C:a/Bc:A/b//Some/SHARE/a/Bz//somE/share/A/b)rd   r   r   r   r   r   r   r  5  s   zPureWindowsPathTest.test_eqc                 C   s  | j }| t |d  W d    n1 sw   Y  | t |d  W d    n1 s4w   Y  | |d d | |d d | |d d | |d	 d
 | |d d | |d d | |d d d S )Nr(   r7  rM   zfile:///c:/zc:/a/b.czfile:///c:/a/b.cz	c:/a/b%#czfile:///c:/a/b%25%23cu   c:/a/bézfile:///c:/a/b%C3%A9z//some/share/zfile://some/share/z//some/share/a/b.czfile://some/share/a/b.cu   //some/share/a/b%#céz"file://some/share/a/b%25%23c%C3%A9)rd   r   r   r   r   r   r   r   r   r  A  s$   zPureWindowsPathTest.test_as_uric                 C   sr  | j }| |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd | |d	d | |d	d
 | |dd
 | |dd
 | |dd | |dd | |dd d S )Nzc:/b.pyr   zc:*.pyzc:/*.pyzd:/b.pyr   zc:b.pyr   z//some/share/a.pyz//some/share/*.pyz//other/share/a.pyz//some/share/a/b.pyzB.pyzb.PYz	c:/a/B.Pyz	C:/A/*.pYz//Some/Share/B.Pyz//somE/sharE/*.pY)rd   r   r   r   r   r   r   r   r   Q  s&   z%PureWindowsPathTest.test_match_commonc                    s    fdd} j }|d}|d}|||  ||k   ||k |d}|d}|||  ||k   ||k d S )Nc                    r   rp   )ZassertLessEqualassertGreaterEqualr^   r{   r   r   assertOrderedEqualk  r   zDPureWindowsPathTest.test_ordering_common.<locals>.assertOrderedEqualr9  r8  z//some/Share/A/br:  )rd   r   )r   r<  rm   rg   r   r   r{   r   r   i  s   

z(PureWindowsPathTest.test_ordering_commonc                 C   sX   | j }|d}|j}| |d |d}|j}| |d |d}|j}| |d d S )Nr7  )rL   r    r"   rB   )rO   r    r"   r4  )rS   r&   r%   )rd   rt   r   )r   rm   rg   rt   r   r   r   
test_partsz  s   zPureWindowsPathTest.test_partsc                 C   s  | j }|d}| |j|d | |jj|d | |jjj|d | |jjjj|d |d}| |j|d | |jj|d | |jjj|d | |jjjj|d |d	}| |j|d
 | |jj|d | |jjj|d d S )Nzz:a/b/czz:a/bz:az:zz:/a/b/czz:/a/bz:/az:/r4  rU   rQ   r   rl   r   r   r   test_parent  s   zPureWindowsPathTest.test_parentc                 C   s  | j }|d}|j}| t|d | |d |d | |d |d | |dd |df | |d d |df | |d d |d|df | |dd  |df | |d d d |df | |d d d |d|df | t||d|dg | t |d  W d    n1 sw   Y  |d}|j}| t|d | |d |d	 | |d |d
 | |dd |d	f | |dd |d	f | |d d |d	|d
f | |dd  |d
f | |d d d |d	f | |d d d |d
|d	f | t||d	|d
g | t |d  W d    n	1 s?w   Y  |d}|j}| t|d | |d |d | |d |d | |dd |df | |dd |df | |d d |d|df | |dd  |df | |d d d |df | |d d d |d|df | t||d|dg | t |d  W d    d S 1 sw   Y  d S )Nzz:a/b/r   r   r>  r   r?  r   zz:/a/b/r@  rA  r4  rU   rQ   )rd   r   r   r   r   r   r   r   r   r   r   test_parents  s\    "
 "
 "
$z PureWindowsPathTest.test_parentsc                 C   s   | j }| |djd | |djd | |djd | |djd | |djd | |djd | |djd d S )	NrL   r7  rM   c:/a/b/rQ   rR   rT   r4  r   r   r   r   r   
test_drive     zPureWindowsPathTest.test_drivec                 C   s   | j }| |djd | |djd | |djd | |djd | |djd | |djd | |d	jd d S )
NrL   r   r7  rM   rN   rD  rQ   rT   r4  r  r   r   r   r   r    rF  zPureWindowsPathTest.test_rootc                 C   s   | j }| |djd | |djd | |djd | |djd | |djd | |djd | |d	jd d S )
NrL   r7  rM   rO   rD  rQ   rS   rT   r4  )rd   r   r   r   r   r   r   test_anchor  rF  zPureWindowsPathTest.test_anchorc                 C   s   | j }| |djd | |djd | |djd | |djd | |djd | |d	jd | |d
jd | |djd d S )NrL   r   rM   r7  r"   rB   c:a/b.pyr   	c:/a/b.py//My.py/Share.php//My.py/Share.php/a/br   r   r   r   r   	test_name  r   zPureWindowsPathTest.test_namec                 C   s*  | j }| |djd | |djd | |djd | |djd | |djd | |djd | |d	jd | |d
jd | |djd | |djd | |djd | |djd | |djd | |djd | |djd | |djd d S )NrL   r   rM   r7  rB   rH  r   rI  	c:a/.hgrc
c:/a/.hgrc
c:a/.hg.rcr   c:/a/.hg.rcc:a/b.tar.gzr   c:/a/b.tar.gz!c:a/Some name. Ending with a dot."c:/a/Some name. Ending with a dot.rJ  rK  r   r   r   r   r   test_suffix  s"   zPureWindowsPathTest.test_suffixc                 C   s:  | j }| |djg  | |djg  | |djg  | |djg  | |djdg | |djdg | |djg  | |d	jg  | |d
jdg | |djdg | |djddg | |djddg | |djg  | |djg  | |djg  | |djg  d S )NrL   rM   r7  rB   rH  r   rI  rM  rN  rO  r   rP  rQ  r   r   rR  rJ  rK  rS  rT  r   r   r   r   r   test_suffixes  s"   z!PureWindowsPathTest.test_suffixesc                 C   s   | j }| |djd | |djd | |djd | |djd | |djd | |d	jd | |d
jd | |djd | |djd | |djd d S )NrL   r   zc:.zc:..r   rM   r7  r"   rH  rM  r   rO  r   rQ  r   rS  r   r   r   r   r   r   	test_stem  r   zPureWindowsPathTest.test_stemc                 C      | j }| |dd|d | |dd|d | |dd|d | |dd|d | t|djd | t|d	jd | t|d
jd | t|djd | t|djd | t|djd | t|djd
 d S )Nr7  r   z	c:a/d.xmlrB   z
c:/a/d.xmlc:a/Dot ending.c:/a/Dot ending.rL   rM   
//My/Shared:d:ed:/er   r   r   r   r   test_with_name#     z"PureWindowsPathTest.test_with_namec                 C   rX  )Nr7  r%   zc:a/drB   zc:/a/drY  rZ  rL   rM   r[  r\  r]  r^  r  r   r   r   r   test_with_stem1  r`  z"PureWindowsPathTest.test_with_stemc                 C   s  | j }| |dd|d | |dd|d | |dd|d | |dd|d | t|djd | t|d	jd | t|d
jd | t|djd | t|djd | t|djd
 | t|djd | t|djd | t|djd | t|djd | t|djd | t|djd | t|djd | t|djd | t|djd d S )Nr7  r   zc:a/b.gzrB   z	c:/a/b.gzrH  rI  r   r'   r
   r[  r  rN   rL   r  z\.gzzc:.gzra   r[   z.c/dz.c\d)rd   r   r  r   r   r   r   r   r   test_with_suffix?  s(   z$PureWindowsPathTest.test_with_suffixc                 C   s0  | j }|d}| ||d|d | |d|d | ||d|d | |d|d | |d|d | ||d|  | |d|  | t|j|  | t|jd | t|j|d	 | t|j|d
 | t|j|d | t|j|d | t|j|d | t|j|d | t|j|d |d}| ||d|d | |d|d | t||dd | t|dd | ||d|d | |d|d | ||d|d | |d|d | |d|d | ||d|  | |d|  | t|j|d | t|j|d | t|j|d | t|j|d | t|j|d	 | t|j|d | t|j|d
 | t|j|d | t|j|d |d}| ||d|d | |d|d | |d|d | ||d |d | |d |d | |d!|d | ||d"|  | |d"|  | t|j|d# | t|j|d$ | t|j|d% | t|j|d& d S )'N	C:Foo/BarrL   zFoo/Barc:foOZBarc:foO/	c:foO/baRr   r\  r
   Foo/FooC:/FooC:Foo/Bar/Baz	C:Foo/Baz
C:/Foo/Barz/Foo/Barz\Foo\BarrM   c:/foOc:/foO/
c:/foO/baRC:/BazC:/Foo/Bar/Baz
C:/Foo/BazC:Food:///C/Foo//Server/Share/Foo/Bar//sErver/sHare//sErver/sHare///sErver/sHare/Foo//sErver/sHare/Foo///sErver/sHare/Foo/Bar/Server/Share/Fooc:/Server/Share/Foo//z/Share/Foo//Server/z/Foo)rd   r   r  r   r   rs   rl   r   r   r   test_relative_toW  sh   z$PureWindowsPathTest.test_relative_toc                 C   sH  | j }|d}| ||d | |d | ||d | |d | |d | ||d | |d | ||  | |d | ||d | ||d | ||d	 | ||d
 | ||d | ||d | ||d |d}| |d | ||d | ||d | |d | ||d | |d | ||d | ||d | ||d | ||d | ||d | ||d | ||d | ||d
 | ||d |d}| ||d | |d | |d | ||d | |d | |d | ||d | |d | ||d | ||d  | ||d! | ||d" d S )#Nrc  rL   rd  re  rf  r   r\  r
   rg  rh  ri  rj  rk  rl  rM   rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  )rd   r   r  r   rl   r   r   r   test_is_relative_to  s^   z'PureWindowsPathTest.test_is_relative_toc                 C   s(  | j }| |   | |d  | |d  | |d  | |d  | |d  | |d  | |d  | |d  | |d	  | |d
  | |d  | |d  | |d  | |d  | |d  d S )Nr    r$   r
   r)   r@   rL   r8   zc:a/b/rM   rP   rD  rQ   rT   rU   r4  r&  r   r   r   r   r(    s"   z$PureWindowsPathTest.test_is_absolutec                 C   s   | j }|d}|d}| ||d |d}| ||d |d}| ||d |d}| ||d |d}| ||d |d	}| ||d |d
}| ||d d S )NC:/a/bx/y
C:/a/b/x/y/x/yC:/x/yD:x/yD:/x/y//host/share/x/yc:x/yc:/x/yr.  r   r   r   r   r/    s    






zPureWindowsPathTest.test_joinc                 C   s   | j }|d}| |d |d | |d d |d | |d |d | |d d |d | |d	 |d	 | |d
 d |d	 | |d |d | |d
 d |d | |d |d | |d |d | |d |d d S )Nr  r  r  r   yr  r  z/xr  zD:r  r  r  r  r0  rl   r   r   r   r1    s   zPureWindowsPathTest.test_divc                 C   s  | j }| d|d  | d|d  | d|d  | d|d  | d|d  | d|d  | d|d	  | d|d
  | d|d  | d|d  | d|d  | d|d  | d|d  | d|d  | d|d  | d|d  | d|d  | d|d  | d|d  | d|d  | d|d  | d|d  | d|d  | d|d  d S )NFr   r
   r)  z//my/share/nul/con/auxTnulZauxZprnZconzconin$zconout$ZCOM1ZLPT9u   com¹u   com²u   lpt³zNUL.txtzPRN  z	AUX  .txtzCOM1:barzLPT9   :barzbar.com9zbar.lpt9zc:/baz/con/NULzc:/NUL/con/bazr*  r   r   r   r   r,    s2   z$PureWindowsPathTest.test_is_reservedN)#r0   r1   r2   rI   PureWindowsPathrd   r]   r   copyupdater5  r6  r  r  r   r   r=  rB  rC  rE  r  rG  rL  rU  rV  rW  r_  ra  rb  r  r  r(  r/  r1  r,  r   r   r   r   r3    sF    
.


:5r3  c                   @   *   e Zd ZejZdd Zdd Zdd ZdS )PurePathTestc                 C   6   |  d}| t|tjdkrtj d S tj d S Nr    nt)rd   ru   rv   r   r   rI   r  r2  rf   r   r   r   test_concrete_class+     

z PurePathTest.test_concrete_classc                 C   s$   t d}t d}| || d S rc   )rI   r2  r  r   r   rg   r   r   r   r   test_different_flavours_unequal0  s   

z,PurePathTest.test_different_flavours_unequalc                 C   s   t d}t d}| t ||k  W d    n1 sw   Y  | t ||k W d    n1 s7w   Y  | t ||k W d    n1 sPw   Y  | t ||k W d    d S 1 sjw   Y  d S rc   )rI   r2  r  r   r   r  r   r   r   !test_different_flavours_unordered5  s   





"z.PurePathTest.test_different_flavours_unorderedN)	r0   r1   r2   rI   PurePathrd   r  r  r  r   r   r   r   r  (  s
    r  c                  G      t jjtg| R  S rp   )r   pathjoinBASEr   r   r   r   <lambda>H      r  c                  G   r  rp   )r   r  r  r   r  r   r   r   r  I  r  r  z)test requires a Windows-compatible systemz'test requires a POSIX-compatible systemc                   @   s   e Zd ZejZdS )PosixPathAsPureTestN)r0   r1   r2   rI   	PosixPathrd   r   r   r   r   r  P  s    
r  c                   @   r3   )WindowsPathAsPureTestc                 C   B   | j }| t |d  W d    d S 1 sw   Y  d S NrM   )rd   r   NotImplementedErrorownerr   r   r   r   
test_ownerX     "z WindowsPathAsPureTest.test_ownerc                 C   r  r  )rd   r   r  groupr   r   r   r   
test_group]  r  z WindowsPathAsPureTest.test_groupN)r0   r1   r2   rI   WindowsPathrd   r  r  r   r   r   r   r  T  s    r  c                   @   st  e Zd Z	 dd Zejdkrdd Zn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d!d" Zd#d$ Zd%d& Zejd'd( Zd)d* Zd+d, Zd-d. Zejd/d0 Zd1d2 Zd3d4 Zejd5d6 Z dd8d9Z!e! Z"Z#ejd:d; Z$ejd<d= Z%d>d? Z&d@dA Z'dBdC Z(e)dDdE Z*dFdG Z+ejdHdI Z,dJdK Z-ejdLdM Z.dNdO Z/e01e2dPdQdR Z3e01e4dSdTdU Z5dVdW Z6dXdY Z7dZd[ Z8e01e9ed\d]d^d_ Z:e01e9ed\d]d`da Z;e0<e9ed\dbdcdd Z=dedf Z>dgdh Z?ejdidj Z@dkdl ZAdmdn ZBdodp ZCdqdr ZDdsdt ZEdudv ZFdwdx ZGeHdydz ZId{d| ZJd}d~ ZKdd ZLejdd ZMdd ZNdd ZOe)dd ZPdd ZQdd ZRe01e9edde0<eSjTdkddd ZUdd ZVe01e9eWdddd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^ejdd Z_ejdd Z`ejdd ZadS )_BasePathTestc                 C   s  dd }|  | tt ttd ttd ttd ttdd ttd ttdd	}|d
 W d    n1 sIw   Y  ttddd	}|d W d    n1 sfw   Y  ttddd	}|d W d    n1 sw   Y  ttdddd	}|d W d    n1 sw   Y  ttdd t	 rt
dtd t
dtd | dtd | tjddtdd | tjddtdd t
dtd d S d S )Nc                   S   s   t tdd tt d S )NdirE  )r   chmodr  r   rmtreer  r   r   r   r   cleanupz  s   z$_BasePathTest.setUp.<locals>.cleanupdirAdirBdirCZdirDr  fileAwbs   this is file A
fileBs   this is file B
ZfileCs   this is file C
ZfileDs   this is file D
r   linkAnon-existing
brokenLinklinkBr   linkClinkDbrokenLinkLoop)
addCleanupr   mkdirr  r  openwriter  r   can_symlinksymlinkdirlinkr  )r   r  r   r   r   r   rh   y  s:   

z_BasePathTest.setUpr  c                 C   s   t j||dd d S )NTtarget_is_directoryr   r  r   srcdestr   r   r   r    s   z_BasePathTest.dirlinkc                 C   s   t || d S rp   r  r  r   r   r   r    s   c                 C   s*   |  tjt|t|d||f  d S )Nz&%r and %r don't point to the same file)r   r   r  samefilers   r   Zpath_aZpath_br   r   r   
assertSame  s
   z_BasePathTest.assertSamec                 O   sN   |  t}||i | W d    n1 sw   Y  | |jjtj d S rp   )r   FileNotFoundErrorr   	exceptionerrnoENOENT)r   funcrw   kwargscmr   r   r   assertFileNotFound  s   z _BasePathTest.assertFileNotFoundc                 C   s    |  tj|tj| d S rp   )r   r   r  normcaser  r   r   r   assertEqualNormCase  s    z!_BasePathTest.assertEqualNormCasec                 C   sT   |  t }| || | t|t| | t|t| | |	  d S rp   )
rd   r   getcwdr   r  rs   ru   rv   r   r'  r  r   r   r   	_test_cwd  s
   z_BasePathTest._test_cwdc                 C   s   | j  }| | d S rp   )rd   cwdr  rf   r   r   r   test_cwd  s   
z_BasePathTest.test_cwdc                 C   sX   |  tjd}| || | t|t| | t|t| | 	|
  d S )N~)rd   r   r  
expanduserr   r  rs   ru   rv   r   r'  r  r   r   r   
_test_home  s
   z_BasePathTest._test_homec                 C   s   t  7}| | j  |  tjt	d|d< | | j  tjt	d|d< | | j  W d    d S 1 s>w   Y  d S )NZuserprofileUSERPROFILEhomeHOME)
r   EnvironmentVarGuardr  rd   r  clearr   r  r  r  )r   envr   r   r   	test_home  s   
"z_BasePathTest.test_homec                 C   s   t jtd}t jtdd}| |}| |}| |}| || | || | || | || t jtd}| |}| t	|j| | t	|j| | t	|j| | t	|j| | t	|j| | t	|j| d S )Nr  r  r  foo)
r   r  r  r  rd   r   r  r   r   r  )r   Z
fileA_pathZ
fileB_pathrg   r   r   Znon_existentr   r   r   r   test_samefile  s"   



z_BasePathTest.test_samefilec                 C   s$   |  d}| | td d S )Nr   r'   )rd   r   statr   rf   r   r   r   test_empty_path  s   
z_BasePathTest.test_empty_pathc                 C   s   | j }|d}| | |tjd |d}| | | |d}| | | |d}| | | ||d jd }| | | d S )Nr  r  /~../~r   )rd   r   r  r   r  absoluter   rl   r   r   r   test_expanduser_common  s   z$_BasePathTest.test_expanduser_commonc                 C   s  | j }|t}| d|  | d|d   | d|d   | d|d d   t r_| d|d   | d|d   | d|d d   | d|d d   | d|d	   | d|d
  | d|td   | d|td   d S )NTr  r  Fbahr  r  r  r  z/xyzzyu    )rd   r  ru   existsr   r  rl   r   r   r   test_exists  s   z_BasePathTest.test_existsc                 C   s   |  t}|d d}| |tj | | d W d    n1 s&w   Y  |d d}| |tj | | 	 d W d    n1 sNw   Y  |d jddd}| |tj
 | | 	 d W d    d S 1 syw   Y  d S )Nr  r   zthis is file A
rb   this is file Ar   )	buffering)rd   r  r  rk   io
TextIOBaser   readBufferedIOBasestrip	RawIOBase)r   rg   r   r   r   r   test_open_common  s   
"z_BasePathTest.test_open_commonc                 C   sX   |  t}|d d | |d  d | t|d jd | |d  d d S )Nr  s   abcdefgZsomestr)rd   r  write_bytesr   
read_bytesr   r   rf   r   r   r   test_read_write_bytes  s
   
z#_BasePathTest.test_read_write_bytesc                 C   sf   |  t}|d jddd | |d jdddd | t|d jd	 | |d jddd d S )
Nr  u   äbcdefgzlatin-1encodingzutf-8ignore)r  errorsZbcdefgs	   somebytes)rd   r  
write_textr   	read_textr   r   rf   r   r   r   test_read_write_text  s   
z"_BasePathTest.test_read_write_textc                 C   s   |  t}|d jddd | |d  d |d jddd | |d  d |d jddd | |d  d	 ttjd
d}|d d | |d  d| d | d  d S )Nr  zabcde
fghlk
mnopq
)newlines   abcde
fghlk
mnopqs   abcdefghlkmnopqz
s   abcde
fghlk
mnopqasciir  zabcde
fghlk
mnopqs   abcdes   fghlks   mnopq)rd   r  r  r   r  r   r   linesep)r   rg   Zos_linesep_byter   r   r   test_write_text_with_newlines  s$   
z+_BasePathTest.test_write_text_with_newlinesc                    sX   | j   t}| }t|}g d}t r|g d7 }| | fdd|D  d S )N)r  r  r  r  r  )r  r  r  r  c                       h | ]} t |qS r   r  r   r   rm   r   r   	<setcomp>;      z-_BasePathTest.test_iterdir.<locals>.<setcomp>)rd   r  iterdirsetr   r  r   )r   rg   itpathsr   r   r  r   test_iterdir3  s   z_BasePathTest.test_iterdirc                    s>   | j   td}t| } fdddD }| || d S )Nr  c                    s   h | ]} t d |qS )r  r  r  r  r   r   r  C  r   z5_BasePathTest.test_iterdir_symlink.<locals>.<setcomp>)r  r  )rd   r  r  r  r   )r   rg   r  r   r   r  r   test_iterdir_symlink=  s
   
z"_BasePathTest.test_iterdir_symlinkc                 C   sb   |  td}| t}t|  W d    n1 sw   Y  | |jjtj	tj
tjf d S Nr  )rd   r  r   OSErrornextr  assertInr  r  ENOTDIRr  EINVALr   rg   r  r   r   r   test_iterdir_nodirF  s   
z _BasePathTest.test_iterdir_nodirc                    s    fdd}j   t}|d}|tjj ||dg ||dg  ||dddg t sB||dd	dg n
||dg d
 t sZ||ddg n
||dg d t ss||ddg d S ||dddg d S )Nc                    "    t|  fdd|D  d S )Nc                    r  r   r  r  r  r   r   r  R  r  zA_BasePathTest.test_glob_common.<locals>._check.<locals>.<setcomp>r   r  globr   rm   r   r   r   _checkQ     "z._BasePathTest.test_glob_common.<locals>._checkr  r  z
dir*/file*
dirB/fileB
dirC/fileCz*Ar  )r  r  r  z*B/*)r+  
dirB/linkDlinkB/fileBzlinkB/linkD*/fileBr.  )	rd   r  r'  rk   collectionsr   Iteratorr   r  r   r)  rg   r  r   r(  r   test_glob_commonP  s"   
z_BasePathTest.test_glob_commonc                    s    fdd}j   t}|d}|tjj ||dg ||ddg ||dg  t s@||ddg n
||dg d ||d	g d
  td}||d	ddg ||ddg d S )Nc                    r$  )Nc                    r  r   r  r  r  r   r   r  j  r  zB_BasePathTest.test_rglob_common.<locals>._check.<locals>.<setcomp>r%  r&  r(  r   r   r)  i  r*  z/_BasePathTest.test_rglob_common.<locals>._checkr  r  r+  z*/fileAr/  )r+  zdirB/linkD/fileBr.  zdirA/linkC/fileBzfile*)r  r+  r,  dirC/dirD/fileDr  r,  r4  z*/*)	rd   r  rglobrk   r0  r   r1  r   r  r2  r   r(  r   test_rglob_commonh  s   

z_BasePathTest.test_rglob_commonc                    sB   | j }|t t d}h d}| | fdd|D  d S )N*>   r+  r  r-  z
dirA/linkCr  r  r,  r  r4  r  r  z	dirC/dirDr  r  r  c                    s   h | ]} | qS r   r   r   rg   r   r   r    r  z8_BasePathTest.test_rglob_symlink_loop.<locals>.<setcomp>)rd   r  r  r5  r   )r   rm   givenexpectr   r8  r   test_rglob_symlink_loop}  s
   
z%_BasePathTest.test_rglob_symlink_loopc                    s   d}| j }|td  | gdg| R  }|jdd ddg|  fdd	td
D }|D ]
}| t|| q2 fdd	td
D } }t|D ]}|d }|D ]
}| t|| qVqNd S )N   Zdeepr%   Tr   r
   r7  c                    s   g | ]}  qS r   )r'  r   jbasepatternr   r   r     r  z;_BasePathTest.test_glob_many_open_files.<locals>.<listcomp>d   c                    s   g | ]}  d qS )r%   )r5  r>  )rA  r   r   r     r  )rd   r  r  r  r  r   r  )r   depthrm   rg   Zitersr  ir   r@  r   test_glob_many_open_files  s"   z'_BasePathTest.test_glob_many_open_filesc                 C   sf   | j }|t}| t|d|tdh | t|d|tdh | t|dt  d S )Nr   zdirA/../file*zdirA/../fileAz../xyzzy)rd   r  r   r  r'  rl   r   r   r   test_glob_dotdot  s
   z_BasePathTest.test_glob_dotdotc                 C   sl  | j }|td }|  |d }|  |d }|  |d }|d }||d  td}tt	||_
| tt|dd	 W d    n1 sQw   Y  |  td}tt	||_
| tt|dd
 W d    n1 sw   Y  |d td}tt	||_
| tt|dd
 W d    d S 1 sw   Y  d S )NZpermissionsfile1file2subdirfile3otherz
os.scandirr7  r      r   )rd   r  r  touch
symlink_tor   patchsortedr   scandirZreturn_valuer   r   r  r'  r  )r   rm   rA  rH  rI  rJ  rK  rR  r   r   r   test_glob_permissions  s0   
"z#_BasePathTest.test_glob_permissionsTc                 C   s   | |}| || d S rp   )resolver   )r   rg   r   strictr   r   r   r   _check_resolve  s   
z_BasePathTest._check_resolvec              
   C   s  | j }|td}| t}|jdd W d    n1 sw   Y  | |jjtj | 	t
|jddtjtd |tddd}| 	t
|jddtjtddd |tdddd}| 	t
|jddtjtjddd |tdd	}| || |td
}| ||td |tddd	}| ||tdd	 |tddd	}| ||tdd	 |tddd	ddd}| ||tdd	dddd |tdddddd}tjdkr| ||tddddd n| ||tdddd ttjdt d}| tj| ttj|tdd ttdtj|d |tdddd	}| ||tdd	 |tdddddd}| ||tddddd |tddddddd}tjdkrg| |||dddd d S | ||tdddd d S )Nr  TrU  Finspamr   r  r  r  r  r  r  r  r  z-dirD)r   dirlinkXlinkY)rd   r  r   r  rT  r   r  r  r  r  rs   r   r  r  abspath_check_resolve_relativer   r   Z	_longpathtempfilemkdtempr  r  r  r  _check_resolve_absolute)r   rm   rg   r  r%   r   r   r   test_resolve_common  sn   



z!_BasePathTest.test_resolve_commonc                 C   s   |  t}| dtd | tjddtd | tjddtd |d }| |jdd| |d d }| jt	|jdd | |jd	d|d d  d S )
Nr'   012TrW  34F)
rd   r  r  r  r   r  r   rT  r   r  )r   rg   r   r   r   r   r   test_resolve_dot  s   
 z_BasePathTest.test_resolve_dotc              	   C   sT   |  dd}t }tt z| | |  t| W t| d S t| w )NZnonZexist)rd   r   r  chdirr  r   rT  )r   rg   Zold_cwdr   r   r   )test_resolve_nonexist_relative_issue38671  s   
z7_BasePathTest.test_resolve_nonexist_relative_issue38671c                 C   s   |  t}| }| }t| | W d    n1 sw   Y  t| t| |  |  |  |	 W d    d S 1 sEw   Y  d S rp   )rd   r  r  r  r  rT  r  )r   rg   r  Zit2r   r   r   	test_with)  s   
"z_BasePathTest.test_withc                 C   sd   |  td }| j}|d@ }|| | | j| |dB }|| | | j| d S )Nr  m   )rd   r  r  st_moder  r   )r   rg   modenew_moder   r   r   
test_chmod:  s   


z_BasePathTest.test_chmodc                 C   st   |  td }| }| j}|d@ }|j|dd | | j| |dB }|j|dd | | j| d S )Nr  rl  Tfollow_symlinksrm  )rd   r  rT  r  rn  r  r   )r   rg   r   ro  rp  r   r   r   test_chmod_follow_symlinks_trueG  s   
z-_BasePathTest.test_chmod_follow_symlinks_truec                 C   sZ   |  td }| }| | | ||jdA  | |j|j | | | d S )Nr  rm  )rd   r  r  r   r  rn  r  r   r   rg   str   r   r   	test_statW  s   z_BasePathTest.test_statc                 C   .   |  td }| }| ||jdd d S )Nr  Frr  )rd   r  r  r   ru  r   r   r   test_stat_no_follow_symlinks`  s   z*_BasePathTest.test_stat_no_follow_symlinksc                 C   rx  )Nr  Frr  )rd   r  r  r   ru  r   r   r   &test_stat_no_follow_symlinks_nosymlinkf  s   z4_BasePathTest.test_stat_no_follow_symlinks_nosymlinkc                 C   *   |  td }| }| ||  d S )Nr  )rd   r  r  r   lstatru  r   r   r   
test_lstatk  s   z_BasePathTest.test_lstatc                 C   r{  r  )rd   r  r  r   r|  ru  r   r   r   test_lstat_nosymlinkq  s   z"_BasePathTest.test_lstat_nosymlinkz&the pwd module is needed for this testc                 C   ^   |  td }| j}zt|j}W n ty$   | d|  Y nw | 	||
  d S )Nr  z4user %d doesn't have an entry in the system database)rd   r  r  st_uidpwdgetpwuidpw_nameKeyErrorr#  r   r  )r   rg   uidr   r   r   r   r  v     
z_BasePathTest.test_ownerz&the grp module is needed for this testc                 C   r  )Nr  z5group %d doesn't have an entry in the system database)rd   r  r  st_gidgrpgetgrgidgr_namer  r#  r   r  )r   rg   gidr   r   r   r   r    r  z_BasePathTest.test_groupc                 C   s2   |  td }|  | |j | |j d S r  )rd   r  unlinkr  r  rf   r   r   r   test_unlink  s   z_BasePathTest.test_unlinkc                 C   s*   |  td }| |j |jdd d S )NfileAAAT)
missing_ok)rd   r  r  r  rf   r   r   r   test_unlink_missing_ok  s   z$_BasePathTest.test_unlink_missing_okc                 C   sH   |  td }| D ]}|  q|  | |j | |j d S )Nr  )rd   r  r  r  rmdirr  r  r  r   r   r   
test_rmdir  s   
z_BasePathTest.test_rmdirlinkzos.link() is not presentc              
   C   s(  |  t}|d }| j}|d d }z| t || W d    n1 s*w   Y  W n tyI } z| d|  W Y d }~nd }~ww | 	| j| | 	t
j||d | |j td}| t || W d    n1 s}w   Y  | 	t
|j| | |j d S )Nr  r  fileAAzos.link(): %sTr  )rd   r  r  st_sizeZassertWarnsDeprecationWarninglink_toPermissionErrorr#  r   r   r  r  r   rel_join)r   rm   rg   sizer   er   r   r   r   test_link_to  s,   

z_BasePathTest.test_link_toc                 C   s   |  t}|d }| j}|d d }|| | | j| | tj	|| | |
  |d d }td}|| | t|j| | |
  d S Nr  r  r  r  )rd   r  r  r  hardlink_tor   r   r   r  r  r  r  )r   rm   targetr  r  link2Ztarget2r   r   r   test_hardlink_to  s   



z_BasePathTest.test_hardlink_tozos.link() is presentc                 C   sX   |  t}|d }|d d }| t || W d    d S 1 s%w   Y  d S )Nr  r  r  )rd   r  r   r  r  r   rm   rg   r   r   r   r   test_link_to_not_implemented  s   
"z*_BasePathTest.test_link_to_not_implementedc                 C   s   |  t}|d }| j}|d d }||}| || | | j| | |j td}||}| ||  | | t|j| | |j d S r  )	rd   r  r  r  renamer   r  r  r   )r   rm   rg   r  r   Z	renamed_pr   Z	renamed_qr   r   r   test_rename  s   



z_BasePathTest.test_renamec                 C   s   |  t}|d }| j}|d d }||}| || | | j| | |j tdd}||}| ||  | | t|j| | |j d S )Nr  r  r  r  r  )	rd   r  r  r  r   r   r  r  r   )r   rm   rg   r  r   Z
replaced_pr   Z
replaced_qr   r   r   test_replace  s   




z_BasePathTest.test_replacec                 C   s   |  t}| |d  |  d | |d  |  d | |d  |  d | t |d   W d    d S 1 sCw   Y  d S )Nr  r  r  r  r  r  )rd   r  r   readlinkr   r  r   r   r   r   test_readlink  s   
"z_BasePathTest.test_readlinkc                 C   s   |  t}|d }| |  |  | |  | }|j}|j}t	
t||d |d f |  | }| |j| | |j| |d }| |  |jddd | |  | jt|jdd d S )NZnewfileA
   ZnewfileBi  F)ro  exist_okr  )rd   r  r   r  rN  r   r  st_mtimest_mtime_nsr   utimers   r;  r   r  )r   rm   rg   rv  Z	old_mtimeZold_mtime_nsr   r   r   test_touch_common  s$   
z_BasePathTest.test_touch_commonc                 C   s^   |  t}|d }|  |d}| |  d W d    d S 1 s(w   Y  d S )Nr  r  r  )rd   r  rN  r  r   r  r  )r   rm   rg   r   r   r   r   test_touch_nochange  s   
"z!_BasePathTest.test_touch_nochangec                 C   s   |  t}|d }| |  |  | |  | |  | t}|  W d    n1 s6w   Y  | 	|j
jtj d S )NZnewdirA)rd   r  r   r  r  r   is_dirr   r  r   r  r  EEXIST)r   rm   rg   r  r   r   r   
test_mkdir  s   

z_BasePathTest.test_mkdirc                 C   s\  |  tdd}| |  | t}|  W d    n1 s"w   Y  | |jj	t	j
 |jdd | |  | |  | t}|jdd W d    n1 sZw   Y  | |jj	t	j t| j}|  tdd}|jddd | |  | |  tjdkr| t| jd	|@  | t|j j| d S )
NZnewdirBnewdirCTr=  ZnewdirDZnewdirEim  r  im  )rd   r  r   r  r   r  r  r   r  r  r  r   r  r  r  S_IMODErn  r   r   r   )r   rg   r  ro  r   r   r   test_mkdir_parents&  s*   

z _BasePathTest.test_mkdir_parentsc                 C   s   |  td}| j}| |  | |  | t}|	  W d    n1 s-w   Y  | 
|jjtj |j	dd | |  | 
| j| d S )Nr  Tr  )rd   r  r  st_ctimer   r  r  r   FileExistsErrorr  r   r  r  r  )r   rg   st_ctime_firstr  r   r   r   test_mkdir_exist_ok?  s   

z!_BasePathTest.test_mkdir_exist_okc                 C   s  |  td}| |  | t}|  W d    n1 s!w   Y  | |jj	t	j
 |d }|jdd | j}| |  | t}|jdd W d    n1 s[w   Y  | |jj	t	j
 |jddd | |  | | j| d S )Nr  r  Tr=  r   r  )rd   r  r   r  r   r  r  r   r  r  r  r  r  )r   rg   r  r  r   r   r   test_mkdir_exist_ok_with_parentK  s"   

z-_BasePathTest.test_mkdir_exist_ok_with_parentc                 C   s2   |  d jdd |  d jddd d S )Nr
   Tr  r  )rd   rT  r  r{   r   r   r   test_mkdir_exist_ok_root\  s   z&_BasePathTest.test_mkdir_exist_ok_rootc                 C   sr   dD ]}|  |d }| s nq| d | t |d d jdd W d    d S 1 s2w   Y  d S )NZZYXWVUTSRQPONMLKJIHGFEDCBAz:\z&cannot find a drive that doesn't existchildr  Tr=  )rd   r  r#  r   r  r  )r   r%   rg   r   r   r   test_mkdir_with_unknown_drivea  s   
"z+_BasePathTest.test_mkdir_with_unknown_drivec                 C   s   |  tdd}| |  | t}|jdd W d    n1 s$w   Y  | |jj	t	j
 | t}|jddd W d    n1 sIw   Y  | |jj	t	j
 d S )Nr  r  Tr=  r  rd   r  r   r  r   r  r  r   r  r  r  r"  r   r   r   test_mkdir_with_child_filel  s   z(_BasePathTest.test_mkdir_with_child_filec                 C   s   |  td}| |  | t}|  W d    n1 s!w   Y  | |jj	t	j
 | t}|jdd W d    n1 sEw   Y  | |jj	t	j
 d S )Nr  Tr  r  r"  r   r   r   test_mkdir_no_parents_filex  s   
z(_BasePathTest.test_mkdir_no_parents_filec              	      s   t dD ]m| td }| |  d fdd	}fddt dD t  |d	 d
 }ztd| |jddd W d    n1 sJw   Y  W n t	ya   | 
t|  Y n	w | t|  | |  qd S )N    zdirCPC%dr  c                    s6   t | }  rt| |  |  t| | d S rp   )rs   popr   r  add)r  ro  )concurrently_createdrB  r   r   my_mkdir  s
   
zE_BasePathTest.test_mkdir_concurrent_parent_creation.<locals>.my_mkdirc                    s   g | ]
}t  d |> @ qS )r   )bool)r   n)pattern_numr   r   r     s    zG_BasePathTest.test_mkdir_concurrent_parent_creation.<locals>.<listcomp>   Zdir1Zdir2zpathlib._normal_accessor.mkdirTFr  )r  )r  rd   r  r   r  r  r   rP  r  r  r  rs   ZassertNotInr   )r   rg   r  Zp12r   )r  rB  r  r   %test_mkdir_concurrent_parent_creation  s$   z3_BasePathTest.test_mkdir_concurrent_parent_creationc                 C   s  |  t}|d }|d d }|| | | |  | | |  |d d }|t| | | |  | | |  | |	  |d }|d d }|j|dd | | |  | | |  | 
|	  | 
t|  d S )	Nr  r  ZlinkAAZlinkAAAr  ZlinkAAAATr  )rd   r  rO  r   r  r   r|  rs   r   r  r   r   r  )r   rm   r  r  r   r   r   test_symlink_to  s$   

z_BasePathTest.test_symlink_toc                 C   s   |  t}| |d   | |d   | |d   | |d d   t rK| |d   | |d   | |d  d | |d	  d | |d
  d d S )Nr  r  r  r  r  r  r  Fu   dirAzdirA )rd   r  r   r  r   r   r  ru   r   r   r   r   test_is_dir  s   
z_BasePathTest.test_is_dirc                 C   s   |  t}| |d   | |d   | |d   | |d d   t rJ| |d   | |d   | |d   | |d  d	 | |d
  d	 d S )Nr  r  r  r  r  r  r     fileAFfileA )rd   r  r   is_filer   r   r  ru   r   r   r   r   test_is_file  s   
z_BasePathTest.test_is_filec                 C   s   |  t}|  d}| |d   | |d   | |d   | |d d   | |  t rD| |d   | |  d d | |  d	 d d S )
Nr
   r  r  r  r  r  u   /Fz/ )rd   r  r   is_mountr   r   r  ru   )r   rm   Rr   r   r   test_is_mount  s   

z_BasePathTest.test_is_mountc                 C   s   |  t}| |d   | |d   | |d   | |d d   t rJ| |d   | |d   | |d   | |d  d	 | |d
  d	 t rx| |d  d	 | |d  d	 d S d S )Nr  r  r  r  r  r  r  r  Fr  u   linkAzlinkA )	rd   r  r   
is_symlinkr   r  r   ru   r  r   r   r   r   test_is_symlink  s   
z_BasePathTest.test_is_symlinkc                 C      |  t}| |d   | |d   | |d   | |d d   | |d  d | |d  d d S Nr  r  r  r  r  Fr  )rd   r  r   is_fiforu   r   r   r   r   test_is_fifo_false     
z _BasePathTest.test_is_fifo_falsemkfifozos.mkfifo() requiredvxworksz%fifo requires special path on VxWorksc              
   C   s   |  td}z	tt| W n ty( } z| d|  W Y d }~nd }~ww | |  | 	|
  | 	|  | |  td d | |  td d d S )NZmyfifozos.mkfifo(): %su	   myfifoFzmyfifo )rd   r  r   r  rs   r  r#  r   r  r   	is_socketr  ru   )r   rm   r  r   r   r   test_is_fifo_true  s   z_BasePathTest.test_is_fifo_truec                 C   r  r  )rd   r  r   r  ru   r   r   r   r   test_is_socket_false		  r  z"_BasePathTest.test_is_socket_falseAF_UNIXzUnix sockets requiredc              
   C   s   |  td}ttjtj}| |j z	|t| W n& t	yC } zt
|ts0dt|v r9| dt|  W Y d }~nd }~ww | |  | |  | |  | |  td d | |  td d d S )NZmysockzAF_UNIX path too longzcannot bind Unix socket: u	   mysockFzmysock )rd   r  socketr  SOCK_STREAMr  closebindrs   r  
isinstancer  r#  r   r  r   r  r  ru   )r   rm   sockr  r   r   r   test_is_socket_true	  s    
z!_BasePathTest.test_is_socket_truec                 C   r  r  )rd   r  r   is_block_deviceru   r   r   r   r   test_is_block_device_false#	  r  z(_BasePathTest.test_is_block_device_falsec                 C   r  r  )rd   r  r   is_char_deviceru   r   r   r   r   test_is_char_device_false,	  r  z'_BasePathTest.test_is_char_device_falsec                 C   sv   |  d}| s| d | |  | |  | |  | |  d d | |  d d d S )Nz	/dev/nullz/dev/null requiredu   /dev/nullFz
/dev/null )	rd   r  r#  r   r  r   r  r  ru   r   r   r   r   test_is_char_device_true5	  s   

z&_BasePathTest.test_is_char_device_truec                 C   sP   |  td}tdtjd D ]}t||}t|}| | |  qd S )Nr  r   r   )	rd   r  r  r  r  r  r  r   r  )r   rg   r  r  r   r   r   r   r  @	  s   
z"_BasePathTest.test_pickling_commonc                 C   sJ   | j }|d}|d}| |jd |jd  | |jd |jd  d S )Nz/usr/bin/fooz/usr/local/binr   r   r   )rd   ru   rt   r  r   r   r   test_parts_interningG	  s
   z"_BasePathTest.test_parts_interningc              	   C   s  |  t}| tjddtd | tjddtd | tjddtd | |td |d  }| || | t	|t |d  }| || | t	|t |d  }| || | t	|t |d  }| || | t	|t t
 }tt z\|  d }| || | t	|t |  d }| || | t	|t |  d }| || | t	|t |  d }| || | t	|t W t| d S t| w )NZlink0Zlink1r  Zlink3)rd   r  r  r   r  r  rT  r   r  rs   r  ri  )r   Zlink0_targetrm   rg   Zold_pathr   r   r   _check_complex_symlinksP	  sB   

z%_BasePathTest._check_complex_symlinksc                 C   s   |  t d S rp   )r  r  r{   r   r   r   test_complex_symlinks_absolutey	     z,_BasePathTest.test_complex_symlinks_absolutec                 C   s   |  d d S )Nr'   )r  r{   r   r   r   test_complex_symlinks_relative}	  r  z,_BasePathTest.test_complex_symlinks_relativec                 C   s   |  tjdd d S )Nr  r   )r  r   r  r  r{   r   r   r   &test_complex_symlinks_relative_dot_dot	  s   z4_BasePathTest.test_complex_symlinks_relative_dot_dotN)T)br0   r1   r2   rh   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r   skip_unless_symlinkr  r#  r3  r6  r;  rF  rG  rS  rV  r^  ra  rb  rh  rj  rk  rq  
only_posixrt  rw  ry  rz  r}  r~  unittest
skipUnlessr  r  r  r  r  r  r  hasattrr  r  skipIfr  r  r  r  r  r  r  r  r  r  r  only_ntr  r  r  r  r  r  r  r  r  r  sysplatformr  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r  c  s    

	





$
<


	











	



		
			)

r  c                   @   s2   e Zd ZejZdd Zdd Zdd Zdd Z	d	S )
PathTestc                 C   s   |  | jt | j d S rp   )ru   rd   rs   r{   r   r   r   test_class_getitem	     zPathTest.test_class_getitemc                 C   r  r  )rd   ru   rv   r   r   rI   r  r  rf   r   r   r   r  	  r  zPathTest.test_concrete_classc                 C   s.   t jdkr| ttj d S | ttj d S )Nr  )r   r   r   r  rI   r  r  r{   r   r   r   test_unsupported_flavour	  s   
z!PathTest.test_unsupported_flavourc                 C   sH   |   }| td t|d W d    d S 1 sw   Y  d S )NzUnacceptable patternr   )rd   ZassertRaisesRegexr   r   r'  rf   r   r   r   test_glob_empty_pattern	  s   "z PathTest.test_glob_empty_patternN)
r0   r1   r2   rI   Pathrd   r  r  r  r  r   r   r   r   r  	  s    r  c                   @   s   e Zd ZejZddddZdd Zdd Zd	d
 Z	e
jdd Zdd Zdd Zeeeddeejdkddd Zeejdkddd ZdS )PosixPathTestTrW  c                G   sH   | j | }| t t|| W d    d S 1 sw   Y  d S rp   )rd   r   RuntimeErrorprintrT  )r   rU  rw   r  r   r   r   _check_symlink_loop	  s   
"z!PosixPathTest._check_symlink_loopc                 C   s   t d}| t j| | t}|d d W d    n1 s#w   Y  t td}| t	|j
d t d |d d W d    n1 sPw   Y  t td}| t	|j
d d S )Nr   new_filer       other_new_file  )r   umaskr  rd   r  r  r  r  r   r  rn  r   Zold_maskrg   rv  r   r   r   test_open_mode	  s   


zPosixPathTest.test_open_modec              	   C   sN   t  }zt d | d}| t| d W t | d S t | w )Nr
   rY  z/spam)r   r  ri  rd   r   rs   rT  )r   Zcurrent_directoryrg   r   r   r   test_resolve_root	  s   

zPosixPathTest.test_resolve_rootc                 C   s   t d}| t j| | t}|d   t td}| t	|j
d t d |d   t td}| t	|j
d |d jdd	 t td}| t	|j
d d S )
Nr   r  r	  r
  r  r  Zmasked_new_filei  )ro  )r   r  r  rd   r  rN  r  r  r   r  rn  r  r   r   r   test_touch_mode	  s   


zPosixPathTest.test_touch_modec                 C   s   t dtd | td t dtd | td t dtd | td | jtdddd t td	td
 | td
 t tdtd | td t tdtd | td | jtdddd d S )NzlinkX/insider[  r\  zlinkZ/../linkZZlinkZr  FrW  zlinkU/insideZlinkUZlinkVzlinkW/../linkWZlinkW)r   r  r  r  r  r{   r   r   r   test_resolve_loop	  s   zPosixPathTest.test_resolve_loopc                 C   sX   | j }|t}t|d}ttst n|}| || | t|dt  d S )NFILEazFILEa*)rd   r  r  r'  r   fs_is_case_insensitiver   r   rm   rg   r9  r:  r   r   r   	test_glob	  s   zPosixPathTest.test_globc                 C   sZ   | j }|td}t|d}ttst n|}| || | t|dt  d S )Nr  FILEdzFILEd*)rd   r  r  r5  r   r  r   r  r   r   r   
test_rglob	  s   
zPosixPathTest.test_rglobgetpwallz%pwd module does not expose getpwall()r  zno home directory on VxWorksc                 C   sX  | j }td dd l}|t }|j}|j	dpd}|
 D ]}|j}|j	d}||kr5|r5 nq"|}|}d}z||rK|d7 }||sBW n	 tyU   Y nw |d}	|d| d}
|d| d}|d	| d}|d
| d}|d}|d| d}t }|dd  | |	 ||d  | |
 ||d  | | ||d  | | | | | | | | | | t|j d|d< | |	 |d | |
 ||d  | | ||d  | | | | | | | | | | t|j W d    d S 1 s%w   Y  d S )Nr  r   r
   Zfakeuserrd  z~/Documentsr  z
/Documentsr  r  r   r  Z	Documentsz/tmpz/tmp/Documents)rd   r   import_moduler  r  r   getuidr  pw_dirrstripr  getpwnamr  r   r  r  r   r  r   r  )r   rm   r  ZpwdentusernameuserhomeZ	othernameZ	otherhomeZfakenamep1p2p3p4p5p6Zp7r  r   r   r   test_expanduser	  s`   



$zPosixPathTest.test_expanduserdarwinz1Bad file descriptor in /dev/fd affects only macOSc              
   C   s   z=t tdddd  }|s| d |D ]"}|  |  |  |  |	  |
  |  |  qW d S  tyU } z|jtjkrP| d  d }~ww )Nz/dev/fdr7  r   z.no file descriptors - issue was not reproducedz Bad file descriptor not handled.)r   rI   r  r5  r#  r  r  r  r  r  r  r  r  r  r  EBADFZfail)r   Zfile_descriptorsr   r  r   r   r   test_handling_bad_descriptor*
  s(   

	
z*PosixPathTest.test_handling_bad_descriptorN)r0   r1   r2   rI   r  rd   r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r'  r*  r   r   r   r   r  	  s*    	
5r  c                   @   r  )WindowsPathTestc                 C   s   | j }|t}| t|d|tdh | t|d|tdh | ttt|d| dh | ttt|d| dh d S )Nr  r  zF*az\FILEaz\fileA)rd   r  r   r  r'  maprs   rl   r   r   r   r  F
  s   $(zWindowsPathTest.test_globc                 C   sV   | j }|td}| t|d|tdh | ttt|d| dh d S )Nr  r  r4  z\dirD\FILEd)rd   r  r   r  r5  r,  rs   rl   r   r   r   r  N
  s   
(zWindowsPathTest.test_rglobc              
      sj  j  t dd  dd  dd  dd  dd<  d d d	 d
 d dtj tj tj        f	dd}dd< |  dd< dd< |  dd  dd  dd< |  dd< |  W d    d S 1 sw   Y  d S )Nr  r  HOMEPATH	HOMEDRIVEaliceUSERNAMEz~/My Documentsz~alice/My Documentsz~bob/My Documentsz/~/My Documentszd:~/My Documentsr   c                      s    dd    d tj dd<   d   d       d S )Nr0  zC:/Users/alice/My Documentsr/  zC:/Users/bob/My Documents)r  r   r  r   r  r   	rm   r  r!  r"  r#  r$  r%  r&  r   r   r   r.   k
  s   


z.WindowsPathTest.test_expanduser.<locals>.checkzC:\Users\alicezC:\zUsers\alicezC:\Users\eve)rd   r   r  r  r   r  r  r   r<   r   r1  r   r'  T
  s@   
"zWindowsPathTest.test_expanduserN)	r0   r1   r2   rI   r  rd   r  r  r'  r   r   r   r   r+  B
  s
    r+  c                   @   s,   e Zd Z	 G dd dZdd Zdd ZdS )CompatiblePathTestc                   @   s&   e Zd Z	 dd Zdd Zdd ZdS )zCompatiblePathTest.CompatPathc                 C   s
   || _ d S rp   )string)r   r3  r   r   r   __init__
  s   
z&CompatiblePathTest.CompatPath.__init__c                 C   s   t | | j d| S r   rv   r3  r   rL  r   r   r   __truediv__
  r   z)CompatiblePathTest.CompatPath.__truediv__c                 C   s   t | | d| j S r   r5  r6  r   r   r   __rtruediv__
  r   z*CompatiblePathTest.CompatPath.__rtruediv__N)r0   r1   r2   r4  r7  r8  r   r   r   r   
CompatPath
  s
    r9  c                 C   sn   t d| d }| || j | |jd | t t dd  W d    d S 1 s0w   Y  d S )Ntestrightz
test/rightr  )rI   r  r9  rk   r   r3  r   r   r   resultr   r   r   test_truediv
     "zCompatiblePathTest.test_truedivc                 C   sn   |  dtd }| || j  | |jd | t dtd  W d    d S 1 s0w   Y  d S )Nleftr:  z	left/testr  )r9  rI   r  rk   r   r3  r   r   r<  r   r   r   test_rtruediv
  r?  z CompatiblePathTest.test_rtruedivN)r0   r1   r2   r9  r>  rA  r   r   r   r   r2  
  s
    	r2  __main__)1collections.abcr0  r  r   r  r  rI   r  r  r  r_  r  r   Ztest.supportr   r   Ztest.support.os_helperr   r   r  r  ImportErrorobjectr   ZTestCaser4   rK   r]   r  r3  r  r  realpathr  r  r  r  r   r  r  r  r  r  r  r  r+  r2  r0   mainr   r   r   r   <module>   s    )$B    L            + %G
)