B
    u9aë  ã               @   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mZ G dd„ deƒZG dd„ deƒZ	G dd„ deƒZ
G d	d
„ d
e	e
ƒZG dd„ de
e	ƒZG dd„ deƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZedkræe ¡  dS )é    N)ÚEEXISTc               @   s   e Zd ZdS )Ú
SubOSErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú./usr/lib/python3.7/test_exception_hierarchy.pyr   
   s   r   c                   s   e Zd Z‡ fdd„Z‡  ZS )ÚSubOSErrorWithInitc                s   || _ tƒ  |¡ d S )N)ÚbarÚsuperÚ__init__)ÚselfÚmessager
   )Ú	__class__r   r   r      s    zSubOSErrorWithInit.__init__)r   r   r   r   Ú__classcell__r   r   )r   r   r	      s   r	   c                   s   e Zd Z‡ fdd„Z‡  ZS )ÚSubOSErrorWithNewc                s   t ƒ  | |¡}||_|S )N)r   Ú__new__Úbaz)Úclsr   r   r   )r   r   r   r      s    zSubOSErrorWithNew.__new__)r   r   r   r   r   r   r   )r   r   r      s   r   c               @   s   e Zd ZdS )ÚSubOSErrorCombinedInitFirstN)r   r   r   r   r   r   r   r      s   r   c               @   s   e Zd ZdS )ÚSubOSErrorCombinedNewFirstN)r   r   r   r   r   r   r   r      s   r   c               @   s   e Zd Zdd„ ZdS )ÚSubOSErrorWithStandaloneInitc             C   s   d S )Nr   )r   r   r   r   r      s    z%SubOSErrorWithStandaloneInit.__init__N)r   r   r   r   r   r   r   r   r      s   r   c               @   sH   e Zd Zdd„ Zdd„ Zdd„ ZdZdd	„ ZeeƒZd
d„ Z	dd„ Z
dS )ÚHierarchyTestc             C   s*   |   tjd¡ |  tt¡ |  tt¡ d S )NÚOSError)ÚassertEqualr   r   ÚassertIsÚIOErrorÚEnvironmentError)r   r   r   r   Útest_builtin_errors%   s    z!HierarchyTest.test_builtin_errorsc             C   sB   |   tjt¡ |   tjjt¡ |   tjjt¡ |   tjjt¡ d S )N)	r   ÚsocketÚerrorr   ZgaierrorÚ__base__r   ZherrorZtimeout)r   r   r   r   Útest_socket_errors*   s    z HierarchyTest.test_socket_errorsc             C   s   |   tjt¡ d S )N)r   Úselectr    r   )r   r   r   r   Útest_select_error0   s    zHierarchyTest.test_select_errorae  
        +-- BlockingIOError        EAGAIN, EALREADY, EWOULDBLOCK, EINPROGRESS
        +-- ChildProcessError                                          ECHILD
        +-- ConnectionError
            +-- BrokenPipeError                              EPIPE, ESHUTDOWN
            +-- ConnectionAbortedError                           ECONNABORTED
            +-- ConnectionRefusedError                           ECONNREFUSED
            +-- ConnectionResetError                               ECONNRESET
        +-- FileExistsError                                            EEXIST
        +-- FileNotFoundError                                          ENOENT
        +-- InterruptedError                                            EINTR
        +-- IsADirectoryError                                          EISDIR
        +-- NotADirectoryError                                        ENOTDIR
        +-- PermissionError                                     EACCES, EPERM
        +-- ProcessLookupError                                          ESRCH
        +-- TimeoutError                                            ETIMEDOUT
    c             C   sl   i }xb|   ¡ D ]V}| d¡}|s"q| d¡\}}}x0td | ¡  d¡ƒD ]}tt|ƒ|tt|ƒ< qHW qW |S )Nz+- ú z, )Ú
splitlinesÚstripÚ	partitionÚfilterÚsplitÚgetattrÚbuiltinsÚerrno)ÚsÚ_mapÚlineZexcnameÚ_ZerrnamesZerrnamer   r   r   Ú	_make_mapF   s    
zHierarchyTest._make_mapc             C   sŒ   t tdƒ}|  t|ƒt¡ x0| j ¡ D ]"\}}t |dƒ}|  t|ƒ|¡ q&W ttj	ƒt| jƒ }x&|D ]}t |dƒ}|  t|ƒt ¡ qfW d S )NzBad file descriptorzSome message)
r   r   r   ÚtypeÚFileExistsErrorr/   ÚitemsÚsetr-   Ú	errorcode)r   ÚeZerrcodeÚexcZ
othercodesr   r   r   Útest_errno_mappingR   s    



