B
    u9aa   ã               @   sŽ   d dl Z d dlZd dlZd dlmZmZ eddgdZeddgdZG dd„ dƒZG d	d
„ d
ee j	ƒZ
G dd„ dee j	ƒZedkrŠe  ¡  dS )é    N)ÚTESTFNÚimport_fresh_moduleÚstatÚ_stat)Zfresh)Zblockedc               @   s`  e Zd ZdZdddddddd	d
dddhZdddddddhZdddddddhZddddd d!d"d#d$d%d&œ
Zd'd(d(d)d*d+d+d,d,d-d-d.d/d0d$d#d ddd1œZd/d'd-d0d2dd3d,d4d5d6dd(d)d d+d7d8œZ	d9d:„ Z
e
Zed;fd<d=„Zd>d?„ Zd@dA„ ZdBdC„ Ze eedDƒdE¡dFdG„ ƒZe eedHƒdI¡dJdK„ ƒZe ejdLkdM¡dNdO„ ƒZdPdQ„ Ze ejdRkdS¡dTdU„ ƒZdS )VÚTestFilemodeNÚ	SF_APPENDÚSF_ARCHIVEDÚSF_IMMUTABLEÚSF_NOUNLINKÚSF_SNAPSHOTÚ	UF_APPENDÚUF_COMPRESSEDÚ	UF_HIDDENÚUF_IMMUTABLEÚ	UF_NODUMPÚUF_NOUNLINKÚ	UF_OPAQUEÚS_IFBLKÚS_IFCHRÚS_IFDIRÚS_IFIFOÚS_IFLNKÚS_IFREGÚS_IFSOCKÚS_ISBLKÚS_ISCHRÚS_ISDIRÚS_ISFIFOÚS_ISLNKÚS_ISREGÚS_ISSOCKr   é   é   é   é   é   é   é   é   é	   )
ÚST_MODEÚST_INOÚST_DEVÚST_NLINKÚST_UIDÚST_GIDÚST_SIZEÚST_ATIMEÚST_MTIMEÚST_CTIMEi   i   i   iÀ  é   é€   é@   é8   é    é   )ÚS_ISUIDÚS_ISGIDÚS_ENFMTÚS_ISVTXÚS_IRWXUÚS_IRUSRÚS_IREADÚS_IWUSRÚS_IWRITEÚS_IXUSRÚS_IEXECÚS_IRWXGÚS_IRGRPÚS_IWGRPÚS_IXGRPÚS_IRWXOÚS_IROTHÚS_IWOTHÚS_IXOTHi @  i €  i    i   i   i   )ÚFILE_ATTRIBUTE_ARCHIVEÚFILE_ATTRIBUTE_COMPRESSEDÚFILE_ATTRIBUTE_DEVICEÚFILE_ATTRIBUTE_DIRECTORYÚFILE_ATTRIBUTE_ENCRYPTEDÚFILE_ATTRIBUTE_HIDDENÚFILE_ATTRIBUTE_INTEGRITY_STREAMÚFILE_ATTRIBUTE_NORMALÚ"FILE_ATTRIBUTE_NOT_CONTENT_INDEXEDÚFILE_ATTRIBUTE_NO_SCRUB_DATAÚFILE_ATTRIBUTE_OFFLINEÚFILE_ATTRIBUTE_READONLYÚFILE_ATTRIBUTE_REPARSE_POINTÚFILE_ATTRIBUTE_SPARSE_FILEÚFILE_ATTRIBUTE_SYSTEMÚFILE_ATTRIBUTE_TEMPORARYÚFILE_ATTRIBUTE_VIRTUALc             C   sL   yt  t¡ W n8 tk
rF   yt  t¡ W n tk
r@   Y nX Y nX d S )N)ÚosÚremover   ÚOSErrorÚrmdir)Úself© rc   ú/usr/lib/python3.7/test_stat.pyÚsetUpL   s    zTestFilemode.setUpTc             C   s2   |rt  |¡j}nt  |¡j}| j |¡}||fS )N)r^   ÚlstatÚst_moder   ÚstatmodÚfilemode)rb   Zfnamerf   rg   Úmodestrrc   rc   rd   Úget_modeV   s
    zTestFilemode.get_modec             C   s”   t | jd| d¡ ƒ}|  | j |¡|¡ d| }x\| jD ]R}t | j|d ƒ}|d krf||kr:t|ƒ‚q:||kr~|  ||ƒ¡ q:|  ||ƒ¡ q:W d S )NZS_IFÚFZS_IS)	Úgetattrrh   ÚlstripÚassertEqualÚS_IFMTÚformat_funcsÚ
ValueErrorÚ
assertTrueZassertFalse)rb   ÚnameÚmodeZfmtZtestnameÚfuncnameÚfuncrc   rc   rd   Ú
assertS_IS^   s    zTestFilemode.assertS_ISc          	   C   s”  t tdƒ W d Q R X tjdkr@t td¡ |  ¡ \}}|  |d¡ |  d|¡ |  | j 	|¡| jj
¡ t td¡ |  ¡ \}}|  |d¡ |  d|¡ |  | j 	|¡| jj¡ t td¡ |  ¡ \}}|  |d	¡ |  d|¡ |  | j 	|¡| jj¡ t td
¡ |  ¡ \}}|  d|¡ |  |d¡ |  | j 	|¡d
¡ nPt td¡ |  ¡ \}}|  |d d… d¡ |  d|¡ |  | j |¡| jj¡ d S )NÚwÚposixiÀ  z
-rwx------ZREGr7   z
----rwx---r'   z
-------rwxi$  z
-r--r--r--r#   z-rw)Úopenr   r^   rt   Úchmodrk   ro   rx   rh   ÚS_IMODEr>   rE   rI   rp   r   )rb   rg   rj   rc   rc   rd   Ú	test_modeo   s@    



zTestFilemode.test_modec             C   sZ   t  t¡ t  td¡ |  ¡ \}}|  d|¡ t jdkrF|  |d¡ n|  |d d¡ d S )NiÀ  ZDIRrz   z
drwx------r   Úd)r^   Úmkdirr   r|   rk   rx   rt   ro   )rb   rg   rj   rc   rc   rd   Útest_directory•   s    

zTestFilemode.test_directoryÚsymlinkzos.symlink not availablec          
   C   sv   yt  t  ¡ t¡ W n4 ttfk
rH } zt t|ƒ¡‚W d d }~X Y n*X |  	¡ \}}|  
|d d¡ |  d|¡ d S )Nr   ÚlZLNK)r^   r‚   Úgetcwdr   r`   ÚNotImplementedErrorÚunittestZSkipTestÚstrrk   ro   rx   )rb   Úerrrg   rj   rc   rc   rd   Ú	test_linkŸ   s     zTestFilemode.test_linkÚmkfifozos.mkfifo not availablec          
   C   sj   yt  td¡ W n0 tk
