a
    ¼3jv ã                	   @   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mZ d dlmZ d dlm Z  zd dl!Z!W n e"y    dZ!Y n0 zd dl#Z#W n e"yF   dZ#Y n0 zd dl$Z$W n e"yl   dZ$Y n0 zd dl%Z%dd„ e% &¡ D ƒZ'W n e"e(fy¨   g Z'Y n0 zd dl)m*Z*m+Z+ W n e"yÜ   ej, Z*Z+Y n0 d dl-m.Z. d d	lm/Z/m0Z0 d
Z1e2edƒre 3¡ d kZ1e2edƒr<ej4j5r<ej4j5 6d¡Z7nd
Z7ej 6d¡oXe 8¡ d kZ9dd„ Z:d¬dd„Z;G dd„ dej<ƒZ=G dd„ dej<ƒZ>G dd„ dej<ƒZ?G dd„ dej<ƒZ@d dlmAZA G dd„ deAjBƒZCG dd „ d ej<ƒZDe Ee2ed!ƒd"¡G d#d$„ d$eDƒƒZFG d%d&„ d&eDƒZGe Ee2ed!ƒd"¡G d'd(„ d(eFƒƒZHG d)d*„ d*ej<ƒZIe Ee2ed+ƒd,¡G d-d.„ d.ej<ƒƒZJG d/d0„ d0ej<ƒZKG d1d2„ d2ej<ƒZLG d3d4„ d4ej<ƒZMe Ee2ed5ƒd6¡G d7d8„ d8ej<ƒƒZNe Od9¡d:kpôe Od;¡d:kpôe Od<¡d:kZPe QePd=¡e Qejd>kd?¡G d@dA„ dAej<ƒƒƒZRejSd­dBdC„ƒZTe Ee2edDƒdE¡G dFdG„ dGej<ƒƒZUe EejdHkdI¡G dJdK„ dKej<ƒƒZVG dLdM„ dMej<ƒZWG dNdO„ dOej<ƒZXe QejdHkdP¡G dQdR„ dRej<ƒƒZYe QejdHkdP¡G dSdT„ dTej<ƒƒZZe EejdHkdI¡G dUdV„ dVej<ƒƒZ[e EejdHkdI¡G dWdX„ dXej<ƒƒZ\e Ee2edYƒdZ¡G d[d\„ d\ej<ƒƒZ]e EejdHkdI¡ej^G d]d^„ d^ej<ƒƒƒZ_e EejdHkdI¡G d_d`„ d`ej<ƒƒZ`e EejdHkdI¡G dadb„ dbej<ƒƒZaej^G dcdd„ ddej<ƒƒZbG dedf„ dfej<ƒZcG dgdh„ dhej<ƒZdG didj„ djej<ƒZeG dkdl„ dlej<ƒZfe gdm¡e Ee2ednƒdo¡G dpdq„ dqej<ƒƒƒZhe Ee2edrƒone2edsƒdt¡G dudv„ dvej<ƒƒZiG dwdx„ dxejjejkƒZle Ee2edyƒdz¡G d{d|„ d|ej<ƒƒZmd}d~„ Zne Eenƒ d¡e od€dd‚¡G dƒd„„ d„ej<ƒƒƒZpe Ee2ed…ƒd†¡G d‡dˆ„ dˆej<ƒƒZqe Ee2ed‰ƒdŠ¡e od‹dŒ¡G ddŽ„ dŽej<ƒƒƒZrG dd„ dej<ƒZsG d‘d’„ d’ej<ƒZtG d“d”„ d”ej<ƒZuG d•d–„ d–ej<ƒZve Ee2ed—ƒd˜¡G d™dš„ dšej<ƒƒZwG d›dœ„ dœej<ƒZxG ddž„ džej<ƒZyG dŸd „ d ej<ƒZzG d¡d¢„ d¢ej<ƒZ{G d£d¤„ d¤ej<ƒZ|e:d¥ƒG d¦d§„ d§ej<ƒƒZ}e2ed¨ƒrFG d©dª„ dªe{ƒZ~ed«krXe €¡  dS )®é    N)Úsupport)Úsocket_helper)Úwin32_is_iotc                 C   s   g | ]
}|j ‘qS © )Úpw_uid)Ú.0Úur   r   úH/www/server/python_manager/versions/3.9.10/lib/python3.9/test/test_os.pyÚ
<listcomp>2   ó    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_funcO   s    r   ó   contentc                 C   s:   t | ddƒ}| |¡ W d   ƒ n1 s,0    Y  d S )NÚxbr   )ÚopenÚwrite)ÚfilenameZcontentÚfpr   r   r	   Úcreate_fileS   s    r!   c                   @   s$   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_getcwdY   s    zMiscTests.test_getcwdc           
      C   s~  d}d}d}|d|t |ƒ   }t ¡ >}t |¡}|}t ¡ }|  ||¡ |t |ƒt tjj	ƒ  }|dkrvq t |ƒ|kr–|dkr–|d |… }tj 
||¡}zt |¡ t |¡ W n\ tyÔ   Y q Y nF ty }	 z,|	jtjkrW Y d }	~	q n‚ W Y d }	~	n
d }	~	0 0 |}q>tjr:tdt |ƒ› ƒ W d   ƒ n1 sP0    Y  W d   ƒ n1 sp0    Y  d S )NiÐ  éÈ   Zpython_test_dir_Úar   z!Tested current directory length: )ÚlenÚtempfileÚTemporaryDirectoryr   Z
change_cwdr   r$   ÚassertEqualÚpathÚsepÚjoinÚmkdirÚchdirÚFileNotFoundErrorÚOSErrorÚerrnoZENAMETOOLONGÚverboseÚprint)
r(   Zmin_lenZdirlenÚdirnameZtmpdirr1   Úexpectedr)   ZneedÚexcr   r   r	   Útest_getcwd_long_path]   s6    

zMiscTests.test_getcwd_long_pathc                 C   s.   t  ¡ }|  |t¡ |  t  |¡t  ¡ ¡ d S r#   )r   Úgetcwdbr%   Úbytesr0   Úfsdecoder$   r'   r   r   r	   Útest_getcwdb’   s    zMiscTests.test_getcwdbN)Ú__name__Ú
__module__Ú__qualname__r*   r>   rB   r   r   r   r	   r"   X   s   5r"   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d,S )-Ú	FileTestsc                 C   s   t j tj¡rt  tj¡ d S r#   )r   r1   Úlexistsr   ÚTESTFNÚunlink©r(   r   r   r	   ÚsetUpš   s    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   rH   ÚO_CREATÚO_RDWRÚcloseÚ
assertTrueÚaccessÚW_OK©r(   Úfr   r   r	   Útest_accessŸ   s    
zFileTests.test_accessc              	   C   s¨   t  tjt jt jB ¡}t  |¡}zTd}||d krht  |¡ |d7 }|dkrV|  d¡ |t  |¡ }}q&W t  |¡ nt  |¡ 0 t  	||d ¡ |  
tt j|d¡ d S )Nr   é   é
   z%couldn't allocate two consecutive fdsé   ó   a)r   r   r   rH   rL   rM   ÚduprN   ÚskipTestÚ
closerangeÚassertRaisesr7   r   )r(   Ú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   rH   ÚsysÚgetrefcountr\   Ú	TypeErrorr   Úrenamer0   )r(   r1   ÚoldÚnewr   r   r	   Útest_rename¹   s
    

zFileTests.test_renamec                 C   s€   t tjdƒ`}| d¡ | ¡  | ¡ }t |dd¡ t |d¡}|  	t
|ƒt¡ |  	|d¡ W d   ƒ n1 sr0    Y  d S )Núw+bó   spamr   é   )r   r   rH   r   ÚflushÚfilenor   ÚlseekÚreadr0   Útyper@   )r(   ÚfobjÚfdÚsr   r   r	   Ú	test_readÁ   s    
zFileTests.test_readzneeds INT_MAX < PY_SSIZE_T_MAXrV   rU   F)ÚsizeZmemuseÚdry_runc                 C   sh   |   tjtj¡ ttjdƒ ttjdƒ }t | ¡ |¡}W d   ƒ n1 sN0    Y  |  	|d¡ d S )Ns   testÚrb)
Ú
addCleanupr   rI   rH   r!   r   r   rn   rl   r0   )r(   rt   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   ƒ n1 s˜0    Y  d S )NÚbeanss   bacon
s   eggs
s   spam
rv   )s   bacons   eggsri   )r   r   r   rH   rL   ÚO_WRONLYr\   rc   r   Ú	bytearrayÚ
memoryviewrN   r0   rn   Ú
splitlines)r(   rq   rp   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_CONSOLEr0   )r(   Ú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†   ra   Ú
executable©r(   Úcoder   r   r	   Útest_write_windows_consoleò   s    z$FileTests.test_write_windows_consolec                 G   s.   t  tjt j¡}t j|g|¢R Ž }| ¡  d S r#   )r   r   r   rH   ÚO_RDONLYÚfdopenrN   )r(   r„   rq   rS   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   rH   rL   rM   rN   r   ©r(   rq   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¡ W d   ƒ n1 sŽ0    Y  d S )Nz.2ó   1ó   2r   Ú1)r   rH   rw   rI   r!   r   Úreplacer\   r6   Ústatr   r0   rn   )r(   ÚTESTFN2rS   r   r   r	   Útest_replace
  s    

zFileTests.test_replacec                 C   s"   t jtt jdd d}t  |¡ d S )Néÿ  )r1   ÚflagsÚmodeÚdir_fd)r   r   Ú__file__r   rN   rR   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 n ttfy8   Y n0 d S )NÚsymlinkÚtargetF)ÚsrcÚdstÚtarget_is_directoryrž   )r   Zget_attributer   rH   ÚNotImplementedErrorr7   )r(   r¡   r   r   r	   Útest_symlink_keywords  s    ÿ
zFileTests.test_symlink_keywordsÚcopy_file_rangeztest needs os.copy_file_range()c                 C   s<   |   t¡ t ddd¡ W d   ƒ n1 s.0    Y  d S )Nr   rU   iöÿÿÿ)r\   Ú
ValueErrorr   r¨   rJ   r   r   r	   Ú#test_copy_file_range_invalid_values$  s    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
yÄ } z$|jtjkr¦‚ |  |¡ W Y d }~n`d }~0 0 |  |tddƒ¡ t|dƒ(}|  | ¡ |d |… ¡ W d   ƒ n1 s0    Y  d S )Nz.3ó
   0123456789rv   rh   é   r   é   )r   rH   r!   rw   rI   r   rN   rl   r   r¨   r7   r8   ÚENOSYSrZ   ÚassertInÚranger0   rn   )	r(   r™   rx   Ú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
yÖ } z$|jtjkr¸‚ |  |¡ W Y d }~nŒd }~0 0 |  |
td	|d
 ƒ¡ t|dƒ}| ¡ }W d   ƒ n1 s0    Y  |  |d |… d| ¡ |  ||d … ||||
 … ¡ d S )Nz.4r«   r­   é   r¬   rv   rh   )Z
offset_srcZ
offset_dstr   rU   ó    )r   rH   r!   rw   rI   r   rN   rl   r   r¨   r7   r8   r®   rZ   r¯   r°   rn   r0   )r(   ZTESTFN4rx   Zbytes_to_copyZin_skipZout_seekr±   r²   r³   r´   rµ   r¶   rn   r   r   r	   Útest_copy_file_range_offsetK  s<    


þ
 (ÿz%FileTests.test_copy_file_range_offsetN) rC   rD   rE   rK   ÚtearDownrT   r_   r   Úcpython_onlyrg   rs   r   r   r   r   Z
bigmemtestry   r   r†   ra   ÚplatformrŒ   r   r“   rš   r    r§   r   r   rª   r·   rº   r   r   r   r	   rF   ™   s<   


ÿÿ
	

!rF   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   rH   Úfnamerw   rI   r!   rJ   r   r   r	   rK   z  s    zStatAttributeTests.setUpc           
   	   C   sæ  t  |¡}|  |tj d¡ |  |jd¡ t|ƒ}ttƒD ]d}|d d… dkr:| ¡ }| d¡rjdd„ }ndd„ }|  |t||ƒƒ|tt|ƒ ¡ |  	||¡ q:d 
¡ D ]8}tt||ƒd ƒ}t||d	 ƒd
 }| j||dd q¨z|d  |  d¡ W n ty   Y n0 zd|_|  d¡ W n ty6   Y n0 zd|_|  d¡ W n ttfyd   Y n0 zd|_|  d¡ W n tyŽ   Y n0 zt  d¡}	|  d¡ W n ty¼   Y n0 zt  d¡}	W n tyà   Y n0 d S )Nr¸   ZST_ZTIMEc                 S   s   t | ƒS r#   )Úint©Úxr   r   r	   ÚtruncŒ  r   z7StatAttributeTests.check_stat_attributes.<locals>.truncc                 S   s   | S r#   r   rÂ   r   r   r	   rÄ   Ž  r   zst_atime st_mtime st_ctimei † Z_nsi'  rW   ©Údeltar+   úNo exception raisedrU   ©rV   ©r   rU   rW   r¸   rj   r¬   r­   é   é   é	   rV   é   é   é   é   )r   r˜   r0   ÚST_SIZEÚst_sizeÚdirÚlowerÚendswithÚgetattrr¯   ÚsplitrÁ   ÚassertAlmostEqualÚfailÚ
IndexErrorÚst_modeÚAttributeErrorÚst_rdevrc   ÚparrotÚstat_result)
r(   rÀ   ÚresultÚmembersr   ÚattrrÄ   ZfloatyZnanosecondyÚresult2r   r   r	   Úcheck_stat_attributes  s^    


ÿ
z(StatAttributeTests.check_stat_attributesc                 C   s   |   | j¡ d S r#   )rä   rÀ   rJ   r   r   r	   Útest_stat_attributesÀ  s    z'StatAttributeTests.test_stat_attributesc                 C   sF   z| j  t ¡ ¡}W n" ty6   |  d| j  ¡ Y n0 |  |¡ d S )Nz#cannot encode %a for the filesystem)rÀ   Úencodera   ÚgetfilesystemencodingÚUnicodeEncodeErrorrZ   rä   )r(   rÀ   r   r   r	   Útest_stat_attributes_bytesÃ  s
    z-StatAttributeTests.test_stat_attributes_bytesc                 C   sf   t  | j¡}ttjd ƒD ]F}t ||¡}|  d|¡ |dk rJ|  d|¡ t |¡}|  	||¡ qd S )NrU   s   stat_resultrj   s   cos
stat_result
)
r   r˜   rÀ   r°   ÚpickleÚHIGHEST_PROTOCOLÚdumpsr¯   Úloadsr0   ©r(   rà   ÚprotoÚpZ	unpickledr   r   r	   Útest_stat_result_pickleÊ  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y–   Y n0 zd|_|  d¡ W n ty¾   Y n0 zt  d¡}|  d¡ W n tyê   Y n0 zt  d¡}W n ty   Y n0 d S )	Nr¸   )
ZbsizeZfrsizeZblocksZbfreeZbavailÚfilesZffreeZfavailÚflagZnamemaxZf_rV   rU   rÇ   rÈ   rÉ   )r   rò   rÀ   r0   Úf_bfreeÚ	enumeraterÖ   rO   Ú
isinstanceÚf_fsidrÁ   r-   rÙ   rÜ   rÞ   Ústatvfs_resultrc   )r(   rà   rá   ÚvalueÚmemberrã   r   r   r	   Útest_statvfs_attributesÔ  s4    
z*StatAttributeTests.test_statvfs_attributesúneed os.statvfs()c                 C   sf   t  | j¡}ttjd ƒD ]F}t ||¡}|  d|¡ |dk rJ|  d|¡ t |¡}|  	||¡ qd S )NrU   s   statvfs_resultrj   s   cos
statvfs_result
)
r   rò   rÀ   r°   rê   rë   rì   r¯   rí   r0   rî   r   r   r	   Útest_statvfs_result_pickle   s    
z-StatAttributeTests.test_statvfs_result_pickler‡   úWin32 specific testsc              
   C   s\   zt  d¡ W nH ty*   |  d¡ Y n. tyV } z|  d¡ W Y d }~n