z HierarchyTest.test_errno_mappingc             C   st   d}yt |ƒ W n tk
r$   Y nX |  d¡ |  tj |¡¡ yt |¡ W n tk
rd   Y nX |  d¡ d S )NZ some_hopefully_non_existing_filez&should have raised a FileNotFoundError)ÚopenÚFileNotFoundErrorZfailZassertFalseÚosÚpathÚexistsÚunlink)r   Úfilenamer   r   r   Útest_try_except`   s    
zHierarchyTest.test_try_exceptN)r   r   r   r   r"   r$   Z_pep_mapr2   r/   r:   rB   r   r   r   r   r   #   s   
r   c               @   s>   e Zd Zdd„ Zdd„ Ze ejdkd¡dd„ ƒZ	d	d
„ Z
dS )ÚAttributesTestc             C   s0   t jdkr|  dttƒ¡ n|  dttƒ¡ d S )NÚntÚwinerror)r=   ÚnameZassertInÚdirr   ZassertNotIn)r   r   r   r   Útest_windows_errorz   s    
z!AttributesTest.test_windows_errorc             C   sd   t tddƒ}|  |jt¡ |  |jd t¡ |  |jd¡ |  |jd¡ tjdkr`|  |j	d ¡ d S )NzFile already existszfoo.txtr   rD   )
r   r   r   r-   ÚargsÚstrerrorrA   r=   rF   rE   )r   r8   r   r   r   Útest_posix_error€   s    
zAttributesTest.test_posix_errorrD   zWindows-specific testc             C   s\   t ddddƒ}|  |jd¡ |  |jt¡ |  |jd t¡ |  |jd¡ |  |jd¡ d S )Nr   zFile already existszfoo.txté·   )r   r   rE   r-   r   rI   rJ   rA   )r   r8   r   r   r   Útest_errno_translation‰   s    z%AttributesTest.test_errno_translationc          
   C   st   d}x<t dƒD ]0}t|d |… Ž }|  t¡ |j W d Q R X qW tdddƒ}|  |jd¡ d|_|  |jd¡ d S )N)ÚaÚbÚcÚdr8   é   rN   rO   é   é   )ÚrangeÚBlockingIOErrorZassertRaisesÚAttributeErrorÚcharacters_writtenr   )r   rI   Únr8   r   r   r   Útest_blockingioerror“   s    z#AttributesTest.test_blockingioerrorN)r   r   r   rH   rK   ÚunittestZ
skipUnlessr=   rF   rM   rZ   r   r   r   r   rC   x   s   	
rC   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 )ÚExplicitSubclassingTestc             C   s   t tdƒ}|  t|ƒt ¡ d S )NzBad file descriptor)r   r   r   r3   )r   r8   r   r   r   r:   ¡   s    
z*ExplicitSubclassingTest.test_errno_mappingc             C   s*   t ddƒ}|  |jd¡ |  |jd¡ d S )Nzsome messager   )zsome message)r	   r   r
   rI   )r   r8   r   r   r   Útest_init_overridden¦   s    
z,ExplicitSubclassingTest.test_init_overriddenc             C   s,   t ddd}|  |jd¡ |  |jd¡ d S )Nzsome messager   )r
   )zsome message)r	   r   r
   rI   )r   r8   r   r   r   Útest_init_kwdargs«   s    z)ExplicitSubclassingTest.test_init_kwdargsc             C   s*   t ddƒ}|  |jd¡ |  |jd¡ d S )Nzsome messager   )zsome message)r   r   r   rI   )r   r8   r   r   r   Útest_new_overridden°   s    
z+ExplicitSubclassingTest.test_new_overriddenc             C   s,   t ddd}|  |jd¡ |  |jd¡ d S )Nzsome messager   )r   )zsome message)r   r   r   rI   )r   r8   r   r   r   Útest_new_kwdargsµ   s    z(ExplicitSubclassingTest.test_new_kwdargsc             C   sl   t ddƒ}|  |jd¡ |  |jd¡ |  |jd¡ tddƒ}|  |jd¡ |  |jd¡ |  |jd¡ d S )Nzsome messager   )zsome message)r   r   r
   r   rI   r   )r   r8   r   r   r   Útest_init_new_overriddenº   s    

z0ExplicitSubclassingTest.test_init_new_overriddenc             C   s(   t ƒ }|  |jd¡ |  t|ƒd¡ d S )Nr   Ú )r   r   rI   Ústr)r   r8   r   r   r   Útest_init_standaloneÄ   s    z,ExplicitSubclassingTest.test_init_standaloneN)
r   r   r   r:   r]   r^   r_   r`   ra   rd   r   r   r   r   r\   Ÿ   s   
r\   Ú__main__)r,   r=   r#   r   r[   r-   r   r   r   r	   r   r   r   r   ZTestCaser   rC   r\   r   Úmainr   r   r   r   Ú<module>   s"   U',