HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.7/test/__pycache__/test_pathlib.cpython-37.pyc
B

��g�m�@sddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZddl
mZddlmZmZyddlZddlZWnek
r�dZZYnXGdd�de�ZGdd�deej�ZGd	d
�d
eej�ZGdd�de�ZGd
d�deej�ZGdd�deej�ZGdd�deej�Zej�e�Z dd�Z!dd�Z"e�#ej$dkd�Z%e�#ej$dkd�Z&e&Gdd�de��Z'e%Gdd�de��Z(Gdd�de�Z)Gdd �d e)ej�Z*e&Gd!d"�d"e)ej��Z+e%Gd#d$�d$e)ej��Z,e-d%k�re�.�dS)&�N)�mock)�support)�TESTFN�FakePathc@seZdZdd�Zdd�ZdS)�_BaseFlavourTestcsd|jj}|jj�|jj�|�fdd�|D��}|�||��r`|�fdd�|D��}|�||�dS)Ncsg|]}|�d���qS)�/)�replace)�.0�x)�sep��-/usr/local/lib/python3.7/test/test_pathlib.py�
<listcomp>sz7_BaseFlavourTest._check_parse_parts.<locals>.<listcomp>csg|]}|�d���qS)r)r)r	r
)�altseprr
r s)�flavourZparse_partsrr�assertEqual)�self�arg�expected�f�actualr)rrr
�_check_parse_partssz#_BaseFlavourTest._check_parse_partscCs�|j}|jj}|gddgf�|dgdddgf�|dgdddgf�|ddgddddgf�|dgddddgf�|dgddddgf�|dddgddddd	dgf�|dd
dgddddd	dgf�|dddgddddd	dgf�|dgddgf�|dddgdddgf�|dddgddddgf�|dddgdddgf�|d
gd||ddgf�|ddgd||ddgf�|ddgd||ddgf�|ddd	gd||dd	gf�|dddgd||d	gf�dS)N��aza/�bza/bza/b/zb/c�d�czb//czb/c/�.z/a/bz/az/a/z/bz/c)rrr)r�checkrrrr
�test_parse_parts_common#s(z(_BaseFlavourTest.test_parse_parts_commonN)�__name__�
__module__�__qualname__rrrrrr
rs
rc@s"eZdZejZdd�Zdd�ZdS)�PosixFlavourTestcCs�|j}|ddgdddddgf�|ddgdddddgf�|ddgdddddgf�|d	gddd	gf�|d
gddd
gf�|dgdddgf�dS)Nz//arrz//rz///arz////azc:azc:\az\a)r)rrrrr
�test_parse_partsCsz!PosixFlavourTest.test_parse_partscCs�|jj}|�|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�dS)Nr)rrrr)rrrza/b)rrza/bza/b/)rrza/b/z/a)rrrz/a/b)rrza/bz/a/b/)rrza/b/z//a)rz//rz///az///a/bzc:/a/b)rrzc:/a/bz\/a/b)rrz\/a/bz\a\b)rrz\a\b)r�	splitrootr)rrrrr
�test_splitrootOszPosixFlavourTest.test_splitrootN)r r!r"�pathlibZ_posix_flavourrr$r&rrrr
r#@sr#c@s"eZdZejZdd�Zdd�ZdS)�
NTFlavourTestcCs|j}|dgdddgf�|dgdddgf�|dgdddgf�|dgddddgf�|d	gddddgf�|d
gddddgf�|dgddd
gf�|dgddd
gf�|dgddd
dgf�|dddgdddddgf�|dddgdddddgf�|dddgddddgf�|dddgddddddgf�|dddgddddgf�|dgdddgf�|d gddddgf�|d d!gddddgf�|d"gd#dd$gf�|d%gd#dd$dgf�|dd!dgdddddgf�|d&d!dgdddddgf�|d'd!dgd(dd)ddgf�dS)*Nzc:rzc:/�\zc:\rzc:arzc:/az/az//a/bz\\a\bz\\a\b\z//a/b/z//a/b/crzZ:bzZ:rzZ:/bzZ:\z//b/crz\\b\cz\\b\c\z	Z://b//c/zd/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/dzZ:/az//?/Z:/az\\?\Z:z\\?\Z:\)r)rrrrr
r$gs.zNTFlavourTest.test_parse_partscCs|jj}|�|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�dS)Nr)rrrr)rrrza\b)rrza\bz\a)rr)rz\a\b)rr)za\bzc:a\b)zc:rza\bzc:\a\b)zc:r)za\bz\\az\\\a/b)rr)za/bzc:\\a)zc:r)rzc:\\\a/b)zc:r)za/bz\\a\b)z\\a\br)rz\\a\b\z	\\a\b\c\d)z\\a\br)zc\dz\\\a\b)rr%r)rrrrr
r&�s"zNTFlavourTest.test_splitrootN)r r!r"r'Z_windows_flavourrr$r&rrrr
r(ds"r(c
@s.eZdZddddddddd	d
g
ddd
dddgd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Z	dd�Z
d d!�Zd"d#�Zd$d%�Z
d&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Zd<d=�Zd>d?�Zd@dA�ZdBdC�ZdDdE�ZdFdG�ZdHdI�ZdJdK�Z dLdM�Z!dNdO�Z"dPS)Q�_BasePurePathTest)rr)za/r)rzb/)za/zb/)za/b/)za//b)za//b//)rrr)rrr)rrr)rz/b/cr)rz///b//czd/)z/az/b/cr)rrrzc/d)rrzb/c/d)rz/b/c/d)za/bz/b/c/dcCs*|�d�}|j|_|jj|_|jj|_dS)Nr)�clsZ_flavourrrr)r�prrr
�setUp�s

z_BasePurePathTest.setUpcCs�|j}|d�}|�||�|ddd�|ddd�|d�|d�|td��|�||d��|d��|�||d�d�|d��|�||d�|d��|d��|�||d�|d�|d��|td���dS)Nrrrz/aza/b/cz/a/b/cza/b)r+�assertIsInstancerr)r�Pr,rrr
�test_constructor_common�sz)_BasePurePathTest.test_constructor_commoncs`Gdd�dt��|j}|�fdd�|D��}|�|||��x|jD]}|�t|�t�qDWdS)Nc@seZdZdS)z:_BasePurePathTest._check_str_subclass.<locals>.StrSubclassN)r r!r"rrrr
�StrSubclass�sr1c3s|]}�|�VqdS)Nr)r	r
)r1rr
�	<genexpr>�sz8_BasePurePathTest._check_str_subclass.<locals>.<genexpr>)�strr+r�parts�assertIs�type)r�argsr/r,�partr)r1r
�_check_str_subclass�sz%_BasePurePathTest._check_str_subclasscCs6|�d�|�d�|�d�|�d�|�d�dS)Nrrrza/b.txtz/a/b.txt)r9)rrrr
�test_str_subclass_common�s




z*_BasePurePathTest.test_str_subclass_commoncCs�|j}|d�}|�d�}|�||d��|�t|�t|��|�dd�}|�||d��|�|d��}|�||d��|�d�}|�||d��dS)Nza/brza/b/crza/b/c/dz/c)r+�joinpathrr5r6)rr/r,�pprrr
�test_join_common�s

z"_BasePurePathTest.test_join_commoncCs�|j}|d�}|d}|�||d��|�t|�t|��|d}|�||d��|dd}|�||d��d|d}|�||d��||d�}|�||d��|d}|�||d��dS)	Nza/brza/b/czc/dza/b/c/drzc/a/b/dz/c)r+rr5r6)rr/r,r<rrr
�test_div_common�sz!_BasePurePathTest.test_div_commoncCs(|j|�}|�t|�|�d|j��dS)Nr)r+rr3rr)rrr7r,rrr
�
_check_str�s
z_BasePurePathTest._check_strcCs,xdD]}|�||f�qW|�dd�dS)N)rza/bza/b/crz/a/bz/a/b/cr)r)r?)r�pathstrrrr
�test_str_commons
z!_BasePurePathTest.test_str_commoncCs,|j}x dD]}|�||���|�qWdS)N)rza/bza/b/crz/a/bz/a/b/c)r+r�as_posix)rr/r@rrr
�test_as_posix_commons
z&_BasePurePathTest.test_as_posix_commoncCs2t�|j�}|j}|�t|d��d|d�dS)Nza/b�a�b)�os�fsencoderr+r�bytes)rrr/rrr
�test_as_bytes_commonsz&_BasePurePathTest.test_as_bytes_commonc	CsL|j}|�t��|d���WdQRX|�t��|���WdQRXdS)Nr)r+�assertRaises�
ValueError�as_uri)rr/rrr
�test_as_uri_commons
z$_BasePurePathTest.test_as_uri_commoncCs�x�dD]�}|�|�}|jj}t|�}|�|�|d�|�|�|�d�|�|t|�dd�}|�t	|�|�
��t	|tj�}|�
|j|j�|�||�|�t|�|�qWdS)N)rza/bza/b/crz/a/bz/a/b/c�(�)����)r+�	__class__r �repr�
assertTrue�
startswith�endswith�lenr�evalrBr'�__dict__r5)rr@r,Zclsname�r�inner�qrrr
�test_repr_commons

z"_BasePurePathTest.test_repr_commoncCs�|j}|�|d�|d��|�|d�|dd��|�|d�|d��|�|d�|d��|�|d�|��|�|d�|d��|�|�|d��|�|�d�|�|�i�|�|�t�dS)Nza/brrz/a/brr)r+r�assertNotEqual�int)rr/rrr
�test_eq_common-sz _BasePurePathTest.test_eq_commoncCs&|j}|�t|d�jd�|�t|d�jd�|�|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��dS)Nrrrzb.pyza/b.pyz/a/b.pyza.pyzb/pyz/a.pyzb.py/cz*.pyzb.pyczb./pyzab/c.pyza*/*.pyz
/d/ab/c.pyz	/dab/c.pyz	ab/c.py/dz/b.pyz/*.pyz/a/*.pyz/ab.pyz	/a/b/c.py)r+rJrK�matchrT�assertFalse)rr/rrr
�test_match_common:s8z#_BasePurePathTest.test_match_commonc	s��fdd�}�j}|d�}|d�}|d�}|d�}|||�|||�|||�|||�|||��j}|d�}|d�}|d	�}|d
�}|||�|||�|||�|||�|||���t��|�ikWdQRXdS)Ncs��||���||�dS)N)�
assertLessZ
assertGreater)rr)rrr
rd_sz:_BasePurePathTest.test_ordering_common.<locals>.assertLessrza/b�abcrz/az/a/bz/abcz/b)r+rJ�	TypeError)rrdr/rrrrr)rr
�test_ordering_common]s.









z&_BasePurePathTest.test_ordering_commoncCsX|j}|j}|d�}|j}|�|d�|�||j�|d�}|j}|�||ddf�dS)Nza/b)rrz/a/brr)rr+r4rr5)rrr/r,r4rrr
�test_parts_commonysz#_BasePurePathTest.test_parts_commoncCs4|j}|d�}|�|��d�|�t�|�d�dS)Nza/b)za/b)r+r?�
__fspath__rF�fspath)rr/r,rrr
�test_fspath_common�sz$_BasePurePathTest.test_fspath_commonc	s�xƈj��D]�\}}|�d�j�}|��jd�}||krZ|�fdd�|D�}|�|f���|�}x^|D]V}�j|�}��||d�|����t|�t|����t	|�|���|�
�|�qjWqWdS)Nrcs"g|]}t�fdd�|D���qS)c3s|]}|�d�j�VqdS)rN)rr)r	r8)rrr
r2�szA_BasePurePathTest.test_equivalences.<locals>.<listcomp>.<genexpr>)�tuple)r	�t)rrr
r�sz7_BasePurePathTest.test_equivalences.<locals>.<listcomp>zfailed with args {})�equivalences�itemsrr�appendr+r�format�hashr3rB)r�kZtuplesZcanon�posixZpcanonrmr,r)rr
�test_equivalences�s




z#_BasePurePathTest.test_equivalencescCs�|j}|d�}|�|j|d��|�|jj|d��|�|jjj|��|�|jjjj|��|d�}|�|j|d��|�|jj|d��|�|jjj|d��|�|jjjj|d��dS)Nza/b/cza/brz/a/b/cz/a/bz/ar)r+r�parent)rr/r,rrr
�test_parent_common�sz$_BasePurePathTest.test_parent_commonc	Csz|j}|d�}|j}|�t|�d�|�|d|d��|�|d|d��|�|d|d��|�t|�|d�|d�|d�g�|�t��|d	WdQRX|�t��|dWdQRX|�t��||d<WdQRX|d
�}|j}|�t|�d�|�|d|d��|�|d|d��|�|d|d
��|�t|�|d�|d�|d
�g�|�t��|dWdQRXdS)Nza/b/c�rza/brPr�rrQz/a/b/cz/a/bz/ar)r+�parentsrrW�listrJ�
IndexErrorrf)rr/r,�parrrr
�test_parents_common�s.""z%_BasePurePathTest.test_parents_commoncCs@|j}|�|d�jd�|�|d�jd�|�|d�jd�dS)Nza/brz/a/b)r+r�drive)rr/rrr
�test_drive_common�sz#_BasePurePathTest.test_drive_commoncCsX|j}|j}|�|d�jd�|�|d�jd�|�|d�j|�|�|d�j|�dS)Nrza/brz/a/b)r+rr�root)rr/rrrr
�test_root_common�sz"_BasePurePathTest.test_root_commoncCsX|j}|j}|�|d�jd�|�|d�jd�|�|d�j|�|�|d�j|�dS)Nrza/brz/a/b)r+rr�anchor)rr/rrrr
�test_anchor_common�sz$_BasePurePathTest.test_anchor_commoncCs�|j}|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd	�|�|d
�jd	�dS)Nrrrza/brz/a/bz/a/b/.za/b.pyzb.pyz/a/b.py)r+r�name)rr/rrr
�test_name_common�sz"_BasePurePathTest.test_name_commoncCs<|j}|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd	�|�|d
�jd	�|�|d�jd�|�|d�jd�|�|d
�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�dS)Nrrz..rza/bz/a/bz/a/b/.za/b.pyz.pyz/a/b.pyza/.hgrcz/a/.hgrcza/.hg.rcz.rcz	/a/.hg.rcz
a/b.tar.gzz.gzz/a/b.tar.gzza/Some name. Ending with a dot.z /a/Some name. Ending with a dot.)r+r�suffix)rr/rrr
�test_suffix_common�s$z$_BasePurePathTest.test_suffix_commoncCs:|j}|�|d�jg�|�|d�jg�|�|d�jg�|�|d�jg�|�|d�jg�|�|d�jg�|�|d�jdg�|�|d	�jdg�|�|d
�jg�|�|d�jg�|�|d�jd
g�|�|d�jd
g�|�|d�jddg�|�|d�jddg�|�|d�jg�|�|d�jg�dS)Nrrrza/bz/a/bz/a/b/.za/b.pyz.pyz/a/b.pyza/.hgrcz/a/.hgrcza/.hg.rcz.rcz	/a/.hg.rcz
a/b.tar.gzz.tarz.gzz/a/b.tar.gzza/Some name. Ending with a dot.z /a/Some name. Ending with a dot.)r+r�suffixes)rr/rrr
�test_suffixes_common�s"z&_BasePurePathTest.test_suffixes_commoncCs�|j}|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd	�|�|d
�jd�|�|d�jd
�|�|d�jd�dS)Nrrz..rza/brza/b.pyza/.hgrcz.hgrcza/.hg.rcz.hgz
a/b.tar.gzzb.tarza/Some name. Ending with a dot.zSome name. Ending with a dot.)r+r�stem)rr/rrr
�test_stem_commonsz"_BasePurePathTest.test_stem_commoncCs2|j}|�|d��d�|d��|�|d��d�|d��|�|d��d�|d��|�|d��d�|d��|�|d��d�|d��|�|d	��d�|d��|�t|d
�jd�|�t|d�jd�|�t|d�jd�|�t|d�jd
�|�t|d�jd
�|�t|d�jd�|�t|d�jd�dS)Nza/bzd.xmlza/d.xmlz/a/bz/a/d.xmlza/b.pyz/a/b.pyz
a/Dot ending.z/a/Dot ending.rrrz/czc/zc/d)r+r�	with_namerJrK)rr/rrr
�test_with_name_commonsz'_BasePurePathTest.test_with_name_commoncCs�|j}|�|d��d�|d��|�|d��d�|d��|�|d��d�|d��|�|d��d�|d��|�|d��d�|d��|�|d��d�|d��|�t|d�jd�|�t|d	�jd�|�t|d
�jd�|�t|d�jd�|�t|d�jd
�|�t|d�jd	�|�t|d�jd�|�t|d�jd
�|�t|d�jd�|�t|d�jd�|�t|d�jd�|�t|d�j|jjdf�dS)Nza/bz.gzza/b.gzz/a/bz/a/b.gzza/b.pyz/a/b.pyrrr�gzz/.gzzc/dz.c/.dz./.dz.d/.r)r+r�with_suffixrJrKrr)rr/rrr
�test_with_suffix_common/s(z)_BasePurePathTest.test_with_suffix_commoncCsR|j}|d�}|�t|j�|�t|jd�|�|�|��|d��|�|�d�|d��|�|�|d��|d��|�|�d�|d��|�|�d�|d��|�|�|d��|��|�|�d�|��|�|�dd�|��|�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|jd�|�t|j|d��dS)Nza/brDrrrza/rza/b/cza/cz/az/a/brz/a/z/cz/a/b/cz/a/c)r+rJrf�relative_torrK)rr/r,rrr
�test_relative_to_commonHs<z)_BasePurePathTest.test_relative_to_commoncCs�|j}|d�}xrtdtjd�D]^}t�||�}t�|�}|�|j|j�|�||�|�t	|�t	|��|�t
|�t
|��q WdS)Nz/a/brrP)r+�range�pickle�HIGHEST_PROTOCOL�dumps�loadsr5rRrrrr3)rr/r,�proto�dumpedr<rrr
�test_pickling_commonks
z&_BasePurePathTest.test_pickling_commonN)#r r!r"rnr-r0r9r:r=r>r?rArCrIrMr]r`rcrgrhrkrurwr~r�r�r�r�r�r�r�r�r�r�r�rrrr
r*�sJ

