3
s«Y]Ya ã               @   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	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jeƒZdd„ Zdd„ Z dd„ Z!e!ƒ Z!e	j"ej#dkdƒZ$e	j"ej#dkdƒZ%e	j"e!e!ƒ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	j.ƒ  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 ƒƒ}| j||ƒ ˆ r`|‡ fdd„|D ƒƒ}| j||ƒ d S )Nc                s   g | ]}|j d ˆ ƒ‘qS )ú/)Úreplace)Ú.0Úx)Úsep© ú"lib/python3.6/test/test_pathlib.pyú
<listcomp>   s    z7_BaseFlavourTest._check_parse_parts.<locals>.<listcomp>c                s   g | ]}|j d ˆ ƒ‘qS )r   )r   )r	   r
   )Úaltsepr   r   r      s    )ÚflavourZparse_partsr   r   ÚassertEqual)ÚselfÚargÚexpectedÚfZ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_partsB   s    z!PosixFlavourTest.test_parse_partsc             C   sÜ   | j j}| 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ƒ d S )Nr   r   úa/búa/b/z/ar   z/a/bz/a/b/z//aú//z///az///a/búc:/a/bú\/a/bú\a\b)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   r(   )r   r   r)   )r   Ú	splitrootr   )r   r   r   r   r   Útest_splitrootN   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#   f   s.    zNTFlavourTest.test_parse_partsc             C   s  | j j}| 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#ƒ d S )$Nr   r   úa\bz\ar.   z\a\bzc:a\búc:zc:\a\bz\\az\\\a/búa/bzc:\\azc:\\\a/bú\\a\bz\\a\b\z	\\a\b\c\dúc\dz\\\a\b)r   r   r   )r   r   r   )r   r   r/   )r   r.   r   )r   r.   r/   )r0   r   r/   )r0   r.   r/   )r   r.   r   )r   r.   r1   )r0   r.   r   )r0   r.   r1   )r2   r.   r   )r2   r.   r   )r2   r.   r3   )r   r.   r/   )r   r.   r   )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-   c   s   "r-   c               @   s.  e Zd ZdRdSdTdUdVdWdXdYdZd[g
d\d]d^d_d`dag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;d<„ Zd=d>„ Zd?d@„ ZdAdB„ ZdCdD„ ZdEdF„ ZdGdH„ ZdIdJ„ ZdKdL„ Z dMdN„ Z!dOdP„ Z"dQS )bÚ_BasePurePathTestr   r   úa/úb/úa/b/úa//búa//b//r   ú/b/cr   ú///b//cúd/ú/ar   úc/dúb/c/dú/b/c/d)za/bz/b/c/dc             C   s*   | j 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ƒ}| j||ƒ |dddƒ |dddƒ |dƒ |dƒ |tdƒƒ | j||dƒƒ|dƒƒ | j||dƒdƒ|dƒƒ | j||dƒ|dƒƒ|dƒƒ | j||dƒ|dƒ|dƒƒ|tdƒƒƒ d S )Nr   r   r   z/aza/b/cz/a/b/cza/b)rA   ÚassertIsInstancer   r   )r   ÚPrB   r   r   r   Útest_constructor_common¾   s    z)_BasePurePathTest.test_constructor_commonc                s`   G dd„ dt ƒ‰ | j}|‡ fdd„|D ƒŽ }| j|||Ž ƒ x|jD ]}| j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   rG   c             3   s   | ]}ˆ |ƒV  qd S )Nr   )r	   r
   )rG   r   r   ú	<genexpr>Ó   s    z8_BasePurePathTest._check_str_subclass.<locals>.<genexpr>)ÚstrrA   r   ÚpartsÚassertIsÚtype)r   ÚargsrE   rB   Úpartr   )rG   r   Ú_check_str_subclassÌ   s    z%_BasePurePathTest._check_str_subclassc             C   s6   | j dƒ | j dƒ | j dƒ | j dƒ | j dƒ d S )Nr   r   r   za/b.txtz/a/b.txt)rO   )r   r   r   r   Útest_str_subclass_commonØ   s
    



z*_BasePurePathTest.test_str_subclass_commonc             C   s”   | j }|dƒ}|jdƒ}| j||dƒƒ | jt|ƒt|ƒƒ |jddƒ}| j||dƒƒ |j|dƒƒ}| j||dƒƒ |jdƒ}| j||dƒƒ d S )Nza/br   za/b/cr   za/b/c/dz/c)rA   Újoinpathr   rK   rL   )r   rE   rB   Úppr   r   r   Útest_join_commonß   s    

z"_BasePurePathTest.test_join_commonc             C   sÂ   | j }|dƒ}|d }| j||dƒƒ | jt|ƒt|ƒƒ |d }| j||dƒƒ |d d }| j||dƒƒ d| d }| j||dƒƒ ||dƒ }| j||dƒƒ |d }| j||dƒƒ d S )	Nza/br   za/b/czc/dza/b/c/dr   zc/a/b/dz/c)rA   r   rK   rL   )r   rE   rB   rR   r   r   r   Útest_div_commonì   s    z!_BasePurePathTest.test_div_commonc             C   s(   | j |Ž }| jt|ƒ|jd| jƒƒ d S )Nr   )rA   r   rI   r   r   )r   r   rM   rB   r   r   r   Ú
_check_strþ   s    
z_BasePurePathTest._check_strc             C   s,   xd	D ]}| j ||fƒ qW | j dd
ƒ d S )Nr   úa/búa/b/cr   ú/a/bú/a/b/cr   r   )r   rV   rW   r   rX   rY   )r   )rU   )r   Úpathstrr   r   r   Útest_str_common  s    
z!_BasePurePathTest.test_str_commonc             C   s,   | j }x dD ]}| j||ƒjƒ |ƒ qW d S )Nr   úa/búa/b/cr   ú/a/bú/a/b/c)r   r\   r]   r   r^   r_   )rA   r   Úas_posix)r   rE   rZ   r   r   r   Útest_as_posix_common
  s    
z&_BasePurePathTest.test_as_posix_commonc             C   s2   t j| jƒ}| j}| jt|dƒƒd| d ƒ d S )Nza/bó   aó   b)ÚosÚfsencoder   rA   r   Úbytes)r   r   rE   r   r   r   Útest_as_bytes_common  s    z&_BasePurePathTest.test_as_bytes_commonc             C   sL   | j }| jtƒ |dƒjƒ  W d Q R X | jtƒ |ƒ jƒ  W d Q R X d S )Nr   )rA   ÚassertRaisesÚ
ValueErrorÚas_uri)r   rE   r   r   r   Útest_as_uri_common  s
    z$_BasePurePathTest.test_as_uri_commonc             C   s´   x®d
D ]¦}| j |ƒ}|jj}t|ƒ}| j|j|d ƒ|ƒ | j|jdƒ|ƒ |t|ƒd	 d… }| jt	|ƒ|j
ƒ ƒ t	|tjƒ}| j|j|jƒ | j||ƒ | jt|ƒ|ƒ qW d S )Nr   úa/búa/b/cr   ú/a/bú/a/b/cú(ú)é   )r   rl   rm   r   rn   ro   éÿÿÿÿ)rA   Ú	__class__r   ÚreprÚ
assertTrueÚ
startswithÚendswithÚlenr   Úevalr`   r,   Ú__dict__rK   )r   rZ   rB   ZclsnameÚrÚinnerÚqr   r   r   Útest_repr_common  s    

z"_BasePurePathTest.test_repr_commonc             C   s¾   | j }| j|dƒ|dƒƒ | j|dƒ|ddƒƒ | j|dƒ|dƒƒ | j|dƒ|dƒƒ | j|dƒ|ƒ ƒ | j|dƒ|dƒƒ | j|ƒ |dƒƒ | j|ƒ dƒ | j|ƒ i ƒ | j|ƒ tƒ d S )Nza/br   r   z/a/br   r   )rA   r   ÚassertNotEqualÚint)r   rE   r   r   r   Útest_eq_common,  s    z _BasePurePathTest.test_eq_commonc             C   s&  | j }| jt|dƒjdƒ | jt|dƒjdƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|d	ƒjdƒƒ | j|d
ƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|d
ƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒj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)rA   rh   ri   Úmatchrv   ÚassertFalse)r   rE   r   r   r   Útest_match_common9  s8    z#_BasePurePathTest.test_match_commonc          	      sà   ‡ fdd„}ˆ j }|dƒ}|dƒ}|dƒ}|dƒ}|||ƒ |||ƒ |||ƒ |||ƒ |||ƒ ˆ j }|dƒ}|dƒ}|d	ƒ}|d
ƒ}|||ƒ |||ƒ |||ƒ |||ƒ |||ƒ ˆ jtƒ |ƒ i k  W d Q R X d S )Nc                s   ˆ j | |ƒ ˆ j|| ƒ d S )N)Ú
assertLessZassertGreater)r   r   )r   r   r   r†   ^  s    z:_BasePurePathTest.test_ordering_common.<locals>.assertLessr   za/bÚabcr   z/az/a/bz/abcz/b)rA   rh   Ú	TypeError)r   r†   rE   r   r   r   r   r   )r   r   Útest_ordering_common\  s.    









z&_BasePurePathTest.test_ordering_commonc             C   sX   | j }| j}|dƒ}|j}| j|dƒ | j||jƒ |dƒ}|j}| j||ddfƒ d S )Nza/br   r   z/a/b)r   r   )r   rA   rJ   r   rK   )r   r   rE   rB   rJ   r   r   r   Útest_parts_commonx  s    z#_BasePurePathTest.test_parts_commonc             C   s4   | j }|dƒ}| j|jƒ dƒ | jtj|ƒdƒ d S )Núa/b)r‹   )r‹   )rA   rU   Ú
__fspath__rd   Úfspath)r   rE   rB   r   r   r   Útest_fspath_common†  s    z$_BasePurePathTest.test_fspath_commonc                sÌ   xÆˆ j jƒ D ]¸\}}|jdˆ jƒ}|jˆ jdƒ}||krZ|‡ fdd„|D ƒ }|j|fƒ ˆ j|ƒ}x^|D ]V}ˆ j|Ž }ˆ j||dj|ƒƒ ˆ jt|ƒt|ƒƒ ˆ jt	|ƒ|ƒ ˆ j|j
ƒ |ƒ qjW qW d S )Nr   c                s"   g | ]}t ‡ fd d„|D ƒƒ‘qS )c             3   s   | ]}|j d ˆ jƒV  qdS )r   N)r   r   )r	   rN   )r   r   r   rH   ’  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   ÚappendrA   r   ÚformatÚhashrI   r`   )r   ÚkZtuplesZcanonÚposixZpcanonr   rB   r   )r   r   Útest_equivalencesŒ  s    




