Server : LiteSpeed
System : Linux server51.dnsbootclub.com 4.18.0-553.62.1.lve.el8.x86_64 #1 SMP Mon Jul 21 17:50:35 UTC 2025 x86_64
User : nandedex ( 1060)
PHP Version : 8.1.33
Disable Function : NONE
Directory :  /opt/cppython/lib/python3.8/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]


Current File : //opt/cppython/lib/python3.8/test/__pycache__/test_os.cpython-38.opt-2.pyc
U

>��gZ�	@s&ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddlmZzddlZWnek
�rdZYnXzddl Z Wnek
�r6dZ YnXzddl!Z!Wnek
�r^dZ!YnXzddl"Z"dd�e"�#�D�Z$Wnee%fk
�r�gZ$YnXzddl&m'Z'm(Z(Wn ek
�r�ej)Z'Z(YnXddl*m+Z+ddl,m-Z-m.Z.d	Z/e0ed
��re�1�dkZ/e0ed��r2ej2j3�r2ej2j3�4d�Z5nd	Z5ej�4d
��oNe�6�dkZ7dd�Z8d�dd�Z9Gdd�dej:�Z;Gdd�dej:�Z<Gdd�dej:�Z=Gdd�dej:�Z>ddlm?Z?Gdd�de?j@�ZAGdd�dej:�ZBe�Ce0ed �d!�Gd"d#�d#eB��ZDGd$d%�d%eB�ZEe�Ce0ed �d!�Gd&d'�d'eD��ZFGd(d)�d)ej:�ZGe�Ce0ed*�d+�Gd,d-�d-ej:��ZHGd.d/�d/ej:�ZIGd0d1�d1ej:�ZJGd2d3�d3ej:�ZKe�Ce0ed4�d5�Gd6d7�d7ej:��ZLe�Md8�d9k�p�e�Md:�d9k�p�e�Md;�d9kZNe�OeNd<�e�Oejd=kd>�Gd?d@�d@ej:���ZPejQd�dAdB��ZRe�Ce0edC�dD�GdEdF�dFej:��ZSe�CejdGkdH�GdIdJ�dJej:��ZTGdKdL�dLej:�ZUGdMdN�dNej:�ZVe�OejdGkdO�GdPdQ�dQej:��ZWe�OejdGkdO�GdRdS�dSej:��ZXe�CejdGkdH�GdTdU�dUej:��ZYe�CejdGkdH�GdVdW�dWej:��ZZe�Ce0edX�dY�GdZd[�d[ej:��Z[e�CejdGkdH�ej\Gd\d]�d]ej:���Z]e�CejdGkdH�Gd^d_�d_ej:��Z^e�CejdGkdH�Gd`da�daej:��Z_ej\Gdbdc�dcej:��Z`Gddde�deej:�ZaGdfdg�dgej:�ZbGdhdi�diej:�ZcGdjdk�dkej:�Zde�edl�e�Ce0edm�dn�Gdodp�dpej:���Zfe�Ce0edq��ode0edr�ds�Gdtdu�duej:��ZgGdvdw�dwejheji�Zje�Ce0edx�dy�Gdzd{�d{ej:��Zkd|d}�Zle�Cel�d~�e�mdd�d��Gd�d��d�ej:���Zne�Ce0ed��d��Gd�d��d�ej:��Zoe�Ce0ed��d��e�md�d��Gd�d��d�ej:���ZpGd�d��d�ej:�ZqGd�d��d�ej:�ZrGd�d��d�ej:�ZsGd�d��d�ej:�Zte�Ce0ed��d��Gd�d��d�ej:��ZuGd�d��d�ej:�ZvGd�d��d�ej:�ZwGd�d��d�ej:�ZxGd�d��d�ej:�Zye0ed���rGd�d��d�ex�Zze{d�k�r"e�|�dS)��N)�support)�win32_is_iotcCsg|]
}|j�qS�)�pw_uid)�.0�urr�+/opt/cppython/lib/python3.8/test/test_os.py�
<listcomp>0sr	)�INT_MAX�PY_SSIZE_T_MAX��assert_python_ok)�
unix_shell�FakePathF�geteuid�thread_infoZlinuxthreadsZfreebsdcCst�tt|�d|�S)Nzrequires os.%s)�unittest�
skipUnless�hasattr�os��namerrr�requires_os_funcMsr�contentc	Cs&t|dd��}|�|�W5QRXdS)N�xbr)�open�write)�filenameZcontent�fprrr�create_fileQsrc@s$eZdZdd�Zdd�Zdd�ZdS)�	MiscTestscCst��}|�|t�dS�N)r�getcwd�assertIsInstance�str��self�cwdrrr�test_getcwdWszMiscTests.test_getcwdc
CsNd}d}d}|d|t|�}t����}t�|���}|}t��}|�||�|t|�ttjj	�}|dkrv�qt|�|kr�|dkr�|d|�}tj�
||�}zt�|�t�|�WnXt
k
r�Y�qYn@tk
�r}	z |	jtjk�rWY��qn�W5d}	~	XYnX|}q>tj�r6tdt|����W5QRXW5QRXdS)Ni���Zpython_test_dir_�arz!Tested current directory length: )�len�tempfile�TemporaryDirectoryrZ
change_cwdrr"�assertEqual�path�sep�join�mkdir�chdir�FileNotFoundError�OSError�errnoZENAMETOOLONG�verbose�print)
r&Zmin_lenZdirlen�dirnameZtmpdirr/�expectedr'Zneed�excrrr�test_getcwd_long_path[s6

zMiscTests.test_getcwd_long_pathcCs.t��}|�|t�|�t�|�t���dSr!)r�getcwdbr#�bytesr.�fsdecoder"r%rrr�test_getcwdb�szMiscTests.test_getcwdbN)�__name__�
__module__�__qualname__r(r<r@rrrrr Vs5r c@seZdZdd�ZeZdd�Zdd�Zejdd��Z	d	d
�Z
eje�e
ekd�eje
dd
dd�dd����Zdd�Zdd�Ze�ejdkd�dd��Zdd�Zdd�Zdd�Zd d!�Zd"d#�Ze�eed$�d%�d&d'��Ze�eed$�d%�d(d)��Ze�eed$�d%�d*d+��Zd,S)-�	FileTestscCstj�tj�rt�tj�dSr!)rr/�lexistsr�TESTFN�unlink�r&rrr�setUp�szFileTests.setUpcCs:t�tjtjtjB�}t�|�|�t�tjtj	��dSr!)
rrrrF�O_CREAT�O_RDWR�close�
assertTrue�access�W_OK�r&�frrr�test_access�s
zFileTests.test_accessc	Cs�t�tjtjtjB�}t�|�}zJd}||dkrht�|�|d7}|dkrV|�d�|t�|�}}q&W5t�|�Xt�	||d�|�
ttj|d�dS)Nr��
z%couldn't allocate two consecutive fds��a)
rrrrFrJrK�duprL�skipTest�
closerange�assertRaisesr5r)r&�first�secondZretriesrrr�test_closerange�s


zFileTests.test_closerangecCs<tj}t�|�}|�ttj|d�t�|�}|�||�dS�Nr)	rrF�sys�getrefcountrZ�	TypeErrorr�renamer.)r&r/�old�newrrr�test_rename�s


zFileTests.test_renamec	Cslttjd��V}|�d�|��|��}t�|dd�t�|d�}|�	t
|�t�|�	|d�W5QRXdS)N�w+b�spamr�)rrrFr�flush�filenor�lseek�readr.�typer>)r&�fobj�fd�srrr�	test_read�s
zFileTests.test_readzneeds INT_MAX < PY_SSIZE_T_MAXrTrSF)�sizeZmemuse�dry_runc	CsT|�tjtj�ttjd�ttjd��}t�|��|�}W5QRX|�	|d�dS)Nstest�rb)
�
addCleanuprrGrFrrrrlrjr.)r&rrr�datarrr�test_large_read�s
zFileTests.test_large_readc	Cs�t�tjtjtjB�}|�ttj|d�t�|d�t�|t	d��t�|t
d��t�|�ttjd�� }|�|�
���dddg�W5QRXdS)	N�beanssbacon
seggs
sspam
rtsbaconseggsrg)rrrrFrJ�O_WRONLYrZrar�	bytearray�
memoryviewrLr.rl�
splitlines)r&rornrrr�
test_write�s
�zFileTests.test_writecGs"tj|tjdd�}|�|d�dS)NT)�
creationflags�shellr)�
subprocess�callZCREATE_NEW_CONSOLEr.)r&�args�retcoderrr�write_windows_console�s
�zFileTests.write_windows_console�win32z$test specific to the Windows consolecCs*d}|�tjd|�|�tjdd|�dS)Nzprint('x' * 100000)�-cz-u)r�r_�
executable�r&�coderrr�test_write_windows_console�sz$FileTests.test_write_windows_consolecGs,t�tjtj�}tj|f|��}|��dSr!)rrrrF�O_RDONLY�fdopenrL)r&r�rorQrrr�
fdopen_helper�szFileTests.fdopen_helpercCsBt�tjtjtjB�}t�|�|��|�d�|�dd�dS)N�r�d)rrrrFrJrKrLr��r&rorrr�test_fdopens


zFileTests.test_fdopenc	Cs�tjd}|�tjtj�|�tj|�ttjd�t|d�t�tj|�|�ttj	tj�t
|d��}|�|��d�W5QRXdS)Nz.2�1�2r��1)
rrFrurGrr�replacerZr4�statrr.rl)r&�TESTFN2rQrrr�test_replaces

zFileTests.test_replacecCs"tjttjddd�}t�|�dS)N�)r/�flags�mode�dir_fd)rr�__file__r�rLrPrrr�test_open_keywordss�zFileTests.test_open_keywordsc	Cs@t�td�}z|dtjddd�Wnttfk
r:YnXdS)N�symlink�targetF)�src�dst�target_is_directoryr�)rZ
get_attributerrF�NotImplementedErrorr5)r&r�rrr�test_symlink_keywordss�
zFileTests.test_symlink_keywords�copy_file_rangeztest needs os.copy_file_range()c	Cs(|�t��t�ddd�W5QRXdS)NrrSi����)rZ�
ValueErrorrr�rHrrr�#test_copy_file_range_invalid_values"sz-FileTests.test_copy_file_range_invalid_valuesc	
Cstjd}d}ttj|�|�tjtj�ttjd�}|�|j�|��}t|d�}|�tj|�|�|j�|��}zt�	||d�}Wn:t
k
r�}z|jtjkr��|�
|�W5d}~XYnBX|�|tdd��t|d��}|�|��|d|��W5QRXdS)Nz.3�
0123456789rtrf�r�)rrFrrurGrrLrjrr�r5r6�ENOSYSrX�assertIn�ranger.rl)	r&r�rv�in_file�in_fd�out_file�out_fd�i�errr�test_copy_file_range's(

zFileTests.test_copy_file_rangec

CsFtjd}d}d}d}d}ttj|�|�tjtj�ttjd�}|�|j�|��}t|d�}|�tj|�|�|j�|��}	ztj	||	|||d�}
Wn:t
k
r�}z|jtjkr��|�
|�W5d}~XYnnX|�|
td	|d
��t|d��}|��}W5QRX|�|d|�d|�|�||d�||||
��dS)Nz.4r�r��r�rtrf)Z
offset_srcZ
offset_dstrrS�)rrFrrurGrrLrjrr�r5r6r�rXr�r�rlr.)
r&ZTESTFN4rvZ
bytes_to_copyZin_skipZout_seekr�r�r�r�r�r�rlrrr�test_copy_file_range_offsetIs<


�
�z%FileTests.test_copy_file_range_offsetN) rArBrCrI�tearDownrRr]r�cpython_onlyrerqrrr
rZ
bigmemtestrwr}r�r_�platformr�r�r�r�r�r�rrr�r�r�rrrrrD�s<


�
�
	


!rDc@seZdZdd�Zdd�Zdd�Zdd�Zd	d
�Ze�	e
ed�d�d
d��Ze�	e
ed�d�dd��Z
e�	ejdkd�dd��Ze�	ejdkd�e�	e
ed�d�dd���Zdd�Ze�	ejdkd�dd��Ze�	ejdkd�dd ��Ze�	ejdkd�d!d"��Zd#S)$�StatAttributeTestscCs(tj|_|�tj|j�t|jd�dS)N�ABC)rrF�fnamerurGrrHrrrrIxszStatAttributeTests.setUpc
	Cs�t�|�}|�|tjd�|�|jd�t|�}tt�D]d}|dd�dkr:|��}|�d�rjdd�}ndd�}|�|t||��|tt|��|�	||�q:d�
�D]8}tt||�d�}t||d	�d
}|j||dd�q�z|d
|�
d�Wntk
�rYnXzd|_|�
d�Wntk
�r:YnXzd|_|�
d�Wnttfk
�rjYnXzd|_|�
d�Wntk
�r�YnXzt�d�}	|�
d�Wntk
�r�YnXzt�d�}	Wntk
�r�YnXdS)Nr�ZST_ZTIMEcSst|�Sr!)�int��xrrr�trunc��z7StatAttributeTests.check_stat_attributes.<locals>.trunccSs|Sr!rr�rrrr��r�zst_atime st_mtime st_ctimei��Z_nsi'rU��deltar)�No exception raisedrS�rT�rrSrUr�rhr�r����	rT���
�)rr�r.�ST_SIZE�st_size�dir�lower�endswith�getattrr��splitr��assertAlmostEqual�fail�
IndexError�st_mode�AttributeError�st_rdevra�parrot�stat_result)
r&r��result�membersr�attrr�ZfloatyZnanosecondy�result2rrr�check_stat_attributes}s^