##r*c@sZeZdZejZdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�ZdS)�PurePosixPathTestcCs@|j}|�|d�jd�|�|d�jd�|�|d�jd�dS)Nz/a/brz///a/bz//a/bz//)r+rr�)rr/rrr
�	test_rootzszPurePosixPathTest.test_rootcCsF|j}|�|d�|d��|�|d�|d��|�|d�|d��dS)Nza/bzA/bz/az///az//a)r+r^r)rr/rrr
�test_eq�szPurePosixPathTest.test_eqcCsF|j}|�|d���d�|�|d���d�|�|d���d�dS)Nrzfile:///z/a/b.cz
file:///a/b.cz/a/b%#czfile:///a/b%25%23c)r+rrL)rr/rrr
�test_as_uri�szPurePosixPathTest.test_as_uricCsfddlm}|j}yt�d�Wntk
r>|�d�YnX|�|d���d|t�d���dS)Nr)�quote_from_bytes�éz1\xe9 cannot be encoded to the filesystem encodingu/a/bézfile:///a/b)	Zurllib.parser�r+rFrG�UnicodeEncodeError�skipTestrrL)rr�r/rrr
�test_as_uri_non_ascii�sz'PurePosixPathTest.test_as_uri_non_asciicCs|j}|�|d��d��dS)NzA.pyza.PY)r+rbra)rr/rrr
�
test_match�szPurePosixPathTest.test_matchcCs�|j}|�|����|�|d����|�|d����|�|d����|�|d����|�|d����|�|d����|�|d����dS)Nrza/b/rz/az/a/b/z//az//a/b)r+rb�is_absoluterT)rr/rrr
�test_is_absolute�sz"PurePosixPathTest.test_is_absolutecCsZ|j}|�d|d����|�d|d����|�d|d����|�d|d����dS)NFrrz/foo/barz/dev/con/PRN/NUL)r+r5�is_reserved)rr/rrr
�test_is_reserved�s
z"PurePosixPathTest.test_is_reservedcCsh|j}|d�}|�d�}|�||d��|d��d�}|�||d��|d��d�}|�||d��dS)Nz//arz//a/bz/az//cz/c)r+r;r)rr/r,r<rrr
�	test_join�s
zPurePosixPathTest.test_joincCsb|j}|d�}|d}|�||d��|d�d}|�||d��|d�d}|�||d��dS)Nz//arz//a/bz/az//cz/c)r+r)rr/r,r<rrr
�test_div�szPurePosixPathTest.test_divN)r r!r"r'�
PurePosixPathr+r�r�r�r�r�r�r�r�r�rrrr
r�ws