z#_BasePurePathTest.test_equivalencesc             C   s¾   | j }|dƒ}| j|j|dƒƒ | j|jj|dƒƒ | j|jjj|ƒ ƒ | j|jjjj|ƒ ƒ |dƒ}| j|j|dƒƒ | j|jj|dƒƒ | j|jjj|dƒƒ | j|jjjj|dƒƒ d S )Nza/b/cza/br   z/a/b/cz/a/bz/ar   )rA   r   Úparent)r   rE   rB   r   r   r   Útest_parent_commonž  s    z$_BasePurePathTest.test_parent_commonc             C   sz  | j }|dƒ}|j}| jt|ƒdƒ | j|d |dƒƒ | j|d |dƒƒ | j|d |dƒƒ | jt|ƒ|dƒ|dƒ|dƒgƒ | jtƒ |d  W d Q R X | jtƒ |d  W d Q R X | jtƒ ||d< W d Q R X |d	ƒ}|j}| jt|ƒdƒ | j|d |d
ƒƒ | j|d |dƒƒ | j|d |dƒƒ | jt|ƒ|d
ƒ|dƒ|dƒgƒ | jtƒ |d  W d Q R X d S )Nza/b/cé   r   za/brr   r   é   r   z/a/b/cz/a/bz/ar   rs   )rA   Úparentsr   ry   Úlistrh   Ú
IndexErrorrˆ   )r   rE   rB   Úparr   r   r   Útest_parents_common­  s.    ""z%_BasePurePathTest.test_parents_commonc             C   s@   | j }| j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ d S )Nza/br   z/a/b)rA   r   Údrive)r   rE   r   r   r   Útest_drive_commonÈ  s    z#_BasePurePathTest.test_drive_commonc             C   sX   | j }| j}| j|dƒjdƒ | j|dƒjdƒ | j|dƒj|ƒ | j|dƒj|ƒ d S )Nr   za/br   z/a/b)rA   r   r   Úroot)r   rE   r   r   r   r   Útest_root_commonÎ  s    z"_BasePurePathTest.test_root_commonc             C   sX   | j }| j}| j|dƒjdƒ | j|dƒjdƒ | j|dƒj|ƒ | j|dƒj|ƒ d S )Nr   za/br   z/a/b)rA   r   r   Úanchor)r   rE   r   r   r   r   Útest_anchor_commonÖ  s    z$_BasePurePathTest.test_anchor_commonc             C   sš   | j }| j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjd	ƒ | j|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)rA   r   Úname)r   rE   r   r   r   Útest_name_commonÞ  s    z"_BasePurePathTest.test_name_commonc             C   s<  | j }| j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjd	ƒ | j|d
ƒjd	ƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|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.)rA   r   Úsuffix)r   rE   r   r   r   Útest_suffix_commoné  s$    z$_BasePurePathTest.test_suffix_commonc             C   s:  | j }| j|dƒjg ƒ | j|dƒjg ƒ | j|dƒjg ƒ | j|dƒjg ƒ | j|dƒjg ƒ | j|dƒjg ƒ | j|dƒjdgƒ | j|d	ƒjdgƒ | j|d
ƒjg ƒ | j|dƒjg ƒ | j|dƒjdgƒ | j|dƒjdgƒ | j|dƒjddgƒ | j|dƒjddgƒ | j|dƒjg ƒ | j|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.)rA   r   Úsuffixes)r   rE   r   r   r   Útest_suffixes_commoný  s"    z&_BasePurePathTest.test_suffixes_commonc             C   s¾   | j }| j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjd	ƒ | j|d
ƒjdƒ | j|dƒjdƒ | j|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.)rA   r   Ústem)r   rE   r   r   r   Útest_stem_common  s    z"_BasePurePathTest.test_stem_commonc             C   s2  | j }| j|dƒjdƒ|dƒƒ | j|dƒjdƒ|dƒƒ | j|dƒjdƒ|dƒƒ | j|dƒjdƒ|dƒƒ | j|dƒjdƒ|dƒƒ | j|d	ƒjdƒ|dƒƒ | jt|d
ƒjdƒ | jt|dƒjdƒ | jt|dƒjdƒ | jt|dƒjd
ƒ | jt|dƒjdƒ | jt|dƒjdƒ | j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)rA   r   Ú	with_namerh   ri   )r   rE   r   r   r   Útest_with_name_common  s    z'_BasePurePathTest.test_with_name_commonc             C   s‚  | j }| j|dƒjdƒ|dƒƒ | j|dƒjdƒ|dƒƒ | j|dƒjdƒ|dƒƒ | j|dƒjdƒ|dƒƒ | j|dƒjdƒ|dƒƒ | j|dƒjdƒ|dƒƒ | jt|dƒjdƒ | jt|d	ƒjdƒ | jt|d
ƒjdƒ | jt|dƒjdƒ | jt|dƒjd
ƒ | jt|dƒjd	ƒ | jt|dƒjdƒ | jt|dƒjdƒ | jt|dƒjdƒ | jt|dƒjdƒ | jt|dƒjdƒ 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/.)rA   r   Úwith_suffixrh   ri   )r   rE   r   r   r   Útest_with_suffix_common.  s$    z)_BasePurePathTest.test_with_suffix_commonc             C   sR  | j }|dƒ}| jt|jƒ | jt|jdƒ | j|j|ƒ ƒ|dƒƒ | j|jdƒ|dƒƒ | j|j|dƒƒ|dƒƒ | j|jdƒ|dƒƒ | j|jdƒ|dƒƒ | j|j|dƒƒ|ƒ ƒ | j|jdƒ|ƒ ƒ | j|jddƒ|ƒ ƒ | jt|j|dƒƒ | jt|j|dƒƒ | jt|j|d	ƒƒ | jt|j|d
ƒƒ |dƒ}| j|j|dƒƒ|dƒƒ | j|jdƒ|dƒƒ | j|j|d
ƒƒ|dƒƒ | j|jd
ƒ|dƒƒ | j|jdƒ|dƒƒ | j|j|dƒƒ|ƒ ƒ | j|jdƒ|ƒ ƒ | jt|j|dƒƒ | jt|j|dƒƒ | jt|j|dƒƒ | jt|j|ƒ ƒ | jt|jdƒ | jt|j|dƒƒ d S )Nza/brb   r   r   r   za/r   za/b/cza/cz/az/a/br   z/a/z/cz/a/b/cz/a/c)rA   rh   rˆ   Úrelative_tor   ri   )r   rE   rB   r   r   r   Útest_relative_to_commonE  s<    z)_BasePurePathTest.test_relative_to_commonc             C   s†   | j }|dƒ}xrtdtjd ƒD ]^}tj||ƒ}tj|ƒ}| j|j|jƒ | j||ƒ | jt	|ƒt	|ƒƒ | jt
|ƒt
|ƒƒ q W d S )Nz/a/br   rr   )rA   ÚrangeÚpickleÚHIGHEST_PROTOCOLÚdumpsÚloadsrK   rt   r   r•   rI   )r   rE   rB   ÚprotoÚdumpedrR   r   r   r   Útest_pickling_commonh  s    
z&_BasePurePathTest.test_pickling_commonN)r   r   )r5   r   )r   r6   )r5   r6   )r7   )r8   )r9   )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‘   rC   rF   rO   rP   rS   rT   rU   r[   ra   rg   rk   r   r‚   r…   r‰   rŠ   rŽ   r˜   rš   r¡   r£   r¥   r§   r©   r«   r­   r¯   r±   r´   r¶   r¾   r   r   r   r   r4   ¥   sJ   ##r4   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 }| j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ d S )Nz/a/br   z///a/bz//a/bz//)rA   r   r¤   )r   rE   r   r   r   Ú	test_rootw  s    zPurePosixPathTest.test_rootc             C   sF   | j }| j|dƒ|dƒƒ | j|dƒ|dƒƒ | j|dƒ|dƒƒ d S )Nza/bzA/bz/az///az//a)rA   r€   r   )r   rE   r   r   r   Útest_eq~  s    zPurePosixPathTest.test_eqc             C   sF   | j }| j|dƒjƒ dƒ | j|dƒjƒ dƒ | j|dƒjƒ dƒ d S )Nr   zfile:///z/a/b.czfile:///a/b.cz/a/b%#czfile:///a/b%25%23c)rA   r   rj   )r   rE   r   r   r   Útest_as_uri„  s    zPurePosixPathTest.test_as_uric             C   sf   ddl m} | j}ytjdƒ W n tk
r>   | jdƒ Y nX | j|dƒjƒ d|tj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Ã   rA   rd   re   ÚUnicodeEncodeErrorÚskipTestr   rj   )r   rÃ   rE   r   r   r   Útest_as_uri_non_asciiŠ  s    z'PurePosixPathTest.test_as_uri_non_asciic             C   s   | j }| j|dƒjdƒƒ d S )NzA.pyza.PY)rA   r„   rƒ   )r   rE   r   r   r   Ú
test_match”  s    zPurePosixPathTest.test_matchc             C   s˜   | j }| j|ƒ jƒ ƒ | j|dƒjƒ ƒ | j|dƒjƒ ƒ | j|dƒjƒ ƒ | j|dƒjƒ ƒ | j|dƒjƒ ƒ | j|dƒjƒ ƒ | j|dƒjƒ ƒ d S )Nr   za/b/r   z/az/a/b/z//az//a/b)rA   r„   Úis_absoluterv   )r   rE   r   r   r   Útest_is_absolute˜  s    z"PurePosixPathTest.test_is_absolutec             C   sZ   | j }| jd|dƒjƒ ƒ | jd|dƒjƒ ƒ | jd|dƒjƒ ƒ | jd|dƒjƒ ƒ d S )NFr   r   z/foo/barz/dev/con/PRN/NUL)rA   rK   Úis_reserved)r   rE   r   r   r   Útest_is_reserved£  s
    z"PurePosixPathTest.test_is_reservedc             C   sh   | j }|dƒ}|jdƒ}| j||dƒƒ |dƒjdƒ}| j||dƒƒ |dƒjdƒ}| j||dƒƒ d S )Nz//ar   z//a/bz/az//cz/c)rA   rQ   r   )r   rE   rB   rR   r   r   r   Ú	test_joinª  s    
