o
    HXîh¯¡ ã                	   @   s$	  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlm Z  d dlm!Z! d dlm"Z" d dlm#Z# d dl$m%Z% e &¡  e 'd	e(¡ d dl)Z)d dl*Z*W d  ƒ n1 s·w   Y  zd dl+Z+W n e,yÍ   dZ+Y nw zd dl-Z-W n e,yß   dZ-Y nw zd dl.Z.W n e,yñ   dZ.Y nw zd dl/Z/d
d„ e/ 0¡ D ƒZ1W n e,e2fy   g Z1Y nw z
d dl3m4Z4m5Z5 W n e,y)   ej6 Z4Z5Y nw d dl7m8Z8 d dlm9Z9 d dl:m;Z; dZ<e=e	dƒrJe	 >¡ d kZ<e=edƒr]ej?j@r]ej?j@ Ad¡ZBndZBej$ Ad¡oke	 C¡ d kZDdd„ ZEd¹dd„ZFe Gej$ Ad¡d¡ZHG dd„ dejIƒZJG dd„ dejIƒZKG d d!„ d!ejIƒZLG d"d#„ d#ejIƒZMd d$lmNZN G d%d&„ d&eNjOƒZPG d'd(„ d(ejIƒZQe Re=e	d)ƒd*¡G d+d,„ d,eQƒƒZSG d-d.„ d.eQƒZTe Re=e	d)ƒd*¡G d/d0„ d0eSƒƒZUG d1d2„ d2ejIƒZVe Re=e	d3ƒd4¡G d5d6„ d6ejIƒƒZWG d7d8„ d8ejIƒZXG d9d:„ d:ejIƒZYG d;d<„ d<ejIƒZZe Re=e	d=ƒd>¡G d?d@„ d@ejIƒƒZ[e \dA¡dBkpCe \dC¡dBkpCe \dD¡dBkZ]e Ge]dE¡e Gej$dFkdG¡G dHdI„ dIejIƒƒƒZ^ej_dºdJdK„ƒZ`e Re=e	dLƒdM¡G dNdO„ dOejIƒƒZae Rej$dPkdQ¡G dRdS„ dSejIƒƒZbG dTdU„ dUejIƒZcG dVdW„ dWejIƒZde Gej$dPkdX¡G dYdZ„ dZejIƒƒZee Gej$dPkdX¡G d[d\„ d\ejIƒƒZfe Rej$dPkdQ¡G d]d^„ d^ejIƒƒZge Rej$dPkdQ¡G d_d`„ d`ejIƒƒZhe Re=e	daƒdb¡G dcdd„ ddejIƒƒZie Rej$dPkdQ¡e jjG dedf„ dfejIƒƒƒZke Rej$dPkdQ¡G dgdh„ dhejIƒƒZle Rej$dPkdQ¡G didj„ djejIƒƒZme jjG dkdl„ dlejIƒƒZnG dmdn„ dnejIƒZoG dodp„ dpejIƒZpG dqdr„ drejIƒZqG dsdt„ dtejIƒZre sdu¡e Re=e	dvƒdw¡G dxdy„ dyejIƒƒƒZte Re=e	dzƒo€e=e	d{ƒd|¡G d}d~„ d~ejIƒƒZuG dd€„ d€e*jvejwƒZxe Re=e	dƒd‚¡G dƒd„„ d„ejIƒƒZyd…d†„ Zze Rezƒ d‡¡e {dˆd‰dŠ¡G d‹dŒ„ dŒejIƒƒƒZ|e Re=e	dƒdŽ¡G dd„ dejIƒƒZ}e Re=e	d‘ƒd’¡e {d“d”¡G d•d–„ d–ejIƒƒƒZ~e Re=e	d—ƒd˜¡e {dˆd‰d™¡G dšd›„ d›ejIƒƒƒZG dœd„ dejIƒZ€G dždŸ„ dŸejIƒZG d d¡„ d¡ejIƒZ‚G d¢d£„ d£ejIƒZƒe Re=e	d¤ƒd¥¡G d¦d§„ d§ejIƒƒZ„G d¨d©„ d©ejIƒZ…G dªd«„ d«ejIƒZ†G d¬d­„ d­ejIƒZ‡G d®d¯„ d¯ejIƒZˆG d°d±„ d±ejIƒZ‰eEd²ƒG d³d´„ d´ejIƒƒZŠe=e	dµƒr…G d¶d·„ d·eˆƒZ‹eŒd¸kre ¡  dS dS )»é    N)Úsupport)Úimport_helper)Ú	os_helper)Úsocket_helper)Úthreading_helper)Úwarnings_helper)Úwin32_is_iotÚignorec                 C   ó   g | ]}|j ‘qS © )Úpw_uid)Ú.0Úur   r   ú6/opt/python-3.10.19/usr/lib/python3.10/test/test_os.pyÚ
<listcomp><   ó    r   )ÚINT_MAXÚPY_SSIZE_T_MAX©Úassert_python_ok)Ú
unix_shell)ÚFakePathFÚgeteuidÚthread_infoZlinuxthreadsZfreebsdc                 C   s   t  tt| ƒd|  ¡S )Nzrequires os.%s)ÚunittestÚ
skipUnlessÚhasattrÚos©Únamer   r   r   Úrequires_os_func[   ó   r    ó   contentc                 C   s<   t | ddƒ}| |¡ W d   ƒ d S 1 sw   Y  d S )NÚxbr   )ÚopenÚwrite)ÚfilenameZcontentÚfpr   r   r   Úcreate_file_   s   "ÿr(   Zaixz%on AIX, splice() only accepts socketsc                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú	MiscTestsc                 C   s   t  ¡ }|  |t¡ d S ©N)r   ÚgetcwdÚassertIsInstanceÚstr©ÚselfÚcwdr   r   r   Útest_getcwdj   ó   zMiscTests.test_getcwdc           
      C   sz  d}t jdkr	d}d}d}|d|t|ƒ   }t ¡ ˜}t |¡z}|}	 t ¡ }|  	||¡ |t|ƒttj
jƒ  }|dkr@nHt|ƒ|krP|dkrP|d |… }tj
 ||¡}zt |¡ t |¡ W n! tyl   Y n ty„ }	 z|	jtjkrW Y d }	~	n	‚ d }	~	ww |}q%tjr”td	t|ƒ› ƒ W d   ƒ n1 sžw   Y  W d   ƒ d S W d   ƒ d S 1 s¶w   Y  d S )
NiÐ  Úvxworkséè  éÈ   Zpython_test_dir_ÚaTr   z!Tested current directory length: )ÚsysÚplatformÚlenÚtempfileÚTemporaryDirectoryr   Z
change_cwdr   r,   ÚassertEqualÚpathÚsepÚjoinÚmkdirÚchdirÚFileNotFoundErrorÚOSErrorÚerrnoZENAMETOOLONGr   ÚverboseÚprint)
r0   Zmin_lenZdirlenÚdirnameZtmpdirr>   Úexpectedr1   ZneedÚexcr   r   r   Útest_getcwd_long_pathn   sL   


€üå€ßÿ"ÿzMiscTests.test_getcwd_long_pathc                 C   s.   t  ¡ }|  |t¡ |  t  |¡t  ¡ ¡ d S r+   )r   Úgetcwdbr-   Úbytesr=   Úfsdecoder,   r/   r   r   r   Útest_getcwdb§   s   zMiscTests.test_getcwdbN)Ú__name__Ú
__module__Ú__qualname__r2   rK   rO   r   r   r   r   r*   i   s    9r*   c                   @   s„  e Zd Zdd„ ZeZdd„ Zdd„ Zejdd„ ƒZ	d	d
„ Z
eje eek d¡ejed ddddd„ ƒƒƒZdd„ Zdd„ Ze ejdkd¡dd„ ƒZdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Ze eed$ƒd%¡d&d'„ ƒZe eed$ƒd%¡d(d)„ ƒZe eed$ƒd%¡d*d+„ ƒZe eed,ƒd-¡d.d/„ ƒZ e eed,ƒd-¡e!d0d1„ ƒƒZ"e eed,ƒd-¡e!d2d3„ ƒƒZ#e eed,ƒd-¡e!d4d5„ ƒƒZ$d6S )7Ú	FileTestsc                 C   s"   t j tj¡rt  tj¡ d S d S r+   )r   r>   Úlexistsr   ÚTESTFNÚunlink©r0   r   r   r   ÚsetUp¯   ó   ÿzFileTests.setUpc                 C   s:   t  tjt jt jB ¡}t  |¡ |  t  tjt j	¡¡ d S r+   )
r   r$   r   rU   ÚO_CREATÚO_RDWRÚcloseÚ
assertTrueÚaccessÚW_OK©r0   Úfr   r   r   Útest_access´   s   
zFileTests.test_accessc              	   C   s²   t  tjt jt jB ¡}t  |¡}z/d}||d kr9t  |¡ |d7 }|dkr+|  d¡ |t  |¡}}||d ksW t  |¡ nt  |¡ w t  	||d ¡ |  
tt j|d¡ d S )Nr   é   é
   z%couldn't allocate two consecutive fdsé   ó   a)r   r$   r   rU   rZ   r[   Údupr\   ÚskipTestÚ
closerangeÚassertRaisesrD   r%   )r0   ÚfirstÚsecondZretriesr   r   r   Útest_closerange¹   s   


ú€zFileTests.test_closerangec                 C   s<   t j}t |¡}|  ttj|d¡ t |¡}|  ||¡ d S ©Nr   )	r   rU   r8   Úgetrefcountrj   Ú	TypeErrorr   Úrenamer=   )r0   r>   ÚoldÚnewr   r   r   Útest_renameÎ   s
   

zFileTests.test_renamec                 C   s‚   t tjdƒ1}| d¡ | ¡  | ¡ }t |dd¡ t |d¡}|  	t
|ƒt¡ |  	|d¡ W d   ƒ d S 1 s:w   Y  d S )Núw+bó   spamr   é   )r$   r   rU   r%   ÚflushÚfilenor   ÚlseekÚreadr=   ÚtyperM   )r0   ÚfobjÚfdÚsr   r   r   Ú	test_readÖ   s   
"ùzFileTests.test_readzneeds INT_MAX < PY_SSIZE_T_MAXrd   rc   F)ÚsizeZmemuseÚdry_runc                 C   sh   |   tjtj¡ ttjdƒ ttjdƒ}t | ¡ |¡}W d   ƒ n1 s'w   Y  |  	|d¡ d S )Ns   testÚrb)
Ú
addCleanupr   rV   rU   r(   r$   r   r{   ry   r=   )r0   r   r'   Údatar   r   r   Útest_large_readà   s   ÿzFileTests.test_large_readc                 C   s¨   t  tjt jt jB ¡}|  tt j|d¡ t  |d¡ t  |t	dƒ¡ t  |t
dƒ¡ t  |¡ ttjdƒ}|  | ¡  ¡ g d¢¡ W d   ƒ d S 1 sMw   Y  d S )NÚbeanss   bacon
s   eggs
s   spam
rƒ   )s   bacons   eggsrv   )r   r$   r   rU   rZ   ÚO_WRONLYrj   rp   r%   Ú	bytearrayÚ
memoryviewr\   r=   r{   Ú
splitlines)r0   r~   r}   r   r   r   Ú
test_writeó   s   
ÿ"ÿzFileTests.test_writec                 G   s"   t j|t jdd}|  |d¡ d S )NT)ÚcreationflagsÚshellr   )Ú
subprocessÚcallZCREATE_NEW_CONSOLEr=   )r0   ÚargsÚretcoder   r   r   Úwrite_windows_consoleÿ   s
   üzFileTests.write_windows_consoleÚwin32z$test specific to the Windows consolec                 C   s*   d}|   tjd|¡ |   tjdd|¡ d S )Nzprint('x' * 100000)ú-cz-u)r“   r8   Ú
executable©r0   Úcoder   r   r   Útest_write_windows_console  s   z$FileTests.test_write_windows_consolec                 G   s4   t  tjt j¡}t j|g|¢R ddiŽ}| ¡  d S )NÚencodingúutf-8)r   r$   r   rU   ÚO_RDONLYÚfdopenr\   )r0   r‘   r~   ra   r   r   r   Úfdopen_helper  s   zFileTests.fdopen_helperc                 C   sB   t  tjt jt jB ¡}t  |¡ |  ¡  |  d¡ |  dd¡ d S )NÚréd   )r   r$   r   rU   rZ   r[   r\   rž   ©r0   r~   r   r   r   Útest_fdopen  s
   

zFileTests.test_fdopenc                 C   s¢   t jd }|  t jt j¡ |  t j|¡ tt jdƒ t|dƒ t t j|¡ |  ttj	t j¡ t
|ddd}|  | ¡ d¡ W d   ƒ d S 1 sJw   Y  d S )Nz.2ó   1ó   2rŸ   r›   ©rš   Ú1)r   rU   r„   rV   r(   r   Úreplacerj   rC   Ústatr$   r=   r{   )r0   ÚTESTFN2ra   r   r   r   Útest_replace  s   

"ÿzFileTests.test_replacec                 C   s"   t jtt jdd d}t  |¡ d S )Néÿ  )r>   ÚflagsÚmodeÚdir_fd)r   r$   Ú__file__rœ   r\   r`   r   r   r   Útest_open_keywords,  s   ÿzFileTests.test_open_keywordsc              	   C   s>   t  td¡}z|dtjdd d W d S  ttfy   Y d S w )NÚsymlinkÚtargetF)ÚsrcÚdstÚtarget_is_directoryr®   )r   Zget_attributer   r   rU   ÚNotImplementedErrorrD   )r0   r±   r   r   r   Útest_symlink_keywords1  s   ÿÿzFileTests.test_symlink_keywordsÚcopy_file_rangeztest needs os.copy_file_range()c                 C   ó>   |   t¡ t ddd¡ W d   ƒ d S 1 sw   Y  d S ©Nr   rc   iöÿÿÿ)rj   Ú
ValueErrorr   r¸   rW   r   r   r   Ú#test_copy_file_range_invalid_values9  ó   "ÿz-FileTests.test_copy_file_range_invalid_valuesc           	   
   C   s"  t jd }d}tt j|ƒ |  t jt j¡ tt jdƒ}|  |j¡ | ¡ }t|dƒ}|  t j|¡ |  |j¡ | ¡ }z	t 	||d¡}W n t
yc } z|jtjkrS‚ |  |¡ W Y d }~d S d }~ww |  |tddƒ¡ t|dƒ}|  | ¡ |d |… ¡ W d   ƒ d S 1 sŠw   Y  d S )Nú.3ó
   0123456789rƒ   ru   é   r   é   )r   rU   r(   r„   rV   r$   r\   ry   r   r¸   rD   rE   ÚENOSYSrh   ÚassertInÚranger=   r{   )	r0   r©   r…   Úin_fileÚin_fdÚout_fileÚout_fdÚiÚer   r   r   Útest_copy_file_range>  s.   

€ú
"ÿzFileTests.test_copy_file_rangec              
   C   s^  t jd }d}d}d}d}tt j|ƒ |  t jt j¡ tt jdƒ}|  |j¡ | ¡ }t|dƒ}|  t j|¡ |  |j¡ | ¡ }	ztj	||	|||d}
W n t
yl } z|jtjkr\‚ |  |¡ W Y d }~d S d }~ww |  |
td	|d
 ƒ¡ t|dƒ}| ¡ }W d   ƒ n1 sŒw   Y  |  |d |… d| ¡ |  ||d … ||||
 … ¡ d S )Nú.4r¿   rÁ   é   rÀ   rƒ   ru   )Ú
offset_srcÚ
offset_dstr   rc   ó    )r   rU   r(   r„   rV   r$   r\   ry   r   r¸   rD   rE   rÂ   rh   rÃ   rÄ   r{   r=   )r0   ÚTESTFN4r…   Úbytes_to_copyÚin_skipÚout_seekrÅ   rÆ   rÇ   rÈ   rÉ   rÊ   r{   r   r   r   Útest_copy_file_range_offset`  sB   



þ€ú

ÿÿz%FileTests.test_copy_file_range_offsetÚspliceztest needs os.splice()c                 C   r¹   rº   )rj   r»   r   rÖ   rW   r   r   r   Útest_splice_invalid_values  r½   z$FileTests.test_splice_invalid_valuesc              
      sþ   t jd }d}tt j|ƒ |  t jt j¡ tt jdƒ}|  |j¡ | ¡ }t 	¡ \‰ ‰|  ‡ fdd„¡ |  ‡fdd„¡ z	t 
|ˆd¡}W n tye } z|jtjkrU‚ |  |¡ W Y d }~d S d }~ww |  |tdd	ƒ¡ |  t ˆ d
¡|d |… ¡ d S )Nr¾   r¿   rƒ   c                      ó
   t  ˆ ¡S r+   ©r   r\   r   ©Úread_fdr   r   Ú<lambda>   ó   
 z'FileTests.test_splice.<locals>.<lambda>c                      rØ   r+   rÙ   r   ©Úwrite_fdr   r   rÜ   ¡  rÝ   rÀ   r   rÁ   r    )r   rU   r(   r„   rV   r$   r\   ry   r   ÚpiperÖ   rD   rE   rÂ   rh   rÃ   rÄ   r=   r{   )r0   r©   r…   rÅ   rÆ   rÉ   rÊ   r   ©rÛ   rß   r   Útest_splice’  s(   
€ú
 zFileTests.test_splicec           
   
      s  t jd }d}d}d}tt j|ƒ |  t jt j¡ tt jdƒ}|  |j¡ | ¡ }t 	¡ \‰ ‰|  ‡ fdd„¡ |  ‡fdd„¡ ztj
|ˆ||d	}W n tyk } z|jtjkr[‚ |  |¡ W Y d }~d S d }~ww |  |td
|d ƒ¡ t ˆ d¡}	|  |	|||| … ¡ d S )NrÌ   r¿   rÁ   rÍ   rƒ   c                      rØ   r+   rÙ   r   rÚ   r   r   rÜ   Ã  rÝ   z1FileTests.test_splice_offset_in.<locals>.<lambda>c                      rØ   r+   rÙ   r   rÞ   r   r   rÜ   Ä  rÝ   )rÎ   r   rc   r    )r   rU   r(   r„   rV   r$   r\   ry   r   rà   rÖ   rD   rE   rÂ   rh   rÃ   rÄ   r{   r=   )
r0   rÑ   r…   rÒ   rÓ   rÅ   rÆ   rÉ   rÊ   r{   r   rá   r   Útest_splice_offset_in³  s.   
€ú
zFileTests.test_splice_offset_inc              
      sp  t jd }d}d}d}tt j|ƒ |  t jt j¡ t ¡ \‰ ‰|  ‡ fdd„¡ |  ‡fdd„¡ t ˆ|¡ t|dƒ}|  t j|¡ |  |j	¡ | 
¡ }ztjˆ |||d	}W n tyw } z|jtjkrg‚ |  |¡ W Y d }~d S d }~ww |  |td
|d ƒ¡ t|dƒ}	|	 ¡ }
W d   ƒ n1 s—w   Y  |  |
d |… d| ¡ |  |
|d … |d |… ¡ d S )NrÌ   r¿   rÁ   rÍ   c                      rØ   r+   rÙ   r   rÚ   r   r   rÜ   å  rÝ   z2FileTests.test_splice_offset_out.<locals>.<lambda>c                      rØ   r+   rÙ   r   rÞ   r   r   rÜ   æ  rÝ   ru   )rÏ   r   rc   rƒ   rÐ   )r   rU   r(   r„   rV   r   rà   r%   r$   r\   ry   rÖ   rD   rE   rÂ   rh   rÃ   rÄ   r{   r=   )r0   rÑ   r…   rÒ   rÔ   rÇ   rÈ   rÉ   rÊ   rÅ   r{   r   rá   r   Útest_splice_offset_outÙ  s8   

€ú

ÿ z FileTests.test_splice_offset_outN)%rP   rQ   rR   rX   ÚtearDownrb   rm   r   Úcpython_onlyrt   r€   r   r   r   r   Z
bigmemtestr†   rŒ   r“   r8   r9   r™   rž   r¢   rª   r°   r·   r   r   r¼   rË   rÕ   r×   Úrequires_splice_piperâ   rã   rä   r   r   r   r   rS   ®   sT    


ÿÿ
	

!
,
$rS   c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Ze 	e
edƒd¡dd„ ƒZe 	e
edƒd¡dd„ ƒZe 	ejdkd¡dd„ ƒZe 	ejdkd¡e 	e
edƒd¡dd„ ƒƒZdd„ Ze 	ejdkd¡dd„ ƒZe 	ejdkd¡dd „ ƒZe 	ejdkd¡d!d"„ ƒZd#S )$ÚStatAttributeTestsc                 C   s(   t j| _|  t j| j¡ t| jdƒ d S )Nó   ABC)r   rU   Úfnamer„   rV   r(   rW   r   r   r   rX     s   zStatAttributeTests.setUpc           
   	   C   sÚ  t  |¡}|  |tj d¡ |  |jd¡ t|ƒ}ttƒD ]2}|d d… dkrO| ¡ }| d¡r5dd„ }ndd„ }|  |t||ƒƒ|tt|ƒ ¡ |  	||¡ qd 
¡ D ]}tt||ƒd ƒ}t||d	 ƒd
 }| j||dd qTz|d  |  d¡ W n	 ty…   Y nw z
d|_|  d¡ W n	 ty™   Y nw z
d|_|  d¡ W n ttfy¯   Y nw z
d|_|  d¡ W n	 tyÃ   Y nw zt  d¡}	|  d¡ W n	 tyÙ   Y nw zt  d¡}	W d S  tyì   Y d S w )NrÍ   ZST_ZTIMEc                 S   s   t | ƒS r+   )Úint©Úxr   r   r   Útrunc  s    z7StatAttributeTests.check_stat_attributes.<locals>.truncc                 S   s   | S r+   r   rì   r   r   r   rî     ó    zst_atime st_mtime st_ctimei † Z_nsi'  re   ©Údeltar6   úNo exception raisedrc   ©rd   ©r   rc   re   rÍ   rw   rÀ   rÁ   é   é   é	   rd   é   é   é   é   )r   r¨   r=   ÚST_SIZEÚst_sizeÚdirÚlowerÚendswithÚgetattrrÃ   Úsplitrë   ÚassertAlmostEqualÚfailÚ
IndexErrorÚst_modeÚAttributeErrorÚst_rdevrp   ÚparrotÚstat_result)
r0   rê   ÚresultÚmembersr   Úattrrî   ZfloatyZnanosecondyÚresult2r   r   r   Úcheck_stat_attributes  sl   


