o
    HXhd&                     @   s   	 d dl Z G dd d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ZG dd deZG dd deZG dd de jZ	e
dkrPe   dS dS )    Nc                   @   s    e Zd Zdd Zedd ZdS )Ac                 C   s   dS Nr    selfr   r   9/opt/python-3.10.19/usr/lib/python3.10/test/test_super.pyf      zA.fc                 C   s   | dfS r   r   clsr   r   r   cm	      zA.cmN)__name__
__module____qualname__r   classmethodr   r   r   r   r   r      s    r   c                       ,   e Zd Z fddZe fddZ  ZS )Bc                       t   d S Nr   superr   r   	__class__r   r   r         zB.fc                       | t   dfS r   r   r   r
   r   r   r   r         zB.cmr   r   r   r   r   r   __classcell__r   r   r   r   r          r   c                       r   )Cc                    r   Nr!   r   r   r   r   r   r      r   zC.fc                    r   r"   r   r
   r   r   r   r      r   zC.cmr   r   r   r   r   r!      r    r!   c                       s(   e Zd Z fddZ fddZ  ZS )Dc                    r   Nr#   r   r   r   r   r   r      r   zD.fc                    r   r$   r   r
   r   r   r   r      s   zD.cm)r   r   r   r   r   r   r   r   r   r   r#      s    r#   c                   @      e Zd ZdS )ENr   r   r   r   r   r   r   r&   !       r&   c                   @   s   e Zd ZejZdS )FN)r   r   r   r&   r   r   r   r   r   r)   $   s    
r)   c                   @   r%   )GNr'   r   r   r   r   r*   '   r(   r*   c                       s   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
 f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 fd'd(Zd)d* Z fd+d,Z  ZS )-	TestSuperc                    s   t  d S N)r+   r   r   r   r   tearDown-   s   zTestSuper.tearDownc                 C   s   |  t  d d S NZABCDassertEqualr#   r   r   r   r   r   test_basics_working2   s   zTestSuper.test_basics_workingc                 C   s   |  tt d d S r.   r/   r   r   r   r   test_class_getattr_working5   s   z$TestSuper.test_class_getattr_workingc                 C   *   |  t  d |  tt d d S r.   )r0   r&   r   r   r   r   r   !test_subclass_no_override_working8      z+TestSuper.test_subclass_no_override_workingc                 C   r3   r.   )r0   r)   r   r   r   r   r   $test_unbound_method_transfer_working<   r5   z.TestSuper.test_unbound_method_transfer_workingc                 C   sX   |  t tdf |  t  tdf |  t tdf |  t  tdf d S r   )r0   r   r   r*   r   r   r   r    test_class_methods_still_working@   s   z*TestSuper.test_class_methods_still_workingc                 C   s\   t  }| | |t t t dfdfdfdf t }| | |tttdfdfdfdf d S )Nr   r   r!   r#   )r#   r0   r   r&   )r   der   r   r   #test_super_in_class_methods_workingF   s   &*z-TestSuper.test_super_in_class_methods_workingc                 C   s&   G dd dt }| |  d d S )Nc                          e Zd Z fddZ  ZS )z,TestSuper.test_super_with_closure.<locals>.Ec                    s    fdd}t   d S )Nc                           d S r,   r   r   r   r   r   nestedQ      z>TestSuper.test_super_with_closure.<locals>.E.f.<locals>.nestedr&   r   )r   r=   r   r   r   r   P   s   z.TestSuper.test_super_with_closure.<locals>.E.fr   r   r   r   r   r   r   r   r   r&   O       r&   ZAE)r   r0   r   )r   r&   r   r   r   test_super_with_closureL   s   z!TestSuper.test_super_with_closurec                    s   G dd dt }| }| | d | |jd G  fddd}| |jt|  | t}t	dt
 i  W d    n1 sCw   Y  | t|jt G dd d}| t
 d d	 t
 d= | d|j G  fd
dd}|  d	 d S )Nc                       s    e Zd Z fddZdZ  ZS )7TestSuper.test_various___class___pathologies.<locals>.Xc                    s
   t   S r,   r   r   r   r   r   r   Z      
