o
    HXhy                      @   s:   d dl Z d dlZG dd dejZedkre  dS 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                           e Zd ZdZ fddZ  ZS )z"Test.test_init_subclass.<locals>.AFc                       t    d| _d S NTsuper__init_subclass__initializedcls	__class__ @/opt/python-3.10.19/usr/lib/python3.10/test/test_subclassinit.pyr   
      

z4Test.test_init_subclass.<locals>.A.__init_subclass____name__
__module____qualname__r	   r   __classcell__r   r   r   r   A       r   c                   @      e Zd ZdS )z"Test.test_init_subclass.<locals>.BNr   r   r   r   r   r   r   B       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                       r   )z'Test.test_init_subclass_dict.<locals>.AFc                    r   r   r   r
   r   r   r   r      r   z9Test.test_init_subclass_dict.<locals>.A.__init_subclass__r   r   r   r   r   r      r   r   c                   @   r   )z'Test.test_init_subclass_dict.<locals>.BNr   r   r   r   r   r      r   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                   @      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   #       r   c                   @   r   )z)Test.test_init_subclass_kwargs.<locals>.BNr   r   r   r   r   r   '   r   r      )x)assertEqualr%   r!   r   r   r   r   test_init_subclass_kwargs"   s   zTest.test_init_subclass_kwargsc                 C   N   G dd d}|  t G dd d|}W d    d S 1 s w   Y  d S )Nc                   @   r#   )z(Test.test_init_subclass_error.<locals>.Ac                 S   s   t r$   )RuntimeErrorr
   r   r   r   r   .      z:Test.test_init_subclass_error.<locals>.A.__init_subclass__Nr'   r   r   r   r   r   -   r(   r   c                   @   r   )z(Test.test_init_subclass_error.<locals>.BNr   r   r   r   r   r   2   r   r   )assertRaisesr.   r   r   r   r   test_init_subclass_error,      "zTest.test_init_subclass_errorc                 C   r-   )Nc                   @   r#   )z(Test.test_init_subclass_wrong.<locals>.Ac                 S      d S r$   r   )r   Zwhateverr   r   r   r   7   r/   z:Test.test_init_subclass_wrong.<locals>.A.__init_subclass__Nr'   r   r   r   r   r   6   r(   r   c                   @   r   )z(Test.test_init_subclass_wrong.<locals>.BNr   r   r   r   r   r   ;   r   r   )r0   	TypeErrorr   r   r   r   test_init_subclass_wrong5   r2   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                          e Zd Z fddZ  ZS )z5Test.test_init_subclass_skipped.<locals>.BaseWithInitc                    s   t  jdi | | | _d S Nr   r   r&   r   r   r   r   @      