zPurePosixPathTest.test_joinc             C   sb   | j }|dƒ}|d }| j||dƒƒ |dƒd }| j||dƒƒ |dƒd }| j||dƒƒ d S )Nz//ar   z//a/bz/az//cz/c)rA   r   )r   rE   rB   rR   r   r   r   Útest_div´  s    zPurePosixPathTest.test_divN)r   r    r!   r,   ÚPurePosixPathrA   rÀ   rÁ   rÂ   rÇ   rÈ   rÊ   rÌ   rÍ   rÎ   r   r   r   r   r¿   t  s   

r¿   c            	   @   sþ   e Zd ZejZejjƒ Zej	d<d=d>gd?d@dAdBdCgdDgdEdFg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 )GÚPureWindowsPathTestúc:r   úa/r   úc:/ú/aú/zú//x/yú//a/br   ú//a/b/)zc:azc:/az//a/b/z//a/b/cc             C   s†   | j dƒ}| jt|ƒdƒ | j dƒ}| jt|ƒdƒ | j dƒ}| jt|ƒdƒ | j dƒ}| jt|ƒdƒ | j d	ƒ}| j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)rA   r   rI   )r   rB   r   r   r   Útest_strÐ  s    




zPureWindowsPathTest.test_strc             C   s^   | j dƒ | j dƒ | j dƒ | j dƒ | j dƒ | j dƒ | j dƒ | j dƒ | j 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)rO   )r   r   r   r   Útest_str_subclassÜ  s    







z%PureWindowsPathTest.test_str_subclassc             C   s®   | j }| j|dƒ|dƒƒ | j|dƒ|dddƒƒ | j|dƒ|dƒƒ | j|dƒ|dƒƒ | j|dƒ|dƒƒ | j|dƒ|d	ƒƒ | j|d
ƒ|dƒƒ | j|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)rA   r   r€   )r   rE   r   r   r   rÁ   ç  s    zPureWindowsPathTest.test_eqc             C   sÚ   | j }| jtƒ |dƒjƒ  W d Q R X | jtƒ |dƒjƒ  W d Q R X | j|dƒjƒ dƒ | j|dƒjƒ dƒ | j|dƒjƒ dƒ | j|d	ƒjƒ d
ƒ | j|dƒjƒ dƒ | j|dƒjƒ dƒ | j|dƒjƒ 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)rA   rh   ri   rj   r   )r   rE   r   r   r   rÂ   ó  s    zPureWindowsPathTest.test_as_uric             C   sr  | j }| j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|d	ƒjdƒƒ | j|d	ƒjd
ƒƒ | j|dƒjd
ƒƒ | j|dƒjd
ƒƒ | j|dƒjdƒƒ | j|dƒjdƒƒ | j|dƒj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)rA   rv   rƒ   r„   )r   rE   r   r   r   r…     s&    z%PureWindowsPathTest.test_match_commonc                s‚   ‡ fdd„}ˆ j }|dƒ}|dƒ}|||ƒ ˆ j||k ƒ ˆ j||kƒ |dƒ}|dƒ}|||ƒ ˆ j||k ƒ ˆ j||kƒ d S )Nc                s   ˆ j | |ƒ ˆ j|| ƒ 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)rA   r„   )r   rÜ   rE   rB   r~   r   )r   r   r‰     s    

z(PureWindowsPathTest.test_ordering_commonc             C   sX   | j }|dƒ}|j}| j|dƒ |dƒ}|j}| j|dƒ |dƒ}|j}| j|dƒ d S )Nzc:a/búc:r   r   zc:/a/búc:\z	//a/b/c/dú\\a\b\r   r   )rÝ   r   r   )rÞ   r   r   )rß   r   r   )rA   rJ   r   )r   rE   rB   rJ   r   r   r   Ú
test_parts,  s    zPureWindowsPathTest.test_partsc             C   s  | j }|dƒ}| j|j|dƒƒ | j|jj|dƒƒ | j|jjj|dƒƒ | j|jjjj|dƒƒ |dƒ}| j|j|dƒƒ | j|jj|dƒƒ | j|jjj|dƒƒ | j|jjjj|dƒƒ |d	ƒ}| j|j|d
ƒƒ | j|jj|dƒƒ | j|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)rA   r   r™   )r   rE   rB   r   r   r   Útest_parent8  s    zPureWindowsPathTest.test_parentc             C   sŠ  | j }|dƒ}|j}| jt|ƒdƒ | j|d |dƒƒ | j|d |dƒƒ | jt|ƒ|dƒ|dƒgƒ | jtƒ |d  W d Q R X |dƒ}|j}| jt|ƒdƒ | j|d |dƒƒ | j|d |d	ƒƒ | jt|ƒ|dƒ|d	ƒgƒ | jtƒ |d  W d Q R X |d
ƒ}|j}| jt|ƒdƒ | j|d |dƒƒ | j|d |dƒƒ | jt|ƒ|dƒ|dƒgƒ | jtƒ |d  W d Q R X d S )Nzz:a/b/rœ   r   zz:arr   zz:zz:/a/b/zz:/azz:/z	//a/b/c/dz//a/b/cz//a/b)rA   r   r   ry   rž   rh   rŸ   )r   rE   rB   r    r   r   r   Útest_parentsJ  s2    z PureWindowsPathTest.test_parentsc             C   sˆ   | j }| j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|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)rA   r   r¢   )r   rE   r   r   r   Ú
test_drivef  s    zPureWindowsPathTest.test_drivec             C   sˆ   | j }| j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|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)rA   r   r¤   )r   rE   r   r   r   rÀ   p  s    zPureWindowsPathTest.test_rootc             C   sˆ   | j }| j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|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)rA   r   r¦   )r   rE   r   r   r   Útest_anchorz  s    zPureWindowsPathTest.test_anchorc             C   sš   | j }| j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|d	ƒjdƒ | j|d
ƒjdƒ | j|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)rA   r   r¨   )r   rE   r   r   r   Ú	test_name„  s    zPureWindowsPathTest.test_namec             C   s*  | j }| j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|d	ƒjdƒ | j|d
ƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|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)rA   r   rª   )r   rE   r   r   r   Útest_suffix  s"    zPureWindowsPathTest.test_suffixc             C   s:  | j }| j|dƒjg ƒ | j|dƒjg ƒ | j|dƒjg ƒ | j|dƒjg ƒ | j|dƒjdgƒ | j|dƒjdgƒ | j|dƒjg ƒ | j|d	ƒjg ƒ | j|d
ƒjdgƒ | j|dƒjdgƒ | j|dƒjddgƒ | j|dƒjddgƒ | j|dƒjg ƒ | j|dƒjg ƒ | j|dƒjg ƒ | j|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.)rA   r   r¬   )r   rE   r   r   r   Útest_suffixes¢  s"    z!PureWindowsPathTest.test_suffixesc             C   s¾   | j }| j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|d	ƒjdƒ | j|d
ƒjdƒ | j|dƒjdƒ | j|dƒjdƒ | j|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.)rA   r   r®   )r   rE   r   r   r   Ú	test_stemµ  s    zPureWindowsPathTest.test_stemc             C   sþ   | j }| j|dƒjdƒ|dƒƒ | j|dƒjdƒ|dƒƒ | j|dƒjdƒ|dƒƒ | j|dƒjdƒ|dƒƒ | jt|dƒjdƒ | jt|d	ƒjdƒ | jt|d
ƒjdƒ | jt|dƒjdƒ | jt|dƒjdƒ | jt|dƒjdƒ | j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)rA   r   r°   rh   ri   )r   rE   r   r   r   Útest_with_nameÃ  s    z"PureWindowsPathTest.test_with_namec             C   sž  | j }| j|dƒjdƒ|dƒƒ | j|dƒjdƒ|dƒƒ | j|dƒjdƒ|dƒƒ | j|dƒjdƒ|dƒƒ | jt|dƒjdƒ | jt|d	ƒjdƒ | jt|d
ƒjdƒ | jt|dƒjdƒ | jt|dƒjdƒ | jt|dƒjd
ƒ | jt|dƒjdƒ | jt|dƒjdƒ | jt|dƒjdƒ | jt|dƒjdƒ | jt|dƒjdƒ | jt|dƒjdƒ | jt|dƒjdƒ | jt|dƒjdƒ | j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)rA   r   r³   rh   ri   )r   rE   r   r   r   Útest_with_suffixÑ  s(    z$PureWindowsPathTest.test_with_suffixc             C   s0  | j }|dƒ}| j|j|dƒƒ|dƒƒ | j|jdƒ|dƒƒ | j|j|dƒƒ|dƒƒ | j|jdƒ|dƒƒ | j|jdƒ|dƒƒ | j|j|dƒƒ|ƒ ƒ | j|jdƒ|ƒ ƒ | jt|j|ƒ ƒ | jt|jdƒ | jt|j|d	ƒƒ | jt|j|d
ƒƒ | jt|j|dƒƒ | jt|j|dƒƒ | jt|j|dƒƒ | jt|j|dƒƒ | jt|j|dƒƒ |dƒ}| j|j|dƒƒ|dƒƒ | j|jdƒ|dƒƒ | jt|j|dƒƒƒdƒ | jt|jdƒƒdƒ | j|j|dƒƒ|dƒƒ | j|jdƒ|dƒƒ | j|j|dƒƒ|dƒƒ | j|jdƒ|dƒƒ | j|jdƒ|dƒƒ | j|j|dƒƒ|ƒ ƒ | j|jdƒ|ƒ ƒ | jt|j|dƒƒ | jt|j|dƒƒ | jt|j|dƒƒ | jt|j|dƒƒ | jt|j|d	ƒƒ | jt|j|dƒƒ | jt|j|d
ƒƒ | jt|j|dƒƒ | jt|j|dƒƒ |dƒ}| j|j|dƒƒ|dƒƒ | j|jdƒ|dƒƒ | j|jdƒ|dƒƒ | j|j|d ƒƒ|dƒƒ | j|jd ƒ|dƒƒ | j|jd!ƒ|dƒƒ | j|j|d"ƒƒ|ƒ ƒ | j|jd"ƒ|ƒ ƒ | jt|j|d#ƒƒ | jt|j|d$ƒƒ | jt|j|d%ƒƒ | j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)rA   r   rµ   rh   ri   rI   )r   rE   rB   r   r   r   Útest_relative_toé  sh    z$PureWindowsPathTest.test_relative_toc             C   s(  | j }| j|ƒ jƒ ƒ | j|dƒjƒ ƒ | j|dƒjƒ ƒ | j|dƒjƒ ƒ | j|dƒjƒ ƒ | j|dƒjƒ ƒ | j|dƒjƒ ƒ | j|dƒjƒ ƒ | j|dƒjƒ ƒ | j|d	ƒjƒ ƒ | j|d
ƒjƒ ƒ | j|dƒjƒ ƒ | j|dƒjƒ ƒ | j|dƒjƒ ƒ | j|dƒjƒ ƒ | j|dƒjƒ ƒ 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)rA   r„   rÉ   rv   )r   rE   r   r   r   rÊ   #  s"    z$PureWindowsPathTest.test_is_absolutec             C   sÈ   | j }|dƒ}|jdƒ}| j||dƒƒ |jdƒ}| j||dƒƒ |jdƒ}| j||dƒƒ |jdƒ}| j||dƒƒ |jdƒ}| j||dƒƒ |jd	ƒ}| j||dƒƒ |jd
ƒ}| j||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)rA   rQ   r   )r   rE   rB   rR   r   r   r   rÍ   8  s     