d }~0 0 d S )Nzc:\pagefile.syszc:\pagefile.sys does not existzCould not stat pagefile.sys)r   r˜   r6   rZ   r7   rÙ   ©r(   r¶   r   r   r	   Útest_1686475  s    zStatAttributeTests.test_1686475Úpipezrequires os.pipe()c              	   C   s   t  ¡ \}}z"t  |¡ W t  |¡ t  |¡ nt  |¡ t  |¡ 0 |  t¡}t  |¡ W d   ƒ n1 sp0    Y  |  |jjtj	¡ d S r#   )
r   r  r˜   rN   r\   r7   r0   Ú	exceptionr8   ÚEBADF)r(   r   ÚwÚctxr   r   r	   Ú
test_15261  s    
ÿ
(zStatAttributeTests.test_15261c                 C   sF   |   t|dƒ¡ |   t|jtƒ¡ |   d|j  ko:dkn  ¡ d S )NÚst_file_attributesr   ì   ÿÿ )rO   r   r÷   r  rÁ   )r(   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À   r
  r0   r  ÚFILE_ATTRIBUTE_DIRECTORYr   rH   r4   rw   Úrmdir)r(   rà   r;   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   r1   r3   ÚenvironrÀ   rw   r   rI   r!   r‚   Ú
check_callr˜   ÚassertNotEqualrÒ   )r(   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   r1   Ú
splitdriver$   r˜   r0   rÛ   ÚS_IFBLK)r(   rÀ   rà   r   r   r	   Útest_stat_block_deviceT  s    
z)StatAttributeTests.test_stat_block_deviceN)rC   rD   rE   rK   rä   rå   ré   rñ   r   r   r   r   rü   rþ   ra   r½   r  r  r
  r  r  r  r   r   r   r	   r¾   y  s2   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   rH   r;   r   r1   r3   rÀ   rw   Úrmtreer4   r!   rJ   r   r   r	   rK   ^  s
    zUtimeTests.setUpc                 C   s4   t  |¡}|j|d kp2|j|d kp2|j|d kS )NrÊ   rË   rÌ   )r   r˜   Úst_atimeÚst_mtimeÚst_ctime)r(   r   Ústr   r   r	   Úsupport_subsecondf  s    
ÿþzUtimeTests.support_subsecondNc                 C   s¸   |s
| j }|  |¡}|r"d}d}nd}d}||||fƒ t |¡}|rt| 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À   r  r   r˜   rØ   r  r  r0   Úst_atime_nsÚst_mtime_ns)r(   Úset_timer   r  Úatime_nsÚmtime_nsr  r   r   r	   Ú_test_utimen  s"    

zUtimeTests._test_utimec                 C   s   dd„ }|   |¡ d S )Nc                 S   s   t j| |d d S ©N©Úns©r   Úutime©r   r)  r   r   r	   r#  Ž  s    z'UtimeTests.test_utime.<locals>.set_time©r&  ©r(   r#  r   r   r	   Ú
test_utime  s    zUtimeTests.test_utimec                 C   s   | d d S )Nr   g•Ö&è.>r   r(  r   r   r	   Ú	ns_to_sec“  s    zUtimeTests.ns_to_secc                    s   ‡ fdd„}ˆ   |¡ d S )Nc                    s0   |\}}ˆ   |¡}ˆ   |¡}t | ||f¡ d S r#   ©r0  r   r+  ©r   r)  r$  r%  ZatimeÚmtimerJ   r   r	   r#  œ  s    

z2UtimeTests.test_utime_by_indexed.<locals>.set_timer-  r.  r   rJ   r	   Útest_utime_by_indexedš  s    z UtimeTests.test_utime_by_indexedc                    s   ‡ fdd„}ˆ   |¡ d S )Nc                    s2   |\}}ˆ   |¡}ˆ   |¡}tj| ||fd d S )N)Útimesr1  r2  rJ   r   r	   r#  ¦  s    

z0UtimeTests.test_utime_by_times.<locals>.set_timer-  r.  r   rJ   r	   Útest_utime_by_times¥  s    zUtimeTests.test_utime_by_timesz9follow_symlinks support for utime required for this test.c                 C   s   dd„ }|   |¡ d S )Nc                 S   s   t j| |dd d S )NF)r)  Úfollow_symlinksr*  r,  r   r   r	   r#  ²  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   s   dd„ }|   |¡ d S )Nc                 S   sB   t | ddƒ"}tj| ¡ |d W d   ƒ n1 s40    Y  d S )NÚwbr   r(  )r   r   r+  rl   )r   r)  r    r   r   r	   r#  »  s    z*UtimeTests.test_utime_fd.<locals>.set_timer-  r.  r   r   r	   Útest_utime_fd¸  s    zUtimeTests.test_utime_fdz0dir_fd support for utime required for this test.c                 C   s   dd„ }|   |¡ d S )Nc              	   S   sN   t j | ¡\}}t  |t j¡}zt j|||d W t  |¡ nt  |¡ 0 d S )N)rž   r)  )r   r1   r×   r   r   r+  rN   )r   r)  r;   r   Údirfdr   r   r	   r#  Å  s
    z.UtimeTests.test_utime_dir_fd.<locals>.set_timer-  r.  r   r   r	   Útest_utime_dir_fdÂ  s    zUtimeTests.test_utime_dir_fdc                 C   s   dd„ }| j || jd d S )Nc                 S   s   t j| |d d S r'  r*  r,  r   r   r	   r#  Ð  s    z1UtimeTests.test_utime_directory.<locals>.set_time©r   )r&  r;   r.  r   r   r	   Útest_utime_directoryÏ  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À   r  r   r˜   r  rØ   )r(   r#  ÚcurrentrÆ   r  r?  r   r   r	   Ú_test_utime_currentÕ  s    
ÿ
ÿzUtimeTests._test_utime_currentc                    s   ‡ fdd„}ˆ   |¡ d S )Nc                    s   t  ˆ j¡ d S r#   ©r   r+  rÀ   r=  rJ   r   r	   r#  ì  s    z/UtimeTests.test_utime_current.<locals>.set_time©rB  r.  r   rJ   r	   Útest_utime_currentë  s    zUtimeTests.test_utime_currentc                    s   ‡ fdd„}ˆ   |¡ d S )Nc                    s   t  ˆ jd ¡ d S r#   rC  r=  rJ   r   r	   r#  ò  s    z3UtimeTests.test_utime_current_old.<locals>.set_timerD  r.  r   rJ   r	   Útest_utime_current_oldñ  s    z!UtimeTests.test_utime_current_oldc                 C   sl   t jdkrhtj tj |¡¡d d }dd l}|jj}| 	dd¡}| 
|d dd d d |t|ƒ¡}|rh|jS d S )Nr‡   r   ú\Ú r‘   )ra   r½   r   r1   r  ÚabspathÚctypesÚwindllÚkernel32Zcreate_unicode_bufferZGetVolumeInformationWr-   rú   )r(   r1   ÚrootrJ  rL  Ú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 NTFSr  )	rP  r;   rZ   r   r+  rÀ   r0   r˜   r  )r(   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 s20    Y  |   t¡" t | jddg¡ W d   ƒ n1 sn0    Y  |   t¡ t | jd¡ W d   ƒ n1 s¦0    Y  |   t¡ t | jd¡ W d   ƒ n1 sÞ0    Y  |   t¡$ tj| jddgd W d   ƒ n1 s0    Y  |   t¡  tj| jdd W d   ƒ n1 sZ0    Y  |   t¡  tj| jdd W d   ƒ n1 s–0    Y  tjtjvrì|   t¡" tj| jddd W d   ƒ n1 sâ0    Y  tjtjvrft	| jdd	ƒL}|   t¡  t | 
¡ d¡ W d   ƒ n1 s<0    Y  W d   ƒ n1 s\0    Y  tjtjvr²|   t¡" tj| jdd	d
 W d   ƒ n1 s¨0    Y  d S )N)r¬   r¬   r(  r¬   )r¬   )r¬   r¬   r¬   F©r7  r9  r   ©rž   )r\   r©   r   r+  rÀ   rc   Úsupports_follow_symlinksr¦   Úsupports_fdr   rl   Úsupports_dir_fd)r(   r    r   r   r	   Útest_utime_invalid_arguments  s0    00,,4002Pz'UtimeTests.test_utime_invalid_argumentsc                 C   sÒ   dd„ }|   t¡( tj| j|dƒdfd W d   ƒ n1 s@0    Y  |   t¡( tj| j|dƒdfd W d   ƒ n1 s‚0    Y  |   t¡( tj| j|dƒdfd W d   ƒ n1 sÄ0    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__0  s    zJUtimeTests.test_issue31577.<locals>.get_bad_int.<locals>.BadInt.__divmod__N)rC   rD   rE   rZ  r   rX  r   r	   ÚBadInt/  s   r[  r   )rY  r[  r   rX  r	   Úget_bad_int.  s    z/UtimeTests.test_issue31577.<locals>.get_bad_inté*   rU   r(  r   )rU   rW   r¸   )r\   rc   r   r+  rÀ   )r(   r\  r   r   r	   Útest_issue31577*  s    66zUtimeTests.test_issue31577)N)rC   rD   rE   rK   r  r&  r/  Ústaticmethodr0  r4  r6  r   r   r   r+  rT  r8  rU  r:  rV  r<  r>  rB  rE  rF  rP  rQ  rW  r   r¼   r^  r   r   r   r	   r  ]  s:   

	ÿ
ÿ
ÿ

r  )Úmapping_testsc                   @   s  e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Ze	 
eoBej e¡d¡dd„ ƒZe	 
eobej e¡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-d.„ Z!d/d0„ Z"d1d2„ Z#d3d4„ Z$d5d6„ Z%dS )7Ú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©r(   Úkeyrú   r   r   r	   rK   A  s
    zEnvironTests.setUpc                 C   s:   t j ¡  t j | j¡ t jr6t j ¡  t j | j¡ d S r#   )r   r  ÚclearÚupdaterc  rd  re  rf  rJ   r   r   r	   r»   H  s
    

zEnvironTests.tearDownc                 C   s   ddddœS )NZVALUE1ZVALUE2ZVALUE3)ZKEY1ZKEY2ZKEY3r   rJ   r   r   r	   rg  O  s    zEnvironTests._referencec                 C   s   t j ¡  t jS r#   )r   r  rk  rJ   r   r   r	   Ú_empty_mappingR  s    
zEnvironTests._empty_mappingzrequires a shellc                 C   sb   t j ¡  t jjdd t  dt ¡(}| ¡  ¡ }|  |d¡ W d   ƒ n1 sT0    Y  d S )NZWorld)ZHELLOz%s -c 'echo $HELLO')	r   r  rk  rl  Úpopenr   rn   Ústripr0   )r(   rn  rú   r   r   r	   Útest_update2W  s
    
zEnvironTests.test_update2c                 C   sx   t  dt ¡V}t|ƒ}|  t|ƒd¡ |  t|ƒd¡ |  t|ƒd¡ |  tt|¡ W d   ƒ n1 sj0    Y  d S )Nz %s -c 'echo "line1
line2
line3"'zline1
zline2
zline3
)r   rn  r   Úiterr0   Únextr\   ÚStopIteration)r(   rn  Ú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  rh  r0   ro   r&   )r(   rj  Úvalr   r   r	   Útest_keyvalue_typesm  s    z EnvironTests.test_keyvalue_typesc                 C   s.   |   ¡  ¡ D ]\}}|  tj |¡|¡ qd S r#   )rg  rh  r0   r   r  Úgetri  r   r   r	   Ú
test_itemsr  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   rj  rú   r   r   r	   Ú	<genexpr>z  s   ÿz-EnvironTests.test___repr__.<locals>.<genexpr>N)r   r  r0   Úreprr{  r3   rh  )r(   Úenvr   r   r	   Útest___repr__w  s    þzEnvironTests.test___repr__c                 C   sZ  t j t j¡}g d¢}dt j |¡i}t j}z8t|ƒt _|  |t  ¡ ¡ |  |t jd d¡ W |t _n|t _0 |  |t  i ¡¡ |  dt  ddi¡¡ |  |t  |¡¡ t j	rVz:t
jdd dd	d
œ}W d   ƒ n1 sÞ0    Y  W n tyü   Y n0 |  tt j|¡ |  t  ddi¡dg¡ |  t  ddi¡dg¡ |  t  ddi¡dg¡ d S )N)z/montyz/pythonrH  z/flying/circusÚPATH©r~  ©rH  rH  T)Úrecordr–   r•   )r€  ó   PATHr„  ó   abcÚabc)r   Údefpathr×   Úpathsepr3   r  rb  ÚassertSequenceEqualÚget_exec_pathrd  ÚwarningsÚcatch_warningsÚBytesWarningr\   r©   )r(   Zdefpath_listZ	test_pathZtest_envZsaved_environZ	mixed_envr   r   r	   Útest_get_exec_path~  s8    
,ÿÿÿzEnvironTests.test_get_exec_pathz#os.environb required for this test.c                 C   s¸   d}z|  t ¡ d¡}W n* tyB   dt ¡ f }|  |¡ Y n0 |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   bytesr@   )
ræ   ra   rç   rè   rZ   r   r  r0   re  Údecode)r(   rú   Zvalue_bytesr?  Z	value_strr   r   r	   Útest_environb§  s$    
ÿÿ

zEnvironTests.test_environbc                 C   sÆ   d}d}d|›d}t  ¡ –}| |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   ƒ n1 s¸0    Y  d S )NZPYTHONTESTVARZ	testvaluez%import os; print(repr(os.environ.get(z)))rˆ   T)ÚcheckÚstdoutÚtext)r   ZEnvironmentVarGuardÚpopr   Úputenvr‚   Úrunra   r‰   ÚPIPEr0   r•  Úrstripr}  Úunsetenv)r(   r   rú   r‹   r~  Úprocr   r   r	   Útest_putenv_unsetenv¾  s    
ÿ
ÿz!EnvironTests.test_putenv_unsetenvrV   r­   c                 C   s~   dD ].}|   ttftj|d¡ |   ttftj|¡ qtjdkrzdd }|   ttj|d¡ |   ttjd|¡ |   ttj|¡ d S )N)rH  z=namezna=mezname=zname zna merú   r‡   rÃ   é €  r–   ÚX)r\   r7   r©   r   r˜  rœ  ra   r½   )r(   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<0    Y  |  |jjd |¡ |  |jj	¡ |  t¡}tj|= W d   ƒ n1 s0    Y  |  |jjd |¡ |  |jj	¡ d S )NZ
missingkeyr   )
ÚassertNotInr   r  r\   ÚKeyErrorÚassertIsr  r„   rO   Ú__suppress_context__)r(   ÚmissingÚcmr   r   r	   Útest_key_typeá  s    (&zEnvironTests.test_key_typec                 C   sT   t |ƒ}d}t|ƒ dtj|< z&t|ƒ |  tj| d¡ W tj|= n
tj|= 0 d S )NZ__new_key__Ztest_environ_iteration)rq  rr  r   r  r0   )r(   Z
collectionÚiteratorZnew_keyr   r   r	   Ú_test_environ_iterationï  s    
z$EnvironTests._test_environ_iterationc                 C   s   |   tj¡ d S r#   )rª  r   r  rJ   r   r   r	   Ú(test_iter_error_when_changing_os_environþ  s    z5EnvironTests.test_iter_error_when_changing_os_environc                 C   s   |   tj ¡ ¡ d S r#   )rª  r   r  rh  rJ   r   r   r	   Ú.test_iter_error_when_changing_os_environ_items  s    z;EnvironTests.test_iter_error_when_changing_os_environ_itemsc                 C   s   |   tj ¡ ¡ d S r#   )rª  r   r  ÚvaluesrJ   r   r   r	   Ú/test_iter_error_when_changing_os_environ_values  s    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 sL0    Y  |  ||¡ d S )Nz -c 'echo $ú')r   r   r1   Úexistsrn  rn   ro  r0   )r(   Úvarr<   rn  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Ú3rH  )r   r  rb  rl  ÚassertDictEqualr0   rh  r¤  ÚNotImplementedÚ__or__r²  ©r(   Úoverridden_keyrµ  Únew_vars_dictr<   Ú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  rb  rl  r0   r²  )r(   r¾  r¿  r<   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@0    Y  |  t¡& ddi}t  j|O  _W d   ƒ n1 s€0    Y  |  |t j¡ d S )NrU   r¶  )r   r  Úcopyr\   rc   r0   )r(   Zos_environ_copyZdict_with_bad_keyZdict_with_bad_valr   r   r	   Útest_ior_operator_invalid_dicts2  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Ã  )r(   r¾  rÁ  r<   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  rb  rl  rº  r0   rh  r¤  r»  Ú__ror__r²  r½  r   r   r	   Útest_ror_operatorN  s    

zEnvironTests.test_ror_operator)&rC   rD   rE   Ú__doc__Z	type2testrK   r»   rg  rm  r   r   r   r   r1   r°  rp  ru  rw  ry  r  rŽ  rd  r“  rž  r   Zrequires_mac_verr¡  r¨  rª  r«  r¬  r®  r²  rÂ  rÄ  rÆ  rÇ  rÉ  r   r   r   r	   ra  =  sH   ÿ
ÿ
)ÿ


	ra  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 ©Nr7  Úfollowlinks)r—  r   Úwalk)r(   ÚtopÚkwargsr   r   r	   rÎ  g  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 ]H}t|ddd"}| d| d ¡ W d   ƒ n1 s<0    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 n40 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Ã   úutf-8©ÚencodingzI'm z" and proud of it.  Blame test_os.