zGTest.test_init_subclass_skipped.<locals>.BaseWithInit.__init_subclass__r   r   r   r   r   r   r   r   r   BaseWithInit?       r:   c                   @   r   )z8Test.test_init_subclass_skipped.<locals>.BaseWithoutInitNr   r   r   r   r   BaseWithoutInitD   r   r<   c                   @   r   )z*Test.test_init_subclass_skipped.<locals>.ANr   r   r   r   r   r   G   r   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                       r6   )z-Test.test_init_subclass_diamond.<locals>.Basec                    s   t  jdi | g | _d S r7   r   r   callsr&   r   r   r   r   O   r8   z?Test.test_init_subclass_diamond.<locals>.Base.__init_subclass__r9   r   r   r   r   BaseN   r;   rA   c                   @   r   )z-Test.test_init_subclass_diamond.<locals>.LeftNr   r   r   r   r   LeftS   r   rB   c                       r6   )z/Test.test_init_subclass_diamond.<locals>.Middlec                    &   t  jdi | |  j|g7  _d S r7   r?   )r   middler%   r   r   r   r   W      zATest.test_init_subclass_diamond.<locals>.Middle.__init_subclass__r9   r   r   r   r   MiddleV   r;   rF   c                       s   e Zd Zd fdd	Z  ZS )z.Test.test_init_subclass_diamond.<locals>.Rightrightc                    rC   r7   r?   )r   rG   r%   r   r   r   r   \   rE   z@Test.test_init_subclass_diamond.<locals>.Right.__init_subclass__)rG   r9   r   r   r   r   Right[       rH   c                   @   r   )z*Test.test_init_subclass_diamond.<locals>.ANr   r   r   r   r   r   `   r   r   rD   )rD   rG   )r+   r@   )r   rA   rB   rF   rH   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                   @   r#   )z&Test.test_set_name.<locals>.Descriptorc                 S      || _ || _d S r$   ownernamer   rM   rN   r   r   r   __set_name__i      
z3Test.test_set_name.<locals>.Descriptor.__set_name__Nr   r   r   rP   r   r   r   r   
Descriptorh   r(   rS   c                          e Zd Z  ZdS )zTest.test_set_name.<locals>.ANr   r   r   dr   rS   r   r   r   m       
r   rV   )r+   rV   rN   r=   rM   r   r   r   rW   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 )NrV   r   )r   __new__r+   rV   rN   r=   rM   )r   rN   basesnsret)r   r   r   r   r[   u   s   z2Test.test_set_name_metaclass.<locals>.Meta.__new__r   r   r   r[   r   r   r   r   r   Metat   rI   ra   c                   @   r#   )z0Test.test_set_name_metaclass.<locals>.Descriptorc                 S   rK   r$   rL   rO   r   r   r   rP   |   rQ   z=Test.test_set_name_metaclass.<locals>.Descriptor.__set_name__NrR   r   r   r   r   rS   {   r(   rS   c                       rT   )z'Test.test_set_name_metaclass.<locals>.ANrU   r   rW   r   r   r      rX   r   	metaclassr   )typer+   )r   ra   r   r   )rS   r   r   test_set_name_metaclasss   s   zTest.test_set_name_metaclassc                       G dd d |  t}G  fddd}W d    n1 s w   Y  |j}| t|d | t|d | t|d | |jt d S )Nc                   @   r#   )z,Test.test_set_name_error.<locals>.Descriptorc                 S   s   dd  d S )N   r   r   rO   r   r   r   rP      s   z9Test.test_set_name_error.<locals>.Descriptor.__set_name__NrR   r   r   r   r   rS      r(   rS   c                       rT   )z0Test.test_set_name_error.<locals>.NotGoingToWorkNr   r   r   attrr   rW   r   r   NotGoingToWork   rX   rj   \bNotGoingToWork\b\battr\b\bDescriptor\b)r0   r.   	exceptionassertRegexstrassertIsInstance	__cause__ZeroDivisionErrorr   cmrj   excr   rW   r   test_set_name_error      zTest.test_set_name_errorc                    rf   )Nc                   @   r#   )z,Test.test_set_name_wrong.<locals>.Descriptorc                 S   r3   r$   r   r`   r   r   r   rP      r/   z9Test.test_set_name_wrong.<locals>.Descriptor.__set_name__NrR   r   r   r   r   rS      r(   rS   c                       rT   )z0Test.test_set_name_wrong.<locals>.NotGoingToWorkNrh   r   rW   r   r   rj      rX   rj   rk   rl   rm   )r0   r.   rn   ro   rp   rq   rr   r4   rt   r   rW   r   test_set_name_wrong   rx   zTest.test_set_name_wrongc                    s:   g G fddd G  fddd}|  dd d S )Nc                          e Zd Z fddZdS )z0Test.test_set_name_lookup.<locals>.NonDescriptorc                    s     | d S r$   )append)r   rN   resolvedr   r   __getattr__   s   z<Test.test_set_name_lookup.<locals>.NonDescriptor.__getattr__N)r   r   r   r~   r   r|   r   r   NonDescriptor       r   c                       rT   )z$Test.test_set_name_lookup.<locals>.ANrU   r   )r   r   r   r      rX   r   rP   z*__set_name__ is looked up in instance dict)ZassertNotInrY   r   )r   r}   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                   @   r#   )z4Test.test_set_name_init_subclass.<locals>.Descriptorc                 S   rK   r$   rL   rO   r   r   r   rP      rQ   zATest.test_set_name_init_subclass.<locals>.Descriptor.__set_name__NrR   r   r   r   r   rS      r(   rS   c                       r6   )z.Test.test_set_name_init_subclass.<locals>.Metac                    s&   t  | |||}|j|_|j|_|S r$   )r   r[   rM   
meta_ownerrN   Z	meta_name)r   rN   r\   r]   r   r   r   r   r[      s   z6Test.test_set_name_init_subclass.<locals>.Meta.__new__r_   r   r   r   r   ra      r;   ra   c                   @   r#   )z+Test.test_set_name_init_subclass.<locals>.Ac                 S   s   | j j| _| j j| _d S r$   )rV   rM   rN   r
   r   r   r   r      s   
z=Test.test_set_name_init_subclass.<locals>.A.__init_subclass__Nr'   r   r   r   r   r      r(   r   c                       rT   )z+Test.test_set_name_init_subclass.<locals>.BNrU   r   rW   r   r   r      rX   r   rb   rV   )rd   r=   rM   r+   rN   r   )r   ra   r   r   r   rW   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                       rz   )z5Test.test_set_name_modifying_dict.<locals>.Descriptorc                    s   t ||d d   | d S )Nr*   )setattrr{   rO   notifiedr   r   rP      s   zBTest.test_set_name_modifying_dict.<locals>.Descriptor.__set_name__NrR   r   r   r   r   rS      r   rS   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crV   er   rW   r   r   r      s    
r   )r   r   r   rV   r   )ZassertCountEqualrY   r   )rS   r   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 s"w   Y  | t tdtft|dd W d    n1 sCw   Y  tdtft|dd G dd dt }| t G dd d|dd}W d    n1 svw   Y  G d	d dt }G d
d d|dd}| |j	d d S )Nc                   @   r   ) Test.test_errors.<locals>.MyMetaNr   r   r   r   r   MyMeta   r   r   c                   @   r   z!Test.test_errors.<locals>.MyClassNr   r   r   r   r   MyClass   r   r   rg   rc   otherargc                       r6   )r   c                    s   t  ||| d S r$   )r   __init__r   rN   r\   	namespacer   r   r   r   r      s   )Test.test_errors.<locals>.MyMeta.__init__)r   r   r   r   r   r   r   r   r   r      r;   c                   @   r   r   r   r   r   r   r   r      r   c                       s(   e Zd Z fddZ fddZ  ZS )r   c                    s   t  | |||S r$   r   r[   )r   rN   r\   r   r   r   r   r   r[      s   z(Test.test_errors.<locals>.MyMeta.__new__c                    s   t  ||| || _d S r$   )r   r   r   r   r   r   r   r      s   
r   )r   r   r   r[   r   r   r   r   r   r   r      s    c                   @   r   r   r   r   r   r   r   r      r   )
rd   r0   r4   types	new_classobjectr!   prepare_classr+   r   r   r   r   r   r   r   test_errors   s&   