�
z(StatAttributeTests.check_stat_attributescCs|�|j�dSr!)r�r�rHrrr�test_stat_attributes�sz'StatAttributeTests.test_stat_attributescCsHz|j�t���}Wn$tk
r8|�d|j�YnX|�|�dS)Nz#cannot encode %a for the filesystem)r��encoder_�getfilesystemencoding�UnicodeEncodeErrorrXr�)r&r�rrr�test_stat_attributes_bytes�s
z-StatAttributeTests.test_stat_attributes_bytescCsft�|j�}ttjd�D]F}t�||�}|�d|�|dkrJ|�d|�t�|�}|�	||�qdS)NrSsstat_resultrhscos
stat_result
)
rr�r�r��pickle�HIGHEST_PROTOCOL�dumpsr��loadsr.�r&r��proto�pZ	unpickledrrr�test_stat_result_pickle�s
z*StatAttributeTests.test_stat_result_pickle�statvfsztest needs os.statvfs()cCst�|j�}|�|j|d�d}t|�D]"\}}|�t|d|�||�q*|�t|j	t
��|�t|�d�zd|_|�d�Wnt
k
r�YnXzd|_|�d�Wnt
k
r�YnXzt�d�}|�d�Wntk
r�YnXzt�d�}Wntk
�rYnXdS)	Nr�)
ZbsizeZfrsizeZblocksZbfreeZbavail�filesZffreeZfavail�flagZnamemaxZf_rTrSr�r�r�)rr�r�r.�f_bfree�	enumerater�rM�
isinstance�f_fsidr�r+r�r�r��statvfs_resultra)r&r�r��value�memberr�rrr�test_statvfs_attributes�s4
z*StatAttributeTests.test_statvfs_attributes�need os.statvfs()cCsft�|j�}ttjd�D]F}t�||�}|�d|�|dkrJ|�d|�t�|�}|�	||�qdS)NrSsstatvfs_resultrhscos
statvfs_result
)
rr�r�r�r�r�r�r�r�r.r�rrr�test_statvfs_result_pickle�s
z-StatAttributeTests.test_statvfs_result_pickler��Win32 specific testsc
Cs\zt�d�WnHtk
r,|�d�Yn,tk
rV}z|�d�W5d}~XYnXdS)Nzc:\pagefile.syszc:\pagefile.sys does not existzCould not stat pagefile.sys)rr�r4rXr5r��r&r�rrr�test_1686475szStatAttributeTests.test_1686475�pipezrequires os.pipe()c	Csht��\}}zt�|�W5t�|�t�|�X|�t��}t�|�W5QRX|�|jjtj	�dSr!)
rrrLr�rZr5r.�	exceptionr6�EBADF)r&r��w�ctxrrr�
test_15261s
zStatAttributeTests.test_15261cCsF|�t|d��|�t|jt��|�d|jko:dkn�dS)N�st_file_attributesrl��)rMrr�rr�)r&r�rrr�check_file_attributes#sz(StatAttributeTests.check_file_attributesz$st_file_attributes is Win32 specificcCszt�|j�}|�|�|�|jtj@d�tjd}t�	|�|�
tj|�t�|�}|�|�|�|jtj@tj�dS)Nrr�)rr�r�rr.r�FILE_ATTRIBUTE_DIRECTORYrrFr2ru�rmdir)r&r�r9rrr�test_file_attributes(s

�




�z'StatAttributeTests.test_file_attributescCsdtj�tjd|j�}|�tj|�t|d�d}t	j
d|ddg|d�t�|�}|�|j
d�dS)	N�TEMPr�r�z
icacls.exez/denyz*S-1-5-32-545:(S)�r~r)rr/r1�environr�rurrGrr��
check_callr��assertNotEqualr�)r&r�ZDETACHED_PROCESSr�rrr�test_access_denied=s

�
z%StatAttributeTests.test_access_deniedcCs6dtj�t���d}t�|�}|�|jtj�dS)Nz//./r)rr/�
splitdriver"r�r.r��S_IFBLK)r&r�r�rrr�test_stat_block_deviceRs
z)StatAttributeTests.test_stat_block_deviceN)rArBrCrIr�r�r�r�rrrrr�r�r_r�rrrrrrrrrrr�ws2A

+�

	�

r�c@s�eZdZdd�Zdd�Zd)dd�Zdd	�Zed
d��Zdd
�Z	dd�Z
e�e
je
jkd�dd��Ze�e
je
jkd�dd��Ze�e
je
jkd�dd��Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zejd'd(��ZdS)*�
UtimeTestscCsDtj|_tj�|jd�|_|�tj|j�t�	|j�t
|j�dS)N�f1)rrFr9rr/r1r�ru�rmtreer2rrHrrrrI\s
zUtimeTests.setUpcCs4t�|�}|j|dkp2|j|dkp2|j|dkS)Nr�r�r�)rr��st_atime�st_mtime�st_ctime)r&r�strrr�support_subsecondds
��zUtimeTests.support_subsecondNcCs�|s
|j}|�|�}|r"d}d}nd}d}||||f�t�|�}|rt|j|j|ddd�|j|j|ddd�n$|�|j|d�|�|j|d�|�|j|�|�|j	|�dS)Ni8Z�;l�
o]�rTlP�9��&�.>g���ư>r�)
r�rrr�r�rrr.�st_atime_ns�st_mtime_ns)r&�set_timerr�atime_ns�mtime_nsrrrr�_test_utimels"

zUtimeTests._test_utimecCsdd�}|�|�dS)NcSstj||d�dS�N��ns�r�utime�rr'rrrr!�sz'UtimeTests.test_utime.<locals>.set_time�r$�r&r!rrr�
test_utime�szUtimeTests.test_utimecCs|ddS)Nrg��&�.>rr&rrr�	ns_to_sec�szUtimeTests.ns_to_seccs�fdd�}��|�dS)Ncs0|\}}��|�}��|�}t�|||f�dSr!�r.rr)�rr'r"r#Zatime�mtimerHrrr!�s

z2UtimeTests.test_utime_by_indexed.<locals>.set_timer+r,rrHr�test_utime_by_indexed�sz UtimeTests.test_utime_by_indexedcs�fdd�}��|�dS)Ncs2|\}}��|�}��|�}tj|||fd�dS)N)�timesr/r0rHrrr!�s

z0UtimeTests.test_utime_by_times.<locals>.set_timer+r,rrHr�test_utime_by_times�szUtimeTests.test_utime_by_timesz9follow_symlinks support for utime required for this test.cCsdd�}|�|�dS)NcSstj||dd�dS)NF)r'�follow_symlinksr(r*rrrr!�sz9UtimeTests.test_utime_nofollow_symlinks.<locals>.set_timer+r,rrr�test_utime_nofollow_symlinks�sz'UtimeTests.test_utime_nofollow_symlinksz,fd support for utime required for this test.cCsdd�}|�|�dS)Nc	Ss.t|dd��}tj|��|d�W5QRXdS)N�wbrr&)rrr)rj)rr'rrrrr!�sz*UtimeTests.test_utime_fd.<locals>.set_timer+r,rrr�
test_utime_fd�szUtimeTests.test_utime_fdz0dir_fd support for utime required for this test.cCsdd�}|�|�dS)Nc	SsDtj�|�\}}t�|tj�}ztj|||d�W5t�|�XdS)N)r�r')rr/r�rr�rLr))rr'r9r�dirfdrrrr!�s
z.UtimeTests.test_utime_dir_fd.<locals>.set_timer+r,rrr�test_utime_dir_fd�szUtimeTests.test_utime_dir_fdcCsdd�}|j||jd�dS)NcSstj||d�dSr%r(r*rrrr!�sz1UtimeTests.test_utime_directory.<locals>.set_time�r)r$r9r,rrr�test_utime_directory�szUtimeTests.test_utime_directorycCsbt��}||j�|�|j�s$d}nd}t�|j�}d|j||j|f}|j|j|||d�dS)Ng�?g�������?zst_time=%r, current=%r, dt=%r)r��msg)�timer�rrr�rr�)r&r!�currentr�rr=rrr�_test_utime_current�s
�
�zUtimeTests._test_utime_currentcs�fdd�}��|�dS)Ncst��j�dSr!�rr)r�r;rHrrr!�sz/UtimeTests.test_utime_current.<locals>.set_time�r@r,rrHr�test_utime_current�szUtimeTests.test_utime_currentcs�fdd�}��|�dS)Ncst��jd�dSr!rAr;rHrrr!�sz3UtimeTests.test_utime_current_old.<locals>.set_timerBr,rrHr�test_utime_current_old�sz!UtimeTests.test_utime_current_oldcCsltjdkrhtj�tj�|��dd}ddl}|jj}|�	dd�}|�
|ddddd|t|��}|rh|jSdS)Nr�r�\�r�)
r_r�rr/r�abspath�ctypes�windll�kernel32Zcreate_unicode_bufferZGetVolumeInformationWr+r�)r&r/�rootrHrJ�buf�okrrr�get_file_system�s

�zUtimeTests.get_file_systemcCsJ|�|j�dkr|�d�d}t�|j||f�|�t�|j�j|�dS)NZNTFSz
requires NTFSr)	rNr9rXrr)r�r.r�r)r&Zlargerrr�test_large_times

zUtimeTests.test_large_timec
Cs�|�t��tj|jddd�W5QRX|�t��t�|jddg�W5QRX|�t��t�|jd�W5QRX|�t��t�|jd�W5QRX|�t��tj|jddgd�W5QRX|�t��tj|jdd�W5QRX|�t��tj|jdd�W5QRXtjtjk�rD|�t��tj|jddd�W5QRXtjtjk�r�t	|jdd	��,}|�t��t�|�
�d�W5QRXW5QRXtjtjk�r�|�t��tj|jdd	d
�W5QRXdS)N)r�r�r&r�)r�)r�r�r�F�r5r7r�r�)rZr�rr)r�ra�supports_follow_symlinksr��supports_fdrrj�supports_dir_fd)r&rrrr�test_utime_invalid_argumentss0$z'UtimeTests.test_utime_invalid_argumentsc	Cs�dd�}|�t��tj|j|d�dfd�W5QRX|�t��tj|j|d�dfd�W5QRX|�t��tj|j|d�dfd�W5QRXdS)NcsG�fdd�d�}|�S)NcseZdZ�fdd�ZdS)z?UtimeTests.test_issue31577.<locals>.get_bad_int.<locals>.BadIntcs�Sr!r)r���divmod_ret_valrr�
__divmod__.szJUtimeTests.test_issue31577.<locals>.get_bad_int.<locals>.BadInt.__divmod__N)rArBrCrXrrVrr�BadInt-srYr)rWrYrrVr�get_bad_int,sz/UtimeTests.test_issue31577.<locals>.get_bad_int�*rSr&r)rSrUr�)rZrarr)r�)r&rZrrr�test_issue31577(s""zUtimeTests.test_issue31577)N)rArBrCrIrr$r-�staticmethodr.r2r4rrrr)rRr6rSr8rTr:r<r@rCrDrNrOrUrr�r\rrrrr[s:

	�
�
�


r)�
mapping_testsc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Ze�	e
o>ej�
e
�d
�dd��Ze�	e
o^ej�
e
�d
�d
d��Zdd�Zdd�Zdd�Zdd�Ze�	ejd�dd��Ze�dd�dd��Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�ZdS)(�EnvironTestsNcCsBttj�|_tjrttj�|_|����D]\}}|tj|<q*dSr!)	�dictrr�_EnvironTests__save�supports_bytes_environ�environb�_EnvironTests__saveb�
_reference�items�r&�keyr�rrrrI?s
zEnvironTests.setUpcCs:tj��tj�|j�tjr6tj��tj�|j�dSr!)rr�clear�updaterarbrcrdrHrrrr�Fs


zEnvironTests.tearDowncCsdddd�S)NZVALUE1ZVALUE2ZVALUE3)ZKEY1ZKEY2ZKEY3rrHrrrreMszEnvironTests._referencecCstj��tjSr!)rrrirHrrr�_empty_mappingPs
zEnvironTests._empty_mappingzrequires a shellc	CsNtj��tjjdd�t�dt��}|����}|�|d�W5QRXdS)NZWorld)ZHELLOz%s -c 'echo $HELLO')	rrrirj�popenrrl�stripr.)r&rlr�rrr�test_update2Us