ÿ€ÿÿÿÿ
ÿÿz(StatAttributeTests.check_stat_attributesc                 C   s   |   | j¡ d S r+   )r  rê   rW   r   r   r   Útest_stat_attributesM  ó   z'StatAttributeTests.test_stat_attributesc                 C   sF   z
| j  t ¡ ¡}W n ty   |  d| j  ¡ Y nw |  |¡ d S )Nz#cannot encode %a for the filesystem)rê   Úencoder8   ÚgetfilesystemencodingÚUnicodeEncodeErrorrh   r  )r0   rê   r   r   r   Útest_stat_attributes_bytesP  s   ÿz-StatAttributeTests.test_stat_attributes_bytesc                 C   óf   t  | j¡}ttjd ƒD ]#}t ||¡}|  d|¡ |dk r%|  d|¡ t |¡}|  	||¡ qd S )Nrc   s   stat_resultrw   s   cos
stat_result
)
r   r¨   rê   rÄ   ÚpickleÚHIGHEST_PROTOCOLÚdumpsrÃ   Úloadsr=   ©r0   r  ÚprotoÚpZ	unpickledr   r   r   Útest_stat_result_pickleW  s   
úz*StatAttributeTests.test_stat_result_pickleÚstatvfsztest needs os.statvfs()c                 C   s  t  | j¡}|  |j|d ¡ d}t|ƒD ]\}}|  t|d| ƒ|| ¡ q|  t|j	t
ƒ¡ |  t|ƒd¡ z
d|_|  d¡ W n	 tyK   Y nw z
d|_|  d¡ W n	 ty_   Y nw zt  d¡}|  d¡ W n	 tyu   Y nw zt  d¡}W d S  tyˆ   Y d S w )	NrÍ   )
ZbsizeZfrsizeZblocksZbfreeZbavailÚfilesZffreeZfavailÚflagZnamemaxZf_rd   rc   rò   ró   rô   )r   r  rê   r=   Úf_bfreeÚ	enumerater  r]   Ú
isinstanceÚf_fsidrë   r:   r  r  r	  Ústatvfs_resultrp   )r0   r  r  ÚvalueÚmemberr  r   r   r   Útest_statvfs_attributesa  s<   ÿÿ
ÿÿz*StatAttributeTests.test_statvfs_attributesúneed os.statvfs()c                 C   r  )Nrc   s   statvfs_resultrw   s   cos
statvfs_result
)
r   r  rê   rÄ   r  r  r  rÃ   r  r=   r  r   r   r   Útest_statvfs_result_pickle  s   
úz-StatAttributeTests.test_statvfs_result_pickler”   úWin32 specific testsc              
   C   s^   zt  d¡ W d S  ty   |  d¡ Y d S  ty. } z|  d¡ W Y d }~d S d }~ww )Nzc:\pagefile.syszc:\pagefile.sys does not existzCould not stat pagefile.sys)r   r¨   rC   rh   rD   r  ©r0   rÊ   r   r   r   Útest_1686475š  s   €ÿzStatAttributeTests.test_1686475rà   zrequires os.pipe()c              	   C   s   t  ¡ \}}zt  |¡ W t  |¡ t  |¡ nt  |¡ t  |¡ w |  t¡}t  |¡ W d   ƒ n1 s8w   Y  |  |jjtj	¡ d S r+   )
r   rà   r¨   r\   rj   rD   r=   Ú	exceptionrE   ÚEBADF)r0   rŸ   ÚwÚctxr   r   r   Ú
test_15261¤  s   

ÿÿzStatAttributeTests.test_15261c                 C   sL   |   t|dƒ¡ |   t|jtƒ¡ |   d|j  ko dk¡ d S   ¡ d S )NÚst_file_attributesr   ì   ÿÿ )r]   r   r$  r4  rë   )r0   r  r   r   r   Úcheck_file_attributes²  s   *z(StatAttributeTests.check_file_attributesz$st_file_attributes is Win32 specificc                 C   sz   t  | j¡}|  |¡ |  |jtj@ d¡ tjd }t  	|¡ |  
t j|¡ t  |¡}|  |¡ |  |jtj@ tj¡ d S )Nr   rþ   )r   r¨   rê   r6  r=   r4  ÚFILE_ATTRIBUTE_DIRECTORYr   rU   rA   r„   Úrmdir)r0   r  rH   r   r   r   Útest_file_attributes·  s   

þ




þz'StatAttributeTests.test_file_attributesc                 C   sd   t j t jd | j¡}|  tj|¡ t|dƒ d}t	j
d|ddg|d t  |¡}|  |jd¡ d S )	NÚTEMPré   rö   z
icacls.exez/denyz*S-1-5-32-545:(S)©r   r   )r   r>   r@   Úenvironrê   r„   r   rV   r(   r   Ú
check_callr¨   ÚassertNotEqualrý   )r0   rê   ZDETACHED_PROCESSr  r   r   r   Útest_access_deniedÌ  s   

ü
z%StatAttributeTests.test_access_deniedc                 C   s6   dt j t  ¡ ¡d  }t  |¡}|  |jtj¡ d S )Nz//./r   )r   r>   Ú
splitdriver,   r¨   r=   r  ÚS_IFBLK)r0   rê   r  r   r   r   Útest_stat_block_deviceá  s   
z)StatAttributeTests.test_stat_block_deviceN)rP   rQ   rR   rX   r  r  r  r  r   r   r   r   r)  r+  r8   r9   r.  r3  r6  r9  r?  rB  r   r   r   r   rè     s4    A

+ÿ

	ÿ

rè   c                   @   sä   e Zd Zdd„ Zdd„ Zd)dd„Zdd	„ Zed
d„ ƒZdd„ Z	dd„ Z
e ejejv d¡dd„ ƒZe ejejv d¡dd„ ƒZe ejejv d¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zejd'd(„ ƒZdS )*Ú
UtimeTestsc                 C   sD   t j| _tj | jd¡| _|  t j| j¡ t 	| j¡ t
| jƒ d S )NÚf1)r   rU   rH   r   r>   r@   rê   r„   ÚrmtreerA   r(   rW   r   r   r   rX   ë  s
   zUtimeTests.setUpc                 C   s4   t  |¡}|j|d kp|j|d kp|j|d kS )Nrõ   rö   r÷   )r   r¨   Úst_atimeÚst_mtimeÚst_ctime)r0   r&   Ústr   r   r   Úsupport_subsecondó  s   
ÿþzUtimeTests.support_subsecondNc                 C   s¸   |s| j }|  |¡}|rd}d}nd}d}||||fƒ t |¡}|r:| j|j|d dd | j|j|d dd n|  |j|d ¡ |  |j|d ¡ |  |j|¡ |  |j	|¡ d S )Ni8Z¹;l   °
o] ì    rT l    P¬9 ç•Ö&è.>gíµ ÷Æ°>rð   )
rê   rJ  r   r¨   r  rF  rG  r=   Úst_atime_nsÚst_mtime_ns)r0   Úset_timer&   rJ  Úatime_nsÚmtime_nsrI  r   r   r   Ú_test_utimeû  s"   

zUtimeTests._test_utimec                 C   ó   dd„ }|   |¡ d S )Nc                 S   ó   t j| |d d S ©N©Úns©r   Úutime©r&   rW  r   r   r   rO    ó   z'UtimeTests.test_utime.<locals>.set_time©rR  ©r0   rO  r   r   r   Ú
test_utime  s   zUtimeTests.test_utimec                 C   s   | d d S )NrL  g•Ö&è.>r   rV  r   r   r   Ú	ns_to_sec   s   zUtimeTests.ns_to_secc                    ó   ‡ fdd„}ˆ   |¡ d S )Nc                    s0   |\}}ˆ   |¡}ˆ   |¡}t | ||f¡ d S r+   ©r_  r   rY  ©r&   rW  rP  rQ  ZatimeÚmtimerW   r   r   rO  )  s   

z2UtimeTests.test_utime_by_indexed.<locals>.set_timer\  r]  r   rW   r   Útest_utime_by_indexed'  s   z UtimeTests.test_utime_by_indexedc                    r`  )Nc                    s2   |\}}ˆ   |¡}ˆ   |¡}tj| ||fd d S )N)Útimesra  rb  rW   r   r   rO  3  s   

z0UtimeTests.test_utime_by_times.<locals>.set_timer\  r]  r   rW   r   Útest_utime_by_times2  s   zUtimeTests.test_utime_by_timesz9follow_symlinks support for utime required for this test.c                 C   rS  )Nc                 S   s   t j| |dd d S )NF)rW  Úfollow_symlinksrX  rZ  r   r   r   rO  ?  s   z9UtimeTests.test_utime_nofollow_symlinks.<locals>.set_timer\  r]  r   r   r   Útest_utime_nofollow_symlinks;  s   z'UtimeTests.test_utime_nofollow_symlinksz,fd support for utime required for this test.c                 C   rS  )Nc                 S   sD   t | ddƒ}tj| ¡ |d W d   ƒ d S 1 sw   Y  d S )NÚwbr   rV  )r$   r   rY  ry   )r&   rW  r'   r   r   r   rO  H  s   "ýz*UtimeTests.test_utime_fd.<locals>.set_timer\  r]  r   r   r   Útest_utime_fdE  ó   zUtimeTests.test_utime_fdz0dir_fd support for utime required for this test.c                 C   rS  )Nc                 S   sP   t j | ¡\}}t |¡}t j|||d W d   ƒ d S 1 s!w   Y  d S )N)r®   rW  )r   r>   r  r   Úopen_dir_fdrY  )r&   rW  rH   r   Údirfdr   r   r   rO  R  s   "þz.UtimeTests.test_utime_dir_fd.<locals>.set_timer\  r]  r   r   r   Útest_utime_dir_fdO  rk  zUtimeTests.test_utime_dir_fdc                 C   s   dd„ }| j || jd d S )Nc                 S   rT  rU  rX  rZ  r   r   r   rO  Z  r[  z1UtimeTests.test_utime_directory.<locals>.set_time©r&   )rR  rH   r]  r   r   r   Útest_utime_directoryY  s   zUtimeTests.test_utime_directoryc                 C   sb   t   ¡ }|| jƒ |  | j¡sd}nd}t | j¡}d|j||j| f }| j|j|||d d S )Ng      ð?gš™™™™™©?zst_time=%r, current=%r, dt=%r)rñ   Úmsg)Útimerê   rJ  r   r¨   rG  r  )r0   rO  Úcurrentrñ   rI  rq  r   r   r   Ú_test_utime_current_  s   
ÿ

ÿzUtimeTests._test_utime_currentc                    r`  )Nc                    s   t  ˆ j¡ d S r+   ©r   rY  rê   ro  rW   r   r   rO  v  ó   z/UtimeTests.test_utime_current.<locals>.set_time©rt  r]  r   rW   r   Útest_utime_currentu  ó   zUtimeTests.test_utime_currentc                    r`  )Nc                    s   t  ˆ jd ¡ d S r+   ru  ro  rW   r   r   rO  |  r[  z3UtimeTests.test_utime_current_old.<locals>.set_timerw  r]  r   rW   r   Útest_utime_current_old{  ry  z!UtimeTests.test_utime_current_oldc                 C   sp   t jdkr4tj tj |¡¡d d }dd l}|jj}| 	dd¡}| 
|d dd d d |t|ƒ¡}|r6|jS d S d S )Nr”   r   ú\Ú r    )r8   r9   r   r>   r@  ÚabspathÚctypesÚwindllÚkernel32Zcreate_unicode_bufferZGetVolumeInformationWr:   r'  )r0   r>   Úrootr~  r€  ÚbufÚokr   r   r   Úget_file_system  s   

þ÷zUtimeTests.get_file_systemc                 C   sJ   |   | j¡dkr|  d¡ d}t | j||f¡ |  t | j¡j|¡ d S )NZNTFSzrequires NTFSrK  )	r„  rH   rh   r   rY  rê   r=   r¨   rG  )r0   Zlarger   r   r   Útest_large_timeŽ  s
   
zUtimeTests.test_large_timec              	   C   s²  |   t¡ tj| jddd W d   ƒ n1 sw   Y  |   t¡ t | jddg¡ W d   ƒ n1 s7w   Y  |   t¡ t | jd¡ W d   ƒ n1 sSw   Y  |   t¡ t | jd¡ W d   ƒ n1 sow   Y  |   t¡ tj| jddgd W d   ƒ n1 sŽw   Y  |   t¡ tj| jdd W d   ƒ n1 s«w   Y  |   t¡ tj| jdd W d   ƒ n1 sÈw   Y  tjtjvrñ|   t¡ tj| jddd W d   ƒ n1 sìw   Y  tjtjvr.t	| jdd	ƒ&}|   t¡ t | 
¡ d¡ W d   ƒ n	1 sw   Y  W d   ƒ n	1 s)w   Y  tjtjvrW|   t¡ tj| jdd	d
 W d   ƒ d S 1 sPw   Y  d S d S )N)rÀ   rÀ   rV  rÀ   )rÀ   )rÀ   rÀ   rÀ   F©rg  ri  r   ©r®   )rj   r»   r   rY  rê   rp   Úsupports_follow_symlinksr¶   Úsupports_fdr$   ry   Úsupports_dir_fd)r0   r'   r   r   r   Útest_utime_invalid_arguments˜  sJ   ÿÿÿÿÿÿÿÿÿ€ÿ$ÿÿz'UtimeTests.test_utime_invalid_argumentsc                 C   sÔ   dd„ }|   t¡ tj| j|dƒdfd W d   ƒ n1 s w   Y  |   t¡ tj| j|dƒdfd W d   ƒ n1 sAw   Y  |   t¡ tj| j|dƒdfd W d   ƒ d S 1 scw   Y  d S )Nc                    s   G ‡ fdd„dƒ}|ƒ S )Nc                       s   e Zd Z‡ fdd„ZdS )z?UtimeTests.test_issue31577.<locals>.get_bad_int.<locals>.BadIntc                     s   ˆ S r+   r   )r‘   ©Údivmod_ret_valr   r   Ú
__divmod__º  ó   zJUtimeTests.test_issue31577.<locals>.get_bad_int.<locals>.BadInt.__divmod__N)rP   rQ   rR   rŽ  r   rŒ  r   r   ÚBadInt¹  s    r  r   )r  r  r   rŒ  r   Úget_bad_int¸  s   z/UtimeTests.test_issue31577.<locals>.get_bad_inté*   rc   rV  r   )rc   re   rÍ   )rj   rp   r   rY  rê   )r0   r‘  r   r   r   Útest_issue31577´  s   ÿÿ"ÿzUtimeTests.test_issue31577r+   )rP   rQ   rR   rX   rJ  rR  r^  Ústaticmethodr_  rd  rf  r   r   r   rY  rˆ  rh  r‰  rj  rŠ  rn  rp  rt  rx  rz  r„  r…  r‹  r   ræ   r“  r   r   r   r   rC  ê  s<    

	ÿ
ÿ
ÿ

rC  )Úmapping_testsc                   @   sB  e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Ze	 
eo!ej e¡d¡e	 
eedƒd¡dd„ ƒƒZe	 
eo:ej e¡d¡e	 
eedƒd¡dd„ ƒƒZdd„ Zdd„ Zdd„ Zdd„ Ze	 
ejd¡dd„ ƒZdd„ Ze dd ¡d!d"„ ƒZd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Z d-d.„ Z!d/d0„ Z"d1d2„ Z#d3d4„ Z$d5d6„ Z%d7d8„ Z&dS )9ÚEnvironTestsz8check that os.environ object conform to mapping protocolNc                 C   sB   t tjƒ| _tjrt tjƒ| _|  ¡  ¡ D ]	\}}|tj|< qd S r+   )	Údictr   r<  Ú_EnvironTests__saveÚsupports_bytes_environÚenvironbÚ_EnvironTests__savebÚ
_referenceÚitems©r0   Úkeyr'  r   r   r   rX   Ë  s   ÿzEnvironTests.setUpc                 C   s>   t j ¡  t j | j¡ t jrt j ¡  t j | j¡ d S d S r+   )r   r<  ÚclearÚupdater˜  r™  rš  r›  rW   r   r   r   rå   Ò  s   

þzEnvironTests.tearDownc                 C   s   ddddœS )NZVALUE1ZVALUE2ZVALUE3)ZKEY1ZKEY2ZKEY3r   rW   r   r   r   rœ  Ù  ó   zEnvironTests._referencec                 C   s   t j ¡  t jS r+   )r   r<  r   rW   r   r   r   Ú_empty_mappingÜ  s   
zEnvironTests._empty_mappingzrequires a shellÚpopenzneeds os.popen()c                 C   sd   t j ¡  t jjdd t  dt ¡}| ¡  ¡ }|  |d¡ W d   ƒ d S 1 s+w   Y  d S )NZWorld)ZHELLOz%s -c 'echo $HELLO')	r   r<  r   r¡  r¤  r   r{   Ústripr=   )r0   r¤  r'  r   r   r   Útest_update2á  s   
"þzEnvironTests.test_update2c                 C   sz   t  dt ¡,}t|ƒ}|  t|ƒd¡ |  t|ƒd¡ |  t|ƒd¡ |  tt|¡ W d   ƒ d S 1 s6w   Y  d S )Nz %s -c 'echo "line1
line2
line3"'zline1
zline2
zline3
)r   r¤  r   Úiterr=   Únextrj   ÚStopIteration)r0   r¤  Úitr   r   r   Útest_os_popen_iterë  s   ÿ"úzEnvironTests.test_os_popen_iterc                 C   s8   t j ¡ D ]\}}|  t|ƒt¡ |  t|ƒt¡ qd S r+   )r   r<  r  r=   r|   r.   )r0   rŸ  Úvalr   r   r   Útest_keyvalue_typesù  s   þz EnvironTests.test_keyvalue_typesc                 C   s.   |   ¡  ¡ D ]\}}|  tj |¡|¡ qd S r+   )rœ  r  r=   r   r<  Úgetrž  r   r   r   Ú
test_itemsþ  s   ÿzEnvironTests.test_itemsc              
   C   s4   t j}|  t|ƒd d dd„ | ¡ D ƒ¡¡¡ dS )z>Check that the repr() of os.environ looks like environ({...}).zenviron({{{}}})z, c                 s   s     | ]\}}d   ||¡V  qdS )z
{!r}: {!r}N©Úformat)r   rŸ  r'  r   r   r   Ú	<genexpr>  s
   € 
ÿ
ÿz-EnvironTests.test___repr__.<locals>.<genexpr>N)r   r<  r=   Úreprr±  r@   r  )r0   Úenvr   r   r   Útest___repr__  s   þzEnvironTests.test___repr__c                 C   s\  t j t j¡}g d¢}dt j |¡i}t j}zt|ƒt _|  |t  ¡ ¡ |  |t jd d¡ W |t _n|t _w |  |t  i ¡¡ |  dt  ddi¡¡ |  |t  |¡¡ t j	r¬zt
jdd dd	d
œ}W d   ƒ n1 snw   Y  W n	 ty}   Y n	w |  tt j|¡ |  t  ddi¡dg¡ |  t  ddi¡dg¡ |  t  ddi¡dg¡ d S d S )N)z/montyz/pythonr|  z/flying/circusÚPATH©r´  ©r|  r|  T)Úrecordr¦   r¤   )r¶  ó   PATHrº  ó   abcÚabc)r   Údefpathr  Úpathsepr@   r<  r—  ÚassertSequenceEqualÚget_exec_pathr™  ÚwarningsÚcatch_warningsÚBytesWarningrj   r»   )r0   Zdefpath_listZ	test_pathZtest_envZsaved_environZ	mixed_envr   r   r   Útest_get_exec_path
  s@   
ÿ€þÿÿÿïzEnvironTests.test_get_exec_pathz#os.environb required for this test.c                 C   s¸   d}z
|  t ¡ d¡}W n ty!   dt ¡ f }|  |¡ Y nw |tjd< |  tjd |¡ |  tjd |¡ d}|tjd< |  tjd |¡ | 	t ¡ d¡}|  tjd |¡ d S )	Nu   euroâ‚¬Úsurrogateescapez'U+20AC character is not encodable to %sÚunicodes   unicodeó   ÿs   bytesrM   )
r  r8   r  r  rh   r   r<  r=   rš  Údecode)r0   r'  Zvalue_bytesrq  Z	value_strr   r   r   Útest_environb3  s&   
ÿÿý

zEnvironTests.test_environbc                 C   sÈ   d}d}d|›d}t  ¡ L}| |d ¡ t ||¡ tjtjd|gdtj	dd}|  
|j ¡ t|ƒ¡ t |¡ tjtjd|gdtj	dd}|  
|j ¡ td ƒ¡ W d   ƒ d S 1 s]w   Y  d S )NZPYTHONTESTVARZ	testvaluez%import os; print(repr(os.environ.get(z)))r•   T)ÚcheckÚstdoutÚtext)r   ZEnvironmentVarGuardÚpopr   Úputenvr   Úrunr8   r–   ÚPIPEr=   rË  Úrstripr³  Úunsetenv)r0   r   r'  r˜   r´  Úprocr   r   r   Útest_putenv_unsetenvJ  s    
ÿ
ÿ"õz!EnvironTests.test_putenv_unsetenvrd   rÁ   c                 C   s‚   dD ]}|   ttftj|d¡ |   ttftj|¡ qtjdkr?dd }|   ttj|d¡ |   ttjd|¡ |   ttj|¡ d S d S )N)r|  z=namezna=mezname=zname zna mer'  r”   rí   é €  r¦   ÚX)rj   rD   r»   r   rÎ  rÒ  r8   r9   )r0   r   Zlongstrr   r   r   Útest_putenv_unsetenv_error]  s   
úz'EnvironTests.test_putenv_unsetenv_errorc                 C   sÀ   d}|   |tj¡ |  t¡}tj|  W d   ƒ n1 sw   Y  |  |jjd |¡ |  |jj	¡ |  t¡}tj|= W d   ƒ n1 sHw   Y  |  |jjd |¡ |  |jj	¡ d S )NZ
missingkeyr   )
ÚassertNotInr   r<  rj   ÚKeyErrorÚassertIsr/  r‘   r]   Ú__suppress_context__)r0   ÚmissingÚcmr   r   r   Útest_key_typem  s   ÿ
ÿzEnvironTests.test_key_typec                 C   sR   t |ƒ}d}t|ƒ dtj|< zt|ƒ |  tj| d¡ W tj|= d S tj|= w )NZ__new_key__Ztest_environ_iteration)r§  r¨  r   r<  r=   )r0   Z
collectionÚiteratorZnew_keyr   r   r   Ú_test_environ_iteration{  s   
z$EnvironTests._test_environ_iterationc                 C   ó   |   tj¡ d S r+   )rà  r   r<  rW   r   r   r   Ú(test_iter_error_when_changing_os_environŠ  r  z5EnvironTests.test_iter_error_when_changing_os_environc                 C   ó   |   tj ¡ ¡ d S r+   )rà  r   r<  r  rW   r   r   r   Ú.test_iter_error_when_changing_os_environ_items  ó   z;EnvironTests.test_iter_error_when_changing_os_environ_itemsc                 C   rã  r+   )rà  r   r<  ÚvaluesrW   r   r   r   Ú/test_iter_error_when_changing_os_environ_values  rå  z<EnvironTests.test_iter_error_when_changing_os_environ_valuesc                 C   sf   t rtj t ¡s
d S t t › d|› d¡}| ¡  ¡ }W d   ƒ n1 s&w   Y  |  ||¡ d S )Nz -c 'echo $ú')r   r   r>   Úexistsr¤  r{   r¥  r=   )r0   ÚvarrI   r¤  r'  r   r   r   Ú_test_underlying_process_env“  s   ÿz)EnvironTests._test_underlying_process_envc                 C   s”   d}d}|t j|< dddd|di}tt jƒ}| |¡ t j|B }|  ||¡ |  d|| ¡ | ¡ }|  tt j 	|¡¡ |  
dd¡ |  
||¡ d S ©	NÚ
_TEST_VAR_Úoriginal_valueÚ_A_r¦   Ú_B_Ú2Ú3r|  )r   r<  r—  r¡  ÚassertDictEqualr=   r  rÚ  ÚNotImplementedÚ__or__rë  ©r0   Úoverridden_keyrî  Únew_vars_dictrI   ÚactualÚnew_vars_itemsr   r   r   Útest_or_operatorœ  s   