r�c@s�eZdZejZej��Ze�	dddgdddddgd	gd
dgd��d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Z d;S)<�PureWindowsPathTest)zc:r)zc:za/)rzc:r)zc:/r)zc:rr)zc:z/a)z/zzc:/r)z//x/yzc:/r)z//a/b)z//a/br)z//a/b/r)zc:azc:/az//a/b/z//a/b/ccCs�|�d�}|�t|�d�|�d�}|�t|�d�|�d�}|�t|�d�|�d�}|�t|�d�|�d	�}|�t|�d
�dS)Nza/b/cza\b\czc:/a/b/czc:\a\b\cz//a/bz\\a\b\z//a/b/cz\\a\b\cz	//a/b/c/dz	\\a\b\c\d)r+rr3)rr,rrr
�test_str�s




zPureWindowsPathTest.test_strcCs^|�d�|�d�|�d�|�d�|�d�|�d�|�d�|�d�|�d	�dS)
Nzc:zc:az	c:a\b.txtzc:\zc:\az
c:\a\b.txtz\\some\sharez\\some\share\az\\some\share\a\b.txt)r9)rrrr
�test_str_subclass�s







z%PureWindowsPathTest.test_str_subclasscCs�|j}|�|d�|d��|�|d�|ddd��|�|d�|d��|�|d�|d��|�|d�|d��|�|d�|d	��|�|d
�|d��|�|d�|d
��dS)Nzc:a/bzc:rrzd:a/bzc:/a/bz/a/bza/BzA/bzC:a/Bzc:A/bz//Some/SHARE/a/Bz//somE/share/A/b)r+rr^)rr/rrr
r��szPureWindowsPathTest.test_eqc	Cs�|j}|�t��|d���WdQRX|�t��|d���WdQRX|�|d���d�|�|d���d�|�|d���d�|�|d	���d
�|�|d���d�|�|d
���d�|�|d���d�dS)Nz/a/bzc:a/bzc:/zfile:///c:/zc:/a/b.czfile:///c:/a/b.cz	c:/a/b%#czfile:///c:/a/b%25%23cuc:/a/bézfile:///c:/a/b%C3%A9z
//some/share/zfile://some/share/z//some/share/a/b.czfile://some/share/a/b.cu//some/share/a/b%#céz"file://some/share/a/b%25%23c%C3%A9)r+rJrKrLr)rr/rrr
r��szPureWindowsPathTest.test_as_uricCsr|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��dS)Nzc:/b.pyz/*.pyzc:*.pyzc:/*.pyzd:/b.pyzb.pyzc:b.pyz/b.pyz//some/share/a.pyz//some/share/*.pyz//other/share/a.pyz//some/share/a/b.pyzB.pyzb.PYz	c:/a/B.Pyz	C:/A/*.pYz//Some/Share/B.Pyz//somE/sharE/*.pY)r+rTrarb)rr/rrr
rcs&z%PureWindowsPathTest.test_match_commoncs��fdd�}�j}|d�}|d�}|||���||k���||k�|d�}|d�}|||���||k���||k�dS)Ncs��||���||�dS)N)ZassertLessEqual�assertGreaterEqual)rr)rrr
�assertOrderedEqual szDPureWindowsPathTest.test_ordering_common.<locals>.assertOrderedEqualzc:A/bzC:a/Bz//some/Share/A/bz//Some/SHARE/a/B)r+rb)rr�r/r,r\r)rr
rgs

z(PureWindowsPathTest.test_ordering_commoncCsX|j}|d�}|j}|�|d�|d�}|j}|�|d�|d�}|j}|�|d�dS)Nzc:a/b)zc:rrzc:/a/b)zc:\rrz	//a/b/c/d)z\\a\b\rr)r+r4r)rr/r,r4rrr
�
test_parts/szPureWindowsPathTest.test_partscCs|j}|d�}|�|j|d��|�|jj|d��|�|jjj|d��|�|jjjj|d��|d�}|�|j|d��|�|jj|d��|�|jjj|d��|�|jjjj|d��|d	�}|�|j|d
��|�|jj|d��|�|jjj|d��dS)Nzz:a/b/czz:a/bzz:azz:zz:/a/b/czz:/a/bzz:/azz:/z	//a/b/c/dz//a/b/cz//a/b)r+rrv)rr/r,rrr
�test_parent;szPureWindowsPathTest.test_parentc	Cs�|j}|d�}|j}|�t|�d�|�|d|d��|�|d|d��|�t|�|d�|d�g�|�t��|dWdQRX|d�}|j}|�t|�d�|�|d|d��|�|d|d	��|�t|�|d�|d	�g�|�t��|dWdQRX|d
�}|j}|�t|�d�|�|d|d��|�|d|d��|�t|�|d�|d�g�|�t��|dWdQRXdS)
Nzz:a/b/ryrzz:arPzz:zz:/a/b/zz:/azz:/z	//a/b/c/dz//a/b/cz//a/b)r+rzrrWr{rJr|)rr/r,r}rrr
�test_parentsMs2z PureWindowsPathTest.test_parentscCs�|j}|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�dS)	Nzc:zc:a/bzc:/zc:/a/b/z//a/bz\\a\bz//a/b/z	//a/b/c/d)r+rr)rr/rrr
�
test_driveiszPureWindowsPathTest.test_drivecCs�|j}|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d	�jd�dS)
Nzc:rzc:a/bzc:/r)zc:/a/b/z//a/bz//a/b/z	//a/b/c/d)r+rr�)rr/rrr
r�sszPureWindowsPathTest.test_rootcCs�|j}|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d	�jd�dS)
Nzc:zc:a/bzc:/zc:\zc:/a/b/z//a/bz\\a\b\z//a/b/z	//a/b/c/d)r+rr�)rr/rrr
�test_anchor}szPureWindowsPathTest.test_anchorcCs�|j}|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d	�jd�|�|d
�jd�|�|d�jd�dS)Nzc:rzc:/zc:a/brzc:/a/bzc:a/b.pyzb.pyz	c:/a/b.pyz//My.py/Share.phpz//My.py/Share.php/a/b)r+rr�)rr/rrr
�	test_name�szPureWindowsPathTest.test_namecCs*|j}|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d	�jd�|�|d
�jd�|�|d�jd�|�|d
�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�dS)Nzc:rzc:/zc:a/bzc:/a/bzc:a/b.pyz.pyz	c:/a/b.pyz	c:a/.hgrcz
c:/a/.hgrcz
c:a/.hg.rcz.rczc:/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+rr�)rr/rrr
�test_suffix�s"zPureWindowsPathTest.test_suffixcCs:|j}|�|d�jg�|�|d�jg�|�|d�jg�|�|d�jg�|�|d�jdg�|�|d�jdg�|�|d�jg�|�|d	�jg�|�|d
�jdg�|�|d�jdg�|�|d
�jddg�|�|d�jddg�|�|d�jg�|�|d�jg�|�|d�jg�|�|d�jg�dS)Nzc:zc:/zc:a/bzc:/a/bzc:a/b.pyz.pyz	c:/a/b.pyz	c:a/.hgrcz
c:/a/.hgrcz
c:a/.hg.rcz.rczc:/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+rr�)rr/rrr
�
test_suffixes�s"z!PureWindowsPathTest.test_suffixescCs�|j}|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d�jd�|�|d	�jd�|�|d
�jd�|�|d�jd
�|�|d�jd�|�|d�jd�dS)Nzc:rzc:.zc:..z..zc:/zc:a/brzc:a/b.pyz	c:a/.hgrcz.hgrcz
c:a/.hg.rcz.hgzc:a/b.tar.gzzb.tarz!c:a/Some name. Ending with a dot.zSome name. Ending with a dot.)r+rr�)rr/rrr
�	test_stem�szPureWindowsPathTest.test_stemcCs�|j}|�|d��d�|d��|�|d��d�|d��|�|d��d�|d��|�|d��d�|d��|�t|d�jd�|�t|d	�jd�|�t|d
�jd�|�t|d�jd�|�t|d�jd�|�t|d�jd
�|�t|d�jd
�dS)Nzc:a/bzd.xmlz	c:a/d.xmlzc:/a/bz
c:/a/d.xmlzc:a/Dot ending.zc:/a/Dot ending.zc:zc:/z
//My/Sharezd:zd:ezd:/e)r+rr�rJrK)rr/rrr
�test_with_name�sz"PureWindowsPathTest.test_with_namecCs�|j}|�|d��d�|d��|�|d��d�|d��|�|d��d�|d��|�|d��d�|d��|�t|d�jd�|�t|d	�jd�|�t|d
�jd�|�t|d�jd�|�t|d�jd�|�t|d�jd
�|�t|d�jd
�|�t|d�jd�|�t|d�jd�|�t|d�jd�|�t|d�jd�|�t|d�jd�|�t|d�jd�|�t|d�jd�|�t|d�jd�dS)Nzc:a/bz.gzzc:a/b.gzzc:/a/bz	c:/a/b.gzzc:a/b.pyz	c:/a/b.pyrrrz
//My/Sharer�r)zc:z/.gzz\.gzzc:.gzzc/dzc\dz.c/dz.c\d)r+rr�rJrK)rr/rrr
�test_with_suffix�s(z$PureWindowsPathTest.test_with_suffixcCs0|j}|d�}|�|�|d��|d��|�|�d�|d��|�|�|d��|d��|�|�d�|d��|�|�d�|d��|�|�|d��|��|�|�d�|��|�t|j|��|�t|jd�|�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&��dS)'Nz	C:Foo/Barzc:zFoo/Barzc:foOZBarzc:foO/z	c:foO/baRrzd:rZFooz/FoozC:/Fooz
C:Foo/Bar/Bazz	C:Foo/Bazz
C:/Foo/Barz/Foo/Barz\Foo\Barzc:/zc:/foOzc:/foO/z
c:/foO/baRzC:/BazzC:/Foo/Bar/Bazz
C:/Foo/BazzC:Foozd:/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/Foozc:/Server/Share/Fooz
//z/Share/Fooz//Server/z/Foo)r+rr�rJrKr3)rr/r,rrr
�test_relative_to�shz$PureWindowsPathTest.test_relative_tocCs(|j}|�|����|�|d����|�|d����|�|d����|�|d����|�|d����|�|d����|�|d����|�|d����|�|d	����|�|d
����|�|d����|�|d����|�|d
����|�|d����|�|d����dS)Nrza/b/rz/az/a/b/zc:zc:azc:a/b/zc:/zc:/azc:/a/b/z//a/bz//a/b/z//a/b/cz	//a/b/c/d)r+rbr�rT)rr/rrr
r�&s"z$PureWindowsPathTest.test_is_absolutecCs�|j}|d�}|�d�}|�||d��|�d�}|�||d��|�d�}|�||d��|�d�}|�||d��|�d�}|�||d��|�d	�}|�||d��|�d
�}|�||d��dS)NzC:/a/bzx/yz
C:/a/b/x/yz/x/yzC:/x/yzD:x/yzD:/x/yz//host/share/x/yzc:x/yzc:/x/y)r+r;r)rr/r,r<rrr
r�;s 






zPureWindowsPathTest.test_joincCs�|j}|d�}|�|d|d��|�|dd|d��|�|d|d��|�|dd|d��|�|d	|d	��|�|d
d|d	��|�|d|d��|�|d
d|d��|�|d|d��|�|d
|d��|�|d|d��dS)NzC:/a/bzx/yz
C:/a/b/x/yr
�yz/x/yzC:/x/yz/xzD:x/yzD:zD:/x/yz//host/share/x/yzc:x/yzc:/x/y)r+r)rr/r,rrr
r�QszPureWindowsPathTest.test_divcCs"|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����dS)NFrrz/foo/barTZconZNULzNUL.txtZcom1zcom9.barzbar.com9Zlpt1zlpt9.barzbar.lpt9zc:/NUL/con/bazz//my/share/nul/con/aux)r+r5r�)rr/rrr
r�esz$PureWindowsPathTest.test_is_reservedN)!r r!r"r'�PureWindowsPathr+r*rn�copy�updater�r�r�r�rcrgr�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*eZdZejZdd�Zdd�Zdd�ZdS)�PurePathTestcCs0|�d�}|�t|�tjdkr$tjntj�dS)Nr�nt)r+r5r6rFr�r'r�r�)rr,rrr
�test_concrete_class{s

z PurePathTest.test_concrete_classcCs$t�d�}t�d�}|�||�dS)Nr)r'r�r�r^)rr,r\rrr
�test_different_flavours_unequal�s

z,PurePathTest.test_different_flavours_unequalc	Cs�t�d�}t�d�}|�t��||kWdQRX|�t��||kWdQRX|�t��||kWdQRX|�t��||kWdQRXdS)Nr)r'r�r�rJrf)rr,r\rrr
�!test_different_flavours_unordered�s

z.PurePathTest.test_different_flavours_unorderedN)	r r!r"r'ZPurePathr+r�r�r�rrrr
r�xsr�cGstjjtf|��S)N)rF�path�join�BASE)r
rrr
�<lambda>��r�cGstjjtf|��S)N)rFr�r�r)r
rrr
r��r�r�z)test requires a Windows-compatible systemz'test requires a POSIX-compatible systemc@seZdZejZdS)�PosixPathAsPureTestN)r r!r"r'�	PosixPathr+rrrr
r��sr�c@s"eZdZejZdd�Zdd�ZdS)�WindowsPathAsPureTestc	Cs,|j}|�t��|d���WdQRXdS)Nzc:/)r+rJ�NotImplementedError�owner)rr/rrr
�
test_owner�sz WindowsPathAsPureTest.test_ownerc	Cs,|j}|�t��|d���WdQRXdS)Nzc:/)r+rJr��group)rr/rrr
�
test_group�sz WindowsPathAsPureTest.test_groupN)r r!r"r'�WindowsPathr+r�r�rrrr
r��sr�c@s�eZdZdZdd�Zejdkr(dd�Zndd�Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zejd&d'��Zd(d)�Zd*d+�Zd,d-�Zejd.d/��Zd0d1�Zejd2d3��Zd�d5d6�Z e Z!Z"ejd7d8��Z#ejd9d:��Z$d;d<�Z%d=d>�Z&d?d@�Z'ejdAdB��Z(dCdD�Z)e*�+e,dE�dFdG��Z-e*�+e.dH�dIdJ��Z/dKdL�Z0dMdN�Z1dOdP�Z2dQdR�Z3dSdT�Z4dUdV�Z5dWdX�Z6dYdZ�Z7d[d\�Z8d]d^�Z9d_d`�Z:e;dadb��Z<dcdd�Z=dedf�Z>dgdh�Z?ejdidj��Z@dkdl�ZAdmdn�ZBeCdodp��ZDdqdr�ZEdsdt�ZFe*�+eGedu�dv�dwdx��ZHdydz�ZIe*�+eGeJd{�d|�d}d~��ZKdd��ZLd�d��ZMd�d��ZNd�d��ZOd�d��ZPd�d��ZQejd�d���ZRejd�d���ZSejd�d���ZTd�S)��
_BasePathTestz?Tests for the FS-accessing functionalities of the Path classes.c	Cs�dd�}|�|�t�t�t�td��t�td��t�td��t�tdd��t�td��ttd�d	��}|�d
�WdQRXttdd�d	��}|�d�WdQRXttdd
�d	��}|�d�WdQRXttddd�d	��}|�d�WdQRXt�td�d�t�	��r�t�
dtd��t�
dtd��|�dtd��|�tj�dd�tdd��|�tj�dd�tdd��t�
dtd��dS)NcSst�td�d�t�t�dS)N�dirEi�)rF�chmodr�r�rmtreer�rrrr
�cleanup�sz$_BasePathTest.setUp.<locals>.cleanup�dirA�dirB�dirCZdirDr��fileA�wbsthis is file A
�fileBsthis is file B
ZfileCsthis is file C
ZfileDsthis is file D
r�linkAznon-existing�
brokenLink�linkBz..�linkC�linkD�brokenLinkLoop)
�
addCleanuprF�mkdirr�r��open�writer�r�can_symlink�symlink�dirlinkr�)rr�rrrr
r-�s0


z_BasePathTest.setUpr�cCstj||dd�dS)NT)�target_is_directory)rFr�)r�src�destrrr
r��sz_BasePathTest.dirlinkcCst�||�dS)N)rFr�)rr�r�rrr
r��scCs*|�tj�t|�t|��d||f�dS)Nz&%r and %r don't point to the same file)rTrFr��samefiler3)r�path_a�path_brrr
�
assertSame�sz_BasePathTest.assertSamec	Os6|�t��}|||�WdQRX|�|jjtj�dS)N)rJ�FileNotFoundErrorr�	exception�errno�ENOENT)r�funcr7�kwargs�cmrrr
�assertFileNotFound�sz _BasePathTest.assertFileNotFoundcCs |�tj�|�tj�|��dS)N)rrFr��normcase)rr�r�rrr
�assertEqualNormCase�sz!_BasePathTest.assertEqualNormCasecCsT|�t���}|�||�|�t|�t|��|�t|�t|��|�|�	��dS)N)
r+rF�getcwdrr�r3r5r6rTr�)rr,r\rrr
�	_test_cwd�s
z_BasePathTest._test_cwdcCs|j��}|�|�dS)N)r+�cwdr�)rr,rrr
�test_cwds
z_BasePathTest.test_cwdcCsX|�tj�d��}|�||�|�t|�t|��|�t|�t|��|�	|�
��dS)N�~)r+rFr��
expanduserrr�r3r5r6rTr�)rr,r\rrr
�
_test_homes
z_BasePathTest._test_homecCs|j��}|�|�dS)N)r+�homer)rr,rrr
�	test_homes
z_BasePathTest.test_homecCs�tj�td�}tj�tdd�}|�|�}|�|�}|�|�}|�|�|��|�|�|��|�|�|��|�|�|��tj�td�}|�|�}|�t	|j|�|�t	|j|�|�t	|j|�|�t	|j|�|�t	|j|�|�t	|j|�dS)Nr�r�r��foo)
rFr�r�r�r+rTr�rbrJr�)rZ
fileA_pathZ
fileB_pathr,r<r\Znon_existentrZrrr
�
test_samefiles"



z_BasePathTest.test_samefilecCs$|�d�}|�|��t�d��dS)Nrr)r+r�statrF)rr,rrr
�test_empty_path's
z_BasePathTest.test_empty_pathcCs�|j}|d�}|�|��|tj�d���|d�}|�|��|�|d�}|�|��|�|d�}|�|��|�||d���j�d}|�|��|�dS)Nrrz/~z../~r)r+rrrFr��absoluter�)rr/r,rrr
�test_expanduser_common,sz$_BasePathTest.test_expanduser_commoncCs�|j}|t�}|�d|���|�d|d���|�d|d���|�d|dd���t��r�|�d|d���|�d|d���|�d|dd���|�d|dd���|�d|d	���|�d|d
����dS)NTr�r�F�bahr�r�r�rz/xyzzy)r+r�r5�existsrr�)rr/r,rrr
�test_exists9sz_BasePathTest.test_existsc	Cs�|�t�}|d�d��$}|�|tj�|�|��d�WdQRX|d�d��(}|�|tj�|�|���	�d�WdQRX|djddd��(}|�|tj
�|�|���	�d�WdQRXdS)Nr�rZzthis is file A
�rbsthis is file Ar)�	buffering)r+r�r�r.�io�
TextIOBaser�read�BufferedIOBase�strip�	RawIOBase)rr,rrrr
�test_open_commonHs
z_BasePathTest.test_open_commoncCsX|�t�}|d�d�|�|d��d�|�t|djd�|�|d��d�dS)Nr�sabcdefgZsomestr)r+r�Zwrite_bytesrZ
read_bytesrJrf)rr,rrr
�test_read_write_bytesTs

z#_BasePathTest.test_read_write_bytescCsf|�t�}|djddd�|�|djddd�d�|�t|djd	�|�|djdd�d�dS)
Nr�uäbcdefgzlatin-1)�encodingzutf-8�ignore)r�errorsZbcdefgs	somebytes)r+r�Z
write_textrZ	read_textrJrf)rr,rrr
�test_read_write_text\s
z"_BasePathTest.test_read_write_textcsb|j��t�}|��}t|�}dddddg}t��rD|dddd	g7}|�|�fd
d�|D��dS)Nr�r�r�r�r�r�r�r�r�csh|]}�t|��qSr)r�)r	r\)r/rr
�	<setcomp>msz-_BasePathTest.test_iterdir.<locals>.<setcomp>)r+r��iterdir�setrr�r)rr,�it�pathsrr)r/r
�test_iterdiresz_BasePathTest.test_iterdircs>|j��td�}t|���}�fdd�dD�}|�||�dS)Nr�csh|]}�td|��qS)r�)r�)r	r\)r/rr
rusz5_BasePathTest.test_iterdir_symlink.<locals>.<setcomp>)r�r�)r+r�r rr)rr,r"rr)r/r
�test_iterdir_symlinkos

z"_BasePathTest.test_iterdir_symlinkc	CsN|�td�}|�t��}t|���WdQRX|�|jjtj	tj
tjf�dS)Nr�)r+r�rJ�OSError�nextr�assertInr�r�ZENOTDIRr�ZEINVAL)rr,r�rrr
�test_iterdir_nodirxs
z _BasePathTest.test_iterdir_nodircs��fdd�}�j��t�}|�d�}��|tjj�||dg�||�d�g�||�d�ddg�t��s�||�d�d	dg�n||�d�d	dd
g�t��s�||�d�dg�n||�d�ddd
dg�t��s�||�d�dg�n||�d�dd
g�dS)Ncs"��t|��fdd�|D��dS)Ncsh|]}�t|��qSr)r�)r	r\)r/rr
r�szA_BasePathTest.test_glob_common.<locals>._check.<locals>.<setcomp>)rr )�globr)r/rrr
�_check�sz._BasePathTest.test_glob_common.<locals>._checkr�r�z
dir*/file*z
dirB/fileBz
dirC/fileCz*Ar�r�z*B/*z
dirB/linkDzlinkB/fileBzlinkB/linkDz*/fileB)	r+r�r)r.�collectionsre�Iteratorrr�)rr*r,r!r)r/rr
�test_glob_common�s$

