a
    äzeº  ã                   @   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   ú3/usr/lib/python3.9/test/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 r   )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 )ÚSubOSErrorCombinedInitFirstNr   r   r   r   r	   r      s   r   c                   @   s   e Zd ZdS )ÚSubOSErrorCombinedNewFirstNr   r   r   r   r	   r      s   r   c                   @   s   e Zd Zdd„ ZdS )ÚSubOSErrorWithStandaloneInitc                 C   s   d S r   r   ©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ÚEnvironmentErrorr   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 r   )	r   ÚsocketÚerrorr    ÚgaierrorÚ__base__r   ÚherrorÚtimeoutr   r   r   r	   Útest_socket_errors*   s    z HierarchyTest.test_socket_errorsc                 C   s   |   tjt¡ d S r   )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   sd   i }|   ¡ D ]R}| d¡}|s q| d¡\}}}td | ¡  d¡ƒD ]}tt|ƒ|tt|ƒ< qDq|S )Nz+- ú z, )Ú
splitlinesÚstripÚ	partitionÚfilterÚsplitÚgetattrÚbuiltinsÚerrno)ÚsÚ_mapÚlineÚexcnameÚ_ZerrnamesZerrnamer   r   r	   Ú	_make_mapF   s    
zHierarchyTest._make_mapc                 C   s„   t tdƒ}|  t|ƒt¡ | j ¡ D ]"\}}t |dƒ}|  t|ƒ|¡ q$ttj	ƒt| jƒ }|D ]}t |dƒ}|  t|ƒt ¡ q`d S )NúBad file descriptorzSome message)
r   r   r   ÚtypeÚFileExistsErrorr6   ÚitemsÚsetr4   Ú	errorcode)r   ÚeZerrcodeÚexcZ
othercodesr   r   r	   Útest_errno_mappingR   s    


z HierarchyTest.test_errno_mappingc                 C   sp   d}zt |ƒ W n ty"   Y n0 |  d¡ |  tj |¡¡ zt |¡ W n ty`   Y n0 |  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_mapr:   r6   rC   rK   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)rF   ÚnameZassertInÚdirr   ZassertNotInr   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 )NúFile already existsúfoo.txtr   rM   )
r   r   r   r4   ÚargsÚstrerrorrJ   rF   rO   rN   ©r   rA   r   r   r	   Útest_posix_error€   s    
zAttributesTest.test_posix_errorrM   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   rR   rS   é·   )r   r   rN   r4   r   rT   rU   rJ   rV   r   r   r	   Útest_errno_translation‰   s    z%AttributesTest.test_errno_translationc              	   C   sæ   d}t dƒD ]r}t|d |… Ž }|  t¡ |j W d   ƒ n1 sF0    Y  |  t¡ |`W d   ƒ q1 st0    Y  qtdddƒ}|  |jd¡ d|_|  |jd¡ |`|  t¡ |j W d   ƒ n1 sØ0    Y  d S )N)ÚaÚbÚcÚdrA   é   rZ   r[   é   é   )ÚrangeÚBlockingIOErrorZassertRaisesÚAttributeErrorÚcharacters_writtenr   )r   rT   ÚnrA   r   r   r	   Útest_blockingioerror“   s    $$z#AttributesTest.test_blockingioerrorN)r   r   r   rQ   rW   ÚunittestZ
skipUnlessrF   rO   rY   rf   r   r   r   r	   rL   x   s
   	
	rL   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 )Nr;   )r   r   r   r<   rV   r   r   r	   rC   ¦   s    
z*ExplicitSubclassingTest.test_errno_mappingc                 C   s*   t ddƒ}|  |jd¡ |  |jd¡ d S ©Núsome messager   ©rj   ©r
   r   r   rT   rV   r   r   r	   Útest_init_overridden«   s    
z,ExplicitSubclassingTest.test_init_overriddenc                 C   s,   t ddd}|  |jd¡ |  |jd¡ d S )Nrj   r   )r   rk   rl   rV   r   r   r	   Útest_init_kwdargs°   s    z)ExplicitSubclassingTest.test_init_kwdargsc                 C   s*   t ddƒ}|  |jd¡ |  |jd¡ d S ri   ©r   r   r   rT   rV   r   r   r	   Útest_new_overriddenµ   s    
z+ExplicitSubclassingTest.test_new_overriddenc                 C   s,   t ddd}|  |jd¡ |  |jd¡ d S )Nrj   r   )r   rk   ro   rV   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 ri   )r   r   r   r   rT   r   rV   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   rT   ÚstrrV   r   r   r	   Útest_init_standaloneÉ   s    z,ExplicitSubclassingTest.test_init_standaloneN)
r   r   r   rC   rm   rn   rp   rq   rr   ru   r   r   r   r	   rh   ¤   s   
rh   Ú__main__)r3   rF   r*   r#   rg   r4   r   r   r   r
   r   r   r   r   ZTestCaser   rL   rh   r   Úmainr   r   r   r	   Ú<module>   s"   U,,