zEnvironTests.test_or_operatorc                 C   s|   d}dt j|< dddd|di}tt jƒ}| |¡ t  j|O  _|  |t j¡ |  dt j| ¡ |  dd¡ |  |d¡ d S )Nrí  rî  rï  r¦   rð  rñ  rò  ©r   r<  r—  r¡  r=   rë  )r0   r÷  rø  rI   r   r   r   Útest_ior_operator¯  s   


zEnvironTests.test_ior_operatorc                 C   sœ   t j ¡ }|  t¡ ddi}t  j|O  _W d   ƒ n1 s w   Y  |  t¡ ddi}t  j|O  _W d   ƒ n1 s@w   Y  |  |t j¡ d S )Nrc   rï  )r   r<  Úcopyrj   rp   r=   )r0   Zos_environ_copyZdict_with_bad_keyZdict_with_bad_valr   r   r   Útest_ior_operator_invalid_dicts¾  s   
þþz,EnvironTests.test_ior_operator_invalid_dictsc                 C   sz   d}dt j|< dd|dff}tt jƒ}| |¡ t  j|O  _|  |t j¡ |  dt j| ¡ |  dd¡ |  |d¡ d S )Nrí  rî  )rï  r¦   )rð  rñ  rò  rï  r¦   rü  )r0   r÷  rú  rI   r   r   r   Ú$test_ior_operator_key_value_iterableË  s   


z1EnvironTests.test_ior_operator_key_value_iterablec                 C   s”   d}d}|t j|< dddd|di}t|ƒ}| t j¡ |t jB }|  ||¡ |  ||| ¡ | ¡ }|  tt j 	|¡¡ |  
dd¡ |  
||¡ d S rì  )r   r<  r—  r¡  ró  r=   r  rÚ  rô  Ú__ror__rë  rö  r   r   r   Útest_ror_operatorÚ  s   

zEnvironTests.test_ror_operator)'rP   rQ   rR   Ú__doc__Z	type2testrX   rå   rœ  r£  r   r   r   r   r>   ré  r   r¦  r«  r­  r¯  rµ  rÄ  r™  rÉ  rÔ  r   Zrequires_mac_verr×  rÞ  rà  râ  rä  rç  rë  rû  rý  rÿ  r   r  r   r   r   r   r–  Ç  sN    ÿÿ)ÿ


	r–  c                   @   sZ   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	d
„Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )Ú	WalkTestszTests for os.walk().c                 K   s(   d|v r|  d¡|d< tj|fi |¤ŽS ©Nrg  Úfollowlinks)rÍ  r   Úwalk)r0   ÚtopÚkwargsr   r   r   r  ó  s   zWalkTests.walkc              	   C   s:  t jj}|  tjtj¡ |tjdƒ| _|| jdƒ| _|| jdƒ| _	|| jdƒ}||dƒ}|| jdƒ}|| jdƒ}||dƒ}||dƒ}||d	ƒ| _
|tjd
ƒ}|tjd
dƒ}	||dƒ}
||dƒ}||dƒ}t  | j	¡ t  |¡ t  |¡ t  |¡ ||||	|fD ]"}t|ddd}| d| d ¡ W d   ƒ n1 sw   Y  q€t ¡ rØt  t j |¡| j
¡ t  d|
d¡ t  |ddƒ|d¡ t  |ddƒ|d¡ |dd	gg d¢f| _n|dgdgf| _t  |d¡ zt  |¡ W n ty   |  t j|tj¡ Y d S w t  |tj¡ t  |¡ t  |¡ | jd d d…= d S )NZTEST1ÚSUB1ÚSUB11ÚSUB2ZSUB21Útmp1Útmp2Útmp3ÚlinkZTEST2Útmp4Úbroken_linkÚbroken_link2Úbroken_link3rí   r›   r¥   zI'm z" and proud of it.  Blame test_os.
ÚbrokenTZtmp5)r  r  r  r  r   rc   )r   r>   r@   r„   r   rE  rU   Ú	walk_pathÚ	sub1_pathÚ
sub11_pathÚ	link_pathÚmakedirsr$   r%   Úcan_symlinkr±   r}  Ú	sub2_treeÚchmodÚlistdirÚPermissionErrorr¨   ÚS_IRWXUrV   r8  )r0   r@   Z	sub2_pathZ
sub21_pathZ	tmp1_pathZ	tmp2_pathZ	tmp3_pathZ	tmp5_pathZt2_pathZ	tmp4_pathZbroken_link_pathZbroken_link2_pathZbroken_link3_pathr>   ra   r   r   r   rX   ø  sZ   








ÿ€ÿÿ

zWalkTests.setUpc                 C   sì   t |  | j¡ƒ}|  t|ƒd¡ |d d d dk}|d d  ¡  |dd|   d  ¡  |dd|   d  ¡  |  |d | jddgd	gf¡ |  |d|  | jd
gdgf¡ |  |d|  | jg g f¡ |  |dd|   | j¡ d S )Nrw   r   rc   r
  rÍ   re   éÿÿÿÿr  r  r  r  )	Úlistr  r  r=   r:   Úsortr  r  r  ©r0   ÚallZflippedr   r   r   Útest_walk_topdown=  s    zWalkTests.test_walk_topdownNc                 C   s¬   |d u r| j }g }|  |¡D ]\}}}| |||f¡ d|v r$| d¡ q|  t|ƒd¡ |  |d | j dgdgf¡ |d d  ¡  |d d  ¡  |  |d | j¡ d S )Nr
  re   r   r  r  rc   r!  )r  r  ÚappendÚremover=   r:   r#  r  )r0   r  r%  r  Údirsr   r   r   r   Útest_walk_pruneN  s   
€zWalkTests.test_walk_prunec                 C   s   |   t| jƒ¡ d S r+   )r*  r   r  rW   r   r   r   Útest_file_like_patha  rå  zWalkTests.test_file_like_pathc                 C   sî   t | j| jddƒ}|  t|ƒd|¡ |d d d dk}|d d  ¡  |dd|   d	  ¡  |dd|   d  ¡  |  |d | jdd
gdgf¡ |  || | jg g f¡ |  ||d  | jdgdgf¡ |  |dd|   | j¡ d S )NF©Útopdownrw   rÍ   rc   r   r
  re   r!  r  r  r  r  )	r"  r  r  r=   r:   r#  r  r  r  r$  r   r   r   Útest_walk_bottom_upd  s$   
ÿ

ÿÿÿzWalkTests.test_walk_bottom_upc                 C   sj   t  ¡ s	|  d¡ | j| jdd}|D ]\}}}|| jkr-|  |g ¡ |  |dg¡  d S q|  d¡ d S )Nzneed symlink supportTr†  r  z+Didn't follow symlink with followlinks=True)r   r  rh   r  r  r  r=   r  )r0   Úwalk_itr  r)  r   r   r   r   Útest_walk_symlinky  s   

ýzWalkTests.test_walk_symlinkc              
   C   sÚ   g }| j | j|jd}t|ƒ\}}}|  |g ¡ d}tj ||¡}tj ||d ¡}t ||¡ z5dd„ |D ƒ}	|  	|¡ |  
||	¡ |  
||	¡ |D ]}
|
|kr\|  tj ||
¡|	¡ qKW t ||¡ d S t ||¡ w )N)Úonerrorr
  z.newc                 S   s   g | ]\}}}|‘qS r   r   )r   rŸ   Údra   r   r   r   r   ’  ó    z/WalkTests.test_walk_bad_dir.<locals>.<listcomp>)r  r  r'  r¨  r=   r   r>   r@   rq   r]   rØ  rÃ   )r0   Úerrorsr/  r  r)  r   Údir1Zpath1Zpath1newÚrootsÚdir2r   r   r   Útest_walk_bad_dir‡  s&   
€þzWalkTests.test_walk_bad_dirc                    s  d}t j tjd¡‰ t jjˆ gdg| ¢R Ž }t  |¡ ‡ ‡fdd„tdƒD ƒ}t|d ƒD ]}||r6dgng g f}|D ]
}ˆ t|ƒ|¡ q<t j 	|¡}q.‡ ‡fdd„tdƒD ƒ}ˆ }t|d ƒD ]"}|||k rldgng g f}|D ]
}ˆ t|ƒ|¡ qrt j |d¡}qbd S )	Né   Zdeepr2  c                    ó   g | ]	}ˆj ˆ d d‘qS )Fr,  ©r  ©r   Új©Úbaser0   r   r   r   ¢  ó    z7WalkTests.test_walk_many_open_files.<locals>.<listcomp>r    rc   c                    r:  )Tr,  r;  r<  r>  r   r   r   ©  r@  )
r   r>   r@   r   rU   r  rÄ   r=   r¨  rH   )r0   Údepthr  ZitersrÉ   rI   rª  r   r>  r   Útest_walk_many_open_filesœ  s$   
üz#WalkTests.test_walk_many_open_filesr+   )rP   rQ   rR   r  r  rX   r&  r*  r+  r.  r0  r8  rB  r   r   r   r   r  î  s    E
r  ÚfwalkzTest needs os.fwalk()c                   @   sL   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dZdS )Ú
FwalkTestszTests for os.fwalk().c                 k   s2    | j |fi |¤ŽD ]\}}}}|||fV  q
d S r+   )rC  )r0   r  r	  r  r)  r   Zroot_fdr   r   r   r  ¶  s   €ÿzFwalkTests.walkc                 O   s   t j|i |¤ŽS r+   )r   rC  ©r0   r‘   r	  r   r   r   rC  º  r  zFwalkTests.fwalkc           
      C   sÂ   |  ¡ }|  ¡ }tjdddD ]O\}}|j||d |j||d i }tjdi |¤ŽD ]\}}}t|ƒt|ƒf||< q+| jdi |¤ŽD ]\}}}}	|  ||¡ |  	|| t|ƒt|ƒf¡ qCqdS )z.
        compare with walk() results.
        ©TFre   ©Úrepeat)r-  r  )r-  rg  Nr   )
rþ  Ú	itertoolsÚproductr¡  r   r  ÚsetrC  rÃ   r=   )
r0   Úwalk_kwargsÚfwalk_kwargsr-  rg  rI   r  r)  r   Úrootfdr   r   r   Ú_compare_to_walk½  s   þøzFwalkTests._compare_to_walkc                 C   s   dt ji}|  ||¡ d S )Nr  )r   rU   rO  )r0   r	  r   r   r   Útest_compare_to_walkÏ  ó   
zFwalkTests.test_compare_to_walkc              	   C   sR   z"t  dt j¡}dtji}| ¡ }||d< |  ||¡ W t  |¡ d S t  |¡ w )NÚ.r  r®   )r   r$   rœ   r   rU   rþ  rO  r\   )r0   r~   rL  rM  r   r   r   Útest_dir_fdÓ  s   
zFwalkTests.test_dir_fdc                 C   s|   t jdddD ]4\}}tj|d f}| j|d|iŽD ]!\}}}}t |¡ t |¡ |  t	t 
|¡ƒt	|ƒt	|ƒB ¡ qqd S )NrF  re   rG  rg  )rI  rJ  r   rU   rC  r   Úfstatr¨   r=   rK  r  )r0   r-  rg  r‘   r  r)  r   rN  r   r   r   Útest_yields_correct_dir_fdÝ  s   

$úþz%FwalkTests.test_yields_correct_dir_fdc                 C   s\   t  d¡}t  |¡ tdƒD ]}|  tj¡D ]}qqt  d¡}|  t j|¡ |  ||¡ d S )Nrc   é   )	r   rg   r\   rÄ   rC  r   rU   r„   r=   )r0   ZminfdrÉ   rí   Znewfdr   r   r   Útest_fd_leaké  s   

ÿ
zFwalkTests.test_fd_leakN)rP   rQ   rR   r  r  rC  rO  rP  rS  rU  rW  rB  r   r   r   r   rD  ²  s    
rD  c                   @   ó   e Zd ZdZdd„ ZdS )ÚBytesWalkTestsúTests for os.walk() with bytes.c           	      k   s¦    d|v r|  d¡|d< tjt |¡fi |¤ŽD ]8\}}}t |¡}tttj|ƒƒ}tttj|ƒƒ}|||fV  tttj|ƒƒ|d d …< tttj|ƒƒ|d d …< qd S r  )rÍ  r   r  ÚfsencoderN   r"  Úmap)	r0   r  r	  ÚbrootÚbdirsÚbfilesr  r)  r   r   r   r   r  ü  s   €"
úzBytesWalkTests.walkN)rP   rQ   rR   r  r  r   r   r   r   rY  ú  s    rY  c                   @   s   e Zd ZdZddd„ZdS )ÚBytesFwalkTestsrZ  rR  c                 o   sš    t jt  |¡g|¢R i |¤ŽD ]:\}}}}t  |¡}ttt j|ƒƒ}	ttt j|ƒƒ}
||	|
|fV  ttt j|	ƒƒ|d d …< ttt j|
ƒƒ|d d …< qd S r+   )r   rC  r[  rN   r"  r\  )r0   r  r‘   r	  r]  r^  r_  Útopfdr  r)  r   r   r   r   rC  
  s   €*
úzBytesFwalkTests.fwalkN)rR  )rP   rQ   rR   r  rC  r   r   r   r   r`    s    r`  c                   @   s^   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	 
ejdkd¡dd„ ƒZdd„ ZdS )ÚMakedirTestsc                 C   ó   t  tj¡ d S r+   ©r   rA   r   rU   rW   r   r   r   rX     r  zMakedirTests.setUpc              
   C   s    t j}tj |ddd¡}t |¡ tj |dddd¡}t |¡ |  ttjtj¡ tj |dddddtj¡}t |¡ tj |dtjddddd¡}t |¡ d S ©Nr5  r7  Zdir3Zdir4Zdir5Zdir6)	r   rU   r   r>   r@   r  rj   rD   Úcurdir)r0   r?  r>   r   r   r   Útest_makedir  s   


ÿzMakedirTests.test_makedirc                 C   sÌ   t  d¡W t j}tj |d¡}tj |d¡}t |d¡ |  tj |¡¡ |  tj 	|¡¡ tj
dkrT|  t |¡jd@ d¡ |  t |¡jd@ d¡ W d   ƒ d S W d   ƒ d S 1 s_w   Y  d S )Nre   r5  r7  im  Úntr«   iý  )r   Z
temp_umaskrU   r   r>   r@   r  r]   ré  Úisdirr   r=   r¨   r  )r0   r?  Úparentr>   r   r   r   Ú	test_mode'  s   
÷"ùzMakedirTests.test_modec                 C   s–   t j tjd¡}d}t  d¡}t  ||¡ |  tt j||¡ | jtt j||dd t j|ddd t j||dd t  |¡ t jt j 	d	¡dd d S )
Nr5  r«   é   F©Úexist_okiþ  T)r­   rn  ú/)
r   r>   r@   r   rU   Úumaskr  rj   rD   r}  )r0   r>   r­   Úold_maskr   r   r   Ú test_exist_ok_existing_directory3  s   

z-MakedirTests.test_exist_ok_existing_directoryc              	   C   sú   t j tjd¡}tj}d}t  d¡}zdt t  	tj¡j
¡}zt  tj||B ¡ W n ty4   t d¡‚w t  	tj¡j
|@ |krEt d¡‚t  |||B ¡ t j||dd t  |t t  	|¡j
¡| @ ¡ t j|||B dd W t  |¡ d S t  |¡ w )Nr5  r«   rl  zCannot set S_ISGID for dir.z No support for S_ISGID dir mode.Trm  )r   r>   r@   r   rU   r¨   ÚS_ISGIDrp  ÚS_IMODEÚlstatr  r  r  r   ÚSkipTestr  )r0   r>   rs  r­   rq  Zexisting_testfn_moder   r   r   Útest_exist_ok_s_isgid_directoryA  s(   
ÿ
ÿ
 z,MakedirTests.test_exist_ok_s_isgid_directoryc                 C   s”   t j}tj t jd¡}t|ddd}| d¡ W d   ƒ n1 s"w   Y  |  ttj	|¡ | jttj	|dd | jttj	|dd t 
|¡ d S )	Nr5  r1  r›   r¥   r¼  Frm  T)r   rU   r   r>   r@   r$   r%   rj   rD   r  r(  )r0   r?  r>   ra   r   r   r   Ú#test_exist_ok_existing_regular_file\  s   ÿz0MakedirTests.test_exist_ok_existing_regular_filerh  zrequires Windowsc                 C   sd   t j}tj tj t jd¡¡}tj|dd tjd|dgdd}t 	|¡ |  
| ¡ |› d¡ d S )	Nrþ   iÀ  )r­   z	cacls.exez/sZoemr¥   z6 "D:P(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FA;;;OW)")r   rU   r   r>   r}  r@   rA   r   Úcheck_outputr8  r=   r¥  )r0   r?  r>   Úoutr   r   r   Útest_win32_mkdir_700f  s   
þz!MakedirTests.test_win32_mkdir_700c              	   C   s`   t j tjdddddd¡}t j |¡s)|tjkr)t j |¡}t j |¡s)|tjkst  |¡ d S re  )r   r>   r@   r   rU   ré  rH   Ú
removedirs©r0   r>   r   r   r   rå   r  s   ÿÿzMakedirTests.tearDownN)rP   rQ   rR   rX   rg  rk  rr  rw  rx  r   r   r   r   r{  rå   r   r   r   r   rb    s    

rb  ÚchownzTest needs chownc                   @   sˆ   e Zd Zedd„ ƒZdd„ Ze ee	dƒd¡dd„ ƒZ
e eo$eeƒd	kd
¡dd„ ƒZe e o5eeƒd	kd¡dd„ ƒZedd„ ƒZdS )ÚChownFileTestsc                 C   rc  r+   rd  ©Úclsr   r   r   Ú
setUpClass  rv  zChownFileTests.setUpClassc                 C   s”   t  tj¡}|j}|j}ddt d¡t 	dd¡fD ]}|  
tt jtj||¡ |  
tt jtj||¡ q|  t  tj||¡¡ |  t  tjdd¡¡ d S )Ng      ð¿y       €      ð¿r!  éþÿÿÿre   )r   r¨   r   rU   Úst_uidÚst_gidÚdecimalZDecimalÚ	fractionsZFractionrj   rp   r~  ÚassertIsNone)r0   r¨   ÚuidÚgidr'  r   r   r   Ú*test_chown_uid_gid_arguments_must_be_index…  s   z9ChownFileTests.test_chown_uid_gid_arguments_must_be_indexÚ	getgroupszneed os.getgroupsc                 C   s”   t  ¡ }t|ƒdk r|  d¡ |d d… \}}t  tj¡j}t  tj||¡ t  tj¡j	}|  
||¡ t  tj||¡ t  tj¡j	}|  
||¡ d S )Nre   ztest needs at least 2 groups)r   rŒ  r:   rh   r¨   r   rU   r„  r~  r…  r=   )r0   ÚgroupsZgid_1Zgid_2r‰  rŠ  r   r   r   Útest_chown_gid  s   
zChownFileTests.test_chown_gidrc   z0test needs root privilege and more than one userc                 C   sv   t d d… \}}t tj¡j}t tj||¡ t tj¡j}|  ||¡ t tj||¡ t tj¡j}|  ||¡ d S ©Nre   )	Ú	all_usersr   r¨   r   rU   r…  r~  r„  r=   )r0   Úuid_1Úuid_2rŠ  r‰  r   r   r   Útest_chown_with_root   s   z#ChownFileTests.test_chown_with_rootz2test needs non-root account and more than one userc                 C   sn   t d d… \}}t tj¡j}|  t¡ t tj||¡ t tj||¡ W d   ƒ d S 1 s0w   Y  d S r  )	r  r   r¨   r   rU   r…  rj   r  r~  )r0   r‘  r’  rŠ  r   r   r   Útest_chown_without_permission¬  s   "þz,ChownFileTests.test_chown_without_permissionc                 C   rc  r+   )r   r8  r   rU   r€  r   r   r   ÚtearDownClassµ  rv  zChownFileTests.tearDownClassN)rP   rQ   rR   Úclassmethodr‚  r‹  r   r   r   r   rŽ  Úroot_in_posixr:   r  r“  r”  r•  r   r   r   r   r  ~  s     


ÿ

ÿ
r  c                   @   ó4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚRemoveDirsTestsc                 C   rc  r+   )r   r  r   rU   rW   r   r   r   rX   »  r  zRemoveDirsTests.setUpc                 C   s   t  t j¡ d S r+   )r   rE  rU   rW   r   r   r   rå   ¾  r  zRemoveDirsTests.tearDownc                 C   sx   t j tjd¡}t  |¡ t j |d¡}t  |¡ t  |¡ |  t j |¡¡ |  t j |¡¡ |  t j tj¡¡ d S )NÚdiraÚdirb)	r   r>   r@   r   rU   rA   r|  ÚassertFalseré  ©r0   rš  r›  r   r   r   Útest_remove_allÁ  s   


zRemoveDirsTests.test_remove_allc                 C   sŠ   t j tjd¡}t  |¡ t j |d¡}t  |¡ tt j |d¡ƒ t  |¡ |  t j 	|¡¡ |  
t j 	|¡¡ |  
t j 	tj¡¡ d S ©Nrš  r›  úfile.txt)r   r>   r@   r   rU   rA   r(   r|  rœ  ré  r]   r  r   r   r   Útest_remove_partialË  s   


z#RemoveDirsTests.test_remove_partialc                 C   s´   t j tjd¡}t  |¡ t j |d¡}t  |¡ tt j |d¡ƒ |  t¡ t  	|¡ W d   ƒ n1 s7w   Y  |  
t j |¡¡ |  
t j |¡¡ |  
t j tj¡¡ d S rŸ  )r   r>   r@   r   rU   rA   r(   rj   rD   r|  r]   ré  r  r   r   r   Útest_remove_nothingÖ  s   

ÿz#RemoveDirsTests.test_remove_nothingN)rP   rQ   rR   rX   rå   rž  r¡  r¢  r   r   r   r   r™  º  s    
r™  c                   @   ó   e Zd Zdd„ ZdS )ÚDevNullTestsc                 C   s‚   t tjddƒ}| d¡ | ¡  W d   ƒ n1 sw   Y  t tjdƒ}|  | ¡ d¡ W d   ƒ d S 1 s:w   Y  d S )Nri  r   ó   hellorƒ   ó    )r$   r   Údevnullr%   r\   r=   r{   r`   r   r   r   Útest_devnullä  s   

þ"ÿzDevNullTests.test_devnullN)rP   rQ   rR   r¨  r   r   r   r   r¤  ã  ó    r¤  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚURandomTestsc                 C   sr   |   tt d¡ƒd¡ |   tt d¡ƒd¡ |   tt d¡ƒd¡ |   tt d¡ƒd¡ |   tt d¡ƒd¡ d S )Nr   rc   rd   r    r5   )r=   r:   r   ÚurandomrW   r   r   r   Útest_urandom_lengthí  s
   z URandomTests.test_urandom_lengthc                 C   s0   t  d¡}|  |t¡ t  d¡}|  ||¡ d S ©Né   )r   r«  r-   rM   r>  ©r0   Zdata1Zdata2r   r   r   Útest_urandom_valueô  s   

zURandomTests.test_urandom_valuec                 C   s<   d  dd| ddf¡}td|ƒ}|d }|  t|ƒ|¡ |S )NÚ
zimport os, syszdata = os.urandom(%s)zsys.stdout.buffer.write(data)zsys.stdout.buffer.flush()r•   rc   )r@   r   r=   r:   )r0   Úcountr˜   rz  rË  r   r   r   Úget_urandom_subprocessú  s   ü
z#URandomTests.get_urandom_subprocessc                 C   s$   |   d¡}|   d¡}|  ||¡ d S r­  )r³  r>  r¯  r   r   r   Útest_urandom_subprocess  ó   

z$URandomTests.test_urandom_subprocessN)rP   rQ   rR   r¬  r°  r³  r´  r   r   r   r   rª  ì  s
    rª  Ú	getrandomzneed os.getrandom()c                   @   s@   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dS )ÚGetRandomTestsc              
   C   sB   zt  d¡ W d S  ty  } z|jtjkrt d¡‚‚ d }~ww )Nrc   z%getrandom() syscall fails with ENOSYS)r   r¶  rD   rE   rÂ   r   rv  )r  rJ   r   r   r   r‚    s   
€úzGetRandomTests.setUpClassc                 C   s*   t  d¡}|  |t¡ |  t|ƒd¡ d S r­  )r   r¶  r-   rM   r=   r:   ©r0   r…   r   r   r   Útest_getrandom_type  s   
z"GetRandomTests.test_getrandom_typec                 C   s   t  d¡}|  |d¡ d S )Nr   r¦  )r   r¶  r=   )r0   Úemptyr   r   r   Útest_getrandom0  rQ  zGetRandomTests.test_getrandom0c                 C   s   |   ttdƒ¡ d S )NÚGRND_RANDOM)r]   r   r   rW   r   r   r   Útest_getrandom_random"  rå  z$GetRandomTests.test_getrandom_randomc                 C   s*   z
t  dt j¡ W d S  ty   Y d S w ©Nrc   )r   r¶  ÚGRND_NONBLOCKÚBlockingIOErrorrW   r   r   r   Útest_getrandom_nonblock(  s
   þz&GetRandomTests.test_getrandom_nonblockc                 C   s$   t  d¡}t  d¡}|  ||¡ d S r­  )r   r¶  r>  r¯  r   r   r   Útest_getrandom_value0  rµ  z#GetRandomTests.test_getrandom_valueN)
rP   rQ   rR   r–  r‚  r¹  r»  r½  rÁ  rÂ  r   r   r   r   r·    s    
r·  ZHAVE_GETENTROPYrc   ZHAVE_GETRANDOMZHAVE_GETRANDOM_SYSCALLz*os.random() does not use a file descriptorr4   z$VxWorks can't set RLIMIT_NOFILE to 1c                   @   s0   e Zd Ze ed¡dd„ ƒZdd„ Zdd„ ZdS )	ÚURandomFDTestsz!test requires the resource modulec                 C   s   d}t d|ƒ d S )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—   r   r   r   Útest_urandom_failureB  s   z#URandomFDTests.test_urandom_failurec                 C   s   d}t d|ƒ\}}}d S )Na  if 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   )r0   r˜   Úrcrz  Úerrr   r   r   Útest_urandom_fd_closedY  s   	z%URandomFDTests.test_urandom_fd_closedc                 C   s–   |   tjtj¡ ttjdƒ djtjd}td|ƒ\}}}|  t|ƒd¡ |  	|dd… |dd… ¡ td|ƒ\}}}|  t|ƒd¡ |  	||¡ d S )Ns   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa­  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))
            )rU   rÅ  rö   r   rw   )
r„   r   rV   rU   r(   r±  r   r=   r:   r>  )r0   r˜   rÆ  rz  rÇ  Zout2Zerr2r   r   r   Útest_urandom_fd_reopenedg  s   èz'URandomFDTests.test_urandom_fd_reopenedN)	rP   rQ   rR   r   r   ÚresourcerÄ  rÈ  rÉ  r   r   r   r   rÃ  =  s
    

rÃ  c                 #   s~    g ‰ ‡ fdd„}‡ fdd„}z%t j}t j}t j}|t _|t _| dur&| t _ˆ V  W |t _|t _|t _dS |t _|t _|t _w )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.
    c                    s   ˆ   d| |f¡ tdƒ‚)NÚexecvzexecv called)r'  ÚRuntimeError©r   r‘   ©Úcallsr   r   Ú
mock_execv™  s   z#_execvpe_mockup.<locals>.mock_execvc                    s   ˆ   d| |f¡ ttjdƒ‚)NÚexecvezexecve called)r'  rD   rE   ÚENOTDIRrÍ  rÎ  r   r   Úmock_execve  s   z$_execvpe_mockup.<locals>.mock_execveN)r   rË  rÑ  r½  )r½  rÐ  rÓ  Z
orig_execvZorig_execveZorig_defpathr   rÎ  r   Ú_execvpe_mockupŽ  s&   €	
þrÔ  rË  zneed os.execv()c                   @   st   e Zd Ze ed¡dd„ ƒZdd„ Zdd„ Ze 	e
edƒd	¡d
d„ ƒZdd„ Zdd„ Ze 	ejdkd¡dd„ ƒZdS )Ú	ExecTestsz4avoid triggering a linuxthreads bug: see issue #4970c                 C   s   |   ttjddgd ¡ d S )Nzno such app-)rj   rD   r   ÚexecvperW   r   r   r   Útest_execvpe_with_bad_program²  s   ÿz'ExecTests.test_execvpe_with_bad_programc                 C   sN   |   ttjdd¡ |   ttjdg ¡ |   ttjdd¡ |   ttjddg¡ d S )NÚnotepadr   r¸  r|  )rj   r»   r   rË  rW   r   r   r   Útest_execv_with_bad_arglist¸  s   z%ExecTests.test_execv_with_bad_arglistc                 C   sB   |   ttjdg d ¡ |   ttjdg i ¡ |   ttjddgi ¡ d S )NrØ  r|  )rj   r»   r   rÖ  rW   r   r   r   Útest_execvpe_with_bad_arglist¾  s   z'ExecTests.test_execvpe_with_bad_arglistÚ_execvpez)No internal os._execvpe function to test.c           
      C   sÌ  t jd }|tu rd}t j t  |¡|¡}|}g d¢}nd}g d¢}t j ||¡}t jdkr4t  |¡}n|}ddi}tƒ %}|  t	t j
||¡ |  t|ƒd	¡ |  |d
 d||ff¡ W d   ƒ n1 sew   Y  t|d(}| jtt j
|||d |  t|ƒd	¡ |  |d
 d|||ff¡ W d   ƒ n1 sšw   Y  tƒ :}| ¡ }	|tu r°||	d< n||	d< | jtt j
|||	d |  t|ƒd	¡ |  |d
 d|||	ff¡ W d   ƒ d S 1 sßw   Y  d S )NZabsolutepaths
   executable)s   prognameÚarg1Úarg2r–   )ZprognamerÜ  rÝ  rh  Zspamr‡   rc   r   rË  )r½  r·  rÑ  rº  r¶  )r   r?   rM   r>   r@   r[  r   rÔ  rj   rÌ  rÛ  r=   r:   rD   r¿  rþ  )
r0   Z	test_typeZprogram_pathZprogramÚfullpathZnative_fullpathZ	argumentsr´  rÏ  Zenv_pathr   r   r   Ú_test_internal_execvpeÃ  sT   


ÿü
ÿ
ÿü	

ÿ
ÿ"÷z ExecTests._test_internal_execvpec                 C   s&   |   t¡ tjdkr|   t¡ d S d S )Nrh  )rß  r.   r   r   rM   rW   r   r   r   Útest_internal_execvpe_strô  s   

ÿz#ExecTests.test_internal_execvpe_strc                 C   sü   t jddg}tj ¡ }d|d< |  t¡ t |d ||¡ W d   ƒ n1 s(w   Y  tj ¡ }d|d< |  t¡ t |d ||¡ W d   ƒ n1 sOw   Y  tj ¡ }d|d	< |  t¡ t |d ||¡ W d   ƒ d S 1 sww   Y  d S )
Nr•   ÚpassÚcabbageúFRUIT VEGETABLEr   úorange VEGETABLE=cabbageÚFRUITÚlemonúFRUIT=ORANGE)r8   r–   r   r<  rþ  rj   r»   rÑ  )r0   r‘   Únewenvr   r   r   Útest_execve_invalid_envù  s    
ÿ
ÿ
"ÿz!ExecTests.test_execve_invalid_envr”   zWin32-specific testc              
   C   sd   z
t  ddgi ¡ W n  ty* } z|  |jd u p|jdk¡ W Y d }~d S d }~ww |  d¡ d S )Nr|  Úargr   zNo OSError raised)r   rÑ  rD   r]   Úwinerrorr  r-  r   r   r   Útest_execve_with_empty_path  s   (€ÿz%ExecTests.test_execve_with_empty_pathN)rP   rQ   rR   r   ÚskipIfÚUSING_LINUXTHREADSr×  rÙ  rÚ  r   r   r   rß  rà  ré  r8   r9   rì  r   r   r   r   rÕ  ¯  s    ÿ
ÿ
/rÕ  r”   r,  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚWin32ErrorTestsc              
   C   sz   zt  tj¡ W n* ty   d}Y d S  ty2 } zd}|  dtj|f ¡ W Y d }~d S d }~ww |  dtj ¡ d S )NFTz.file %s must not exist; os.stat failed with %szfile %s must not exist)r   r¨   r   rU   rC   rD   r  )r0   ré  rJ   r   r   r   rX     s   
ÿ€þzWin32ErrorTests.setUpc                 C   s   |   ttjtjtjd ¡ d S )Nz.bak)rj   rD   r   rq   r   rU   rW   r   r   r   rt   '  s   zWin32ErrorTests.test_renamec                 C   ó   |   ttjtj¡ d S r+   )rj   rD   r   r(  r   rU   rW   r   r   r   Útest_remove*  r!   zWin32ErrorTests.test_removec                 C   rð  r+   )rj   rD   r   rB   r   rU   rW   r   r   r   Ú
test_chdir-  r!   zWin32ErrorTests.test_chdirc                 C   sT   |   tjtj¡ ttjdƒ}|  ttjtj¡ W d   ƒ d S 1 s#w   Y  d S )Nrí   )	r„   r   rV   rU   r$   rj   rD   r   rA   r`   r   r   r   Ú
test_mkdir0  s   "ÿzWin32ErrorTests.test_mkdirc                 C   s   |   ttjtjd ¡ d S r+   )rj   rD   r   rY  r   rU   rW   r   r   r   r^  6  ó   zWin32ErrorTests.test_utimec                 C   s   |   ttjtjd¡ d S rn   )rj   rD   r   r  r   rU   rW   r   r   r   Ú
test_chmod9  rô  zWin32ErrorTests.test_chmodN)
rP   rQ   rR   rX   rt   rñ  rò  ró  r^  rõ  r   r   r   r   rï    s    rï  c                   @   sÖ  e Zd Zg d¢Zdd„ ZeD ]Zeeƒeƒ de < qdd„ Zdd„ Ze	 
eed	ƒd
¡dd„ ƒZe	 
eedƒd¡dd„ ƒZe	 
eedƒd¡dd„ ƒZe	 
eedƒd¡dd„ ƒZe	 
eedƒd¡dd„ ƒZe	 
eedƒd¡dd„ ƒZe	 
eedƒd ¡d!d"„ ƒZe	 
eed#ƒd$¡d%d&„ ƒZe	 
eed'ƒd(¡d)d*„ ƒZe	 
eed+ƒd,¡d-d.„ ƒZe	 
eed/ƒd0¡d1d2„ ƒZe	 
eed3ƒd4¡d5d6„ ƒZe	 
eed7ƒd8¡d9d:„ ƒZe	 
eed;ƒd<¡d=d>„ ƒZd?d@„ Ze	 
eedAƒdB¡dCdD„ ƒZdES )FÚTestInvalidFD)Úfchdirrg   Ú	fdatasyncrT  ÚfstatvfsÚfsyncÚ	tcgetpgrpÚttynamec                    s   ‡ fdd„}|S )Nc                    s"   t tˆ ƒr|  ttˆ ƒ¡ d S d S r+   )r   r   rÊ  r  rW   ©ra   r   r   ÚhelperC  s   
ÿz(TestInvalidFD.get_single.<locals>.helperr   )ra   rþ  r   rý  r   Ú
get_singleB  s   zTestInvalidFD.get_singleZtest_c              
   O   sh   z|t  ¡ g|¢R i |¤Ž W n ty* } z|  |jtj¡ W Y d }~d S d }~ww |  d| ¡ d S )Nz5%r didn't raise an OSError with a bad file descriptor)r   Úmake_bad_fdrD   r=   rE   r0  r  )r0   ra   r‘   r	  rÊ   r   r   r   rÊ  J  s   €ÿ
ÿzTestInvalidFD.checkc                 C   s   | j tjdd d S )Nr›   r¥   )rÊ  r   r   rW   r   r   r   r¢   S  rå  zTestInvalidFD.test_fdopenÚisattyztest needs os.isatty()c                 C   s   |   t t ¡ ¡d¡ d S ©NF)r=   r   r  r   r   rW   r   r   r   Útest_isattyV  s   zTestInvalidFD.test_isattyri   ztest needs os.closerange()c              	   C   sn   t  ¡ }tdƒD ]}z	t || ¡ W n	 ty   Y qw  |dk r't d¡‚|  t 	||| d ¡d ¡ d S )Nrd   re   z5Unable to acquire a range of invalid file descriptorsrc   )
r   r   rÄ   r   rT  rD   r   rv  r=   ri   )r0   r~   rÉ   r   r   r   rm   Z  s   ÿÿ zTestInvalidFD.test_closerangeÚdup2ztest needs os.dup2()c                 C   ó   |   tjd¡ d S )Né   )rÊ  r   r  rW   r   r   r   Ú	test_dup2j  r[  zTestInvalidFD.test_dup2c              
   C   sÀ   t  tt j¡}|  t j|¡ |ddg}tj|ddD ]C\}}||kr]| j||d, |  	t
¡}t  ||¡ W d   ƒ n1 s@w   Y  |  |jjtj¡ W d   ƒ n1 sXw   Y  qd S )Nr!  i   €re   rG  )r~   Úfd2)r   r$   r¯   rœ   r„   r\   rI  rJ  ÚsubTestrj   rD   r  r=   r/  rE   r0  )r0   Zvalid_fdÚfdsr~   r  r2  r   r   r   Útest_dup2_negative_fdn  s    ýÿý€þz#TestInvalidFD.test_dup2_negative_fdÚfchmodztest needs os.fchmod()c                 C   r  rn   )rÊ  r   r  rW   r   r   r   Útest_fchmod~  r[  zTestInvalidFD.test_fchmodÚfchownztest needs os.fchown()c                 C   ó   |   tjdd¡ d S )Nr!  )rÊ  r   r  rW   r   r   r   Útest_fchown‚  ó   zTestInvalidFD.test_fchownÚ	fpathconfztest needs os.fpathconf()c                 C   ó    |   tjd¡ |   tjd¡ d S )NÚPC_NAME_MAX)rÊ  r   Úpathconfr  rW   r   r   r   Útest_fpathconf†  ó   zTestInvalidFD.test_fpathconfÚ	ftruncateztest needs os.ftruncate()c                 C   r  rn   )rÊ  r   Útruncater  rW   r   r   r   Útest_ftruncate‹  r  zTestInvalidFD.test_ftruncaterz   ztest needs os.lseek()c                 C   r  rn   )rÊ  r   rz   rW   r   r   r   Ú
test_lseek  r  zTestInvalidFD.test_lseekr{   ztest needs os.read()c                 C   r  r¾  )rÊ  r   r{   rW   r   r   r   r€   ”  r[  zTestInvalidFD.test_readÚreadvztest needs os.readv()c                 C   s   t dƒ}|  tj|g¡ d S )Nrd   )r‰   rÊ  r   r  )r0   r‚  r   r   r   Ú
test_readv˜  s   zTestInvalidFD.test_readvÚ	tcsetpgrpztest needs os.tcsetpgrp()c                 C   r  rn   )rÊ  r   r  rW   r   r   r   Útest_tcsetpgrpt  r[  zTestInvalidFD.test_tcsetpgrptr%   ztest needs os.write()c                 C   r  )Nó    )rÊ  r   r%   rW   r   r   r   rŒ   ¡  r[  zTestInvalidFD.test_writeÚwritevztest needs os.writev()c                 C   s   |   tjdg¡ d S )Nr»  )rÊ  r   r!  rW   r   r   r   Útest_writev¥  r  zTestInvalidFD.test_writevc                 C   ó   |   tj¡ |   tjd¡ d S ©NT)rÊ  r   Úget_inheritableÚset_inheritablerW   r   r   r   Útest_inheritable©  ó   zTestInvalidFD.test_inheritableÚget_blockingú-needs os.get_blocking() and os.set_blocking()c                 C   r#  r$  )rÊ  r   r)  Úset_blockingrW   r   r   r   Útest_blocking­  s   zTestInvalidFD.test_blockingN)rP   rQ   rR   Zsinglesrÿ  ra   ÚlocalsrÊ  r¢   r   r   r   r   r  rm   r  r  r  r  r  r  r  r€   r  r  rŒ   r"  r'  r,  r   r   r   r   rö  =  sP    	













ÿrö  c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú	LinkTestsc                 C   s    t j| _tj t jd ¡| _d S )Nrñ  )r   rU   Úfile1r   r>   r@   Úfile2rW   r   r   r   rX   µ  ó   zLinkTests.setUpc                 C   s,   | j | jfD ]}tj |¡rt |¡ qd S r+   )r/  r0  r   r>   ré  rV   )r0   Úfiler   r   r   rå   ¹  s
   
€þzLinkTests.tearDownc              
   C   sÒ   t |ƒ zt ||¡ W n ty% } z|  d| ¡ W Y d }~nd }~ww t|dƒ4}t|dƒ}|  tj | 	¡ | 	¡ ¡¡ W d   ƒ n1 sJw   Y  W d   ƒ d S W d   ƒ d S 1 sbw   Y  d S )Núos.link(): %srƒ   )
r(   r   r  r  rh   r$   r]   r>   Úsameopenfilery   )r0   r/  r0  rÊ   rD  Úf2r   r   r   Ú
_test_link¾  s   €ÿPÿzLinkTests._test_linkc                 C   s   |   | j| j¡ d S r+   )r6  r/  r0  rW   r   r   r   Ú	test_linkÈ  rå  zLinkTests.test_linkc                 C   s(   |   t| jt ¡ ƒt| jt ¡ ƒ¡ d S r+   )r6  rM   r/  r8   r  r0  rW   r   r   r   Útest_link_bytesË  s   ÿzLinkTests.test_link_bytesc                 C   sV   zt  d¡ W n ty   t d¡‚w |  jd7  _| jd | _|  | j| j¡ d S )Nõ   Ã±z#Unable to encode for this platform.rñ  )r   r[  ÚUnicodeErrorr   rv  r/  r0  r6  rW   r   r   r   Útest_unicode_nameÏ  s   
ÿzLinkTests.test_unicode_nameN)	rP   rQ   rR   rX   rå   r6  r7  r8  r;  r   r   r   r   r.  ´  s    
r.  zPosix specific testsc                   @   sä   e Zd ZdZdZe eedƒd¡dd„ ƒZ	e eedƒd¡dd	„ ƒZ
e eed
ƒd¡dd„ ƒZe eedƒd¡dd„ ƒZe eedƒd¡dd„ ƒZe eedƒd¡dd„ ƒZe eedƒd¡dd„ ƒZe eedƒd¡dd„ ƒZdS )ÚPosixUidGidTestsì        Úsetuidztest needs os.setuid()c                 C   sB   t  ¡ dkr|  tt jd¡ |  tt jd¡ |  tt j| j¡ d S ©Nr   z
not an int)r   Úgetuidrj   rD   r>  rp   ÚOverflowErrorÚUID_OVERFLOWrW   r   r   r   Útest_setuidß  ó   zPosixUidGidTests.test_setuidÚsetgidztest needs os.setgid()c                 C   óF   t  ¡ dkrts|  tt jd¡ |  tt jd¡ |  tt j| j¡ d S r?  )	r   r@  ÚHAVE_WHEEL_GROUPrj   rD   rE  rp   rA  ÚGID_OVERFLOWrW   r   r   r   Útest_setgidæ  ó   zPosixUidGidTests.test_setgidÚseteuidztest needs os.seteuid()c                 C   sB   t  ¡ dkr|  tt jd¡ |  tt jd¡ |  tt j| j¡ d S r?  )	r   r@  rj   rD   rK  rp   ÚsetegidrA  rB  rW   r   r   r   Útest_seteuidí  rD  zPosixUidGidTests.test_seteuidrL  ztest needs os.setegid()c                 C   rF  r?  )	r   r@  rG  rj   rD   rL  rp   rA  rH  rW   r   r   r   Útest_setegidô  rJ  zPosixUidGidTests.test_setegidÚsetreuidztest needs os.setreuid()c                 C   sn   t  ¡ dkr|  tt jdd¡ |  tt jdd¡ |  tt jdd¡ |  tt j| jd¡ |  tt jd| j¡ d S r?  )r   r@  rj   rD   rO  rp   rA  rB  rW   r   r   r   Útest_setreuidû  s   zPosixUidGidTests.test_setreuidc                 C   ó   t  tjddg¡ d S )Nr•   z,import os,sys;os.setreuid(-1,-1);sys.exit(0)©r   r=  r8   r–   rW   r   r   r   Útest_setreuid_neg1	  ó   
þz#PosixUidGidTests.test_setreuid_neg1Úsetregidztest needs os.setregid()c                 C   sr   t  ¡ dkrts|  tt jdd¡ |  tt jdd¡ |  tt jdd¡ |  tt j| jd¡ |  tt jd| j¡ d S r?  )	r   r@  rG  rj   rD   rU  rp   rA  rH  rW   r   r   r   Útest_setregid	  s   zPosixUidGidTests.test_setregidc                 C   rQ  )Nr•   z,import os,sys;os.setregid(-1,-1);sys.exit(0)rR  rW   r   r   r   Útest_setregid_neg1	  rT  z#PosixUidGidTests.test_setregid_neg1N)rP   rQ   rR   rB  rH  r   r   r   r   rC  rI  rM  rN  rP  rS  rV  rW  r   r   r   r   r<  Ù  s&    






r<  c                   @   sN   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Ze e	e
d	ƒd
¡dd„ ƒZdd„ ZdS )ÚPep383Testsc                    sö   t jrt j| _nt jrt j| _nt j| _t | j¡| _g ‰ ‡ fdd„}|t jƒ t jr0|t jƒ t jr8|t jƒ ˆ s?|  	d¡ t
ƒ | _t | j¡ z'ˆ D ]!}t  tj | j|¡¡ t |¡}|| jv rgtdƒ‚| j |¡ qLW d S    t | j¡ ‚ )Nc                    s2   zt  | ¡} W n
 ty   Y d S w ˆ  | ¡ d S r+   )r   r[  r  r'  )Úfn©Úbytesfnr   r   Úadd_filename)	  s   ÿz'Pep383Tests.setUp.<locals>.add_filenamez&couldn't create any non-ascii filenamezduplicate filename)r   ÚTESTFN_UNENCODABLErþ   ZTESTFN_NONASCIIrU   r   r[  ZbdirZTESTFN_UNICODErh   rK  Ú	unicodefnrA   Zcreate_empty_filer>   r@   rN   r»   ÚaddÚshutilrE  )r0   r\  rY  r   rZ  r   rX   	  s8   







ûzPep383Tests.setUpc                 C   s   t  | j¡ d S r+   )r`  rE  rþ   rW   r   r   r   rå   D	  r  zPep383Tests.tearDownc              	   C   st   | j }tt | j¡ƒ}|  ||¡ t ¡ }zt tj¡ |  tt ¡ ƒtt tj¡ƒ¡ W t |¡ d S t |¡ w r+   )	r^  rK  r   r  rþ   r=   r,   rB   r?   )r0   rI   ÚfoundZcurrent_directoryr   r   r   Útest_listdirG	  s   "zPep383Tests.test_listdirc                 C   s.   | j D ]}ttj | j|¡dƒ}| ¡  qd S ©Nrƒ   )r^  r$   r   r>   r@   rþ   r\   )r0   rY  ra   r   r   r   Ú	test_openS	  s   

þzPep383Tests.test_openr  r*  c                 C   s*   | j D ]}tj | j|¡}t |¡ qd S r+   )r^  r   r>   r@   rþ   r  )r0   rY  Úfullnamer   r   r   Útest_statvfsX	  s   
ýzPep383Tests.test_statvfsc                 C   s&   | j D ]}t tj | j|¡¡ qd S r+   )r^  r   r¨   r>   r@   rþ   )r0   rY  r   r   r   Ú	test_stata	  s   
ÿzPep383Tests.test_statN)rP   rQ   rR   rX   rå   rb  rd  r   r   r   r   rf  rg  r   r   r   r   rX  	  s    %ÿ
rX  c                   @   sF   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Ze d	¡d
d„ ƒZ	dd„ Z
dS )ÚWin32KillTestsc                 C   s€  dd l }ddl m} dd l}|jjj}|j|_|j| 	|j
¡|j| 	|j¡| 	|j¡| 	|j¡f|_d}tjtjdd |¡gtjtjtjd}|  |jj¡ |  |jj¡ |  |jj¡ d\}}	||	k rª| ¡ d u rª| t|ƒ¡}
|| |j ¡ ¡|
| |
¡d d d ƒ}|  |dd¡ |
jr—|   ||
j !¡ ¡ nt" #d	¡ |d
7 }||	k rª| ¡ d u sj|  $d¡ t% &|j'|¡ |   | (¡ |¡ d S )Nr   ©ÚwintypesÚrunningr•   z<import sys;sys.stdout.write('{}');sys.stdout.flush();input())rË  ÚstderrÚstdin©r   r    zPeekNamedPipe failedçš™™™™™¹?rc   z1Did not receive communication from the subprocess))r~  rj  Úmsvcrtr  r€  ÚPeekNamedPipeÚBOOLÚrestypeÚHANDLEÚPOINTERZc_charÚDWORDÚargtypesr   ÚPopenr8   r–   r±  rÐ  r„   rË  r\   rl  rm  ÚpollZcreate_string_bufferr:   Zget_osfhandlery   Zsizeofr>  r'  r=   rÈ  rr  Úsleepr  r   ÚkillÚpidÚwait)r0   Úsigr~  rj  rp  rq  rq  rÓ  r²  Úmaxr‚  Zrsltr   r   r   Ú_killg	  sP   




û
üùÿ
ô
zWin32KillTests._killc                 C   rá  r+   )r€  ÚsignalÚSIGTERMrW   r   r   r   Útest_kill_sigterm	  rv  z Win32KillTests.test_kill_sigtermc                 C   s   |   d¡ d S )Nr    )r€  rW   r   r   r   Útest_kill_int¡	  s   zWin32KillTests.test_kill_intc                 C   sþ   dt  ¡  }t dd|¡}d|d< tjtjtj 	tj 
t¡d¡|gtjd}d\}}||k rN| ¡ d u rN|d dkr;n t d¡ |d7 }||k rN| ¡ d u s4t |jtj¡ |  d	¡ t |j|¡ t d
¡ | ¡ s}t |jtj¡ |  d |¡¡ d S d S )Nz
test_os_%sr!  rc   r   zwin_console_handler.pyr;  rn  ro  z'Subprocess didn't finish initializationg      à?zsubprocess did not stop on {})ÚuuidZuuid1Úmmapr   rx  r8   r–   r   r>   r@   rH   r¯   ZCREATE_NEW_PROCESS_GROUPry  rr  rz  r{  r|  r  ÚSIGINTr  r±  )r0   Úeventr   ZtagnameÚmrÓ  r²  r  r   r   r   Ú_kill_with_event¥	  s4   ÿþý
ü

ýzWin32KillTests._kill_with_eventz.subprocesses aren't inheriting Ctrl+C propertyc                 C   sd   ddl m} dd l }| |j¡ƒ }|jjj}| |j¡|jf|_|j|_	||dƒ |  
tjd¡ d S )Nr   ri  ÚCTRL_C_EVENT)r~  rj  ru  Zc_intr  r€  ÚSetConsoleCtrlHandlerrr  rw  rs  rŠ  r  r‹  )r0   rj  r~  ZNULLrŒ  r   r   r   Útest_CTRL_C_EVENTÂ	  s   

ÿ
z Win32KillTests.test_CTRL_C_EVENTc                 C   r  )NÚCTRL_BREAK_EVENT)rŠ  r  rŽ  rW   r   r   r   Útest_CTRL_BREAK_EVENTÕ	  ó   z$Win32KillTests.test_CTRL_BREAK_EVENTN)rP   rQ   rR   r€  rƒ  r„  rŠ  r   Úskipr  r  r   r   r   r   rh  e	  s    6
rh  c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚWin32ListdirTestszTest listdir on Windows.c              	   C   s¨   g | _ tdƒD ]E}d| }tj tj|¡}d| }tj tj|¡}t |¡ t|ddd}| 	d| ¡ W d   ƒ n1 s?w   Y  | j  
||g¡ q| j  ¡  d S )Nre   zSUB%dzFILE%dr1  r›   r¥   z'I'm %s and proud of it. Blame test_os.
)Úcreated_pathsrÄ   r   r>   r@   r   rU   r  r$   r%   Úextendr#  )r0   rÉ   Zdir_nameZdir_pathÚ	file_nameZ	file_pathra   r   r   r   rX   Ý	  s   
ÿzWin32ListdirTests.setUpc                 C   rc  r+   )r`  rE  r   rU   rW   r   r   r   rå   ê	  r  zWin32ListdirTests.tearDownc                 C   sH   |   tt tj¡ƒ| j¡ |   tt t tj¡¡ƒdd„ | jD ƒ¡ dS )z-Test when the path is not an "extended" path.c                 S   ó   g | ]}t  |¡‘qS r   ©r   r[  ©r   r>   r   r   r   r   ÷	  r3  zCWin32ListdirTests.test_listdir_no_extended_path.<locals>.<listcomp>N)r=   Úsortedr   r  r   rU   r“  r[  rW   r   r   r   Útest_listdir_no_extended_pathí	  s   þþz/Win32ListdirTests.test_listdir_no_extended_pathc                 C   sh   dt j tj¡ }|  tt  |¡ƒ| j¡ dt  	t j tj¡¡ }|  tt  |¡ƒdd„ | jD ƒ¡ dS )z&Test when the path starts with '\\?\'.ú\\?\ó   \\?\c                 S   r–  r   r—  r˜  r   r   r   r   
  r3  z@Win32ListdirTests.test_listdir_extended_path.<locals>.<listcomp>N)
r   r>   r}  r   rU   r=   r™  r  r“  r[  r}  r   r   r   Útest_listdir_extended_pathù	  s   þþz,Win32ListdirTests.test_listdir_extended_pathN)rP   rQ   rR   r  rX   rå   rš  r  r   r   r   r   r’  Ù	  s    r’  Úreadlinkzneeds os.readlink()c                   @   sz   e Zd ZdZej e¡Ze 	e¡Z
e 	e¡Zdd„ Zdd„ Zdd„ Zdd	„ Zejd
d„ ƒZejdd„ ƒZejdd„ ƒZdS )ÚReadlinkTestsZreadlinktestc                 C   sb   t j |¡}t j |¡}tjdkr)dd„ }||ƒr|dd … }||ƒr)|dd … }|  ||¡ d S )Nr”   c                 S   s   |   t| tƒr
d¡S d¡S )Nrœ  r›  )Ú
startswithr$  rM   )r  r   r   r   rÜ   
  s
    ÿÿz/ReadlinkTests.assertPathEqual.<locals>.<lambda>rw   )r   r>   Únormcaser8   r9   r=   )r0   ÚleftÚrightZ
has_prefixr   r   r   ÚassertPathEqual
  s   
zReadlinkTests.assertPathEqualc                 C   sT   |   tj | j¡¡ |   tj | j¡¡ |  tj | j¡¡ |  tj | j¡¡ d S r+   )	r]   r   r>   ré  Úfilelink_targetÚfilelinkb_targetrœ  ÚfilelinkÚ	filelinkbrW   r   r   r   rX   
  s   zReadlinkTests.setUpc                 C   s0   t | jƒ}|  ttj| j¡ |  ttj|¡ d S r+   )r   r¥  rj   rD   r   rž  )r0   r¥  r   r   r   Útest_not_symlink$
  s   
zReadlinkTests.test_not_symlinkc                 C   s(   |   ttjd¡ |   ttjtdƒ¡ d S )Nzmissing-link)rj   rC   r   rž  r   rW   r   r   r   Útest_missing_link)
  s   
ÿzReadlinkTests.test_missing_linkc                 C   sB   t  | j| j¡ |  tj| j¡ t| jƒ}|  t  	|¡| j¡ d S r+   )
r   r±   r¥  r§  r„   r   rV   r   r¤  rž  )r0   r§  r   r   r   Útest_pathlike.
  s   
zReadlinkTests.test_pathlikec                 C   sN   t  | j| j¡ |  tj| j¡ t  t| jƒ¡}|  	|| j¡ |  
|t¡ d S r+   )r   r±   r¦  r¨  r„   r   rV   rž  r   r¤  r-   rM   r}  r   r   r   Útest_pathlike_bytes5
  s
   z!ReadlinkTests.test_pathlike_bytesc                 C   sJ   t  | j| j¡ |  tj| j¡ t  | j¡}|  || j¡ |  	|t
¡ d S r+   )r   r±   r¦  r¨  r„   r   rV   rž  r¤  r-   rM   r}  r   r   r   Ú
test_bytes=
  s
   zReadlinkTests.test_bytesN)rP   rQ   rR   r§  r   r>   r}  r¯   r¥  r[  r¨  r¦  r¤  rX   r©  rª  r   Úskip_unless_symlinkr«  r¬  r­  r   r   r   r   rŸ  	
  s    



rŸ  c                   @   s¸   e Zd ZdZej e¡ZdZ	ej 
e¡ZdZdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze ej d¡oKej d¡d¡dd„ ƒZdd„ Zdd „ Zd!S )"ÚWin32SymlinkTestsZfilelinktestZdirlinktestzmissing linkc                 C   ó   d S r+   r   rW   r   r   r   rX   O
  rï   zWin32SymlinkTests.setUpc                 C   sV   t j | j¡rt  | j¡ t j | j¡rt  | j¡ t j | j¡r)t  | j¡ d S d S r+   )	r   r>   ré  r§  r(  Údirlinkr8  rT   Úmissing_linkrW   r   r   r   rå   V
  s   ÿzWin32SymlinkTests.tearDownc                 C   ó`   t  | j| j¡ |  t j | j¡¡ |  t j | j¡¡ |  t j | j¡¡ |  	| j| j¡ d S r+   )
r   r±   Údirlink_targetr±  r]   r>   ré  ri  ÚislinkÚ
check_statrW   r   r   r   Útest_directory_link^
  ó
   z%Win32SymlinkTests.test_directory_linkc                 C   r³  r+   )
r   r±   r¥  r§  r]   r>   ré  Úisfilerµ  r¶  rW   r   r   r   Útest_file_linke
  r¸  z Win32SymlinkTests.test_file_linkc                 C   s6   | j }tj |¡rt |¡ d}d}t |||¡ dS )z2Create a "directory" link to a non-existent targetz"c:\\target does not exist.29r3c740TN)r²  r   r>   rT   r(  r±   )r0   Zlinknamer²   Ztarget_is_dirr   r   r   Ú_create_missing_dir_linkl
  s   
z*Win32SymlinkTests._create_missing_dir_linkc                 C   ó   |   ¡  t | j¡ d S r+   )r»  r   r(  r²  rW   r   r   r   Ú,test_remove_directory_link_to_missing_targetv
  s   z>Win32SymlinkTests.test_remove_directory_link_to_missing_targetc                 C   s    |   ¡  |  tj | j¡¡ d S r+   )r»  rœ  r   r>   ri  r²  rW   r   r   r   Ú.test_isdir_on_directory_link_to_missing_target}
  r1  z@Win32SymlinkTests.test_isdir_on_directory_link_to_missing_targetc                 C   r¼  r+   )r»  r   r8  r²  rW   r   r   r   Ú.test_rmdir_on_directory_link_to_missing_target
  r3   z@Win32SymlinkTests.test_rmdir_on_directory_link_to_missing_targetc                 C   sn   |   t |¡t |¡¡ |  t |¡t |¡¡ t |¡}|   t |¡t |¡¡ |  t |¡t |¡¡ d S r+   )r=   r   r¨   r>  ru  r[  )r0   r  r²   Z
bytes_linkr   r   r   r¶  …
  s
   
zWin32SymlinkTests.check_statc              	   C   sH  t j tj¡}t j |d¡}t j |d¡}|  tj|¡ t  |¡ t  |¡ t  |¡ t j t j |d¡¡}t	|ƒ t  
¡ }z_t  |¡ t j |d¡}t  t j |¡d¡ |  dt  t  
¡ ¡¡ |  t  |¡t  d¡¡ t  |¡ |  t  |¡t  t j |¡¡¡ t  |¡ |  t  |¡t  t j |¡¡¡ W t  |¡ d S t  |¡ w )NÚlevel2Úlevel3r/  r  )r   r>   r}  r   rU   r@   r„   rE  rA   r(   r,   rB   r±   ÚrelpathrÃ   r  r=   r¨   )r0   Zlevel1rÀ  rÁ  r/  Zorig_dirr  r   r   r   Ú
test_12084
  s2   




ÿ
ÿzWin32SymlinkTests.test_12084úC:\Users\All UsersúC:\ProgramDatazTest directories not foundc                 C   s"   t  d¡}|  t j |d¡¡ d S )NrÄ  rÅ  )r   rž  r]   r>   Úsamefile)r0   r²   r   r   r   Ú
test_29248°
  s   
zWin32SymlinkTests.test_29248c              	   C   sè   d}t jj|gd Ž }d| |f||f|d d… |d d… fg}|D ]O\}}zt  ||¡ W n	 ty7   Y nw zt  |¡ W n	 tyH   Y nw zt  t  |¡t  |¡¡ W n	 ty`   Y q"w zt  |¡ W q" tyq   Y q"w d S )NZXXXXXXXXXXXXXXXXXXXXXXXXXXXrd   r{  é´   )r   r>   r@   r±   rC   r(  rD   r[  )r0   Zsegmentr>   Z
test_casesr³   Údestr   r   r   Útest_buffer_overflow¿
  s8   
úÿÿÿÿîz&Win32SymlinkTests.test_buffer_overflowc                    s²   t j d¡‰ t j ˆ ¡s|  d¡ ‡ fdd„t t  ˆ ¡d¡D ƒ}|D ].}tj	r0t
ƒ  t
d|ƒ t  |¡}|  |t  |¡¡ |  t |j¡¡ |  |jtj¡  d S |  d¡ d S )Nz$%LOCALAPPDATA%\Microsoft\WindowsAppsz%test requires a WindowsApps directoryc                    s   g | ]	}t j ˆ |¡‘qS r   )r   r>   r@   ©r   r7   ©r  r   r   r   ç
  s    ÿz6Win32SymlinkTests.test_appexeclink.<locals>.<listcomp>z*.exezTesting withz$test requires an app execution alias)r   r>   Ú
expandvarsri  rh   ÚfnmatchÚfilterr  r   rF   rG   ru  r=   r¨   rœ  ÚS_ISLNKr  Úst_reparse_tagZIO_REPARSE_TAG_APPEXECLINK)r0   ÚaliasesÚaliasrI  r   rÌ  r   Útest_appexeclinkâ
  s    

ÿ

z"Win32SymlinkTests.test_appexeclinkN)rP   rQ   rR   r§  r   r>   r}  r¯   r¥  r±  rH   r´  r²  rX   rå   r·  rº  r»  r½  r¾  r¿  r¶  rÃ  r   r   rT   ré  rÇ  rÊ  rÔ  r   r   r   r   r¯  F
  s.    
#
þ
#r¯  c                   @   sD   e Zd ZdZej ej e¡¡Z	dd„ Z
dd„ Zdd„ Zdd	„ Zd
S )ÚWin32JunctionTestsZjunctiontestc                 C   r°  r+   r   rW   r   r   r   rX   ü
  rï   zWin32JunctionTests.setUpc                 C   s"   t j | j¡rt  | j¡ d S d S r+   )r   r>   rT   ÚjunctionrV   rW   r   r   r   rå      rY   zWin32JunctionTests.tearDownc                 C   sÆ   t  | j| j¡ |  tj | j¡¡ |  tj | j¡¡ |  tj 	| j¡¡ |  
t | j¡t | j¡¡ |  t | j¡t | j¡¡ |  tj | j¡¡ |  tj d| j ¡tj t | j¡¡¡ d S )Nr›  )Ú_winapiÚCreateJunctionÚjunction_targetrÖ  r]   r   r>   rT   ré  ri  r>  r¨   ru  r=   rœ  rµ  r¡  rž  rW   r   r   r   Útest_create_junction  s   ÿz'Win32JunctionTests.test_create_junctionc                 C   s\   t  | j| j¡ |  tj | j¡¡ |  tj | j¡¡ t 	| j¡ |  
tj | j¡¡ d S r+   )r×  rØ  rÙ  rÖ  r]   r   r>   ré  rT   rV   rœ  rW   r   r   r   Útest_unlink_removes_junction  s
   z/Win32JunctionTests.test_unlink_removes_junctionN)rP   rQ   rR   rÖ  r   r>   rH   r}  r¯   rÙ  rX   rå   rÚ  rÛ  r   r   r   r   rÕ  ÷
  s    rÕ  c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚWin32NtTestsc              
   C   s*  t  d¡}t  d¡}dd l}|jddd}|jj|j_|jj|j	_|jj|jj
f|j	_| ¡ }|j ¡ }| 	|| |¡¡}|  d|¡ |j}dd	d
tg}tdƒD ](}	|D ]#}
z| |
¡ W n	 tyf   Y nw zt |
¡ W qT tyw   Y qTw qP| 	|| |¡¡}|  d|¡ |j| }|  d|¡ d S )Nrh  r~  r   zKernel32.dllT)Zuse_last_errorrc   z\\?\C:z\\?\NULz	\\?\CONINrd   )r   Úimport_moduleZctypes.wintypesZWinDLLrj  rt  ZGetCurrentProcessrs  rr  ZGetProcessHandleCountZLPDWORDrw  rv  Zbyrefr=   r'  r¯   rÄ   Z_getfinalpathnameÚ	Exceptionr   r¨   )r0   rh  r~  ZkernelZhprocZhandle_countrƒ  Zbefore_countÚ	filenamesÚ_r   Zhandle_deltar   r   r   Útest_getfinalpathname_handles  sH   

ÿ
üþÿø
z*Win32NtTests.test_getfinalpathname_handlesc                 C   sò   t j}|  t j|¡ t ¡ d }t d¡}t t	j
d||t|ƒg¡M}t ¡ |k rIzt |¡ W n tyB } zW Y d }~nd }~ww t ¡ |k s)z| d¡ W n tjy^   | ¡  Y n	w W d   ƒ d S W d   ƒ d S 1 srw   Y  d S )NrÀ   aÞ              import os
            import sys
            import time

            filename = sys.argv[1]
            deadline = float(sys.argv[2])

            while time.time() < deadline:
                try:
                    with open(filename, "w") as f:
                        pass
                except OSError:
                    pass
                try:
                    os.remove(filename)
                except OSError:
                    pass
            r•   rc   )r   rU   r„   rV   rr  ÚtextwrapÚdedentr   rx  r8   r–   r.   r   r¨   rC   r}  ÚTimeoutExpiredÚ	terminate)r0   r&   ÚdeadlineZcommandrÓ  rÊ   r   r   r   Útest_stat_unlink_raceK  s*   
€ ýÿÿù	"÷z"Win32NtTests.test_stat_unlink_raceN)rP   rQ   rR   râ  rè  r   r   r   r   rÝ    s    0rÝ  c                   @   r)   )ÚNonLocalSymlinkTestsc                 C   s   t  d¡ dS )zM
        Create this structure:

        base
         \___ some_dir
        zbase/some_dirN)r   r  rW   r   r   r   rX   x  s   zNonLocalSymlinkTests.setUpc                 C   s   t  d¡ d S )Nr?  )r`  rE  rW   r   r   r   rå     s   zNonLocalSymlinkTests.tearDownc                 C   s   t j dd¡}t  d|¡ dS )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.
        r?  Z	some_linkZsome_dirN)r   r>   r@   r±   )r0   r³   r   r   r   Útest_directory_link_nonlocal„  s   z1NonLocalSymlinkTests.test_directory_link_nonlocalN)rP   rQ   rR   rX   rå   rê  r   r   r   r   ré  u  s    	ré  c                   @   rÜ  )ÚFSEncodingTestsc                 C   s(   |   t d¡d¡ |   t d¡d¡ d S )Ns   abcÿu   abcÅ)r=   r   r[  rN   rW   r   r   r   Útest_nop–  s   zFSEncodingTests.test_nopc              	   C   sB   dD ]}zt  |¡}W n	 ty   Y qw |  t  |¡|¡ qd S )N)u	   unicodeÅu   latinÃ©Úascii)r   r[  r  r=   rN   )r0   rY  r[  r   r   r   Útest_identityš  s   ÿûzFSEncodingTests.test_identityN)rP   rQ   rR   rì  rî  r   r   r   r   rë  •  s    rë  c                   @   sV   e Zd Zdd„ Ze e d¡o"eƒ  o"e	j
 d¡p"eedƒo"eedƒd¡dd	„ ƒZd
S )ÚDeviceEncodingTestsc                 C   s   |   t d¡¡ d S )Ni@â )rˆ  r   Údevice_encodingrW   r   r   r   Útest_bad_fd§  r  zDeviceEncodingTests.test_bad_fdr   ÚwinÚnl_langinfoÚCODESETz>test requires a tty and either Windows or nl_langinfo(CODESET)c                 C   s(   t  d¡}|  |¡ |  t |¡¡ d S rn   )r   rð  ZassertIsNotNoner]   ÚcodecsÚlookup)r0   rš   r   r   r   Útest_device_encoding«  s   

z(DeviceEncodingTests.test_device_encodingN)rP   rQ   rR   rñ  r   r   r   r  r   r8   r9   r   r   Úlocaler÷  r   r   r   r   rï  ¥  s    "þrï  c                   @   sŽ   e Zd Ze eedƒd¡dd„ ƒZddd„Zdd	„ Z	d
d„ Z
e ejdkd¡dd„ ƒZe ejdkd¡dd„ ƒZe eedƒd¡dd„ ƒZdS )ÚPidTestsÚgetppidztest needs os.getppidc                 C   s<   t jtjddgt jd}| ¡ \}}|  t|ƒt 	¡ ¡ d S )Nr•   zimport os; print(os.getppid()))rË  )
r   rx  r8   r–   rÐ  Úcommunicater=   rë   r   Úgetpid)r0   r  rË  rá  r   r   r   Útest_getppidµ  s   
ÿþzPidTests.test_getppidNc                 C   sˆ   t jdkrdt j› ddd|› dg}nt jd|g}t tjt j|¡}|d ur+||ƒ t |d¡\}}|  t |¡|¡ |  ||¡ d S )Nr”   ú"r•   r   )	r8   r9   r–   r   ÚspawnvÚP_NOWAITÚwaitpidr=   Úwaitstatus_to_exitcode)r0   r˜   ÚexitcodeÚcallbackr‘   r|  Zpid2Ústatusr   r   r   Úcheck_waitpid¾  s   
zPidTests.check_waitpidc                 C   s   | j ddd d S )Nrá  r   )r˜   r  ©r  rW   r   r   r   Útest_waitpidÐ  r  zPidTests.test_waitpidc                 C   sX   d}d|› d}| j ||d |  t¡ t d¡ W d   ƒ d S 1 s%w   Y  d S )Né   zimport sys; sys.exit(ú)©r  g        )r  rj   rp   r   r  )r0   r  r˜   r   r   r   Útest_waitstatus_to_exitcodeÓ  s   "ÿz$PidTests.test_waitstatus_to_exitcoder”   úwin32-specific testc                 C   s"   d}d|› d}| j ||d d S )Nl   :   z$import _winapi; _winapi.ExitProcess(r
  r  r  )r0   ZSTATUS_CONTROL_C_EXITr˜   r   r   r   Útest_waitpid_windowsÛ  s   zPidTests.test_waitpid_windowsc                 C   s¢   d}ddd|fD ]}|   t |d> ¡|¡ q|  t¡ t |d d> ¡ W d   ƒ n1 s/w   Y  |  t¡ t d¡ W d   ƒ d S 1 sJw   Y  d S )Nr5  r   rc   rÀ   rö   r!  )r=   r   r  rj   r»   rA  )r0   Zmax_exitcoder  r   r   r   Ú#test_waitstatus_to_exitcode_windowsã  s   ÿÿ"ÿz,PidTests.test_waitstatus_to_exitcode_windowsÚSIGKILLzneed signal.SIGKILLc                    s6   dt j› d}tj‰ ‡ fdd„}| j|ˆ  |d d S )Nzimport time; time.sleep(r
  c                    s   t  | ˆ ¡ d S r+   )r   r{  )r|  ©Úsignumr   r   Úkill_processö  r  z?PidTests.test_waitstatus_to_exitcode_kill.<locals>.kill_process)r  r  )r   ZLONG_TIMEOUTr  r  r  )r0   r˜   r  r   r  r   Ú test_waitstatus_to_exitcode_killñ  s   z)PidTests.test_waitstatus_to_exitcode_killr+   )rP   rQ   rR   r   r   r   r   rý  r  r  r  r8   r9   r  r  r  r  r   r   r   r   rù  ´  s    



rù  c                   @   s$  e Zd Zdddœdd„Zedƒdd„ ƒZedƒd	d
„ ƒZedƒdd„ ƒZedƒdd„ ƒZedƒdd„ ƒZ	edƒdd„ ƒZ
edƒdd„ ƒZedƒdd„ ƒZedƒdd„ ƒZedƒdd „ ƒZedƒd!d"„ ƒZedƒd#d$„ ƒZedƒd%d&„ ƒZedƒd'd(„ ƒZd)d*„ Zedƒd+d,„ ƒZedƒd-d.„ ƒZd/S )0Ú
SpawnTestsF©Úwith_envÚ	use_bytesc                C   sÐ   d| _ tj}|  tj|¡ |sd| j  }nttjƒ| _t	t
 ¡ ƒ| _| j| j| j< d| j| j f }t|ddd}| |¡ W d   ƒ n1 sHw   Y  tj|g}|rfdd„ |D ƒ}d	d
„ | j ¡ D ƒ| _|S )Né   zimport sys; sys.exit(%s)z4import sys, os; magic = os.environ[%r]; sys.exit(%s)r1  r›   r¥   c                 S   r–  r   r—  rË  r   r   r   r     r3  z*SpawnTests.create_args.<locals>.<listcomp>c                 S   s"   i | ]\}}t  |¡t  |¡“qS r   r—  )r   ÚkÚvr   r   r   Ú
<dictcomp>  s    ÿz*SpawnTests.create_args.<locals>.<dictcomp>)r  r   rU   r„   rV   r—  r   r<  r´  r.   r…  Zuuid4rŸ  r$   r%   r8   r–   r  )r0   r  r  r&   r˜   r'   r‘   r   r   r   Úcreate_argsý  s*   
ÿÿ
ÿzSpawnTests.create_argsÚspawnlc                 C   ó4   |   ¡ }tjtj|d g|¢R Ž }|  || j¡ d S rn   )r  r   r  ÚP_WAITr=   r  ©r0   r‘   r  r   r   r   Útest_spawnl  ó   zSpawnTests.test_spawnlÚspawnlec                 C   ó>   | j dd}tjtj|d g|¢| j‘R Ž }|  || j¡ d S ©NT)r  r   )r  r   r$  r   r´  r=   r  r!  r   r   r   Útest_spawnle  ó    zSpawnTests.test_spawnleÚspawnlpc                 C   r  rn   )r  r   r)  r   r=   r  r!  r   r   r   Útest_spawnlp%  r#  zSpawnTests.test_spawnlpÚspawnlpec                 C   r%  r&  )r  r   r+  r   r´  r=   r  r!  r   r   r   Útest_spawnlpe+  r(  zSpawnTests.test_spawnlperÿ  c                 C   sT   |   ¡ }t tj|d |¡}|  || j¡ t tjt|d ƒ|¡}|  || j¡ d S rn   )r  r   rÿ  r   r=   r  r   r!  r   r   r   Útest_spawnv1  s
   zSpawnTests.test_spawnvÚspawnvec                 C   ó6   | j dd}t tj|d || j¡}|  || j¡ d S r&  ©r  r   r.  r   r´  r=   r  r!  r   r   r   Útest_spawnve;  ó   zSpawnTests.test_spawnveÚspawnvpc                 C   s.   |   ¡ }t tj|d |¡}|  || j¡ d S rn   )r  r   r3  r   r=   r  r!  r   r   r   Útest_spawnvpA  s   zSpawnTests.test_spawnvpÚspawnvpec                 C   r/  r&  )r  r   r5  r   r´  r=   r  r!  r   r   r   Útest_spawnvpeG  r2  zSpawnTests.test_spawnvpec                 C   s0   |   ¡ }t tj|d |¡}tj|| jd d S )Nr   r  )r  r   rÿ  r   r   Zwait_processr  )r0   r‘   r|  r   r   r   Útest_nowaitM  s   zSpawnTests.test_nowaitc                 C   s8   | j ddd}t tj|d || j¡}|  || j¡ d S )NTr  r   r0  r!  r   r   r   Útest_spawnve_bytesS  s   zSpawnTests.test_spawnve_bytesc                 C   s>   |   ¡ }|  ttjtj|d ¡ |  ttjtj|d d¡ d S ©Nr   r|  )r  rj   r»   r   r  r   ©r0   r‘   r   r   r   Útest_spawnl_noargsZ  s   zSpawnTests.test_spawnl_noargsc                 C   sB   |   ¡ }|  ttjtj|d i ¡ |  ttjtj|d di ¡ d S r9  )r  rj   r»   r   r$  r   r:  r   r   r   Útest_spawnle_noargs`  s    zSpawnTests.test_spawnle_noargsc                 C   sv   |   ¡ }|  ttjtj|d d¡ |  ttjtj|d g ¡ |  ttjtj|d d¡ |  ttjtj|d dg¡ d S ©Nr   r   r¸  r|  )r  rj   r»   r   rÿ  r   r:  r   r   r   Útest_spawnv_noargsf  s
    zSpawnTests.test_spawnv_noargsc                 C   s~   |   ¡ }|  ttjtj|d di ¡ |  ttjtj|d g i ¡ |  ttjtj|d di ¡ |  ttjtj|d dgi ¡ d S r=  )r  rj   r»   r   r.  r   r:  r   r   r   Útest_spawnve_noargsn  s
   "zSpawnTests.test_spawnve_noargsc                 C   sv  t jddg}tj ¡ }d|d< z|tj|d ||ƒ}W n	 ty$   Y nw |  |d¡ tj ¡ }d|d< z|tj|d ||ƒ}W n	 tyI   Y nw |  |d¡ tj ¡ }d	|d
< z|tj|d ||ƒ}W n	 tyn   Y nw |  |d¡ tj	}|  
tj|¡ t|ddd}| d¡ W d   ƒ n1 s–w   Y  t j|g}tj ¡ }d|d< |tj|d ||ƒ}|  |d¡ d S )Nr•   rá  râ  rã  r   é   rä  rå  ræ  rç  r1  r›   r¥   zPimport sys, os
if os.getenv("FRUIT") != "orange=lemon":
    raise AssertionErrorzorange=lemon)r8   r–   r   r<  rþ  r   r»   r=   r   rU   r„   rV   r$   r%   )r0   Úspawnr‘   rè  r  r&   r'   r   r   r   Ú_test_invalid_envv  sF   
ÿ
ÿ
ÿÿ

zSpawnTests._test_invalid_envc                 C   rá  r+   )rB  r   r.  rW   r   r   r   Útest_spawnve_invalid_env¤  rv  z#SpawnTests.test_spawnve_invalid_envc                 C   rá  r+   )rB  r   r5  rW   r   r   r   Útest_spawnvpe_invalid_env¨  rv  z$SpawnTests.test_spawnvpe_invalid_envN)rP   rQ   rR   r  r    r"  r'  r*  r,  r-  r1  r4  r6  r7  r8  r;  r<  r>  r?  rB  rC  rD  r   r   r   r   r  ü  sF    




	








.
r  z>Skip due to platform/environment differences on *NIX buildbotsÚgetloginztest needs os.getloginc                   @   r£  )Ú
LoginTestsc                 C   s   t  ¡ }|  t|ƒd¡ d S rn   )r   rE  r>  r:   )r0   Z	user_namer   r   r   Útest_getlogin²  ó   zLoginTests.test_getloginN)rP   rQ   rR   rG  r   r   r   r   rF  ¯  ó    rF  ÚgetpriorityÚsetpriorityz'needs os.getpriority and os.setpriorityc                   @   rX  )ÚProgramPriorityTestsz0Tests for os.getpriority() and os.setpriority().c                 C   s
  t  t jt  ¡ ¡}t  t jt  ¡ |d ¡ zIt  t jt  ¡ ¡}|dkr.|dkr.t d| ¡‚|  ||d ¡ W zt  t jt  ¡ |¡ W d S  ty^ } z|j	t	j
krS‚ W Y d }~d S d }~ww zt  t jt  ¡ |¡ W w  ty„ } z|j	t	j
krz‚ W Y d }~w d }~ww )Nrc   é   z?unable to reliably test setpriority at current nice level of %s)r   rJ  ÚPRIO_PROCESSrü  rK  r   rv  r=   rD   rE   ZEACCES)r0   r?  Znew_priorÇ  r   r   r   Útest_set_get_priority¼  s2   ÿÿ€ÿþÿ€ÿz*ProgramPriorityTests.test_set_get_priorityN)rP   rQ   rR   r  rO  r   r   r   r   rL  ·  s    rL  c                   @   sv   e Zd ZG dd„ dejƒZdd„ Zedd„ ƒZdd„ Z	d	d
„ Z
dd„ Zdd„ Zdd„ Zdd„ ZeZdd„ Zdd„ ZdS )ÚSendfileTestServerc                   @   r˜  )zSendfileTestServer.Handlerc                 C   s.   t j | |¡ g | _d| _d| _|  d¡ d S )NTFs   220 ready
)ÚasynchatÚ
async_chatÚ__init__Ú	in_bufferÚ
accumulateÚclosedÚpush)r0   Úconnr   r   r   rS  Ó  s
   z#SendfileTestServer.Handler.__init__c                 C   s$   |   d¡}| jr| j |¡ d S d S )Né   )ÚrecvrU  rT  r'  r¸  r   r   r   Úhandle_readÚ  s   
ÿz&SendfileTestServer.Handler.handle_readc                 C   s   d  | j¡S )Nr¦  )r@   rT  rW   r   r   r   Úget_dataß  r¢  z#SendfileTestServer.Handler.get_datac                 C   s   |   ¡  d| _d S r$  )r\   rV  rW   r   r   r   Úhandle_closeâ  s   
z'SendfileTestServer.Handler.handle_closec                  C   ó   ‚ r+   r   rW   r   r   r   Úhandle_erroræ  ó   z'SendfileTestServer.Handler.handle_errorN)rP   rQ   rR   rS  r[  r\  r]  r_  r   r   r   r   ÚHandlerÑ  s    ra  c                 C   sp   t j | ¡ tj | ¡ |  tjtj¡ |  	|¡ |  
d¡ | j ¡ d d… \| _| _d | _d| _t  ¡ | _d S )NrÀ   re   F)Ú	threadingÚThreadrS  ÚasyncoreÚ
dispatcherZcreate_socketÚsocketÚAF_INETÚSOCK_STREAMÚbindÚlistenÚgetsocknameÚhostÚportÚhandler_instanceÚ_activeÚLockÚ_active_lock)r0   Úaddressr   r   r   rS  é  s   

zSendfileTestServer.__init__c                 C   s   | j S r+   )ro  rW   r   r   r   rk  ö  s   zSendfileTestServer.runningc                 C   s$   t  ¡ | _t j | ¡ | j ¡  d S r+   )rb  ÚEventÚ_SendfileTestServer__flagrc  Ústartr}  rW   r   r   r   ru  ú  s   
zSendfileTestServer.startc                 C   s   d| _ |  ¡  d S r  )ro  r@   rW   r   r   r   Ústop   s   zSendfileTestServer.stopc                 C   s2   t | jddƒst d¡ t | jddƒr|  ¡  d S )NrV  Fçü©ñÒMbP?)r  rn  rr  rz  rv  rW   r   r   r   r}    s   
ÿzSendfileTestServer.waitc                 C   sV   d| _ | j ¡  | j r%tjr%| j ¡  tjddd | j ¡  | j r%tjst 	¡  d S )NTrw  rc   )Útimeoutr²  )
ro  rt  rK  rd  Z
socket_maprq  ÚacquireZloopÚreleaseZ	close_allrW   r   r   r   rÏ    s   