zPureWindowsPathTest.test_joinc             C   sþ   | j }|dƒ}| j|d |dƒƒ | j|d d |dƒƒ | j|d |dƒƒ | j|d d |dƒƒ | j|d	 |d	ƒƒ | j|d
 d |d	ƒƒ | j|d |dƒƒ | j|d
 d |dƒƒ | j|d |dƒƒ | j|d |dƒƒ | j|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)rA   r   )r   rE   rB   r   r   r   rÎ   N  s    zPureWindowsPathTest.test_divc             C   s"  | j }| jd|dƒjƒ ƒ | jd|dƒjƒ ƒ | jd|dƒjƒ ƒ | jd|dƒjƒ ƒ | jd|dƒjƒ ƒ | jd|dƒjƒ ƒ | jd|d	ƒjƒ ƒ | jd|d
ƒjƒ ƒ | jd|dƒjƒ ƒ | jd|dƒjƒ ƒ | jd|dƒjƒ ƒ | jd|dƒjƒ ƒ | jd|dƒjƒ ƒ | jd|dƒjƒ ƒ 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)rA   rK   rË   )r   rE   r   r   r   rÌ   b  s    z$PureWindowsPathTest.test_is_reservedN)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,   ÚPureWindowsPathrA   r4   r‘   ÚcopyÚupdaterÙ   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Ð   À  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   | j dƒ}| jt|ƒtjdkr$tjntjƒ d S )Nr   Únt)rA   rK   rL   rd   r¨   r,   rí   rÏ   )r   rB   r   r   r   Útest_concrete_classx  s    

z PurePathTest.test_concrete_classc             C   s$   t jdƒ}t jdƒ}| j||ƒ d S )Nr   )r,   rÏ   rí   r€   )r   rB   r~   r   r   r   Útest_different_flavours_unequal}  s    

z,PurePathTest.test_different_flavours_unequalc             C   s   t jdƒ}t jdƒ}| jtƒ ||k  W d Q R X | jtƒ ||k W d Q R X | jtƒ ||k W d Q R X | jtƒ ||k W d Q R X d S )Nr   )r,   rÏ   rí   rh   rˆ   )r   rB   r~   r   r   r   Ú!test_different_flavours_unordered‚  s    

z.PurePathTest.test_different_flavours_unorderedN)	r   r    r!   r,   ZPurePathrA   rò   ró   rô   r   r   r   r   rð   u  s   rð   c              G   s   t jjtf| žŽ S )N)rd   ÚpathÚjoinÚBASE)r
   r   r   r   Ú<lambda>•  s    rø   c              G   s   t jjtf| žŽ S )N)rd   rõ   rö   r   )r
   r   r   r   rø   –  s    c              C   sN   t js
dS ytjttƒ W n$ tk
r> }  zt| ƒS d } ~ X nX tj	tƒ d S )Nzno system support for symlinks)
r,   Zsupports_symlinksrd   ÚsymlinkÚ__file__r÷   ÚOSErrorrI   r   Úunlink)Úer   r   r   Úsymlink_skip_reason˜  s    
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,   Ú	PosixPathrA   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 }| jtƒ |dƒjƒ  W d Q R X d S )Nzc:/)rA   rh   ÚNotImplementedErrorÚowner)r   rE   r   r   r   Ú
test_owner´  s    z WindowsPathAsPureTest.test_ownerc          	   C   s,   | j }| jtƒ |dƒjƒ  W d Q R X d S )Nzc:/)rA   rh   r  Úgroup)r   rE   r   r   r   Ú
test_group¹  s    z WindowsPathAsPureTest.test_groupN)r   r    r!   r,   ÚWindowsPathrA   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d$d%„ ƒZd&d'„ Zd(d)„ Zd*d+„ Zed,d-„ ƒZd.d/„ ZdŒd1d2„Ze ZZed3d4„ ƒZ ed5d6„ ƒZ!d7d8„ Z"d9d:„ Z#d;d<„ Z$ed=d>„ ƒZ%d?d@„ Z&e'j(e)dAƒdBdC„ ƒZ*e'j(e+dDƒdEdF„ ƒZ,dGdH„ Z-dIdJ„ Z.dKdL„ Z/dMdN„ Z0dOdP„ Z1dQdR„ Z2dSdT„ Z3dUdV„ Z4dWdX„ Z5dYdZ„ Z6d[d\„ Z7e8d]d^„ ƒZ9d_d`„ Z:dadb„ Z;dcdd„ Z<ededf„ ƒZ=dgdh„ Z>didj„ Z?dkdl„ Z@dmdn„ ZAe'j(eBedoƒdpƒdqdr„ ƒZCdsdt„ ZDe'j(eBeEduƒdvƒdwdx„ ƒZFdydz„ ZGd{d|„ ZHd}d~„ ZIdd€„ ZJdd‚„ ZKdƒd„„ ZLed…d†„ ƒZMed‡dˆ„ ƒZNed‰dŠ„ ƒZOd‹S )Ú_BasePathTestz?Tests for the FS-accessing functionalities of the Path classes.c          !   C   s~  dd„ }| j |ƒ tjtƒ tjtdƒƒ tjtdƒƒ tjtdƒƒ tjtddƒƒ tjtdƒƒ ttdƒd	ƒ}|jd
ƒ W d Q R X ttddƒd	ƒ}|jdƒ W d Q R X ttddƒd	ƒ}|jdƒ W d Q R X ttdddƒd	ƒ}|jdƒ W d Q R X tjtdƒdƒ tsztj	dtdƒƒ tj	dtdƒƒ | j
dtdƒƒ | j
tjjddƒtddƒƒ | j
tjjddƒtddƒƒ d S )Nc               S   s   t jtdƒdƒ tjtƒ d S )NÚdirEiÿ  )rd   Ú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)Ú
addCleanuprd   Úmkdirr÷   rö   ÚopenÚwriter
  rþ   rù   Údirlinkrõ   )r   r  r   r   r   r   rC   Ô  s.    

z_BasePathTest.setUprñ   c             C   s   t j||dd d S )NT)Útarget_is_directory)rd   rù   )r   ÚsrcÚdestr   r   r   r  ó  s    z_BasePathTest.dirlinkc             C   s   t j||ƒ d S )N)rd   rù   )r   r  r  r   r   r   r  ö  s    c             C   s*   | j tjjt|ƒt|ƒƒd||f ƒ d S )Nz&%r and %r don't point to the same file)rv   rd   rõ   ÚsamefilerI   )r   Zpath_aZpath_br   r   r   Ú
assertSameù  s    z_BasePathTest.assertSamec          
   O   s6   | j tƒ}|||Ž W d Q R X | j|jjtjƒ d S )N)rh   ÚFileNotFoundErrorr   Ú	exceptionÚerrnoÚENOENT)r   ÚfuncrM   ÚkwargsÚcmr   r   r   ÚassertFileNotFoundþ  s    z _BasePathTest.assertFileNotFoundc             C   sT   | j tjƒ ƒ}| j||ƒ | jt|ƒt|ƒƒ | jt|ƒt|ƒƒ | j|jƒ ƒ d S )N)	rA   rd   Úgetcwdr   rI   rK   rL   rv   rÉ   )r   rB   r~   r   r   r   Ú	_test_cwd  s
    z_BasePathTest._test_cwdc             C   s   | j jƒ }| j|ƒ d S )N)rA   Úcwdr+  )r   rB   r   r   r   Útest_cwd
  s    
