Your IP : 216.73.216.213


Current Path : /opt/alt/python34/lib64/python3.4/test/__pycache__/
Upload File :
Current File : //opt/alt/python34/lib64/python3.4/test/__pycache__/test_os.cpython-34.pyc

�
g fՈ�@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZyddlZWnek
rfdZYnXyddlZWnek
r�dZYnXyddlZWnek
r�dZYnXddlm Z e!ed�rej"j#rej"j#j$d�Z%ndZ%ejj$d�o'e
j&�dkZ'Gdd	�d	ej(�Z)Gd
d�dej(�Z*Gdd
�d
ej(�Z+ddlm,Z,Gdd�de,j-�Z.Gdd�dej(�Z/ej0e!e
d�d�Gdd�de/��Z1Gdd�dej(�Z2Gdd�dej(�Z3Gdd�dej(�Z4Gdd�dej(�Z5ej6d�d kZ7ej8e7d!�Gd"d#�d#ej(��Z9ej:dd$d%��Z;Gd&d'�d'ej(�Z<ej0ejd(kd)�Gd*d+�d+ej(��Z=Gd,d-�d-ej(�Z>Gd.d/�d/ej(�Z?ej8ejd(kd0�Gd1d2�d2ej(��Z@ej8ejd(kd0�Gd3d4�d4ej(��ZAej0ejd(kd)�Gd5d6�d6ej(��ZBej0ejd(kd)�Gd7d8�d8ej(��ZCej0ejd(kd)�ejDGd9d:�d:ej(���ZEejDGd;d<�d<ej(��ZFGd=d>�d>ej(�ZGGd?d@�d@ej(�ZHGdAdB�dBej(�ZIejJdC�ej0e!e
dD�dE�GdFdG�dGej(���ZKej0e!e
dH�oe!e
dI�dJ�GdKdL�dLej(��ZLedk	rQGdMdN�dNejMejN�ZOnej0edk	dO�ej0e!e
dP�dQ�GdRdS�dSej(���ZPdTdU�ZQej0eQ�dV�GdWdX�dXej(��ZRej0ejd(kd)�GdYdZ�dZej(��ZSej0e!e
d[�d\�Gd]d^�d^ej(��ZTGd_d`�d`ej(�ZUGdadb�dbej(�ZVGdcdd�ddej(�ZWejXdedf��ZYeZdgkr�eY�ndS)h�N)�support)�assert_python_ok�thread_infoZlinuxthreadsFZfreebsdc@s�eZdZdd�ZeZdd�Zdd�Zejdd��Z	d	d
�Z
dd�Zd
d�Ze
jejdkd�dd��Zdd�Zdd�Zdd�Zdd�Zdd�ZdS)�	FileTestscCs,tjjtj�r(tjtj�ndS)N)�os�path�lexistsr�TESTFN�unlink)�self�r�1/opt/alt/python34/lib64/python3.4/test/test_os.py�setUp<szFileTests.setUpcCsOtjtjtjtjB�}tj|�|jtjtjtj	��dS)N)
r�openrr	�O_CREAT�O_RDWR�close�
assertTrue�access�W_OK)r�frrr
�test_accessAs
zFileTests.test_accessc
Cs�tjtjtjtjB�}tj|�}zjd}x]||dkr�tj|�|d7}|dkr}|jd�n|tj|�}}q:WWdtj|�Xtj	||d�|j
ttj|d�dS)Nr��
z%couldn't allocate two consecutive fds��a)
rrrr	rr�dupr�skipTest�
closerange�assertRaises�OSError�write)r�first�secondZretriesrrr
�test_closerangeFs

zFileTests.test_closerangecCsTtj}tj|�}|jttj|d�tj|�}|j||�dS)Nr)	rr	�sys�getrefcountr�	TypeErrorr�rename�assertEqual)rr�old�newrrr
�test_rename[s
	zFileTests.test_renamecCs�ttjd��u}|jd�|j�|j�}tj|dd�tj|d�}|j	t
|�t�|j	|d�WdQXdS)Nzw+bsspamr�)rrr	r!�flush�filenor�lseek�readr)�type�bytes)r�fobj�fd�srrr
�	test_readcs

zFileTests.test_readcCs�tjtjtjtjB�}|jttj|d�tj|d�tj|t	d��tj|t
d��tj|�ttjd��,}|j|j
�j�dddg�WdQXdS)	N�beanssbacon
seggs
sspam
�rbsbaconseggssspam)rrrr	r�O_WRONLYrr'r!�	bytearray�
memoryviewrr)r1�
splitlines)rr5r4rrr
�
test_writems
zFileTests.test_writecGs2tj|dtjdd�}|j|d�dS)N�
creationflags�shellTr)�
subprocess�callZCREATE_NEW_CONSOLEr))r�argsZretcoderrr
�write_windows_consoleys		zFileTests.write_windows_console�win32z$test specific to the Windows consolecCs9d}|jtjd|�|jtjdd|�dS)Nzprint('x' * 100000)z-cz-u)rDr%�
executable)r�coderrr
�test_write_windows_console�sz$FileTests.test_write_windows_consolecGs8tjtjtj�}tj||�}|j�dS)N)rrrr	�O_RDONLY�fdopenr)rrCr5rrrr
�
fdopen_helper�szFileTests.fdopen_helpercCsWtjtjtjtjB�}tj|�|j�|jd�|jdd�dS)N�r�d)rrrr	rrrrK)rr5rrr
�test_fdopen�s



zFileTests.test_fdopencCs�tjd}ttjd��}|jd�WdQXt|d��}|jd�WdQX|jtj|�tjtj|�|jt	tj
tj�t|d��}|j|j�d�WdQXdS)Nz.2�w�1�2rL)
rr	rr!�
addCleanuprr
�replacer�FileNotFoundError�statr)r1)r�TESTFN2rrrr
�test_replace�s
zFileTests.test_replacec	Cs8tjdtdtjdddd�}tj|�dS)Nr�flags�modei��dir_fd)rr�__file__rIr)rrrrr
�test_open_keywords�s	zFileTests.test_open_keywordscCsWtjtd�}y&|dddtjdddd�Wnttfk
rRYnXdS)N�symlink�src�target�dstZtarget_is_directoryFrZ)rZ
get_attributerr	�NotImplementedErrorr )rr]rrr
�test_symlink_keywords�szFileTests.test_symlink_keywordsN)�__name__�
__module__�__qualname__r�tearDownrr$rZcpython_onlyr,r7r>rD�unittest�
skipUnlessr%�platformrHrKrNrWr\rbrrrr
r;s

rc@s*eZdZdd�Zdd�Zejeed�d�dd��Z	d	d
�Z
dd�Zd
d�Zejeed�d�dd��Z
ejeed�d�dd��Zejejdkd�dd��Zejejdkd�ejeed�d�dd���ZdS)�StatAttributeTestscCsXtjtj�tjjtjd�|_t|jd�}|jd�|j	�dS)N�f1�wbsABC)
r�mkdirrr	r�join�fnamerr!r)rrrrr
r�s

zStatAttributeTests.setUpcCs$tj|j�tjtj�dS)N)rr
ro�rmdirrr	)rrrr
rf�szStatAttributeTests.tearDownrUztest needs os.stat()c
>Csftj|�}|j|tjd�|j|jd�t|�}x�tt�D]�}|dd�dkrR|j�}|jd�r�dd�}ndd�}|j|t||��|tt|��|j	||�qRqRWxZdj
�D]L}tt||�d�}t||d	�d
}|j||dd�q�Wy|d
|j
d�Wntk
rqYnXyd|_|j
d�Wntk
r�YnXyd|_|j
d�Wnttfk
r�YnXyd|_|j
d�Wntk
rYnXy tjd�}	|j
d�Wntk
r9YnXytjd�}	Wntk
raYnXdS)N�ZST_ZTIMEcSs
t|�S)N)�int)�xrrr
�trunc�sz7StatAttributeTests.check_stat_attributes.<locals>.trunccSs|S)Nr)rsrrr
rt�szst_atime st_mtime st_ctimei��Z_nsi'�deltar��zNo exception raisedrrrr-�����	���
�)r)rrrrqr-rwrxryrzr{rr|r}r~r)rrUr)�ST_SIZE�st_size�dir�lower�endswith�getattr�assertIn�splitrr�assertAlmostEqual�fail�
IndexError�st_mode�AttributeError�st_rdevr'�parrot�stat_result)
rro�result�members�name�attrrtZfloatyZnanosecondy�result2rrr
�check_stat_attributes�s\
	
		


z(StatAttributeTests.check_stat_attributescCs|j|j�dS)N)r�ro)rrrr
�test_stat_attributessz'StatAttributeTests.test_stat_attributescCsyy|jjtj��}Wn&tk
rD|jd|j�YnXtj��"tjdt	�|j
|�WdQXdS)Nz#cannot encode %a for the filesystem�ignore)ro�encoder%�getfilesystemencoding�UnicodeEncodeErrorr�warnings�catch_warnings�simplefilter�DeprecationWarningr�)rrorrr
�test_stat_attributes_bytess

z-StatAttributeTests.test_stat_attributes_bytescCs�tj|j�}x{ttjd�D]f}tj||�}|jd|�|dkrm|jd|�ntj|�}|j	||�q&WdS)Nrsstat_resultr-scos
stat_result
)
rrUro�range�pickle�HIGHEST_PROTOCOL�dumpsr��loadsr))rr��proto�p�	unpickledrrr
�test_stat_result_picklesz*StatAttributeTests.test_stat_result_pickle�statvfsztest needs os.statvfs()c<Cszytj|j�}WnGtk
r_}z'|jtjkrM|jd�nWYdd}~XnX|j|j|d�d}x;t	|�D]-\}}|jt
|d
|�||�q�Wyd|_|jd�Wntk
r�YnXyd|_
|jd�Wntk
rYnXy tjd�}|jd�Wntk
rMYnXytjd�}Wntk
ruYnXdS) Nzos.statvfs() failed with ENOSYSrq�bsize�frsize�blocks�bfree�bavail�files�ffree�favail�flag�namemaxZf_rzNo exception raisedrrrr-rwrxryrzr{r|r}r~r)
r�r�r�r�r�zfilesr�r�r�r�)r)rrrrqr-rwrxryrzr{rr|r}r~r)rr�ror �errno�ENOSYSrr)�f_bfree�	enumerater�r�r�r��statvfs_resultr')rr��er��valueZmemberr�rrr
�test_statvfs_attributess:#%	
	