ÚbrokenTZtmp5)rÙ  rÚ  rÛ  rÖ  r   rU   )r   r1   r3   rw   r   r  rH   Ú	walk_pathÚ	sub1_pathÚ
sub11_pathÚ	link_pathÚmakedirsr   r   Úcan_symlinkr¡   rI  Ú	sub2_treeÚchmodÚlistdirÚPermissionErrorr˜   ÚS_IRWXUrI   r  )r(   r3   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_pathr1   rS   r   r   r	   rK   l  sT    








6
ÿ

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 )Nrj   r   rU   rÑ  r¸   rW   éÿÿÿÿrÓ  rÔ  rÒ  rÕ  )	ÚlistrÎ  rà  r0   r-   Úsortrá  râ  ræ  ©r(   Ú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Ñ  rW   r   rÓ  rÔ  rU   rë  )rà  rÎ  ÚappendÚremover0   r-   rí  ræ  )r(   rà  rï  rM  Údirsró   r   r   r	   Útest_walk_pruneÂ  s    zWalkTests.test_walk_prunec                 C   s   |   t| jƒ¡ d S r#   )rô  r   rà  rJ   r   r   r	   Útest_file_like_pathÕ  s    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©Útopdownrj   r¸   rU   r   rÑ  rW   rë  rÓ  rÔ  rÒ  rÕ  )	rì  rÎ  rà  r0   r-   rí  râ  rá  ræ  rî  r   r   r	   Útest_walk_bottom_upØ  s$    
ÿ

ÿÿÿzWalkTests.test_walk_bottom_upc                 C   sh   t  ¡ s|  d¡ | j| jdd}|D ]2\}}}|| jkr&|  |g ¡ |  |dg¡  qdq&|  d¡ d S )Nzneed symlink supportTrR  rØ  z+Didn't follow symlink with followlinks=True)r   rå  rZ   rÎ  rà  rã  r0   rÙ   )r(   Úwalk_itrM  ró  ró   r   r   r	   Útest_walk_symlinkí  s    

zWalkTests.test_walk_symlinkc              
   C   sÜ   g }| j | j|jd}t|ƒ\}}}|  |g ¡ d}tj ||¡}tj ||d ¡}t ||¡ zhdd„ |D ƒ}	|  	|¡ |  
||	¡ |  
||	¡ |D ]"}
|
|kr–|  tj ||
¡|	¡ q–W t ||¡ nt ||¡ 0 d S )N)ÚonerrorrÑ  z.newc                 S   s   g | ]\}}}|‘qS r   r   )r   r   ÚdrS   r   r   r	   r
     r   z/WalkTests.test_walk_bad_dir.<locals>.<listcomp>)rÎ  rà  rñ  rr  r0   r   r1   r3   rd   rO   r¢  r¯   )r(   Úerrorsrù  rM  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 ]>}||rldgng g f}|D ]}ˆ t|ƒ|¡ qxt j 	|¡}q\‡ ‡fdd„tdƒD ƒ}ˆ }t|d ƒD ]D}|||k rØdgng g f}|D ]}ˆ t|ƒ|¡ qät j |d¡}qÄd S )	Né   Zdeeprü  c                    s   g | ]}ˆj ˆ d d‘qS )Frö  ©rÎ  ©r   Új©Úbaser(   r   r	   r
     r   z7WalkTests.test_walk_many_open_files.<locals>.<listcomp>r‘   rU   c                    s   g | ]}ˆj ˆ d d‘qS )Trö  r  r  r  r   r	   r
     r   )
r   r1   r3   r   rH   rä  r°   r0   rr  r;   )r(   Údepthrð   Zitersrµ   r<   rt  r   r  r	   Útest_walk_many_open_files  s"    
z#WalkTests.test_walk_many_open_files)N)rC   rD   rE   rÊ  rÎ  rK   rð  rô  rõ  rø  rú  r  r	  r   r   r   r	   rË  b  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   s0   | j |fi |¤ŽD ]\}}}}|||fV  qd S r#   )r
  )r(   rÏ  rÐ  rM  ró  ró   Zroot_fdr   r   r	   rÎ  *  s    zFwalkTests.walkc                 O   s   t j|i |¤ŽS r#   )r   r
  ©r(   r„   rÐ  r   r   r	   r
  .  s    zFwalkTests.fwalkc           
      C   sÂ   |  ¡ }|  ¡ }tjdddD ]ž\}}|j||d |j||d i }tjf i |¤ŽD ]\}}}t|ƒt|ƒf||< qV| jf i |¤ŽD ]4\}}}}	|  ||¡ |  	|| t|ƒt|ƒf¡ q†qdS )z.
        compare with walk() results.
        ©TFrW   ©Úrepeat)r÷  rÍ  )r÷  r7  N)
rÅ  Ú	itertoolsÚproductrl  r   rÎ  Úsetr
  r¯   r0   )
r(   Úwalk_kwargsÚfwalk_kwargsr÷  r7  r<   rM  ró  ró   Úrootfdr   r   r	   Ú_compare_to_walk1  s    zFwalkTests._compare_to_walkc                 C   s   dt ji}|  ||¡ d S )NrÏ  )r   rH   r  )r(   rÐ  r   r   r	   Útest_compare_to_walkC  s    
zFwalkTests.test_compare_to_walkc              	   C   sT   zBt  dt j¡}dtji}| ¡ }||d< |  ||¡ W t  |¡ nt  |¡ 0 d S )NÚ.rÏ  rž   )r   r   r   r   rH   rÅ  r  rN   )r(   rq   r  r  r   r   r	   Útest_dir_fdG  s    
zFwalkTests.test_dir_fdc                 C   s|   t jdddD ]h\}}tj|d f}| j|d|iŽD ]B\}}}}t |¡ t |¡ |  t	t 
|¡ƒt	|ƒt	|ƒB ¡ q2qd S )Nr  rW   r  r7  )r  r  r   rH   r
  r   Úfstatr˜   r0   r  rè  )r(   r÷  r7  r„   rM  ró  ró   r  r   r   r	   Útest_yields_correct_dir_fdQ  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 )NrU   é   )	r   rY   rN   r°   r
  r   rH   rw   r0   )r(   Zminfdrµ   rÃ   Znewfdr   r   r	   Útest_fd_leak]  s    


zFwalkTests.test_fd_leakN)rC   rD   rE   rÊ  rÎ  r
  r  r  r  r  r  r	  r   r   r   r	   r  &  s   
r  c                   @   s   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 ]p\}}}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Î  ÚfsencoderA   rì  Úmap)	r(   rÏ  rÐ  ÚbrootÚbdirsÚbfilesrM  ró  ró   r   r   r	   rÎ  p  s    "
zBytesWalkTests.walkN)rC   rD   rE   rÊ  rÎ  r   r   r   r	   r  n  s   r  c                   @   s   e Zd ZdZddd„ZdS )ÚBytesFwalkTestsr  r  c                 o   s˜   t jt  |¡g|¢R i |¤ŽD ]t\}}}}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   rA   rì  r!  )r(   rÏ  r„   rÐ  r"  r#  r$  ÚtopfdrM  ró  ró   r   r   r	   r
  ~  s    *
zBytesFwalkTests.fwalkN)r  )rC   rD   rE   rÊ  r
  r   r   r   r	   r%  {  s   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 )ÚMakedirTestsc                 C   s   t  tj¡ d S r#   ©r   r4   r   rH   rJ   r   r   r	   rK   ‰  s    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 ©Nrþ  r   Zdir3Zdir4Zdir5Zdir6)	r   rH   r   r1   r3   rä  r\   r7   Úcurdir)r(   r  r1   r   r   r	   Útest_makedirŒ  s    


ÿzMakedirTests.test_makedirc                 C   sº   t  d¡œ t j}tj |d¡}tj |d¡}t |d¡ |  tj |¡¡ |  tj 	|¡¡ tj
dkr˜|  t |¡jd@ d¡ |  t |¡jd@ d¡ W d   ƒ n1 s¬0    Y  d S )NrW   rþ  r   im  Úntr›   iý  )r   Z
temp_umaskrH   r   r1   r3   rä  rO   r°  Úisdirr   r0   r˜   rÛ   )r(   r  Úparentr1   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 )
Nrþ  r›   é   F©Úexist_okiþ  T)r   r2  ú/)
r   r1   r3   r   rH   Úumaskrä  r\   r7   rI  )r(   r1   r   Úold_maskr   r   r	   Ú test_exist_ok_existing_directory§  s    

z-MakedirTests.test_exist_ok_existing_directoryc              	   C   s   t j tjd¡}tj}d}t  d¡}zÊt t  	tj¡j
¡}zt  tj||B ¡ W n tyl   t d¡‚Y n0 t  	tj¡j
|@ |krŽt d¡‚t  |||B ¡ t j||dd t  |t t  	|¡j
¡| @ ¡ t j|||B dd W t  |¡ nt  |¡ 0 d S )Nrþ  r›   r0  zCannot set S_ISGID for dir.z No support for S_ISGID dir mode.Tr1  )r   r1   r3   r   rH   r˜   ÚS_ISGIDr4  ÚS_IMODEÚlstatrÛ   rç  ré  r   ÚSkipTesträ  )r(   r1   r7  r   r5  Zexisting_testfn_moder   r   r	   Útest_exist_ok_s_isgid_directoryµ  s&    
ÿ
 z,MakedirTests.test_exist_ok_s_isgid_directoryc                 C   s   t j}tj t jd¡}t|dƒ}| d¡ W d   ƒ n1 s@0    Y  |  ttj	|¡ | jttj	|dd | jttj	|dd t 
|¡ d S )Nrþ  r  r†  Fr1  T)r   rH   r   r1   r3   r   r   r\   r7   rä  rò  )r(   r  r1   rS   r   r   r	   Ú#test_exist_ok_existing_regular_fileÐ  s    (z0MakedirTests.test_exist_ok_existing_regular_filec              	   C   sL   t j tjdddddd¡}t j |¡s>|tjkr>t j |¡}qt  |¡ d S r)  )r   r1   r3   r   rH   r°  r;   Ú
removedirs©r(   r1   r   r   r	   r»   Ú  s    ÿzMakedirTests.tearDownN)
rC   rD   rE   rK   r+  r/  r6  r;  r<  r»   r   r   r   r	   r'  ˆ  s   
r'  Ú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oHeeƒd	kd
¡dd„ ƒZe e ojeeƒd	kd¡dd„ ƒZedd„ ƒZdS )ÚChownFileTestsc                 C   s   t  tj¡ d S r#   r(  ©Úclsr   r   r	   Ú
setUpClassé  s    zChownFileTests.setUpClassc                 C   s”   t  tj¡}|j}|j}ddt d¡t 	dd¡fD ]0}|  
tt jtj||¡ |  
tt jtj||¡ q2|  t  tj||¡¡ |  t  tjdd¡¡ d S )Ng      ð¿y       €      ð¿rë  éþÿÿÿrW   )r   r˜   r   rH   Úst_uidÚst_gidÚdecimalZDecimalÚ	fractionsZFractionr\   rc   r?  ÚassertIsNone)r(   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 )NrW   ztest needs at least 2 groups)r   rM  r-   rZ   r˜   r   rH   rE  r?  rF  r0   )r(   ÚgroupsZgid_1Zgid_2rJ  rK  r   r   r	   Útest_chown_gid÷  s    
zChownFileTests.test_chown_gidrU   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 ©NrW   )	Ú	all_usersr   r˜   r   rH   rF  r?  rE  r0   )r(   Úuid_1Úuid_2rK  rJ  r   r   r	   Útest_chown_with_root  s    z#ChownFileTests.test_chown_with_rootz2test needs non-root account and more than one userc                 C   sl   t d d… \}}t tj¡j}|  t¡0 t tj||¡ t tj||¡ W d   ƒ n1 s^0    Y  d S rP  )	rQ  r   r˜   r   rH   rF  r\   ré  r?  )r(   rR  rS  rK  r   r   r	   Útest_chown_without_permission  s
    z,ChownFileTests.test_chown_without_permissionc                 C   s   t  tj¡ d S r#   )r   r  r   rH   rA  r   r   r	   ÚtearDownClass  s    zChownFileTests.tearDownClassN)rC   rD   rE   ÚclassmethodrC  rL  r   r   r   r   rO  Úroot_in_posixr-   rQ  rT  rU  rV  r   r   r   r	   r@  æ  s   


ÿ

ÿ
r@  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚRemoveDirsTestsc                 C   s   t  tj¡ d S r#   )r   rä  r   rH   rJ   r   r   r	   rK   #  s    zRemoveDirsTests.setUpc                 C   s   t  t j¡ d S r#   )r   r  rH   rJ   r   r   r	   r»   &  s    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   r1   r3   r   rH   r4   r=  ÚassertFalser°  ©r(   rZ  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 ©NrZ  r[  úfile.txt)r   r1   r3   r   rH   r4   r!   r=  r\  r°  rO   r]  r   r   r	   Útest_remove_partial3  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 sn0    Y  |  
t j |¡¡ |  
t j |¡¡ |  
t j tj¡¡ d S r_  )r   r1   r3   r   rH   r4   r!   r\   r7   r=  rO   r°  r]  r   r   r	   Útest_remove_nothing>  s    

(z#RemoveDirsTests.test_remove_nothingN)rC   rD   rE   rK   r»   r^  ra  rb  r   r   r   r	   rY  "  s
   
rY  c                   @   s   e Zd Zdd„ ZdS )ÚDevNullTestsc                 C   s€   t tjddƒ"}| d¡ | ¡  W d   ƒ n1 s60    Y  t tjdƒ }|  | ¡ d¡ W d   ƒ n1 sr0    Y  d S )Nr9  r   ó   hellorv   r   )r   r   Údevnullr   rN   r0   rn   rR   r   r   r	   Útest_devnullL  s
    
&zDevNullTests.test_devnullN)rC   rD   rE   rf  r   r   r   r	   rc  K  s   rc  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   rU   rV   r‘   iè  )r0   r-   r   ÚurandomrJ   r   r   r	   Útest_urandom_lengthU  s
    z URandomTests.test_urandom_lengthc                 C   s0   t  d¡}|  |t¡ t  d¡}|  ||¡ d S ©Né   )r   rh  r%   r@   r  ©r(   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ˆ   rU   )r3   r   r0   r-   )r(   Úcountr‹   Úoutr•  r   r   r	   Úget_urandom_subprocessb  s    ü
z#URandomTests.get_urandom_subprocessc                 C   s$   |   d¡}|   d¡}|  ||¡ d S rj  )rq  r  rl  r   r   r	   Útest_urandom_subprocessm  s    

z$URandomTests.test_urandom_subprocessN)rC   rD   rE   ri  rm  rq  rr  r   r   r   r	   rg  T  s   rg  Ú	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   sR   zt  d¡ W n> tyL } z&|jtjkr6t d¡‚n‚ W Y d }~n
d }~0 0 d S )NrU   z%getrandom() syscall fails with ENOSYS)r   rs  r7   r8   r®   r   r:  )rB  r=   r   r   r	   rC  u  s    zGetRandomTests.setUpClassc                 C   s*   t  d¡}|  |t¡ |  t|ƒd¡ d S rj  )r   rs  r%   r@   r0   r-   ©r(   rx   r   r   r	   Útest_getrandom_type  s    
z"GetRandomTests.test_getrandom_typec                 C   s   t  d¡}|  |d¡ d S )Nr   r   )r   rs  r0   )r(   Úemptyr   r   r	   Útest_getrandom0†  s    
zGetRandomTests.test_getrandom0c                 C   s   |   ttdƒ¡ d S )NÚGRND_RANDOM)rO   r   r   rJ   r   r   r	   Útest_getrandom_randomŠ  s    z$GetRandomTests.test_getrandom_randomc                 C   s*   zt  dt j¡ W n ty$   Y n0 d S ©NrU   )r   rs  ÚGRND_NONBLOCKÚBlockingIOErrorrJ   r   r   r	   Útest_getrandom_nonblock  s    z&GetRandomTests.test_getrandom_nonblockc                 C   s$   t  d¡}t  d¡}|  ||¡ d S rj  )r   rs  r  rl  r   r   r	   Útest_getrandom_value˜  s    

