B
    u9aGg                @   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mZ yd dlZd dlZW n ek
r   d ZZY nX 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,e-d%kre.  dS )&    N)mock)support)TESTFNFakePathc               @   s   e Zd Zdd Zdd ZdS )_BaseFlavourTestc                sd   | j j}| j j| j j |fdd|D }| ||  r`| fdd|D }| || d S )Nc                s   g | ]}| d  qS )/)replace).0x)sep "/usr/lib/python3.7/test_pathlib.py
<listcomp>   s    z7_BaseFlavourTest._check_parse_parts.<locals>.<listcomp>c                s   g | ]}| d  qS )r   )r   )r	   r
   )altsepr   r   r       s    )flavourZ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 |dddgddddd	dgf |dd
dgddddd	dgf |dddgddddd	dgf |dgddg f |dddgdddgf |dddgddddgf |dddg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 |ddd	gd||dd	gf |dddgd||d	gf d S )N aza/bza/bza/b/zb/cdczb//czb/c/.z/a/bz/az/a/z/bz/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               @   s"   e Zd ZejZdd Zdd ZdS )PosixFlavourTestc             C   s   | j }|ddgdddddgf |ddgdddddgf |ddgd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gf d S )Nz//ar   r   z//r   z///ar   z////azc:azc:\az\a)r   )r   r   r   r   r   test_parse_partsC   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   za/b)r   r   za/bza/b/)r   r   za/b/z/a)r   r   r   z/a/b)r   r   za/bz/a/b/)r   r   za/b/z//a)r   z//r   z///az///a/bzc:/a/b)r   r   zc:/a/bz\/a/b)r   r   z\/a/bz\a\b)r   r   z\a\b)r   	splitrootr   )r   r   r   r   r   test_splitrootO   s    zPosixFlavourTest.test_splitrootN)r    r!   r"   pathlibZ_posix_flavourr   r$   r&   r   r   r   r   r#   @   s   r#   c               @   s"   e Zd ZejZdd Zdd ZdS )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 |dddgdddddgf |dddgdddddgf |dddgddddgf |dddgddddddgf |dddg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 |dd!dgdddddgf |d&d!dgdddddgf |d'd!dgd(dd)ddgf d S )*Nzc:r   zc:/\zc:\r   zc:ar   zc:/az/az//a/bz\\a\bz\\a\b\z//a/b/z//a/b/cr   zZ:bzZ:r   zZ:/bzZ:\z//b/cr   z\\b\cz\\b\c\z	Z://b//c/zd/z//b/c//z//?/c:/z\\?\c:z\\?\c:\z//?/c:/az/bz//?/UNC/b/cz\\?\UNC\b\cz\\?\UNC\b\c\z//?/UNC/b/c/dzZ:/az//?/Z:/az\\?\Z:z\\?\Z:\)r   )r   r   r   r   r   r$   g   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   r   )r   r   r   za\b)r   r   za\bz\a)r   r)   r   z\a\b)r   r)   za\bzc:a\b)zc:r   za\bzc:\a\b)zc:r)   za\bz\\az\\\a/b)r   r)   za/bzc:\\a)zc:r)   r   zc:\\\a/b)zc:r)   za/bz\\a\b)z\\a\br)   r   z\\a\b\z	\\a\b\c\d)z\\a\br)   zc\dz\\\a\b)r   r%   r   )r   r   r   r   r   r&      s"    zNTFlavourTest.test_splitrootN)r    r!   r"   r'   Z_windows_flavourr   r$   r&   r   r   r   r   r(   d   s   "r(   c            
   @   s.  e Zd Zddddddddd	d
g
ddddddg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dFdG ZdHdI ZdJdK Z dLdM Z!dNdO Z"dPS )Q_BasePurePathTest)r   r   )za/r   )r   zb/)za/zb/)za/b/)za//b)za//b//)r   r   r   )r   r   r   )r   r   r   )r   z/b/cr   )r   z///b//czd/)z/az/b/cr   )r   r   r   zc/d)r   r   zb/c/d)r   z/b/c/d)za/bz/b/c/dc             C   s*   |  d}|j| _| jj| _| jj| _d S )Nr   )clsZ_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   z/aza/b/cz/a/b/cza/b)r+   assertIsInstancer   r   )r   Pr,   r   r   r   test_constructor_common   s    z)_BasePurePathTest.test_constructor_commonc                s`   G dd dt  | j}| fdd|D  }| |||  x|jD ]}| t|t  qDW d S )Nc               @   s   e Zd ZdS )z:_BasePurePathTest._check_str_subclass.<locals>.StrSubclassN)r    r!   r"   r   r   r   r   StrSubclass   s   r1   c             3   s   | ]} |V  qd S )Nr   )r	   r
   )r1   r   r   	<genexpr>   s    z8_BasePurePathTest._check_str_subclass.<locals>.<genexpr>)strr+   r   partsassertIstype)r   argsr/   r,   partr   )r1   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)r9   )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 )Nza/br   za/b/cr   za/b/c/dz/c)r+   joinpathr   r5   r6   )r   r/   r,   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 )	Nza/br   za/b/czc/dza/b/c/dr   zc/a/b/dz/c)r+   r   r5   r6   )r   r/   r,   r<   r   r   r   test_div_common   s    z!_BasePurePathTest.test_div_commonc             C   s(   | j | }| t||d| j d S )Nr   )r+   r   r3   r   r   )r   r   r7   r,   r   r   r   
_check_str   s    
z_BasePurePathTest._check_strc             C   s,   xdD ]}|  ||f qW |  dd d S )N)r   za/bza/b/cr   z/a/bz/a/b/cr   )r   )r?   )r   pathstrr   r   r   test_str_common  s    
z!_BasePurePathTest.test_str_commonc             C   s,   | j }x dD ]}| || | qW d S )N)r   za/bza/b/cr   z/a/bz/a/b/c)r+   r   as_posix)r   r/   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 )Nza/b   a   b)osfsencoder   r+   r   bytes)r   r   r/   r   r   r   test_as_bytes_common  s    z&_BasePurePathTest.test_as_bytes_commonc          	   C   sL   | j }| t |d  W d Q R X | t |   W d Q R X d S )Nr   )r+   assertRaises
ValueErroras_uri)r   r/   r   r   r   test_as_uri_common  s
    z$_BasePurePathTest.test_as_uri_commonc             C   s   xdD ]}|  |}|jj}t|}| ||d | | |d| |t|d d }| t	||
  t	|tj}| |j|j | || | t|| qW d S )N)r   za/bza/b/cr   z/a/bz/a/b/c()   )r+   	__class__r    repr