9TestSuper.test_various___class___pathologies.<locals>.X.f  )r   r   r   r   r   r   r   r   r   r   XY   s    rF   r   rE   c                       s    e Zd ZZ fddZ  ZS )rB   c                      r<   r,   r   r   r   r   r   r   b   r>   rD   )r   r   r   xr   r   r   r   r   r   rF   `   s    zYclass X:
                __class__
                def f():
                    __class__c                       s    e Zd Zda fddZ  ZS )rB   *   c                      r<   r,   r   r   r   r   r   r   n   r>   rD   )r   r   r   r   r   r   r   r   r   r   rF   k       r   rH   c                       s    e Zd Zd fddZ  ZS )rB   rH   c                      r<   r,   r   r   r   r   r   r   v   r>   rD   r?   r   r   r   r   rF   s   rI   )r   r0   r   r   assertIsrG   typeassertRaises	NameErrorexecglobals	exceptionassertNotIn__dict__)r   rF   rG   r9   r   r   r   "test_various___class___pathologiesW   s$   z,TestSuper.test_various___class___pathologiesc                 C   s$   G dd d}|  |  | d S )Nc                       r;   )z2TestSuper.test___class___instancemethod.<locals>.Xc                        S r,   r   r   r   r   r   r   }   r	   z4TestSuper.test___class___instancemethod.<locals>.X.fr?   r   r   r   r   rF   |   r@   rF   rJ   r   r   rF   r   r   r   test___class___instancemethodz   s   z'TestSuper.test___class___instancemethodc                 C   "   G dd d}|  | | d S )Nc                           e Zd Ze fddZ  ZS )z/TestSuper.test___class___classmethod.<locals>.Xc                    rT   r,   r   r
   r   r   r   r         z1TestSuper.test___class___classmethod.<locals>.X.f)r   r   r   r   r   r   r   r   r   r   rF          rF   rU   rV   r   r   r   test___class___classmethod      z$TestSuper.test___class___classmethodc                 C   rX   )Nc                       rY   )z0TestSuper.test___class___staticmethod.<locals>.Xc                      rT   r,   r   r   r   r   r   r      rZ   z2TestSuper.test___class___staticmethod.<locals>.X.fr   r   r   staticmethodr   r   r   r   r   r   rF      r[   rF   rU   rV   r   r   r   test___class___staticmethod   r]   z%TestSuper.test___class___staticmethodc                    s:   d  G  fdddt }G dd d|d}|  | d S )Nc                          e Zd Z fddZ  ZS )z*TestSuper.test___class___new.<locals>.Metac                    s   t  | |||}| |S r,   )r   __new__r   )r   namebases	namespacer   r   
test_classr   r   rb      s   z2TestSuper.test___class___new.<locals>.Meta.__new__r   r   r   rb   r   r   rg   r   r   Meta       rj   c                       rY   )z'TestSuper.test___class___new.<locals>.Ac                      rT   r,   r   r   r   r   r   r      rZ   z)TestSuper.test___class___new.<locals>.A.fr^   r   r   r   r   r      r[   r   	metaclassrK   rJ   r   rj   r   r   ri   r   test___class___new   s   zTestSuper.test___class___newc                    sV   d  G  fdddt }G dd d|d}| |d  t dd }| | | d S )Nc                       s   e Zd Z fddZdS )z.TestSuper.test___class___delayed.<locals>.Metac                    s   | d S r,   r   r   rc   rd   re   Ztest_namespacer   r   rb      s   z6TestSuper.test___class___delayed.<locals>.Meta.__new__N)r   r   r   rb   r   rr   r   r   rj      s    rj   c                       rY   )z+TestSuper.test___class___delayed.<locals>.Ac                      rT   r,   r   r   r   r   r   r      rZ   z-TestSuper.test___class___delayed.<locals>.A.fr^   r   r   r   r   r      r[   r   rl   r   r   )rK   rJ   r   )r   rj   r   r   r   rr   r   test___class___delayed   s   z TestSuper.test___class___delayedc                    s:   d  G dd dt }G  fddd|d}|  | d S )Nc                       r;   )z*TestSuper.test___class___mro.<locals>.Metac                    s   | j d   t  S )Nr   )rR   r   mror   r   r   r   rt      s   
z.TestSuper.test___class___mro.<locals>.Meta.mro)r   r   r   rt   r   r   r   r   r   rj      r@   rj   c                       ra   )z'TestSuper.test___class___mro.<locals>.Ac                      s    d S r,   r   r   rf   r   r   r      r   z)TestSuper.test___class___mro.<locals>.A.fr?   r   ri   r   r   r      rk   r   rl   rn   ro   r   ri   r   test___class___mro   s   zTestSuper.test___class___mroc                    s   G  fdddt }d  G dd d|d}| d  d  G dd d|d} d }|jj}| t|d	 | ||d
  | t |j	 W d    d S 1 sRw   Y  d S )Nc                       ra   )z=TestSuper.test___classcell___expected_behaviour.<locals>.Metac                    s   |  t | |||S r,   )copyr   rb   rq   )r   namespace_snapshotr   r   rb      s   zETestSuper.test___classcell___expected_behaviour.<locals>.Meta.__new__rh   r   rw   r   r   rj      rk   rj   c                   @   r%   )zHTestSuper.test___classcell___expected_behaviour.<locals>.WithoutClassRefNr'   r   r   r   r   WithoutClassRef   r(   ry   rl   r   c                       r;   )zETestSuper.test___classcell___expected_behaviour.<locals>.WithClassRefc                    rT   r,   r   r   r   r   r   r      r	   zGTestSuper.test___classcell___expected_behaviour.<locals>.WithClassRef.fr?   r   r   r   r   WithClassRef   r@   rz      r   )
rK   rQ   r   __closure__r0   lenrJ   rL   AttributeErrorr   )r   rj   ry   rz   Z
class_cellZmethod_closurer   rx   r   %test___classcell___expected_behaviour   s   "z/TestSuper.test___classcell___expected_behaviourc                 C   sj   G dd dt }G dd d|d}d}| t| G dd d|d}W d    d S 1 s.w   Y  d S )	Nc                       r;   )z2TestSuper.test___classcell___missing.<locals>.Metac                    s   | dd  t | |||S Nr   )popr   rb   rq   r   r   r   rb      s   z:TestSuper.test___classcell___missing.<locals>.Meta.__new__rh   r   r   r   r   rj      r@   rj   c                   @   r%   )z=TestSuper.test___classcell___missing.<locals>.WithoutClassRefNr'   r   r   r   r   ry      r(   ry   rl   z+__class__ not set.*__classcell__ propagatedc                       r;   )z:TestSuper.test___classcell___missing.<locals>.WithClassRefc                    rT   r,   r   r   r   r   r   r      r	   z<TestSuper.test___classcell___missing.<locals>.WithClassRef.fr?   r   r   r   r   rz      r@   rz   )rK   ZassertRaisesRegexRuntimeError)r   rj   ry   Zexpected_errorrz   r   r   r   test___classcell___missing   s   "z$TestSuper.test___classcell___missingc              
   C   s   G dd dt }d ddt fD ]7}| j|d' | t G dd d||d}W d    n1 s2w   Y  W d    n1 sAw   Y  qd S )	Nc                       r;   )z4TestSuper.test___classcell___overwrite.<locals>.Metac                    s   ||d< t  | |||S r   )r   rb   )r   rc   rd   re   cellr   r   r   rb     s   z<TestSuper.test___classcell___overwrite.<locals>.Meta.__new__rh   r   r   r   r   rj     r@   rj   r    )bad_cellc                   @   r%   )z1TestSuper.test___classcell___overwrite.<locals>.ANr'   r   r   r   r   r   
  r(   r   )rm   r   )rK   objectZsubTestrL   	TypeError)r   rj   r   r   r   r   r   test___classcell___overwrite   s   z&TestSuper.test___classcell___overwritec                 C   sR   G dd dt }| t G dd d|d}W d    d S 1 s"w   Y  d S )Nc                       r;   )z5TestSuper.test___classcell___wrong_cell.<locals>.Metac                    s"   t  | |||} tdd|}| S )Nr   r   )r   rb   rK   )r   rc   rd   re   r   r   r   r   rb     s   z=TestSuper.test___classcell___wrong_cell.<locals>.Meta.__new__rh   r   r   r   r   rj     r@   rj   c                       r;   )z2TestSuper.test___classcell___wrong_cell.<locals>.Ac                    rT   r,   r   r   r   r   r   r     r	   z4TestSuper.test___classcell___wrong_cell.<locals>.A.fr?   r   r   r   r   r     r@   r   rl   )rK   rL   r   ro   r   r   r   test___classcell___wrong_cell  s   "z'TestSuper.test___classcell___wrong_cellc                    sT    fdd}|  t|  fdd}|  t|d  G dd d}|  t| j d S )Nc                      
   t   d S r,   r   r   r   r   r   r     rC   z.TestSuper.test_obscure_super_errors.<locals>.fc                    s   ~ t   d S r,   r   rG   r   r   r   r     s   
c                       r;   )z.TestSuper.test_obscure_super_errors.<locals>.Xc                    s    t   d S r,   r   r   r   r   r   r   $  s   
z0TestSuper.test_obscure_super_errors.<locals>.X.fr?   r   r   r   r   rF   #  r@   rF   )rL   r   r   )r   r   rF   r   r   r   test_obscure_super_errors  s   z#TestSuper.test_obscure_super_errorsc                    s:   G dd d  fdd}| j d }| t j| d S )Nc                       r;   )z&TestSuper.test_cell_as_self.<locals>.Xc                    r   r,   r   r   r   r   r   meth,  rC   z+TestSuper.test_cell_as_self.<locals>.X.meth)r   r   r   r   r   r   r   r   r   rF   +  r@   rF   c                     s      fdd} | S )Nc                      rT   r,   r   r   kr   r   g1  r	   z1TestSuper.test_cell_as_self.<locals>.f.<locals>.gr   )r   rF   r   r   r   /  s   z&TestSuper.test_cell_as_self.<locals>.fr   )r|   rL   r   r   )r   r   cr   r   r   test_cell_as_self*  s   zTestSuper.test_cell_as_selfc                    s*   t td}tdD ]	}t |t| q	d S )Ng      ?i  )r   floatrange__init__int)r   spir   r   r   test_super_init_leaks7  s   
zTestSuper.test_super_init_leaks)r   r   r   r-   r1   r2   r4   r6   r7   r:   rA   rS   rW   r\   r`   rp   rs   ru   r   r   r   r   r   r   r   r   r   r   r   r   r+   +   s.    #r+   __main__)Zunittestr   r   r!   r#   r&   r)   r*   ZTestCaser+   r   mainr   r   r   r   <module>   s      