a
    zey                      @   s6   d dl Z d dlZG dd dejZedkr2e  dS )    Nc                   @   s   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dd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#S )$Testc                 C   s:   G dd d}G dd d|}|  |j | |j d S )Nc                       s    e Zd ZdZ fddZ  ZS )z"Test.test_init_subclass.<locals>.AFc                    s   t    d| _d S NTsuper__init_subclass__initializedcls	__class__ ,/usr/lib/python3.9/test/test_subclassinit.pyr   
   s    
z4Test.test_init_subclass.<locals>.A.__init_subclass____name__
__module____qualname__r   r   __classcell__r   r   r
   r   A   s   r   c                   @   s   e Zd ZdS )z"Test.test_init_subclass.<locals>.BNr   r   r   r   r   r   r   B   s   r   )assertFalser   
assertTrueselfr   r   r   r   r   test_init_subclass   s    zTest.test_init_subclassc                 C   s<   G dd dt }G dd d|}| |j | |j d S )Nc                       s    e Zd ZdZ fddZ  ZS )z'Test.test_init_subclass_dict.<locals>.AFc                    s   t    d| _d S r   r   r   r
   r   r   r      s    
z9Test.test_init_subclass_dict.<locals>.A.__init_subclass__r   r   r   r
   r   r      s   r   c                   @   s   e Zd ZdS )z'Test.test_init_subclass_dict.<locals>.BNr   r   r   r   r   r      s   r   )dictr   r   r   r   r   r   r   test_init_subclass_dict   s    zTest.test_init_subclass_dictc                 C   s:   G dd d}G dd d|dd}|  |jtdd d S )Nc                   @   s   e Zd Zdd ZdS )z)Test.test_init_subclass_kwargs.<locals>.Ac                 [   s
   || _ d S N)kwargsr	   r   r   r   r   r   $   s    z;Test.test_init_subclass_kwargs.<locals>.A.__init_subclass__Nr   r   r   r   r   r   r   r   r   #   s   r   c                   @   s   e Zd ZdS )z)Test.test_init_subclass_kwargs.<locals>.BNr   r   r   r   r   r   '   s   r      )x)assertEqualr   r   r   r   r   r   test_init_subclass_kwargs"   s    zTest.test_init_subclass_kwargsc                 C   sL   G dd d}|  t  G dd d|}W d    n1 s>0    Y  d S )Nc                   @   s   e Zd Zdd ZdS )z(Test.test_init_subclass_error.<locals>.Ac                 S   s   t d S r   )RuntimeErrorr   r   r   r   r   .   s    z:Test.test_init_subclass_error.<locals>.A.__init_subclass__Nr    r   r   r   r   r   -   s   r   c                   @   s   e Zd ZdS )z(Test.test_init_subclass_error.<locals>.BNr   r   r   r   r   r   2   s   r   )assertRaisesr%   r   r   r   r   test_init_subclass_error,   s    zTest.test_init_subclass_errorc                 C   sL   G dd d}|  t  G dd d|}W d    n1 s>0    Y  d S )Nc                   @   s   e Zd Zdd ZdS )z(Test.test_init_subclass_wrong.<locals>.Ac                 S   s   d S r   r   )r	   Zwhateverr   r   r   r   7   s    z:Test.test_init_subclass_wrong.<locals>.A.__init_subclass__Nr    r   r   r   r   r   6   s   r   c                   @   s   e Zd ZdS )z(Test.test_init_subclass_wrong.<locals>.BNr   r   r   r   r   r   ;   s   r   )r&   	TypeErrorr   r   r   r   test_init_subclass_wrong5   s    zTest.test_init_subclass_wrongc                 C   sN   G dd d}G dd d|}G dd d|}|  |j| |  |j| d S )Nc                       s   e Zd Z fddZ  ZS )z5Test.test_init_subclass_skipped.<locals>.BaseWithInitc                    s   t  jf i | | | _d S r   r   r   r
   r   r   r   @   s    zGTest.test_init_subclass_skipped.<locals>.BaseWithInit.__init_subclass__r   r   r   r   r   r   r   r
   r   BaseWithInit?   s   r+   c                   @   s   e Zd ZdS )z8Test.test_init_subclass_skipped.<locals>.BaseWithoutInitNr   r   r   r   r   BaseWithoutInitD   s   r,   c                   @   s   e Zd ZdS )z*Test.test_init_subclass_skipped.<locals>.ANr   r   r   r   r   r   G   s   r   )assertIsr   )r   r+   r,   r   r   r   r   test_init_subclass_skipped>   s
    zTest.test_init_subclass_skippedc                 C   s   G dd d}G dd d|}G dd d}G dd d|}G d	d
 d