z_BasePathTest.test_cwdc             C   sX   | j tjjdƒƒ}| j||ƒ | jt|ƒt|ƒƒ | jt|ƒt|ƒƒ | j|j	ƒ ƒ d S )Nú~)
rA   rd   rõ   Ú
expanduserr   rI   rK   rL   rv   rÉ   )r   rB   r~   r   r   r   Ú
_test_home  s
    z_BasePathTest._test_homec             C   s   | j jƒ }| j|ƒ d S )N)rA   Úhomer0  )r   rB   r   r   r   Ú	test_home  s    
z_BasePathTest.test_homec             C   sø   t jjtdƒ}t jjtddƒ}| j|ƒ}| j|ƒ}| j|ƒ}| j|j|ƒƒ | j|j|ƒƒ | j|j|ƒƒ | j|j|ƒƒ t jjtdƒ}| j|ƒ}| jt	|j|ƒ | jt	|j|ƒ | jt	|j|ƒ | jt	|j|ƒ | jt	|j|ƒ | jt	|j|ƒ d S )Nr  r  r  Úfoo)
rd   rõ   rö   r÷   rA   rv   r   r„   rh   r"  )r   Z
fileA_pathZ
fileB_pathrB   rR   r~   Znon_existentr|   r   r   r   Útest_samefile  s"    



z_BasePathTest.test_samefilec             C   s$   | j dƒ}| j|jƒ tjdƒƒ d S )Nr   r   )rA   r   Ústatrd   )r   rB   r   r   r   Útest_empty_path-  s    
z_BasePathTest.test_empty_pathc             C   sœ   | j }|dƒ}| j|jƒ |tjjdƒƒƒ |dƒ}| j|jƒ |ƒ |dƒ}| j|jƒ |ƒ |dƒ}| j|jƒ |ƒ ||dƒjƒ jƒd }| j|jƒ |ƒ d S )Nr.  r3  z/~z../~r   )rA   r   r/  rd   rõ   Úabsoluter¦   )r   rE   rB   r   r   r   Útest_expanduser_common2  s    z$_BasePathTest.test_expanduser_commonc             C   sæ   | j }|tƒ}| jd|jƒ ƒ | jd|d jƒ ƒ | jd|d jƒ ƒ | jd|d d jƒ ƒ tsº| jd|d jƒ ƒ | jd|d jƒ ƒ | jd|d d jƒ ƒ | jd|d d jƒ ƒ | jd|d	 jƒ ƒ | jd|d
ƒjƒ ƒ d S )NTr  r  FÚbahr  r  r  r3  z/xyzzy)rA   r÷   rK   Úexistsrþ   )r   rE   rB   r   r   r   Útest_exists?  s    z_BasePathTest.test_existsc             C   sÂ   | j tƒ}|d jdƒ$}| j|tjƒ | j|jƒ dƒ W d Q R X |d jdƒ(}| j|tjƒ | j|jƒ j	ƒ dƒ W d Q R X |d jddd(}| j|tj
ƒ | j|jƒ j	ƒ dƒ W d Q R X d S )Nr  r|   zthis is file A
Úrbs   this is file Ar   )Ú	buffering)rA   r÷   r  rD   ÚioÚ
TextIOBaser   ÚreadÚBufferedIOBaseÚstripÚ	RawIOBase)r   rB   r   r   r   r   Útest_open_commonN  s    
z_BasePathTest.test_open_commonc             C   sX   | j tƒ}|d jdƒ | j|d jƒ dƒ | jt|d jdƒ | j|d jƒ dƒ d S )Nr  s   abcdefgZsomestr)rA   r÷   Zwrite_bytesr   Z
read_bytesrh   rˆ   )r   rB   r   r   r   Útest_read_write_bytesZ  s
    
z#_BasePathTest.test_read_write_bytesc             C   sf   | j tƒ}|d jddd | j|d jddddƒ | jt|d jd	ƒ | j|d jdddƒ d S )
Nr  u   Ã¤bcdefgzlatin-1)Úencodingzutf-8Úignore)rF  ÚerrorsZbcdefgs	   somebytes)rA   r÷   Z
write_textr   Z	read_textrh   rˆ   )r   rB   r   r   r   Útest_read_write_textb  s    
z"_BasePathTest.test_read_write_textc                s\   | j ‰ ˆ tƒ}|jƒ }t|ƒ}dddddg}ts>|dddg7 }| j|‡ fd	d
„|D ƒƒ d S )Nr  r  r  r	  r  r  r  r  c                s   h | ]}ˆ t |ƒ’qS r   )r÷   )r	   r~   )rE   r   r   ú	<setcomp>s  s    z-_BasePathTest.test_iterdir.<locals>.<setcomp>)rA   r÷   ÚiterdirÚsetrþ   r   )r   rB   ÚitÚpathsr   r   )rE   r   Útest_iterdirk  s    z_BasePathTest.test_iterdirc                s>   | j ‰ ˆ tdƒ}t|jƒ ƒ}‡ fdd„dD ƒ}| j||ƒ d S )Nr  c                s   h | ]}ˆ t d |ƒ’qS )r  )r÷   )r	   r~   )rE   r   r   rJ  {  s    z5_BasePathTest.test_iterdir_symlink.<locals>.<setcomp>r  r  )r  r  )rA   r÷   rL  rK  r   )r   rB   rN  r   r   )rE   r   Útest_iterdir_symlinku  s
    
z"_BasePathTest.test_iterdir_symlinkc             C   sN   | j tdƒ}| jtƒ}t|jƒ ƒ W d Q R X | j|jjtj	tj
tjfƒ d S )Nr  )rA   r÷   rh   rû   ÚnextrK  ÚassertInr#  r$  ÚENOTDIRr%  ZEINVAL)r   rB   r(  r   r   r   Útest_iterdir_nodir~  s
    z _BasePathTest.test_iterdir_nodirc                sô   ‡ ‡fdd„}ˆj ‰ ˆ tƒ}|jdƒ}ˆj|tjƒ ||dgƒ ||jdƒg ƒ ||jdƒddgƒ tr~||jdƒd	dgƒ n||jdƒd	dd
gƒ tr¬||jdƒdgƒ n||jdƒddddgƒ trÜ||jdƒdgƒ n||jdƒddgƒ d S )Nc                s"   ˆj t| ƒ‡ fdd„|D ƒƒ d S )Nc                s   h | ]}ˆ t |ƒ’qS r   )r÷   )r	   r~   )rE   r   r   rJ  Š  s    zA_BasePathTest.test_glob_common.<locals>._check.<locals>.<setcomp>)r   rL  )Úglobr   )rE   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)rA   r÷   rU  rD   ÚcollectionsÚIteratorrþ   )r   rV  rB   rM  r   )rE   r   r   Útest_glob_commonˆ  s$    

z_BasePathTest.test_glob_commonc                sÞ   ‡ ‡fdd„}ˆj ‰ ˆ tƒ}|jdƒ}ˆj|tjƒ ||dgƒ ||jdƒdgƒ ||jdƒg ƒ trz||jdƒdgƒ n||jdƒddd	d
gƒ ||jdƒddddgƒ ˆ tdƒ}||jdƒddgƒ ||jdƒdgƒ d S )Nc                s"   ˆj t| ƒ‡ fdd„|D ƒƒ d S )Nc                s   h | ]}ˆ t |ƒ’qS r   )r÷   )r	   r~   )rE   r   r   rJ  ¢  s    zB_BasePathTest.test_rglob_common.<locals>._check.<locals>.<setcomp>)r   rL  )rU  r   )rE   r   r   r   rV  ¡  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*/*)rA   r÷   ÚrglobrD   rW  rX  rþ   )r   rV  rB   rM  r   )rE   r   r   Útest_rglob_common   s"    



z_BasePathTest.test_rglob_commonc                sZ   | j }|tƒ‰ tˆ jdƒƒ}dddddddd	d
dddddh}| j|‡ 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  c                s   h | ]}ˆ | ’qS r   r   )r	   r
   )rB   r   r   rJ  Ä  s    z8_BasePathTest.test_rglob_symlink_loop.<locals>.<setcomp>)rA   r÷   rL  rZ  r   )r   rE   ÚgivenÚexpectr   )rB   r   Útest_rglob_symlink_loopµ  s    z%_BasePathTest.test_rglob_symlink_loopc             C   sf   | j }|tƒ}| jt|jdƒƒ|tdƒhƒ | jt|jdƒƒ|tdƒhƒ | jt|jdƒƒtƒ ƒ d S )Nz..zdirA/../file*zdirA/../fileAz../xyzzy)rA   r÷   r   rL  rU  )r   rE   rB   r   r   r   Útest_glob_dotdotÆ  s
    z_BasePathTest.test_glob_dotdotTc             C   s   |j |ƒ}| j||ƒ d S )N)Úresolver   )r   rB   r   Ústrictr~   r   r   r   Ú_check_resolveÏ  s    