z_BasePathTest.test_glob_commoncs���fdd�}�j��t�}|�d�}��|tjj�||dg�||�d�dg�||�d�g�t��s�||�d�dg�n||�d�ddd	d
g�||�d�dddd
g��td�}||�d�dd
g�||�d�d
g�dS)Ncs"��t|��fdd�|D��dS)Ncsh|]}�t|��qSr)r�)r	r\)r/rr
r�szB_BasePathTest.test_rglob_common.<locals>._check.<locals>.<setcomp>)rr )r)r)r/rrr
r*�sz/_BasePathTest.test_rglob_common.<locals>._checkr�r�z
dirB/fileBz*/fileAz*/fileBzdirB/linkD/fileBzlinkB/fileBzdirA/linkC/fileBzfile*z
dirC/fileCzdirC/dirD/fileDr�z*/*)	r+r��rglobr.r+rer,rr�)rr*r,r!r)r/rr
�test_rglob_common�s"



z_BasePathTest.test_rglob_commoncs\|j}|t��t��d��}dddddddd	d
ddd
dddh}|�|�fdd�|D��dS)N�*r�r�z
dirA/linkCr�z
dirB/fileBz
dirB/linkDr�z	dirC/dirDzdirC/dirD/fileDz
dirC/fileCr�r�r�r�r�csh|]}�|�qSrr)r	r
)r,rr
r�sz8_BasePathTest.test_rglob_symlink_loop.<locals>.<setcomp>)r+r�r r.r)rr/�given�expectr)r,r
�test_rglob_symlink_loop�sz%_BasePathTest.test_rglob_symlink_loopcCsf|j}|t�}|�t|�d��|td�h�|�t|�d��|td�h�|�t|�d��t��dS)Nz..z
dirA/../file*z
dirA/../fileAz../xyzzy)r+r�rr r))rr/r,rrr
�test_glob_dotdot�s
z_BasePathTest.test_glob_dotdotc	Cs.|j}|t�d}|��|d}|��|d}|��|d}|d}|�|d�t�d��0}tt�	|��|_
|�tt
|�d���d	�WdQRX|��t�d��0}tt�	|��|_
|�tt
|�d���d
�WdQRX|�d�t�d��0}tt�	|��|_
|�tt
|�d���d
�WdQRXdS)NZpermissions�file1�file2�subdir�file3�otherz
os.scandirr0rx�r)r+r�r��touch�
symlink_tor�patch�sortedrF�scandirZreturn_valuerrWr r)r�)rr/�baser5r6r7r8r?rrr
�test_glob_permissions�s*$$
z#_BasePathTest.test_glob_permissionsTcCs|�|�}|�||�dS)N)�resolver)rr,r�strictr\rrr
�_check_resolve�s
z_BasePathTest._check_resolvec
Cs�|j}|td�}|�t��}|jdd�WdQRX|�|jjtj�|�	t
|jdd��tj�
td��|tddd�}|�	t
|jdd��tj�
tddd��|tdddd�}|�	t
|jdd��tj�tj�
ddd���|tdd	�}|�||�|td
�}|�||td��|tdd
d	�}|�||tdd	��|tddd	�}|�||tdd	��|tdd
d	ddd�}|�||tdd	ddd�d�|tdd
dddd�}tjdk�r�|�||tdddd�d�n|�||tddd�d�t�tjdt��d��}|�tj|�t�tj�
|�t
dd��t�t
d�tj�
|d��|tdddd	�}|�||tdd	��|tdddddd�}|�||tdddd�d�|tddddddd�}tjdk�r�|�|||ddd�d�n|�||tddd�d�dS)NrT)rCF�inZspamz..r�r�r�r�r�r�r�r�z-dirD)r��dir�linkX�linkY)r+r�rJr%rBrr�r�r�r�r3rFr�r��abspath�_check_resolve_relativer�rZ	_longpath�tempfileZmkdtempr�r�r�r��_check_resolve_absolute)rr/r,r�rrrr
�test_resolve_common�sT


z!_BasePathTest.test_resolve_commoncCs�|�t�}|�dtd��|�tj�dd�td��|�tj�dd�td��|d}|�|jdd�|�|dd}|jt	|jdd�|�|jd	d�|dd�dS)
Nr�0�1�2T)rC�3�4F)
r+r�r�r�rFr�rrBrJr�)rr,r\rZrrr
�test_resolve_dot1s
z_BasePathTest.test_resolve_dotc	Cs�|�t�}|��}|��}t|�|�WdQRX|�tt|�|�tt|�|�t|j�|�t|j�|�t|j�|�t|j	�dS)N)
r+r�rr&rJrKr�rBr�	__enter__)rr,r!Zit2rrr
�	test_with?s

z_BasePathTest.test_withcCsd|�t�d}|��j}|d@}|�|�|�|��j|�|dB}|�|�|�|��j|�dS)Nr�im����)r+r�r	�st_moder�r)rr,�modeZnew_moderrr
�
test_chmodNs


z_BasePathTest.test_chmodcCsZ|�t�d}|��}|�|��|�|�|jdA�|�|j|j�|�|��|�dS)Nr�rV)r+r�r	rr�rWr�r^)rr,�strrr
�	test_stat\sz_BasePathTest.test_statcCs*|�t�d}|��}|�||���dS)Nr�)r+r�r	r^�lstat)rr,rZrrr
�
test_lstatesz_BasePathTest.test_lstatcCs*|�t�d}|��}|�||���dS)Nr�)r+r�r	rr\)rr,rZrrr
�test_lstat_nosymlinkksz"_BasePathTest.test_lstat_nosymlinkz&the pwd module is needed for this testcCs`|�t�d}|��j}yt�|�j}Wn"tk
rJ|�d|�YnX|�	||�
��dS)Nr�z4user %d doesn't have an entry in the system database)r+r�r	�st_uid�pwd�getpwuid�pw_name�KeyErrorr�rr�)rr,Zuidr�rrr
r�ps
z_BasePathTest.test_ownerz&the grp module is needed for this testcCs`|�t�d}|��j}yt�|�j}Wn"tk
rJ|�d|�YnX|�	||�
��dS)Nr�z5group %d doesn't have an entry in the system database)r+r�r	�st_gid�grpZgetgrgidZgr_namercr�rr�)rr,�gidr�rrr
r�{s
z_BasePathTest.test_groupcCs2|�t�d}|��|�|j�|�|j�dS)Nr�)r+r��unlinkr�r	)rr,rrr
�test_unlink�sz_BasePathTest.test_unlinkcCsL|�t�d}x|��D]}|��qW|��|�|j�|�|j�dS)Nr�)r+r�rrg�rmdirr�r	)rr,r\rrr
�
test_rmdir�sz_BasePathTest.test_rmdircCs�|�t�}|d}|��j}|dd}|�|�|�|��j|�|�|j�td�}|�|�|�t�|�j|�|�|j�dS)Nr�r��fileAAZfileAAA)	r+r�r	�st_size�renamerr��rel_joinrF)rr/r,�sizer\rZrrr
�test_rename�s



z_BasePathTest.test_renamecCs�|�t�}|d}|��j}|dd}|�|�|�|��j|�|�|j�tdd�}|�|�|�t�|�j|�|�|j�dS)Nr�r�rkr�r�)	r+r�r	rlrrr�rnrF)rr/r,ror\rZrrr
�test_replace�s




z_BasePathTest.test_replacecCs�|�t�}|d}|�|���|��|�|���|��}|j}|j}t	�
t|�|d|df�|��|��}|�|j|�|�|j|�|d}|�|���|jddd�|�|���|j
t|jdd�dS)NZnewfileA�
ZnewfileBi�F)rX�exist_ok)rs)r+r�rbrr;rTr	�st_mtime�st_mtime_nsrF�utimer3r�rJr%)rr/r,rZZ	old_mtimeZold_mtime_nsrrr
�test_touch_common�s$
z_BasePathTest.test_touch_commonc	CsH|�t�}|d}|��|�d��}|�|����d�WdQRXdS)Nr�rsthis is file A)r+r�r;r�rrr)rr/r,rrrr
�test_touch_nochange�s

z!_BasePathTest.test_touch_nochangec	Csx|�t�}|d}|�|���|��|�|���|�|���|�t��}|��WdQRX|�	|j
jtj�dS)NZnewdirA)
r+r�rbrr�rT�is_dirrJr%rr�r��EEXIST)rr/r,r�rrr
�
test_mkdir�s
z_BasePathTest.test_mkdirc	Cs6|�tdd�}|�|���|�t��}|��WdQRX|�|jj	t	j
�|jdd�|�|���|�|���|�t��}|jdd�WdQRX|�|jj	t	j
�t�|��j�}|�tdd�}|jddd�|�|���|�|���tjdk�r|�t�|��j�d	|@�|�t�|j��j�|�dS)
NZnewdirB�newdirCT)rzZnewdirDZnewdirEimr�im)r+r�rbrrJr%r�rr�r�r�rTryrzr	�S_IMODErWrFr�rv)rr,r�rXrrr
�test_mkdir_parents�s&z _BasePathTest.test_mkdir_parentsc	Cs�|�td�}|��j}|�|���|�|���|�t��}|�	�WdQRX|�
|jjtj
�|j	dd�|�|���|�
|��j|�dS)Nr�T)rs)r+r�r	�st_ctimerTrryrJ�FileExistsErrorr�rr�r�rz)rr,�st_ctime_firstr�rrr
�test_mkdir_exist_ok�s
z!_BasePathTest.test_mkdir_exist_okc	Cs�|�td�}|�|���|�t��}|��WdQRX|�|jj	t	j
�|d}|jdd�|��j}|�|���|�t��}|jdd�WdQRX|�|jj	t	j
�|jddd�|�|���|�|��j|�dS)Nr�r|T)rz)rzrs)
r+r�rTrrJr�r�rr�r�rzr	r)rr,r�r�rrr
�test_mkdir_exist_ok_with_parents
z-_BasePathTest.test_mkdir_exist_ok_with_parentcCs2|�d���jdd�|�d���jddd�dS)NrT)rs)rzrs)r+rBr�)rrrr
�test_mkdir_exist_ok_rootsz&_BasePathTest.test_mkdir_exist_ok_rootc	Cs^x.dD]}|�|d�}|��sPqW|�d�|�t��|ddjdd�WdQRXdS)NZZYXWVUTSRQPONMLKJIHGFEDCBAz:\z&cannot find a drive that doesn't existZchildr�T)rz)r+ryr�rJr%r�)rrr,rrr
�test_mkdir_with_unknown_drives

z+_BasePathTest.test_mkdir_with_unknown_drivec	Cs�|�tdd�}|�|���|�t��}|jdd�WdQRX|�|jj	t	j
�|�t��}|jddd�WdQRX|�|jj	t	j
�dS)Nr�r�T)rz)rzrs)r+r�rTrrJr�r�rr�r�rz)rr,r�rrr
�test_mkdir_with_child_file"sz(_BasePathTest.test_mkdir_with_child_filec	Cs�|�td�}|�|���|�t��}|��WdQRX|�|jj	t	j
�|�t��}|jdd�WdQRX|�|jj	t	j
�dS)Nr�T)rs)r+r�rTrrJr�r�rr�r�rz)rr,r�rrr
�test_mkdir_no_parents_file.sz(_BasePathTest.test_mkdir_no_parents_filec
s�x�td�D]ȉ|�td��}|�|���d��fdd�	}�fdd�td�D��t��|d	d
}y*t�d|��|jdd
d�WdQRXWn$t	k
r�|�
t|���YnX|�t|���|�
|���q
WdS)N� zdirCPC%d�cs6t|�}���r&t�||���|�t�||�dS)N)r3�poprFr��add)r�rX)�concurrently_created�patternrr
�my_mkdir?s

zE_BasePathTest.test_mkdir_concurrent_parent_creation.<locals>.my_mkdircsg|]}t�d|>@��qS)rP)�bool)r	�n)�pattern_numrr
rKszG_BasePathTest.test_mkdir_concurrent_parent_creation.<locals>.<listcomp>�Zdir1Zdir2zpathlib._normal_accessor.mkdirTF)rzrs)r�)r�r+r�rbrr rr=r�r�r'r3ZassertNotInrT)rr,r�Zp12r)r�r�r�r
�%test_mkdir_concurrent_parent_creation:sz3_BasePathTest.test_mkdir_concurrent_parent_creationcCs|�t�}|d}|dd}|�|�|�|��|���|�|��|���|dd}|�t|��|�|��|���|�|��|���|�|�	��|d}|dd}|j|dd�|�|��|���|�|��|���|�
|�	��|�
t|����dS)	Nr�r�ZlinkAAZlinkAAAr�ZlinkAAAAT)r�)
r+r�r<rr	r^r\r3rbryrTr{r)rr/�target�linkrrr
�test_symlink_toWs$

z_BasePathTest.test_symlink_tocCs�|�t�}|�|d���|�|d���|�|d���|�|dd���t��r�|�|d���|�|d���|�|d���dS)Nr�r�znon-existingr
r�r�r�)r+r�rTryrbrr�)rr/rrr
�test_is_diros
z_BasePathTest.test_is_dircCs�|�t�}|�|d���|�|d���|�|d���|�|dd���t��r�|�|d���|�|d���|�|d���dS)Nr�r�znon-existingr
r�r�r�)r+r�rT�is_filerbrr�)rr/rrr
�test_is_filezs
z_BasePathTest.test_is_filecCs�|�t�}|�d�}|�|d���|�|d���|�|d���|�|dd���|�|���t��r�|�|d���dS)Nrr�r�znon-existingr
r�)r+r�rbZis_mountrTrr�)rr/�Rrrr
�
test_is_mount�s

z_BasePathTest.test_is_mountcCs�|�t�}|�|d���|�|d���|�|d���|�|dd���t��r�|�|d���|�|d���|�|d���dS)Nr�r�znon-existingr
r�r�r�)r+r�rb�
is_symlinkrr�rT)rr/rrr
�test_is_symlink�s
z_BasePathTest.test_is_symlinkcCsZ|�t�}|�|d���|�|d���|�|d���|�|dd���dS)Nr�r�znon-existingr
)r+r�rb�is_fifo)rr/rrr
�test_is_fifo_false�s

z _BasePathTest.test_is_fifo_false�mkfifozos.mkfifo() requiredc
Cs~|�td�}yt�t|��Wn0tk
rN}z|�d|�Wdd}~XYnX|�|���|�	|�
��|�	|���dS)NZmyfifozos.mkfifo(): %s)r+r�rFr�r3�PermissionErrorr�rTr�rb�	is_socketr�)rr/�errr
�test_is_fifo_true�s z_BasePathTest.test_is_fifo_truecCsZ|�t�}|�|d���|�|d���|�|d���|�|dd���dS)Nr�r�znon-existingr
)r+r�rbr�)rr/rrr
�test_is_socket_false�s

z"_BasePathTest.test_is_socket_false�AF_UNIXzUnix sockets requiredc
Cs�|�td�}t�tjtj�}|�|j�y|�t|��WnJt	k
r�}z,t
|t�sbdt|�krt|�dt|��Wdd}~XYnX|�
|���|�|���|�|���dS)NZmysockzAF_UNIX path too longzcannot bind Unix socket: )r+r��socketr�ZSOCK_STREAMr��closeZbindr3r%�
isinstancer�r�rTr�rbr�r�)rr/Zsockr�rrr
�test_is_socket_true�s
$z!_BasePathTest.test_is_socket_truecCsZ|�t�}|�|d���|�|d���|�|d���|�|dd���dS)Nr�r�znon-existingr
)r+r�rb�is_block_device)rr/rrr
�test_is_block_device_false�s

z(_BasePathTest.test_is_block_device_falsecCsZ|�t�}|�|d���|�|d���|�|d���|�|dd���dS)Nr�r�znon-existingr
)r+r�rb�is_char_device)rr/rrr
�test_is_char_device_false�s

z'_BasePathTest.test_is_char_device_falsecCsJ|�d�}|��s|�d�|�|���|�|���|�|���dS)Nz	/dev/nullz/dev/null required)r+rr�rTr�rbr�r�)rr/rrr
�test_is_char_device_true�s

z&_BasePathTest.test_is_char_device_truecCsT|�td�}xBtdtjd�D].}t�||�}t�|�}|�|��|���qWdS)Nr�rrP)	r+r�r�r�r�r�r�rr	)rr,r�r�r<rrr
r��s

z"_BasePathTest.test_pickling_commoncCsJ|j}|d�}|d�}|�|jd|jd�|�|jd|jd�dS)Nz/usr/bin/fooz/usr/local/binrPryrx)r+r5r4)rr/r,r\rrr
�test_parts_interning�s
z"_BasePathTest.test_parts_interningc	Cs�|�t�}|�tj�dd�td��|�tj�dd�td��|�tj�dd�td��|�|td��|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�Wdt�|�XdS)NZlink0Zlink1Zlink2Zlink3)r+r�r�rFr�r�rBrr�r3r��chdir)rZlink0_targetr/r,Zold_pathrrr
�_check_complex_symlinks�sB

z%_BasePathTest._check_complex_symlinkscCs|�t�dS)N)r�r�)rrrr
�test_complex_symlinks_absolutesz,_BasePathTest.test_complex_symlinks_absolutecCs|�d�dS)Nr)r�)rrrr
�test_complex_symlinks_relativesz,_BasePathTest.test_complex_symlinks_relativecCs|�tj�dd��dS)Nr�z..)r�rFr�r�)rrrr
�&test_complex_symlinks_relative_dot_dotsz4_BasePathTest.test_complex_symlinks_relative_dot_dotN)T)Ur r!r"�__doc__r-rFr�r�r�r�r�r�rrrrr
rrrrrr#r�skip_unless_symlinkr$r(r-r/r3r4rArDrJrLrMrSrUrYr[r]r^�unittest�
skipUnlessr`r�rer�rhrjrprqrwrxr{r~r�r�r��only_ntr�r�r�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*eZdZejZdd�Zdd�Zdd�ZdS)�PathTestcCs0|�d�}|�t|�tjdkr$tjntj�dS)Nrr�)r+r5r6rFr�r'r�r�)rr,rrr
r�$s

zPathTest.test_concrete_classcCs,tjdkr|�ttj�n|�ttj�dS)Nr�)rFr�rJr�r'r�r�)rrrr
�test_unsupported_flavour)s
z!PathTest.test_unsupported_flavourc	Cs2|��}|�td��t|�d��WdQRXdS)NzUnacceptable patternr)r+ZassertRaisesRegexrKr{r))rr,rrr
�test_glob_empty_pattern/sz PathTest.test_glob_empty_patternN)	r r!r"r'�Pathr+r�r�r�rrrr
r�!sr�c@s�eZdZejZdd�dd�Zdd�Zdd�Ze	j
d	d
��Zdd�Zd
d�Z
e�eed�d�dd��Ze�ejdkd�dd��ZdS)�
PosixPathTestT)rCc	Gs2|j|�}|�t��t|�|��WdQRXdS)N)r+rJ�RuntimeError�printrB)rrCr7r�rrr
�_check_symlink_loop9s
z!PosixPathTest._check_symlink_loopc	Cs�t�d�}|�tj|�|�t�}|d�d��WdQRXt�td��}|�t�	|j
�d�t�d�|d�d��WdQRXt�td��}|�t�	|j
�d�dS)Nr�new_filer�i���other_new_filei�)rF�umaskr�r+r�r�r	r�rr}rW)r�old_maskr,rZrrr
�test_open_mode>s




zPosixPathTest.test_open_modecCs�t�d�}|�tj|�|�t�}|d��t�td��}|�t�	|j
�d�t�d�|d��t�td��}|�t�	|j
�d�|djdd	�t�td��}|�t�	|j
�d�dS)
Nrr�i�r�r�i�Zmasked_new_filei�)rX)rFr�r�r+r�r;r	r�rr}rW)rr�r,rZrrr
�test_touch_modeLs


zPosixPathTest.test_touch_modecCs�t�dtd��|�td�t�dtd��|�td�t�dtd��|�td�|jtdddd�t�td	�td
��|�td
�t�td�td��|�td�t�td�td
��|�td
�|jtd
ddd�dS)NzlinkX/insiderGrHzlinkZ/../linkZZlinkZrF)rCzlinkU/insideZlinkUZlinkVzlinkW/../linkWZlinkW)rFr�r�r�r�)rrrr
�test_resolve_loop[szPosixPathTest.test_resolve_loopcCsX|j}|t�}t|�d��}t�t�s,t�n|}|�||�|�t|�d��t��dS)N�FILEazFILEa*)r+r�r r)r�fs_is_case_insensitiver)rr/r,r1r2rrr
�	test_globpszPosixPathTest.test_globcCsZ|j}|td�}t|�d��}t�t�s.t�n|}|�||�|�t|�d��t��dS)Nr��FILEdzFILEd*)r+r�r r.rr�r)rr/r,r1r2rrr
�
test_rglobxs
zPosixPathTest.test_rglob�getpwallz%pwd module does not expose getpwall()c	Cs|j}t�d�ddl}|�t���}|j}|j�	d�p:d}x8|�
�D]$}|j}|j�	d�}||krF|rFPqFW|}|}|d�}|d|d�}	|d|d�}
|d|d�}|d|d�}|d	�}
|d
�}t����"}|�dd�|�
|��||�d�|�
|	��||�d�|�
|
��||�d�|�
|��|�|�
|��|�|�
|
��|
�|�t|j�d
|d<|�
|��|d��|�
|	��||�d�|�
|
��||�d�|�
|��|�|�
|��|�|�
|
��|
�|�t|j�WdQRXdS)Nr`rrz~/Documentsrz
/Documentsz../~z/~rz~fakeuser/Documents�HOMEZ	Documentsz/tmpz/tmp/Documents)r+r�
import_moduler`rarF�getuidrb�pw_dir�rstripr��EnvironmentVarGuardr�rrrJr�)rr/r`ZpwdentZusername�userhomeZ	othernameZ	otherhome�p1�p2�p3�p4�p5�p6Zp7�envrrr
�test_expanduser�sJ
zPosixPathTest.test_expanduser�darwinz1Bad file descriptor in /dev/fd affects only macOSc
Cs�y|tt�d��d��dd�}|s,|�d�xL|D]D}|��|��|��|��|�	�|�
�|��|��q2WWn:t
k
r�}z|jtjkr�|�d��Wdd}~XYnXdS)Nz/dev/fdr0rxz.no file descriptors - issue was not reproducedz Bad file descriptor not handled.)r{r'r�r.r�rryr�r�r�r�r�r�r%r�ZEBADFZfail)rZfile_descriptorsrr�rrr
�test_handling_bad_descriptor�s"


z*PosixPathTest.test_handling_bad_descriptorN)r r!r"r'r�r+r�r�r�rr�r�r�r�r�r�r�r`r��skipIf�sys�platformr�rrrr
r�5s.r�c@s*eZdZejZdd�Zdd�Zdd�ZdS)�WindowsPathTestcCs�|j}|t�}|�t|�d��|td�h�|�t|�d��|td�h�|�ttt|�d���|�d�h�|�ttt|�d���|�d�h�dS)Nr�r�zF*az\FILEaz\fileA)r+r�rr r)�mapr3)rr/r,rrr
r��s$zWindowsPathTest.test_globcCsV|j}|td�}|�t|�d��|td�h�|�ttt|�d���|�d�h�dS)Nr�r�zdirC/dirD/fileDz\dirD\FILEd)r+r�rr r.r�r3)rr/r,rrr
r��s
zWindowsPathTest.test_rglobc
sb�j�t����H���dd���dd���dd���dd�d�d<�d���d���d	���d
���d���d����t�j���t�j���t�j�������������������������������f	d
d�}d�d<|���dd�d�d<|�d�d<d�d<|���dd���dd�d�d<|�WdQRXdS)Nr�ZUSERPROFILEZHOMEPATHZ	HOMEDRIVE�alice�USERNAMEz~/My Documentsz~alice/My Documentsz~bob/My Documentsz/~/My Documentszd:~/My Documentsrcs���dd�������d����t�j�d�d<������d��������d�����������������������dS)Nr�zC:/Users/alice/My Documentsr�zC:/Users/bob/My Documents)r�rrrJrcr)	r/r�r�r�r�r�r�r�rrr
r�s





z.WindowsPathTest.test_expanduser.<locals>.checkzC:\Users\alicezC:\zUsers\alice)r+rr�r�rJr�rr)rrr)	r/r�r�r�r�r�r�r�rr
r��s@zWindowsPathTest.test_expanduserN)	r r!r"r'r�r+r�r�r�rrrr
r��sr��__main__)/Zcollections.abcr+rrFr�r�r'r�r�r	rKr�rZtestrZtest.supportrrrer`�ImportError�objectrZTestCaser#r(r*r�r�r�r��realpathr�r�rnr�r�r�r�r�r�r�r�r�r�r �mainrrrr
�<module>sp)$BTL8tI