|||dd}|  |jddg |  |jg  |  |jg  d S )Nc                       s   e Zd Z fddZ  ZS )z-Test.test_init_subclass_diamond.<locals>.Basec                    s   t  jf i | g | _d S r   r   r   callsr   r
   r   r   r   O   s    z?Test.test_init_subclass_diamond.<locals>.Base.__init_subclass__r*   r   r   r
   r   BaseN   s   r1   c                   @   s   e Zd ZdS )z-Test.test_init_subclass_diamond.<locals>.LeftNr   r   r   r   r   LeftS   s   r2   c                       s   e Zd Z fddZ  ZS )z/Test.test_init_subclass_diamond.<locals>.Middlec                    s&   t  jf i | |  j|g7  _d S r   r/   )r	   middler   r
   r   r   r   W   s    zATest.test_init_subclass_diamond.<locals>.Middle.__init_subclass__r*   r   r   r
   r   MiddleV   s   r4   c                       s   e Zd Zd fdd	Z  ZS )z.Test.test_init_subclass_diamond.<locals>.Rightrightc                    s&   t  jf i | |  j|g7  _d S r   r/   )r	   r5   r   r
   r   r   r   \   s    z@Test.test_init_subclass_diamond.<locals>.Right.__init_subclass__)r5   r*   r   r   r
   r   Right[   s   r6   c                   @   s   e Zd ZdS )z*Test.test_init_subclass_diamond.<locals>.ANr   r   r   r   r   r   `   s   r   r3   )r3   r5   )r#   r0   )r   r1   r2   r4   r6   r   r   r   r   test_init_subclass_diamondM   s    zTest.test_init_subclass_diamondc                    sD   G dd d G  fddd}|  |jjd | |jj| d S )Nc                   @   s   e Zd Zdd ZdS )z&Test.test_set_name.<locals>.Descriptorc                 S   s   || _ || _d S r   ownernamer   r9   r:   r   r   r   __set_name__i   s    z3Test.test_set_name.<locals>.Descriptor.__set_name__Nr   r   r   r<   r   r   r   r   
Descriptorh   s   r>   c                       s   e Zd Z  ZdS )zTest.test_set_name.<locals>.ANr   r   r   dr   r>   r   r   r   m   s   r   r@   )r#   r@   r:   r-   r9   r   r   r   rA   r   test_set_nameg   s    zTest.test_set_namec                    sH   G fdddt }G dd d G  fddd|d}|d d S )	Nc                       s   e Zd Z fddZ  ZS )z*Test.test_set_name_metaclass.<locals>.Metac                    s6   t  | |||}|jjd |jj| dS )Nr@   r   )r   __new__r#   r@   r:   r-   r9   )r	   r:   basesnsret)r   r   r   r   rD   u   s    z2Test.test_set_name_metaclass.<locals>.Meta.__new__r   r   r   rD   r   r   r   r
   r   Metat   s   rJ   c                   @   s   e Zd Zdd ZdS )z0Test.test_set_name_metaclass.<locals>.Descriptorc                 S   s   || _ || _d S r   r8   r;   r   r   r   r<   |   s    z=Test.test_set_name_metaclass.<locals>.Descriptor.__set_name__Nr=   r   r   r   r   r>   {   s   r>   c                       s   e Zd Z  ZdS )z'Test.test_set_name_metaclass.<locals>.ANr?   r   rA   r   r   r      s   r   	metaclassr   )typer#   )r   rJ   r   r   )r>   r   r   test_set_name_metaclasss   s    zTest.test_set_name_metaclassc                    s   G dd d |  t"}G  fddd}W d    n1 s@0    Y  |j}| t|d | t|d | t|d | |jt d S )Nc                   @   s   e Zd Zdd ZdS )z,Test.test_set_name_error.<locals>.Descriptorc                 S   s   dd  d S )N   r   r   r;   r   r   r   r<      s    z9Test.test_set_name_error.<locals>.Descriptor.__set_name__Nr=   r   r   r   r   r>      s   r>   c                       s   e Zd Z  ZdS )z0Test.test_set_name_error.<locals>.NotGoingToWorkNr   r   r   attrr   rA   r   r   NotGoingToWork   s   rR   \bNotGoingToWork\b\battr\b\bDescriptor\b)r&   r%   	exceptionassertRegexstrassertIsInstance	__cause__ZeroDivisionErrorr   cmrR   excr   rA   r   test_set_name_error   s    0zTest.test_set_name_errorc                    s   G dd d |  t"}G  fddd}W d    n1 s@0    Y  |j}| t|d | t|d | t|d | |jt d S )Nc                   @   s   e Zd Zdd ZdS )z,Test.test_set_name_wrong.<locals>.Descriptorc                 S   s   d S r   r   rI   r   r   r   r<      s    z9Test.test_set_name_wrong.<locals>.Descriptor.__set_name__Nr=   r   r   r   r   r>      s   r>   c                       s   e Zd Z  ZdS )z0Test.test_set_name_wrong.<locals>.NotGoingToWorkNrP   r   rA   r   r   rR      s   rR   rS   rT   rU   )r&   r%   rV   rW   rX   rY   rZ   r(   r\   r   rA   r   test_set_name_wrong   s    0zTest.test_set_name_wrongc                    s:   g G fddd G  fddd}|  dd d S )Nc                       s   e Zd Z fddZdS )z0Test.test_set_name_lookup.<locals>.NonDescriptorc                    s     | d S r   )append)r   r:   resolvedr   r   __getattr__   s    z<Test.test_set_name_lookup.<locals>.NonDescriptor.__getattr__N)r   r   r   rd   r   rb   r   r   NonDescriptor   s   re   c                       s   e Zd Z  ZdS )z$Test.test_set_name_lookup.<locals>.ANr?   r   )re   r   r   r      s   r   r<   z*__set_name__ is looked up in instance dict)ZassertNotInrB   r   )re   rc   r   test_set_name_lookup   s    zTest.test_set_name_lookupc                    s   G dd d G dd dt }G dd d}G  fddd||d	}| |j| | |jd
 | |j| | |jd
 d S )Nc                   @   s   e Zd Zdd ZdS )z4Test.test_set_name_init_subclass.<locals>.Descriptorc                 S   s   || _ || _d S r   r8   r;   r   r   r   r<      s    zATest.test_set_name_init_subclass.<locals>.Descriptor.__set_name__Nr=   r   r   r   r   r>      s   r>   c                       s   e Zd Z fddZ  ZS )z.Test.test_set_name_init_subclass.<locals>.Metac                    s&   t  | |||}|j|_|j|_|S r   )r   rD   r9   
meta_ownerr:   Z	meta_name)r	   r:   rE   rF   r   r
   r   r   rD      s    z6Test.test_set_name_init_subclass.<locals>.Meta.__new__rH   r   r   r
   r   rJ      s   rJ   c                   @   s   e Zd Zdd ZdS )z+Test.test_set_name_init_subclass.<locals>.Ac                 S   s   | j j| _| j j| _d S r   )r@   r9   r:   r   r   r   r   r      s    
z=Test.test_set_name_init_subclass.<locals>.A.__init_subclass__Nr    r   r   r   r   r      s   r   c                       s   e Zd Z  ZdS )z+Test.test_set_name_init_subclass.<locals>.BNr?   r   rA   r   r   r      s   r   rK   r@   )rM   r-   r9   r#   r:   rg   )r   rJ   r   r   r   rA   r   test_set_name_init_subclass   s    z Test.test_set_name_init_subclassc                    s<   g G fddd G  fddd}|  g d d S )Nc                       s   e Zd Z fddZdS )z5Test.test_set_name_modifying_dict.<locals>.Descriptorc                    s   t ||d d   | d S )Nr"   )setattrra   r;   notifiedr   r   r<      s    zBTest.test_set_name_modifying_dict.<locals>.Descriptor.__set_name__Nr=   r   rj   r   r   r>      s   r>   c                       s*   e Zd Z  Z  Z  Z  Z  ZdS )z,Test.test_set_name_modifying_dict.<locals>.AN)r   r   r   abcr@   er   rA   r   r   r      s
   r   )rl   rm   rn   r@   ro   )ZassertCountEqualrB   r   )r>   rk   r   test_set_name_modifying_dict   s    z!Test.test_set_name_modifying_dictc              	   C   s,  G dd dt }| t$ G dd d|dd}W d    n1 sD0    Y  | t( tdtft|dd W d    n1 s0    Y  tdtft|dd G dd dt }| t$ G dd d|dd}W d    n1 s0    Y  G d	d dt }G d
d d|dd}| |j	d d S )Nc                   @   s   e Zd ZdS ) Test.test_errors.<locals>.MyMetaNr   r   r   r   r   MyMeta   s   rr   c                   @   s   e Zd ZdS z!Test.test_errors.<locals>.MyClassNr   r   r   r   r   MyClass   s   rt   rO   rL   otherargc                       s   e Zd Z fddZ  ZS )rq   c                    s   t  ||| d S r   )r   __init__r   r:   rE   	namespacerv   r
   r   r   rw      s    )Test.test_errors.<locals>.MyMeta.__init__)r   r   r   rw   r   r   r   r
   r   rr      s   c                   @   s   e Zd ZdS rs   r   r   r   r   r   rt      s   c                       s(   e Zd Z fddZ fddZ  ZS )rq   c                    s   t  | |||S r   r   rD   )r	   r:   rE   ry   rv   r
   r   r   rD      s    z(Test.test_errors.<locals>.MyMeta.__new__c                    s   t  ||| || _d S r   )r   rw   rv   rx   r
   r   r   rw      s    rz   )r   r   r   rD   rw   r   r   r   r
   r   rr      s   c                   @   s   e Zd ZdS rs   r   r   r   r   r   rt      s   )
rM   r&   r(   types	new_classobjectr   prepare_classr#   rv   r   rr   rt   r   r   r   test_errors   s     2

"

2zTest.test_errorsc                 C   s   G dd dt }| t" G dd d|d}W d    n1 sB0    Y  G dd dt }G dd d|dd	}| |jd d S )
Nc                       s   e Zd Z fddZ  ZS )/Test.test_errors_changed_pep487.<locals>.MyMetac                    s   t  j| |||dS )Nr:   rE   r   r{   )r	   r:   rE   ry   r
   r   r   rD      s    7Test.test_errors_changed_pep487.<locals>.MyMeta.__new__rH   r   r   r
   r   rr      s   rr   c                   @   s   e Zd ZdS z0Test.test_errors_changed_pep487.<locals>.MyClassNr   r   r   r   r   rt     s   rt   rK   c                       s   e Zd Z fddZ  ZS )r   c                    s   t  | |||}||_|S r   )r   rD   rv   )r	   r:   rE   ry   rv   r   r
   r   r   rD     s    r   rH   r   r   r
   r   rr     s   c                   @   s   e Zd ZdS r   r   r   r   r   r   rt     s   rO   ru   )rM   r&   r(   r#   rv   r   r   r   r   test_errors_changed_pep487   s    0zTest.test_errors_changed_pep487c                 C   sf   t dtfi }| |t  | |jd | t  t dtfi d W d    n1 sX0    Y  d S )NZNewClassr   )rM   r~   rY   r#   r   r&   r(   )r   tr   r   r   	test_type  s
    zTest.test_typeN)r   r   r   r   r   r$   r'   r)   r.   r7   rC   rN   r_   r`   rf   rh   rp   r   r   r   r   r   r   r   r      s"   
		#r   __main__)r|   ZunittestZTestCaser   r   mainr   r   r   r   <module>   s     