z_BasePathTest._check_resolvec             C   sÐ  | j }|tdƒ}| jtƒ}|jdd W d Q R X | j|jjtjƒ | jt	|jddƒt
jjtdƒƒ |tdddƒ}| jt	|jddƒt
jjtdddƒƒ |tddddƒ}| jt	|jddƒt
jjt
jjdddƒƒƒ |tdd	ƒ}| j||ƒ |td
ƒ}| j||tdƒƒ |tddd	ƒ}| j||tdd	ƒƒ |tddd	ƒ}| j||tdd	ƒƒ |tddd	dddƒ}| j||tdd	dddƒdƒ |tddddddƒ}t
jdkrº| j||tddddƒdƒ n| j||tdddƒdƒ tjtjddƒ}| jtj|ƒ t
jt
jj|ƒtddƒƒ t
jtdƒt
jj|dƒƒ |tdddd	ƒ}| j||tdd	ƒƒ |tddddddƒ}| j||tddddƒdƒ |tdddddddƒ}t
jdkr´| j|||dddƒdƒ n| j||tdddƒdƒ d S )Nr3  T)rb  FÚinZspamz..r  r  r  r  r  r  r  rñ   z-dirD)rª   ÚlinkXÚlinkY)rA   r÷   rh   rû   ra  r   r#  r$  r%  rI   rd   rõ   rö   ÚabspathÚ_check_resolve_relativer¨   r   Z	_longpathÚtempfileZmkdtempr  r  rù   Ú_check_resolve_absolute)r   rE   rB   r(  r   r   r   r   Útest_resolve_commonÖ  sT    


z!_BasePathTest.test_resolve_commonc             C   s¨   | j tƒ}| jdtdƒƒ | jtjjddƒtdƒƒ | jtjjddƒtdƒƒ |d }| j|jdd|ƒ |d d }| jt	|jdd | j|jd	d|d d ƒ d S )
Nr   Ú0Ú1Ú2T)rb  Ú3Ú4F)
rA   r÷   r  rö   rd   rõ   r   ra  rh   r"  )r   rB   r~   r|   r   r   r   Útest_resolve_dot  s    
z_BasePathTest.test_resolve_dotc             C   sŠ   | j tƒ}|jƒ }|jƒ }t|ƒ | W d Q R X | jtt|ƒ | jtt|ƒ | jt|jƒ | jt|jƒ | jt|jƒ | jt|j	ƒ d S )N)
rA   r÷   rK  rQ  rh   ri   r  ra  r7  Ú	__enter__)r   rB   rM  Zit2r   r   r   Ú	test_with   s    

z_BasePathTest.test_withc             C   sd   | j tƒd }|jƒ j}|d@ }|j|ƒ | j|jƒ j|ƒ |dB }|j|ƒ | j|jƒ j|ƒ d S )Nr  é’   imÿÿÿ)rA   r÷   r5  Úst_moder
  r   )r   rB   ÚmodeZnew_moder   r   r   Ú
test_chmod/  s    


z_BasePathTest.test_chmodc             C   sZ   | j tƒd }|jƒ }| j|jƒ |ƒ |j|jdA ƒ | j|j|jƒ | j|jƒ |ƒ d S )Nr  rt  )rA   r÷   r5  r   r
  ru  r  r€   )r   rB   Ústr   r   r   Ú	test_stat=  s    z_BasePathTest.test_statc             C   s*   | j tƒd }|jƒ }| j||jƒ ƒ d S )Nr  )rA   r÷   r5  r€   Úlstat)r   rB   rx  r   r   r   Ú
test_lstatF  s    z_BasePathTest.test_lstatc             C   s*   | j tƒd }|jƒ }| j||jƒ ƒ d S )Nr  )rA   r÷   r5  r   rz  )r   rB   rx  r   r   r   Útest_lstat_nosymlinkL  s    z"_BasePathTest.test_lstat_nosymlinkz&the pwd module is needed for this testc             C   s`   | j tƒd }|jƒ j}ytj|ƒj}W n" tk
rJ   | jd| ƒ Y nX | j	||j
ƒ ƒ d S )Nr  z4user %d doesn't have an entry in the system database)rA   r÷   r5  Úst_uidÚpwdÚgetpwuidÚpw_nameÚKeyErrorrÆ   r   r  )r   rB   Zuidr¨   r   r   r   r  Q  s    
z_BasePathTest.test_ownerz&the grp module is needed for this testc             C   s`   | j tƒd }|jƒ j}ytj|ƒj}W n" tk
rJ   | jd| ƒ Y nX | j	||j
ƒ ƒ d S )Nr  z5group %d doesn't have an entry in the system database)rA   r÷   r5  Úst_gidÚgrpZgetgrgidZgr_namer  rÆ   r   r  )r   rB   Úgidr¨   r   r   r   r  \  s    
z_BasePathTest.test_groupc             C   s2   | j tƒd }|jƒ  | j|jƒ | j|jƒ d S )Nr  )rA   r÷   rü   r)  r5  )r   rB   r   r   r   Útest_unlinkg  s    z_BasePathTest.test_unlinkc             C   sL   | j tƒd }x|jƒ D ]}|jƒ  qW |jƒ  | j|jƒ | j|jƒ d S )Nr  )rA   r÷   rK  rü   Úrmdirr)  r5  )r   rB   r~   r   r   r   Ú
test_rmdirm  s    z_BasePathTest.test_rmdirc             C   s†   | j tƒ}|d }|jƒ j}|d d }|j|ƒ | j|jƒ j|ƒ | j|jƒ tdƒ}|j|ƒ | jtj|ƒj|ƒ | j|jƒ d S )Nr  r  ÚfileAAZfileAAA)	rA   r÷   r5  Úst_sizeÚrenamer   r)  Úrel_joinrd   )r   rE   rB   Úsizer~   r|   r   r   r   Útest_renameu  s    



z_BasePathTest.test_renamec             C   sˆ   | j tƒ}|d }|jƒ j}|d d }|j|ƒ | j|jƒ j|ƒ | j|jƒ tddƒ}|j|ƒ | jtj|ƒj|ƒ | j|jƒ d S )Nr  r  rˆ  r  r  )	rA   r÷   r5  r‰  r   r   r)  r‹  rd   )r   rE   rB   rŒ  r~   r|   r   r   r   Útest_replace„  s    




z_BasePathTest.test_replacec             C   sÚ   | j tƒ}|d }| j|jƒ ƒ |jƒ  | j|jƒ ƒ |jƒ }|j}|j}t	j
t|ƒ|d |d fƒ |jƒ  |jƒ }| j|j|ƒ | j|j|ƒ |d }| j|jƒ ƒ |jddd | j|jƒ ƒ | jt|jdd d S )NZnewfileAé
   ZnewfileBiÀ  F)rv  Úexist_ok)r  )rA   r÷   r„   r:  Útouchrv   r5  Úst_mtimeÚst_mtime_nsrd   ÚutimerI   rÛ   rh   rû   )r   rE   rB   rx  Z	old_mtimeZold_mtime_nsr   r   r   Útest_touch_common“  s$    
z_BasePathTest.test_touch_commonc          
   C   sH   | j tƒ}|d }|jƒ  |jdƒ}| j|jƒ jƒ dƒ W d Q R X d S )Nr  r<  s   this is file A)rA   r÷   r‘  r  r   r@  rB  )r   rE   rB   r   r   r   r   Útest_touch_nochange«  s
    
z!_BasePathTest.test_touch_nochangec          
   C   sx   | j tƒ}|d }| j|jƒ ƒ |jƒ  | j|jƒ ƒ | j|jƒ ƒ | jtƒ}|jƒ  W d Q R X | j	|j
jtjƒ d S )NZnewdirA)rA   r÷   r„   r:  r  rv   Úis_dirrh   rû   r   r#  r$  ÚEEXIST)r   rE   rB   r(  r   r   r   Ú
test_mkdir²  s    
z_BasePathTest.test_mkdirc             C   s6  | j tddƒ}| j|jƒ ƒ | jtƒ}|jƒ  W d Q R X | j|jj	t	j
ƒ |jdd | j|jƒ ƒ | j|jƒ ƒ | jtƒ}|jdd W d Q R X | j|jj	t	jƒ tj|jƒ jƒ}| j tddƒ}|jddd | j|jƒ ƒ | j|jƒ ƒ tjdkr| jtj|jƒ jƒd	|@ ƒ | jtj|jjƒ jƒ|ƒ d S )
NZnewdirBÚnewdirCT)r   ZnewdirDZnewdirEim  rñ   im  )rA   r÷   r„   r:  rh   rû   r  r   r#  r$  r%  rv   r—  r˜  r5  ÚS_IMODEru  rd   r¨   r™   )r   rB   r(  rv  r   r   r   Útest_mkdir_parents½  s&    z _BasePathTest.test_mkdir_parentsc          
   C   s’   | j tdƒ}|jƒ j}| j|jƒ ƒ | j|jƒ ƒ | jtƒ}|j	ƒ  W d Q R X | j
|jjtjƒ |j	dd | j|jƒ ƒ | j
|jƒ j|ƒ d S )Nr  T)r  )rA   r÷   r5  Úst_ctimerv   r:  r—  rh   ÚFileExistsErrorr  r   r#  r$  r˜  )r   rB   Úst_ctime_firstr(  r   r   r   Útest_mkdir_exist_okÖ  s    
z!_BasePathTest.test_mkdir_exist_okc             C   sÜ   | j tdƒ}| j|jƒ ƒ | jtƒ}|jƒ  W d Q R X | j|jj	t	j
ƒ |d }|jdd |jƒ j}| j|jƒ ƒ | jtƒ}|jdd W d Q R X | j|jj	t	j
ƒ |jddd | j|jƒ ƒ | j|jƒ j|ƒ d S )Nr  rš  T)r   )r   r  )rA   r÷   rv   r:  rh   rž  r  r   r#  r$  r˜  r5  r  )r   rB   r(  rŸ  r   r   r   Útest_mkdir_exist_ok_with_parentâ  s    
z-_BasePathTest.test_mkdir_exist_ok_with_parentc             C   s2   | j dƒjƒ jdd | j dƒjƒ jddd d S )Nr   T)r  )r   r  )rA   ra  r  )r   r   r   r   Útest_mkdir_exist_ok_rootó  s    z&_BasePathTest.test_mkdir_exist_ok_rootc          
   C   s^   x.dD ]}| j |d ƒ}|jƒ sP qW | jdƒ | j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)r   )rA   r—  rÆ   rh   rû   r  )r   r   rB   r   r   r   Útest_mkdir_with_unknown_driveø  s    

z+_BasePathTest.test_mkdir_with_unknown_drivec             C   sŠ   | j tddƒ}| j|jƒ ƒ | jtƒ}|jdd W d Q R X | j|jj	t	j
ƒ | jtƒ}|jddd W d Q R X | j|jj	t	j
ƒ d S )Nr  r  T)r   )r   r  )rA   r÷   rv   r:  rh   rž  r  r   r#  r$  r˜  )r   rB   r(  r   r   r   Útest_mkdir_with_child_file  s    z(_BasePathTest.test_mkdir_with_child_filec             C   s‚   | j tdƒ}| j|jƒ ƒ | jtƒ}|jƒ  W d Q R X | j|jj	t	j
ƒ | jtƒ}|jdd W d Q R X | j|jj	t	j
ƒ d S )Nr  T)r  )rA   r÷   rv   r:  rh   rž  r  r   r#  r$  r˜  )r   rB   r(  r   r   r   Útest_mkdir_no_parents_file  s    z(_BasePathTest.test_mkdir_no_parents_filec                sÚ   xÔt dƒD ]È‰| jtdˆ ƒ}| j|jƒ ƒ d‡ ‡fdd„	}‡fdd„t dƒD ƒ‰tƒ ‰ |d	 d
 }y*tjd|ƒ |jddd W d Q R X W n$ t	k
r²   | j
t|ƒˆ ƒ Y nX | jt|ƒˆ ƒ | j|jƒ ƒ q
W d S )Né    zdirCPC%déÿ  c                s6   t | ƒ} ˆjƒ r&tj| |ƒ ˆ j| ƒ tj| |ƒ d S )N)rI   Úpoprd   r  Úadd)rõ   rv  )Úconcurrently_createdÚpatternr   r   Úmy_mkdir   s
    
zE_BasePathTest.test_mkdir_concurrent_parent_creation.<locals>.my_mkdirc                s   g | ]}t ˆ d |> @ ƒ‘qS )rr   )Úbool)r	   Ún)Úpattern_numr   r   r   ,  s    zG_BasePathTest.test_mkdir_concurrent_parent_creation.<locals>.<listcomp>é   Zdir1Zdir2zpathlib._normal_accessor.mkdirTF)r   r  )r§  )r·   rA   r÷   r„   r:  rL  r   Zpatchr  rž  rR  rI   ZassertNotInrv   )r   rB   r¬  Zp12r   )rª  r«  r¯  r   Ú%test_mkdir_concurrent_parent_creation  s    z3_BasePathTest.test_mkdir_concurrent_parent_creationc             C   s  | j tƒ}|d }|d d }|j|ƒ | j|jƒ |jƒ ƒ | j|jƒ |jƒ ƒ |d d }|jt|ƒƒ | j|jƒ |jƒ ƒ | j|jƒ |jƒ ƒ | j|j	ƒ ƒ |d }|d d }|j|dd | j|jƒ |jƒ ƒ | j|jƒ |jƒ ƒ | j
|j	ƒ ƒ | j
t|jƒ ƒƒ d S )	Nr  r  ZlinkAAZlinkAAAr  ZlinkAAAAT)r  )rA   r÷   Z
symlink_tor   r5  r€   rz  rI   r„   r—  rv   rž   rK  )r   rE   ÚtargetÚlinkr   r   r   Útest_symlink_to8  s$    

z_BasePathTest.test_symlink_toc             C   s”   | j tƒ}| j|d jƒ ƒ | j|d jƒ ƒ | j|d jƒ ƒ | j|d d jƒ ƒ ts| j|d jƒ ƒ | j|d jƒ ƒ | j|d jƒ ƒ d S )Nr  r  znon-existingr9  r  r  r  )rA   r÷   rv   r—  r„   rþ   )r   rE   r   r   r   Útest_is_dirP  s    
z_BasePathTest.test_is_dirc             C   s”   | j tƒ}| j|d jƒ ƒ | j|d jƒ ƒ | j|d jƒ ƒ | j|d d jƒ ƒ ts| j|d jƒ ƒ | j|d jƒ ƒ | j|d jƒ ƒ d S )Nr  r  znon-existingr9  r  r  r  )rA   r÷   rv   Úis_filer„   rþ   )r   rE   r   r   r   Útest_is_file[  s    
z_BasePathTest.test_is_filec             C   s”   | j tƒ}| j|d jƒ ƒ | j|d jƒ ƒ | j|d jƒ ƒ | j|d d jƒ ƒ ts| j|d jƒ ƒ | j|d jƒ ƒ | j|d jƒ ƒ d S )Nr  r  znon-existingr9  r  r  r  )rA   r÷   r„   Ú
is_symlinkrþ   rv   )r   rE   r   r   r   Útest_is_symlinkf  s    
z_BasePathTest.test_is_symlinkc             C   sZ   | j tƒ}| j|d jƒ ƒ | j|d jƒ ƒ | j|d jƒ ƒ | j|d d jƒ ƒ d S )Nr  r  znon-existingr9  )rA   r÷   r„   Úis_fifo)r   rE   r   r   r   Útest_is_fifo_falseq  s
    
z _BasePathTest.test_is_fifo_falseÚmkfifozos.mkfifo() requiredc             C   s~   | j tdƒ}ytjt|ƒƒ W n0 tk
rN } z| jd| ƒ W Y d d }~X nX | j|jƒ ƒ | j	|j
ƒ ƒ | j	|jƒ ƒ d S )NZmyfifozos.mkfifo(): %s)rA   r÷   rd   r¼  rI   ÚPermissionErrorrÆ   rv   rº  r„   Ú	is_socketr¶  )r   rE   rý   r   r   r   Útest_is_fifo_truex  s     z_BasePathTest.test_is_fifo_truec             C   sZ   | j tƒ}| j|d jƒ ƒ | j|d jƒ ƒ | j|d jƒ ƒ | j|d d jƒ ƒ d S )Nr  r  znon-existingr9  )rA   r÷   r„   r¾  )r   rE   r   r   r   Útest_is_socket_falseƒ  s
    
z"_BasePathTest.test_is_socket_falseÚAF_UNIXzUnix sockets requiredc             C   s´   | j tdƒ}tjtjtjƒ}| j|jƒ y|jt|ƒƒ W nJ t	k
r„ } z.t
|tƒsbdt|ƒkrt| jdt|ƒ ƒ W Y d d }~X nX | j|jƒ ƒ | j|jƒ ƒ | j|jƒ ƒ d S )NZmysockzAF_UNIX path too longzcannot bind Unix socket: )rA   r÷   ÚsocketrÁ  ZSOCK_STREAMr  ÚcloseZbindrI   rû   Ú
isinstancer½  rÆ   rv   r¾  r„   rº  r¶  )r   rE   Zsockrý   r   r   r   Útest_is_socket_trueŠ  s    
$z!_BasePathTest.test_is_socket_truec             C   sZ   | j tƒ}| j|d jƒ ƒ | j|d jƒ ƒ | j|d jƒ ƒ | j|d d jƒ ƒ d S )Nr  r  znon-existingr9  )rA   r÷   r„   Úis_block_device)r   rE   r   r   r   Útest_is_block_device_false™  s
    
z(_BasePathTest.test_is_block_device_falsec             C   sZ   | j tƒ}| j|d jƒ ƒ | j|d jƒ ƒ | j|d jƒ ƒ | j|d d jƒ ƒ d S )Nr  r  znon-existingr9  )rA   r÷   r„   Úis_char_device)r   rE   r   r   r   Útest_is_char_device_false   s
    
z'_BasePathTest.test_is_char_device_falsec             C   sJ   | j dƒ}|jƒ s| jdƒ | j|jƒ ƒ | j|jƒ ƒ | j|jƒ ƒ d S )Nz	/dev/nullz/dev/null required)rA   r:  rÆ   rv   rÈ  r„   rÆ  r¶  )r   rE   r   r   r   Útest_is_char_device_true§  s    

z&_BasePathTest.test_is_char_device_truec             C   sT   | j tdƒ}xBtdtjd ƒD ].}tj||ƒ}tj|ƒ}| j|jƒ |jƒ ƒ qW d S )Nr  r   rr   )	rA   r÷   r·   r¸   r¹   rº   r»   r   r5  )r   rB   r¼   r½   rR   r   r   r   r¾   °  s
    
z"_BasePathTest.test_pickling_commonc             C   sJ   | j }|dƒ}|dƒ}| j|jd |jd ƒ | j|jd |jd ƒ d S )Nz/usr/bin/fooz/usr/local/binrr   rœ   r›   )rA   rK   rJ   )r   rE   rB   r~   r   r   r   Útest_parts_interning·  s
    z"_BasePathTest.test_parts_interningc             C   sØ  | j tƒ}| jtjjddƒtdƒƒ | jtjjddƒtdƒƒ | jtjjddƒtdƒƒ | j|tdƒƒ |d jƒ }| j||ƒ | jt|ƒtƒ |d jƒ }| j||ƒ | jt|ƒtƒ |d jƒ }| j||ƒ | jt|ƒtƒ |d jƒ }| j||ƒ | jt|ƒtƒ tj	ƒ }tj
tƒ z¬| j dƒjƒ }| j||ƒ | jt|ƒtƒ | j dƒjƒ }| j||ƒ | jt|ƒtƒ | j dƒjƒ }| j||ƒ | jt|ƒtƒ | j dƒjƒ }| j||ƒ | jt|ƒtƒ W d tj
|ƒ X d S )NZlink0Zlink1Zlink2Zlink3)rA   r÷   r  rd   rõ   rö   ra  r   rI   r*  Úchdir)r   Zlink0_targetrE   rB   Zold_pathr   r   r   Ú_check_complex_symlinksÀ  sB    

z%_BasePathTest._check_complex_symlinksc             C   s   | j tƒ d S )N)rÍ  r÷   )r   r   r   r   Útest_complex_symlinks_absoluteé  s    z,_BasePathTest.test_complex_symlinks_absolutec             C   s   | j dƒ d S )Nr   )rÍ  )r   r   r   r   Útest_complex_symlinks_relativeí  s    z,_BasePathTest.test_complex_symlinks_relativec             C   s   | j tjjddƒƒ d S )Nr  z..)rÍ  rd   rõ   rö   )r   r   r   r   Ú&test_complex_symlinks_relative_dot_dotñ  s    z4_BasePathTest.test_complex_symlinks_relative_dot_dotN)T)Pr   r    r!   Ú__doc__rC   rd   r¨   r  r!  r)  r+  r-  r0  r2  r4  r6  r8  r;  rD  rE  rI  rO  Úwith_symlinksrP  rT  rY  r[  r_  r`  rc  rh  rj  rk  rq  rs  rw  ry  r{  r|  ÚunittestÚ
skipUnlessr~  r  rƒ  r  r…  r‡  r  rŽ  r•  r–  r™  rœ  r   r¡  r¢  Úonly_ntr£  r¤  r¥  r±  r´  rµ  r·  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   | j dƒ}| jt|ƒtjdkr$tjntjƒ d S )Nr   rñ   )rA   rK   rL   rd   r¨   r,   r  r   )r   rB   r   r   r   rò   ù  s    