r@ } z|  d| ¡ W d d }~X Y nX |  ¡ \}}|  |d¡ |  d|¡ d S )NiÀ  zos.mkfifo(): %sz
prwx------ZFIFO)r^   rŠ   r   ÚPermissionErrorZskipTestrk   ro   rx   )rb   Úerg   rj   rc   rc   rd   Ú	test_fifoª   s     zTestFilemode.test_fiforz   zrequires Posixc             C   sŒ   t j t j¡r>| jt jdd\}}|  |d d¡ |  d|¡ xHdD ]@}t j |¡rD| j|dd\}}|  |d d¡ |  d|¡ P qDW d S )	NF)rf   r   ÚcZCHR)z/dev/sdaz/dev/hdaÚbZBLK)r^   ÚpathÚexistsÚdevnullrk   ro   rx   )rb   rg   rj   Zblockdevrc   rc   rd   Útest_devices´   s    
zTestFilemode.test_devicesc             C   sò   x0| j  ¡ D ]"\}}t| j|ƒ}|  |||¡ qW x0| j ¡ D ]"\}}t| j|ƒ}|  |||¡ q>W x&| jD ]}t| j|ƒ}|  |t¡ qlW x&| j	D ]}t| j|ƒ}|  |t¡ q”W x8| j
D ].}t| j|ƒ}|  t|ƒ¡ |  |dƒd¡ q¼W d S )Nr   )Ústat_structÚitemsrm   rh   ro   Úpermission_bitsÚ
file_flagsZassertIsInstanceÚintÚformatsrq   rs   Úcallable)rb   ÚkeyÚvalueÚmodvaluerw   rc   rc   rd   Útest_module_attributesÂ   s     z#TestFilemode.test_module_attributesÚwin32z-FILE_ATTRIBUTE_* constants are Win32 specificc             C   sN   xHt | j ¡ ƒD ]6\}}|  t| j|ƒ|¡ t| j|ƒ}|  |||¡ qW d S )N)ÚsortedÚfile_attributesr•   rs   Úhasattrrh   rm   ro   )rb   r›   rœ   r   rc   rc   rd   Útest_file_attribute_constantsÔ   s    z*TestFilemode.test_file_attribute_constants)Ú__name__Ú
__module__Ú__qualname__rh   r—   r™   rq   r”   r–   r¡   re   ZtearDownr   rk   rx   r~   r   r†   Z
skipUnlessr¢   r^   r‰   r   rt   r“   rž   ÚsysÚplatformr£   rc   rc   rc   rd   r   	   s„   

&

r   c               @   s0   e Zd ZeZejdddhB ZejdddhB ZdS )ÚTestFilemodeCStatÚS_IFDOORÚS_IFPORTÚS_IFWHTÚS_ISDOORÚS_ISPORTÚS_ISWHTN)r¤   r¥   r¦   Úc_statrh   r   r™   rq   rc   rc   rc   rd   r©   Ý   s   r©   c               @   s   e Zd ZeZdS )ÚTestFilemodePyStatN)r¤   r¥   r¦   Úpy_statrh   rc   rc   rc   rd   r±   å   s   r±   Ú__main__)r†   r^   r§   Ztest.supportr   r   r°   r²   r   ZTestCaser©   r±   r¤   Úmainrc   rc   rc   rd   Ú<module>   s    U