z#GetRandomTests.test_getrandom_valueN)
rC   rD   rE   rW  rC  rv  rx  rz  r~  r  r   r   r   r	   rt  s  s   
rt  ZHAVE_GETENTROPYrU   ZHAVE_GETRANDOMZHAVE_GETRANDOM_SYSCALLz*os.random() does not use a file descriptorZvxworksz$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_failureª  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   )r(   r‹   Úrcrp  Úerrr   r   r	   Útest_urandom_fd_closedÁ  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))
            )rH   r‚  rË   r   rj   )
rw   r   rI   rH   r!   r{  r   r0   r-   r  )r(   r‹   rƒ  rp  r„  Zout2Zerr2r   r   r	   Útest_urandom_fd_reopenedÏ  s    èz'URandomFDTests.test_urandom_fd_reopenedN)	rC   rD   rE   r   r   Úresourcer  r…  r†  r   r   r   r	   r€  ¥  s   

r€  c                 #   s~   g ‰ ‡ fdd„}‡ fdd„}zHt j}t j}t j}|t _|t _| durJ| t _ˆ V  W |t _|t _|t _n|t _|t _|t _0 dS )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ƒ‚d S )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ƒ‚d S )NÚexecvezexecve called)rñ  r7   r8   Ú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-)r\   r7   r   ÚexecvperJ   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‚  rH  )r\   r©   r   rˆ  rJ   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•  rH  )r\   r©   r   r“  rJ   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 r8d}t j t  |¡|¡}|}g d¢}n4d}g d¢}t j ||¡}t jdkrht  |¡}n|}ddi}tƒ J}|  t	t j
||¡ |  t|ƒd	¡ |  |d
 d||ff¡ W d   ƒ n1 sÊ0    Y  t|dP}| jtt j
|||d |  t|ƒd	¡ |  |d
 d|||ff¡ W d   ƒ n1 s60    Y  tƒ t}| ¡ }	|tu rd||	d< n||	d< | jtt j
|||	d |  t|ƒd	¡ |  |d
 d|||	ff¡ W d   ƒ n1 sÂ0    Y  d S )NZabsolutepaths
   executable)s   prognameÚarg1Úarg2r‰   )Zprognamer™  rš  r,  Zspamrz   rU   r   rˆ  )r‡  r  rŽ  r„  r€  )r   r2   r@   r1   r3   r   r   r‘  r\   r‰  r˜  r0   r-   r7   r‰  rÅ  )
r(   Z	test_typeZprogram_pathZprogramÚfullpathZnative_fullpathZ	argumentsr~  rŒ  Zenv_pathr   r   r	   Ú_test_internal_execvpe+  sN    


ÿ6
ÿ
ÿ$


ÿ
ÿz ExecTests._test_internal_execvpec                 C   s"   |   t¡ tjdkr|   t¡ d S )Nr,  )rœ  r&   r   r   r@   rJ   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 sP0    Y  tj ¡ }d|d< |  t¡" t |d ||¡ W d   ƒ n1 sž0    Y  tj ¡ }d|d	< |  t¡" t |d ||¡ W d   ƒ n1 sì0    Y  d S )
Nrˆ   ÚpassÚcabbageúFRUIT VEGETABLEr   úorange VEGETABLE=cabbageÚFRUITÚlemonúFRUIT=ORANGE)ra   r‰   r   r  rÅ  r\   r©   rŽ  )r(   r„   Únewenvr   r   r	   Útest_execve_invalid_enva  s    
0
0
z!ExecTests.test_execve_invalid_envr‡   zWin32-specific testc              
   C   sb   zt  ddgi ¡ W n> tyR } z&|  |jd u p:|jdk¡ W Y d }~nd }~0 0 |  d¡ d S )NrH  Úargr   zNo OSError raised)r   rŽ  r7   rO   ÚwinerrorrÙ   r   r   r   r	   Útest_execve_with_empty_pathv  s
    0z%ExecTests.test_execve_with_empty_pathN)rC   rD   rE   r   ÚskipIfÚUSING_LINUXTHREADSr”  r–  r—  r   r   r   rœ  r  r¦  ra   r½   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   sv   zt  tj¡ W nP ty&   d}Y nL ty` } z$d}|  dtj|f ¡ W Y d }~nd }~0 0 |  dtj ¡ d S )NFTz.file %s must not exist; os.stat failed with %szfile %s must not exist)r   r˜   r   rH   r6   r7   rÙ   )r(   r°  r=   r   r   r	   rK   ƒ  s    ÿzWin32ErrorTests.setUpc                 C   s   |   ttjtjtjd ¡ d S )Nz.bak)r\   r7   r   rd   r   rH   rJ   r   r   r	   rg     s    zWin32ErrorTests.test_renamec                 C   s   |   ttjtj¡ d S r#   )r\   r7   r   rò  r   rH   rJ   r   r   r	   Útest_remove’  s    zWin32ErrorTests.test_removec                 C   s   |   ttjtj¡ d S r#   )r\   r7   r   r5   r   rH   rJ   r   r   r	   Ú
test_chdir•  s    zWin32ErrorTests.test_chdirc                 C   sR   |   tjtj¡ ttjdƒ"}|  ttjtj¡ W d   ƒ n1 sD0    Y  d S )NrÃ   )	rw   r   rI   rH   r   r\   r7   r   r4   rR   r   r   r	   Ú
test_mkdir˜  s    zWin32ErrorTests.test_mkdirc                 C   s   |   ttjtjd ¡ d S r#   )r\   r7   r   r+  r   rH   rJ   r   r   r	   r/  ž  s    zWin32ErrorTests.test_utimec                 C   s   |   ttjtjd¡ d S r`   )r\   r7   r   rç  r   rH   rJ   r   r   r	   Ú
test_chmod¡  s    zWin32ErrorTests.test_chmodN)
rC   rD   rE   rK   rg   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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d;d<„ Ze 	e
ed=ƒd>¡d?d@„ ƒZdAS )BÚTestInvalidFD)	ÚfchdirrY   rŽ   Ú	fdatasyncr  ÚfstatvfsÚfsyncÚ	tcgetpgrpÚttynamec                    s   ‡ fdd„}|S )Nc                    s   t tˆ ƒr|  ttˆ ƒ¡ d S r#   )r   r   r”  rÖ   rJ   ©rS   r   r	   Úhelper«  s    
z(TestInvalidFD.get_single.<locals>.helperr   )rS   r¹  r   r¸  r	   Ú
get_singleª  s    zTestInvalidFD.get_singleZtest_c              
   G   s`   z|t  ¡ g|¢R Ž  W n4 tyL } z|  |jtj¡ W Y d }~nd }~0 0 |  d| ¡ d S )Nz5%r didn't raise an OSError with a bad file descriptor)r   Úmake_bad_fdr7   r0   r8   r  rÙ   )r(   rS   r„   r¶   r   r   r	   r”  ²  s    &ÿzTestInvalidFD.checkÚisattyztest needs os.isatty()c                 C   s   |   t t ¡ ¡d¡ d S ©NF)r0   r   r¼  r   r»  rJ   r   r   r	   Útest_isatty»  s    zTestInvalidFD.test_isattyr[   ztest needs os.closerange()c              	   C   sr   t  ¡ }tdƒD ].}zt || ¡ W n ty8   Y q0  q@q|dk rRt d¡‚|  t 	||| d ¡d ¡ d S )NrV   rW   z5Unable to acquire a range of invalid file descriptorsrU   )
r   r»  r°   r   r  r7   r   r:  r0   r[   )r(   rq   rµ   r   r   r	   r_   ¿  s    ÿzTestInvalidFD.test_closerangeÚdup2ztest needs os.dup2()c                 C   s   |   tjd¡ d S )Né   )r”  r   r¿  rJ   r   r   r	   Ú	test_dup2Ï  s    zTestInvalidFD.test_dup2Úfchmodztest needs os.fchmod()c                 C   s   |   tjd¡ d S r`   )r”  r   rÂ  rJ   r   r   r	   Útest_fchmodÓ  s    zTestInvalidFD.test_fchmodÚfchownztest needs os.fchown()c                 C   s   |   tjdd¡ d S )Nrë  )r”  r   rÄ  rJ   r   r   r	   Útest_fchown×  s    zTestInvalidFD.test_fchownÚ	fpathconfztest needs os.fpathconf()c                 C   s    |   tjd¡ |   tjd¡ d S )NÚPC_NAME_MAX)r”  r   ÚpathconfrÆ  rJ   r   r   r	   Útest_fpathconfÛ  s    zTestInvalidFD.test_fpathconfÚ	ftruncateztest needs os.ftruncate()c                 C   s    |   tjd¡ |   tjd¡ d S r`   )r”  r   ÚtruncaterÊ  rJ   r   r   r	   Útest_ftruncateà  s    zTestInvalidFD.test_ftruncaterm   ztest needs os.lseek()c                 C   s   |   tjdd¡ d S r`   )r”  r   rm   rJ   r   r   r	   Ú
test_lseekå  s    zTestInvalidFD.test_lseekrn   ztest needs os.read()c                 C   s   |   tjd¡ d S r{  )r”  r   rn   rJ   r   r   r	   rs   é  s    zTestInvalidFD.test_readÚreadvztest needs os.readv()c                 C   s   t dƒ}|  tj|g¡ d S )NrV   )r|   r”  r   rÎ  )r(   rN  r   r   r	   Ú
test_readví  s    zTestInvalidFD.test_readvÚ	tcsetpgrpztest needs os.tcsetpgrp()c                 C   s   |   tjd¡ d S r`   )r”  r   rÐ  rJ   r   r   r	   Útest_tcsetpgrptò  s    zTestInvalidFD.test_tcsetpgrptr   ztest needs os.write()c                 C   s   |   tjd¡ d S )Nó    )r”  r   r   rJ   r   r   r	   r   ö  s    zTestInvalidFD.test_writeÚwritevztest needs os.writev()c                 C   s   |   tjdg¡ d S )Nr…  )r”  r   rÓ  rJ   r   r   r	   Útest_writevú  s    zTestInvalidFD.test_writevc                 C   s   |   tj¡ |   tjd¡ d S ©NT)r”  r   Úget_inheritableÚset_inheritablerJ   r   r   r	   Útest_inheritableþ  s    zTestInvalidFD.test_inheritableÚget_blockingú-needs os.get_blocking() and os.set_blocking()c                 C   s   |   tj¡ |   tjd¡ d S rÕ  )r”  r   rÙ  Úset_blockingrJ   r   r   r	   Útest_blocking  s    zTestInvalidFD.test_blockingN)rC   rD   rE   Zsinglesrº  rS   Úlocalsr”  r   r   r   r   r¾  r_   rÁ  rÃ  rÅ  rÉ  rÌ  rÍ  rs   rÏ  rÑ  r   rÔ  rØ  rÜ  r   r   r   r	   r±  ¥  sH   	












ÿ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   rH   Úfile1r   r1   r3   Úfile2rJ   r   r   r	   rK   
  s    zLinkTests.setUpc                 C   s,   | j | jfD ]}tj |¡rt |¡ qd S r#   )rß  rà  r   r1   r°  rI   )r(   Úfiler   r   r	   r»     s    zLinkTests.tearDownc              
   C   sÀ   t |ƒ zt ||¡ W n2 tyJ } z|  d| ¡ W Y d }~n
d }~0 0 t|dƒV}t|dƒ,}|  tj | 	¡ | 	¡ ¡¡ W d   ƒ n1 s”0    Y  W d   ƒ n1 s²0    Y  d S )Núos.link(): %sr   )
r!   r   r×  ré  rZ   r   rO   r1   Úsameopenfilerl   )r(   rß  rà  r¶   r  Úf2r   r   r	   Ú
_test_link  s    $zLinkTests._test_linkc                 C   s   |   | j| j¡ d S r#   )rå  rß  rà  rJ   r   r   r	   Ú	test_link  s    zLinkTests.test_linkc                 C   s(   |   t| jt ¡ ƒt| jt ¡ ƒ¡ d S r#   )rå  r@   rß  ra   rç   rà  rJ   r   r   r	   Útest_link_bytes   s    ÿzLinkTests.test_link_bytesc                 C   sZ   zt  d¡ W n ty*   t d¡‚Y n0 |  jd7  _| jd | _|  | j| j¡ d S )Nõ   Ã±z#Unable to encode for this platform.r¸  )r   r   ÚUnicodeErrorr   r:  rß  rà  rå  rJ   r   r   r	   Útest_unicode_name$  s    zLinkTests.test_unicode_nameN)	rC   rD   rE   rK   r»   rå  ræ  rç  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   Úgetuidr\   r7   rí  rc   ÚOverflowErrorÚUID_OVERFLOWrJ   r   r   r	   Útest_setuid4  s    zPosixUidGidTests.test_setuidÚsetgidztest needs os.setgid()c                 C   sF   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_GROUPr\   r7   ró  rc   rð  ÚGID_OVERFLOWrJ   r   r   r	   Útest_setgid;  s    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ï  r\   r7   r÷  rc   Úsetegidrð  rñ  rJ   r   r   r	   Útest_seteuidB  s    zPosixUidGidTests.test_seteuidrø  ztest needs os.setegid()c                 C   sF   t  ¡ dkr ts |  tt jd¡ |  tt jd¡ |  tt j| j¡ d S rî  )	r   rï  rô  r\   r7   rø  rc   rð  rõ  rJ   r   r   r	   Útest_setegidI  s    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ï  r\   r7   rû  rc   rð  rñ  rJ   r   r   r	   Útest_setreuidP  s    zPosixUidGidTests.test_setreuidc                 C   s   t  tjddg¡ d S )Nrˆ   z,import os,sys;os.setreuid(-1,-1);sys.exit(0)©r‚   r  ra   r‰   rJ   r   r   r	   Útest_setreuid_neg1Y  s    þ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ï  rô  r\   r7   rÿ  rc   rð  rõ  rJ   r   r   r	   Útest_setregida  s    zPosixUidGidTests.test_setregidc                 C   s   t  tjddg¡ d S )Nrˆ   z,import os,sys;os.setregid(-1,-1);sys.exit(0)rý  rJ   r   r   r	   Útest_setregid_neg1j  s    þz#PosixUidGidTests.test_setregid_neg1N)rC   rD   rE   rñ  rõ  r   r   r   r   rò  rö  rù  rú  rü  rþ  r   r  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r`|t jƒ t jrp|t jƒ ˆ s~|  	d¡ t
ƒ | _t | j¡ zLˆ D ]B}t  tj | j|¡¡ t |¡}|| jv rÎtdƒ‚| j |¡ q˜W n   t | j¡ ‚ Y n0 d S )Nc                    s2   zt  | ¡} W n ty"   Y d S 0 ˆ  | ¡ 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_NONASCIIrH   r   r   ZbdirZTESTFN_UNICODErZ   r  Ú	unicodefnr4   Zcreate_empty_filer1   r3   rA   r©   ÚaddÚshutilr  )r(   r  r  r   r  r	   rK   t  s6    







zPep383Tests.setUpc                 C   s   t  | j¡ d S r#   )r
  r  rÓ   rJ   r   r   r	   r»   ™  s    zPep383Tests.tearDownc              	   C   sv   | j }tt | j¡ƒ}|  ||¡ t ¡ }z:t tj¡ |  tt ¡ ƒtt tj¡ƒ¡ W t |¡ nt |¡ 0 d S r#   )	r  r  r   rè  rÓ   r0   r$   r5   r2   )r(   r<   ÚfoundZcurrent_directoryr   r   r	   Útest_listdirœ  s    "zPep383Tests.test_listdirc                 C   s.   | j D ]"}ttj | j|¡dƒ}| ¡  qd S ©Nrv   )r  r   r   r1   r3   rÓ   rN   )r(   r  rS   r   r   r	   Ú	test_open¨  s    