zTest.test_errorsc                 C   s   G dd dt }| t G dd d|d}W d    n1 s!w   Y  G dd dt }G dd d|dd	}| |jd d S )
Nc                       r6   )/Test.test_errors_changed_pep487.<locals>.MyMetac                    s   t  j| |||dS )NrN   r\   r!   r   )r   rN   r\   r   r   r   r   r[      s   7Test.test_errors_changed_pep487.<locals>.MyMeta.__new__r_   r   r   r   r   r      r;   r   c                   @   r   z0Test.test_errors_changed_pep487.<locals>.MyClassNr   r   r   r   r   r     r   r   rb   c                       r6   )r   c                    s   t  | |||}||_|S r$   )r   r[   r   )r   rN   r\   r   r   r   r   r   r   r[     s   r   r_   r   r   r   r   r     r;   c                   @   r   r   r   r   r   r   r   r     r   rg   r   )rd   r0   r4   r+   r   r   r   r   r   test_errors_changed_pep487   s   zTest.test_errors_changed_pep487c                 C   sh   t dtfi }| |t  | |jd | t t dtfi d W d    d S 1 s-w   Y  d S )NZNewClassr   )rd   r   rq   r+   r   r0   r4   )r   tr   r   r   	test_type  s   "zTest.test_typeN)r   r   r   r    r"   r,   r1   r5   r>   rJ   rZ   re   rw   ry   r   r   r   r   r   r   r   r   r   r   r      s$    
		#r   __main__)r   ZunittestZTestCaser   r   mainr   r   r   r   <module>   s      