zPathTest.test_concrete_classc             C   s,   t jdkr| jttjƒ n| jttjƒ d S )Nrñ   )rd   r¨   rh   r  r,   r   r  )r   r   r   r   Útest_unsupported_flavourþ  s    
z!PathTest.test_unsupported_flavourc          
   C   s2   | j ƒ }| jtdƒ t|jdƒƒ W d Q R X d S )NzUnacceptable patternr   )rA   ZassertRaisesRegexri   rž   rU  )r   rB   r   r   r   Útest_glob_empty_pattern  s    z PathTest.test_glob_empty_patternN)	r   r    r!   r,   ZPathrA   rò   rØ  rÙ  r   r   r   r   r×  ö  s   r×  c               @   sf   e Zd ZejZddœdd„Zdd„ Zdd„ Ze	d	d
„ ƒZ
dd„ Zdd„ Zejeedƒdƒdd„ ƒZdS )ÚPosixPathTestT)rb  c         
   G   s2   | j |Ž }| jtƒ t|j|ƒƒ W d Q R X d S )N)rA   rh   ÚRuntimeErrorÚprintra  )r   rb  rM   rõ   r   r   r   Ú_check_symlink_loop  s    
z!PosixPathTest._check_symlink_loopc             C   s¨   t jdƒ}| jt j|ƒ | jtƒ}|d jdƒ W d Q R X t jtdƒƒ}| jtj	|j
ƒdƒ t jdƒ |d jdƒ W d Q R X t jtdƒƒ}| jtj	|j
ƒdƒ d S )Nr   Únew_filer  i¶  é   Úother_new_filei¤  )rd   Úumaskr  rA   r÷   r  r5  rö   r   r›  ru  )r   Úold_maskrB   rx  r   r   r   Útest_open_mode  s    




zPosixPathTest.test_open_modec             C   s¾   t jdƒ}| jt j|ƒ | jtƒ}|d jƒ  t jtdƒƒ}| jtj	|j
ƒdƒ t jdƒ |d jƒ  t jtdƒƒ}| jtj	|j
ƒdƒ |d jdd	 t jtdƒƒ}| jtj	|j
ƒdƒ d S )
Nr   rÞ  i¶  rß  rà  i¤  Zmasked_new_fileiè  )rv  )rd   rá  r  rA   r÷   r‘  r5  rö   r   r›  ru  )r   râ  rB   rx  r   r   r   Útest_touch_mode!  s    


zPosixPathTest.test_touch_modec             C   sÜ   t jdtdƒƒ | jtdƒ t jdtdƒƒ | jtdƒ t jdtdƒƒ | jtdƒ | jtdddd t jtd	ƒtd
ƒƒ | jtd
ƒ t jtdƒtdƒƒ | jtdƒ t jtdƒtdƒƒ | jtdƒ | jtdddd d S )NzlinkX/insidere  rf  zlinkZ/../linkZZlinkZr3  F)rb  zlinkU/insideZlinkUZlinkVzlinkW/../linkWZlinkW)rd   rù   rö   rÝ  r÷   )r   r   r   r   Útest_resolve_loop0  s    zPosixPathTest.test_resolve_loopc             C   sX   | j }|tƒ}t|jdƒƒ}tjtƒs,tƒ n|}| j||ƒ | jt|jdƒƒtƒ ƒ d S )NÚFILEazFILEa*)rA   r÷   rL  rU  r   Úfs_is_case_insensitiver   )r   rE   rB   r]  r^  r   r   r   Ú	test_globE  s    zPosixPathTest.test_globc             C   sZ   | j }|tdƒ}t|jdƒƒ}tjtƒs.tƒ n|}| j||ƒ | jt|jdƒƒtƒ ƒ d S )Nr  ÚFILEdzFILEd*)rA   r÷   rL  rZ  r   rç  r   )r   rE   rB   r]  r^  r   r   r   Ú
test_rglobM  s    
zPosixPathTest.test_rglobÚgetpwallz%pwd module does not expose getpwall()c             C   s  | j }tjdƒ dd l}|jtjƒ ƒ}|j}|jj	dƒp:d}x8|j
ƒ D ]$}|j}|jj	dƒ}||krF|rFP qFW |}|}|dƒ}|d| d ƒ}	|d| d ƒ}
|d| d ƒ}|d| d ƒ}|d	ƒ}|d
ƒ}tjƒ "}|jdd ƒ | j|jƒ ||ƒd ƒ | j|	jƒ ||ƒd ƒ | j|
jƒ ||ƒd ƒ | j|jƒ |ƒ | j|jƒ |ƒ | j|jƒ |ƒ | jt|jƒ d|d< | j|jƒ |dƒƒ | j|	jƒ ||ƒd ƒ | j|
jƒ ||ƒd ƒ | j|jƒ |ƒ | j|jƒ |ƒ | j|jƒ |ƒ | jt|jƒ W d Q R X d S )Nr~  r   r   z~/Documentsr.  z
/Documentsz../~z/~r   z~fakeuser/DocumentsÚHOMEZ	Documentsz/tmpz/tmp/Documents)rA   r   Úimport_moduler~  r  rd   Úgetuidr€  Úpw_dirÚrstriprë  ÚEnvironmentVarGuardr¨  r   r/  rh   rÛ  )r   rE   r~  ZpwdentZusernameÚuserhomeZ	othernameZ	otherhomeÚp1Úp2Úp3Úp4Úp5Úp6Zp7Úenvr   r   r   Útest_expanduserU  sJ    
zPosixPathTest.test_expanduserN)r   r    r!   r,   r   rA   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 )ÚWindowsPathTestc             C   s0   | j }|tƒ}| jt|jdƒƒ|tdƒhƒ d S )Nræ  r  )rA   r÷   r   rL  rU  )r   rE   rB   r   r   r   rè  ‰  s    zWindowsPathTest.test_globc             C   s2   | j }|tdƒ}| jt|jdƒƒ|tdƒhƒ d S )Nr  ré  zdirC/dirD/fileD)rA   r÷   r   rL  rZ  )r   rE   rB   r   r   r   rê  Ž  s    
zWindowsPathTest.test_rglobc                sb  ˆj ‰ tjƒ H‰ˆjdd ƒ ˆjdd ƒ ˆjdd ƒ ˆjdd ƒ dˆd< ˆ dƒ‰ˆ dƒ‰ˆ d	ƒ‰ˆ d
ƒ‰ˆ dƒ‰ˆ dƒ‰ˆjtˆjƒ ˆjtˆjƒ ˆjtˆjƒ ˆjˆjƒ ˆƒ ˆjˆjƒ ˆƒ ˆjˆjƒ ˆƒ ‡ ‡‡‡‡‡‡‡‡f	dd„}dˆd< |ƒ  ˆjdd ƒ dˆd< |ƒ  dˆd< dˆd< |ƒ  ˆjdd ƒ ˆj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’   ˆj dd ƒ ˆjˆjƒ ˆ dƒƒ ˆjtˆjƒ dˆd< ˆjˆjƒ ˆ dƒƒ ˆjˆjƒ ˆ dƒƒ ˆjˆjƒ ˆƒ ˆjˆjƒ ˆƒ ˆjˆjƒ ˆƒ d S )Nrý  zC:/Users/alice/My Documentsrü  zC:/Users/bob/My Documents)r¨  r   r/  rh   r  r   )	rE   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)rA   r   rñ  r¨  rh   rÛ  r/  r   )r   r   r   )	rE   rù  ró  rô  rõ  rö  r÷  rø  r   r   rú  “  s@    zWindowsPathTest.test_expanduserN)	r   r    r!   r,   r  rA   rè  rê  rú  r   r   r   r   rû  …  s   rû  Ú__main__)/rW  r>  rd   r$  r,   r¸   rÂ  r5  ri  rÓ  r   Ztestr   Ztest.supportr   r   rƒ  r~  ÚImportErrorÚobjectr   ZTestCaser"   r-   r4   r¿   rÐ   rð   rõ   Úrealpathr÷   rö   r‹  rþ   ZskipIfr¨   rÕ  Z
only_posixrÒ  rÿ   r  r  r×  rÚ  rû  r   Úmainr   r   r   r   Ú<module>   sr   )$B   RL   8      =zE