zPep383Tests.test_openrò   rý   c                 C   s*   | j D ]}tj | j|¡}t |¡ qd S r#   )r  r   r1   r3   rÓ   rò   )r(   r  Úfullnamer   r   r	   Útest_statvfs­  s    
zPep383Tests.test_statvfsc                 C   s&   | j D ]}t tj | j|¡¡ qd S r#   )r  r   r˜   r1   r3   rÓ   )r(   r  r   r   r	   Ú	test_stat¶  s    
zPep383Tests.test_statN)rC   rD   rE   rK   r»   r  r  r   r   r   r   r  r  r   r   r   r	   r  r  s   %ÿ
r  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   sv  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 rJ| ¡ d u rJ| t|ƒ¡}
|| |j ¡ ¡|
| |
¡d d d ƒ}|  |dd¡ |
jr6|   ||
j !¡ ¡ qTt" #d	¡ |d
7 }qÀ|  $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çš™™™™™¹?rU   z1Did not receive communication from the subprocess))rJ  r  ÚmsvcrtrK  rL  ÚPeekNamedPipeÚBOOLÚrestypeÚHANDLEÚPOINTERZc_charÚDWORDÚargtypesr‚   ÚPopenra   r‰   r{  rš  rw   r•  rN   r  r  ÚpollZcreate_string_bufferr-   Zget_osfhandlerl   Zsizeofr  rú   r0   r’  r@  ÚsleeprÙ   r   ÚkillÚpidÚwait)r(   ÚsigrJ  r  r  r  r?  r  ro  ÚmaxrN  Zrsltr   r   r	   Ú_kill¼  sP    




û
ýÿùÿ


zWin32KillTests._killc                 C   s   |   tj¡ d S r#   )r*  ÚsignalÚSIGTERMrJ   r   r   r	   Útest_kill_sigtermò  s    z Win32KillTests.test_kill_sigtermc                 C   s   |   d¡ d S )Nr‘   )r*  rJ   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 rŠ| ¡ d u rŠ|d dkrvq¤t d¡ |d7 }qTt |jtj¡ |  d	¡ t |j|¡ t d
¡ | ¡ sät |jtj¡ |  d |¡¡ d S )Nz
test_os_%srë  rU   r   zwin_console_handler.pyr  r  r  z'Subprocess didn't finish initializationg      à?zsubprocess did not stop on {})ÚuuidZuuid1Úmmapr‚   r"  ra   r‰   r   r1   r3   r;   rŸ   ZCREATE_NEW_PROCESS_GROUPr#  r@  r$  r%  r&  r+  ÚSIGINTrÙ   r{  )r(   Úeventr   ZtagnameÚmr  ro  r)  r   r   r	   Ú_kill_with_eventú  s0    ÿþý



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   r  ÚCTRL_C_EVENT)rJ  r  r  Zc_intrK  rL  ÚSetConsoleCtrlHandlerr  r!  r  r4  r+  r5  )r(   r  rJ  ZNULLr6  r   r   r	   Útest_CTRL_C_EVENT	  s    

ÿ
z Win32KillTests.test_CTRL_C_EVENTc                 C   s   |   tjd¡ d S )NÚCTRL_BREAK_EVENT)r4  r+  r8  rJ   r   r   r	   Útest_CTRL_BREAK_EVENT*	  s    z$Win32KillTests.test_CTRL_BREAK_EVENTN)rC   rD   rE   r*  r-  r.  r4  r   Úskipr7  r9  r   r   r   r	   r  º  s   6
r  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 ]Š}d| }tj tj|¡}d| }tj tj|¡}t |¡ t|ddd}| 	d| ¡ W d   ƒ n1 s~0    Y  | j  
||g¡ q| j  ¡  d S )NrW   zSUB%dzFILE%dr  rÜ  rÝ  z'I'm %s and proud of it. Blame test_os.
)Úcreated_pathsr°   r   r1   r3   r   rH   rä  r   r   Úextendrí  )r(   rµ   Zdir_nameZdir_pathÚ	file_nameZ	file_pathrS   r   r   r	   rK   2	  s    
,zWin32ListdirTests.setUpc                 C   s   t  tj¡ d S r#   )r
  r  r   rH   rJ   r   r   r	   r»   ?	  s    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   s   g | ]}t  |¡‘qS r   ©r   r   ©r   r1   r   r   r	   r
   L	  r   zCWin32ListdirTests.test_listdir_no_extended_path.<locals>.<listcomp>N)r0   Úsortedr   rè  r   rH   r<  r   rJ   r   r   r	   Útest_listdir_no_extended_pathB	  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   s   g | ]}t  |¡‘qS r   r?  r@  r   r   r	   r
   [	  r   z@Win32ListdirTests.test_listdir_extended_path.<locals>.<listcomp>N)
r   r1   rI  r   rH   r0   rA  rè  r<  r   r>  r   r   r	   Útest_listdir_extended_pathN	  s    þþz,Win32ListdirTests.test_listdir_extended_pathN)rC   rD   rE   rÊ  rK   r»   rB  rE  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rRdd„ }||ƒr>|dd … }||ƒrR|dd … }|  ||¡ d S )Nr‡   c                 S   s   |   t| tƒrdnd¡S )NrD  rC  )Ú
startswithr÷   r@   )rð   r   r   r	   Ú<lambda>k	  s   ÿz/ReadlinkTests.assertPathEqual.<locals>.<lambda>rj   )r   r1   Únormcasera   r½   r0   )r(   ÚleftÚrightZ
has_prefixr   r   r	   ÚassertPathEquale	  s    
zReadlinkTests.assertPathEqualc                 C   sT   |   tj | j¡¡ |   tj | j¡¡ |  tj | j¡¡ |  tj | j¡¡ d S r#   )	rO   r   r1   r°  Úfilelink_targetÚfilelinkb_targetr\  ÚfilelinkÚ	filelinkbrJ   r   r   r	   rK   s	  s    zReadlinkTests.setUpc                 C   s0   t | jƒ}|  ttj| j¡ |  ttj|¡ d S r#   )r   rN  r\   r7   r   rF  )r(   rN  r   r   r	   Útest_not_symlinky	  s    
zReadlinkTests.test_not_symlinkc                 C   s(   |   ttjd¡ |   ttjtdƒ¡ d S )Nzmissing-link)r\   r6   r   rF  r   rJ   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¡   rN  rP  rw   r   rI   r   rM  rF  )r(   rP  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¡   rO  rQ  rw   r   rI   rF  r   rM  r%   r@   r>  r   r   r	   Útest_pathlike_bytesŠ	  s
    z!ReadlinkTests.test_pathlike_bytesc                 C   sJ   t  | j| j¡ |  tj| j¡ t  | j¡}|  || j¡ |  	|t
¡ d S r#   )r   r¡   rO  rQ  rw   r   rI   rF  rM  r%   r@   r>  r   r   r	   Ú
test_bytes’	  s
    zReadlinkTests.test_bytesN)rC   rD   rE   rP  r   r1   rI  rŸ   rN  r   rQ  rO  rM  rK   rR  rS  r   Úskip_unless_symlinkrT  rU  rV  r   r   r   r	   rG  ^	  s   



rG  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¡o–ej d¡d¡dd„ ƒZdd„ Zdd „ Zd!S )"ÚWin32SymlinkTestsZfilelinktestZdirlinktestzmissing linkc                 C   s   d S r#   r   rJ   r   r   r	   rK   ¤	  s    zWin32SymlinkTests.setUpc                 C   sR   t j | j¡rt  | j¡ t j | j¡r4t  | j¡ t j | j¡rNt  | j¡ d S r#   )	r   r1   r°  rP  rò  Údirlinkr  rG   Úmissing_linkrJ   r   r   r	   r»   «	  s    zWin32SymlinkTests.tearDownc                 C   s`   t  | j| j¡ |  t j | j¡¡ |  t j | j¡¡ |  t j | j¡¡ |  	| j| j¡ d S r#   )
r   r¡   Údirlink_targetrY  rO   r1   r°  r-  ÚislinkÚ
check_statrJ   r   r   r	   Útest_directory_link³	  s
    z%Win32SymlinkTests.test_directory_linkc                 C   s`   t  | j| j¡ |  t j | j¡¡ |  t j | j¡¡ |  t j | j¡¡ |  	| j| j¡ d S r#   )
r   r¡   rN  rP  rO   r1   r°  Úisfiler\  r]  rJ   r   r   r	   Útest_file_linkº	  s
    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)rZ  r   r1   rG   rò  r¡   )r(   Zlinknamer¢   Ztarget_is_dirr   r   r	   Ú_create_missing_dir_linkÁ	  s    
z*Win32SymlinkTests._create_missing_dir_linkc                 C   s   |   ¡  t | j¡ d S r#   )ra  r   rò  rZ  rJ   r   r   r	   Ú,test_remove_directory_link_to_missing_targetË	  s    z>Win32SymlinkTests.test_remove_directory_link_to_missing_targetc                 C   s    |   ¡  |  tj | j¡¡ d S r#   )ra  r\  r   r1   r-  rZ  rJ   r   r   r	   Ú.test_isdir_on_directory_link_to_missing_targetÒ	  s    z@Win32SymlinkTests.test_isdir_on_directory_link_to_missing_targetc                 C   s   |   ¡  t | j¡ d S r#   )ra  r   r  rZ  rJ   r   r   r	   Ú.test_rmdir_on_directory_link_to_missing_targetÖ	  s    z@Win32SymlinkTests.test_rmdir_on_directory_link_to_missing_targetc                 C   sn   |   t |¡t |¡¡ |  t |¡t |¡¡ t |¡}|   t |¡t |¡¡ |  t |¡t |¡¡ d S r#   )r0   r   r˜   r  r9  r   )r(   r×  r¢   Z
bytes_linkr   r   r	   r]  Ú	  s
    
zWin32SymlinkTests.check_statc              	   C   sJ  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  |¡ nt  |¡ 0 d S )NÚlevel2Úlevel3rß  r×  )r   r1   rI  r   rH   r3   rw   r  r4   r!   r$   r5   r¡   Úrelpathr¯   rè  r0   r˜   )r(   Zlevel1re  rf  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 )Nri  rj  )r   rF  rO   r1   Úsamefile)r(   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 ] \}}zt  ||¡ W n tyn   Y n$0 zt  |¡ W n ty   Y n0 zt  t  |¡t  |¡¡ W n tyÀ   Y qD0 zt  |¡ W qD tyâ   Y qD0 qDd S )NZXXXXXXXXXXXXXXXXXXXXXXXXXXXrV   rG  é´   )r   r1   r3   r¡   r6   rò  r7   r   )r(   Zsegmentr1   Z
test_casesr£   Údestr   r   r	   Útest_buffer_overflow
  s.    
úz&Win32SymlinkTests.test_buffer_overflowc                    s²   t j d¡‰ t j ˆ ¡s"|  d¡ ‡ fdd„t t  ˆ ¡d¡D ƒ}|D ]\}tj	r`t
ƒ  t
d|ƒ t  |¡}|  |t  |¡¡ |  t |j¡¡ |  |jtj¡  q®qF|  d¡ d S )Nz$%LOCALAPPDATA%\Microsoft\WindowsAppsz%test requires a WindowsApps directoryc                    s   g | ]}t j ˆ |¡‘qS r   )r   r1   r3   ©r   r,   ©rM  r   r	   r
   <
  s   ÿz6Win32SymlinkTests.test_appexeclink.<locals>.<listcomp>z*.exezTesting withz$test requires an app execution alias)r   r1   Ú
expandvarsr-  rZ   ÚfnmatchÚfilterrè  r   r9   r:   r9  r0   r˜   r\  ÚS_ISLNKrÛ   Úst_reparse_tagZIO_REPARSE_TAG_APPEXECLINK)r(   ÚaliasesÚaliasr  r   rq  r	   Útest_appexeclink7
  s     

ÿ

z"Win32SymlinkTests.test_appexeclinkN)rC   rD   rE   rP  r   r1   rI  rŸ   rN  rY  r;   r[  rZ  rK   r»   r^  r`  ra  rb  rc  rd  r]  rh  r   r   rG   r°  rl  ro  ry  r   r   r   r	   rX  ›	  s,   
#
þ
#rX  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   s   d S r#   r   rJ   r   r   r	   rK   Q
  s    zWin32JunctionTests.setUpc                 C   s   t j | j¡rt  | j¡ d S r#   )r   r1   rG   ÚjunctionrI   rJ   r   r   r	   r»   U
  s    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 )NrC  )Ú_winapiÚCreateJunctionÚjunction_targetr{  rO   r   r1   rG   r°  r-  r  r˜   r9  r0   r\  r\  rJ  rF  rJ   r   r   r	   Útest_create_junctionY
  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{  rO   r   r1   r°  rG   rI   r\  rJ   r   r   r	   Útest_unlink_removes_junctionf
  s
    z/Win32JunctionTests.test_unlink_removes_junctionN)rC   rD   rE   r{  r   r1   r;   rI  rŸ   r~  rK   r»   r  r€  r   r   r   r	   rz  L
  s   rz  c                   @   s   e Z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 ]R}	|D ]H}
z| |
¡ W n tyÌ   Y n0 zt |
¡ W q¨ tyî   Y q¨0 q¨q | 	|| |¡¡}|  d|¡ |j| }|  d|¡ d S )Nr,  rJ  r   zKernel32.dllT)Zuse_last_errorrU   z\\?\C:z\\?\NULz	\\?\CONINrV   )r   Úimport_moduleZctypes.wintypesZWinDLLr  r  ZGetCurrentProcessr  r  ZGetProcessHandleCountZLPDWORDr!  r   Zbyrefr0   rú   rŸ   r°   Ú_getfinalpathnameÚ	Exceptionr   r˜   )r(   r,  rJ  ZkernelZhprocZhandle_countrO  Zbefore_countÚ	filenamesÚ_r   Zhandle_deltar   r   r	   Útest_getfinalpathname_handlesp
  sB    

ÿ
ü

z*Win32NtTests.test_getfinalpathname_handlesN)rC   rD   rE   r‡  r   r   r   r	   r  n
  s   r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚNonLocalSymlinkTestsc                 C   s   t  d¡ dS )zM
        Create this structure:

        base
         \___ some_dir
        zbase/some_dirN)r   rä  rJ   r   r   r	   rK   £
  s    zNonLocalSymlinkTests.setUpc                 C   s   t  d¡ d S )Nr  )r
  r  rJ   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   r1   r3   r¡   )r(   r£   r   r   r	   Útest_directory_link_nonlocal¯
  s    z1NonLocalSymlinkTests.test_directory_link_nonlocalN)rC   rD   rE   rK   r»   r‰  r   r   r   r	   rˆ   
  s   	rˆ  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚFSEncodingTestsc                 C   s(   |   t d¡d¡ |   t d¡d¡ d S )Ns   abcÿu   abcÅ)r0   r   r   rA   rJ   r   r   r	   Útest_nopÁ
  s    zFSEncodingTests.test_nopc              	   C   sF   dD ]<}zt  |¡}W n ty,   Y qY n0 |  t  |¡|¡ qd S )N)u	   unicodeÅu   latinÃ©Úascii)r   r   rè   r0   rA   )r(   r  r  r   r   r	   Útest_identityÅ
  s    
zFSEncodingTests.test_identityN)rC   rD   rE   r‹  r  r   r   r   r	   rŠ  À
  s   rŠ  c                   @   sV   e Zd Zdd„ Ze e d¡oDeƒ  oDe	j
 d¡pDeedƒoDeedƒd¡dd	„ ƒZd