zEnvironTests.test_update2c	Csdt�dt��L}t|�}|�t|�d�|�t|�d�|�t|�d�|�tt|�W5QRXdS)Nz %s -c 'echo "line1
line2
line3"'zline1
zline2
zline3
)rrlr�iterr.�nextrZ�
StopIteration)r&rl�itrrr�test_os_popen_iter^s�zEnvironTests.test_os_popen_itercCs8tj��D](\}}|�t|�t�|�t|�t�q
dSr!)rrrfr.rmr$)r&rh�valrrr�test_keyvalue_typesksz EnvironTests.test_keyvalue_typescCs.|����D]\}}|�tj�|�|�qdSr!)rerfr.rr�getrgrrr�
test_itemspszEnvironTests.test_itemsc
Cs4tj}|�t|�d�d�dd�|��D����dS)Nzenviron({{{}}})z, css|]\}}d�||�VqdS)z
{!r}: {!r}N��format)rrhr�rrr�	<genexpr>xs�z-EnvironTests.test___repr__.<locals>.<genexpr>)rrr.�reprryr1rf)r&�envrrr�
test___repr__us�zEnvironTests.test___repr__c	CsFtj�tj�}ddddg}dtj�|�i}tj}z2t|�t_|�|t���|�|tjdd��W5|t_X|�|t�i��|�dt�ddi��|�|t�|��tj	�rBz&t
jdd	��d
dd�}W5QRXWntk
r�YnX|�
ttj|�|�t�d
di�dg�|�t�d
di�dg�|�t�ddi�dg�dS)Nz/montyz/pythonrFz/flying/circus�PATH�r|�rFT)�recordr�r�)r~�PATHr��abc�abc)r�defpathr��pathsepr1rr`�assertSequenceEqual�
get_exec_pathrb�warnings�catch_warnings�BytesWarningrZr�)r&Zdefpath_listZ	test_pathZtest_envZ
saved_environZ	mixed_envrrr�test_get_exec_path|s8
���zEnvironTests.test_get_exec_pathz#os.environb required for this test.cCs�d}z|�t��d�}Wn,tk
rDdt��f}|�|�YnX|tjd<|�tjd|�|�tjd|�d}|tjd<|�tjd|�|�	t��d�}|�tjd|�dS)	Nueuro€�surrogateescapez'U+20AC character is not encodable to %s�unicodesunicode��sbytesr>)
r�r_r�r�rXrrr.rc�decode)r&r�Zvalue_bytesr=Z	value_strrrr�
test_environb�s$
��

zEnvironTests.test_environbrTr�cCs@tjdkr&dd}|�ttjj|�nd}|�ttjj|�dS)Nr�r�iP�zkey=)r_r�rZr�rr�__delitem__r5)r&rhrrr�test_unset_error�s

zEnvironTests.test_unset_errorc	Cs�d}|�|tj�|�t��}tj|W5QRX|�|jjd|�|�|jj	�|�t��}tj|=W5QRX|�|jjd|�|�|jj	�dS)NZ
missingkeyr)
�assertNotInrrrZ�KeyError�assertIsrr�rM�__suppress_context__)r&�missing�cmrrr�
test_key_type�szEnvironTests.test_key_typecCsLt|�}d}t|�dtj|<zt|�|�tj|d�W5tj|=XdS)NZ__new_key__Ztest_environ_iteration)rorprrr.)r&Z
collection�iteratorZnew_keyrrr�_test_environ_iteration�s
z$EnvironTests._test_environ_iterationcCs|�tj�dSr!)r�rrrHrrr�(test_iter_error_when_changing_os_environ�sz5EnvironTests.test_iter_error_when_changing_os_environcCs|�tj���dSr!)r�rrrfrHrrr�.test_iter_error_when_changing_os_environ_items�sz;EnvironTests.test_iter_error_when_changing_os_environ_itemscCs|�tj���dSr!)r�rr�valuesrHrrr�/test_iter_error_when_changing_os_environ_values�sz<EnvironTests.test_iter_error_when_changing_os_environ_values)rArBrCZ	type2testrIr�rerkrrrrr/�existsrnrsrurwr}r�rbr�rZrequires_mac_verr�r�r�r�r�r�rrrrr_;s8�
�
)�



r_c@sVeZdZdd�Zdd�Zdd�Zddd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�ZdS)�	WalkTestscKs$d|kr|�d�|d<tj|f|�S�Nr5�followlinks)�popr�walk)r&�top�kwargsrrrr��szWalkTests.walkc
Cs*tjj}|�tjtj�|tjd�|_||jd�|_||jd�|_	||jd�}||d�}||jd�}||jd�}||d�}||d�}||d	�|_
|tjd
�}|tjd
d�}	||d�}
||d
�}||d�}t�|j	�t�|�t�|�t�|�||||	|fD].}
t|
d��}|�
d|
d�W5QRX�qt���r�t�tj�|�|j
�t�d|
d�t�|dd�|d�t�|dd�|d�|dd	gdd
ddgf|_n|dgdgf|_t�|d�zt�|�Wn(tk
�r�|�tj|tj�Yn4Xt�|tj�t�|�t�|�|jddd�=dS)NZTEST1�SUB1�SUB11�SUB2ZSUB21�tmp1�tmp2Ztmp3�linkZTEST2�tmp4Zbroken_linkZbroken_link2Zbroken_link3r�zI'm z" and proud of it.  Blame test_os.
�brokenTZtmp5rrS)rr/r1rurrrF�	walk_path�	sub1_path�
sub11_path�	link_path�makedirsrr�can_symlinkr�rG�	sub2_tree�chmod�listdir�PermissionErrorr��S_IRWXUrGr
)r&r1Z	sub2_pathZ
sub21_pathZ	tmp1_pathZ	tmp2_pathZ	tmp3_pathZ	tmp5_pathZt2_pathZ	tmp4_pathZbroken_link_pathZbroken_link2_pathZbroken_link3_pathr/rQrrrrI�sX








 
��

zWalkTests.setUpcCs�t|�|j��}|�t|�d�|ddddk}|dd��|dd|d��|dd|d��|�|d|jddgd	gf�|�|d||jd
gdgf�|�|d||jggf�|�|dd||j�dS)NrhrrSr�r�rU���r�r�r�r�)	�listr�r�r.r+�sortr�r�r��r&�allZflippedrrr�test_walk_topdown>s zWalkTests.test_walk_topdownNcCs�|dkr|j}g}|�|�D],\}}}|�|||f�d|kr|�d�q|�t|�d�|�|d|jdgdgf�|dd��|dd��|�|d|j�dS)Nr�rUrr�r�rSr�)r�r��append�remover.r+r�r�)r&r�r�rK�dirsr�rrr�test_walk_pruneOszWalkTests.test_walk_prunecCs|�t|j��dSr!)r�rr�rHrrr�test_file_like_pathbszWalkTests.test_file_like_pathcCs�t|j|jdd��}|�t|�d|�|ddddk}|dd��|dd|d	��|dd|d��|�|d|jdd
gdgf�|�|||jggf�|�||d|jdgd
gf�|�|dd||j�dS)NF��topdownrhr�rSrr�rUr�r�r�r�r�)	r�r�r�r.r+r�r�r�r�r�rrr�test_walk_bottom_upes$
�

���zWalkTests.test_walk_bottom_upcCsht��s|�d�|j|jdd�}|D]2\}}}||jkr&|�|g�|�|dg�qdq&|�d�dS)Nzneed symlink supportTrPr�z+Didn't follow symlink with followlinks=True)rr�rXr�r�r�r.r�)r&�walk_itrKr�r�rrr�test_walk_symlinkzs

zWalkTests.test_walk_symlinkc
Cs�g}|j|j|jd�}t|�\}}}|�|g�d}tj�||�}tj�||d�}t�||�z\dd�|D�}	|�	|�|�
||	�|�
||	�|D]"}
|
|kr�|�tj�||
�|	�q�W5t�||�XdS)N)�onerrorr�z.newcSsg|]\}}}|�qSrr)rr��drQrrrr	�sz/WalkTests.test_walk_bad_dir.<locals>.<listcomp>)r�r�r�rpr.rr/r1rbrMr�r�)r&�errorsr�rKr�r��dir1Zpath1Zpath1new�roots�dir2rrr�test_walk_bad_dir�s"
zWalkTests.test_walk_bad_dircsd}tj�tjd��tjj�fdg|��}t�|���fdd�td�D�}t|d�D]>}||rjdgnggf}|D]}��t|�|�qvtj�	|�}qZ��fdd�td�D�}�}t|d�D]D}|||kr�dgnggf}|D]}��t|�|�q�tj�|d�}q�dS)	N�Zdeepr�csg|]}�j�dd��qS)Fr��r��r�j��baser&rrr	�sz7WalkTests.test_walk_many_open_files.<locals>.<listcomp>r�rScsg|]}�j�dd��qS)Tr�r�r�r�rrr	�s)
rr/r1rrFr�r�r.rpr9)r&�depthr�Zitersr�r:rrrr�r�test_walk_many_open_files�s"
z#WalkTests.test_walk_many_open_files)N)rArBrCr�rIr�r�r�r�r�r�r�rrrrr��sE
r��fwalkzTest needs os.fwalk()c@sHeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dZ
dS)�
FwalkTestscks,|j|f|�D]\}}}}|||fVqdSr!)r�)r&r�r�rKr�r�Zroot_fdrrrr��szFwalkTests.walkcOstj||�Sr!)rr��r&r�r�rrrr��szFwalkTests.fwalkc
Cs�|��}|��}tjddd�D]�\}}|j||d�|j||d�i}tjf|�D]\}}}t|�t|�f||<qR|jf|�D]4\}}}}	|�||�|�	||t|�t|�f�q~qdS)N�TFrU��repeat)r�r�)r�r5)
�copy�	itertools�productrjrr��setr�r�r.)
r&�walk_kwargs�fwalk_kwargsr�r5r:rKr�r��rootfdrrr�_compare_to_walk�szFwalkTests._compare_to_walkcCsdtji}|�||�dS)Nr�)rrFr�)r&r�rrr�test_compare_to_walk�s
zFwalkTests.test_compare_to_walkc	CsJz8t�dtj�}dtji}|��}||d<|�||�W5t�|�XdS)N�.r�r�)rrLrr�rrFr�r�)r&ror�r�rrr�test_dir_fd�s
zFwalkTests.test_dir_fdcCs|tjddd�D]h\}}tj|df}|j|d|i�D]B\}}}}t�|�t�|�|�t	t�
|��t	|�t	|�B�q2qdS)Nr�rUr�r5)r�r�rrFr�r�fstatr�r.r�r�)r&r�r5r�rKr�r�r�rrr�test_yields_correct_dir_fd�s

z%FwalkTests.test_yields_correct_dir_fdcCs\t�d�}t�|�td�D]}|�tj�D]}q,qt�d�}|�tj|�|�||�dS)NrS�)	rrWrLr�r�rrFrur.)r&Zminfdr�r�Znewfdrrr�test_fd_leak�s


zFwalkTests.test_fd_leakN)rArBrCr�r�r�r�r�r�r�r�rrrrr��s
r�c@seZdZdd�ZdS)�BytesWalkTestsc	ks�d|kr|�d�|d<tjt�|�f|�D]p\}}}t�|�}tttj|��}tttj|��}|||fVtttj|��|dd�<tttj|��|dd�<q*dSr�)r�rr��fsencoder?r��map)	r&r�r��broot�bdirs�bfilesrKr�r�rrrr��s
zBytesWalkTests.walkN)rArBrCr�rrrrr��sr�c@seZdZddd�ZdS)�BytesFwalkTestsr�cos�tjt�|�f|�|�D]t\}}}}t�|�}tttj|��}	tttj|��}
||	|
|fVtttj|	��|dd�<tttj|
��|dd�<qdSr!)rr�r�r?r�r�)r&r�r�r�r�r�r��topfdrKr�r�rrrr�s$
zBytesFwalkTests.fwalkN)r�)rArBrCr�rrrrr�sr�c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�MakedirTestscCst�tj�dSr!�rr2rrFrHrrrrIszMakedirTests.setUpc
Cs�tj}tj�|ddd�}t�|�tj�|dddd�}t�|�|�ttjtj�tj�|dddddtj�}t�|�tj�|dtjddddd�}t�|�dS�Nr�r�Zdir3Zdir4Zdir5Zdir6)	rrFrr/r1r�rZr5�curdir)r&r�r/rrr�test_makedirs


�zMakedirTests.test_makedirc	Cs�t�d���tj}tj�|d�}tj�|d�}t�|d�|�tj�|��|�tj�	|��tj
dkr�|�t�|�j
d@d�|�t�|�j
d@d�W5QRXdS)NrUr�r�im�ntr�i�)rZ
temp_umaskrFrr/r1r�rMr��isdirrr.r�r�)r&r��parentr/rrr�	test_mode(s
zMakedirTests.test_modecCs�tj�tjd�}d}t�d�}t�||�|�ttj||�|jttj||dd�tj|ddd�tj||dd�t�|�tjtj�	d	�dd�dS)
Nr�r��F��exist_oki�T)r�r�/)
rr/r1rrF�umaskr�rZr5rG)r&r/r��old_maskrrr� test_exist_ok_existing_directory4s

z-MakedirTests.test_exist_ok_existing_directoryc	Cs�tj�tjd�}tj}d}t�d�}z�t�t�	tj�j
�}zt�tj||B�Wntk
rnt
�d��YnXt�	tj�j
|@|kr�t
�d��t�|||B�tj||dd�t�|t�t�	|�j
�|@�tj|||Bdd�W5t�|�XdS)Nr�r�rzCannot set S_ISGID for dir.z No support for S_ISGID dir mode.Tr)rr/r1rrFr��S_ISGIDr�S_IMODE�lstatr�r�r�r�SkipTestr�)r&r/rr�rZexisting_testfn_moderrr�test_exist_ok_s_isgid_directoryBs&
�
 z,MakedirTests.test_exist_ok_s_isgid_directoryc	Cs|tj}tj�tjd�}t|d��}|�d�W5QRX|�ttj	|�|jttj	|dd�|jttj	|dd�t�
|�dS)Nr�rr�FrT)rrFrr/r1rrrZr5r�r�)r&r�r/rQrrr�#test_exist_ok_existing_regular_file]sz0MakedirTests.test_exist_ok_existing_regular_filec	CsLtj�tjdddddd�}tj�|�s>|tjkr>tj�|�}qt�|�dSr�)rr/r1rrFr�r9�
removedirs�r&r/rrrr�gs�zMakedirTests.tearDownN)
rArBrCrIr�rrrr
r�rrrrr�s
r��chownzTest needs chownc@s�eZdZedd��Zdd�Ze�ee	d�d�dd��Z
e�eoHee
�d	kd
�dd��Ze�eojee
�d	kd
�dd��Zedd��ZdS)�ChownFileTestscCst�tj�dSr!r���clsrrr�
setUpClassvszChownFileTests.setUpClasscCs�t�tj�}|j}|j}ddt�d�t�	dd�fD]0}|�
ttjtj||�|�
ttjtj||�q2|�
t�tj||��|�
t�tjdd��dS)Ng�y��r����rU)rr�rrF�st_uid�st_gid�decimalZDecimal�	fractionsZFractionrZrar�assertIsNone)r&r��uid�gidr�rrr�*test_chown_uid_gid_arguments_must_be_indexzsz9ChownFileTests.test_chown_uid_gid_arguments_must_be_index�	getgroupszneed os.getgroupscCs�t��}t|�dkr|�d�|dd�\}}t�tj�j}t�tj||�t�tj�j	}|�
||�t�tj||�t�tj�j	}|�
||�dS)NrUztest needs at least 2 groups)rrr+rXr�rrFrrrr.)r&�groupsZgid_1Zgid_2rrrrr�test_chown_gid�s
zChownFileTests.test_chown_gidrSz0test needs root privilege and more than one usercCsvtdd�\}}t�tj�j}t�tj||�t�tj�j}|�||�t�tj||�t�tj�j}|�||�dS�NrU)	�	all_usersrr�rrFrrrr.)r&�uid_1�uid_2rrrrr�test_chown_with_root�sz#ChownFileTests.test_chown_with_rootz2test needs non-root account and more than one userc	CsXtdd�\}}t�tj�j}|�t��&t�tj||�t�tj||�W5QRXdSr!)	r"rr�rrFrrZr�r)r&r#r$rrrr�test_chown_without_permission�s
z,ChownFileTests.test_chown_without_permissioncCst�tj�dSr!)rr
rrFrrrr�
tearDownClass�szChownFileTests.tearDownClassN)rArBrC�classmethodrrrrrrr �
root_in_posixr+r"r%r&r'rrrrrss


�

�
rc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�RemoveDirsTestscCst�tj�dSr!)rr�rrFrHrrrrI�szRemoveDirsTests.setUpcCst�tj�dSr!)rrrFrHrrrr��szRemoveDirsTests.tearDowncCsxtj�tjd�}t�|�tj�|d�}t�|�t�|�|�tj�|��|�tj�|��|�tj�tj��dS)N�dira�dirb)	rr/r1rrFr2r�assertFalser��r&r+r,rrr�test_remove_all�s


zRemoveDirsTests.test_remove_allcCs�tj�tjd�}t�|�tj�|d�}t�|�ttj�|d��t�|�|�tj�	|��|�
tj�	|��|�
tj�	tj��dS�Nr+r,�file.txt)rr/r1rrFr2rrr-r�rMr.rrr�test_remove_partial�s


z#RemoveDirsTests.test_remove_partialc	Cs�tj�tjd�}t�|�tj�|d�}t�|�ttj�|d��|�t��t�	|�W5QRX|�
tj�|��|�
tj�|��|�
tj�tj��dSr0)rr/r1rrFr2rrZr5rrMr�r.rrr�test_remove_nothing�s

z#RemoveDirsTests.test_remove_nothingN)rArBrCrIr�r/r2r3rrrrr*�s

r*c@seZdZdd�ZdS)�DevNullTestsc	CsXttjdd��}|�d�|��W5QRXttjd��}|�|��d�W5QRXdS)Nr7r�hellortr�)rr�devnullrrLr.rlrPrrr�test_devnull�s

zDevNullTests.test_devnullN)rArBrCr7rrrrr4�sr4c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�URandomTestscCsr|�tt�d��d�|�tt�d��d�|�tt�d��d�|�tt�d��d�|�tt�d��d�dS)NrrSrTr�i�)r.r+r�urandomrHrrr�test_urandom_length�s
z URandomTests.test_urandom_lengthcCs0t�d�}|�|t�t�d�}|�||�dS�N�)rr9r#r>r�r&Zdata1Zdata2rrr�test_urandom_value�s

zURandomTests.test_urandom_valuecCs<d�dd|ddf�}td|�}|d}|�t|�|�|S)N�
zimport os, syszdata = os.urandom(%s)zsys.stdout.buffer.write(data)zsys.stdout.buffer.flush()r�rS)r1r
r.r+)r&�countr��out�stdoutrrr�get_urandom_subprocess�s�
z#URandomTests.get_urandom_subprocesscCs$|�d�}|�d�}|�||�dSr;)rCrr=rrr�test_urandom_subprocess�s

z$URandomTests.test_urandom_subprocessN)rArBrCr:r>rCrDrrrrr8�sr8�	getrandomzneed os.getrandom()c@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�GetRandomTestsc
CsPzt�d�Wn<tk
rJ}z|jtjkr8t�d��n�W5d}~XYnXdS)NrSz%getrandom() syscall fails with ENOSYS)rrEr5r6r�rr)rr;rrrrszGetRandomTests.setUpClasscCs*t�d�}|�|t�|�t|�d�dSr;)rrEr#r>r.r+�r&rvrrr�test_getrandom_types
z"GetRandomTests.test_getrandom_typecCst�d�}|�|d�dS)Nrr�)rrEr.)r&�emptyrrr�test_getrandom0s
zGetRandomTests.test_getrandom0cCs|�ttd��dS)N�GRND_RANDOM)rMrrrHrrr�test_getrandom_randomsz$GetRandomTests.test_getrandom_randomcCs,zt�dtj�Wntk
r&YnXdS�NrS)rrE�
GRND_NONBLOCK�BlockingIOErrorrHrrr�test_getrandom_nonblocksz&GetRandomTests.test_getrandom_nonblockcCs$t�d�}t�d�}|�||�dSr;)rrErr=rrr�test_getrandom_value%s

z#GetRandomTests.test_getrandom_valueN)
rArBrCr(rrHrJrLrPrQrrrrrFs
rFZHAVE_GETENTROPYrSZHAVE_GETRANDOMZHAVE_GETRANDOM_SYSCALLz*os.random() does not use a file descriptorZvxworksz$VxWorks can't set RLIMIT_NOFILE to 1c@s0eZdZe�ed�dd��Zdd�Zdd�ZdS)	�URandomFDTestsz!test requires the resource modulecCsd}td|�dS)Na�if 1:
            import errno
            import os
            import resource

            soft_limit, hard_limit = resource.getrlimit(resource.RLIMIT_NOFILE)
            resource.setrlimit(resource.RLIMIT_NOFILE, (1, hard_limit))
            try:
                os.urandom(16)
            except OSError as e:
                assert e.errno == errno.EMFILE, e.errno
            else:
                raise AssertionError("OSError not raised")
            r�rr�rrr�test_urandom_failure7sz#URandomFDTests.test_urandom_failurecCsd}td|�\}}}dS)Naif 1:
            import os
            import sys
            import test.support
            os.urandom(4)
            with test.support.SuppressCrashReport():
                os.closerange(3, 256)
            sys.stdout.buffer.write(os.urandom(4))
            �-Scr)r&r��rcrA�errrrr�test_urandom_fd_closedNs	z%URandomFDTests.test_urandom_fd_closedcCs�|�tjtj�ttjd�djtjd�}td|�\}}}|�t|�d�|�	|dd�|dd��td|�\}}}|�t|�d�|�	||�dS)Nsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa�if 1:
            import os
            import sys
            import test.support
            os.urandom(4)
            with test.support.SuppressCrashReport():
                for fd in range(3, 256):
                    try:
                        os.close(fd)
                    except OSError:
                        pass
                    else:
                        # Found the urandom fd (XXX hopefully)
                        break
                os.closerange(3, 256)
            with open({TESTFN!r}, 'rb') as f:
                new_fd = f.fileno()
                # Issue #26935: posix allows new_fd and fd to be equal but
                # some libc implementations have dup2 return an error in this
                # case.
                if new_fd != fd:
                    os.dup2(new_fd, fd)
                sys.stdout.buffer.write(os.urandom(4))
                sys.stdout.buffer.write(os.urandom(4))
            )rFrTr�rrh)
rurrGrFrryr
r.r+r)r&r�rUrArVZout2Zerr2rrr�test_urandom_fd_reopened\s�z'URandomFDTests.test_urandom_fd_reopenedN)	rArBrCrr�resourcerSrWrXrrrrrR2s

rRc#slg��fdd�}�fdd�}z6tj}tj}tj}|t_|t_|dk	rJ|t_�VW5|t_|t_|t_XdS)Ncs��d||f�td��dS)N�execvzexecv called)r��RuntimeError�rr���callsrr�
mock_execv�sz#_execvpe_mockup.<locals>.mock_execvcs ��d||f�ttjd��dS)N�execvez
execve called)r�r5r6ZENOTDIRr\r]rr�mock_execve�sz$_execvpe_mockup.<locals>.mock_execve)rrZr`r�)r�r_raZ
orig_execvZorig_execveZorig_defpathrr]r�_execvpe_mockup�s	
rbrZzneed os.execv()c@steZdZe�ed�dd��Zdd�Zdd�Ze�	e
ed�d	�d
d��Zdd
�Z
dd�Ze�	ejdkd�dd��ZdS)�	ExecTestsz4avoid triggering a linuxthreads bug: see issue #4970cCs|�ttjddgd�dS)Nzno such app-)rZr5r�execvperHrrr�test_execvpe_with_bad_program�s�z'ExecTests.test_execvpe_with_bad_programcCsN|�ttjdd�|�ttjdg�|�ttjdd�|�ttjddg�dS)N�notepadrr�rF)rZr�rrZrHrrr�test_execv_with_bad_arglist�sz%ExecTests.test_execv_with_bad_arglistcCsB|�ttjdgd�|�ttjdgi�|�ttjddgi�dS)NrfrF)rZr�rrdrHrrr�test_execvpe_with_bad_arglist�sz'ExecTests.test_execvpe_with_bad_arglist�_execvpez)No internal os._execvpe function to test.c
	Cs�tjd}|tkr:d}tj�t�|�|�}|}dddg}n6d}dddg}tj�||�}tjdkrlt�|�}n|}d	d
i}t��@}|�t	tj
||�|�t|�d�|�|dd
||ff�W5QRXt|d��F}|jt
tj
|||d�|�t|�d�|�|dd|||ff�W5QRXt��j}|��}	|tk�r>||	d<n||	d<|jt
tj
|||	d�|�t|�d�|�|dd|||	ff�W5QRXdS)NZabsolutepaths
executablesprognameZarg1Zarg2r�Zprognamer�ZspamrxrSrrZ)r�rr`r�r~)rr0r>r/r1r�rrbrZr[rir.r+r5r�r�)
r&Z	test_typeZprogram_pathZprogram�fullpathZnative_fullpathZ	argumentsr|r^Zenv_pathrrr�_test_internal_execvpe�s^


�"�
�

�
�z ExecTests._test_internal_execvpecCs"|�t�tjdkr|�t�dS)Nr�)rkr$rrr>rHrrr�test_internal_execvpe_str�s

z#ExecTests.test_internal_execvpe_strc	Cs�tjddg}tj��}d|d<|�t��t�|d||�W5QRXtj��}d|d<|�t��t�|d||�W5QRXtj��}d|d	<|�t��t�|d||�W5QRXdS)
Nr��pass�cabbage�FRUITVEGETABLEr�orangeVEGETABLE=cabbage�FRUIT�lemon�FRUIT=ORANGE)r_r�rrr�rZr�r`)r&r��newenvrrr�test_execve_invalid_env�s


z!ExecTests.test_execve_invalid_envr�zWin32-specific testc
Cs`zt�ddgi�Wn<tk
rP}z|�|jdkp<|jdk�W5d}~XYnX|�d�dS)NrF�argrzNo OSError raised)rr`r5rM�winerrorr�r�rrr�test_execve_with_empty_paths
,z%ExecTests.test_execve_with_empty_pathN)rArBrCr�skipIf�USING_LINUXTHREADSrergrhrrrrkrlrur_r�rxrrrrrc�s�
�
/rcr�r�c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�Win32ErrorTestsc
Csvzt�tj�WnPtk
r(d}YnJtk
r`}zd}|�dtj|f�W5d}~XYnX|�dtj�dS)NFTz.file %s must not exist; os.stat failed with %szfile %s must not exist)rr�rrFr4r5r�)r&r�r;rrrrIs�zWin32ErrorTests.setUpcCs|�ttjtjtjd�dS)Nz.bak)rZr5rrbrrFrHrrrreszWin32ErrorTests.test_renamecCs|�ttjtj�dSr!)rZr5rr�rrFrHrrr�test_removeszWin32ErrorTests.test_removecCs|�ttjtj�dSr!)rZr5rr3rrFrHrrr�
test_chdir"szWin32ErrorTests.test_chdirc	Cs>|�tjtj�ttjd��}|�ttjtj�W5QRXdS)Nr�)	rurrGrFrrZr5rr2rPrrr�
test_mkdir%szWin32ErrorTests.test_mkdircCs|�ttjtjd�dSr!)rZr5rr)rrFrHrrrr-+szWin32ErrorTests.test_utimecCs|�ttjtjd�dSr^)rZr5rr�rrFrHrrr�
test_chmod.szWin32ErrorTests.test_chmodN)
rArBrCrIrer|r}r~r-rrrrrr{sr{c	@s�eZdZddddddddd	g	Zd
d�ZeD]Zee�e�de<q*d
d�Ze�	e
ed�d�dd��Ze�	e
ed�d�dd��Z
e�	e
ed�d�dd��Ze�	e
ed�d�dd��Ze�	e
ed�d �d!d"��Ze�	e
ed#�d$�d%d&��Ze�	e
ed'�d(�d)d*��Ze�	e
ed+�d,�d-d.��Ze�	e
ed/�d0�d1d2��Ze�	e
ed3�d4�d5d6��Ze�	e
ed7�d8�d9d:��Ze�	e
ed;�d<�d=d>��Ze�	e
ed?�d@�dAdB��ZdCdD�Ze�	e
edE�dF�dGdH��ZdIS)J�
TestInvalidFD�fchdirrWr��	fdatasyncr��fstatvfs�fsync�	tcgetpgrp�ttynamecs�fdd�}|S)Ncstt��r|�tt���dSr!)rr�checkr�rH�rQrr�helper8s
z(TestInvalidFD.get_single.<locals>.helperr)rQr�rr�r�
get_single7szTestInvalidFD.get_singleZtest_c
Gs\z|t��f|��Wn2tk
rH}z|�|jtj�W5d}~XYnX|�d|�dS)Nz5%r didn't raise an OSError with a bad file descriptor)r�make_bad_fdr5r.r6rr�)r&rQr�r�rrrr�?s"�zTestInvalidFD.check�isattyztest needs os.isatty()cCs|�t�t���d�dS�NF)r.rr�rr�rHrrr�test_isattyHszTestInvalidFD.test_isattyrYztest needs os.closerange()c	Cstt��}td�D]0}zt�||�Wntk
r:YqXqBq|dkrTt�d��|�t�	|||d�d�dS)NrTrUz5Unable to acquire a range of invalid file descriptorsrS)
rr�r�rr�r5rrr.rY)r&ror�rrrr]Ls�zTestInvalidFD.test_closerange�dup2ztest needs os.dup2()cCs|�tjd�dS)N�)r�rr�rHrrr�	test_dup2\szTestInvalidFD.test_dup2�fchmodztest needs os.fchmod()cCs|�tjd�dSr^)r�rr�rHrrr�test_fchmod`szTestInvalidFD.test_fchmod�fchownztest needs os.fchown()cCs|�tjdd�dS)Nr�)r�rr�rHrrr�test_fchowndszTestInvalidFD.test_fchown�	fpathconfztest needs os.fpathconf()cCs |�tjd�|�tjd�dS)N�PC_NAME_MAX)r�r�pathconfr�rHrrr�test_fpathconfhszTestInvalidFD.test_fpathconf�	ftruncateztest needs os.ftruncate()cCs |�tjd�|�tjd�dSr^)r�r�truncater�rHrrr�test_ftruncatemszTestInvalidFD.test_ftruncaterkztest needs os.lseek()cCs|�tjdd�dSr^)r�rrkrHrrr�
test_lseekrszTestInvalidFD.test_lseekrlztest needs os.read()cCs|�tjd�dSrM)r�rrlrHrrrrqvszTestInvalidFD.test_read�readvztest needs os.readv()cCstd�}|�tj|g�dS)NrT)rzr�rr�)r&rLrrr�
test_readvzszTestInvalidFD.test_readv�	tcsetpgrpztest needs os.tcsetpgrp()cCs|�tjd�dSr^)r�rr�rHrrr�test_tcsetpgrptszTestInvalidFD.test_tcsetpgrptrztest needs os.write()cCs|�tjd�dS)N� )r�rrrHrrrr}�szTestInvalidFD.test_write�writevztest needs os.writev()cCs|�tjdg�dS)Nr�)r�rr�rHrrr�test_writev�szTestInvalidFD.test_writevcCs|�tj�|�tjd�dS�NT)r�r�get_inheritable�set_inheritablerHrrr�test_inheritable�szTestInvalidFD.test_inheritable�get_blocking�-needs os.get_blocking() and os.set_blocking()cCs|�tj�|�tjd�dSr�)r�rr��set_blockingrHrrr�
test_blocking�szTestInvalidFD.test_blockingN)rArBrCZsinglesr�rQ�localsr�rrrrr�r]r�r�r�r�r�r�rqr�r�r}r�r�r�rrrrr�2sR
�	












�r�c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�	LinkTestscCs tj|_tj�tjd�|_dS)N�2)rrF�file1rr/r1�file2rHrrrrI�szLinkTests.setUpcCs,|j|jfD]}tj�|�rt�|�qdSr!)r�r�rr/r�rG)r&�filerrrr��szLinkTests.tearDownc
Cs�t|�zt�||�Wn0tk
rH}z|�d|�W5d}~XYnXt|d��8}t|d��"}|�tj�|�	�|�	���W5QRXW5QRXdS)N�
os.link(): %sr�)
rrr�r�rXrrMr/�sameopenfilerj)r&r�r�r�r�f2rrr�
_test_link�s zLinkTests._test_linkcCs|�|j|j�dSr!)r�r�r�rHrrr�	test_link�szLinkTests.test_linkcCs(|�t|jt���t|jt����dSr!)r�r>r�r_r�r�rHrrr�test_link_bytes�s�zLinkTests.test_link_bytescCs\zt�d�Wntk
r,t�d��YnX|jd7_|jd|_|�|j|j�dS)N�ñz#Unable to encode for this platform.r�)rr��UnicodeErrorrrr�r�r�rHrrr�test_unicode_name�szLinkTests.test_unicode_nameN)	rArBrCrIr�r�r�r�r�rrrrr��s
r�zPosix specific testsc@s�eZdZdZdZe�eed�d�dd��Z	e�eed�d�dd	��Z
e�eed
�d�dd
��Ze�eed�d�dd��Ze�eed�d�dd��Z
e�eed�d�dd��Ze�eed�d�dd��Ze�eed�d�dd��ZdS)�PosixUidGidTests��setuidztest needs os.setuid()cCsBt��dkr|�ttjd�|�ttjd�|�ttj|j�dS�Nrz
not an int)r�getuidrZr5r�ra�
OverflowError�UID_OVERFLOWrHrrr�test_setuid�szPosixUidGidTests.test_setuid�setgidztest needs os.setgid()cCsFt��dkr ts |�ttjd�|�ttjd�|�ttj|j�dSr�)	rr��HAVE_WHEEL_GROUPrZr5r�rar��GID_OVERFLOWrHrrr�test_setgid�szPosixUidGidTests.test_setgid�seteuidztest needs os.seteuid()cCsBt��dkr|�ttjd�|�ttjd�|�ttj|j�dSr�)	rr�rZr5r�ra�setegidr�r�rHrrr�test_seteuid�szPosixUidGidTests.test_seteuidr�ztest needs os.setegid()cCsFt��dkr ts |�ttjd�|�ttjd�|�ttj|j�dSr�)	rr�r�rZr5r�rar�r�rHrrr�test_setegid�szPosixUidGidTests.test_setegid�setreuidztest needs os.setreuid()cCsnt��dkr|�ttjdd�|�ttjdd�|�ttjdd�|�ttj|jd�|�ttjd|j�dSr�)rr�rZr5r�rar�r�rHrrr�
test_setreuid�szPosixUidGidTests.test_setreuidcCst�tjddg�dS)Nr�z,import os,sys;os.setreuid(-1,-1);sys.exit(0)�r�rr_r�rHrrr�test_setreuid_neg1�s
�z#PosixUidGidTests.test_setreuid_neg1�setregidztest needs os.setregid()cCsrt��dkr"ts"|�ttjdd�|�ttjdd�|�ttjdd�|�ttj|jd�|�ttjd|j�dSr�)	rr�r�rZr5r�rar�r�rHrrr�
test_setregid�szPosixUidGidTests.test_setregidcCst�tjddg�dS)Nr�z,import os,sys;os.setregid(-1,-1);sys.exit(0)r�rHrrr�test_setregid_neg1�s
�z#PosixUidGidTests.test_setregid_neg1N)rArBrCr�r�rrrrr�r�r�r�r�r�r�r�rrrrr��s$






r�c@sNeZdZdd�Zdd�Zdd�Zdd�Ze�e	e
d	�d
�dd��Zd
d�ZdS)�Pep383Testscs�tjrtj|_ntjr tj|_ntj|_t�|j�|_g��fdd�}|tj�tjr`|tj�tjrp|tj��s~|�	d�t
�|_t�|j�zL�D]B}t�
tj�|j|��t�|�}||jkr�td��|j�|�q�Wnt�|j��YnXdS)Ncs4zt�|�}Wntk
r$YdSX��|�dSr!)rr�r�r�)�fn��bytesfnrr�add_filenames
z'Pep383Tests.setUp.<locals>.add_filenamez&couldn't create any non-ascii filenamezduplicate filename)r�TESTFN_UNENCODABLEr�ZTESTFN_NONASCIIrFrr�ZbdirZTESTFN_UNICODErXr��	unicodefnr2Zcreate_empty_filer/r1r?r��add�shutilr)r&r�r�rr�rrIs6







zPep383Tests.setUpcCst�|j�dSr!)r�rr�rHrrrr�&szPep383Tests.tearDownc	Csl|j}tt�|j��}|�||�t��}z0t�tj�|�tt���tt�tj���W5t�|�XdSr!)	r�r�rr�r�r.r"r3r0)r&r:�foundZcurrent_directoryrrr�test_listdir)s$zPep383Tests.test_listdircCs.|jD]"}ttj�|j|�d�}|��qdS�Nrt)r�rrr/r1r�rL)r&r�rQrrr�	test_open5s
zPep383Tests.test_openr�r�cCs*|jD]}tj�|j|�}t�|�qdSr!)r�rr/r1r�r�)r&r��fullnamerrr�test_statvfs:s
zPep383Tests.test_statvfscCs&|jD]}t�tj�|j|��qdSr!)r�rr�r/r1r�)r&r�rrr�	test_statCs
zPep383Tests.test_statN)
rArBrCrIr�r�r�rrrrr�r�rrrrr��s%�
r�c@sFeZdZdd�Zdd�Zdd�Zdd�Ze�d	�d
d��Z	dd
�Z
dS)�Win32KillTestscCsvddl}ddlm}ddl}|jjj}|j|_|j|�	|j
�|j|�	|j�|�	|j�|�	|j�f|_d}t
jtjdd�|�gt
jt
jt
jd�}|�|jj�|�|jj�|�|jj�d\}}	||	k�rJ|��dk�rJ|�t|��}
||�|j���|
|�|
�ddd�}|�|dd�|
j�r6|� ||
j�!���qTt"�#d	�|d
7}q�|�$d�t%�&|j'|�|� |�(�|�dS)Nr��wintypes�runningr�z<import sys;sys.stdout.write('{}');sys.stdout.flush();input())rB�stderr�stdin�rr�zPeekNamedPipe failed皙�����?rSz1Did not receive communication from the subprocess))rHr��msvcrtrIrJ�
PeekNamedPipe�BOOL�restype�HANDLE�POINTERZc_char�DWORD�argtypesr��Popenr_r�ry�PIPErurBrLr�r��pollZcreate_string_bufferr+Z
get_osfhandlerjZsizeofrr�r.r�r>�sleepr�r�kill�pid�wait)r&�sigrHr�r�r�r=�procr@�maxrLZrsltrrr�_killIsX




�
����


zWin32KillTests._killcCs|�tj�dSr!)r��signal�SIGTERMrHrrr�test_kill_sigtermsz Win32KillTests.test_kill_sigtermcCs|�d�dS)Nr�)r�rHrrr�
test_kill_int�szWin32KillTests.test_kill_intcCs�dt��}t�dd|�}d|d<tjtjtj�	tj�
t�d�|gtjd�}d\}}||kr�|�
�dkr�|ddkrvq�t�d�|d7}qTt�|jtj�|�d	�t�|j|�t�d
�|�
�s�t�|jtj�|�d�|��dS)Nz
test_os_%sr�rSrzwin_console_handler.pyr
r�r�z'Subprocess didn't finish initializationg�?zsubprocess did not stop on {})�uuidZuuid1�mmapr�r�r_r�rr/r1r9r�ZCREATE_NEW_PROCESS_GROUPr�r>r�r�r�r��SIGINTr�ry)r&�eventrZtagname�mr�r@r�rrr�_kill_with_event�s0���



zWin32KillTests._kill_with_eventz.subprocesses aren't inheriting Ctrl+C propertycCsdddlm}ddl}|�|j��}|jjj}|�|j�|jf|_|j|_	||d�|�
tjd�dS)Nrr��CTRL_C_EVENT)
rHr�r�Zc_intrIrJ�SetConsoleCtrlHandlerr�r�r�rr�r)r&r�rHZNULLr	rrr�test_CTRL_C_EVENT�s

�
z Win32KillTests.test_CTRL_C_EVENTcCs|�tjd�dS)N�CTRL_BREAK_EVENT)rr�rrHrrr�test_CTRL_BREAK_EVENT�sz$Win32KillTests.test_CTRL_BREAK_EVENTN)rArBrCr�rrrr�skipr
rrrrrr�Gs6
r�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�Win32ListdirTestsc
Cs�g|_td�D]r}d|}tj�tj|�}d|}tj�tj|�}t�|�t|d��}|�	d|�W5QRX|j�
||g�q|j��dS)NrUzSUB%dzFILE%drz'I'm %s and proud of it. Blame test_os.
)�
created_pathsr�rr/r1rrFr�rr�extendr�)r&r�Zdir_nameZdir_path�	file_nameZ	file_pathrQrrrrI�s
zWin32ListdirTests.setUpcCst�tj�dSr!)r�rrrFrHrrrr��szWin32ListdirTests.tearDowncCsH|�tt�tj��|j�|�tt�t�tj���dd�|jD��dS)NcSsg|]}t�|��qSr�rr��rr/rrrr	�szCWin32ListdirTests.test_listdir_no_extended_path.<locals>.<listcomp>)r.�sortedrr�rrFrr�rHrrr�test_listdir_no_extended_path�s��z/Win32ListdirTests.test_listdir_no_extended_pathcCshdtj�tj�}|�tt�|��|j�dt�	tj�tj��}|�tt�|��dd�|jD��dS)N�\\?\�\\?\cSsg|]}t�|��qSrrrrrrr	�sz@Win32ListdirTests.test_listdir_extended_path.<locals>.<listcomp>)
rr/rGrrFr.rr�rr�rrrr�test_listdir_extended_path�s��z,Win32ListdirTests.test_listdir_extended_pathN)rArBrCrIr�rrrrrrr�s
r�readlinkzneeds os.readlink()c@szeZdZdZej�e�Ze�	e�Z
e�	e�Zdd�Zdd�Z
dd�Zdd	�Zejd
d��Zejdd
��Zejdd��ZdS)�
ReadlinkTestsZreadlinktestcCsbtj�|�}tj�|�}tjdkrRdd�}||�r>|dd�}||�rR|dd�}|�||�dS)Nr�cSs|�t|t�rdnd�S)Nrr)�
startswithr�r>)r�rrr�<lambda>�s�z/ReadlinkTests.assertPathEqual.<locals>.<lambda>rh)rr/�normcaser_r�r.)r&�left�rightZ
has_prefixrrr�assertPathEqual�s
zReadlinkTests.assertPathEqualcCsT|�tj�|j��|�tj�|j��|�tj�|j��|�tj�|j��dSr!)	rMrr/r��filelink_target�filelinkb_targetr-�filelink�	filelinkbrHrrrrI	szReadlinkTests.setUpcCs0t|j�}|�ttj|j�|�ttj|�dSr!)rr!rZr5rr)r&r!rrr�test_not_symlink	s
zReadlinkTests.test_not_symlinkcCs(|�ttjd�|�ttjtd��dS)Nzmissing-link)rZr4rrrrHrrr�test_missing_link	s
�zReadlinkTests.test_missing_linkcCsBt�|j|j�|�tj|j�t|j�}|�t�	|�|j�dSr!)
rr�r!r#rurrGrr r)r&r#rrr�
test_pathlike	s
zReadlinkTests.test_pathlikecCsNt�|j|j�|�tj|j�t�t|j��}|�	||j�|�
|t�dSr!)rr�r"r$rurrGrrr r#r>rrrr�test_pathlike_bytes	s
z!ReadlinkTests.test_pathlike_bytescCsJt�|j|j�|�tj|j�t�|j�}|�||j�|�	|t
�dSr!)rr�r"r$rurrGrr r#r>rrrr�
test_bytes	s
zReadlinkTests.test_bytesN)rArBrCr#rr/rGr�r!r�r$r"r rIr%r&r�skip_unless_symlinkr'r(r)rrrrr�s



rc@s�eZdZdZej�e�ZdZ	ej�
e�ZdZdd�Z
dd�Zdd	�Zd
d�Zdd
�Zdd�Zdd�Zdd�Zdd�Zdd�Ze�ej�d�o�ej�d�d�dd��Zdd�Zdd �Zd!S)"�Win32SymlinkTestsZfilelinktestZdirlinktestzmissing linkcCsdSr!rrHrrrrI1	szWin32SymlinkTests.setUpcCsRtj�|j�rt�|j�tj�|j�r4t�|j�tj�|j�rNt�|j�dSr!)	rr/r�r#r��dirlinkr
rE�missing_linkrHrrrr�8	szWin32SymlinkTests.tearDowncCs`t�|j|j�|�tj�|j��|�tj�|j��|�tj�|j��|�	|j|j�dSr!)
rr��dirlink_targetr,rMr/r�r��islink�
check_statrHrrr�test_directory_link@	s
z%Win32SymlinkTests.test_directory_linkcCs`t�|j|j�|�tj�|j��|�tj�|j��|�tj�|j��|�	|j|j�dSr!)
rr�r!r#rMr/r��isfiler/r0rHrrr�test_file_linkG	s
z Win32SymlinkTests.test_file_linkcCs6|j}tj�|�rt�|�d}d}t�|||�dS)Nz"c:\\target does not exist.29r3c740T)r-rr/rEr�r�)r&Zlinknamer�Z
target_is_dirrrr�_create_missing_dir_linkN	s
z*Win32SymlinkTests._create_missing_dir_linkcCs|��t�|j�dSr!)r4rr�r-rHrrr�,test_remove_directory_link_to_missing_targetX	sz>Win32SymlinkTests.test_remove_directory_link_to_missing_targetcCs |��|�tj�|j��dSr!)r4r-rr/r�r-rHrrr�.test_isdir_on_directory_link_to_missing_target_	sz@Win32SymlinkTests.test_isdir_on_directory_link_to_missing_targetcCs|��t�|j�dSr!)r4rr
r-rHrrr�.test_rmdir_on_directory_link_to_missing_targetc	sz@Win32SymlinkTests.test_rmdir_on_directory_link_to_missing_targetcCsn|�t�|�t�|��|�t�|�t�|��t�|�}|�t�|�t�|��|�t�|�t�|��dSr!)r.rr�rr
r�)r&r�r�Z
bytes_linkrrrr0g	s

zWin32SymlinkTests.check_statc	Cs@tj�tj�}tj�|d�}tj�|d�}|�tj|�t�|�t�|�t�|�tj�tj�|d��}t	|�t�
�}z�t�|�tj�|d�}t�tj�
|�d�|�dt�t�
���|�t�|�t�d��t�|�|�t�|�t�tj�
|���t�|�|�t�|�t�tj�
|���W5t�|�XdS)N�level2�level3r�r�)rr/rGrrFr1rurr2rr"r3r��relpathr�r�r.r�)r&Zlevel1r8r9r�Zorig_dirr�rrr�
test_12084o	s2




�
�zWin32SymlinkTests.test_12084�C:\Users\All Users�C:\ProgramDatazTest directories not foundcCs"t�d�}|�tj�|d��dS)Nr<r=)rrrMr/�samefile)r&r�rrr�
test_29248�	s
zWin32SymlinkTests.test_29248c	Cs�d}tjj|gd�}d||f||f|dd�|dd�fg}|D]�\}}zt�||�Wntk
rpYn&Xzt�|�Wntk
r�YnXzt�t�|�t�|��Wntk
r�YqDXzt�|�WqDtk
r�YqDXqDdS)NZXXXXXXXXXXXXXXXXXXXXXXXXXXXrTrE�)rr/r1r�r4r�r5r�)r&Zsegmentr/Z
test_casesr��destrrr�test_buffer_overflow�	s.
�z&Win32SymlinkTests.test_buffer_overflowcs�tj�d��tj���s"|�d��fdd�t�t���d�D�}|D]\}tj	r`t
�t
d|�t�|�}|�|t�
|��|�t
�|j��|�|jt
j�q�qF|�d�dS)Nz$%LOCALAPPDATA%\Microsoft\WindowsAppsz%test requires a WindowsApps directorycsg|]}tj��|��qSr)rr/r1�rr*�rKrrr	�	s�z6Win32SymlinkTests.test_appexeclink.<locals>.<listcomp>z*.exezTesting withz$test requires an app execution alias)rr/�
expandvarsr�rX�fnmatch�filterr�rr7r8r
r.r�r-�S_ISLNKr��st_reparse_tagZIO_REPARSE_TAG_APPEXECLINK)r&�aliases�aliasrrrDr�test_appexeclink�	s 

�

z"Win32SymlinkTests.test_appexeclinkN)rArBrCr#rr/rGr�r!r,r9r.r-rIr�r1r3r4r5r6r7r0r;rrrEr�r?rBrLrrrrr+(	s,
#
�
#r+c@sDeZdZdZej�ej�e��Z	dd�Z
dd�Zdd�Zdd	�Z
d
S)�Win32JunctionTestsZjunctiontestcCsdSr!rrHrrrrI�	szWin32JunctionTests.setUpcCstj�|j�rt�|j�dSr!)rr/rE�junctionrGrHrrrr��	szWin32JunctionTests.tearDowncCs�t�|j|j�|�tj�|j��|�tj�|j��|�tj�	|j��|�
t�|j�t�|j��|�
t�|j�t�|j��|�tj�|j��|�
tj�d|j�tj�t�|j���dS)Nr)�_winapi�CreateJunction�junction_targetrNrMrr/rEr�r�rr�r
r.r-r/rrrHrrr�test_create_junction�	s�z'Win32JunctionTests.test_create_junctioncCs\t�|j|j�|�tj�|j��|�tj�|j��t�	|j�|�
tj�|j��dSr!)rOrPrQrNrMrr/r�rErGr-rHrrr�test_unlink_removes_junction�	s
z/Win32JunctionTests.test_unlink_removes_junctionN)rArBrCrNrr/r9rGr�rQrIr�rRrSrrrrrM�	s
rMc@seZdZdd�ZdS)�Win32NtTestsc
Cs0t�d�}t�d�}ddl}|jddd�}|jj|j_|jj|j	_|jj|jj
f|j	_|��}|j��}|�	||�
|��}|�d|�|j}dd	d
tg}td�D]V}	|D]L}
z|�|
�Wntk
r�YnXzt�|
�Wq�tk
r�Yq�Xq�q�|�	||�
|��}|�d|�|j|}|�d|�dS)Nr�rHrzKernel32.dllT)Zuse_last_errorrSz\\?\C:z\\?\NULz	\\?\CONINrT)r�
import_moduleZctypes.wintypesZWinDLLr�r�ZGetCurrentProcessr�r�ZGetProcessHandleCountZLPDWORDr�r�Zbyrefr.r�r�r�Z_getfinalpathname�	Exceptionrr�)r&r�rHZkernelZhprocZhandle_countrMZbefore_count�	filenames�_rZhandle_deltarrr�test_getfinalpathname_handles�	sB

�
�

z*Win32NtTests.test_getfinalpathname_handlesN)rArBrCrYrrrrrT�	srTc@s$eZdZdd�Zdd�Zdd�ZdS)�NonLocalSymlinkTestscCst�d�dS)Nz
base/some_dir)rr�rHrrrrI0
szNonLocalSymlinkTests.setUpcCst�d�dS)Nr�)r�rrHrrrr�9
szNonLocalSymlinkTests.tearDowncCstj�dd�}t�d|�dS)Nr�Z	some_linkZsome_dir)rr/r1r�)r&r�rrr�test_directory_link_nonlocal<
sz1NonLocalSymlinkTests.test_directory_link_nonlocalN)rArBrCrIr�r[rrrrrZ-
s	rZc@seZdZdd�Zdd�ZdS)�FSEncodingTestscCs(|�t�d�d�|�t�d�d�dS)Nsabc�uabcŁ)r.rr�r?rHrrr�test_nopN
szFSEncodingTests.test_nopc	CsHdD]>}zt�|�}Wntk
r.YqYnX|�t�|�|�qdS)N)u	unicodeŁulatiné�ascii)rr�r�r.r?)r&r�r�rrr�
test_identityR
s
zFSEncodingTests.test_identityN)rArBrCr]r_rrrrr\M
sr\c@sVeZdZdd�Ze�e�d�oDe�oDe	j
�d�pDee
d�oDee
d�d�dd	��Zd
S)�DeviceEncodingTestscCs|�t�d��dS)Ni@�)rr�device_encodingrHrrr�test_bad_fd_
szDeviceEncodingTests.test_bad_fdr�win�nl_langinfo�CODESETz>test requires a tty and either Windows or nl_langinfo(CODESET)cCs(t�d�}|�|�|�t�|��dSr^)rraZassertIsNotNonerM�codecs�lookup)r&�encodingrrr�test_device_encodingc
s

z(DeviceEncodingTests.test_device_encodingN)rArBrCrbrrrr�rr_r�rr�localerirrrrr`]
s"�r`c@sXeZdZe�eed�d�dd��Zdd�Zdd�Z	d	d
�Z
e�ejdkd�d
d��Z
dS)�PidTests�getppidztest needs os.getppidcCs<tjtjddgtjd�}|��\}}|�t|�t�	��dS)Nr�zimport os; print(os.getppid()))rB)
r�r�r_r�r��communicater.r�r�getpid)r&r�rBrXrrr�test_getppidm
s
��zPidTests.test_getppidcCs�tjdkr(dtj�d�dd|�d�g}ntjd|g}t�tjtj|�}t�|d�\}}tjdkrr|�||d>�n$|�t�	|�|�|�t�
|�|�|�||�dS)Nr��"r�rr�)r_r�r�r�spawnv�P_NOWAIT�waitpidr.rM�	WIFEXITED�WEXITSTATUS)r&r��exitcoder�r�Zpid2�statusrrr�
check_waitpidv
s

zPidTests.check_waitpidcCs|jddd�dS)Nrmr)r�rv�rxrHrrr�test_waitpid�
szPidTests.test_waitpidcCs"d}d|�d�}|j||d�dS)N�zimport sys; sys.exit(�)�rvry)r&rvr�rrr�test_waitpid_exitcode�
szPidTests.test_waitpid_exitcoder��win32-specific testcCs"d}d|�d�}|j||d�dS)Nl:z$import _winapi; _winapi.ExitProcess(r|r}ry)r&ZSTATUS_CONTROL_C_EXITr�rrr�test_waitpid_windows�
szPidTests.test_waitpid_windowsN)rArBrCrrrrrorxrzr~r_r�r�rrrrrkl
s
rkc@s$eZdZddd�dd�Zed�dd��Zed�d	d
��Zed�dd
��Zed�dd��Zed�dd��Z	ed�dd��Z
ed�dd��Zed�dd��Zed�dd��Z
ed�dd ��Zed�d!d"��Zed�d#d$��Zed�d%d&��Zed�d'd(��Zd)d*�Zed�d+d,��Zed�d-d.��Zd/S)0�
SpawnTestsF��with_env�	use_bytesc	Cs�d|_tj}|�tj|�|s*d|j}n8ttj�|_t	t
���|_|j|j|j<d|j|jf}t
|d��}|�|�W5QRXtj|g}|r�dd�|D�}dd�|j��D�|_|S)	N�zimport sys; sys.exit(%s)z4import sys, os; magic = os.environ[%r]; sys.exit(%s)rcSsg|]}t�|��qSrrrCrrrr	�
sz*SpawnTests.create_args.<locals>.<listcomp>cSs"i|]\}}t�|�t�|��qSrr)r�k�vrrr�
<dictcomp>�
s�z*SpawnTests.create_args.<locals>.<dictcomp>)rvrrFrurGr`rrr|r$rZuuid4rhrrr_r�rf)r&r�r�rr�rr�rrr�create_args�
s(
�
�zSpawnTests.create_args�spawnlcCs2|��}tjtj|df|��}|�||j�dSr^)r�rr��P_WAITr.rv�r&r�rvrrr�test_spawnl�
szSpawnTests.test_spawnl�spawnlecCs<|jdd�}tjtj|df||jf��}|�||j�dS�NT)r�r)r�rr�r�r|r.rvr�rrr�test_spawnle�
szSpawnTests.test_spawnle�spawnlpcCs2|��}tjtj|df|��}|�||j�dSr^)r�rr�r�r.rvr�rrr�test_spawnlp�
szSpawnTests.test_spawnlp�spawnlpecCs<|jdd�}tjtj|df||jf��}|�||j�dSr�)r�rr�r�r|r.rvr�rrr�
test_spawnlpe�
szSpawnTests.test_spawnlperqcCs.|��}t�tj|d|�}|�||j�dSr^)r�rrqr�r.rvr�rrr�test_spawnv�
szSpawnTests.test_spawnv�spawnvecCs6|jdd�}t�tj|d||j�}|�||j�dSr��r�rr�r�r|r.rvr�rrr�test_spawnve�
szSpawnTests.test_spawnve�spawnvpcCs.|��}t�tj|d|�}|�||j�dSr^)r�rr�r�r.rvr�rrr�test_spawnvp�
szSpawnTests.test_spawnvp�spawnvpecCs6|jdd�}t�tj|d||j�}|�||j�dSr�)r�rr�r�r|r.rvr�rrr�
test_spawnvpe�
szSpawnTests.test_spawnvpecCs�|��}t�tj|d|�}t�|d�}|�|d|�|d}ttd�rp|�t�|��|�t�	|�|j
�n|�||j
d>�dS)NrrSrtr�)r�rrqrrrsr.rrMrtrurv)r&r�r�r�rwrrr�test_nowait�
s
zSpawnTests.test_nowaitcCs8|jddd�}t�tj|d||j�}|�||j�dS)NTr�rr�r�rrr�test_spawnve_bytes�
szSpawnTests.test_spawnve_bytescCs>|��}|�ttjtj|d�|�ttjtj|dd�dS�NrrF)r�rZr�rr�rr�r&r�rrr�test_spawnl_noargs�
szSpawnTests.test_spawnl_noargscCsB|��}|�ttjtj|di�|�ttjtj|ddi�dSr�)r�rZr�rr�rrr�rrr�test_spawnle_noargs�
szSpawnTests.test_spawnle_noargscCsv|��}|�ttjtj|dd�|�ttjtj|dg�|�ttjtj|dd�|�ttjtj|ddg�dS�Nrrr�rF)r�rZr�rrqrrr�rrr�test_spawnv_noargss
zSpawnTests.test_spawnv_noargscCs~|��}|�ttjtj|ddi�|�ttjtj|dgi�|�ttjtj|ddi�|�ttjtj|ddgi�dSr�)r�rZr�rr�rrr�rrr�test_spawnve_noargss
zSpawnTests.test_spawnve_noargsc	Csdtjddg}tj��}d|d<z|tj|d||�}Wntk
rJYnX|�|d�tj��}d|d<z|tj|d||�}Wntk
r�YnX|�|d�tj��}d	|d
<z|tj|d||�}Wntk
r�YnX|�|d�tj	}|�
tj|�t|d��}|�
d�W5QRXtj|g}tj��}d
|d<|tj|d||�}|�|d�dS)Nr�rmrnror�rprqrrrsrzPimport sys, os
if os.getenv("FRUIT") != "orange=lemon":
    raise AssertionErrorzorange=lemon)r_r�rrr�r�r�r.rrFrurGrr)r&�spawnr�rtrvrrrrr�_test_invalid_envs>




zSpawnTests._test_invalid_envcCs|�tj�dSr!)r�rr�rHrrr�test_spawnve_invalid_envBsz#SpawnTests.test_spawnve_invalid_envcCs|�tj�dSr!)r�rr�rHrrr�test_spawnvpe_invalid_envFsz$SpawnTests.test_spawnvpe_invalid_envN)rArBrCr�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr��
sD













.
r�z>Skip due to platform/environment differences on *NIX buildbots�getloginztest needs os.getloginc@seZdZdd�ZdS)�
LoginTestscCst��}|�t|�d�dSr^)rr�rr+)r&Z	user_namerrr�
test_getloginPszLoginTests.test_getloginN)rArBrCr�rrrrr�Msr��getpriority�setpriorityz'needs os.getpriority and os.setpriorityc@seZdZdd�ZdS)�ProgramPriorityTestscCs�t�tjt���}t�tjt��|d�zFt�tjt���}|dkr^|dkr^t�	d|��n|�
||d�W5zt�tjt��|�Wn0tk
r�}z|jtjkr��W5d}~XYnXXdS)NrS�z?unable to reliably test setpriority at current nice level of %s)rr��PRIO_PROCESSrnr�r5r6ZEACCESrrr.)r&r�rVZnew_priorrr�test_set_get_priorityZs�z*ProgramPriorityTests.test_set_get_priorityN)rArBrCr�rrrrr�Usr�c@sveZdZGdd�dej�Zdd�Zedd��Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�ZeZdd�Zdd�ZdS)�SendfileTestServerc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)zSendfileTestServer.HandlercCs.tj�||�g|_d|_d|_|�d�dS)NTFs220 ready
)�asynchat�
async_chat�__init__�	in_buffer�
accumulate�closed�push)r&�connrrrr�qs
z#SendfileTestServer.Handler.__init__cCs |�d�}|jr|j�|�dS)N�)�recvr�r�r�rGrrr�handle_readxs
z&SendfileTestServer.Handler.handle_readcCsd�|j�S)Nr�)r1r�rHrrr�get_data}sz#SendfileTestServer.Handler.get_datacCs|��d|_dSr�)rLr�rHrrr�handle_close�sz'SendfileTestServer.Handler.handle_closecCs�dSr!rrHrrr�handle_error�sz'SendfileTestServer.Handler.handle_errorN)rArBrCr�r�r�r�r�rrrr�Handleros
r�cCsptj�|�tj�|�|�tjtj�|�	|�|�
d�|j��dd�\|_|_
d|_d|_t��|_dS)Nr�rUF)�	threading�Threadr��asyncore�
dispatcherZ
create_socket�socket�AF_INET�SOCK_STREAM�bind�listen�getsockname�host�port�handler_instance�_active�Lock�_active_lock)r&�addressrrrr��s

zSendfileTestServer.__init__cCs|jSr!)r�rHrrrr��szSendfileTestServer.runningcCs$t��|_tj�|�|j��dSr!)r��Event�_SendfileTestServer__flagr��startr�rHrrrr��s
zSendfileTestServer.startcCsd|_|��dSr�)r�r1rHrrr�stop�szSendfileTestServer.stopcCs&t|jdd�st�d�q|��dS)Nr�F���MbP?)r�r�r>r�r�rHrrrr��szSendfileTestServer.waitcCsLd|_|j��|jr@tjr@|j��tjddd�|j��qt�	�dS)NTr�rS)�timeoutr@)
r�r�r�r�Z
socket_mapr��acquireZloop�releaseZ	close_allrHrrr�run�s

zSendfileTestServer.runcCs|��\}}|�|�|_dSr!)�acceptr�r�)r&r��addrrrr�
handle_accept�sz SendfileTestServer.handle_acceptcCs|��dSr!)rLrHrrr�handle_connect�sz!SendfileTestServer.handle_connectcCsdSr^rrHrrr�writable�szSendfileTestServer.writablecCs�dSr!rrHrrrr��szSendfileTestServer.handle_errorN)rArBrCr�r�r�r��propertyr�r�r�r�r�r�r�r�r�r�rrrrr�ms

	r��sendfileztest needs os.sendfile()c@s
eZdZddZej�d�o8ej�d�o8ej�d�Ze�	ed�Z
e�	ejdkd�Ze
d	d
��Ze
dd��Zd
d�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Ze
dd��Ze
dd ��Ze
ed!d"���Ze
ed#d$���Ze
e�	eed%�d&�d'd(���Zd)S)*�TestSendfiles�12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde��linuxZsolarisZsunosz%requires headers and trailers supportr�z(test is only meaningful on 32-bit buildscCst��|_ttj|j�dSr!)rZthreading_setuprhrrF�DATArrrrr�s
zTestSendfile.setUpClasscCstj|j�t�tj�dSr!)rZthreading_cleanuprhrGrFrrrrr'�szTestSendfile.tearDownClasscCs~ttjdf�|_|j��t��|_|j�|jj|jj	f�|j�
d�|j�d�|j��|_
ttjd�|_|j��|_dS)NrrSr�rt)r�rZHOST�serverr�r��client�connectr�r��
settimeoutr�rj�socknorrFr�rHrrrrI�s

zTestSendfile.setUpcCs0|j��|j��|jjr&|j��d|_dSr!)r�rLr�r�r�r�rHrrrr��s



zTestSendfile.tearDownc
Osfztj||�WStk
r^}z2|jtjkr0�n|jtjtjfkrLWY�
qn�W5d}~XYqXqdSr!)rr�r5r6Z
ECONNRESET�EAGAIN�EBUSY)r&r�r�rVrrr�sendfile_wrapper�s
zTestSendfile.sendfile_wrappercCs�d}d}d}|t|j�krd|�|j|j||�}|dkr8qd||7}||7}|�||k�|�||�q|�|t|j��|j�t	j
�|j��|j�
�|jj��}|�t|�t|j��|�||j�dS)Nrr�)r+r�r�r�rjrMr.r��shutdownr��	SHUT_RDWRrLr�r�r�r�)r&�
total_sent�offset�nbytes�sentrvrrr�test_send_whole_file�s$

z!TestSendfile.test_send_whole_filecCs�d}t|j�d}t|j�|}d}||krj|�|j|j||�}|dkrJqj||7}||7}|�||k�q$|j�tj	�|j�
�|j��|jj
��}|jt|j�dd�}|�|t|��|�t|�t|��|�||�dS)NrrUr�)r+r�r�r�rjrMr�r�r�r�rLr�r�r�r�r.)r&r�r�Z	must_sendr�r�rvr:rrr�test_send_at_certain_offsets&

z(TestSendfile.test_send_at_certain_offsetc
Cs�t|j�d}zt�|j|j|d�}Wn0tk
rV}z|jtjkrF�W5d}~XYnX|�	|d�|j
�tj
�|j
��|j��|jj��}|�	|d�dS)Nr�rr�)r+r�rr�r�rjr5r6�EINVALr.r�r�r�r�rLr�r�r�r�)r&r�r�r�rvrrr�test_offset_overflow*s

z!TestSendfile.test_offset_overflowc	Cs@|�t��}t�|j|jdd�W5QRX|�|jjtj	�dS)Nr�r�)
rZr5rr�r�rjr.rr6r��r&r�rrr�test_invalid_offset;sz TestSendfile.test_invalid_offsetc	CsFtjf|jddd�d|ji��|jrBtj|j|jdddddd�dS)Nrr�)rAr�r@�inr)r�r@�headers�trailersr�)rr�r�rj�SUPPORT_HEADERS_TRAILERSrHrrr�
test_keywords@s��zTestSendfile.test_keywordscCs�d}d|jdd�}tj|j|jddddgd�}|�|d�||7}d}|t|�kr�tt|�|d�}|�|j|j||�}|dkr�q�|�||�||7}||7}qJ|�	|t|��|j
��|j�
�|jj��}|�	t|�t|��dS)	Nrsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr�r�sxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy�r�i)r�rr�r�rjZassertLessEqualr+�minr�r.r�rLr�r�r�r��hash)r&r�Z
expected_datar�r�r�rvrrr�test_headersJs0��


zTestSendfile.test_headersc	Cs�tjd}d}|�tj|�t||�t|d��P}tj|j|�	�ddddgd�|j
��|j�
�|jj��}|�|d	�W5QRXdS)
Nr�sabcdefrtrr�s123456s789�r�sabcde123456789)rrFrurGrrrr�r�rjr�rLr�r�r�r�r.)r&r�Z	file_datarQrvrrr�
test_trailerscs

�

zTestSendfile.test_trailersc	CsXd|jj_|�t��(}tj|j|jddddgdd�W5QRX|�	|j
jtj�dS)NFr�x���r�
r�r�r�rZr5rr�r�rjr.rr6r�r�rrr�test_headers_overflow_32bitsss
�z)TestSendfile.test_headers_overflow_32bitsc	CsXd|jj_|�t��(}tj|j|jddddgdd�W5QRX|�	|j
jtj�dS)NFrrr	r
rrr�rrr�test_trailers_overflow_32bits|s
�z*TestSendfile.test_trailers_overflow_32bits�SF_NODISKIOztest needs os.SF_NODISKIOc
CsZztj|j|jddtjd�Wn6tk
rT}z|jtjtjfkrD�W5d}~XYnXdS)Nrr�)r�)	rr�r�rjrr5r6r�r�)r&rVrrr�
test_flags�s�
zTestSendfile.test_flagsN)rArBrCr�r_r�rrrrZrequires_headers_trailers�maxsizeZrequires_32br(rr'rIr�r�r�r�r�r�rrrrr
rrrrrrrr��sN����




�r�c	Cs|ttd�sdSzZttjdd��B}zt�|��dd�Wn$tk
rZYW5QR�W�dSXW5QRXW5t�tj�XdS)N�setxattrFrr�	user.testr�T)	rrrrGrFrrrjr5)rrrr�supports_extended_attributes�s
$rz(no non-broken extended attribute supportrUr��'c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�ExtendedAttributeTestsc
	Ks�tj}|�tj|�t|�|�t��}|||d�f|�W5QRX|�|jj	t	j
�||�}	|�|	t�|||d�df|�t
|	�}
|
�d�|�t
||��|
�|�||df|�d�|||d�dtjf|�|�||df|�d�|�t��}|||d�dtjf|�W5QRX|�|jj	t	j�|�t��}|||d�dtjf|�W5QRX|�|jj	t	j
�|||d�dtjf|�|
�d�|�t
||��|
�|||d�f|�|�t��}|||d�f|�W5QRX|�|jj	t	j
�|
�d�|�t
||��|
�|�|||d�f|�d�|||d�df|�|�|||d�f|�d�|||d�f|�td	d
�td�D��}|D]}|||df|��q||�t
||��t
|	�t
|�B�dS)
N�	user.testr�rr5sbyez
user.test2sfoosaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacss|]}d�|�VqdS)zuser.test{}Nrx)rr�rrrrz�sz;ExtendedAttributeTests._check_xattrs_str.<locals>.<genexpr>r�r)rrFrurGrrZr5r.rr6�ENODATAr#r�r�r�r�
XATTR_REPLACE�XATTR_CREATE�EEXISTr�rr�)
r&rp�getxattrr�removexattr�	listxattrr�r�r�Z
init_xattrZxattrZmany�thingrrr�_check_xattrs_str�sL
""

z(ExtendedAttributeTests._check_xattrs_strcOsB|jtf|�|�t�tj�|jtjf|�|�t�tj�dSr!)rr$rrGrFrr�r�rrr�
_check_xattrs�sz$ExtendedAttributeTests._check_xattrscCs|�tjtjtjtj�dSr!�r rrrrrrHrrr�test_simple�s�z"ExtendedAttributeTests.test_simplecCs |jtjtjtjtjdd�dS)NFrPr!rHrrr�
test_lpath�s�z!ExtendedAttributeTests.test_lpathcCs4dd�}dd�}dd�}dd�}|�||||�dS)	Nc
Ws6t|d��"}tj|��f|��W5QR�SQRXdSr�)rrrrj�r/r�rrrrr�sz1ExtendedAttributeTests.test_fds.<locals>.getxattrc	Ws0t|dd��}tj|��f|��W5QRXdS�Nr7r)rrrrjr$rrrr�sz1ExtendedAttributeTests.test_fds.<locals>.setxattrc	Ws0t|dd��}tj|��f|��W5QRXdSr%)rrrrjr$rrrr�sz4ExtendedAttributeTests.test_fds.<locals>.removexattrc
Ws6t|d��"}tj|��f|��W5QR�SQRXdSr�)rrrrjr$rrrr�sz2ExtendedAttributeTests.test_fds.<locals>.listxattr)r )r&rrrrrrr�test_fds�s
zExtendedAttributeTests.test_fdsN)rArBrCrr r"r#r&rrrrr�s
0r�get_terminal_sizezrequires os.get_terminal_sizec@seZdZdd�Zdd�ZdS)�
TermsizeTestsc
Csxzt��}WnJtk
rV}z,tjdks:|jtjtjfkrD|�d��W5d}~XYnX|�	|j
d�|�	|jd�dS)Nr��failed to query terminal sizer)rr'r5r_r�r6r��ENOTTYrXZassertGreaterEqual�columns�lines)r&rrr�rrr�test_does_not_crash�s
z!TermsizeTests.test_does_not_crashc
Cs�zt�ddg�����}Wn&ttjtfk
r@|�d�YnXt|d�t|d�f}zt	�
tj�
��}WnJtk
r�}z,tjdks�|jtjtjfkr�|�d��W5d}~XYnX|�||�dS)NZsttyrrzstty invocation failedrSrr�r))r��check_outputr�r�r4�CalledProcessErrorr�rXr�rr'r_�	__stdin__rjr5r�r6r�r*r.)r&rrr:�actualr�rrr�test_stty_match

s�
zTermsizeTests.test_stty_matchN)rArBrCr-r2rrrrr(�sr(�memfd_createzrequires os.memfd_creater�r�c@seZdZdd�ZdS)�MemfdCreateTestsc	Cs�t�dtj�}|�|d�|�tj|�|�t�|��t|ddd�� }|�	d�|�
|��d�W5QRXt�d�}|�tj|�|�t�|��dS)NZHir�r7F)�closefdsmemfd_creater�)rr3�MFD_CLOEXECrrurLr-r�rrr.�tell)r&rorQ�fd2rrr�test_memfd_create&
s

z"MemfdCreateTests.test_memfd_createN)rArBrCr9rrrrr4#
sr4c@seZdZdd�Zdd�ZdS)�OSErrorTestscCs�Gdd�dt�}g|_g|_tjdk	r.tj}ntj}|j�|�|j�||��tjdk	rbtj}nt�	tj�}|j�|�|j�t
|��|j�t|��|j|j|_dS)Nc@seZdZdS)zOSErrorTests.setUp.<locals>.StrN�rArBrCrrrr�Str6
sr<)
r$�bytes_filenames�unicode_filenamesrr�rFr�ZTESTFN_UNDECODABLErr�rzr{rW)r&r<Zdecoded�encodedrrrrI5
s

zOSErrorTests.setUpcCs0|jtjf|jtjdf|jtjf|jtjtjf|jtjf|jtjf|jtj	fg}t
jdkr�|�|j
tjdf|j
tjdf|jtjdf|jtjdf|jtjff�n,|�|jtjf|jtjdf|jtjdff�ttd�r�|�|jtjddf�ttd��r|�|jtjddf�ttd��r.|�|jtjdf�ttd	��rN|�|jtjdf�ttd
��rn|�|jtjdf�ttd��r�|�|jtjf�ttd��r�t
jdk�r�|�|j
tjdf�|�|jtjdf�n|�|jtjdf�ttd
��r(|�|jtjf|jtjdf|jtjddf|jtjdff�ttd��rH|�|jtjdf�ttd��rf|�|jtj f�|D]�^}}}|D]�}zJt!|t"t#f��r�||f|��n&|�$t%d��||f|��W5QRXWnLt&k
�r�}z|�'|j(|t"|��W5d}~XYn&t)k
�rYnX|�*d�+|���qx�qjdS)Nr�r�sdstr�rr�lchownr��chflags�lchflags�chrootr�rrsuser�lchmodrz	should bezNo exception thrown by {}),rWrr3r�r
rr�r
r�rGr_r�rr=rbr�r>r�rr�rr@r�rArBrCr�rrrrrDrr�r$r>ZassertWarnsRegex�DeprecationWarningr5r�r�UnicodeDecodeErrorr�ry)r&ZfuncsrW�funcZ	func_argsrrVrrr�test_oserror_filenameK
sz




�	

�
�

�$z"OSErrorTests.test_oserror_filenameN)rArBrCrIrHrrrrr:4
sr:c@seZdZdd�ZdS)�
CPUCountTestscCs8t��}|dk	r*|�|t�|�|d�n
|�d�dS)Nrz&Could not determine the number of CPUs)r�	cpu_countr#r��
assertGreaterrX)r&Zcpusrrr�test_cpu_count�
s
zCPUCountTests.test_cpu_countN)rArBrCrLrrrrrI�
srIc@s�eZdZdd�Ze�edkd�dd��Ze�edkd�dd��Ze�	e
ed	�d
�dd��Zd
d�Z
dd�Ze�	e
ed�d�dd��Zdd�Zdd�Ze�	ejdkd�dd��Ze�	e
ed�d�dd ��Ze�	e
ed!�d"�d#d$��ZdS)%�FDInheritanceTestscCsPt�ttj�}|�tj|�|�t�|�d�t�|d�|�t�|�d�dS�NFT)	rrr�r�rurLr.r�r�r�rrr�test_get_set_inheritable�
s
z+FDInheritanceTests.test_get_set_inheritableNz
need fcntlcCsnt�ttj�}|�tj|�|�t�|�d�t�|tj	�}|tj
M}t�|tj|�|�t�|�d�dSrN)rrr�r�rurLr.r��fcntl�F_GETFD�
FD_CLOEXECZF_SETFD)r&ror�rrr�test_get_inheritable_cloexec�
sz/FDInheritanceTests.test_get_inheritable_cloexeccCsft�ttj�}|�tj|�|�t�|tj�tj	@tj	�t�
|d�|�t�|tj�tj	@d�dS)NTr)rrr�r�rurLr.rPrQrRr�r�rrr�test_set_inheritable_cloexec�
s��z/FDInheritanceTests.test_set_inheritable_cloexec�O_PATHzneed os.O_PATHcCsnt�ttj�}|�tj|�|�t�|�d�t�|d�|�t�|�d�t�|d�|�t�|�d�dSrN)	rrr�rUrurLr.r�r�r�rrr�test_get_set_inheritable_o_path�
sz2FDInheritanceTests.test_get_set_inheritable_o_pathc	Cs�t��}|�t��}t�|�W5QRX|�|jjtj	�|�t��}t�
|d�W5QRX|�|jjtj	�|�t��}t�
|d�W5QRX|�|jjtj	�dS�NTF)rr�rZr5rr�r.rr6rr�)r&rorrrr�test_get_set_inheritable_badf�
sz0FDInheritanceTests.test_get_set_inheritable_badfcCs2t�ttj�}|�tj|�|�t�|�d�dSr�)rrr�r�rurLr.r�r�rrrr��
szFDInheritanceTests.test_openrzneed os.pipe()cCsPt��\}}|�tj|�|�tj|�|�t�|�d�|�t�|�d�dSr�)rrrurLr.r�)r&ZrfdZwfdrrr�	test_pipe�
s
zFDInheritanceTests.test_pipecCsJt�ttj�}|�tj|�t�|�}|�tj|�|�t�|�d�dSr�)	rrr�r�rurLrWr.r��r&�fd1r8rrr�test_dup�
s

zFDInheritanceTests.test_dupcCs(t�d�}|�tj|�|�|d�dS�NrSr)rrWrurLrKr�rrr�test_dup_standard_stream�
s
z+FDInheritanceTests.test_dup_standard_streamr�rcCsHt�dtj�}|�tj|�t�|�}|�tj|�|�t�|��dS)NZNUL)rrr�rurLrWr-r�rZrrr�test_dup_nul�
s

zFDInheritanceTests.test_dup_nulr�zneed os.dup2()cCs�t�ttj�}|�tj|�t�ttj�}|�tj|�|�t�||�|�|�t�	|��t�ttj�}|�tj|�|�tj||dd�|�|�
t�	|��dS)NF)�inheritable)rrr�r�rurLr.r�rMr�r-)r&ror8Zfd3rrrr��
szFDInheritanceTests.test_dup2�openptyzneed os.openpty()cCsPt��\}}|�tj|�|�tj|�|�t�|�d�|�t�|�d�dSr�)rrarurLr.r�)r&Z	master_fdZslave_fdrrr�test_openptys
zFDInheritanceTests.test_openpty)rArBrCrOrryrPrSrTrrrrVrXr�rYr\r^r_r�r_r�rbrrrrrM�
s&






rMc@sHeZdZddddejfdfddddd	eed
d�fgZdd�Zd
d�ZdS)�PathTConverterTests)r�TrN)r
FrNrNFN)rAF�rN)rBFrdNrrdrLcCs�tj}tjdkrd}}ntj�d�}t|�}t�t|�tjtjB�}|�	tj
tj�|�	tj|�t|�}t|�}|jD�]"\}}}	}
|j
|d���ztt|�}Wn"tk
r�YW5QR�qzYnX||||fD]H}|dkr�q�|j
||d��&||f|	��}
|
dk	�r|
|
�W5QRXq�|�td��||f|	��W5QRX|�rn||f|	��}
|
dk	�r�|
|
�n&|�td��||f|	��W5QRXW5QRXqzdS)Nr�r^r)rr/zto return str or byteszos.PathLike)rrFrrr�rrryrJrurGrL�	functionsZsubTestr�r��assertRaisesRegexra)r&Zstr_filenameZbytes_fspath�bytes_filenameroZ
int_fspathZ
str_fspathrZallow_fd�
extra_argsZ
cleanup_fnr�r/r�rrr�test_path_t_converter sN

�
�

�z)PathTConverterTests.test_path_t_converterc	Cs�d}|�t|d��t�td��W5QRX|�t|d��t�td��W5QRX|�t|d��t�tt���W5QRXdS)Nz-__fspath__\(\) to return str or bytes, not %sr�rU�floatg���Q�@�object)rfrarr�rrk)r&r=rrr�&test_path_t_converter_and_custom_classLsz:PathTConverterTests.test_path_t_converter_and_custom_class)	rArBrCr�F_OKr�rerirlrrrrrcs�	,rcr�r�c@seZdZdd�ZdS)�
BlockingTestscCsnt�ttj�}|�tj|�|�t�|�d�t�|d�|�t�|�d�t�|d�|�t�|�d�dSrW)	rrr�r�rurLr.r�r�r�rrrr�YszBlockingTests.test_blockingN)rArBrCr�rrrrrnVsrnc@seZdZdd�ZdS)�ExportsTestscCs |�dtj�|�dtj�dS)Nrr�)r�r�__all__rHrrr�test_os_allgszExportsTests.test_os_allN)rArBrCrqrrrrrofsroc@s�eZdZejZdd�Zd8dd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zd9dd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Ze�ejejkd$�d%d&��Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Z d1d2�Z!d3d4�Z"d5d6�Z#d7S):�TestScandircCs>tj�tj�|_t�|j�|_|�tj|j�t�	|j�dSr!)
rr/�realpathrrFr��
bytes_pathrurr2rHrrrrIoszTestScandir.setUpr1cCs2t|t�r|jn|j}tj�||�}t|d�|S)Nspython)r�r>rtr/rr1r)r&rr/rrrrrus
zTestScandir.create_filecCs2tdd�t�|j�D��}|�t|���|�|S)Ncss|]}|j|fVqdSr!r�r�entryrrrrz|s�z*TestScandir.get_entries.<locals>.<genexpr>)r`r�scandirr/r.r�keys)r&�names�entriesrrr�get_entries{s

�zTestScandir.get_entriescCsZ|rJt|�D]:}|�d�sq|dkr&q|�t||�t||�|||f�qn|�||�dS)NZst_)�st_dev�st_ino�st_nlink)r�rr.r�)r&Zstat1Zstat2Zskip_fieldsr�rrr�assert_stat_equal�s
�zTestScandir.assert_stat_equalcCs2|�|tj�|�|j|�|�|jtj�|j|��|�|��tj|jdd�j	�t�|j�}|�|�
�t�|j��|�|�
�t�|j��|�|��tj�|j��tj|jdd�}|�|j
dd�t�|j��|�|j
dd�t�|j��|�|��|tjdk�o|�|�|jdd�|tjdk�dS)NFrPr�)r#r�DirEntryr.rr/r1�inoder�r}�is_dir�S_ISDIRr��is_file�S_ISREG�
is_symlinkr/r)r&rvrr�r�r�Z
entry_statZentry_lstatrrr�check_entry�s>
�

�

�
�
�
�
��zTestScandir.check_entryc	
Cs�ttd�}t��}tj�|jd�}t�|�|�d�}|r�zt�|tj�|jd��Wn0t	k
r�}z|�
d|�W5d}~XYnX|r�tj|tj�|jd�dd�t�|tj�|jd	��ddg}|r�|�d�|r�|�
d
�|�|�}|d}|�|dddd�|d}|�|dddd�|�rB|d}|�|dddd�|�r||d}|�|dddd�|d	}|�|d	ddd�dS)Nr�r�r1z
link_file.txtr��symlink_dirT)r��symlink_file.txt)r�r�F)rrrr�r/r1r2rr�r�rXr�r�rr{r�)	r&r�r�r9rr�ryrzrvrrr�test_attributes�sB


 �


zTestScandir.test_attributescCsNt|t�r|jn|j}tt�|��}|�t|�d�|d}|�|j	|�|Sr])
r�r>rtr/r�rrwr.r+r)r&rr/rzrvrrr�	get_entry�szTestScandir.get_entrycCs|j|d�}|�tj�|��S)Nr)rr�rr/�basename)r&rrrrr�create_file_entry�szTestScandir.create_file_entryc	Csf|��}t��}zDt�|j�tdd�t��D��}|�t|�	��tj�
|�g�W5t�|�XdS)Ncss|]}|j|fVqdSr!rrurrrrz�sz5TestScandir.test_current_directory.<locals>.<genexpr>)rrr"r3r/r`rwr.rrxr�)r&rZold_dirrzrrr�test_current_directory�s�z"TestScandir.test_current_directorycCs|��}|�t|�d�dS)Nz<DirEntry 'file.txt'>)r�r.r{�r&rvrrr�	test_repr�szTestScandir.test_reprcCs*|��}|�t�|�tj�|jd��dS)Nr1)r�r.r�fspathr/r1r�rrr�test_fspath_protocol�sz TestScandir.test_fspath_protocolcCsNt�d�}|j|d�}t�|�}|�|t�|�|tj�t�|j�|��dS)Nz
bytesfile.txtr)	rr�r�r�r#r>r.r/r1)r&rgZbytes_entryr�rrr�test_fspath_protocol_bytes�s

�z&TestScandir.test_fspath_protocol_bytescCs�tj�|jd�}t�|�|�d�}t�|�tjdkrF|�|���|�	|�
��|�	|���tjdkr�|�t
|j�|��|jdd�n0|�|��d�|�t
|j�|jt
|jdd�dS)Nr�r�FrPr)rr/r1r2r�r
rrMr�r-r�r�rZr4r�r�rK)r&r/rvrrr�test_removed_dir�s




zTestScandir.test_removed_dircCs�|��}t�|j�|�|���tjdkr:|�|���|�|�	��tjdkrv|�
t|j�|�
�|j
dd�n0|�|��d�|�
t|j
�|j
t|j
dd�dS)Nr�FrPr)r�rrGr/r-r�rrMr�r�rZr4r�r�rKr�rrr�test_removed_files

zTestScandir.test_removed_filecCs�t��s|�d�S|�d�}t�|tj�|jd��|�ddg�}|d}t�	|�|�
|��d�|�|�
��|�|���|�|j
dd��|�|jdd��|�|���|�t|j�|jdd�dS)Nzcannot create symbolic linkr1zsymlink.txtrFrP)rr�rXrrr�r/r1r{rGrKr�r-r�r�rMr�rZr4r�)r&rrzrvrrr�test_broken_symlink's"

�
zTestScandir.test_broken_symlinkc	Csp|�d�t�|j�}tt�|��}|�t|�d|�|d}|�|jd�|�|jt�tj�	|jd���dS�Nr1rSrsfile.txt)
rrr�r/r�rwr.r+rr1)r&�
path_bytesrzrvrrrr)<s
�zTestScandir.test_bytesc
Cs�|�d�ttfD]�}|t�|j��}|�t��tt�	|��}W5QRX|�
t|�d|�|d}|�
|jd�|�
|jt�tj�
|jd���|�t|j�t�|�t|j�t�qdSr�)rrzr{rr�r/�assertWarnsrEr�rwr.r+rr1r�rmr>)r&rr�rzrvrrr�test_bytes_likeHs
�zTestScandir.test_bytes_likez.fd support for listdir required for this test.c	CsT|�tjtj�|�d�dg}t��rJt�dtj�	|jd��|�
d�t�|jtj�}z�t�|��}t|�}W5QRXdd�|D�}|�t|�|�|�|t�|��|D]�}|�|j|j�|�t�|�|j�|�|��|jdk�tjtjkr�tj|j|d�}|�|��|�tj|j|dd�}|�|jdd�|�q�W5t�
|�XdS)	Nr1r�cSsg|]
}|j�qSrrrurrrr	fsz'TestScandir.test_fd.<locals>.<listcomp>rQF)r�r5rP)r�rrwrSrrr�r�r/r1r�rr�rLr�r.rr�rr�r�r�rT)r&Zexpected_namesrorrrzryrvrrrr�test_fdXs.

zTestScandir.test_fdcCs|�ttjd�dS)NrF)rZr4rrwrHrrr�test_empty_pathuszTestScandir.test_empty_pathcCsN|�d�t�|j�}t|�}|�t|�d|�t|�}|�t|�d|�dS)Nr1rSr)rrrwr/r�r.r+)r&r�rzZentries2rrr�test_consume_iterator_twicexs
z'TestScandir.test_consume_iterator_twicecCs$digfD]}|�ttj|�q
dS)NgX9��v��?)rZrarrw)r&�objrrr�test_bad_path_type�szTestScandir.test_bad_path_typec	CsR|�d�|�d�t�|j�}t|�|��|��|���~W5QRXdS�Nr1�	file2.txt)rrrwr/rprL�check_no_resource_warning�r&r�rrr�
test_close�s


zTestScandir.test_closec	CsN|�d�|�d�t�|j��}t|�W5QRX|���~W5QRXdSr�)rrrwr/rpr�r�rrr�test_context_manager�s


z TestScandir.test_context_managerc	Cs@|�d�|�d�t�|j��}t|�|��W5QRXdSr�)rrrwr/rprLr�rrr�test_context_manager_close�s


z&TestScandir.test_context_manager_closec
Csl|�d�|�d�|�t��.t�|j��}t|�ddW5QRXW5QRX|���~W5QRXdS)Nr1r�rSr)rrZ�ZeroDivisionErrorrrwr/rpr�r�rrr�test_context_manager_exception�s


z*TestScandir.test_context_manager_exceptionc	Csv|�d�|�d�t�|j�}t|�|�t��~t��W5QRXt�|j�}t	|�|�
��~W5QRXdSr�)rrrwr/rpr��ResourceWarningr�
gc_collectr�r�r�rrr�test_resource_warning�s


z!TestScandir.test_resource_warningN)r1)r1)$rArBrCrr�rIrr{rr�r�r�r�r�r�r�r�r�r�r�r)r�rrrr�rSr�r�r�r�r�r�r�r�r�rrrrrrls<

)	
�

rrc@sVeZdZeej�Zdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dS)�
TestPEP519cCs dD]}|�||�|��qdS)N)r5sgoodbyessome/path/and/file�r.r�)r&�brrr�test_return_bytes�szTestPEP519.test_return_bytescCs dD]}|�||�|��qdS)N)ZhelloZgoodbyezsome/path/and/filer�)r&rprrr�test_return_string�szTestPEP519.test_return_stringcCsLdD]B}t|�}|�||�|��|�dt�|��|�dt�|��qdS)N)�path/like/object�path/like/objectr�r�)rr.r�rr�r?)r&r�Zpathlikerrr�test_fsencode_fsdecode�s
z!TestPEP519.test_fsencode_fsdecodecCsB|�d|�td���|�tttj��|�ttd�tj��dS)Nz#feelthegilr�)r.r�rrM�
issubclassr�PathLiker�rHrrrr'�szTestPEP519.test_pathlikecCs4tddi�}ttt|�fD]}|�t|j|�qdS)NZblahr)rmr�rrZrar�)r&Zvapor�orrr�test_garbage_in_exception_out�sz(TestPEP519.test_garbage_in_exception_outcCs|�t|j�dSr!)rZrar�rHrrr�test_argument_required�sz!TestPEP519.test_argument_requiredcCsR|�t|jtd��tddi�}d|_|�t|j|��|�t|jtt���dS)Nr[ZfoorrS)rZrar�rrm�
__fspath__r�)r&�crrr�test_bad_pathlike�s
�zTestPEP519.test_bad_pathlikecCs8Gdd�dtj�}|�tt|��|�tttj��dS)Nc@seZdZdS)z0TestPEP519.test_pathlike_subclasshook.<locals>.ANr;rrrr�A�sr�)rr�r-r�rrM)r&r�rrr�test_pathlike_subclasshook�sz%TestPEP519.test_pathlike_subclasshookN)rArBrCr]rr�r�r�r�r'r�r�r�r�rrrrr��s
r�c@seZdZdd�ZdS)�
TimesTestscCsnt��}|�|tj�dD]}t||�}|�|t�qtjdkrj|�|jd�|�|j	d�|�|j
d�dS)N)�user�system�
children_user�children_system�elapsedr�r)rr3r#�times_resultr�rjrr.r�r�r�)r&r3Zfieldr�rrr�
test_times�s

zTimesTests.test_timesN)rArBrCr�rrrrr��sr��_fspathc@seZdZeej�ZdS)�TestPEP519PurePythonN)rArBrCr]rr�r�rrrrr�sr��__main__)r)N)}r�r�rf�
contextlibrr6rFrr�rjrrr�r�r�r�r�r�r_Z	sysconfigr,r�r>rrr��testrr�rrY�ImportErrorrPrO�pwd�getpwallr"r�Z	_testcapir
rrZtest.support.script_helperr
Ztest.supportrrr)rrr�versionrrz�getgidr�rrZTestCaser rDr�rr^ZBasicTestMappingProtocolr_r�rr�r�r�r�rr*r4r8rFZget_config_varZOS_URANDOM_DONT_USE_FDryrR�contextmanagerrbrcr{r�r�r�r�r�rrr*r+rMrTrZr\r`rkr�r
r�r�r�r�r�r�rZrequires_linux_versionrr(r4r:rIrMrcrnrorrr�r�r�rA�mainrrrr�<module>sV




Aae_5EG
^;)	-����M �h#d%CGs/<0!1+7�VN�Q,
]
yB�P7


F1le Man4ger