ýzSendfileTestServer.runc                 C   s   |   ¡ \}}|  |¡| _d S r+   )Úacceptra  rn  )r0   rX  Úaddrr   r   r   Úhandle_accept  s   z SendfileTestServer.handle_acceptc                 C   s   |   ¡  d S r+   )r\   rW   r   r   r   Úhandle_connect  r¢  z!SendfileTestServer.handle_connectc                 C   s   dS rn   r   rW   r   r   r   Úwritable  r  zSendfileTestServer.writablec                  C   r^  r+   r   rW   r   r   r   r_  !  r`  zSendfileTestServer.handle_errorN)rP   rQ   rR   rQ  rR  ra  rS  Úpropertyrk  ru  rv  r}  rÏ  r}  r~  r[  r  r_  r   r   r   r   rP  Ï  s    
	rP  Úsendfileztest needs os.sendfile()c                   @   s
  e Zd Zdd Zej d¡ oej d¡ oej d¡ Ze 	ed¡Z
e 	ejdk d¡Zed	d
„ ƒZedd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze
dd„ ƒZe
dd „ ƒZe
ed!d"„ ƒƒZe
ed#d$„ ƒƒZe
e 	eed%ƒd&¡d'd(„ ƒƒZd)S )*ÚTestSendfiles    12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcdeé   ÚlinuxZsolarisZsunosz%requires headers and trailers supportr=  z(test is only meaningful on 32-bit buildsc                 C   s   t  ¡ | _ttj| jƒ d S r+   )r   Zthreading_setuprŸ  r(   r   rU   ÚDATAr€  r   r   r   r‚  1  s   
zTestSendfile.setUpClassc                 C   s   t j| jŽ  t tj¡ d S r+   )r   Zthreading_cleanuprŸ  r   rV   rU   r€  r   r   r   r•  6  s   zTestSendfile.tearDownClassc                 C   s~   t tjdfƒ| _| j ¡  t ¡ | _| j | jj| jj	f¡ | j 
d¡ | j d¡ | j ¡ | _ttjdƒ| _| j ¡ | _d S )Nr   rc   rƒ  rƒ   )rP  r   ZHOSTÚserverru  rf  ÚclientÚconnectrl  rm  Ú
settimeoutrZ  ry   Úsocknor$   r   rU   r2  rW   r   r   r   rX   ;  s   

zTestSendfile.setUpc                 C   s0   | j  ¡  | j ¡  | jjr| j ¡  d | _d S r+   )r2  r\   r‡  r†  rk  rv  rW   r   r   r   rå   G  s
   



zTestSendfile.tearDownc              
   O   s\   	 z	t j|i |¤ŽW S  ty- } z|jtjkr‚ |jtjtjfv r(W Y d}~q ‚ d}~ww )zfA higher level wrapper representing how an application is
        supposed to use sendfile().
        TN)r   r  rD   rE   Z
ECONNRESETÚEAGAINÚEBUSY)r0   r‘   r	  rÇ  r   r   r   Úsendfile_wrapperN  s   €øzTestSendfile.sendfile_wrapperc                 C   sØ   d}d}d}|t | jƒk r8|  | j| j||¡}|dkrn||7 }||7 }|  ||k¡ |  ||¡ |t | jƒk s|  |t | jƒ¡ | j t	j
¡ | j ¡  | j ¡  | jj ¡ }|  t |ƒt | jƒ¡ |  || j¡ d S )Nr   rY  )r:   r…  r  rŠ  ry   r]   r=   r‡  Úshutdownrf  Ú	SHUT_RDWRr\   r†  r}  rn  r\  )r0   Ú
total_sentÚoffsetÚnbytesÚsentr…   r   r   r   Útest_send_whole_file_  s&   ù	

z!TestSendfile.test_send_whole_filec                 C   sê   d}t | jƒd }t | jƒ| }d}||k r8|  | j| j||¡}|dkr%n||7 }||7 }|  ||k¡ ||k s| j tj	¡ | j 
¡  | j ¡  | jj ¡ }| jt | jƒd d … }|  |t |ƒ¡ |  t |ƒt |ƒ¡ |  ||¡ d S )Nr   re   rY  )r:   r…  r  rŠ  ry   r]   r‡  rŽ  rf  r  r\   r†  r}  rn  r\  r=   )r0   r  r‘  Z	must_sendr’  r“  r…   rI   r   r   r   Útest_send_at_certain_offsetu  s(   ú

z(TestSendfile.test_send_at_certain_offsetc              
   C   s¤   t | jƒd }zt | j| j|d¡}W n ty, } z|jtjkr"‚ W Y d }~nd }~ww |  	|d¡ | j
 tj¡ | j
 ¡  | j ¡  | jj ¡ }|  	|d¡ d S )NrY  r   r¦  )r:   r…  r   r  rŠ  ry   rD   rE   ÚEINVALr=   r‡  rŽ  rf  r  r\   r†  r}  rn  r\  )r0   r‘  r“  rÊ   r…   r   r   r   Útest_offset_overflowŒ  s   ÿ€þ

z!TestSendfile.test_offset_overflowc                 C   sT   |   t¡}t | j| jdd¡ W d   ƒ n1 sw   Y  |  |jjtj	¡ d S )Nr!  rY  )
rj   rD   r   r  rŠ  ry   r=   r/  rE   r–  ©r0   rÝ  r   r   r   Útest_invalid_offset  s   ÿz TestSendfile.test_invalid_offsetc              	   C   s@   t j| j| jddd | jrt j| j| jdddddd d S d S )Nr   rY  )rÈ   rÆ   r‘  r²  r   )rÈ   rÆ   r‘  r²  ÚheadersÚtrailersr¬   )r   r  rŠ  ry   ÚSUPPORT_HEADERS_TRAILERSrW   r   r   r   Útest_keywords¢  s   ÿ
þÿzTestSendfile.test_keywordsc                 C   sö   d}d| j d d…  }tj| j| jddddgd}|  |d¡ ||7 }d}|t|ƒk rWtt|ƒ| dƒ}|  | j| j||¡}|dkrCn|  ||¡ ||7 }||7 }|t|ƒk s+|  	|t|ƒ¡ | j
 ¡  | j ¡  | jj ¡ }|  	t|ƒt|ƒ¡ d S )	Nr   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr!  rY  s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxs   yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy©rš  i   )r…  r   r  rŠ  ry   ZassertLessEqualr:   Úminr  r=   r‡  r\   r†  r}  rn  r\  Úhash)r0   r  Zexpected_datar“  r‘  r’  r…   r   r   r   Útest_headers­  s0   ÿÿø


zTestSendfile.test_headersc                 C   s    t jd }d}|  t j|¡ t||ƒ t|dƒ.}tj| j| 	¡ ddddgd | j
 ¡  | j ¡  | jj ¡ }|  |d	¡ W d   ƒ d S 1 sIw   Y  d S )
Nrñ  s   abcdefrƒ   r   rÀ   s   123456s   789©r›  s   abcde123456789)r   rU   r„   rV   r(   r$   r   r  rŠ  ry   r‡  r\   r†  r}  rn  r\  r=   )r0   r©   Z	file_datara   r…   r   r   r   Útest_trailersÆ  s   

ÿ

"úzTestSendfile.test_trailersc                 C   ól   d| j j_|  t¡}tj| j| jdddd gd d W d   ƒ n1 s&w   Y  |  	|j
jtj¡ d S )NFr   ó   xé   rÕ  rž  ©r†  rn  rU  rj   rD   r   r  rŠ  ry   r=   r/  rE   r–  r˜  r   r   r   Útest_headers_overflow_32bitsÖ  ó   
ÿÿz)TestSendfile.test_headers_overflow_32bitsc                 C   r¤  )NFr   r¥  r¦  rÕ  r¢  r§  r˜  r   r   r   Útest_trailers_overflow_32bitsß  r©  z*TestSendfile.test_trailers_overflow_32bitsÚSF_NODISKIOztest needs os.SF_NODISKIOc              
   C   s\   zt j| j| jddt jd W d S  ty- } z|jtjtjfvr"‚ W Y d }~d S d }~ww )Nr   rY  )r¬   )	r   r  rŠ  ry   r«  rD   rE   rŒ  r‹  )r0   rÇ  r   r   r   Ú
test_flagsè  s   ÿÿ€ÿzTestSendfile.test_flagsN)rP   rQ   rR   r…  r8   r9   r   rœ  r   r   Zrequires_headers_trailersÚmaxsizeZrequires_32br–  r‚  r•  rX   rå   r  r”  r•  r—  r™  r  r¡  r£  r¨  rª  r   r   r¬  r   r   r   r   r‚  %  sP    ÿþÿÿ



ÿr‚  c               	   C   s¶   t tdƒsdS zLttjddƒ+} zt |  ¡ dd¡ W n ty2   Y W d   ƒ W t tj¡ dS w W d   ƒ n1 s=w   Y  W t tj¡ dS W t tj¡ dS t tj¡ w )NÚsetxattrFr#   r   ó	   user.testr¦  T)	r   r   r$   r   rU   r®  ry   rD   rV   )r'   r   r   r   Úsupports_extended_attributesô  s&   
üýÿþøþr°  z(no non-broken extended attribute supportre   rÁ   é'   c                   @   r˜  )ÚExtendedAttributeTestsc                 K   sF  t j}|  t j|¡ t|ƒ |  t¡}|||dƒfi |¤Ž W d   ƒ n1 s)w   Y  |  |jj	t	j
¡ ||ƒ}	|  |	t¡ |||dƒdfi |¤Ž t|	ƒ}
|
 d¡ |  t||ƒƒ|
¡ |  ||dfi |¤Žd¡ |||dƒdtjfi |¤Ž |  ||dfi |¤Žd¡ |  t¡}|||dƒdtjfi |¤Ž W d   ƒ n1 s¦w   Y  |  |jj	t	j¡ |  t¡}|||dƒdtjfi |¤Ž W d   ƒ n1 sÒw   Y  |  |jj	t	j
¡ |||dƒdtjfi |¤Ž |
 d¡ |  t||ƒƒ|
¡ |||dƒfi |¤Ž |  t¡}|||dƒfi |¤Ž W d   ƒ n	1 s$w   Y  |  |jj	t	j
¡ |
 d¡ |  t||ƒƒ|
¡ |  |||dƒfi |¤Žd¡ |||dƒdfi |¤Ž |  |||dƒfi |¤Žd¡ |||dƒfi |¤Ž td	d
„ tdƒD ƒƒ}|D ]}|||dfi |¤Ž qƒ|  t||ƒƒt|	ƒt|ƒB ¡ d S )Nú	user.testr¦  r¯  r¥  s   byez
user.test2s   foos   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac                 s   s    | ]}d   |¡V  qdS )zuser.test{}Nr°  )r   rÉ   r   r   r   r²  5  ó   € z;ExtendedAttributeTests._check_xattrs_str.<locals>.<genexpr>r    r¥  )r   rU   r„   rV   r(   rj   rD   r=   r/  rE   ÚENODATAr-   r"  rK  r_  r   ÚXATTR_REPLACEÚXATTR_CREATEÚEEXISTr(  r™  rÄ   )r0   r   Úgetxattrr®  ÚremovexattrÚ	listxattrr	  rY  rÝ  Z
init_xattrZxattrÚmanyÚthingr   r   r   Ú_check_xattrs_str
  sT   ÿ
ÿÿ
ÿ
$z(ExtendedAttributeTests._check_xattrs_strc                 O   sN   | j tg|¢R i |¤Ž t tj¡ | j tjg|¢R i |¤Ž t tj¡ d S r+   )r¾  r.   r   rV   rU   r   r[  rE  r   r   r   Ú_check_xattrs:  s   z$ExtendedAttributeTests._check_xattrsc                 C   s   |   tjtjtjtj¡ d S r+   ©r¿  r   r¹  r®  rº  r»  rW   r   r   r   Útest_simpleA  s   ÿz"ExtendedAttributeTests.test_simplec                 C   s    | j tjtjtjtjdd d S )NFr†  rÀ  rW   r   r   r   Ú
test_lpathE  s   
ÿz!ExtendedAttributeTests.test_lpathc                 C   s4   dd„ }dd„ }dd„ }dd„ }|   ||||¡ d S )	Nc                 W   óD   t | dƒ}tj| ¡ g|¢R Ž W  d   ƒ S 1 sw   Y  d S rc  )r$   r   r¹  ry   ©r>   r‘   r'   r   r   r   r¹  J  ó   $ÿz1ExtendedAttributeTests.test_fds.<locals>.getxattrc                 W   óH   t | ddƒ}tj| ¡ g|¢R Ž  W d   ƒ d S 1 sw   Y  d S ©Nri  r   )r$   r   r®  ry   rÄ  r   r   r   r®  M  ó   "ÿz1ExtendedAttributeTests.test_fds.<locals>.setxattrc                 W   rÆ  rÇ  )r$   r   rº  ry   rÄ  r   r   r   rº  P  rÈ  z4ExtendedAttributeTests.test_fds.<locals>.removexattrc                 W   rÃ  rc  )r$   r   r»  ry   rÄ  r   r   r   r»  S  rÅ  z2ExtendedAttributeTests.test_fds.<locals>.listxattr)r¿  )r0   r¹  r®  rº  r»  r   r   r   Útest_fdsI  s
   zExtendedAttributeTests.test_fdsN)rP   rQ   rR   r¾  r¿  rÁ  rÂ  rÉ  r   r   r   r   r²    s    0r²  Úget_terminal_sizezrequires os.get_terminal_sizec                   @   rÜ  )ÚTermsizeTestsc              
   C   sn   zt  ¡ }W n  ty& } ztjdks|jtjtjfv r!|  d¡ ‚ d}~ww |  	|j
d¡ |  	|jd¡ dS )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.
        r”   úfailed to query terminal sizeNr   )r   rÊ  rD   r8   r9   rE   r–  ÚENOTTYrh   ZassertGreaterEqualÚcolumnsÚlines)r0   r   rÊ   r   r   r   Útest_does_not_crash[  s   
€ûz!TermsizeTests.test_does_not_crashc              
   C   sÂ   zt jddgt jdd ¡ }W n tt jtfy!   |  d¡ Y nw t|d ƒt|d ƒf}z
t	 
tj ¡ ¡}W n  tyX } ztjdksN|jtjtjfv rS|  d	¡ ‚ d
}~ww |  ||¡ d
S )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.
        Zsttyr   T)rl  rÌ  zstty invocation failedrc   r   r”   rÌ  N)r   ry  ÚDEVNULLr  rC   ÚCalledProcessErrorr  rh   rë   r   rÊ  r8   Ú	__stdin__ry   rD   r9   rE   r–  rÍ  r=   )r0   r   rI   rù  rÊ   r   r   r   Útest_stty_matchm  s*   ÿý
ÿþ
€ûzTermsizeTests.test_stty_matchN)rP   rQ   rR   rÐ  rÔ  r   r   r   r   rË  Y  s    rË  Úmemfd_createzrequires os.memfd_createrÍ   r  c                   @   r£  )ÚMemfdCreateTestsc                 C   s¬   t  dt j¡}|  |d¡ |  t j|¡ |  t  |¡¡ t|ddd}| 	d¡ |  
| ¡ d¡ W d   ƒ n1 s;w   Y  t  d¡}|  t j|¡ |  t  |¡¡ d S )NZHir!  ri  F)Úclosefds   memfd_createrù   )r   rÕ  ÚMFD_CLOEXECr>  r„   r\   rœ  r%  r$   r%   r=   Útell)r0   r~   ra   r  r   r   r   Útest_memfd_create  s   
þ
z"MemfdCreateTests.test_memfd_createN)rP   rQ   rR   rÚ  r   r   r   r   rÖ  Š  rI  rÖ  Úeventfdzrequires os.eventfdr9  c                   @   r)   )ÚEventfdTestsc                 C   sú   dd„ }d}d}t  |¡}|  |d¡ |  t j|¡ |  t  |¡¡ t  ||¡}|  |||ƒ¡ t  	||dƒ¡ t  ||¡}|  ||dƒ¡ t  	||dƒ¡ t  	||dƒ¡ t  ||¡}|  ||dƒ¡ t  
|d	¡ t  
|d
¡ t  |¡}|  |d¡ d S )Nc                 S   s   t  d| ¡S )z$Pack as native uint64_t
            z@Q)ÚstructÚpack)r'  r   r   r   rÞ  Ÿ  s   z/EventfdTests.test_eventfd_initval.<locals>.packrö   r’  r!  r	  é(   re   r  rÍ   )r   rÛ  r>  r„   r\   rœ  r%  r{   r=   r%   Úeventfd_writeÚeventfd_read)r0   rÞ  r   Úinitvalr~   Úresr   r   r   Útest_eventfd_initvalž  s(   

z!EventfdTests.test_eventfd_initvalc                 C   s.  d}t jt jB t jB }t  ||¡}|  |d¡ |  t j|¡ t  |¡}|  	|d¡ t  |¡}|  	|d¡ |  
t¡ t  |¡ W d   ƒ n1 sIw   Y  |  
t¡ t  |d¡ W d   ƒ n1 sdw   Y  t  |d¡ t  |¡}|  	|d¡ |  
t¡ t  |¡ W d   ƒ d S 1 sw   Y  d S )Nre   r!  rc   rö   )r   ÚEFD_CLOEXECÚEFD_SEMAPHOREÚEFD_NONBLOCKrÛ  r>  r„   r\   rá  r=   rj   rÀ  r{   rà  )r0   râ  r¬   r~   rã  r   r   r   Útest_eventfd_semaphore½  s*   

ÿÿ
"ÿz#EventfdTests.test_eventfd_semaphorec                 C   s  t jt jB }t  d|¡}|  |d¡ |  t j|¡ t |g|g|gd¡\}}}|  |||fg |gg f¡ t  	|d¡ t |g|g|gd¡\}}}|  |||f|g|gg f¡ |  t  
|¡d¡ t  	|d¡ t |g|g|gd¡\}}}|  |||f|gg g f¡ t  
|¡ d S )Nr   r!  r	  l   þÿÿÿ )r   rå  rç  rÛ  r>  r„   r\   Úselectr=   rà  rá  )r0   r¬   r~   ÚrfdÚwfdZxfdr   r   r   Útest_eventfd_select×  s   z EventfdTests.test_eventfd_selectN)rP   rQ   rR   rä  rè  rì  r   r   r   r   rÜ  ›  s    rÜ  c                   @   rÜ  )ÚOSErrorTestsc                 C   s¬   G dd„ dt ƒ}g | _g | _tjd urtj}ntj}| j |¡ | j ||ƒ¡ tjd ur1tj}nt 	tj¡}| j |¡ | j t
|ƒ¡ | j t|ƒ¡ | j| j | _d S )Nc                   @   ó   e Zd ZdS )zOSErrorTests.setUp.<locals>.StrN©rP   rQ   rR   r   r   r   r   ÚStrð  ó    rð  )r.   Úbytes_filenamesÚunicode_filenamesr   r]  rU   r'  ZTESTFN_UNDECODABLEr   r[  r‰   rŠ   rà  )r0   rð  ZdecodedÚencodedr   r   r   rX   ï  s   

zOSErrorTests.setUpc                 C   s@  | j tjf| j tjdf| j tjf| j tjtjf| j tjf| j tjf| j tj	fg}t
jdkrP| | jtjdf| jtjdf| jtjdf| jtjdf| jtjff¡ n| | j tjf| j tjdf| j tjdff¡ ttdƒrv| | j tjddf¡ ttdƒr†| | j tjddf¡ ttdƒr•| | j tjdf¡ ttd	ƒr¤| | j tjdf¡ ttd
ƒr³| | j tjdf¡ ttdƒrÁ| | j tjf¡ ttdƒrêt
jdkrà| | jtjdf¡ | | jtjdf¡ n
| | j tjdf¡ ttdƒr| | j tjf| j tjdf| j tjddf| j tjdff¡ ttdƒr| | j tjdf¡ ttdƒr,| | j tj f¡ |D ]o^}}}|D ]f}z2t!|t"t#fƒrI||g|¢R Ž  n|  $t%d¡ ||g|¢R Ž  W d   ƒ n	1 scw   Y  W n( t&y‡ } z|  '|j(|t"|ƒ¡ W Y d }~q5d }~w t)y‘   Y q5w |  *d +|¡¡ q5q.d S )Nr«   r”   s   dstr´   r~  r   Úlchownr  ÚchflagsÚlchflagsÚchrootr  r»  r³  s   userÚlchmodrž  z	should bezNo exception thrown by {}),rà  r   rB   r  ru  r$   rœ   r8  r¨   rV   r8   r9   r”  rò  rq   r§   ró  r  r   r'  r~  rõ  r  rö  r÷  rø  r  r»  r¹  r®  rº  rù  rž  r$  r.   rM   ZassertWarnsRegexÚDeprecationWarningrD   rÚ  r&   ÚUnicodeDecodeErrorr  r±  )r0   Zfuncsrà  ÚfuncZ	func_argsr   rÇ  r   r   r   Útest_oserror_filename  s†   




ù
	
û
ý








üÿ€"€ÿôÿz"OSErrorTests.test_oserror_filenameN)rP   rQ   rR   rX   rý  r   r   r   r   rí  î  s    rí  c                   @   r£  )ÚCPUCountTestsc                 C   s:   t  ¡ }|d ur|  |t¡ |  |d¡ d S |  d¡ d S )Nr   z&Could not determine the number of CPUs)r   Ú	cpu_countr-   rë   ÚassertGreaterrh   )r0   Zcpusr   r   r   Útest_cpu_countL  s
   zCPUCountTests.test_cpu_countN)rP   rQ   rR   r  r   r   r   r   rþ  K  r©  rþ  c                   @   sæ   e Zd Zdd„ Ze edu d¡dd„ ƒZe edu d¡dd„ ƒZe 	e
ed	ƒd
¡dd„ ƒZdd„ Zdd„ Ze 	e
edƒd¡dd„ ƒZdd„ Zdd„ Ze 	ejdkd¡dd„ ƒZe 	e
edƒd¡dd „ ƒZe 	e
ed!ƒd"¡d#d$„ ƒZdS )%ÚFDInheritanceTestsc                 C   sP   t  tt j¡}|  t j|¡ |  t  |¡d¡ t  |d¡ |  t  |¡d¡ d S ©NFT)	r   r$   r¯   rœ   r„   r\   r=   r%  r&  r¡   r   r   r   Útest_get_set_inheritableV  s
   z+FDInheritanceTests.test_get_set_inheritableNz
need fcntlc                 C   sn   t  tt j¡}|  t j|¡ |  t  |¡d¡ t |tj	¡}|tj
 M }t |tj|¡ |  t  |¡d¡ d S r  )r   r$   r¯   rœ   r„   r\   r=   r%  ÚfcntlÚF_GETFDÚ
FD_CLOEXECÚF_SETFD)r0   r~   r¬   r   r   r   Útest_get_inheritable_cloexec^  s   z/FDInheritanceTests.test_get_inheritable_cloexecc                 C   sf   t  tt j¡}|  t j|¡ |  t |tj¡tj	@ tj	¡ t  
|d¡ |  t |tj¡tj	@ d¡ d S )NTr   )r   r$   r¯   rœ   r„   r\   r=   r  r  r  r&  r¡   r   r   r   Útest_set_inheritable_cloexeck  s   ÿÿz/FDInheritanceTests.test_set_inheritable_cloexecÚO_PATHzneed os.O_PATHc                 C   ón   t  tt j¡}|  t j|¡ |  t  |¡d¡ t  |d¡ |  t  |¡d¡ t  |d¡ |  t  |¡d¡ d S r  )	r   r$   r¯   r  r„   r\   r=   r%  r&  r¡   r   r   r   Útest_get_set_inheritable_o_pathv  s   z2FDInheritanceTests.test_get_set_inheritable_o_pathc                 C   sâ   t  ¡ }|  t¡}t |¡ W d   ƒ n1 sw   Y  |  |jjtj	¡ |  t¡}t 
|d¡ W d   ƒ n1 s=w   Y  |  |jjtj	¡ |  t¡}t 
|d¡ W d   ƒ n1 saw   Y  |  |jjtj	¡ d S ©NTF)r   r   rj   rD   r   r%  r=   r/  rE   r0  r&  )r0   r~   r2  r   r   r   Útest_get_set_inheritable_badf‚  s   ÿÿÿz0FDInheritanceTests.test_get_set_inheritable_badfc                 C   s2   t  tt j¡}|  t j|¡ |  t  |¡d¡ d S r  )r   r$   r¯   rœ   r„   r\   r=   r%  r¡   r   r   r   rd  ‘  s   zFDInheritanceTests.test_openrà   zneed os.pipe()c                 C   óP   t  ¡ \}}|  t j|¡ |  t j|¡ |  t  |¡d¡ |  t  |¡d¡ d S r  )r   rà   r„   r\   r=   r%  )r0   rê  rë  r   r   r   Ú	test_pipe–  ó
   zFDInheritanceTests.test_pipec                 C   sJ   t  tt j¡}|  t j|¡ t  |¡}|  t j|¡ |  t  |¡d¡ d S r  )	r   r$   r¯   rœ   r„   r\   rg   r=   r%  ©r0   Úfd1r  r   r   r   Útest_dupž  s
   
zFDInheritanceTests.test_dupc                 C   s(   t  d¡}|  t j|¡ |  |d¡ d S ©Nrc   r   )r   rg   r„   r\   r   r¡   r   r   r   Útest_dup_standard_stream¦  s   
z+FDInheritanceTests.test_dup_standard_streamr”   r  c                 C   sH   t  dt j¡}|  t j|¡ t  |¡}|  t j|¡ |  t  |¡¡ d S )NÚNUL)r   r$   rœ   r„   r\   rg   rœ  r%  r  r   r   r   Útest_dup_nul«  s
   
zFDInheritanceTests.test_dup_nulr  zneed os.dup2()c                 C   s¤   t  tt j¡}|  t j|¡ t  tt j¡}|  t j|¡ |  t  ||¡|¡ |  t  	|¡¡ t  tt j¡}|  t j|¡ |  t j||dd|¡ |  
t  	|¡¡ d S )NF)Úinheritable)r   r$   r¯   rœ   r„   r\   r=   r  r]   r%  rœ  )r0   r~   r  Zfd3r   r   r   r  ´  s   zFDInheritanceTests.test_dup2Úopenptyzneed os.openpty()c                 C   r  r  )r   r  r„   r\   r=   r%  )r0   Z	master_fdZslave_fdr   r   r   Útest_openptyÅ  r  zFDInheritanceTests.test_openpty)rP   rQ   rR   r  r   rí  r  r	  r
  r   r   r   r  r  rd  r  r  r  r8   r9   r  r  r  r   r   r   r   r  U  s(    






r  c                   @   sH   e Zd Zddddejfdfddddd	eed
dƒfgZdd„ Zdd„ ZdS )ÚPathTConverterTests)r¨   Tr   N)ru  Fr   Nr^   FN)rö  F©r   N)r÷  Fr  Nr$   r  r\   c                 C   sî  t j}tjdkrd  }}n
t t j¡}t|ƒ}t t|ƒtjtjB ¡}|  	t j
t j¡ |  	tj|¡ t|ƒ}t|ƒ}| jD ]·\}}}	}
| j|d£ ztt|ƒ}W n ty`   Y W d   ƒ q=w ||||fD ].}|d u rnqg| j||d ||g|	¢R Ž }|
d ur†|
|ƒ W d   ƒ n1 sw   Y  qg|  td¡ ||g|	¢R Ž  W d   ƒ n1 s¯w   Y  |rÇ||g|	¢R Ž }|
d urÆ|
|ƒ n|  td¡ ||g|	¢R Ž  W d   ƒ n1 sàw   Y  W d   ƒ n1 sïw   Y  q=d S )Nrh  r   )r   r>   zto return str or byteszos.PathLike)r   rU   r   r   r[  r   r$   rˆ   rZ   r„   rV   r\   Ú	functionsr	  r  r  ÚassertRaisesRegexrp   )r0   Zstr_filenameZbytes_fspathÚbytes_filenamer~   Z
int_fspathZ
str_fspathr   Zallow_fdÚ
extra_argsZ
cleanup_fnrY  r>   r  r   r   r   Útest_path_t_converterÚ  sd   