S )ÚDeviceEncodingTestsc                 C   s   |   t d¡¡ d S )Ni@â )rI  r   Údevice_encodingrJ   r   r   r	   Útest_bad_fdÒ
  s    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 r`   )r   r  ZassertIsNotNonerO   ÚcodecsÚlookup)r(   rÞ  r   r   r	   Útest_device_encodingÖ
  s    

z(DeviceEncodingTests.test_device_encodingN)rC   rD   rE   r  r   r   r   r¼  r   ra   r½   rH  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‚   r"  ra   r‰   rš  Úcommunicater0   rÁ   r   Úgetpid)r(   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rV||ƒ t |d¡\}}|  t |¡|¡ |  ||¡ d S )Nr‡   ú"rˆ   r   )	ra   r½   r‰   r   ÚspawnvÚP_NOWAITÚwaitpidr0   Úwaitstatus_to_exitcode)r(   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¥  rJ   r   r   r	   Útest_waitpidû
  s    zPidTests.test_waitpidc                 C   sV   d}d|› d}| j ||d |  t¡ t d¡ W d   ƒ n1 sH0    Y  d S )Né   zimport sys; sys.exit(ú)©r¢  g        )r¥  r\   rc   r   r¡  )r(   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¦  )r(   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^0    Y  |  t¡ t d¡ W d   ƒ n1 s’0    Y  d S )Nr	  r   rU   r¬   rË   rë  )r0   r   r¡  r\   r©   rð  )r(   Zmax_exitcoder¢  r   r   r	   Ú#test_waitstatus_to_exitcode_windows  s    ÿ0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!  s    z?PidTests.test_waitstatus_to_exitcode_kill.<locals>.kill_process)r¢  r£  )r   ZLONG_TIMEOUTr+  r¯  r¥  )r(   r‹   r²  r   r°  r	   Ú test_waitstatus_to_exitcode_kill  s    z)PidTests.test_waitstatus_to_exitcode_kill)N)rC   rD   rE   r   r   r   r   rœ  r¥  r§  r«  ra   r½   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  }n8ttjƒ| _t	t
 ¡ ƒ| _| j| j| j< d| j| j f }t|dƒ}| |¡ W d   ƒ n1 sŒ0    Y  tj|g}|rÈdd„ |D ƒ}dd„ | j ¡ D ƒ| _|S )	Né   zimport sys; sys.exit(%s)z4import sys, os; magic = os.environ[%r]; sys.exit(%s)r  c                 S   s   g | ]}t  |¡‘qS r   r?  rp  r   r   r	   r
   >  r   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   rH   rw   rI   rb  r   r  r~  r&   r/  Zuuid4rj  r   r   ra   r‰   rh  )r(   r¶  r·  r   r‹   r    r„   r   r   r	   Úcreate_args(  s(    
ÿ(
ÿzSpawnTests.create_argsÚspawnlc                 C   s4   |   ¡ }tjtj|d g|¢R Ž }|  || j¡ d S r`   )r¼  r   r½  ÚP_WAITr0   r¢  ©r(   r„   r¢  r   r   r	   Útest_spawnlD  s    zSpawnTests.test_spawnlÚspawnlec                 C   s>   | j dd}tjtj|d g|¢| j‘R Ž }|  || j¡ d S ©NT)r¶  r   )r¼  r   rÁ  r¾  r~  r0   r¢  r¿  r   r   r	   Útest_spawnleJ  s     zSpawnTests.test_spawnleÚspawnlpc                 C   s4   |   ¡ }tjtj|d g|¢R Ž }|  || j¡ d S r`   )r¼  r   rÄ  r¾  r0   r¢  r¿  r   r   r	   Útest_spawnlpP  s    zSpawnTests.test_spawnlpÚspawnlpec                 C   s>   | j dd}tjtj|d g|¢| j‘R Ž }|  || j¡ d S rÂ  )r¼  r   rÆ  r¾  r~  r0   r¢  r¿  r   r   r	   Útest_spawnlpeV  s     zSpawnTests.test_spawnlperž  c                 C   sT   |   ¡ }t tj|d |¡}|  || j¡ t tjt|d ƒ|¡}|  || j¡ d S r`   )r¼  r   rž  r¾  r0   r¢  r   r¿  r   r   r	   Útest_spawnv\  s
    zSpawnTests.test_spawnvÚspawnvec                 C   s6   | j dd}t tj|d || j¡}|  || j¡ d S rÂ  ©r¼  r   rÉ  r¾  r~  r0   r¢  r¿  r   r   r	   Útest_spawnvef  s    zSpawnTests.test_spawnveÚspawnvpc                 C   s.   |   ¡ }t tj|d |¡}|  || j¡ d S r`   )r¼  r   rÌ  r¾  r0   r¢  r¿  r   r   r	   Útest_spawnvpl  s    zSpawnTests.test_spawnvpÚspawnvpec                 C   s6   | j dd}t tj|d || j¡}|  || j¡ d S rÂ  )r¼  r   rÎ  r¾  r~  r0   r¢  r¿  r   r   r	   Útest_spawnvper  s    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¢  )r(   r„   r&  r   r   r	   Útest_nowaitx  s    zSpawnTests.test_nowaitc                 C   s8   | j ddd}t tj|d || j¡}|  || j¡ d S )NTrµ  r   rÊ  r¿  r   r   r	   Útest_spawnve_bytes~  s    zSpawnTests.test_spawnve_bytesc                 C   s>   |   ¡ }|  ttjtj|d ¡ |  ttjtj|d d¡ d S ©Nr   rH  )r¼  r\   r©   r   r½  rŸ  ©r(   r„   r   r   r	   Útest_spawnl_noargs…  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 rÒ  )r¼  r\   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‚  rH  )r¼  r\   r©   r   rž  rŸ  rÓ  r   r   r	   Útest_spawnv_noargs‘  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¼  r\   r©   r   rÉ  rŸ  rÓ  r   r   r	   Útest_spawnve_noargs™  s
    zSpawnTests.test_spawnve_noargsc                 C   st  t jddg}tj ¡ }d|d< z|tj|d ||ƒ}W n tyH   Y n0 |  |d¡ tj ¡ }d|d< z|tj|d ||ƒ}W n ty’   Y n0 |  |d¡ tj ¡ }d	|d
< z|tj|d ||ƒ}W n tyÜ   Y n0 |  |d¡ tj	}|  
tj|¡ t|dƒ}| d¡ W d   ƒ n1 s*0    Y  t j|g}tj ¡ }d|d< |tj|d ||ƒ}|  |d¡ d S )Nrˆ   rž  rŸ  r   r   é   r¡  r¢  r£  r¤  r  zPimport sys, os
if os.getenv("FRUIT") != "orange=lemon":
    raise AssertionErrorzorange=lemon)ra   r‰   r   r  rÅ  r¾  r©   r0   r   rH   rw   rI   r   r   )r(   Úspawnr„   r¥  r¢  r   r    r   r   r	   Ú_test_invalid_env¡  s>    


*

zSpawnTests._test_invalid_envc                 C   s   |   tj¡ d S r#   )rÛ  r   rÉ  rJ   r   r   r	   Útest_spawnve_invalid_envÏ  s    z#SpawnTests.test_spawnve_invalid_envc                 C   s   |   tj¡ d S r#   )rÛ  r   rÎ  rJ   r   r   r	   Útest_spawnvpe_invalid_envÓ  s    z$SpawnTests.test_spawnvpe_invalid_envN)rC   rD   rE   r¼  r   rÀ  rÃ  rÅ  rÇ  rÈ  rË  rÍ  rÏ  rÐ  rÑ  rÔ  rÕ  r×  rØ  rÛ  rÜ  rÝ  r   r   r   r	   r´  '  sD   




	








.
r´  z>Skip due to platform/environment differences on *NIX buildbotsÚgetloginztest needs os.getloginc                   @   s   e Zd Zdd„ ZdS )Ú
LoginTestsc                 C   s   t  ¡ }|  t|ƒd¡ d S r`   )r   rÞ  r  r-   )r(   Z	user_namer   r   r	   Útest_getloginÝ  s    zLoginTests.test_getloginN)rC   rD   rE   rà  r   r   r   r	   rß  Ú  s   rß  ÚgetpriorityÚsetpriorityz'needs os.getpriority and os.setpriorityc                   @   s   e Zd ZdZdd„ ZdS )ÚProgramPriorityTestsz0Tests for os.getpriority() and os.setpriority().c                 C   s  t  t jt  ¡ ¡}t  t jt  ¡ |d ¡ z’t  t jt  ¡ ¡}|dkr^|dkr^t d| ¡‚n|  ||d ¡ W zt  t jt  ¡ |¡ W n2 tyº } z|j	t	j
kr¦‚ W Y d }~n
d }~0 0 nPzt  t jt  ¡ |¡ W n4 ty
 } z|j	t	j
krö‚ W Y d }~n
d }~0 0 0 d S )NrU   é   z?unable to reliably test setpriority at current nice level of %s)r   rá  ÚPRIO_PROCESSr›  râ  r   r:  r0   r7   r8   ZEACCES)r(   r  Znew_prior„  r   r   r	   Útest_set_get_priorityç  s&    ÿüz*ProgramPriorityTests.test_set_get_priorityN)rC   rD   rE   rÊ  ræ  r   r   r   r	   rã  â  s   rã  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                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )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)r(   Úconnr   r   r	   rê  þ  s
    z#SendfileTestServer.Handler.__init__c                 C   s    |   d¡}| jr| j |¡ d S )Né   )Úrecvrì  rë  rñ  ru  r   r   r	   Úhandle_read  s    
z&SendfileTestServer.Handler.handle_readc                 C   s   d  | j¡S )Nr   )r3   rë  rJ   r   r   r	   Úget_data
  s    z#SendfileTestServer.Handler.get_datac                 C   s   |   ¡  d| _d S rÕ  )rN   rí  rJ   r   r   r	   Úhandle_close  s    z'SendfileTestServer.Handler.handle_closec                  C   s   ‚ d S r#   r   rJ   r   r   r	   Úhandle_error  s    z'SendfileTestServer.Handler.handle_errorN)rC   rD   rE   rê  rò  ró  rô  rõ  r   r   r   r	   ÚHandlerü  s
   rö  c                 C   sp   t j | ¡ tj | ¡ |  tjtj¡ |  	|¡ |  
d¡ | j ¡ d d… \| _| _d | _d| _t  ¡ | _d S )Nr¬   rW   F)Ú	threadingÚThreadrê  ÚasyncoreÚ
dispatcherZcreate_socketÚsocketÚAF_INETÚSOCK_STREAMÚbindÚlistenÚgetsocknameÚhostÚportÚhandler_instanceÚ_activeÚLockÚ_active_lock)r(   Úaddressr   r   r	   rê    s    

zSendfileTestServer.__init__c                 C   s   | j S r#   )r  rJ   r   r   r	   r  !  s    zSendfileTestServer.runningc                 C   s$   t  ¡ | _t j | ¡ | j ¡  d S r#   )r÷  ÚEventÚ_SendfileTestServer__flagrø  Ústartr'  rJ   r   r   r	   r
  %  s    
zSendfileTestServer.startc                 C   s   d| _ |  ¡  d S r½  )r  r3   rJ   r   r   r	   Ústop+  s    zSendfileTestServer.stopc                 C   s&   t | jddƒst d¡ q |  ¡  d S )Nrí  Fçü©ñÒMbP?)rÖ   r  r@  r$  r  rJ   r   r   r	   r'  0  s    zSendfileTestServer.waitc                 C   sL   d| _ | j ¡  | j r@tjr@| j ¡  tjddd | j ¡  qt 	¡  d S )NTr  rU   )Útimeoutro  )
r  r	  r  rù  Z
socket_mapr  ÚacquireZloopÚreleaseZ	close_allrJ   r   r   r	   r™  8  s    

zSendfileTestServer.runc                 C   s   |   ¡ \}}|  |¡| _d S r#   )Úacceptrö  r  )r(   rï  Úaddrr   r   r	   Úhandle_acceptA  s    z SendfileTestServer.handle_acceptc                 C   s   |   ¡  d S r#   )rN   rJ   r   r   r	   Úhandle_connectE  s    z!SendfileTestServer.handle_connectc                 C   s   dS r`   r   rJ   r   r   r	   ÚwritableI  s    zSendfileTestServer.writablec                  C   s   ‚ d S r#   r   rJ   r   r   r	   rõ  L  s    zSendfileTestServer.handle_errorN)rC   rD   rE   rè  ré  rö  rê  Úpropertyr  r
  r  r'  r™  r  r  rò  r  rõ  r   r   r   r	   rç  ú  s   
	rç  Úsendfileztest needs os.sendfile()c                   @   s
  e Zd Zdd Zej d¡ o8ej d¡ o8e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_setuprj  r!   rH   ÚDATArA  r   r   r	   rC  \  s    
zTestSendfile.setUpClassc                 C   s   t j| jŽ  t  t j¡ d S r#   )r   Zthreading_cleanuprj  rI   rH   rA  r   r   r	   rV  a  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   rU   r  rv   )rç  r   ZHOSTÚserverr
  rû  ÚclientÚconnectr  r  Ú
settimeoutrñ  rl   Úsocknor   r   rH   rá  rJ   r   r   r	   rK   f  s    

zTestSendfile.setUpc                 C   s0   | j  ¡  | j ¡  | jjr&| j ¡  d | _d S r#   )rá  rN   r  r  r  r  rJ   r   r   r	   r»   r  s
    


zTestSendfile.tearDownc              
   O   sp   zt j|i |¤ŽW S  tyh } z>|jtjkr2‚ n"|jtjtjfv rRW Y d}~q n‚ W Y d}~q d}~0 0 q dS )zfA higher level wrapper representing how an application is
        supposed to use sendfile().
        N)r   r  r7   r8   Z
ECONNRESETÚEAGAINÚEBUSY)r(   r„   rÐ  r„  r   r   r	   Úsendfile_wrappery  s    zTestSendfile.sendfile_wrapperc                 C   sÌ   d}d}d}|t | jƒk rd|  | j| j||¡}|dkr8qd||7 }||7 }|  ||k¡ |  ||¡ q|  |t | jƒ¡ | j t	j
¡ | j ¡  | j ¡  | jj ¡ }|  t |ƒt | jƒ¡ |  || j¡ d S )Nr   rð  )r-   r  r"  r  rl   rO   r0   r  Úshutdownrû  Ú	SHUT_RDWRrN   r  r'  r  ró  )r(   Ú
total_sentÚoffsetÚnbytesÚsentrx   r   r   r	   Útest_send_whole_fileŠ  s$    

z!TestSendfile.test_send_whole_filec                 C   sä   d}t | jƒd }t | jƒ| }d}||k rj|  | j| j||¡}|dkrJqj||7 }||7 }|  ||k¡ q$| j tj	¡ | j 
¡  | j ¡  | jj ¡ }| jt | jƒd d … }|  |t |ƒ¡ |  t |ƒt |ƒ¡ |  ||¡ d S )Nr   rW   rð  )r-   r  r"  r  rl   rO   r  r#  rû  r$  rN   r  r'  r  ró  r0   )r(   r%  r&  Z	must_sendr'  r(  rx   r<   r   r   r	   Útest_send_at_certain_offset   s&    

z(TestSendfile.test_send_at_certain_offsetc              
   C   s¤   t | jƒd }zt | j| j|d¡}W n2 tyX } z|jtjkrD‚ W Y d }~nd }~0 0 |  	|d¡ | j
 tj¡ | j
 ¡  | j ¡  | jj ¡ }|  	|d¡ d S )Nrð  r   r   )r-   r  r   r  r  rl   r7   r8   ÚEINVALr0   r  r#  rû  r$  rN   r  r'  r  ró  )r(   r&  r(  r¶   rx   r   r   r	   Útest_offset_overflow·  s    

z!TestSendfile.test_offset_overflowc                 C   sT   |   t¡$}t | j| jdd¡ W d   ƒ n1 s40    Y  |  |jjtj	¡ d S )Nrë  rð  )
r\   r7   r   r  r  rl   r0   r  r8   r+  ©r(   r§  r   r   r	   Útest_invalid_offsetÈ  s    2z TestSendfile.test_invalid_offsetc              	   C   s<   t j| j| jddd | jr8t j| j| jdddddd d S )Nr   rð  )r´   r²   r&  ro  r   )r´   r²   r&  ro  ÚheadersÚtrailersrœ   )r   r  r  rl   ÚSUPPORT_HEADERS_TRAILERSrJ   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 r¤tt|ƒ| dƒ}|  | j| j||¡}|dkr†q¤|  ||¡ ||7 }||7 }qJ|  	|t|ƒ¡ | j
 ¡  | j ¡  | jj ¡ }|  	t|ƒt|ƒ¡ d S )	Nr   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyrë  rð  s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxs   yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy©r/  i   )r  r   r  r  rl   ZassertLessEqualr-   Úminr"  r0   r  rN   r  r'  r  ró  Úhash)r(   r%  Zexpected_datar(  r&  r'  rx   r   r   r	   Útest_headersØ  s.    ÿÿ