assertTrue
startswithendswithlenr   evalrB   r'   __dict__r5   )r   r@   r,   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 )Nza/br   r   z/a/br   r   )r+   r   assertNotEqualint)r   r/   r   r   r   test_eq_common-  s    z _BasePurePathTest.test_eq_commonc             C   s&  | 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 S )Nr   r   r   zb.pyza/b.pyz/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/dz/b.pyz/*.pyz/a/*.pyz/ab.pyz	/a/b/c.py)r+   rJ   rK   matchrT   assertFalse)r   r/   r   r   r   test_match_common:  s8    z#_BasePurePathTest.test_match_commonc          	      s    fdd} j }|d}|d}|d}|d}||| ||| ||| ||| |||  j }|d}|d}|d	}|d
}||| ||| ||| ||| |||  t | i k  W d Q R X d S )Nc                s     | |  ||  d S )N)
assertLessZassertGreater)r   r   )r   r   r   rd   _  s    z:_BasePurePathTest.test_ordering_common.<locals>.assertLessr   za/babcr   z/az/a/bz/abcz/b)r+   rJ   	TypeError)r   rd   r/   r   r   r   r   r   )r   r   test_ordering_common]  s.    









z&_BasePurePathTest.test_ordering_commonc             C   sX   | j }| j}|d}|j}| |d | ||j |d}|j}| ||ddf d S )Nza/b)r   r   z/a/br   r   )r   r+   r4   r   r5   )r   r   r/   r,   r4   r   r   r   test_parts_commony  s    z#_BasePurePathTest.test_parts_commonc             C   s4   | j }|d}| | d | t|d d S )Nza/b)za/b)r+   r?   
__fspath__rF   fspath)r   r/   r,   r   r   r   test_fspath_common  s    z$_BasePurePathTest.test_fspath_commonc          	      s   xƈ j  D ]\}}|d j}| jd}||krZ| fdd|D  }||f  |}x^|D ]V} j| } ||d|  t|t|  t	||  |
 | qjW qW 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	   r8   )r   r   r   r2     s    zA_BasePurePathTest.test_equivalences.<locals>.<listcomp>.<genexpr>)tuple)r	   t)r   r   r   r     s   z7_BasePurePathTest.test_equivalences.<locals>.<listcomp>zfailed with args {})equivalencesitemsr   r   appendr+   r   formathashr3   rB   )r   kZtuplesZcanonposixZpcanonrm   r,   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 )Nza/b/cza/br   z/a/b/cz/a/bz/ar   )r+   r   parent)r   r/   r,   r   r   r   test_parent_common  s    z$_BasePurePathTest.test_parent_commonc          	   C   sz  | j }|d}|j}| t|d | |d |d | |d |d | |d |d | t||d|d|dg | t |d	  W d Q R X | t |d  W d Q R X | t ||d< W d Q R X |d
}|j}| t|d | |d |d | |d |d | |d |d | t||d|d|dg | t |d  W d Q R X d S )Nza/b/c   r   za/brP   r      r   rQ   z/a/b/cz/a/bz/ar   )r+   parentsr   rW   listrJ   
IndexErrorrf   )r   r/   r,   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 )Nza/br   z/a/b)r+   r   drive)r   r/   r   r   r   test_drive_common  s    z#_BasePurePathTest.test_drive_commonc             C   sX   | j }| j}| |djd | |djd | |dj| | |dj| d S )Nr   za/br   z/a/b)r+   r   r   root)r   r/   r   r   r   r   test_root_common  s    z"_BasePurePathTest.test_root_commonc             C   sX   | j }| j}| |djd | |djd | |dj| | |dj| d S )Nr   za/br   z/a/b)r+   r   r   anchor)r   r/   r   r   r   r   test_anchor_common  s    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   za/br   z/a/bz/a/b/.za/b.pyzb.pyz/a/b.py)r+   r   name)r   r/   r   r   r   test_name_common  s    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   z..r   za/bz/a/bz/a/b/.za/b.pyz.pyz/a/b.pyza/.hgrcz/a/.hgrcza/.hg.rcz.rcz	/a/.hg.rcz
a/b.tar.gzz.gzz/a/b.tar.gzza/Some name. Ending with a dot.z /a/Some name. Ending with a dot.)r+   r   suffix)r   r/   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   za/bz/a/bz/a/b/.za/b.pyz.pyz/a/b.pyza/.hgrcz/a/.hgrcza/.hg.rcz.rcz	/a/.hg.rcz
a/b.tar.gzz.tarz.gzz/a/b.tar.gzza/Some name. Ending with a dot.z /a/Some name. Ending with a dot.)r+   r   suffixes)r   r/   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   z..r   za/br   za/b.pyza/.hgrcz.hgrcza/.hg.rcz.hgz
a/b.tar.gzzb.tarza/Some name. Ending with a dot.zSome name. Ending with a dot.)r+   r   stem)r   r/   r   r   r   test_stem_common  s    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 )Nza/bzd.xmlza/d.xmlz/a/bz/a/d.xmlza/b.pyz/a/b.pyza/Dot ending.z/a/Dot ending.r   r   r   z/czc/zc/d)r+   r   	with_namerJ   rK   )r   r/   r   r   r   test_with_name_common  s    z'_BasePurePathTest.test_with_name_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 )Nza/bz.gzza/b.gzz/a/bz/a/b.gzza/b.pyz/a/b.pyr   r   r   gzz/.gzzc/dz.c/.dz./.dz.d/.r   )r+   r   with_suffixrJ   rK   r   r   )r   r/   r   r   r   test_with_suffix_common/  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 )Nza/brD   r   r   r   za/r   za/b/cza/cz/az/a/br   z/a/z/cz/a/b/cz/a/c)r+   rJ   rf   relative_tor   rK   )r   r/   r,   r   r   r   test_relative_to_commonH  s<    z)_BasePurePathTest.test_relative_to_commonc             C   s   | j }|d}xrtdtjd D ]^}t||}t|}| |j|j | || | t	|t	| | t
|t
| q W d S )Nz/a/br   rP   )r+   rangepickleHIGHEST_PROTOCOLdumpsloadsr5   rR   r   rr   r3   )r   r/   r,   protodumpedr<   r   r   r   test_pickling_commonk  s    
z&_BasePurePathTest.test_pickling_commonN)#r    r!   r"   rn   r-   r0   r9   r:   r=   r>   r?   rA   rC   rI   rM   r]   r`   rc   rg   rh   rk   ru   rw   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 )Nz/a/br   z///a/bz//a/bz//)r+   r   r   )r   r/   r   r   r   	test_rootz  s    zPurePosixPathTest.test_rootc             C   sF   | j }| |d|d | |d|d | |d|d d S )Nza/bzA/bz/az///az//a)r+   r^   r   )r   r/   r   r   r   test_eq  s    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)r+   r   rL   )r   r/   r   r   r   test_as_uri  s    zPurePosixPathTest.test_as_uric             C   sf   ddl m} | j}ytd W n tk
r>   | d Y nX | |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)	Zurllib.parser   r+   rF   rG   UnicodeEncodeErrorskipTestr   rL   )r   r   r/   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)r+   rb   ra   )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   za/b/r   z/az/a/b/z//az//a/b)r+   rb   is_absoluterT   )r   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   z/foo/barz/dev/con/PRN/NUL)r+   r5   is_reserved)r   r/   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 )Nz//ar   z//a/bz/az//cz/c)r+   r;   r   )r   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 )Nz//ar   z//a/bz/az//cz/c)r+   r   )r   r/   r,   r<   r   r   r   test_div  s    zPurePosixPathTest.test_divN)r    r!   r"   r'   PurePosixPathr+   r   r   r   r   r   r   r   r   r   r   r   r   r   r   w  s   