z*StatAttributeTests.test_statvfs_attributeszneed os.statvfs()cCs�ytj|j�}WnGtk
r_}z'|jtjkrM|jd�nWYdd}~XnXx{ttj	d�D]f}tj
||�}|jd|�|dkr�|jd|�ntj|�}|j
||�qtWdS)Nzos.statvfs() failed with ENOSYSrsstatvfs_resultr-scos
statvfs_result
)rr�ror r�r�rr�r�r�r�r�r�r))rr�r�r�r�r�rrr
�test_statvfs_result_pickleDs#z-StatAttributeTests.test_statvfs_result_picklerEzWin32 specific testscCshytjd�WnPtk
r2|jd�Yn2tk
rc}z|jd�WYdd}~XnXdS)Nzc:\pagefile.syszc:\pagefile.sys does not existzCould not stat pagefile.sys)rrUrTrr r�)rr�rrr
�test_1686475Vs
zStatAttributeTests.test_1686475�pipezrequires os.pipe()cCs�tj�\}}ztj|�Wdtj|�tj|�X|jt��}tj|�WdQX|j|jjtj	�dS)N)
rr�rUrrr r)�	exceptionr��EBADF)rrLrOZctxrrr
�
test_15261`s
zStatAttributeTests.test_15261N)rcrdrerrfrgrh�hasattrrr�r�r�r�r�r�r%rir�r�rrrr
rj�s'B	
','
rjc@s?eZdZdd�Zdd�Zddd�Zdd	�Zed
d��Zdd
�Z	dd�Z
eje
je
jkd�dd��Zeje
je
jkd�dd��Zeje
je
jkd�dd��Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�ZdS)'�
UtimeTestscCs�tj|_tjj|jd�|_|jtj|j�tj	|j�t
|jd��}|jd�WdQXdd�}tj
��Atjdt�tjd	�}|j||�tjd�WdQXdS)
NrkrlsABCc
Ss4tj��"tjdt�tj|�WdQXdS)Nr�)r�r�r�r�r�stat_float_times)�staterrr
�restore_float_timesys
z-UtimeTests.setUp.<locals>.restore_float_timesr�rT���)rr	�dirnamerrrnrorR�rmtreermrr!r�r�r�r�r�)r�fpr�Zold_float_timesrrr
rps
zUtimeTests.setUpcCsFtj|�}|j|dkpE|j|dkpE|j|dkS)Nryrzr{)rrU�st_atime�st_mtime�st_ctime)r�filename�strrr
�support_subsecond�szUtimeTests.support_subsecondNcCs�|s|j}n|j|�}|r6d}d}nd}d
}||||f�tj|�}|r�|j|j|ddd	�|j|j|ddd	�n.|j|j|d�|j|j|d�|j|j|�|j|j	|�dS)Ni8Z�;l�
o]rwrr{rzg��&�.>rug���ư>iʚ;lrTiʚ;lP�9)
ror�rrUr�r�r�r)�st_atime_ns�st_mtime_ns)r�set_timer�r��atime_ns�mtime_nsr�rrr
�_test_utime�s"	 zUtimeTests._test_utimecCsdd�}|j|�dS)NcSstj|d|�dS)N�ns)r�utime)r�r�rrr
r��sz'UtimeTests.test_utime.<locals>.set_time)r�)rr�rrr
�
test_utime�szUtimeTests.test_utimecCs|ddS)Ng��&�.>g��&�.>r)r�rrr
�	ns_to_sec�szUtimeTests.ns_to_seccs#�fdd�}�j|�dS)NcsD|\}}�j|�}�j|�}tj|||f�dS)N)r�rr�)r�r�r�r��atime�mtime)rrr
r��sz2UtimeTests.test_utime_by_indexed.<locals>.set_time)r�)rr�r)rr
�test_utime_by_indexed�sz UtimeTests.test_utime_by_indexedcs#�fdd�}�j|�dS)NcsG|\}}�j|�}�j|�}tj|d||f�dS)N�times)r�rr�)r�r�r�r�r�r�)rrr
r��sz0UtimeTests.test_utime_by_times.<locals>.set_time)r�)rr�r)rr
�test_utime_by_times�szUtimeTests.test_utime_by_timesz9follow_symlinks support for utime required for this test.cCsdd�}|j|�dS)NcSstj|d|dd�dS)Nr��follow_symlinksF)rr�)r�r�rrr
r��sz9UtimeTests.test_utime_nofollow_symlinks.<locals>.set_time)r�)rr�rrr
�test_utime_nofollow_symlinks�sz'UtimeTests.test_utime_nofollow_symlinksz,fd support for utime required for this test.cCsdd�}|j|�dS)NcSs5t|d�� }tj|j�d|�WdQXdS)Nrlr�)rrr�r/)r�r�r�rrr
r��sz*UtimeTests.test_utime_fd.<locals>.set_time)r�)rr�rrr
�
test_utime_fd�szUtimeTests.test_utime_fdz0dir_fd support for utime required for this test.cCsdd�}|j|�dS)NcSs_tjj|�\}}tj|tj�}ztj|d|d|�Wdtj|�XdS)NrZr�)rrr�rrIr�r)r�r�r�r��dirfdrrr
r��s
z.UtimeTests.test_utime_dir_fd.<locals>.set_time)r�)rr�rrr
�test_utime_dir_fd�szUtimeTests.test_utime_dir_fdcCs&dd�}|j|d|j�dS)NcSstj|d|�dS)Nr�)rr�)r�r�rrr
r��sz1UtimeTests.test_utime_directory.<locals>.set_timer�)r�r�)rr�rrr
�test_utime_directory�szUtimeTests.test_utime_directorycCs�tj�}||j�|j|j�s4d}nd}tj|j�}d|j||j|f}|j|j|d|d|�dS)Ng�?g{�G�z�?zst_time=%r, current=%r, dt=%rru�msg)�timeror�rrUr�r�)rr�Zcurrentrur�r�rrr
�_test_utime_current�s
	zUtimeTests._test_utime_currentcs#�fdd�}�j|�dS)Ncstj�j�dS)N)rr�ro)r�)rrr
r�
sz/UtimeTests.test_utime_current.<locals>.set_time)r�)rr�r)rr
�test_utime_current	szUtimeTests.test_utime_currentcs#�fdd�}�j|�dS)Ncstj�jd�dS)N)rr�ro)r�)rrr
r�sz3UtimeTests.test_utime_current_old.<locals>.set_time)r�)rr�r)rr
�test_utime_current_oldsz!UtimeTests.test_utime_current_oldc
Cs�tjdkr�tjjtjj|��dd}ddl}|jj}|j	dd�}|j
|ddddd|t|��}|r�|jSndS)NrEr�\�rM)
r%rirr�
splitdrive�abspath�ctypes�windll�kernel32Zcreate_unicode_bufferZGetVolumeInformationW�lenr�)rr�rootr�r��buf�okrrr
�get_file_systems&	zUtimeTests.get_file_systemcCsj|j|j�dkr(|jd�nd}tj|j||f�|jtj|j�j|�dS)NZNTFSz
requires NTFSlrT)	r�r�rrr�ror)rUr�)rZlargerrr
�test_large_time"s
zUtimeTests.test_large_timec
Cs3|jt��tj|jddd�WdQXdS)Nrwr�)rwrw)rwrw)r�
ValueErrorrr�ro)rrrr
�test_utime_invalid_arguments,sz'UtimeTests.test_utime_invalid_arguments)rcrdrerr�r�r��staticmethodr�r�r�rgrhrr��supports_follow_symlinksr��supports_fdr��supports_dir_fdr�r�r�r�r�r�r�r�rrrr
r�os(			

r�)�
mapping_testsc@s*eZdZdZdZdd�Zdd�Zdd�Zd	d
�Ze	j
ejj
d�d�d
d��Ze	j
ejj
d�d�dd��Zdd�Zdd�Zdd�Zdd�Ze	j
ejd�dd��Zejd�ejdd�dd ���Zd!d"�ZdS)#�EnvironTestsz8check that os.environ object conform to mapping protocolNcCsdttj�|_tjr0ttj�|_nx-|j�j�D]\}}|tj|<qCWdS)N)	�dictr�environ�_EnvironTests__save�supports_bytes_environ�environb�_EnvironTests__saveb�
_reference�items)r�keyr�rrr
r8s
	zEnvironTests.setUpcCsPtjj�tjj|j�tjrLtjj�tjj|j�ndS)N)rr�clear�updaterrrr)rrrr
rf?s

	
zEnvironTests.tearDowncCsidd6dd6dd6S)NZVALUE1ZKEY1ZVALUE2ZKEY2ZVALUE3ZKEY3r)rrrr
rFszEnvironTests._referencecCstjj�tjS)N)rrr	)rrrr
�_empty_mappingIs
zEnvironTests._empty_mappingz/bin/shzrequires /bin/shc
Cs^tjj�tjjdd�tjd��)}|j�j�}|j|d�WdQXdS)NZHELLOZWorldz/bin/sh -c 'echo $HELLO')rrr	r
�popenr1�stripr))rrr�rrr
�test_update2Ns

zEnvironTests.test_update2cCs}tjd��h}t|�}|jt|�d�|jt|�d�|jt|�d�|jtt|�WdQXdS)Nz%/bin/sh -c 'echo "line1
line2
line3"'zline1
zline2
zline3
)rr�iterr)�nextr�
StopIteration)rr�itrrr
�test_os_popen_iterVszEnvironTests.test_os_popen_itercCsPxItjj�D]8\}}|jt|�t�|jt|�t�qWdS)N)rrrr)r2�str)rr�valrrr
�test_keyvalue_typesbsz EnvironTests.test_keyvalue_typescCsCx<|j�j�D](\}}|jtjj|�|�qWdS)N)rrr)rr�get)rrr�rrr
�
test_itemsgszEnvironTests.test_itemscCsHtj}|jt|�djdjdd�|j�D����dS)z>Check that the repr() of os.environ looks like environ({...}).zenviron({{{}}})z, css'|]\}}dj||�VqdS)z
{!r}: {!r}N)�format)�.0rr�rrr
�	<genexpr>psz-EnvironTests.test___repr__.<locals>.<genexpr>N)rrr)�reprrrnr)r�envrrr
�
test___repr__ls		zEnvironTests.test___repr__cCs�tjjtj�}ddddg}itjj|�d6}tj}zEt|�t_|j|tj��|j|tjdd��Wd|t_X|j|tji��|jdtjidd6��|j|tj|��tj	r�y1t
jdd��id	d6d
d6}WdQXWntk
r;YnX|j
ttj|�|jtjidd6�d
g�|jtjid
d6�d
g�|jtjidd6�d
g�ndS)Nz/montyz/pythonr�z/flying/circus�PATHr�recordTrP�2sPATHsabc�abc)r�)r�defpathr��pathseprnrr�assertSequenceEqual�
get_exec_pathrr�r��BytesWarningrr�)rZdefpath_listZ	test_pathZtest_envZ
saved_environZ	mixed_envrrr
�test_get_exec_pathss2	 
 	


zEnvironTests.test_get_exec_pathz#os.environb required for this test.cCs�d}y|jtj�d�}Wn2tk
rVdtj�f}|j|�YnX|tjd<|jtjd|�|jtjd|�d}|tjd<|jtjd|�|j	tj�d�}|jtjd|�dS)	Nueuro€�surrogateescapez'U+20AC character is not encodable to %sZunicodesunicodes�sbytesr3)
r�r%r�r�rrrr)r�decode)rr�Zvalue_bytesr�Z	value_strrrr
�
test_environb�s 



zEnvironTests.test_environbryrrxcCsXtjdkr5dd}|jttjj|�nd}|jttjj|�dS)NrErsiP�zkey=)r%rirr�rr�__delitem__r )rrrrr
�test_unset_error�s

zEnvironTests.test_unset_errorcCs�d}|j|tj�|jt��}tj|WdQX|j|jjd|�|j|jj	�|jt��}tj|=WdQX|j|jjd|�|j|jj	�dS)NZ
missingkeyr)
ZassertNotInrrr�KeyError�assertIsr�rCr�__suppress_context__)rZmissing�cmrrr
�
test_key_type�szEnvironTests.test_key_type)rcrdre�__doc__Z	type2testrrfrrrgrhrr�existsrrrrrr(rr+rZrequires_freebsd_versionZrequires_mac_verr-r2rrrr
r�4s"**)!r�c@speZdZdZdddd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dS)�	WalkTestszTests for os.walk().TFccsGtj|d|d|�}x%|D]\}}}|||fVq"WdS)N�topdown�followlinks)r�walk)r�	directoryr6r��walk_itr��dirsr�rrr
r8�s
	zWalkTests.walkcCs�tjj}|tjd�|_||jd�|_||jd�|_||jd�}||jd�}||jd�}||d�}||d�|_|tjd	�}|tjd	d
�}||d�}tj	|j�tj	|�tj	|�xH||||fD]4}	t
|	d�}
|
jd
|	d�|
j�qWtj
�r�tjtjj|�|j�tjd|d�tjj|�r�|ddgdgf|_q�|dgddgf|_n|gdgf|_dS)NZTEST1�SUB1�SUB11�SUB2�tmp1�tmp2Ztmp3�linkZTEST2�tmp4Zbroken_linkrOzI'm z" and proud of it.  Blame test_os.
ZbrokenT)rrrnrr	�	walk_path�	sub1_path�
sub11_path�	link_path�makedirsrr!r�can_symlinkr]r��isdir�	sub2_tree)rrnZ	sub2_pathZ	tmp1_pathZ	tmp2_pathZ	tmp3_pathZt2_pathZ	tmp4_pathZbroken_link_pathrrrrr
r�s4

zWalkTests.setUpcCsttj|j��}|jt|�d�|ddddk}|ddj�|dd|dj�|j|d|jddgdgf�|j|d||jd	gd
gf�|j|d||jggf�|j|dd||j	�dS)Nr-rrr<rqrr>r?r=r@r�)
�listrr8rCr)r��sortrDrErJ)r�all�flippedrrr
�test_walk_topdown
s)*$zWalkTests.test_walk_topdowncCs�g}xU|j|j�D]A\}}}|j|||f�d|kr|jd�qqW|jt|�d�|j|d|jdgdgf�|ddj�|j|d|j�dS)Nr<rrr>r?rr�)r8rC�append�remover)r�rLrJ)rrMr�r;r�rrr
�test_walk_prunes"
zWalkTests.test_walk_prunecCst|j|jdd��}|jt|�d�|ddddk}|ddj�|dd|d
j�|j|d|jdd	gd
gf�|j|||jggf�|j||d|jdgdgf�|j|dd||j�dS)Nr6Fr-rqrrr<rr>r?r=r@r�)	rKr8rCr)r�rLrErDrJ)rrMrNrrr
�test_walk_bottom_up.s

zWalkTests.test_walk_bottom_upcCs�tj�s|jd�n|j|jdd�}xZ|D]E\}}}||jkr;|j|g�|j|dg�Pq;q;W|jd�dS)Nzneed symlink supportr�TrBz+Didn't follow symlink with followlinks=True)rrHrr8rCrFr)r�)rr:r�r;r�rrr
�test_walk_symlinkBszWalkTests.test_walk_symlinkcCs�x�tjtjdd�D]�\}}}x*|D]"}tjtjj||��q/WxR|D]J}tjj||�}tjj|�s�tj|�q\tj|�q\WqWtjtj�dS)Nr6F)	rr8rr	rQrrn�islinkrp)rr�r;r�r�r�rrr
rfPs(
 
zWalkTests.tearDownN)rcrdrer3r8rrOrRrSrTrfrrrr
r5�s1r5�fwalkzTest needs os.fwalk()c@speZdZdZdddd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dS)�
FwalkTestszTests for os.fwalk().TFc	csJtj|d|d|�}x(|D] \}}}}|||fVq"WdS)Nr6r�)rrV)	rr9r6r�r:r�r;r�Zroot_fdrrr
r8es
	zFwalkTests.walkc
Cs|j�}|j�}x�tjd	dd�D]�\}}|jd|d|�|jd|d|�i}x<tj|�D]+\}}}t|�t|�f||<q|WxYtj|�D]H\}}}}	|j||�|j	||t|�t|�f�q�Wq.WdS)
z.
        compare with walk() results.
        TF�repeatrr6r7r�N)TF)
�copy�	itertools�productr
rr8�setrVr�r))
r�walk_kwargs�fwalk_kwargsr6r��expectedr�r;r��rootfdrrr
�_compare_to_walkms" "zFwalkTests._compare_to_walkcCs$itjd6}|j||�dS)N�top)rr	ra)r�kwargsrrr
�test_compare_to_walkszFwalkTests.test_compare_to_walkcCsdzOtjdtj�}itjd6}|j�}||d<|j||�Wdtj|�XdS)N�.rbrZ)rrrIrr	rYrar)rr5r]r^rrr
�test_dir_fd�s
zFwalkTests.test_dir_fdcCs�x�tjddd�D]�\}}tj|df}xrtjd||�D][\}}}}tj|�tj|�|jt	tj
|��t	|�t	|�B�qJWqWdS)NTFrXrr�)TF)rZr[rr	rrV�fstatrUr)r\�listdir)rr6r�rCr�r;r�r`rrr
�test_yields_correct_dir_fd�s"(

z%FwalkTests.test_yields_correct_dir_fdcCs�tjd�}tj|�x1td�D]#}xtjtj�D]}qBWq)Wtjd�}|jtj|�|j||�dS)Nr�)	rrrr�rVrr	rRr))rZminfd�irsZnewfdrrr
�test_fd_leak�s
zFwalkTests.test_fd_leakcCs�x�tjtjdd�D]�\}}}}x!|D]}tj|d|�q2Wxd|D]\}tj|d|dd�}tj|j�r�tj|d|�qVtj|d|�qVWqWtjtj�dS)Nr6FrZr�)	rrVrr	r
rU�S_ISDIRr�rp)rr�r;r�r`r�r�rrr
rf�s+

zFwalkTests.tearDownN)rcrdrer3r8rardrfrirlrfrrrr
rWas

rWc@seZdZdd�Zdd�Zdd�Zejee	d�d�d	d
��Z
dd�Zd
d�Zdd�Z
dS)�MakedirTestscCstjtj�dS)N)rrmrr	)rrrr
r�szMakedirTests.setUpc	Cs�tj}tjj|ddd�}tj|�tjj|dddd�}tj|�|jttjtj�tjj|dddddtj�}tj|�tjj|dtjddddd�}tj|�dS)N�dir1�dir2�dir3�dir4�dir5�dir6)	rr	rrrnrGrr �curdir)r�baserrrr
�test_makedir�s	

'
zMakedirTests.test_makedircCs�tjjtjd�}d}tjd�}tj||�|jttj||�|jttj||dd�tj|ddd�tj|d|dd�tj|�tjtjj	d	�dd�dS)
Nroi���exist_okFi�TrY�/)
rrrnrr	�umaskrGrr r�)rrrY�old_maskrrr
� test_exist_ok_existing_directory�s
z-MakedirTests.test_exist_ok_existing_directory�chownztest needs os.chowncCs�tjtj�}|j}|j}xmddtjd�tj	dd�fD]D}|j
ttjtj||�|j
ttjtj||�qLW|j
tjtj||��|j
tjtjd	d
��dS)Ng�?y�?rrg�y��r����r�r�)rrUrr	�st_uid�st_gid�decimalZDecimal�	fractionsZFractionrr'r~�assertIsNone)rrUZuid�gidr�rrr
�*test_chown_uid_gid_arguments_must_be_index�s		.#z7MakedirTests.test_chown_uid_gid_arguments_must_be_indexcCsKtjjtjd�}tj}d}tjd�}ztjtj	tj�j
�}ytjtj||B�Wn!tk
r�t
jd��YnXtj	tj�j
|@|kr�t
jd��ntj|||B�tj||dd�tj|tjtj	|�j
�|@�tj|||Bdd�Wdtj|�XdS)Nroi�rxzCannot set S_ISGID for dir.z No support for S_ISGID dir mode.ryT)rrrnrr	rU�S_ISGIDr{�S_IMODE�lstatr��chmod�PermissionErrorrg�SkipTestrG)rrr�rYr|Zexisting_testfn_moderrr
�test_exist_ok_s_isgid_directory�s$	
*z,MakedirTests.test_exist_ok_s_isgid_directorycCs�tj}tjjtjd�}t|d�}|jd�|j�|jt	tj
|�|jt	tj
|dd�|jt	tj
|dd�tj|�dS)NrorOr"ryFT)rr	rrrnrr!rrr rGrQ)rrvrrrrr
�#test_exist_ok_existing_regular_file�s	

z0MakedirTests.test_exist_ok_existing_regular_filecCsstjjtjdddddd�}x8tjj|�ra|tjkratjj|�}q*Wtj|�dS)Nrorprqrrrsrt)rrrnrr	r4r��
removedirs)rrrrr
rfs
%zMakedirTests.tearDownN)rcrdrerrwr}rgrhr�rr�r�r�rfrrrr
rn�s'rnc@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�RemoveDirsTestscCstjtj�dS)N)rrGrr	)rrrr
rszRemoveDirsTests.setUpcCstjtj�dS)N)rr�r	)rrrr
rfszRemoveDirsTests.tearDowncCs�tjjtjd�}tj|�tjj|d�}tj|�tj|�|jtjj|��|jtjj|��|jtjjtj��dS)N�dira�dirb)	rrrnrr	rmr��assertFalser4)rr�r�rrr
�test_remove_alls


zRemoveDirsTests.test_remove_allc	Cs�tjjtjd�}tj|�tjj|d�}tj|�ttjj|d�d��}|jd�WdQXtj|�|j	tjj
|��|jtjj
|��|jtjj
tj��dS)Nr�r�zfile.txtrO�text)rrrnrr	rmrr!r�r�r4r)rr�r�rrrr
�test_remove_partial#s

!
z#RemoveDirsTests.test_remove_partialcCs�tjjtjd�}tj|�tjj|d�}tj|�ttjj|d�d��}|jd�WdQX|jt	��tj
|�WdQX|jtjj|��|jtjj|��|jtjjtj��dS)Nr�r�zfile.txtrOr�)
rrrnrr	rmrr!rr r�rr4)rr�r�rrrr
�test_remove_nothing/s

!z#RemoveDirsTests.test_remove_nothingN)rcrdrerrfr�r�r�rrrr
r�s

r�c@seZdZdd�ZdS)�DevNullTestscCsgttjd��}|jd�|j�WdQXttjd��}|j|j�d�WdQXdS)Nrlshellor9�)rr�devnullr!rr)r1)rrrrr
�test_devnull>s

zDevNullTests.test_devnullN)rcrdrer�rrrr
r�=sr�c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�URandomTestscCs�|jttjd��d�|jttjd��d�|jttjd��d�|jttjd��d�|jttjd��d�dS)NrrrrMi�)r)r�r�urandom)rrrr
�test_urandom_lengthGs
z URandomTests.test_urandom_lengthcCs2tjd�}tjd�}|j||�dS)N�)rr��assertNotEqual)r�data1�data2rrr
�test_urandom_valueNszURandomTests.test_urandom_valuecCsRdjdd|ddf�}td|�}|d}|jt|�d�|S)	N�
zimport os, syszdata = os.urandom(%s)zsys.stdout.buffer.write(data)zsys.stdout.buffer.flush()z-crr�)rnrr)r�)r�countrG�out�stdoutrrr
�get_urandom_subprocessSs
z#URandomTests.get_urandom_subprocesscCs2|jd�}|jd�}|j||�dS)Nr�)r�r�)rr�r�rrr
�test_urandom_subprocess^sz$URandomTests.test_urandom_subprocessN)rcrdrer�r�r�r�rrrr
r�Fsr��HAVE_GETENTROPYrz+getentropy() does not use a file descriptorc@sFeZdZejed�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")
            z-c)r)rrGrrr
�test_urandom_failureisz#URandomFDTests.test_urandom_failurecCs"d}td|�\}}}dS)Nz�if 1:
            import os
            import sys
            os.urandom(4)
            os.closerange(3, 256)
            sys.stdout.buffer.write(os.urandom(4))
            z-Sc)r)rrG�rcr��errrrr
�test_urandom_fd_closed�s	z%URandomFDTests.test_urandom_fd_closedcCs�ttjd��}|jdd�WdQX|jtjtj�djdtj�}td|�\}}}|j	t
|�d�|j|dd	�|d	d��td|�\}}}|j	t
|�d�|j||�dS)
Nrl�xrja>if 1:
            import os
            import sys
            os.urandom(4)
            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:
                os.dup2(f.fileno(), fd)
                sys.stdout.buffer.write(os.urandom(4))
                sys.stdout.buffer.write(os.urandom(4))
            r	z-Scrzrr-)rrr	r!rRrr
rrr)r�r�)rrrGr�r�r�Zout2Zerr2rrr
�test_urandom_fd_reopened�s$z'URandomFDTests.test_urandom_fd_reopenedN)	rcrdrergrh�resourcer�r�r�rrrr
r�fsr�c#s�g��fdd�}�fdd�}zNtj}tj}tj}|t_|t_|dk	rr|t_n�VWd|t_|t_|t_XdS)z�
    Stubs out execv and execve functions when used as context manager.
    Records exec calls. The mock execv and execve functions always raise an
    exception as they would normally never return.
    cs&�jd||f�td��dS)N�execvzexecv called)rP�RuntimeError)r�rC)�callsrr
�
mock_execv�sz#_execvpe_mockup.<locals>.mock_execvcs,�jd||f�ttjd��dS)N�execvez
execve called)rPr r��ENOTDIR)r�rC)r�rr
�mock_execve�sz$_execvpe_mockup.<locals>.mock_execveN)rr�r�r#)r#r�r�Z
orig_execvZorig_execveZorig_defpathr)r�r
�_execvpe_mockup�s									r�c@smeZdZejed�dd��Zdd�Zeje	e
d�d�dd	��Zd
d�ZdS)
�	ExecTestsz4avoid triggering a linuxthreads bug: see issue #4970cCs#|jttjddgd�dS)Nzno such app-)rr r�execvpe)rrrr
�test_execvpe_with_bad_program�sz'ExecTests.test_execvpe_with_bad_programcCs |jttjdgd�dS)NZnotepad)rr�rr�)rrrr
�test_execvpe_with_bad_arglist�sz'ExecTests.test_execvpe_with_bad_arglist�_execvpez)No internal os._execvpe function to test.c
Cs!tjd}|tkrUd}tjjtj|�|�}|}dddg}nQd}dddg}tjj||�}tjdkr�tj|�}n|}id	d
6}t��V}|jt	tj
||�|jt|�d�|j|dd
||ff�WdQXtd|��_}|jt
tj
||d|�|jt|�d�|j|dd|||ff�WdQXt���}|j�}	|tkr�||	d<n
||	d<|jt
tj
||d|	�|jt|�d�|j|dd|||	ff�WdQXdS)NZabsolutepaths
executablesprognameZarg1Zarg2rFZprogname�ntr8Zspamrrr�r#rr�sPATHr)r�sepr3rrn�fsencoder�r�rr�r�r)r�r r%rY)
rZ	test_typeZprogram_pathZprogramZfullpathZnative_fullpathZ	argumentsrr�Zenv_pathrrr
�_test_internal_execvpe�sD

	&	


	
z ExecTests._test_internal_execvpecCs0|jt�tjdkr,|jt�ndS)Nr�)r�rrr�r3)rrrr
�test_internal_execvpe_strs
z#ExecTests.test_internal_execvpe_strN)
rcrdrerg�skipIf�USING_LINUXTHREADSr�r�rhr�rr�r�rrrr
r��s	0r�rEzWin32 specific testsc@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�Win32ErrorTestscCs'|jttjtjtjd�dS)Nz.bak)rr rr(rr	)rrrr
r,szWin32ErrorTests.test_renamecCs|jttjtj�dS)N)rr rrQrr	)rrrr
�test_removeszWin32ErrorTests.test_removecCs|jttjtj�dS)N)rr r�chdirrr	)rrrr
�
test_chdirszWin32ErrorTests.test_chdircCsQttjd�}z|jttjtj�Wd|j�tjtj�XdS)NrO)	rrr	rr rrmrr
)rrrrr
�
test_mkdirs

zWin32ErrorTests.test_mkdircCs |jttjtjd�dS)N)rr rr�rr	)rrrr
r�!szWin32ErrorTests.test_utimecCs |jttjtjd�dS)Nr)rr rr�rr	)rrrr
�
test_chmod$szWin32ErrorTests.test_chmodN)	rcrdrer,r�r�r�r�r�rrrr
r�sr�c	@sleZdZddddddddd	g	Zd
d�Zx%eD]Zee�e�de<q@Wd
d�Zej	e
ed�d�dd��Zej	e
ed�d�dd��Z
ej	e
ed�d�dd��Zej	e
ed�d�dd��Zej	e
ed�d �d!d"��Zej	e
ed#�d$�d%d&��Zej	e
ed'�d(�d)d*��Zej	e
ed+�d,�d-d.��Zej	e
ed/�d0�d1d2��Zej	e
ed3�d4�d5d6��Zej	e
ed7�d8�d9d:��Zej	e
ed;�d<�d=d>��Zej	e
ed?�d@�dAdB��ZdCS)D�
TestInvalidFD�fchdirrrJ�	fdatasyncrg�fstatvfs�fsync�	tcgetpgrp�ttynamecs�fdd�}|S)Ncs,tt��r(|jtt���ndS)N)r�r�checkr�)r)rrr
�helper-sz(TestInvalidFD.get_single.<locals>.helperr)rr�r)rr
�
get_single,szTestInvalidFD.get_singleZtest_cGsjy|tj�|�Wn;tk
rT}z|j|jtj�WYdd}~XnX|jd|�dS)Nz5%r didn't raise an OSError with a bad file descriptor)r�make_bad_fdr r)r�r�r�)rrrCr�rrr
r�4s)	zTestInvalidFD.check�isattyztest needs os.isatty()cCs#|jtjtj��d�dS)NF)r)rr�rr�)rrrr
�test_isatty=szTestInvalidFD.test_isattyrztest needs os.closerange()cCs�tj�}x?td�D]1}ytj||�Wntk
rHYqXPqW|dkrltjd��n|jtj	|||d�d�dS)Nrrz5Unable to acquire a range of invalid file descriptorsr)
rr�r�rrgr rgr�r)r)rr5rkrrr
r$As
zTestInvalidFD.test_closerange�dup2ztest needs os.dup2()cCs|jtjd�dS)N�)r�rr�)rrrr
�	test_dup2QszTestInvalidFD.test_dup2�fchmodztest needs os.fchmod()cCs|jtjd�dS)Nr)r�rr�)rrrr
�test_fchmodUszTestInvalidFD.test_fchmod�fchownztest needs os.fchown()cCs|jtjdd�dS)Nrr�r�)r�rr�)rrrr
�test_fchownYszTestInvalidFD.test_fchown�	fpathconfztest needs os.fpathconf()cCs*|jtjd�|jtjd�dS)N�PC_NAME_MAX)r�r�pathconfr�)rrrr
�test_fpathconf]szTestInvalidFD.test_fpathconf�	ftruncateztest needs os.ftruncate()cCs*|jtjd�|jtjd�dS)Nr)r�r�truncater�)rrrr
�test_ftruncatebszTestInvalidFD.test_ftruncater0ztest needs os.lseek()cCs|jtjdd�dS)Nr)r�rr0)rrrr
�
test_lseekgszTestInvalidFD.test_lseekr1ztest needs os.read()cCs|jtjd�dS)Nr)r�rr1)rrrr
r7kszTestInvalidFD.test_read�readvztest needs os.readv()cCs&td�}|jtj|g�dS)Nr)r;r�rr�)rr�rrr
�
test_readvoszTestInvalidFD.test_readv�	tcsetpgrpztest needs os.tcsetpgrp()cCs|jtjd�dS)Nr)r�rr�)rrrr
�test_tcsetpgrpttszTestInvalidFD.test_tcsetpgrptr!ztest needs os.write()cCs|jtjd�dS)N� )r�rr!)rrrr
r>xszTestInvalidFD.test_write�writevztest needs os.writev()cCs|jtjdg�dS)Nsabc)r�rr�)rrrr
�test_writev|szTestInvalidFD.test_writevN)rcrdreZsinglesr�r�localsr�rgrhr�rr�r$r�r�r�r�r�r�r7r�r�r>r�rrrr
r�'s&
	''''''''''''r�c@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�	LinkTestscCs,tj|_tjjtjd�|_dS)NrQ)rr	�file1rrrn�file2)rrrr
r�szLinkTests.setUpcCsCx<|j|jfD](}tjj|�rtj|�qqWdS)N)r�r�rrr4r
)r�filerrr
rf�szLinkTests.tearDowncCs�t|d��}|jd�WdQXtj��%tjdt�tj||�WdQXt|d��G}t|d��/}|jtj	j
|j�|j���WdQXWdQXdS)NrO�testr�rL)rr!r�r�r�r�rrArr�sameopenfiler/)rr�r�rk�f2rrr
�
_test_link�s
$zLinkTests._test_linkcCs|j|j|j�dS)N)r�r�r�)rrrr
�	test_link�szLinkTests.test_linkcCs8|jt|jtj��t|jtj���dS)N)r�r3r�r%r�r�)rrrr
�test_link_bytes�szLinkTests.test_link_bytescCsnytjd�Wn!tk
r4tjd��YnX|jd7_|jd|_|j|j|j�dS)N�ñz#Unable to encode for this platform.rQ)rr��UnicodeErrorrgr�r�r�r�)rrrr
�test_unicode_name�s
zLinkTests.test_unicode_nameN)	rcrdrerrfr�r�r�r�rrrr
r��s
r�zPosix specific testsc@sHeZdZejeed�d�dd��Zejeed�d�dd��Zejeed	�d
�dd��Z	ejeed
�d�dd��Z
ejeed�d�dd��Zejeed�d�dd��Zejeed�d�dd��Z
ejeed�d�dd��ZdS)�PosixUidGidTests�setuidztest needs os.setuid()cCs[tj�dkr+|jttjd�n|jttjd�|jttjd�dS)Nrz
not an intr� l)r�getuidrr r�r'�
OverflowError)rrrr
�test_setuid�szPosixUidGidTests.test_setuid�setgidztest needs os.setgid()cCsbtj�dkr2tr2|jttjd�n|jttjd�|jttjd�dS)Nrz
not an intrrl)rr�HAVE_WHEEL_GROUPrr rr'r)rrrr
�test_setgid�szPosixUidGidTests.test_setgid�seteuidztest needs os.seteuid()cCs[tj�dkr+|jttjd�n|jttjd�|jttjd�dS)Nrz
not an intrrl)rrrr rr'r)rrrr
�test_seteuid�szPosixUidGidTests.test_seteuid�setegidztest needs os.setegid()cCsbtj�dkr2tr2|jttjd�n|jttjd�|jttjd�dS)Nrz
not an intrrl)rrrrr r	r'r)rrrr
�test_setegid�szPosixUidGidTests.test_setegid�setreuidztest needs os.setreuid()cCs�tj�dkr.|jttjdd�n|jttjdd�|jttjdd�|jttjdd�|jttjdd�dS)Nrz
not an intrrll)rrrr rr'r)rrrr
�
test_setreuid�szPosixUidGidTests.test_setreuidcCstjtjddg�dS)Nz-cz,import os,sys;os.setreuid(-1,-1);sys.exit(0))rA�
check_callr%rF)rrrr
�test_setreuid_neg1�s	z#PosixUidGidTests.test_setreuid_neg1�setregidztest needs os.setregid()cCs�tj�dkr5tr5|jttjdd�n|jttjdd�|jttjdd�|jttjdd�|jttjdd�dS)Nrz
not an intrrll)rrrrr rr'r)rrrr
�
test_setregid�szPosixUidGidTests.test_setregidcCstjtjddg�dS)Nz-cz,import os,sys;os.setregid(-1,-1);sys.exit(0))rAr
r%rF)rrrr
�test_setregid_neg1�s	z#PosixUidGidTests.test_setregid_neg1N)rcrdrergrhr�rrrrr
rrrrrrrr
r��s'''''	''	r�c@sseZdZdd�Zdd�Zdd�Zdd�Zeje	e
d	�d
�dd��Zd
d�ZdS)�Pep383Testscsmtjrtj|_n$tjr0tj|_ntj|_tj|j�|_g��fdd�}|tj�tjr�|tj�ntjr�|tj�n�s�|j	d�nt
�|_tj|j�yqxj�D]b}tj
tjj|j|��tj|�}||jkr6td��n|jj|�q�WWntj|j��YnXdS)Ncs=ytj|�}Wntk
r+dSYnX�j|�dS)N)rr�r�rP)�fn)�bytesfnrr
�add_filename�s

	z'Pep383Tests.setUp.<locals>.add_filenamez&couldn't create any non-ascii filenamezduplicate filename)r�TESTFN_UNENCODABLEr�ZTESTFN_NONASCIIr	rr�ZbdirZTESTFN_UNICODErr\�	unicodefnrmZcreate_empty_filerrn�fsdecoder��add�shutilr�)rrrr)rr
r�s6		
		
zPep383Tests.setUpcCstj|j�dS)N)rr�r�)rrrr
rf
szPep383Tests.tearDowncCs�|j}ttj|j��}|j||�tj�}zBtjtj�|jttj��ttjtj���Wdtj|�XdS)N)	rr\rrhr�r)�getcwdr�r�)rr_�foundZcurrent_directoryrrr
�test_listdirs	2zPep383Tests.test_listdircCsCx<|jD]1}ttjj|j|�d�}|j�q
WdS)Nr9)rrrrrnr�r)rrrrrr
�	test_opens!zPep383Tests.test_openr�zneed os.statvfs()cCs=x6|jD]+}tjj|j|�}tj|�q
WdS)N)rrrrnr�r�)rr�fullnamerrr
�test_statvfs!szPep383Tests.test_statvfscCs7x0|jD]%}tjtjj|j|��q
WdS)N)rrrUrrnr�)rrrrr
�	test_stat*szPep383Tests.test_statN)
rcrdrerrfrrrgrhr�rr r!rrrr
r�s%rc@sgeZdZdd�Zdd�Zdd�Zdd�Zejd	�d
d��Z	dd
�Z
dS)�Win32KillTestscCsddl}ddlm}ddl}|jjj}|j|_|j|j	|j
�|j|j	|j�|j	|j�|j	|j�f|_d}t
jtjddj|�gdt
jdt
jdt
j�}|j|jj�|j|jj�|j|jj�d\}}	x�||	kr�|j�dkr�|jt|��}
||j|jj��|
|j|
�ddd�}|j|dd
�|
jr�|j ||
jj!��Pnt"j#d�|d7}q!W|j$d
�t%j&|j'|�|j |j(�|�dS)Nr)�wintypes�runningz-cz<import sys;sys.stdout.write('{}');sys.stdout.flush();input()r��stderr�stdinrMzPeekNamedPipe failedg�������?rz1Did not receive communication from the subprocess)rrM))r�r#�msvcrtr�r��
PeekNamedPipe�BOOL�restypeZHANDLE�POINTERZc_charZDWORD�argtypesrA�Popenr%rFr�PIPErRr�rr%r&�pollZcreate_string_bufferr�Z
get_osfhandler/�sizeofr�r�r)r*r��sleepr�r�kill�pid�wait)rZsigr�r#r'r(r��procr��maxr�Zrsltrrr
�_kill0sF		!	

zWin32KillTests._killcCs|jtj�dS)N)r7�signal�SIGTERM)rrrr
�test_kill_sigtermfsz Win32KillTests.test_kill_sigtermcCs|jd�dS)NrM)r7)rrrr
�
test_kill_intjszWin32KillTests.test_kill_intcCsLdtj�}tjdd|�}d|d<tjtjtjj	tjj
t�d�|gdtj�}d\}}xp||kr�|j
�dkr�|ddkr�Pntjd�|d7}q}Wtj|jtj�|jd�tj|j|�tjd	�|j
�sHtj|jtj�|jd
j|��ndS)
Nz
test_os_%srrzwin_console_handler.pyr?rMg�������?z'Subprocess didn't finish initializationg�?zsubprocess did not stop on {}r�)rrM)�uuidZuuid1�mmaprAr-r%rFrrrnr�r[ZCREATE_NEW_PROCESS_GROUPr/r�r1r2r3r8�SIGINTr�r)rZeventr�Ztagname�mr5r�r6rrr
�_kill_with_eventns(
!


zWin32KillTests._kill_with_eventz.subprocesses aren't inheriting Ctrl+C propertycCs�ddlm}ddl}|j|j��}|jjj}|j|j�|jf|_|j|_	||d�|j
tjd�dS)Nr)r#�CTRL_C_EVENT)
r�r#r+Zc_intr�r��SetConsoleCtrlHandlerr)r,r*r@r8rA)rr#r�ZNULLrBrrr
�test_CTRL_C_EVENT�s
z Win32KillTests.test_CTRL_C_EVENTcCs|jtjd�dS)N�CTRL_BREAK_EVENT)r@r8rD)rrrr
�test_CTRL_BREAK_EVENT�sz$Win32KillTests.test_CTRL_BREAK_EVENTN)rcrdrer7r:r;r@rg�skiprCrErrrr
r".s6r"c@sFeZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�Win32ListdirTestszTest listdir on Windows.cCs�g|_x�td�D]�}d|}tjjtj|�}d|}tjjtj|�}tj|�t|d��}|j	d|�WdQX|jj
||g�qW|jj�dS)NrzSUB%dzFILE%drOz'I'm %s and proud of it. Blame test_os.
)�
created_pathsr�rrrnrr	rGrr!�extendrL)rrkZdir_nameZdir_path�	file_nameZ	file_pathrrrr
r�s	


zWin32ListdirTests.setUpcCstjtj�dS)N)rr�rr	)rrrr
rf�szWin32ListdirTests.tearDowncCsd|jttjtj��|j�|jttjtjtj���dd�|jD��dS)z-Test when the path is not an "extended" path.cSsg|]}tj|��qSr)rr�)rrrrr
�
<listcomp>�s	zCWin32ListdirTests.test_listdir_no_extended_path.<locals>.<listcomp>N)r)�sortedrrhrr	rHr�)rrrr
�test_listdir_no_extended_path�s
z/Win32ListdirTests.test_listdir_no_extended_pathcCs�dtjjtj�}|jttj|��|j�dtj	tjjtj��}|jttj|��dd�|jD��dS)z&Test when the path starts with '\\?\'.z\\?\s\\?\cSsg|]}tj|��qSr)rr�)rrrrr
rK�s	z@Win32ListdirTests.test_listdir_extended_path.<locals>.<listcomp>N)
rrr�rr	r)rLrhrHr�)rrrrr
�test_listdir_extended_path�s
"z,Win32ListdirTests.test_listdir_extended_pathN)rcrdrer3rrfrMrNrrrr
rG�s

rGc@s�eZdZdZejje�ZdZ	ejj
e�ZdZdd�Z
dd�Zdd	�Zd
d�Zdd
�Zdd�Zejd�dd��Zejd�dd��Zdd�Zdd�Zejd�dd��ZdS)�Win32SymlinkTestsZfilelinktestZdirlinktestzmissing linkcCs�tjj|j�st�tjj|j�s6t�tjj|j�sRt�tjj|j�snt�tjj|j�s�t�dS)N)	rrr4�dirlink_target�AssertionError�filelink_target�dirlink�filelink�missing_link)rrrr
r�s
zWin32SymlinkTests.setUpcCs|tjj|j�r(tj|j�ntjj|j�rPtj|j�ntjj|j�rxtj|j�ndS)N)	rrr4rTrQrSrprrU)rrrr
rf�szWin32SymlinkTests.tearDowncCs�tj|j|j�|jtjj|j��|jtjj|j��|jtjj|j��|j	|j|j�dS)N)
rr]rPrSrrr4rIrU�
check_stat)rrrr
�test_directory_link�s
z%Win32SymlinkTests.test_directory_linkcCs�tj|j|j�|jtjj|j��|jtjj|j��|jtjj|j��|j	|j|j�dS)N)
rr]rRrTrrr4�isfilerUrV)rrrr
�test_file_link�s
z Win32SymlinkTests.test_file_linkcCsg|j}tjj|�r+tj|�nd}tjj|�sJt�d}tj|||�dS)z2Create a "directory" link to a non-existent targetz"c:\\target does not exist.29r3c740TN)rUrrrrQr4rQr])rZlinknamer_Z
target_is_dirrrr
�_create_missing_dir_link�s	z*Win32SymlinkTests._create_missing_dir_linkcCs|j�tj|j�dS)N)rZrrQrU)rrrr
�,test_remove_directory_link_to_missing_targets
z>Win32SymlinkTests.test_remove_directory_link_to_missing_targetz)currently fails; consider for improvementcCs*|j�|jtjj|j��dS)N)rZrrrrIrU)rrrr
�.test_isdir_on_directory_link_to_missing_targets
z@Win32SymlinkTests.test_isdir_on_directory_link_to_missing_targetcCs|j�tj|j�dS)N)rZrrprU)rrrr
�.test_rmdir_on_directory_link_to_missing_target
s
z@Win32SymlinkTests.test_rmdir_on_directory_link_to_missing_targetcCs�|jtj|�tj|��|jtj|�tj|��tj|�}tj��Ytjdt	�|jtj|�tj|��|jtj|�tj|��WdQXdS)Nr�)
r)rrUr�r�r�r�r�r�r�)rrAr_Z
bytes_linkrrr
rVs""
"zWin32SymlinkTests.check_statc	Cs!tjjtj�}tjj|d�}tjj|d�}z�y�tj|�tj|�tj|�tjjtjj|d��}t|d��}|jd�WdQXtj	�}z�tj
|�tjj|d�}tjtjj|�d�|j
dtjtj	���|jtj|�tjd��tj
|�|jtj|�tjtjj|���tj
|�|jtj|�tjtjj|���Wdtj
|�XWn2tk
r�}z|j|�WYdd}~XnXWdtj|�tj|�XdS)N�level2�level3r�rOrA)rrr�rr	rnrmrr!rr�r]�relpathr�rhr)rUr r�rQrr�)	rZlevel1r^r_r�rZorig_dirrAr�rrr
�
test_12084s8


!
"

 $
zWin32SymlinkTests.test_12084zGPython 3.4 will crash safely on this buffer overflow, but still crashesc$Cs8dd}tjj|gd�}d||f||f|dd�|dd�fg}x�|D]�\}}ytj||�Wntk
r�Yn'Xytj|�Wntk
r�YnXy&tjtj|�tj|��Wn#tk
r�Yqctk
r	YqcXytj|�Wqctk
r/YqcXqcWdS)N�X�rr��)	rrrnr]rTrQr r�r�)rZsegmentrZ
test_casesr^�destrrr
�test_buffer_overflowFs0

	#

&


z&Win32SymlinkTests.test_buffer_overflowN)rcrdrerTrrr�r[rRrSr�rPrUrrfrWrYrZr[rgrFr\r]rVrarfrrrr
rO�s 

)rOc@s4eZdZdd�Zdd�Zdd�ZdS)�NonLocalSymlinkTestscCstjd�dS)zM
        Create this structure:

        base
         \___ some_dir
        z
base/some_dirN)rrG)rrrr
rrszNonLocalSymlinkTests.setUpcCstjd�dS)Nrv)rr�)rrrr
rf{szNonLocalSymlinkTests.tearDowncCsAtjjdd�}tjd|�tjj|�s=t�dS)a�
        The symlink target should resolve relative to the link, not relative
        to the current directory.

        Then, link base/some_link -> base/some_dir and ensure that some_link
        is resolved as a directory.

        In issue13772, it was discovered that directory detection failed if
        the symlink target was not specified relative to the current
        directory, which was a defect in the implementation.
        rvZ	some_linkZsome_dirN)rrrnr]rIrQ)rr^rrr
�test_directory_link_nonlocal~sz1NonLocalSymlinkTests.test_directory_link_nonlocalN)rcrdrerrfrhrrrr
rgos	rgc@s(eZdZdd�Zdd�ZdS)�FSEncodingTestscCs6|jtjd�d�|jtjd�d�dS)Nsabc�uabcŁ)r)rr�r)rrrr
�test_nop�szFSEncodingTests.test_nopcCsYxRdD]J}ytj|�}Wntk
r7wYnX|jtj|�|�qWdS)N�	unicodeŁ�latiné�ascii)rkrlzascii)rr�r�r)r)rrrrrr
�
test_identity�s

zFSEncodingTests.test_identityN)rcrdrerjrnrrrr
ri�sric@sseZdZdd�Zejejd�oZej	j
d�pZeed�oZeed�d�dd	��Z
d
S)�DeviceEncodingTestscCs|jtjd��dS)Ni@�)r�r�device_encoding)rrrr
�test_bad_fd�szDeviceEncodingTests.test_bad_fdr�win�nl_langinfo�CODESETz>test requires a tty and either Windows or nl_langinfo(CODESET)cCs6tjd�}|j|�|jtj|��dS)Nr)rrpZassertIsNotNoner�codecs�lookup)r�encodingrrr
�test_device_encoding�s
z(DeviceEncodingTests.test_device_encodingN)rcrdrerqrgrhrr�r%ri�
startswithr��localerxrrrr
ro�s'roc@s7eZdZejeed�d�dd��ZdS)�PidTests�getppidztest needs os.getppidcCsVtjtjddgdtj�}|j�\}}|jt|�tj	��dS)Nz-czimport os; print(os.getppid())r�)
rAr-r%rFr.Zcommunicater)rrr�getpid)rr�r��_rrr
�test_getppid�s
	zPidTests.test_getppidN)rcrdrergrhr�rrrrrr
r{�sr{z>Skip due to platform/environment differences on *NIX buildbots�getloginztest needs os.getloginc@seZdZdd�ZdS)�
LoginTestscCs&tj�}|jt|�d�dS)Nr)rr�r�r�)rZ	user_namerrr
�
test_getlogin�szLoginTests.test_getloginN)rcrdrer�rrrr
r��sr��getpriority�setpriorityz'needs os.getpriority and os.setpriorityc@s"eZdZdZdd�ZdS)�ProgramPriorityTestsz0Tests for os.getpriority() and os.setpriority().cCstjtjtj��}tjtjtj�|d�zatjtjtj��}|dkr�|dkr�tjd|��n|j||d�Wdy tjtjtj�|�Wn=tk
r�}z|j	t	j
kr��nWYdd}~XnXXdS)Nr�z?unable to reliably test setpriority at current nice level of %s)rr��PRIO_PROCESSr}r�rgr�r)r r�ZEACCES)rrvZnew_prior�rrr
�test_set_get_priority�s  z*ProgramPriorityTests.test_set_get_priorityN)rcrdrer3r�rrrr
r��sr�c@s�eZdZGdd�dej�Zdd�Zedd��Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�ZeZdd�Zdd�ZdS)�SendfileTestServerc@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)zSendfileTestServer.HandlercCs6tjj||�g|_d|_|jd�dS)NFs220 ready
)�asynchat�
async_chat�__init__�	in_buffer�closed�push)r�connrrr
r��s		z#SendfileTestServer.Handler.__init__cCs#|jd�}|jj|�dS)Ni)�recvr�rP)r�datarrr
�handle_read�sz&SendfileTestServer.Handler.handle_readcCsdj|j�S)Nr�)rnr�)rrrr
�get_data�sz#SendfileTestServer.Handler.get_datacCs|j�d|_dS)NT)rr�)rrrr
�handle_close�s
z'SendfileTestServer.Handler.handle_closecCs�dS)Nr)rrrr
�handle_error�sz'SendfileTestServer.Handler.handle_errorN)rcrdrer�r�r�r�r�rrrr
�Handler�s
r�cCs�tjj|�tjj|�|jtjtj�|j	|�|j
d�|jj�dd�\|_|_
d|_d|_tj�|_dS)NrwrF)�	threading�Threadr��asyncore�
dispatcherZ
create_socket�socketZAF_INETZSOCK_STREAMZbindZlistenZgetsockname�host�port�handler_instance�_activeZLock�_active_lock)rZaddressrrr
r��s

%		zSendfileTestServer.__init__cCs|jS)N)r�)rrrr
r$szSendfileTestServer.runningcCs@|jst�tj�|_tjj|�|jj�dS)N)r$rQr�ZEvent�_SendfileTestServer__flagr��startr4)rrrr
r�szSendfileTestServer.startcCs&|jst�d|_|j�dS)NF)r$rQr�rn)rrrr
�stops	zSendfileTestServer.stopcCs7x&t|jdd�s(tjd�qW|j�dS)Nr�Fg����MbP?)r�r�r�r1r�)rrrr
r4szSendfileTestServer.waitcCsmd|_|jj�xF|jr^tjr^|jj�tjdddd�|jj�qWtj	�dS)NTZtimeoutg����MbP?r�r)
r�r�r\r�Z
socket_mapr��acquireZloop�releaseZ	close_all)rrrr
�runs	

zSendfileTestServer.runcCs(|j�\}}|j|�|_dS)N)Zacceptr�r�)rr�Zaddrrrr
�
handle_accept!sz SendfileTestServer.handle_acceptcCs|j�dS)N)r)rrrr
�handle_connect%sz!SendfileTestServer.handle_connectcCsdS)Nrr)rrrr
�writable)szSendfileTestServer.writablecCs�dS)Nr)rrrr
r�,szSendfileTestServer.handle_errorN)rcrdrer�r�r�r��propertyr$r�r�r4r�r�r�r�r�r�rrrr
r��s
	r�ztest needs threading module�sendfileztest needs os.sendfile()c@sDeZdZdddZejjd�oPejjd�oPejjd�Zej	ed�Z
edd	��Zed
d��Z
dd
�Zdd�Zggdd�Zdd�Zdd�Zdd�Zdd�Zdd�Ze
dd��Ze
dd��Ze
ej	eed �d!�d"d#���Zd$S)%�TestSendfiles
12345abcder�i�linux�solaris�sunosz%requires headers and trailers supportc	Cs/ttjd��}|j|j�WdQXdS)Nrl)rrr	r!�DATA)�clsrrrr
�
setUpClass;szTestSendfile.setUpClasscCstjtj�dS)N)rr
r	)r�rrr
�
tearDownClass@szTestSendfile.tearDownClasscCs�ttjdf�|_|jj�tj�|_|jj|jj|jj	f�|jj
d�|jjd�|jj�|_
ttjd�|_|jj�|_dS)Nrrir9)r�rZHOST�serverr�r��clientZconnectr�r�Z
settimeoutr�r/�socknorr	r�)rrrr
rDs
"zTestSendfile.setUpcCs:|jj�|jj�|jjr6|jj�ndS)N)r�rr�r�r$r�)rrrr
rfPs

zTestSendfile.tearDowncCs�x�y?|jr+tj||||||�Stj||||�SWqtk
r�}zA|jtjkro�n$|jtjtjfkr�wn�WYdd}~XqXqWdS)zfA higher level wrapper representing how an application is
        supposed to use sendfile().
        N)�SUPPORT_HEADERS_TRAILERSrr�r r�Z
ECONNRESET�EAGAIN�EBUSY)rZsockr��offset�nbytes�headers�trailersr�rrr
�sendfile_wrapperVs	zTestSendfile.sendfile_wrappercCs!d}d}d}x~|t|j�kr�|j|j|j||�}|dkrXPn||7}||7}|j||k�|j||�qW|j|t|j��|jjt	j
�|jj�|jj
�|jjj�}|jt|�t|j��|j||j�dS)Nri)r�r�r�r�r/rr)r��shutdownr��	SHUT_RDWRrr�r4r�r�)r�
total_sentr�r��sentr�rrr
�test_send_whole_fileks$



z!TestSendfile.test_send_whole_filecCs?d}t|j�d}t|j�|}d}xe||kr�|j|j|j||�}|dkroPn||7}||7}|j||k�q5W|jjtj	�|jj
�|jj�|jj
j�}|jt|j�dd�}|j|t|��|jt|�t|��|j||�dS)Nrri)r�r�r�r�r/rr�r�r�r�rr�r4r�r�r))rr�r�Z	must_sendr�r�r�r_rrr
�test_send_at_certain_offset�s&



 z(TestSendfile.test_send_at_certain_offsetcCs�t|j�d}y"tj|j|j|d�}Wn=tk
rt}z|jtjkrb�nWYdd}~XnX|j	|d�|j
jtj
�|j
j�|jj�|jjj�}|j	|d�dS)Nirr�)r�r�rr�r�r/r r��EINVALr)r�r�r�r�rr�r4r�r�)rr�r�r�r�rrr
�test_offset_overflow�s"

z!TestSendfile.test_offset_overflowcCsQ|jt��#}tj|j|jdd�WdQX|j|jjtj	�dS)Nrir�)
rr rr�r�r/r)r�r�r�)rr1rrr
�test_invalid_offset�s"z TestSendfile.test_invalid_offsetc
Csptjd|jddddi|jd6�|jrltj|j|jdddddfdfd	d�ndS)
Nr�r�rr�i�inr�r�rX)rr�r�r/r�)rrrr
�
test_keywords�s
	!zTestSendfile.test_keywordscCsd}tj|j|jdddddg�}||7}d}d}xF|j|j|j||�}|dkrxPn||7}||7}qJWdd|j}|j|t|��|jj	�|j
j�|j
jj
�}|jt|�t|��dS)Nrir�r�i)rr�r�r/r�r�r)r�r�rr�r4r�r��hash)rr�r�r�r�Z
expected_datar�rrr
�test_headers�s&



zTestSendfile.test_headerscCs�tjd}d}t|d��}|j|�WdQXt|d���}|jtj|�tj|j|j	�dt
|�ddg�|jj�|j
j�|j
jj�}|j|d�WdQXdS)	NrQsabcdefrlr9rr�s1234s
abcdef1234)rr	rr!rRrrQr�r�r/r�r�rr�r4r�r�r))rrVZ	file_datarr�rrr
�
test_trailers�s
$


zTestSendfile.test_trailers�SF_NODISKIOztest needs os.SF_NODISKIOcCsvy)tj|j|jdddtj�WnFtk
rq}z&|jtjtjfkr_�nWYdd}~XnXdS)NrirX)	rr�r�r/r�r r�r�r�)rr�rrr
�
test_flags�szTestSendfile.test_flagsN)rcrdrer�r%riryr�rgrhZrequires_headers_trailers�classmethodr�r�rrfr�r�r�r�r�r�r�r�r�rr�rrrr
r�0s*		
r�cCs�ttd�sdSzUttjd��=}ytj|j�dd�Wntk
r`dSYnXWdQXWdtjtj�Xt	j
�}tjd|�}|dkp�t
|jd��dkS)	N�setxattrFrls	user.testr�z
2.6.(\d{1,2})r�')r�rrrr	r�r/r r
rir��re�matchrr�group)r�Zkernel_versionr?rrr
�supports_extended_attributes�s
r�z(no non-broken extended attribute supportc@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�ExtendedAttributeTestscCstjtj�dS)N)rr
r	)rrrr
rf�szExtendedAttributeTests.tearDownc
Ks�tj}t|d�j�|jt��}|||d�|�WdQX|j|jjtj	�||�}	|j
|	t�|||d�d|�t|	�}
|
j
d�|jt||��|
�|j||d|�d�|||d�dtj|�|j||d|�d�|jt��&}|||d�dtj|�WdQX|j|jjtj�|jt��&}|||d�dtj|�WdQX|j|jjtj	�|||d�dtj|�|
j
d�|jt||��|
�|||d�|�|jt��}|||d�|�WdQX|j|jjtj	�|
jd�|jt||��|
�|j|||d�|�d�|||d�d	d
|�|j|||d�|�d	d
�|||d�|�tdd�td
�D��}x!|D]}|||d|�q3W|jt||��t|	�t|�B�dS)Nrlz	user.testr�s	user.testshellosbyez
user.test2sfooricss|]}dj|�VqdS)zuser.test{}N)r)rrkrrr
r$	sz;ExtendedAttributeTests._check_xattrs_str.<locals>.<genexpr>rMr�)rr	rrrr r)r�r�ZENODATA�assertIsInstancerKr\rr�
XATTR_REPLACE�XATTR_CREATEZEEXISTrQrLr�)
rr6�getxattrr��removexattr�	listxattrrcrr1Z
init_xattrZxattrZmany�thingrrr
�_check_xattrs_str	sJ	
%%

"&
z(ExtendedAttributeTests._check_xattrs_strcOsFdd�}|jt||�tjtj�|j|||�dS)NcSs
t|d�S)Nrm)r3)r6rrr
�
make_bytes*	sz8ExtendedAttributeTests._check_xattrs.<locals>.make_bytes)r�rrr
r	)rrCrcr�rrr
�
_check_xattrs)	sz$ExtendedAttributeTests._check_xattrscCs&|jtjtjtjtj�dS)N)r�rr�r�r�r�)rrrr
�test_simple0	sz"ExtendedAttributeTests.test_simplecCs,|jtjtjtjtjdd�dS)Nr�F)r�rr�r�r�r�)rrrr
�
test_lpath4	sz!ExtendedAttributeTests.test_lpathcCsJdd�}dd�}dd�}dd�}|j||||�dS)	Nc
Ws2t|d��}tj|j�|�SWdQXdS)Nr9)rrr�r/)rrCr�rrr
r�9	sz1ExtendedAttributeTests.test_fds.<locals>.getxattrc
Ws2t|d��}tj|j�|�WdQXdS)Nrl)rrr�r/)rrCr�rrr
r�<	sz1ExtendedAttributeTests.test_fds.<locals>.setxattrc
Ws2t|d��}tj|j�|�WdQXdS)Nrl)rrr�r/)rrCr�rrr
r�?	sz4ExtendedAttributeTests.test_fds.<locals>.removexattrc
Ws2t|d��}tj|j�|�SWdQXdS)Nr9)rrr�r/)rrCr�rrr
r�B	sz2ExtendedAttributeTests.test_fds.<locals>.listxattr)r�)rr�r�r�r�rrr
�test_fds8	s
zExtendedAttributeTests.test_fdsN)	rcrdrerfr�r�r�r�r�rrrr
r��s'r�c@s1eZdZdd�Zejdd��ZdS)�Win32DeprecatedBytesAPIcCsMddl}tjtj�}tj��tjdt�x|j	|f|j
|ftj|tjftj
|ftj|dftjftj||ftj|ftj|ftj|ftj|tjftj||ftj|ftj|ftj|ftj|ftj|ffD]^}}|jt||�q WWdQXdS)Nr�errori�)r�rr�rr	r�r�r�r�Z_getfullpathnameZ_isdirr�R_OKr�r��getcwdbrArhr�rmrrIr(rpZ	startfilerUr
r�r)rr�r��funcrCrrr
�test_deprecatedJ	s.
	z'Win32DeprecatedBytesAPI.test_deprecatedcCsRtjtj�}tj��.tjdt�|jttj	||�WdQXdS)Nr�)
rr�rr	r�r�r�r�rr])rr�rrr
�test_symlinkd	s

	z$Win32DeprecatedBytesAPI.test_symlinkN)rcrdrer�r�skip_unless_symlinkr�rrrr
r�H	sr��get_terminal_sizezrequires os.get_terminal_sizec@s(eZdZdd�Zdd�ZdS)�
TermsizeTestscCs�ytj�}Wnbtk
rt}zBtjdksO|jtjtjfkr_|jd�n�WYdd}~XnX|j	|j
d�|j	|jd�dS)z�Check if get_terminal_size() returns a meaningful value.

        There's no easy portable way to actually check the size of the
        terminal, so let's check if it returns something sensible instead.
        rEzfailed to query terminal sizeNr)rr�r r%rir�r��ENOTTYrZassertGreaterEqual�columns�lines)r�sizer�rrr
�test_does_not_crasho	s*z!TermsizeTests.test_does_not_crashcCsy%tjddg�j�j�}Wn(ttjfk
rO|jd�YnXt|d�t|d�f}ytj	t
jj��}Wnbt
k
r�}zBt
jdks�|jtjtjfkr�|jd�n�WYdd}~XnX|j||�dS)	z�Check if stty returns the same results

        stty actually tests stdin, so get_terminal_size is invoked on
        stdin explicitly. If stty succeeded, then get_terminal_size()
        should work too.
        Zsttyr�zstty invocation failedrrrEzfailed to query terminal sizeN)rAZcheck_outputr*r�rTZCalledProcessErrorrrrrr�r%�	__stdin__r/r rir�r�r�r))rr�r_Zactualr�rrr
�test_stty_match�	s% *zTermsizeTests.test_stty_matchN)rcrdrer�r�rrrr
r�m	sr�c@s(eZdZdd�Zdd�ZdS)�OSErrorTestscCs�Gdd�dt�}g|_g|_tjdk	rCtj}n	tj}|jj|�|jj||��tjdk	r�tj}ntj	tj�}|jj|�|jjt
|��|j|j|_dS)Nc@seZdZdS)zOSErrorTests.setUp.<locals>.StrN)rcrdrerrrr
�Str�	sr�)r�bytes_filenames�unicode_filenamesrrr	rPZTESTFN_UNDECODABLErr�r<�	filenames)rr�ZdecodedZencodedrrr
r�	s			zOSErrorTests.setUpcCs9|jtjf|jtjdf|jtjf|jtjtjf|jtjf|jtjf|jtj	fg}t
jdkr�|j|j
tjdf|j
tjdf|jtjdf|jtjdf|jtjff�n@|j|jtjf|jtjdf|jtjdff�ttd�r_|j|jtjddf�nttd�r�|j|jtjddf�nttd�r�|j|jtjdf�nttd	�r�|j|jtjdf�nttd
�r|j|jtjdf�nttd�rE|j|jtjf�nttd�r�t
jdkr�|j|j
tjdf�|j|jtjdf�q�|j|jtjdf�nttd
�r$|j|jtjf|jtjdf|jtjddf|jtjdff�nttd�rR|j|jtjdf�nttd�r�t
jdkr�|j|jtj f�q�|j|jtj f�nx�|D]�^}}}xp|D]h}y|||�Wn8t!k
r}z|j"|j#|�WYdd}~Xq�X|j$dj%|��q�Wq�WdS)Ni�rEsdstr`r~r�lchownr��chflags�lchflags�chrootrAr�z	user.testsuser�lchmod�readlinkzNo exception thrown by {})&r�rr�r�r�rrIrprUr
r%rirIr�r(rSr�rhr�rPr~r�r�r�r�r�rAr�r�r�r�r�rr r/r�r�r)rZfuncsr�r�Z	func_argsr�r�rrr
�test_oserror_filename�	sl
""
&z"OSErrorTests.test_oserror_filenameN)rcrdrerrrrrr
r��	sr�c@seZdZdd�ZdS)�
CPUCountTestscCsLtj�}|dk	r;|j|t�|j|d�n
|jd�dS)Nrz&Could not determine the number of CPUs)r�	cpu_countr�rrZ
assertGreaterr)rZcpusrrr
�test_cpu_count�	s
zCPUCountTests.test_cpu_countN)rcrdrerrrrr
r�	src@s�eZdZdd�Zejedkd�dd��Zejedkd�dd��Zd	d
�Z	ej
eed�d�d
d��Z
dd�Zej
eed�d�dd��Zej
eed�d�dd��ZdS)�FDInheritanceTestscCsntjttj�}|jtj|�|jtj|�d�tj|d�|jtj|�d�dS)NFT)	rrr[rIrRrr)�get_inheritable�set_inheritable)rr5rrr
�test_get_set_inheritable
s
z+FDInheritanceTests.test_get_set_inheritableNz
need fcntlcCs�tjttj�}|jtj|�|jtj|�d�tj|tj	�}|tj
M}tj|tj|�|jtj|�d�dS)NFT)rrr[rIrRrr)r�fcntl�F_GETFD�
FD_CLOEXECZF_SETFD)rr5rXrrr
�test_get_inheritable_cloexec
sz/FDInheritanceTests.test_get_inheritable_cloexeccCs�tjttj�}|jtj|�|jtj|tj�tj	@tj	�tj
|d�|jtj|tj�tj	@d�dS)NTr)rrr[rIrRrr)r	r
rr)rr5rrr
�test_set_inheritable_cloexec
s
z/FDInheritanceTests.test_set_inheritable_cloexeccCsEtjttj�}|jtj|�|jtj|�d�dS)NF)rrr[rIrRrr)r)rr5rrr
r%
szFDInheritanceTests.test_openr�zneed os.pipe()cCsntj�\}}|jtj|�|jtj|�|jtj|�d�|jtj|�d�dS)NF)rr�rRrr)r)rZrfdZwfdrrr
�	test_pipe*
s
zFDInheritanceTests.test_pipecCsgtjttj�}|jtj|�tj|�}|jtj|�|jtj|�d�dS)NF)	rrr[rIrRrrr)r)rZfd1�fd2rrr
�test_dup2
s
zFDInheritanceTests.test_dupr�zneed os.dup2()cCs�tjttj�}|jtj|�tjttj�}z-tj||�|jtj|�d�Wdtj|�Xtjttj�}z3tj||dd�|jtj|�d�Wdtj|�XdS)NTZinheritableF)	rrr[rIrRrr�r)r)rr5rZfd3rrr
r�:
szFDInheritanceTests.test_dup2�openptyzneed os.openpty()cCsntj�\}}|jtj|�|jtj|�|jtj|�d�|jtj|�d�dS)NF)rrrRrr)r)rZ	master_fdZslave_fdrrr
�test_openptyO
s
zFDInheritanceTests.test_openpty)rcrdrerrgr�r	rr
rrhr�rrrr�rrrrr
r
s$
$''rc"Csqtjtttttttt	t
ttt
ttttttttttttttttttt t!t"�!dS)N)#rZrun_unittestrrjr�r�r5rWrnr�r�r�r�r�r�r�rr"rGrOrgriror{r�r�r�r�r�r�r�r�r�rrrrrr
�	test_mainX
sDr�__main__)[r�r�ru�
contextlibr�r�r�rZrzr=rr�rir�rr8r�rUrAr%�	sysconfigr�rgr<r�r�rr��ImportErrorr�r	Ztest.script_helperrr�r�versionryr��getgidrZTestCaserrjr�r�ZBasicTestMappingProtocolr�r5rhrWrnr�r�r��get_config_varr�r�r��contextmanagerr�r�r�r�r�r�rr"rGr�rOrgriror{rFr�r�r�r�r�r�r�r�r�r�r�rrZreap_threadsrrcrrrr
�<module>s�


$y����%R^+		D A%Z%%?%G%s%-�
%!"T%�K%$%+a
T&