zTestSendfile.test_headersc                 C   sž   t jd }d}|  t j|¡ t||ƒ t|dƒZ}tj| j| 	¡ ddddgd | j
 ¡  | j ¡  | jj ¡ }|  |d	¡ W d   ƒ n1 s0    Y  d S )
Nr¸  s   abcdefrv   r   r¬   s   123456s   789©r0  s   abcde123456789)r   rH   rw   rI   r!   r   r   r  r  rl   r  rN   r  r'  r  ró  r0   )r(   r™   Z	file_datarS   rx   r   r   r	   Útest_trailersñ  s    

ÿ

zTestSendfile.test_trailersc                 C   sl   d| j j_|  t¡2}tj| j| jdddd gd d W d   ƒ n1 sL0    Y  |  	|j
jtj¡ d S )NFr   ó   xé   rŸ  r3  ©r  r  rì  r\   r7   r   r  r  rl   r0   r  r8   r+  r-  r   r   r	   Útest_headers_overflow_32bits  s    
ÿ$z)TestSendfile.test_headers_overflow_32bitsc                 C   sl   d| j j_|  t¡2}tj| j| jdddd gd d W d   ƒ n1 sL0    Y  |  	|j
jtj¡ d S )NFr   r9  r:  rŸ  r7  r;  r-  r   r   r	   Útest_trailers_overflow_32bits
  s    
ÿ$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 n8 tyV } z |jtjtjfvrB‚ W Y d }~n
d }~0 0 d S )Nr   rð  )rœ   )	r   r  r  rl   r>  r7   r8   r!  r   )r(   r„  r   r   r	   Ú
test_flags  s    ÿ
zTestSendfile.test_flagsN)rC   rD   rE   r  ra   r½   rH  r1  r   r   Zrequires_headers_trailersÚmaxsizeZrequires_32brW  rC  rV  rK   r»   r"  r)  r*  r,  r.  r2  r6  r8  r<  r=  r   r   r?  r   r   r   r	   r  P  sN   ÿþÿÿ



ÿr  c               	   C   s¦   t tdƒsdS z„ttjddƒV} zt |  ¡ dd¡ W n. tyd   Y W d   ƒ W t tj¡ dS 0 W d   ƒ n1 sz0    Y  W t tj¡ nt tj¡ 0 dS )NÚsetxattrFr   r   ó	   user.testr   T)	r   r   r   r   rH   rA  rl   r7   rI   )r    r   r   r	   Úsupports_extended_attributes  s    
þ&rC  z(no non-broken extended attribute supportrW   r­   é'   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚExtendedAttributeTestsc                 K   sJ  t j}|  t j|¡ t|ƒ |  t¡&}|||dƒfi |¤Ž W d   ƒ n1 sR0    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 sN0    Y  |  |jj	t	j¡ |  t¡,}|||dƒdtjfi |¤Ž W d   ƒ n1 s¨0    Y  |  |jj	t	j
¡ |||dƒdtjfi |¤Ž |
 d¡ |  t||ƒƒ|
¡ |||dƒfi |¤Ž |  t¡&}|||dƒfi |¤Ž W d   ƒ n1 sL0    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   rB  rd  s   byez
user.test2s   foos   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac                 s   s   | ]}d   |¡V  qdS )zuser.test{}Nrz  )r   rµ   r   r   r	   r|  `  r   z;ExtendedAttributeTests._check_xattrs_str.<locals>.<genexpr>r‘   r9  )r   rH   rw   rI   r!   r\   r7   r0   r  r8   ÚENODATAr%   rì  r  r	  r   ÚXATTR_REPLACEÚXATTR_CREATEÚEEXISTrò  rA  r°   )r(   rr   ÚgetxattrrA  ÚremovexattrÚ	listxattrrÐ  r  r§  Z
init_xattrZxattrÚmanyÚthingr   r   r	   Ú_check_xattrs_str5  sL    4
<<
6
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#   )rP  r&   r   rI   rH   r   r   r  r   r   r	   Ú_check_xattrse  s    z$ExtendedAttributeTests._check_xattrsc                 C   s   |   tjtjtjtj¡ d S r#   ©rQ  r   rK  rA  rL  rM  rJ   r   r   r	   Útest_simplel  s    ÿz"ExtendedAttributeTests.test_simplec                 C   s    | j tjtjtjtjdd d S )NFrR  rR  rJ   r   r   r	   Ú
test_lpathp  s    ÿz!ExtendedAttributeTests.test_lpathc                 C   s4   dd„ }dd„ }dd„ }dd„ }|   ||||¡ d S )	Nc                 W   sD   t | dƒ&}tj| ¡ g|¢R Ž W  d   ƒ S 1 s60    Y  d S r  )r   r   rK  rl   ©r1   r„   r    r   r   r	   rK  u  s    z1ExtendedAttributeTests.test_fds.<locals>.getxattrc                 W   sF   t | ddƒ&}tj| ¡ g|¢R Ž  W d   ƒ n1 s80    Y  d S ©Nr9  r   )r   r   rA  rl   rU  r   r   r	   rA  x  s    z1ExtendedAttributeTests.test_fds.<locals>.setxattrc                 W   sF   t | ddƒ&}tj| ¡ g|¢R Ž  W d   ƒ n1 s80    Y  d S rV  )r   r   rL  rl   rU  r   r   r	   rL  {  s    z4ExtendedAttributeTests.test_fds.<locals>.removexattrc                 W   sD   t | dƒ&}tj| ¡ g|¢R Ž W  d   ƒ S 1 s60    Y  d S r  )r   r   rM  rl   rU  r   r   r	   rM  ~  s    z2ExtendedAttributeTests.test_fds.<locals>.listxattr)rQ  )r(   rK  rA  rL  rM  r   r   r	   Útest_fdst  s
    zExtendedAttributeTests.test_fdsN)rC   rD   rE   rP  rQ  rS  rT  rW  r   r   r   r	   rE  /  s
   0rE  Úget_terminal_sizezrequires os.get_terminal_sizec                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTermsizeTestsc              
   C   sz   zt  ¡ }W nL tyX } z4tjdks8|jtjtjfv rB|  d¡ ‚ W Y d}~n
d}~0 0 |  	|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   rX  r7   ra   r½   r8   r+  ÚENOTTYrZ   ZassertGreaterEqualÚcolumnsÚlines)r(   rt   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yB   |  d¡ Y n0 t|d ƒt|d ƒf}zt	 
tj ¡ ¡}W nL ty¼ } z4tjdksœ|jtjtjfv r¦|  d	¡ ‚ W Y d
}~n
d
}~0 0 |  ||¡ 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sttyrt   T)r  r–  zstty invocation failedrU   r   r‡   rZ  N)r‚   Úcheck_outputÚDEVNULLr×   r6   ÚCalledProcessErrorré  rZ   rÁ   r   rX  ra   Ú	__stdin__rl   r7   r½   r8   r+  r[  r0   )r(   rt   r<   rÀ  r¶   r   r   r	   Útest_stty_match˜  s"    ÿÿÿ

zTermsizeTests.test_stty_matchN)rC   rD   rE   r^  rc  r   r   r   r	   rY  „  s   rY  Úmemfd_createzrequires os.memfd_creater¸   r¸  c                   @   s   e Zd Zdd„ ZdS )ÚMemfdCreateTestsc                 C   s¬   t  dt j¡}|  |d¡ |  t j|¡ |  t  |¡¡ t|ddd*}| 	d¡ |  
| ¡ d¡ W d   ƒ n1 sv0    Y  t  d¡}|  t j|¡ |  t  |¡¡ d S )NZHirë  r9  F)Úclosefds   memfd_createrÎ   )r   rd  ÚMFD_CLOEXECr  rw   rN   r\  rÖ  r   r   r0   Útell)r(   rq   rS   Úfd2r   r   r	   Útest_memfd_create¸  s    
.
z"MemfdCreateTests.test_memfd_createN)rC   rD   rE   rj  r   r   r   r	   re  µ  s   re  c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú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rbtj}nt 	tj¡}| j |¡ | j t
|ƒ¡ | j t|ƒ¡ | j| j | _d S )Nc                   @   s   e Zd ZdS )zOSErrorTests.setUp.<locals>.StrN©rC   rD   rE   r   r   r   r	   ÚStrÈ  s   rm  )r&   Úbytes_filenamesÚunicode_filenamesr   r  rH   rñ  ZTESTFN_UNDECODABLEr   r   r|   r}   r…  )r(   rm  ZdecodedÚencodedr   r   r	   rK   Ç  s    

zOSErrorTests.setUpc                 C   sJ  | 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r | | 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ƒrì| | 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	ƒrN| | j tjdf¡ ttd
ƒrn| | 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ƒrH| | j tjdf¡ ttdƒrf| | j tj f¡ |D ]Ú^}}}|D ]È}zdt!|t"t#fƒr ||g|¢R Ž  n>|  $t%d¡  ||g|¢R Ž  W d   ƒ n1 sÔ0    Y  W nL t&y } z |  '|j(|t"|ƒ¡ W Y d }~n,d }~0  t)y,   Y n0 |  *d +|¡¡ qxqjd S )Nr›   r‡   s   dstr¤   r?  r   ÚlchownrË  ÚchflagsÚlchflagsÚchrootr×  rM  rF  s   userÚlchmodrF  z	should bezNo exception thrown by {}),r…  r   r5   rç  r9  r   r   r  r˜   rI   ra   r½   r=  rn  rd   r—   ro  rè  r   rñ  r?  rq  rË  rr  rs  rt  r×  rM  rK  rA  rL  ru  rF  r÷   r&   r@   ZassertWarnsRegexÚDeprecationWarningr7   r¤  r   ÚUnicodeDecodeErrorrÙ   r{  )r(   Zfuncsr…  ÚfuncZ	func_argsr   r„  r   r   r	   Útest_oserror_filenameÝ  sz    




ù	

û
ý

ü4(z"OSErrorTests.test_oserror_filenameN)rC   rD   rE   rK   ry  r   r   r   r	   rk  Æ  s   rk  c                   @   s   e Zd Zdd„ ZdS )ÚCPUCountTestsc                 C   s8   t  ¡ }|d ur*|  |t¡ |  |d¡ n
|  d¡ d S )Nr   z&Could not determine the number of CPUs)r   Ú	cpu_countr%   rÁ   ÚassertGreaterrZ   )r(   Zcpusr   r   r	   Útest_cpu_count$  s
    zCPUCountTests.test_cpu_countN)rC   rD   rE   r}  r   r   r   r	   rz  #  s   rz  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   rw   rN   r0   rÖ  r×  r’   r   r   r	   Útest_get_set_inheritable.  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   rw   rN   r0   rÖ  ÚfcntlÚF_GETFDÚ
FD_CLOEXECZF_SETFD)r(   rq   rœ   r   r   r	   Útest_get_inheritable_cloexec6  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   rw   rN   r0   r  r‚  rƒ  r×  r’   r   r   r	   Útest_set_inheritable_cloexecC  s    ÿÿz/FDInheritanceTests.test_set_inheritable_cloexecÚO_PATHzneed os.O_PATHc                 C   sn   t  tt j¡}|  t j|¡ |  t  |¡d¡ t  |d¡ |  t  |¡d¡ t  |d¡ |  t  |¡d¡ d S r  )	r   r   rŸ   r†  rw   rN   r0   rÖ  r×  r’   r   r   r	   Útest_get_set_inheritable_o_pathN  s    z2FDInheritanceTests.test_get_set_inheritable_o_pathc                 C   sâ   t  ¡ }|  t¡}t |¡ W d   ƒ n1 s20    Y  |  |jjtj	¡ |  t¡}t 
|d¡ W d   ƒ n1 sz0    Y  |  |jjtj	¡ |  t¡}t 
|d¡ W d   ƒ n1 sÂ0    Y  |  |jjtj	¡ d S ©NTF)r   r»  r\   r7   r   rÖ  r0   r  r8   r  r×  )r(   rq   r  r   r   r	   Útest_get_set_inheritable_badfZ  s    (**z0FDInheritanceTests.test_get_set_inheritable_badfc                 C   s2   t  tt j¡}|  t j|¡ |  t  |¡d¡ d S r½  )r   r   rŸ   r   rw   rN   r0   rÖ  r’   r   r   r	   r  i  s    zFDInheritanceTests.test_openr  zneed os.pipe()c                 C   sP   t  ¡ \}}|  t j|¡ |  t j|¡ |  t  |¡d¡ |  t  |¡d¡ d S r½  )r   r  rw   rN   r0   rÖ  )r(   ZrfdZwfdr   r   r	   Ú	test_pipen  s
    zFDInheritanceTests.test_pipec                 C   sJ   t  tt j¡}|  t j|¡ t  |¡}|  t j|¡ |  t  |¡d¡ d S r½  )	r   r   rŸ   r   rw   rN   rY   r0   rÖ  ©r(   Úfd1ri  r   r   r	   Útest_dupv  s
    
zFDInheritanceTests.test_dupc                 C   s(   t  d¡}|  t j|¡ |  |d¡ d S ©NrU   r   )r   rY   rw   rN   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   rw   rN   rY   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   rw   rN   r0   r¿  rO   rÖ  r\  )r(   rq   ri  Zfd3r   r   r	   rÁ  Œ  s    zFDInheritanceTests.test_dup2Úopenptyzneed os.openpty()c                 C   sP   t  ¡ \}}|  t j|¡ |  t j|¡ |  t  |¡d¡ |  t  |¡d¡ d S r½  )r   r“  rw   rN   r0   rÖ  )r(   Z	master_fdZslave_fdr   r   r	   Útest_openpty  s
    zFDInheritanceTests.test_openpty)rC   rD   rE   r€  r   rª  r  r„  r…  r   r   r   r‡  r‰  r  rŠ  r  r  ra   r½   r‘  rÁ  r”  r   r   r   r	   r~  -  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)r9  Fr   NrP   FN)rr  F©r   N)rs  Fr–  Nr   r–  rN   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V ztt|ƒ}W n" tyÈ   Y W d   ƒ qzY n0 ||||fD ]`}|d u räqÖ| j||d2 ||g|	¢R Ž }|
d ur|
|ƒ W d   ƒ qÖ1 s,0    Y  qÖ|  td¡  ||g|	¢R Ž  W d   ƒ n1 sl0    Y  |r ||g|	¢R Ž }|
d urÞ|
|ƒ n>|  td¡  ||g|	¢R Ž  W d   ƒ n1 sÔ0    Y  W d   ƒ qz1 sô0    Y  qzd S )Nr,  r   )r   r1   zto return str or byteszos.PathLike)r   rH   r   r   r   r   r   r{   rL   rw   rI   rN   Ú	functionsZsubTestrÖ   rÜ   ÚassertRaisesRegexrc   )r(   Zstr_filenameZbytes_fspathÚbytes_filenamerq   Z
int_fspathZ
str_fspathr   Zallow_fdÚ
extra_argsZ
cleanup_fnr  r1   rà   r   r   r	   Útest_path_t_converter²  sL    

ÿ
*ÿ0

þz)PathTConverterTests.test_path_t_converterc                 C   sÄ   d}|   t|d ¡ t tdƒ¡ W d   ƒ n1 s80    Y  |   t|d ¡ t tdƒ¡ W d   ƒ n1 sv0    Y  |   t|d ¡  t ttƒ ƒ¡ W d   ƒ n1 s¶0    Y  d S )Nz-__fspath__\(\) to return str or bytes, not %srÁ   rW   Úfloatg¸…ëQ¸@Úobject)r˜  rc   r   r˜   r   r  )r(   r?  r   r   r	   Ú&test_path_t_converter_and_custom_classÞ  s    ,,z:PathTConverterTests.test_path_t_converter_and_custom_class)	rC   rD   rE   r   ÚF_OKrÖ   r—  r›  rž  r   r   r   r	   r•  ¦  s   ú	,r•  rÙ  rÚ  c                   @   s   e Zd Zdd„ ZdS )ÚBlockingTestsc                 C   sn   t  tt j¡}|  t j|¡ |  t  |¡d¡ t  |d¡ |  t  |¡d¡ t  |d¡ |  t  |¡d¡ d S rˆ  )	r   r   rŸ   r   rw   rN   r0   rÙ  rÛ  r’   r   r   r	   rÜ  ë  s    zBlockingTests.test_blockingN)rC   rD   rE   rÜ  r   r   r   r	   r   è  s   r   c                   @   s   e Zd Zdd„ ZdS )ÚExportsTestsc                 C   s    |   dtj¡ |   dtj¡ d S )Nr   rÎ  )r¯   r   Ú__all__rJ   r   r   r	   Útest_os_allù  s    zExportsTests.test_os_allN)rC   rD   rE   r£  r   r   r   r	   r¡  ø  s   r¡  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestDirEntryc                 C   s0   t j tj¡| _|  tj| j¡ t  | j¡ d S r#   )r   r1   Úrealpathr   rH   rw   r  r4   rJ   r   r   r	   rK   ÿ  s    zTestDirEntry.setUpc                 C   s   |   ttj¡ d S r#   )r\   rc   r   ÚDirEntryrJ   r   r   r	   Útest_uninstantiable  s    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
   	  r   z0TestDirEntry.test_unpickable.<locals>.<listcomp>r   )r!   r   r1   r3   Úscandirr—  r%   r¦  r0   r   rê   r\   rc   rì   )r(   r   rª  rê   r   r   r	   Útest_unpickable  s    zTestDirEntry.test_unpickableN)rC   rD   rE   rK   r§  r¬  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   r1   r¥  r   rH   r   Ú