r   c               @   s   e Zd ZejZej Ze	dddgdddddg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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Z d;S )<PureWindowsPathTest)zc:r   )zc:za/)r   zc:r   )zc:/r   )zc:r   r   )zc:z/a)z/zzc:/r   )z//x/yzc:/r   )z//a/b)z//a/br   )z//a/b/r   )zc:azc:/az//a/b/z//a/b/cc             C   s   |  d}| t|d |  d}| t|d |  d}| t|d |  d}| t|d |  d	}| t|d
 d S )Nza/b/cza\b\czc:/a/b/czc:\a\b\cz//a/bz\\a\b\z//a/b/cz\\a\b\cz	//a/b/c/dz	\\a\b\c\d)r+   r   r3   )r   r,   r   r   r   test_str  s    




zPureWindowsPathTest.test_strc             C   s^   |  d |  d |  d |  d |  d |  d |  d |  d |  d	 d S )
Nzc:zc:az	c:a\b.txtzc:\zc:\az
c:\a\b.txtz\\some\sharez\\some\share\az\\some\share\a\b.txt)r9   )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 )Nzc:a/bzc:r   r   zd:a/bzc:/a/bz/a/bza/BzA/bzC:a/Bzc:A/bz//Some/SHARE/a/Bz//somE/share/A/b)r+   r   r^   )r   r/   r   r   r   r     s    zPureWindowsPathTest.test_eqc          	   C   s   | j }| t |d  W d Q R X | t |d  W d Q R X | |d d | |d d | |d d | |d	 d
 | |d d | |d d | |d d d S )Nz/a/bzc:a/bzc:/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)r+   rJ   rK   rL   r   )r   r/   r   r   r   r     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.pyz/*.pyzc:*.pyzc:/*.pyzd:/b.pyzb.pyzc:b.pyz/b.pyz//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)r+   rT   ra   rb   )r   r/   r   r   r   rc     s&    z%PureWindowsPathTest.test_match_commonc                s    fdd} j }|d}|d}|||  ||k   ||k |d}|d}|||  ||k   ||k d S )Nc                s     | |  ||  d S )N)ZassertLessEqualassertGreaterEqual)r   r   )r   r   r   assertOrderedEqual   s    zDPureWindowsPathTest.test_ordering_common.<locals>.assertOrderedEqualzc:A/bzC:a/Bz//some/Share/A/bz//Some/SHARE/a/B)r+   rb   )r   r   r/   r,   r\   r   )r   r   rg     s    

z(PureWindowsPathTest.test_ordering_commonc             C   sX   | j }|d}|j}| |d |d}|j}| |d |d}|j}| |d d S )Nzc:a/b)zc:r   r   zc:/a/b)zc:\r   r   z	//a/b/c/d)z\\a\b\r   r   )r+   r4   r   )r   r/   r,   r4   r   r   r   
test_parts/  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/bzz:azz:zz:/a/b/czz:/a/bzz:/azz:/z	//a/b/c/dz//a/b/cz//a/b)r+   r   rv   )r   r/   r,   r   r   r   test_parent;  s    zPureWindowsPathTest.test_parentc          	   C   s  | j }|d}|j}| t|d | |d |d | |d |d | t||d|dg | t |d  W d Q R X |d}|j}| t|d | |d |d | |d |d	 | t||d|d	g | t |d  W d Q R X |d
}|j}| t|d | |d |d | |d |d | t||d|dg | t |d  W d Q R X d S )Nzz:a/b/ry   r   zz:arP   zz:zz:/a/b/zz:/azz:/z	//a/b/c/dz//a/b/cz//a/b)r+   rz   r   rW   r{   rJ   r|   )r   r/   r,   r}   r   r   r   test_parentsM  s2    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 )	Nzc:zc:a/bzc:/zc:/a/b/z//a/bz\\a\bz//a/b/z	//a/b/c/d)r+   r   r   )r   r/   r   r   r   
test_drivei  s    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 )
Nzc:r   zc:a/bzc:/r)   zc:/a/b/z//a/bz//a/b/z	//a/b/c/d)r+   r   r   )r   r/   r   r   r   r   s  s    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 )
Nzc:zc:a/bzc:/zc:\zc:/a/b/z//a/bz\\a\b\z//a/b/z	//a/b/c/d)r+   r   r   )r   r/   r   r   r   test_anchor}  s    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 )Nzc:r   zc:/zc:a/br   zc:/a/bzc:a/b.pyzb.pyz	c:/a/b.pyz//My.py/Share.phpz//My.py/Share.php/a/b)r+   r   r   )r   r/   r   r   r   	test_name  s    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 )Nzc:r   zc:/zc:a/bzc:/a/bzc:a/b.pyz.pyz	c:/a/b.pyz	c:a/.hgrcz
c:/a/.hgrcz
c:a/.hg.rcz.rczc:/a/.hg.rczc:a/b.tar.gzz.gzzc:/a/b.tar.gzz!c:a/Some name. Ending with a dot.z"c:/a/Some name. Ending with a dot.z//My.py/Share.phpz//My.py/Share.php/a/b)r+   r   r   )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 )Nzc:zc:/zc:a/bzc:/a/bzc:a/b.pyz.pyz	c:/a/b.pyz	c:a/.hgrcz
c:/a/.hgrcz
c:a/.hg.rcz.rczc:/a/.hg.rczc:a/b.tar.gzz.tarz.gzzc:/a/b.tar.gzz//My.py/Share.phpz//My.py/Share.php/a/bz!c:a/Some name. Ending with a dot.z"c:/a/Some name. Ending with a dot.)r+   r   r   )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 )Nzc:r   zc:.zc:..z..zc:/zc:a/br   zc:a/b.pyz	c:a/.hgrcz.hgrcz
c:a/.hg.rcz.hgzc:a/b.tar.gzzb.tarz!c:a/Some name. Ending with a dot.zSome name. Ending with a dot.)r+   r   r   )r   r/   r   r   r   	test_stem  s    zPureWindowsPathTest.test_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
 d S )Nzc:a/bzd.xmlz	c:a/d.xmlzc:/a/bz
c:/a/d.xmlzc:a/Dot ending.zc:/a/Dot ending.zc:zc:/z
//My/Sharezd:zd:ezd:/e)r+   r   r   rJ   rK   )r   r/   r   r   r   test_with_name  s    z"PureWindowsPathTest.test_with_namec             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 )Nzc:a/bz.gzzc:a/b.gzzc:/a/bz	c:/a/b.gzzc:a/b.pyz	c:/a/b.pyr   r   r   z
//My/Sharer   r)   zc:z/.gzz\.gzzc:.gzzc/dzc\dz.c/dz.c\d)r+   r   r   rJ   rK   )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 )'Nz	C:Foo/Barzc:zFoo/Barzc:foOZBarzc:foO/z	c:foO/baRr   zd:r   ZFooz/FoozC:/FoozC:Foo/Bar/Bazz	C:Foo/Bazz
C:/Foo/Barz/Foo/Barz\Foo\Barzc:/zc:/foOzc:/foO/z
c:/foO/baRzC:/BazzC:/Foo/Bar/Bazz
C:/Foo/BazzC:Foozd:/z//C/Fooz//Server/Share/Foo/Barz//sErver/sHarez//sErver/sHare/z//sErver/sHare/Fooz//sErver/sHare/Foo/z//sErver/sHare/Foo/Barz/Server/Share/Foozc:/Server/Share/Fooz//z/Share/Fooz//Server/z/Foo)r+   r   r   rJ   rK   r3   )r   r/   r,   r   r   r   test_relative_to  sh    z$PureWindowsPathTest.test_relative_toc             C   s(  | j }| |   | |d  | |d  | |d  | |d  | |d  | |d  | |d  | |d  | |d	  | |d
  | |d  | |d  | |d  | |d  | |d  d S )Nr   za/b/r   z/az/a/b/zc:zc:azc:a/b/zc:/zc:/azc:/a/b/z//a/bz//a/b/z//a/b/cz	//a/b/c/d)r+   rb   r   rT   )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 )NzC:/a/bzx/yz
C:/a/b/x/yz/x/yzC:/x/yzD:x/yzD:/x/yz//host/share/x/yzc:x/yzc:/x/y)r+   r;   r   )r   r/   r,   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 )NzC:/a/bzx/yz
C:/a/b/x/yr
   yz/x/yzC:/x/yz/xzD:x/yzD:zD:/x/yz//host/share/x/yzc:x/yzc:/x/y)r+   r   )r   r/   r,   r   r   r   r   Q  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 S )NFr   r   z/foo/barTZconZNULzNUL.txtZcom1zcom9.barzbar.com9Zlpt1zlpt9.barzbar.lpt9zc:/NUL/con/bazz//my/share/nul/con/aux)r+   r5   r   )r   r/   r   r   r   r   e  s    z$PureWindowsPathTest.test_is_reservedN)!r    r!   r"   r'   PureWindowsPathr+   r*   rn   copyupdater   r   r   r   rc   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s>   



:r   c               @   s*   e Zd ZejZdd Zdd Zdd ZdS )PurePathTestc             C   s0   |  d}| t|tjdkr$tjntj d S )Nr   nt)r+   r5   r6   rF   r   r'   r   r   )r   r,   r   r   r   test_concrete_class{  s    

z PurePathTest.test_concrete_classc             C   s$   t d}t d}| || d S )Nr   )r'   r   r   r^   )r   r,   r\   r   r   r   test_different_flavours_unequal  s    

z,PurePathTest.test_different_flavours_unequalc          	   C   s   t d}t d}| t ||k  W d Q R X | t ||k W d Q R X | t ||k W d Q R X | t ||k W d Q R X d S )Nr   )r'   r   r   rJ   rf   )r   r,   r\   r   r   r   !test_different_flavours_unordered  s    

z.PurePathTest.test_different_flavours_unorderedN)	r    r!   r"   r'   ZPurePathr+   r   r   r   r   r   r   r   r   x  s   r   c              G   s   t jjtf|  S )N)rF   pathjoinBASE)r
   r   r   r   <lambda>      r   c              G   s   t jjtf|  S )N)rF   r   r   r   )r
   r   r   r   r     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)r    r!   r"   r'   	PosixPathr+   r   r   r   r   r     s   r   c               @   s"   e Zd ZejZdd Zdd ZdS )WindowsPathAsPureTestc          	   C   s,   | j }| t |d  W d Q R X d S )Nzc:/)r+   rJ   NotImplementedErrorowner)r   r/   r   r   r   
test_owner  s    z WindowsPathAsPureTest.test_ownerc          	   C   s,   | j }| t |d  W d Q R X d S )Nzc:/)r+   rJ   r   group)r   r/   r   r   r   
test_group  s    z WindowsPathAsPureTest.test_groupN)r    r!   r"   r'   WindowsPathr+   r   r   r   r   r   r   r     s   r   c               @   s  e Zd 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ejd$d% Zd&d' Zd(d) Zd*d+ Zejd,d- Zd.d/ Zdd1d2Ze ZZ ejd3d4 Z!ejd5d6 Z"d7d8 Z#d9d: Z$d;d< Z%ejd=d> Z&d?d@ Z'e()e*dAdBdC Z+e()e,dDdEdF Z-dGdH Z.dIdJ Z/dKdL Z0dMdN Z1dOdP Z2dQdR Z3dSdT Z4dUdV Z5dWdX Z6dYdZ Z7d[d\ Z8e9d]d^ Z:d_d` Z;dadb Z<dcdd Z=ejdedf Z>dgdh Z?didj Z@eAdkdl ZBdmdn ZCdodp ZDe()eEedqdrdsdt ZFdudv ZGe()eEeHdwdxdydz ZId{d| ZJd}d~ ZKdd ZLdd ZMdd ZNdd ZOejdd ZPejdd ZQejdd ZRdS )_BasePathTestz?Tests for the FS-accessing functionalities of the Path classes.c          	   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 Q R X ttddd	}|d W d Q R X ttddd	}|d W d Q R X ttdddd	}|d W d Q R X 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 )Nc               S   s   t tdd tt d S )NdirEi  )rF   chmodr   r   rmtreer   r   r   r   r   cleanup  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   linkAznon-existing
brokenLinklinkBz..linkClinkDbrokenLinkLoop)
addCleanuprF   mkdirr   r   openwriter   r   can_symlinksymlinkdirlinkr   )r   r   r   r   r   r   r-     s0    


z_BasePathTest.setUpr   c             C   s   t j||dd d S )NT)target_is_directory)rF   r   )r   srcdestr   r   r   r     s    z_BasePathTest.dirlinkc             C   s   t || d S )N)rF   r   )r   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)rT   rF   r   samefiler3   )r   Zpath_aZpath_br   r   r   
assertSame  s    z_BasePathTest.assertSamec          	   O   s6   |  t}||| W d Q R X | |jjtj d S )N)rJ   FileNotFoundErrorr   	exceptionerrnoENOENT)r   funcr7   kwargscmr   r   r   assertFileNotFound  s    z _BasePathTest.assertFileNotFoundc             C   sT   |  t }| || | t|t| | t|t| | |  d S )N)	r+   rF   getcwdr   r3   r5   r6   rT   r   )r   r,   r\   r   r   r   	_test_cwd  s
    z_BasePathTest._test_cwdc             C   s   | j  }| | d S )N)r+   cwdr   )r   r,   r   r   r   test_cwd  s    
z_BasePathTest.test_cwdc             C   sX   |  tjd}| || | t|t| | t|t| | |	  d S )N~)
r+   rF   r   
expanduserr   r3   r5   r6   rT   r   )r   r,   r\   r   r   r   
_test_home  s
    z_BasePathTest._test_homec             C   s   | j  }| | d S )N)r+   homer   )r   r,   r   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)
rF   r   r   r   r+   rT   r   rb   rJ   r   )r   Z
fileA_pathZ
fileB_pathr,   r<   r\   Znon_existentrZ   r   r   r   test_samefile  s"    



z_BasePathTest.test_samefilec             C   s$   |  d}| | td d S )Nr   r   )r+   r   statrF   )r   r,   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  z/~z../~r   )r+   r   r   rF   r   absoluter   )r   r/   r,   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 S )NTr   r   Fbahr   r   r   r  z/xyzzy)r+   r   r5   existsr   r   )r   r/   r,   r   r   r   test_exists6  s    z_BasePathTest.test_existsc          	   C   s   |  t}|d d$}| |tj | | d W d Q R X |d d(}| |tj | | 	 d W d Q R X |d jddd(}| |tj
 | | 	 d W d Q R X d S )Nr   rZ   zthis is file A
rbs   this is file Ar   )	buffering)r+   r   r   r.   io
TextIOBaser   readBufferedIOBasestrip	RawIOBase)r   r,   r   r   r   r   test_open_commonE  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)r+   r   Zwrite_bytesr   Z
read_bytesrJ   rf   )r   r,   r   r   r   test_read_write_bytesQ  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)r+   r   Z
write_textr   Z	read_textrJ   rf   )r   r,   r   r   r   test_read_write_textY  s    
z"_BasePathTest.test_read_write_textc                sb   | j   t}| }t|}dddddg}t rD|dddd	g7 }| | fd
d|D  d S )Nr   r   r   r   r   r   r   r   r   c                s   h | ]} t |qS r   )r   )r	   r\   )r/   r   r   	<setcomp>j  s    z-_BasePathTest.test_iterdir.<locals>.<setcomp>)r+   r   iterdirsetr   r   r   )r   r,   itpathsr   r   )r/   r   test_iterdirb  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   r  r  s    z5_BasePathTest.test_iterdir_symlink.<locals>.<setcomp>)r   r   )r+   r   r  r  r   )r   r,   r  r   r   )r/   r   test_iterdir_symlinkl  s
    
z"_BasePathTest.test_iterdir_symlinkc          	   C   sN   |  td}| t}t|  W d Q R X | |jjtj	tj
tjf d S )Nr   )r+   r   rJ   OSErrornextr  assertInr   r   ZENOTDIRr   ZEINVAL)r   r,   r   r   r   r   test_iterdir_nodiru  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 s||dd	dg n||dd	dd
g t s||ddg n||dddddg t s||ddg n||dddg d S )Nc                s"    t|  fdd|D  d S )Nc                s   h | ]} t |qS r   )r   )r	   r\   )r/   r   r   r    s    zA_BasePathTest.test_glob_common.<locals>._check.<locals>.<setcomp>)r   r  )globr   )r/   r   r   r   _check  s    z._BasePathTest.test_glob_common.<locals>._checkr   r   z
dir*/file*z
dirB/fileBz
dirC/fileCz*Ar   r   z*B/*z
dirB/linkDzlinkB/fileBzlinkB/linkDz*/fileB)	r+   r   r%  r.   collectionsre   Iteratorr   r   )r   r&  r,   r  r   )r/   r   r   test_glob_common  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ddd	d
g ||dddddg  td}||dddg ||ddg d S )Nc                s"    t|  fdd|D  d S )Nc                s   h | ]} t |qS r   )r   )r	   r\   )r/   r   r   r    s    zB_BasePathTest.test_rglob_common.<locals>._check.<locals>.<setcomp>)r   r  )r%  r   )r/   r   r   r   r&    s    z/_BasePathTest.test_rglob_common.<locals>._checkr   r   z
dirB/fileBz*/fileAz*/fileBzdirB/linkD/fileBzlinkB/fileBzdirA/linkC/fileBzfile*z
dirC/fileCzdirC/dirD/fileDr   z*/*)	r+   r   rglobr.   r'  re   r(  r   r   )r   r&  r,   r  r   )r/   r   r   test_rglob_common  s"    



z_BasePathTest.test_rglob_commonc                s\   | j }|t t d}dddddddd	d
ddddddh}| | fdd|D  d S )N*r   r   z
dirA/linkCr   z
dirB/fileBz
dirB/linkDr   z	dirC/dirDzdirC/dirD/fileDz
dirC/fileCr   r   r   r   r   c                s   h | ]} | qS r   r   )r	   r
   )r,   r   r   r    s    z8_BasePathTest.test_rglob_symlink_loop.<locals>.<setcomp>)r+   r   r  r*  r   )r   r/   givenexpectr   )r,   r   test_rglob_symlink_loop  s    z%_BasePathTest.test_rglob_symlink_loopc             C   sf   | j }|t}| t|d|tdh | t|d|tdh | t|dt  d S )Nz..zdirA/../file*zdirA/../fileAz../xyzzy)r+   r   r   r  r%  )r   r/   r,   r   r   r   test_glob_dotdot  s
    z_BasePathTest.test_glob_dotdotTc             C   s   | |}| || d S )N)resolver   )r   r,   r   strictr\   r   r   r   _check_resolve  s    
z_BasePathTest._check_resolvec          
   C   s  | j }|td}| t}|jdd W d Q R X | |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r| |||dddd n| ||tdddd d S )Nr  T)r2  FinZspamz..r   r   r   r   r   r   r   r   z-dirD)r   dirlinkXlinkY)r+   r   rJ   r!  r1  r   r   r   r   r3   rF   r   r   abspath_check_resolve_relativer   r   Z	_longpathtempfileZmkdtempr   r   r   r   _check_resolve_absolute)r   r/   r,   r   r   r   r   r   test_resolve_common  sT    


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2T)r2  34F)
r+   r   r   r   rF   r   r   r1  rJ   r   )r   r,   r\   rZ   r   r   r   test_resolve_dot
  s    
z_BasePathTest.test_resolve_dotc          	   C   s   |  t}| }| }t| | W d Q R X | tt| | tt| | t|j | t|j | t|j | t|j	 d S )N)
r+   r   r  r"  rJ   rK   r   r1  r  	__enter__)r   r,   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   im   )r+   r   r  st_moder   r   )r   r,   modeZnew_moder   r   r   
test_chmod'  s    


z_BasePathTest.test_chmodc             C   sZ   |  td }| }| | | ||jdA  | |j|j | | | d S )Nr   rE  )r+   r   r  r   r   rF  r   r^   )r   r,   str   r   r   	test_stat5  s    z_BasePathTest.test_statc             C   s*   |  td }| }| ||  d S )Nr   )r+   r   r  r^   lstat)r   r,   rI  r   r   r   
test_lstat>  s    z_BasePathTest.test_lstatc             C   s*   |  td }| }| ||  d S )Nr   )r+   r   r  r   rK  )r   r,   rI  r   r   r   test_lstat_nosymlinkD  s    z"_BasePathTest.test_lstat_nosymlinkz&the pwd module is needed for this testc             C   s`   |  td }| j}yt|j}W n" tk
rJ   | d|  Y nX | 	||
  d S )Nr   z4user %d doesn't have an entry in the system database)r+   r   r  st_uidpwdgetpwuidpw_nameKeyErrorr   r   r   )r   r,   Zuidr   r   r   r   r   I  s    
z_BasePathTest.test_ownerz&the grp module is needed for this testc             C   s`   |  td }| j}yt|j}W n" tk
rJ   | d|  Y nX | 	||
  d S )Nr   z5group %d doesn't have an entry in the system database)r+   r   r  st_gidgrpZgetgrgidZgr_namerR  r   r   r   )r   r,   gidr   r   r   r   r   T  s    
z_BasePathTest.test_groupc             C   s2   |  td }|  | |j | |j d S )Nr   )r+   r   unlinkr   r  )r   r,   r   r   r   test_unlink_  s    z_BasePathTest.test_unlinkc             C   sL   |  td }x| D ]}|  qW |  | |j | |j d S )Nr   )r+   r   r  rV  rmdirr   r  )r   r,   r\   r   r   r   
test_rmdire  s    z_BasePathTest.test_rmdirc             C   s   |  t}|d }| j}|d d }|| | | j| | |j td}|| | t|j| | |j d S )Nr   r   fileAAZfileAAA)	r+   r   r  st_sizerenamer   r   rel_joinrF   )r   r/   r,   sizer\   rZ   r   r   r   test_renamem  s    



z_BasePathTest.test_renamec             C   s   |  t}|d }| j}|d d }|| | | j| | |j tdd}|| | t|j| | |j d S )Nr   r   rZ  r   r   )	r+   r   r  r[  r   r   r   r]  rF   )r   r/   r,   r^  r\   rZ   r   r   r   test_replace|  s    




z_BasePathTest.test_replacec             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)rG  exist_ok)rb  )r+   r   rb   r
  touchrT   r  st_mtimest_mtime_nsrF   utimer3   r   rJ   r!  )r   r/   r,   rI  Z	old_mtimeZold_mtime_nsr   r   r   test_touch_common  s$    
z_BasePathTest.test_touch_commonc          	   C   sH   |  t}|d }|  |d}| |  d W d Q R X d S )Nr   r  s   this is file A)r+   r   rc  r   r   r  r  )r   r/   r,   r   r   r   r   test_touch_nochange  s
    
z!_BasePathTest.test_touch_nochangec          	   C   sx   |  t}|d }| |  |  | |  | |  | t}|  W d Q R X | 	|j
jtj d S )NZnewdirA)r+   r   rb   r
  r   rT   is_dirrJ   r!  r   r   r   EEXIST)r   r/   r,   r   r   r   r   
test_mkdir  s    
z_BasePathTest.test_mkdirc          	   C   s6  |  tdd}| |  | t}|  W d Q R X | |jj	t	j
 |jdd | |  | |  | t}|jdd W d Q R X | |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newdirCT)rz   ZnewdirDZnewdirEim  r   im  )r+   r   rb   r
  rJ   r!  r   r   r   r   r   rT   ri  rj  r  S_IMODErF  rF   r   rv   )r   r,   r   rG  r   r   r   test_mkdir_parents  s&    z _BasePathTest.test_mkdir_parentsc          	   C   s   |  td}| j}| |  | |  | t}|	  W d Q R X | 
|jjtj |j	dd | |  | 
| j| d S )Nr   T)rb  )r+   r   r  st_ctimerT   r
  ri  rJ   FileExistsErrorr   r   r   r   rj  )r   r,   st_ctime_firstr   r   r   r   test_mkdir_exist_ok  s    
z!_BasePathTest.test_mkdir_exist_okc          	   C   s   |  td}| |  | t}|  W d Q R X | |jj	t	j
 |d }|jdd | j}| |  | t}|jdd W d Q R X | |jj	t	j
 |jddd | |  | | j| d S )Nr   rl  T)rz   )rz   rb  )r+   r   rT   r
  rJ   rp  r   r   r   r   rj  r  ro  )r   r,   r   rq  r   r   r   test_mkdir_exist_ok_with_parent  s    
z-_BasePathTest.test_mkdir_exist_ok_with_parentc             C   s2   |  d jdd |  d jddd d S )Nr   T)rb  )rz   rb  )r+   r1  r   )r   r   r   r   test_mkdir_exist_ok_root  s    z&_BasePathTest.test_mkdir_exist_ok_rootc          	   C   s^   x.dD ]}|  |d }| sP qW | d | t |d d jdd W d Q R X d S )NZZYXWVUTSRQPONMLKJIHGFEDCBAz:\z&cannot find a drive that doesn't existZchildr   T)rz   )r+   ri  r   rJ   r!  r   )r   r   r,   r   r   r   test_mkdir_with_unknown_drive  s    

z+_BasePathTest.test_mkdir_with_unknown_drivec          	   C   s   |  tdd}| |  | t}|jdd W d Q R X | |jj	t	j
 | t}|jddd W d Q R X | |jj	t	j
 d S )Nr   r   T)rz   )rz   rb  )r+   r   rT   r
  rJ   rp  r   r   r   r   rj  )r   r,   r   r   r   r   test_mkdir_with_child_file  s    z(_BasePathTest.test_mkdir_with_child_filec          	   C   s   |  td}| |  | t}|  W d Q R X | |jj	t	j
 | t}|jdd W d Q R X | |jj	t	j
 d S )Nr   T)rb  )r+   r   rT   r
  rJ   rp  r   r   r   r   rj  )r   r,   r   r   r   r   test_mkdir_no_parents_file  s    z(_BasePathTest.test_mkdir_no_parents_filec          
      s   xt dD ]ȉ| td }| |  d fdd	}fddt dD t  |d	 d
 }y*td| |jddd W d Q R X W n$ t	k
r   | 
t|  Y nX | t|  | |  q
W d S )N    zdirCPC%d  c                s6   t | }  r&t| |  |  t| | d S )N)r3   poprF   r   add)r   rG  )concurrently_createdpatternr   r   my_mkdir  s
    
zE_BasePathTest.test_mkdir_concurrent_parent_creation.<locals>.my_mkdirc                s   g | ]}t  d |> @ qS )rP   )bool)r	   n)pattern_numr   r   r   $  s    zG_BasePathTest.test_mkdir_concurrent_parent_creation.<locals>.<listcomp>   Zdir1Zdir2zpathlib._normal_accessor.mkdirTF)rz   rb  )ry  )r   r+   r   rb   r
  r  r   Zpatchr   rp  r#  r3   ZassertNotInrT   )r   r,   r~  Zp12r   )r|  r}  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linkAAAAT)r   )r+   r   Z
symlink_tor   r  r^   rK  r3   rb   ri  rT   r{   r  )r   r/   targetlinkr   r   r   test_symlink_to0  s$    

z_BasePathTest.test_symlink_toc             C   s   |  t}| |d   | |d   | |d   | |d d   t r| |d   | |d   | |d   d S )Nr   r   znon-existingr	  r   r   r   )r+   r   rT   ri  rb   r   r   )r   r/   r   r   r   test_is_dirH  s    
z_BasePathTest.test_is_dirc             C   s   |  t}| |d   | |d   | |d   | |d d   t r| |d   | |d   | |d   d S )Nr   r   znon-existingr	  r   r   r   )r+   r   rT   is_filerb   r   r   )r   r/   r   r   r   test_is_fileS  s    
z_BasePathTest.test_is_filec             C   s   |  t}|  d}| |d   | |d   | |d   | |d d   | |  t r| |d   d S )Nr   r   r   znon-existingr	  r   )r+   r   rb   Zis_mountrT   r   r   )r   r/   Rr   r   r   test_is_mount^  s    

z_BasePathTest.test_is_mountc             C   s   |  t}| |d   | |d   | |d   | |d d   t r| |d   | |d   | |d   d S )Nr   r   znon-existingr	  r   r   r   )r+   r   rb   
is_symlinkr   r   rT   )r   r/   r   r   r   test_is_symlinkj  s    
z_BasePathTest.test_is_symlinkc             C   sZ   |  t}| |d   | |d   | |d   | |d d   d S )Nr   r   znon-existingr	  )r+   r   rb   is_fifo)r   r/   r   r   r   test_is_fifo_falseu  s
    
z _BasePathTest.test_is_fifo_falsemkfifozos.mkfifo() requiredc          
   C   s~   |  td}ytt| W n0 tk
rN } z| d|  W d d }~X Y nX | |  | 	|
  | 	|  d S )NZmyfifozos.mkfifo(): %s)r+   r   rF   r  r3   PermissionErrorr   rT   r  rb   	is_socketr  )r   r/   er   r   r   test_is_fifo_true|  s     z_BasePathTest.test_is_fifo_truec             C   sZ   |  t}| |d   | |d   | |d   | |d d   d S )Nr   r   znon-existingr	  )r+   r   rb   r  )r   r/   r   r   r   test_is_socket_false  s
    
z"_BasePathTest.test_is_socket_falseAF_UNIXzUnix sockets requiredc          
   C   s   |  td}ttjtj}| |j y|t| W nJ t	k
r } z,t
|tsbdt|krt| dt|  W d d }~X Y nX | |  | |  | |  d S )NZmysockzAF_UNIX path too longzcannot bind Unix socket: )r+   r   socketr  ZSOCK_STREAMr   closeZbindr3   r!  
isinstancer  r   rT   r  rb   r  r  )r   r/   Zsockr  r   r   r   test_is_socket_true  s    
$z!_BasePathTest.test_is_socket_truec             C   sZ   |  t}| |d   | |d   | |d   | |d d   d S )Nr   r   znon-existingr	  )r+   r   rb   is_block_device)r   r/   r   r   r   test_is_block_device_false  s
    
z(_BasePathTest.test_is_block_device_falsec             C   sZ   |  t}| |d   | |d   | |d   | |d d   d S )Nr   r   znon-existingr	  )r+   r   rb   is_char_device)r   r/   r   r   r   test_is_char_device_false  s
    
z'_BasePathTest.test_is_char_device_falsec             C   sJ   |  d}| s| d | |  | |  | |  d S )Nz	/dev/nullz/dev/null required)r+   r
  r   rT   r  rb   r  r  )r   r/   r   r   r   test_is_char_device_true  s    

z&_BasePathTest.test_is_char_device_truec             C   sT   |  td}xBtdtjd D ].}t||}t|}| | |  qW d S )Nr   r   rP   )	r+   r   r   r   r   r   r   r   r  )r   r,   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/binrP   ry   rx   )r+   r5   r4   )r   r/   r,   r\   r   r   r   test_parts_interning  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 d t
| X d S )NZlink0Zlink1Zlink2Zlink3)r+   r   r   rF   r   r   r1  r   r3   r   chdir)r   Zlink0_targetr/   r,   Zold_pathr   r   r   _check_complex_symlinks  sB    

z%_BasePathTest._check_complex_symlinksc             C   s   |  t d S )N)r  r   )r   r   r   r   test_complex_symlinks_absolute  s    z,_BasePathTest.test_complex_symlinks_absolutec             C   s   |  d d S )Nr   )r  )r   r   r   r   test_complex_symlinks_relative  s    z,_BasePathTest.test_complex_symlinks_relativec             C   s   |  tjdd d S )Nr   z..)r  rF   r   r   )r   r   r   r   &test_complex_symlinks_relative_dot_dot  s    z4_BasePathTest.test_complex_symlinks_relative_dot_dotN)T)Sr    r!   r"   __doc__r-   rF   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r   skip_unless_symlinkr   r$  r)  r+  r/  r0  r3  r9  r;  r<  rB  rD  rH  rJ  rL  rM  unittest
skipUnlessrO  r   rT  r   rW  rY  r_  r`  rg  rh  rk  rn  rr  rs  rt  only_ntru  rv  rw  r  r  r  r  
only_posixr  r  r  hasattrr  r  r  r  r  r  r  r   r  r  r  r  r  r   r   r   r   r     s   

	
	
	
<			)r   c               @   s*   e Zd ZejZdd Zdd Zdd ZdS )PathTestc             C   s0   |  d}| t|tjdkr$tjntj d S )Nr   r   )r+   r5   r6   rF   r   r'   r   r   )r   r,   r   r   r   r     s    

zPathTest.test_concrete_classc             C   s,   t jdkr| ttj n| ttj d S )Nr   )rF   r   rJ   r   r'   r   r   )r   r   r   r   test_unsupported_flavour  s    
z!PathTest.test_unsupported_flavourc          	   C   s2   |   }| td t|d W d Q R X d S )NzUnacceptable patternr   )r+   ZassertRaisesRegexrK   r{   r%  )r   r,   r   r   r   test_glob_empty_pattern  s    z PathTest.test_glob_empty_patternN)	r    r!   r"   r'   Pathr+   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e	j
d	d
 Zdd Zdd Zeeedddd Zeejdkddd ZdS )PosixPathTestT)r2  c         	   G   s2   | j | }| t t|| W d Q R X d S )N)r+   rJ   RuntimeErrorprintr1  )r   r2  r7   r   r   r   r   _check_symlink_loop  s    
z!PosixPathTest._check_symlink_loopc          	   C   s   t d}| t j| | t}|d d W d Q R X t td}| t	|j
d t d |d d W d Q R X t td}| t	|j
d d S )Nr   new_filer   i     other_new_filei  )rF   umaskr   r+   r   r   r  r   r   rm  rF  )r   old_maskr,   rI  r   r   r   test_open_mode  s    




zPosixPathTest.test_open_modec             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  i  r  r  i  Zmasked_new_filei  )rG  )rF   r  r   r+   r   rc  r  r   r   rm  rF  )r   r  r,   rI  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/insider6  r7  zlinkZ/../linkZZlinkZr  F)r2  zlinkU/insideZlinkUZlinkVzlinkW/../linkWZlinkW)rF   r   r   r  r   )r   r   r   r   test_resolve_loop4  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*)r+   r   r  r%  r   fs_is_case_insensitiver   )r   r/   r,   r-  r.  r   r   r   	test_globI  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*)r+   r   r  r*  r   r  r   )r   r/   r,   r-  r.  r   r   r   
test_rglobQ  s    
zPosixPathTest.test_rglobgetpwallz%pwd module does not expose getpwall()c          	   C   s  | j }td dd l}|t }|j}|j	dp:d}x8|
 D ]$}|j}|j	d}||krF|rFP qFW |}|}|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 Q R X d S )NrO  r   r   z~/Documentsr   z
/Documentsz../~z/~r   z~fakeuser/DocumentsHOMEZ	Documentsz/tmpz/tmp/Documents)r+   r   import_modulerO  rP  rF   getuidrQ  pw_dirrstripr  EnvironmentVarGuardrz  r   r   rJ   r  )r   r/   rO  ZpwdentZusernameuserhomeZ	othernameZ	otherhomep1p2p3p4p5p6Zp7envr   r   r   test_expanduserY  sJ    
zPosixPathTest.test_expanduserdarwinz1Bad file descriptor in /dev/fd affects only macOSc          
   C   s   y|t tdddd  }|s,| d xL|D ]D}|  |  |  |  |	  |
  |  |  q2W W n: tk
r } z|jtjkr| d  W d d }~X Y nX d S )Nz/dev/fdr,  rx   z.no file descriptors - issue was not reproducedz Bad file descriptor not handled.)r{   r'   r  r*  r   r
  ri  r  r  r  r  r  r  r!  r   ZEBADFZfail)r   Zfile_descriptorsr   r  r   r   r   test_handling_bad_descriptor  s"    


z*PosixPathTest.test_handling_bad_descriptorN)r    r!   r"   r'   r   r+   r  r  r  r   r  r  r  r  r  r  r  rO  r  skipIfsysplatformr  r   r   r   r   r    s   .r  c               @   s*   e Zd ZejZdd Zdd Zdd ZdS )WindowsPathTestc             C   s0   | j }|t}| t|d|tdh d S )Nr  r   )r+   r   r   r  r%  )r   r/   r,   r   r   r   r    s    zWindowsPathTest.test_globc             C   s2   | j }|td}| t|d|tdh d S )Nr   r  zdirC/dirD/fileD)r+   r   r   r  r*  )r   r/   r,   r   r   r   r    s    
zWindowsPathTest.test_rglobc          
      sb  j  t H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  dd< |  W d Q R X d S )Nr  ZUSERPROFILEZHOMEPATHZ	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 )Nr  zC:/Users/alice/My Documentsr  zC:/Users/bob/My Documents)rz  r   r   rJ   rR  r   )	r/   r  r  r  r  r  r  r  r   r   r   r     s    





z.WindowsPathTest.test_expanduser.<locals>.checkzC:\Users\alicezC:\zUsers\alice)r+   r   r  rz  rJ   r  r   r   )r   r   r   )	r/   r  r  r  r  r  r  r  r   r   r    s@    zWindowsPathTest.test_expanduserN)	r    r!   r"   r'   r   r+   r  r  r  r   r   r   r   r    s   r  __main__)/Zcollections.abcr'  r  rF   r  r   r'   r   r  r  r:  r  r   Ztestr   Ztest.supportr   r   rT  rO  ImportErrorobjectr   ZTestCaser#   r(   r*   r   r   r   r   realpathr   r   r]  r  r   r  r  r   r   r   r  r  r  r    mainr   r   r   r   <module>   sp   )$B   TL   8      M E