üÿ€ý€ÿþ€þý€è€ÿz)PathTConverterTests.test_path_t_converterc                 C   sÆ   d}|   t|d ¡ t tdƒ¡ W d   ƒ n1 sw   Y  |   t|d ¡ t tdƒ¡ W d   ƒ n1 s;w   Y  |   t|d ¡ t ttƒ ƒ¡ W d   ƒ d S 1 s\w   Y  d S )Nz-__fspath__\(\) to return str or bytes, not %srë   re   Úfloatg¸…ëQ¸@Úobject)r   rp   r   r¨   r   r%  )r0   rq  r   r   r   Ú&test_path_t_converter_and_custom_class  s   ÿÿ"ÿz:PathTConverterTests.test_path_t_converter_and_custom_class)	rP   rQ   rR   r   ÚF_OKr  r  r#  r&  r   r   r   r   r  Î  s    ú	,r  r)  r*  c                   @   r£  )ÚBlockingTestsc                 C   r  r  )	r   r$   r¯   rœ   r„   r\   r=   r)  r+  r¡   r   r   r   r,    s   zBlockingTests.test_blockingN)rP   rQ   rR   r,  r   r   r   r   r(    rI  r(  c                   @   r£  )ÚExportsTestsc                 C   s    |   dtj¡ |   dtj¡ d S )Nr$   r  )rÃ   r   Ú__all__rW   r   r   r   Útest_os_all!  s   zExportsTests.test_os_allN)rP   rQ   rR   r+  r   r   r   r   r)     r©  r)  c                   @   r)   )ÚTestDirEntryc                 C   s0   t j tj¡| _|  tj| j¡ t  | j¡ d S r+   )r   r>   Úrealpathr   rU   r„   rE  rA   rW   r   r   r   rX   '  s   zTestDirEntry.setUpc                 C   s   |   ttj¡ d S r+   )rj   rp   r   ÚDirEntryrW   r   r   r   Útest_uninstantiable,  r  z TestDirEntry.test_uninstantiablec                 C   sj   t tj | jd¡dƒ}dd„ t | j¡D ƒ ¡ }|  |tj¡ |  |j	d¡ dd l
}|  t|j||¡ d S )Nr   ó   pythonc                 S   s   g | ]}|‘qS r   r   ©r   Úentryr   r   r   r   1  s    z0TestDirEntry.test_unpickable.<locals>.<listcomp>r   )r(   r   r>   r@   ÚscandirrÍ  r-   r.  r=   r   r  rj   rp   r  )r0   r&   r2  r  r   r   r   Útest_unpickable/  s   zTestDirEntry.test_unpickableN)rP   rQ   rR   rX   r/  r4  r   r   r   r   r,  &  s    r,  c                   @   s
  e Zd ZejZdd„ Zd<dd„Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zd<dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Ze ejejv d(¡d)d*„ ƒZd+d,„ Zd-d.„ Zd/d0„ Z d1d2„ Z!d3d4„ Z"d5d6„ Z#d7d8„ Z$d9d:„ Z%d;S )=ÚTestScandirc                 C   s>   t j tj¡| _t  | j¡| _|  tj| j¡ t  	| j¡ d S r+   )
r   r>   r-  r   rU   r[  Ú
bytes_pathr„   rE  rA   rW   r   r   r   rX   ;  s   zTestScandir.setUpr   c                 C   s2   t |tƒr| jn| j}tj ||¡}t|dƒ |S )Nr0  )r$  rM   r6  r>   r   r@   r(   )r0   r   r>   r&   r   r   r   r(   A  s   
zTestScandir.create_filec                 C   s2   t dd„ t | j¡D ƒƒ}|  t| ¡ ƒ|¡ |S )Nc                 s   ó    | ]}|j |fV  qd S r+   r   r1  r   r   r   r²  H  s   € ÿz*TestScandir.get_entries.<locals>.<genexpr>)r—  r   r3  r>   r=   r™  Úkeys)r0   ÚnamesÚentriesr   r   r   Úget_entriesG  s
   
ÿzTestScandir.get_entriesc                 C   s\   |r&t |ƒD ]}| d¡sq|dv rq|  t||ƒt||ƒ|||f¡ qd S |  ||¡ d S )NZst_)Úst_devÚst_inoÚst_nlink)rþ   r   r=   r  )r0   Zstat1Zstat2Zskip_fieldsr  r   r   r   Úassert_stat_equalM  s   
þû	zTestScandir.assert_stat_equalc                 C   s(   t  | j¡}|  tt|ƒ¡ | ¡  d S r+   )r   r3  r>   rj   rp   r|   r\   )r0   Úscandir_iterr   r   r   r/  Z  s   zTestScandir.test_uninstantiablec                 C   s<   |   d¡}t | j¡}dd l}|  t|j||¡ | ¡  d S )Nr   r   )	r(   r   r3  r>   r  rj   rp   r  r\   )r0   r&   r@  r  r   r   r   r4  _  s
   
zTestScandir.test_unpickablec                 C   s0  |   |tj¡ |  |j|¡ |  |jtj | j|¡¡ |  | ¡ tj|jddj	¡ t |j¡}|  | 
¡ t |j¡¡ |  | ¡ t |j¡¡ |  | ¡ tj |j¡¡ tj|jdd}|  |j
ddt |j¡¡ |  |jddt |j¡¡ |  | ¡ |tjdko†| ¡ |  |jdd|tjdk¡ d S )NFr†  rh  )r-   r   r.  r=   r   r>   r@   Úinoder¨   r=  Úis_dirÚS_ISDIRr  Úis_fileÚS_ISREGÚ
is_symlinkrµ  r?  )r0   r2  r   rB  rD  rF  Z
entry_statZentry_lstatr   r   r   Úcheck_entryf  s>   
ÿ

ÿ

ÿ
ÿ
ÿ
ÿ
þþzTestScandir.check_entryc           	   
   C   s‚  t tdƒ}t ¡ }tj | jd¡}t |¡ |  d¡}|rEzt |tj | jd¡¡ W n t	yD } z|  
d| ¡ W Y d }~nd }~ww |ratj|tj | jd¡dd t |tj | jd	¡¡ ddg}|rl| d¡ |rs| d
¡ |  |¡}|d }|  |dddd¡ |d }|  |dddd¡ |r¡|d }|  |dddd¡ |r¿|d }|  |dddd¡ |d	 }|  |d	ddd¡ d S d S )Nr  rþ   r   zlink_file.txtr3  Úsymlink_dirT)rµ   úsymlink_file.txt)rH  rI  F)r   r   r   r  r>   r@   rA   r(   r  r  rh   r±   r'  r”  r;  rG  )	r0   r  r±   rH   r&   rÊ   r9  r:  r2  r   r   r   Útest_attributes‚  sH   


€ÿÿ


ûzTestScandir.test_attributesc                 C   sN   t |tƒr| jn| j}tt |¡ƒ}|  t|ƒd¡ |d }|  |j	|¡ |S r  )
r$  rM   r6  r>   r"  r   r3  r=   r:   r   )r0   r   r>   r:  r2  r   r   r   Ú	get_entry«  s   zTestScandir.get_entryc                 C   s   | j |d}|  tj |¡¡S )Nr   )r(   rK  r   r>   Úbasename)r0   r   r&   r   r   r   Úcreate_file_entry´  r(  zTestScandir.create_file_entryc              	   C   sn   |   ¡ }t ¡ }z(t | j¡ tdd„ t ¡ D ƒƒ}|  t| 	¡ ƒtj 
|¡g¡ W t |¡ d S t |¡ w )Nc                 s   r7  r+   r   r1  r   r   r   r²  À  r´  z5TestScandir.test_current_directory.<locals>.<genexpr>)r(   r   r,   rB   r>   r—  r3  r=   r™  r8  rL  )r0   r&   Zold_dirr:  r   r   r   Útest_current_directory¸  s   ÿz"TestScandir.test_current_directoryc                 C   s   |   ¡ }|  t|ƒd¡ d S )Nz<DirEntry 'file.txt'>)rM  r=   r³  ©r0   r2  r   r   r   Ú	test_reprÆ  rH  zTestScandir.test_reprc                 C   s*   |   ¡ }|  t |¡tj | jd¡¡ d S )Nr   )rM  r=   r   Úfspathr>   r@   rO  r   r   r   Útest_fspath_protocolÊ  s   "z TestScandir.test_fspath_protocolc                 C   sN   t  d¡}| j|d}t  |¡}|  |t¡ |  |t j t  | j¡|¡¡ d S )Nzbytesfile.txtr   )	r   r[  rM  rQ  r-   rM   r=   r>   r@   )r0   r!  Zbytes_entryrQ  r   r   r   Útest_fspath_protocol_bytesÎ  s   

ÿz&TestScandir.test_fspath_protocol_bytesc                 C   sÆ   t j | jd¡}t  |¡ |  d¡}t  |¡ t jdkr#|  | ¡ ¡ |  	| 
¡ ¡ |  	| ¡ ¡ t jdkrI|  t|j¡ | ¡  |jdd d S |  | ¡ d¡ |  t|j¡ | jt|jdd d S )Nrþ   rh  Fr†  r   )r   r>   r@   rA   rK  r8  r   r]   rB  rœ  rD  rF  rj   rC   rA  r¨   r   )r0   r>   r2  r   r   r   Útest_removed_dirÖ  s   




zTestScandir.test_removed_dirc                 C   s¬   |   ¡ }t |j¡ |  | ¡ ¡ tjdkr|  | ¡ ¡ |  | 	¡ ¡ tjdkr<|  
t|j¡ | ¡  |jdd d S |  | ¡ d¡ |  
t|j¡ | j
t|jdd d S )Nrh  Fr†  r   )rM  r   rV   r>   rœ  rB  r   r]   rD  rF  rj   rC   rA  r¨   r   rO  r   r   r   Útest_removed_fileì  s   

zTestScandir.test_removed_filec                 C   sÐ   t  ¡ s	|  d¡S |  d¡}t |tj | jd¡¡ |  ddg¡}|d }t 	|¡ |  
| ¡ d¡ |  | ¡ ¡ |  | ¡ ¡ |  |jdd¡ |  |jdd¡ |  | ¡ ¡ |  t|j¡ |jdd d S )Nzcannot create symbolic linkr   zsymlink.txtr   Fr†  )r   r  rh   r(   r   r±   r>   r@   r;  rV   r   rA  rœ  rB  rD  r]   rF  rj   rC   r¨   )r0   r&   r:  r2  r   r   r   Útest_broken_symlinkÿ  s"   

ÿ
zTestScandir.test_broken_symlinkc              	   C   sp   |   d¡ t | j¡}tt |¡ƒ}|  t|ƒd|¡ |d }|  |jd¡ |  |jt tj 	| jd¡¡¡ d S ©Nr   rc   r   s   file.txt)
r(   r   r[  r>   r"  r3  r=   r:   r   r@   )r0   Ú
path_bytesr:  r2  r   r   r   r­    s   
ÿzTestScandir.test_bytesc              
   C   sÐ   |   d¡ ttfD ]\}|t | j¡ƒ}|  t¡ tt 	|¡ƒ}W d   ƒ n1 s*w   Y  |  
t|ƒd|¡ |d }|  
|jd¡ |  
|jt tj | jd¡¡¡ |  t|jƒt¡ |  t|jƒt¡ q	d S rW  )r(   r‰   rŠ   r   r[  r>   ÚassertWarnsrú  r"  r3  r=   r:   r   r@   rÚ  r|   rM   )r0   r  rX  r:  r2  r   r   r   Útest_bytes_like   s   
ÿÿõzTestScandir.test_bytes_likez.fd support for listdir required for this test.c              	   C   st  |   tjtj¡ |  d¡ dg}t ¡ r%t dtj 	| jd¡¡ | 
d¡ t | j¡…}t |¡}t|ƒ}W d   ƒ n1 s@w   Y  dd„ |D ƒ}|  t|ƒ|¡ |  |t |¡¡ |D ]H}|  |j|j¡ |  t |¡|j¡ |  | ¡ |jdk¡ tjtjv r§tj|j|d}|  | ¡ |¡ tj|j|dd}|  |jdd|¡ q_W d   ƒ d S 1 s³w   Y  d S )	Nr   r  c                 S   r
   r   r   r1  r   r   r   r   =  r   z'TestScandir.test_fd.<locals>.<listcomp>r‡  F)r®   rg  r†  )rÃ   r   r3  r‰  r(   r   r  r±   r>   r@   r'  rl  r"  r=   r™  r  r   rQ  rF  r¨   rŠ  )r0   Zexpected_namesr~   rª  r:  r9  r2  rI  r   r   r   Útest_fd0  s2   


ÿ€ø"úzTestScandir.test_fdc                 C   s   |   ttjd¡ d S )Nr|  )rj   rC   r   r3  rW   r   r   r   Útest_empty_pathJ  rå  zTestScandir.test_empty_pathc                 C   sN   |   d¡ t | j¡}t|ƒ}|  t|ƒd|¡ t|ƒ}|  t|ƒd|¡ d S )Nr   rc   r   )r(   r   r3  r>   r"  r=   r:   )r0   rß  r:  Zentries2r   r   r   Útest_consume_iterator_twiceM  s   
z'TestScandir.test_consume_iterator_twicec                 C   s$   di g fD ]
}|   ttj|¡ qd S )NgX9´Èv¾ó?)rj   rp   r   r3  )r0   Úobjr   r   r   Útest_bad_path_typeX  s   ÿzTestScandir.test_bad_path_typec                 C   sh   |   d¡ |   d¡ t | j¡}t|ƒ | ¡  | ¡  |  ¡ 
 ~W d   ƒ d S 1 s-w   Y  d S ©Nr   ú	file2.txt)r(   r   r3  r>   r¨  r\   Úcheck_no_resource_warning©r0   rß  r   r   r   Ú
test_close\  s   


"ÿzTestScandir.test_closec                 C   sx   |   d¡ |   d¡ t | j¡}t|ƒ W d   ƒ n1 sw   Y  |  ¡ 
 ~W d   ƒ d S 1 s5w   Y  d S r`  )r(   r   r3  r>   r¨  rb  rc  r   r   r   Útest_context_managerg  s   


ÿ
"ÿz TestScandir.test_context_managerc                 C   sV   |   d¡ |   d¡ t | j¡}t|ƒ | ¡  W d   ƒ d S 1 s$w   Y  d S r`  )r(   r   r3  r>   r¨  r\   rc  r   r   r   Útest_context_manager_closeo  s   


"þz&TestScandir.test_context_manager_closec              	   C   sª   |   d¡ |   d¡ |  t¡& t | j¡}t|ƒ dd  W d   ƒ n1 s)w   Y  W d   ƒ n1 s8w   Y  |  ¡ 
 ~W d   ƒ d S 1 sNw   Y  d S )Nr   ra  rc   r   )r(   rj   ÚZeroDivisionErrorr   r3  r>   r¨  rb  rc  r   r   r   Útest_context_manager_exceptionv  s   


þ€ÿ
"ÿz*TestScandir.test_context_manager_exceptionc                 C   s    |   d¡ |   d¡ t | j¡}t|ƒ |  t¡ ~t ¡  W d   ƒ n1 s)w   Y  t | j¡}t	|ƒ |  
¡ 
 ~W d   ƒ d S 1 sIw   Y  d S r`  )r(   r   r3  r>   r¨  rY  ÚResourceWarningr   Ú
gc_collectr"  rb  rc  r   r   r   Útest_resource_warning€  s   


þ
"ÿz!TestScandir.test_resource_warningN)r   )&rP   rQ   rR   r   rb  rX   r(   r;  r?  r/  r4  rG  rJ  rK  rM  rN  rP  rR  rS  rT  rU  rV  r­  rZ  r   r   r   r  r‰  r[  r\  r]  r_  rd  re  rf  rh  rk  r   r   r   r   r5  8  sB    
)
	ÿ

r5  c                   @   s^   e Zd ZeejƒZdd„ Zdd„ Zdd„ Zdd„ Z	d	d
„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )Ú
TestPEP519c                 C   ó    dD ]}|   ||  |¡¡ qd S )N)r¥  s   goodbyes   some/path/and/file©r=   rQ  )r0   Úbr   r   r   Útest_return_bytes•  ó   ÿzTestPEP519.test_return_bytesc                 C   rm  )N)ZhelloZgoodbyezsome/path/and/filern  )r0   r   r   r   r   Útest_return_string™  rq  zTestPEP519.test_return_stringc                 C   sL   dD ]!}t |ƒ}|  ||  |¡¡ |  dt |¡¡ |  dt |¡¡ qd S )N)úpath/like/objectó   path/like/objectrt  rs  )r   r=   rQ  r   r[  rN   )r0   r  Zpathliker   r   r   Útest_fsencode_fsdecode  s   ûz!TestPEP519.test_fsencode_fsdecodec                 C   sB   |   d|  tdƒ¡¡ |  tttjƒ¡ |  ttdƒtjƒ¡ d S )Nz#feelthegilrí   )r=   rQ  r   r]   Ú
issubclassr   ÚPathLiker$  rW   r   r   r   r«  ¥  s   zTestPEP519.test_pathlikec                 C   s4   t ddi ƒ}tt t|ƒ fD ]
}|  t| j|¡ qd S )NZblahr   )r|   rë   r   rj   rp   rQ  )r0   ZvaporÚor   r   r   Útest_garbage_in_exception_outª  s   ÿz(TestPEP519.test_garbage_in_exception_outc                 C   s   |   t| j¡ d S r+   )rj   rp   rQ  rW   r   r   r   Útest_argument_required¯  r  z!TestPEP519.test_argument_requiredc                 C   sR   |   t| jtdƒ¡ tddi ƒ}d|_|   t| j|ƒ ¡ |   t| jttƒ ƒ¡ d S )Nr’  Zfoor   rc   )rj   rp   rQ  r   r|   Ú
__fspath__rg  )r0   Úcr   r   r   Útest_bad_pathlike²  s   
ÿzTestPEP519.test_bad_pathlikec                 C   s8   G dd„ dt jƒ}|  tt|ƒ¡ |  ttt jƒ¡ d S )Nc                   @   rî  )z0TestPEP519.test_pathlike_subclasshook.<locals>.ANrï  r   r   r   r   ÚAÀ  rñ  r~  )r   rw  rœ  rv  r   r]   )r0   r~  r   r   r   Útest_pathlike_subclasshook½  s   z%TestPEP519.test_pathlike_subclasshookc                 C   s   |   tjt tj¡ d S r+   )r-   r   rw  rM   ÚtypesÚGenericAliasrW   r   r   r   Útest_pathlike_class_getitemÅ  rô  z&TestPEP519.test_pathlike_class_getitemN)rP   rQ   rR   r”  r   rQ  rp  rr  ru  r«  ry  rz  r}  r  r‚  r   r   r   r   rl    s    
rl  c                   @   r£  )Ú
TimesTestsc                 C   sr   t  ¡ }|  |t j¡ dD ]}t||ƒ}|  |t¡ qt jdkr7|  |jd¡ |  |j	d¡ |  |j
d¡ d S d S )N)ÚuserÚsystemÚchildren_userÚchildren_systemÚelapsedrh  r   )r   re  r-   Útimes_resultr  r$  r   r=   r†  r‡  rˆ  )r0   re  Zfieldr'  r   r   r   Ú
test_timesÊ  s   

ýzTimesTests.test_timesN)rP   rQ   rR   rŠ  r   r   r   r   rƒ  É  r©  rƒ  Úforkc                   @   r£  )Ú	ForkTestsc                 C   s    d}t d|ƒ t d|dd d S )Nz´if 1:
            import os
            from test import support
            pid = os.fork()
            if pid != 0:
                support.wait_process(pid, exitcode=0)
        r•   Zmalloc_debug)ZPYTHONMALLOCr   r—   r   r   r   Ú	test_forkÛ  s   
zForkTests.test_forkN)rP   rQ   rR   r  r   r   r   r   rŒ  Ù  s    rŒ  Ú_fspathc                   @   s   e Zd ZdZeejƒZdS )ÚTestPEP519PurePythonz>Explicitly test the pure Python implementation of os.fspath().N)rP   rQ   rR   r  r”  r   rŽ  rQ  r   r   r   r   r  ì  s    r  Ú__main__)r"   r+   )Žrõ  Ú
contextlibr†  rE   rÎ  r‡  rI  rø  r†  r   r  ré  r`  r  rf  r¨   rÝ  r   r8   Z	sysconfigr;   rã  rb  rr  r€  r   r…  rÁ  Útestr   Ztest.supportr   r   r   r   r   r9   r   rÂ  Úsimplefilterrú  rQ  rd  rÊ  ÚImportErrorr  r×  ÚpwdZgetpwallr  r  Z	_testcapir   r   r­  Ztest.support.script_helperr   r   Ztest.support.os_helperr   r—  r   r   r   Úversionr   rî  ÚgetgidrG  r    r(   rí  rç   ZTestCaser*   rS   rè   rC  r•  ZBasicTestMappingProtocolr–  r  r   rD  rY  r`  rb  r  r™  r¤  rª  r·  Zget_config_varZOS_URANDOM_DONT_USE_FDrÃ  ÚcontextmanagerrÔ  rÕ  rï  rö  r.  r<  rX  rh  r’  rŸ  r®  r¯  rÕ  rÝ  ré  rë  rï  rù  r  r‘  rF  rL  re  rc  rP  r‚  r°  Zrequires_linux_versionr²  rË  rÖ  rÜ  rí  rþ  r  r  r(  r)  r,  r5  rl  rƒ  rŒ  r  rP   Úmainr   r   r   r   Ú<module>   s”  

ýÿÿÿÿÿ
ÿE  Z e \  ) EGj;)	-ÿýÿÿM ÿh#w%CGs/< 0![H 4ÿV OÿQ0
Q]
yBÿ  Y:
ÿ