bytes_pathrw   r  r4   rJ   r   r   r	   rK     s    zTestScandir.setUpr`  c                 C   s2   t |tƒr| jn| j}tj ||¡}t|dƒ |S )Nr¨  )r÷   r@   r®  r1   r   r3   r!   )r(   r   r1   r   r   r   r	   r!     s    
zTestScandir.create_filec                 C   s2   t dd„ t | j¡D ƒƒ}|  t| ¡ ƒ|¡ |S )Nc                 s   s   | ]}|j |fV  qd S r#   r   r©  r   r   r	   r|     s   ÿz*TestScandir.get_entries.<locals>.<genexpr>)rb  r   r«  r1   r0   rA  Úkeys)r(   ÚnamesÚentriesr   r   r	   Úget_entries  s
    
ÿzTestScandir.get_entriesc                 C   sZ   |rJt |ƒD ]:}| d¡sq|dv r&q|  t||ƒt||ƒ|||f¡ qn|  ||¡ d S )NZst_)Úst_devÚst_inoÚst_nlink)rÓ   rH  r0   rÖ   )r(   Zstat1Zstat2Zskip_fieldsrâ   r   r   r	   Úassert_stat_equal%  s    
þzTestScandir.assert_stat_equalc                 C   s(   t  | j¡}|  tt|ƒ¡ | ¡  d S r#   )r   r«  r1   r\   rc   ro   rN   )r(   Úscandir_iterr   r   r	   r§  2  s    zTestScandir.test_uninstantiablec                 C   s<   |   d¡}t | j¡}dd l}|  t|j||¡ | ¡  d S )Nr`  r   )	r!   r   r«  r1   rê   r\   rc   rì   rN   )r(   r   r·  rê   r   r   r	   r¬  7  s
    
zTestScandir.test_unpickablec                 C   s2  |   |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 )NFrR  r,  )r%   r   r¦  r0   r   r1   r3   Úinoder˜   r´  Úis_dirÚS_ISDIRrÛ   Úis_fileÚS_ISREGÚ
is_symlinkr\  r¶  )r(   rª  r   r¹  r»  r½  Z
entry_statZentry_lstatr   r   r	   Úcheck_entry>  s>    
ÿ

ÿ

ÿ
ÿ
ÿ
ÿ
þþzTestScandir.check_entryc           	   
   C   s‚  t tdƒ}t ¡ }tj | jd¡}t |¡ |  d¡}|rŠzt |tj | jd¡¡ W n2 t	yˆ } z|  
d| ¡ W Y d }~n
d }~0 0 |rÂtj|tj | jd¡dd t |tj | jd	¡¡ ddg}|rØ| d¡ |ræ| d
¡ |  |¡}|d }|  |dddd¡ |d }|  |dddd¡ |rD|d }|  |dddd¡ |r~|d }|  |dddd¡ |d	 }|  |d	ddd¡ d S )Nr×  rÓ   r`  zlink_file.txtrâ  Úsymlink_dirT)r¥   úsymlink_file.txt)r¿  rÀ  F)r   r   r   rå  r1   r3   r4   r!   r×  ré  rZ   r¡   rñ  r=  r²  r¾  )	r(   r×  r¡   r;   r   r¶   r°  r±  rª  r   r   r	   Útest_attributesZ  sB    


$ÿ


zTestScandir.test_attributesc                 C   sN   t |tƒr| jn| j}tt |¡ƒ}|  t|ƒd¡ |d }|  |j	|¡ |S rŽ  )
r÷   r@   r®  r1   rì  r   r«  r0   r-   r   )r(   r   r1   r±  rª  r   r   r	   Ú	get_entryƒ  s    zTestScandir.get_entryc                 C   s   | j |d}|  tj |¡¡S )Nr   )r!   rÂ  r   r1   Úbasename)r(   r   r   r   r   r	   Úcreate_file_entryŒ  s    zTestScandir.create_file_entryc              	   C   sp   |   ¡ }t ¡ }zNt | j¡ tdd„ t ¡ D ƒƒ}|  t| 	¡ ƒtj 
|¡g¡ W t |¡ nt |¡ 0 d S )Nc                 s   s   | ]}|j |fV  qd S r#   r   r©  r   r   r	   r|  ˜  r   z5TestScandir.test_current_directory.<locals>.<genexpr>)r!   r   r$   r5   r1   rb  r«  r0   rA  r¯  rÃ  )r(   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'>)rÄ  r0   r}  ©r(   rª  r   r   r	   Ú	test_reprž  s    zTestScandir.test_reprc                 C   s*   |   ¡ }|  t |¡tj | jd¡¡ d S )Nr`  )rÄ  r0   r   Úfspathr1   r3   rÆ  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   rÄ  rÈ  r%   r@   r0   r1   r3   )r(   r™  Zbytes_entryrÈ  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rF|  | ¡ ¡ |  	| 
¡ ¡ |  	| ¡ ¡ t jdkr|  t|j¡ | ¡  |jdd n0|  | ¡ d¡ |  t|j¡ | jt|jdd d S )NrÓ   r,  FrR  r   )r   r1   r3   r4   rÂ  r  r   rO   r¹  r\  r»  r½  r\   r6   r¸  r˜   r|  )r(   r1   rª  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rv|  
t|j¡ | ¡  |jdd n0|  | ¡ d¡ |  
t|j¡ | j
t|jdd d S )Nr,  FrR  r   )rÄ  r   rI   r1   r\  r¹  r   rO   r»  r½  r\   r6   r¸  r˜   r|  rÆ  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   FrR  )r   rå  rZ   r!   r   r¡   r1   r3   r²  rI   r|  r¸  r\  r¹  r»  rO   r½  r\   r6   r˜   )r(   r   r±  rª  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`  rU   r   s   file.txt)
r!   r   r   r1   rì  r«  r0   r-   r   r3   )r(   Ú
path_bytesr±  rª  r   r   r	   rV  ì  s    
ÿzTestScandir.test_bytesc              
   C   sÐ   |   d¡ ttfD ]¸}|t | j¡ƒ}|  t¡ tt 	|¡ƒ}W d   ƒ n1 sT0    Y  |  
t|ƒd|¡ |d }|  
|jd¡ |  
|jt tj | jd¡¡¡ |  t|jƒt¡ |  t|jƒt¡ qd S rÎ  )r!   r|   r}   r   r   r1   ÚassertWarnsrv  rì  r«  r0   r-   r   r3   r¤  ro   r@   )r(   rB  rÏ  r±  rª  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 ¡ rJt dtj 	| jd¡¡ | 
d¡ t | jtj¡}zt |¡}t|ƒ}W d   ƒ n1 s†0    Y  dd„ |D ƒ}|  t|ƒ|¡ |  |t |¡¡ |D ]}|  |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 t |¡ nt |¡ 0 d S )	Nr`  r×  c                 S   s   g | ]
}|j ‘qS r   r   r©  r   r   r	   r
     r   z'TestScandir.test_fd.<locals>.<listcomp>rS  F)rž   r7  rR  )r¯   r   r«  rU  r!   r   rå  r¡   r1   r3   rñ  r   r   rì  r0   rA  rè  r   rÈ  r½  r˜   rV  rN   )r(   Zexpected_namesrq   rt  r±  r°  rª  r  r   r   r	   Útest_fd  s.    

&zTestScandir.test_fdc                 C   s   |   ttjd¡ d S )NrH  )r\   r6   r   r«  rJ   r   r   r	   Útest_empty_path%  s    zTestScandir.test_empty_pathc                 C   sN   |   d¡ t | j¡}t|ƒ}|  t|ƒd|¡ t|ƒ}|  t|ƒd|¡ d S )Nr`  rU   r   )r!   r   r«  r1   rì  r0   r-   )r(   r©  r±  Zentries2r   r   r	   Útest_consume_iterator_twice(  s    
z'TestScandir.test_consume_iterator_twicec                 C   s$   di g fD ]}|   ttj|¡ q
d S )NgX9´Èv¾ó?)r\   rc   r   r«  )r(   Úobjr   r   r	   Útest_bad_path_type3  s    zTestScandir.test_bad_path_typec                 C   sf   |   d¡ |   d¡ t | j¡}t|ƒ | ¡  | ¡  |  ¡  ~W d   ƒ n1 sX0    Y  d S ©Nr`  ú	file2.txt)r!   r   r«  r1   rr  rN   Úcheck_no_resource_warning©r(   r©  r   r   r	   Ú
test_close7  s    


zTestScandir.test_closec                 C   sv   |   d¡ |   d¡ t | j¡}t|ƒ W d   ƒ n1 s>0    Y  |  ¡  ~W d   ƒ n1 sh0    Y  d S r×  )r!   r   r«  r1   rr  rÙ  rÚ  r   r   r	   Útest_context_managerB  s    

&
z TestScandir.test_context_managerc                 C   sT   |   d¡ |   d¡ t | j¡ }t|ƒ | ¡  W d   ƒ n1 sF0    Y  d S r×  )r!   r   r«  r1   rr  rN   rÚ  r   r   r	   Útest_context_manager_closeJ  s
    

z&TestScandir.test_context_manager_closec              	   C   s¨   |   d¡ |   d¡ |  t¡L t | j¡ }t|ƒ dd  W d   ƒ n1 sR0    Y  W d   ƒ n1 sp0    Y  |  ¡  ~W d   ƒ n1 sš0    Y  d S )Nr`  rØ  rU   r   )r!   r\   ÚZeroDivisionErrorr   r«  r1   rr  rÙ  rÚ  r   r   r	   Útest_context_manager_exceptionQ  s    

D
z*TestScandir.test_context_manager_exceptionc                 C   sž   |   d¡ |   d¡ t | j¡}t|ƒ |  t¡ ~t ¡  W d   ƒ n1 sR0    Y  t | j¡}t	|ƒ |  
¡  ~W d   ƒ n1 s0    Y  d S r×  )r!   r   r«  r1   rr  rÐ  ÚResourceWarningr   Ú
gc_collectrì  rÙ  rÚ  r   r   r	   Útest_resource_warning[  s    

&
z!TestScandir.test_resource_warningN)r`  )r`  )&rC   rD   rE   r   rÙ  rK   r!   r²  r¶  r§  r¬  r¾  rÁ  rÂ  rÄ  rÅ  rÇ  rÉ  rÊ  rË  rÌ  rÍ  rV  rÑ  r   r   r   rè  rU  rÒ  rÓ  rÔ  rÖ  rÛ  rÜ  rÝ  rß  râ  r   r   r   r	   r­    s@   
)	
ÿ

r­  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   s    dD ]}|   ||  |¡¡ qd S )N)rd  s   goodbyes   some/path/and/file©r0   rÈ  )r(   Úbr   r   r	   Útest_return_bytesp  s    zTestPEP519.test_return_bytesc                 C   s    dD ]}|   ||  |¡¡ qd S )N)ZhelloZgoodbyezsome/path/and/filerä  )r(   rr   r   r   r	   Útest_return_stringt  s    zTestPEP519.test_return_stringc                 C   sL   dD ]B}t |ƒ}|  ||  |¡¡ |  dt |¡¡ |  dt |¡¡ qd S )N)úpath/like/objectó   path/like/objectré  rè  )r   r0   rÈ  r   r   rA   )r(   rð   Zpathliker   r   r	   Útest_fsencode_fsdecodex  s
    z!TestPEP519.test_fsencode_fsdecodec                 C   sB   |   d|  tdƒ¡¡ |  tttjƒ¡ |  ttdƒtjƒ¡ d S )Nz#feelthegilrÃ   )r0   rÈ  r   rO   Ú
issubclassr   ÚPathLiker÷   rJ   r   r   r	   rT  €  s    zTestPEP519.test_pathlikec                 C   s4   t ddi ƒ}tt t|ƒ fD ]}|  t| j|¡ qd S )NZblahr   )ro   rÁ   r   r\   rc   rÈ  )r(   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#   )r\   rc   rÈ  rJ   r   r   r	   Útest_argument_requiredŠ  s    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   rU   )r\   rc   rÈ  r   ro   Ú
__fspath__rÞ  )r(   Ú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                   @   s   e Zd ZdS )z0TestPEP519.test_pathlike_subclasshook.<locals>.ANrl  r   r   r   r	   ÚA›  s   ró  )r   rì  r\  rë  r   rO   )r(   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   rì  r@   ÚtypesÚGenericAliasrJ   r   r   r	   Útest_pathlike_class_getitem   s    z&TestPEP519.test_pathlike_class_getitemN)rC   rD   rE   r_  r   rÈ  ræ  rç  rê  rT  rî  rï  rò  rô  r÷  r   r   r   r	   rã  j  s   
rã  c                   @   s   e Zd Zdd„ ZdS )Ú
TimesTestsc                 C   sn   t  ¡ }|  |t j¡ dD ]}t||ƒ}|  |t¡ qt jdkrj|  |jd¡ |  |j	d¡ |  |j
d¡ d S )N)ÚuserÚsystemÚchildren_userÚchildren_systemÚelapsedr,  r   )r   r5  r%   Útimes_resultrÖ   rœ  r   r0   rû  rü  rý  )r(   r5  Zfieldrú   r   r   r	   Ú
test_times¥  s    

zTimesTests.test_timesN)rC   rD   rE   rÿ  r   r   r   r	   rø  ¤  s   rø  Úforkc                   @   s   e Zd Zdd„ ZdS )Ú	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)rC   rD   rE   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)rC   rD   rE   rÊ  r_  r   r  rÈ  r   r   r   r	   r  Ç  s   r  Ú__main__)r   )N)rè  rù  r”  Ú
contextlibrG  r8   rs  rH  r  r—  r0  r   rê   r
  r+  rû  r˜   r‚   ra   Z	sysconfigr.   r÷  r@  rõ  r   r/  r‹  Útestr   Ztest.supportr   r½   r   r‡  ÚImportErrorr  r|  ÚpwdÚgetpwallrQ  rÜ   Z	_testcapir   r   r@  Ztest.support.script_helperr   r   r   rX  r   r   r   ÚversionrH  r«  Úgetgidrô  r   r!   ZTestCaser"   rF   r¾   r  r`  ZBasicTestMappingProtocolra  rË  r   r  r  r%  r'  r@  rY  rc  rg  rt  Zget_config_varZOS_URANDOM_DONT_USE_FDrª  r€  Úcontextmanagerr‘  r’  r¬  r±  rÞ  rë  r  r  r;  rG  rW  rX  rz  r  rˆ  rŠ  rŽ  r˜  r´  r:  rß  rã  rú  rø  rç  r  rC  Zrequires_linux_versionrE  rY  re  rk  rz  r~  r•  r   r¡  r¤  r­  rã  rø  r  r  rC   Úmainr   r   r   r	   Ú<module>   sb  




A a e _  ' EG^;)	-ÿýÿÿM ÿh#d%CGs/< 0!1H 4ÿV OÿQ0
]
yBÿ  \:
