
    <ew'                     *   d Z ddlZ G d d          Z G d de          Z G d de          Z G d	 d
ee          Z G d de          Z G d de          Z G d de          Z G d dej	                  Z
edk    r ej                     dS dS )z9Unit tests for zero-argument super() & related machinery.    Nc                   *    e Zd Zd Zed             ZdS )Ac                     dS Nr    selfs    &/usr/lib/python3.11/test/test_super.pyfzA.f   s    s    c                 
    | dfS r   r   )clss    r
   cmzA.cm	   s    Szr   N)__name__
__module____qualname__r   classmethodr   r   r   r
   r   r      s<            [  r   r   c                   8     e Zd Z fdZe fd            Z xZS )Bc                 J    t                                                      dz   S Nr   superr   r	   	__class__s    r
   r   zB.f       wwyy{{S  r   c                 J    | t                                                      dfS r   r   r   r   r   s    r
   r   zB.cm       UWWZZ\\3''r   r   r   r   r   r   r   __classcell__r   s   @r
   r   r      [        ! ! ! ! !( ( ( ( [( ( ( ( (r   r   c                   8     e Zd Z fdZe fd            Z xZS )Cc                 J    t                                                      dz   S Nr&   r   r   s    r
   r   zC.f   r   r   c                 J    | t                                                      dfS r(   r   r   s    r
   r   zC.cm   r    r   r!   r#   s   @r
   r&   r&      r$   r   r&   c                   (     e Zd Z fdZ fdZ xZS )Dc                 J    t                                                      dz   S Nr+   r   r   s    r
   r   zD.f   r   r   c                 J    | t                                                      dfS r-   r   r   s    r
   r   zD.cm   s    UWWZZ\\3''r   )r   r   r   r   r   r"   r#   s   @r
   r+   r+      sQ        ! ! ! ! !( ( ( ( ( ( ( ( (r   r+   c                       e Zd ZdS )ENr   r   r   r   r   r
   r0   r0   !           Dr   r0   c                       e Zd Zej        ZdS )FN)r   r   r   r0   r   r   r   r
   r4   r4   $   s        	AAAr   r4   c                       e Zd ZdS )GNr1   r   r   r
   r6   r6   '   r2   r   r6   c                        e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
 fd	Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Z fdZd Z fdZ fdZ fdZ xZS )	TestSuperc                     t           d S N)r8   r   s    r
   tearDownzTestSuper.tearDown-   s     			r   c                 n    |                      t                                                      d           d S NABCDassertEqualr+   r   r   s    r
   test_basics_workingzTestSuper.test_basics_working2   s*    &)))))r   c                 z    |                      t                              t                                d           d S r=   r?   r   s    r
   test_class_getattr_workingz$TestSuper.test_class_getattr_working5   s,    QSS6*****r   c                     |                      t                                                      d           |                      t                              t                                d           d S r=   )r@   r0   r   r   s    r
   !test_subclass_no_override_workingz+TestSuper.test_subclass_no_override_working8   N    &)))QSS6*****r   c                     |                      t                                                      d           |                      t                              t                                d           d S r=   )r@   r4   r   r   s    r
   $test_unbound_method_transfer_workingz.TestSuper.test_unbound_method_transfer_working<   rF   r   c                    |                      t                                          t          df           |                      t                                                      t          df           |                      t                                          t          df           |                      t                                                      t          df           d S r   )r@   r   r   r6   r   s    r
    test_class_methods_still_workingz*TestSuper.test_class_methods_still_working@   s    !S***As8,,,!S***As8,,,,,r   c                 F   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+   r@   r   r0   )r	   des      r
   #test_super_in_class_methods_workingz-TestSuper.test_super_in_class_methods_workingF   s    CC!a!aXs);S%A3!GHHHCC!a!aXs);S%A3!GHHHHHr   c                      G d dt                     }|                      |                                            d           d S )Nc                        e Zd Z fdZ xZS ),TestSuper.test_super_with_closure.<locals>.Ec                 V      fd}t                                                      dz   S )Nc                        d S r:   r   r   s   r
   nestedz>TestSuper.test_super_with_closure.<locals>.E.f.<locals>.nestedQ   s    DDDr   r0   r   )r	   rT   r   s   ` r
   r   z.TestSuper.test_super_with_closure.<locals>.E.fP   s4        wwyy{{S((r   r   r   r   r   r"   r#   s   @r
   r0   rQ   O   s8        ) ) ) ) ) ) ) ) )r   r0   AE)r   r@   r   )r	   r0   s     r
   test_super_with_closurez!TestSuper.test_super_with_closureL   sX    	) 	) 	) 	) 	) 	) 	) 	) 	$'''''r   c                 6    G d dt                     } |            }|                     |                                d           |                     |j        d            G fdd          }|                     |j        t          |                      |                     t                    5 }t          dt                      i            d d d            n# 1 swxY w Y   |                     t          |j                  t                      G d d          }|                     t                      d         d	           t                      d= |                     d|j                    G fd
d          }|                     d	           d S )Nc                   "     e Zd Z fdZdZ xZS )7TestSuper.test_various___class___pathologies.<locals>.Xc                 D    t                                                      S r:   r   r   s    r
   r   z9TestSuper.test_various___class___pathologies.<locals>.X.fZ   s    wwyy{{"r     )r   r   r   r   r   r"   r#   s   @r
   XrZ   Y   s1        # # # # #IIIIIr   r]   r   r\   c                   $     e Zd ZZ fdZ xZS )rZ   c                        d S r:   r   r#   s   r
   r   z9TestSuper.test_various___class___pathologies.<locals>.X.fb       			r   )r   r   r   xr   r"   r   r   s   @r
   r]   z7TestSuper.test_various___class___pathologies.<locals>.X`   s>        A        r   zYclass X:
                __class__
                def f():
                    __class__c                   "     e Zd Zda fdZ xZS )rZ   *   c                        d S r:   r   r#   s   r
   r   z9TestSuper.test_various___class___pathologies.<locals>.X.fn   r`   r   )r   r   r   r   r   r"   r#   s   @r
   r]   z7TestSuper.test_various___class___pathologies.<locals>.Xk   s=        I        r   r   rd   c                   $     e Zd Zd fdZ xZS )rZ   rd   c                        d S r:   r   r#   s   r
   r   z9TestSuper.test_various___class___pathologies.<locals>.X.fv   r`   r   rU   rb   s   @r
   r]   z7TestSuper.test_various___class___pathologies.<locals>.Xs   s>        I        r   )r   r@   r   r   assertIsra   typeassertRaises	NameErrorexecglobals	exceptionassertNotIn__dict__)r	   r]   ra   rM   r   s       r
   "test_various___class___pathologiesz,TestSuper.test_various___class___pathologiesW   s%   	 	 	 	 	 	 	 	 ACC$$$c***	 	 	 	 	 	 	 	 	 	 	ac4::&&&y)) 	1Q ! #*))R1 1 1	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1
 	d1;''333	 	 	 	 	 	 	 	
 	;/444IIk"aj111	 	 	 	 	 	 	 	 	 	
 	B'''''s   3CC!$C!c                      G d d          }|                       |                                            |           d S )Nc                        e Zd Z fdZ xZS )2TestSuper.test___class___instancemethod.<locals>.Xc                     S r:   r   r   s    r
   r   z4TestSuper.test___class___instancemethod.<locals>.X.f}   	      r   rU   r#   s   @r
   r]   rt   |   8        ! ! ! ! ! ! ! ! !r   r]   rh   r   r	   r]   s     r
   test___class___instancemethodz'TestSuper.test___class___instancemethodz   sT    	! 	! 	! 	! 	! 	! 	! 	! 	aacceeggq!!!!!r   c                 p     G d d          }|                      |                                |           d S )Nc                   .     e Zd Ze fd            Z xZS )/TestSuper.test___class___classmethod.<locals>.Xc                     S r:   r   r   s    r
   r   z1TestSuper.test___class___classmethod.<locals>.X.f   	      r   )r   r   r   r   r   r"   r#   s   @r
   r]   r}      sB        ! ! ! ! [! ! ! ! !r   r]   rx   ry   s     r
   test___class___classmethodz$TestSuper.test___class___classmethod   N    	! 	! 	! 	! 	! 	! 	! 	! 	acceeQr   c                 p     G d d          }|                      |                                |           d S )Nc                   .     e Zd Ze fd            Z xZS )0TestSuper.test___class___staticmethod.<locals>.Xc                       S r:   r   r#   s   r
   r   z2TestSuper.test___class___staticmethod.<locals>.X.f   r   r   r   r   r   staticmethodr   r"   r#   s   @r
   r]   r      B        ! ! ! ! \! ! ! ! !r   r]   rx   ry   s     r
   test___class___staticmethodz%TestSuper.test___class___staticmethod   r   r   c                     d  G fddt                     } G d d|          }|                     |           d S )Nc                   "     e Zd Z fdZ xZS )*TestSuper.test___class___new.<locals>.Metac                 x    t                                          | |||          }|                                |S r:   )r   __new__r   )r   namebases	namespacer	   r   
test_classs        r
   r   z2TestSuper.test___class___new.<locals>.Meta.__new__   s0    wwsD%CC!VVXX
r   r   r   r   r   r"   r   r   s   @r
   Metar      s>                 r   r   c                   .     e Zd Ze fd            Z xZS )'TestSuper.test___class___new.<locals>.Ac                       S r:   r   r#   s   r
   r   z)TestSuper.test___class___new.<locals>.A.f   r   r   r   r#   s   @r
   r   r      r   r   r   	metaclassri   rh   r	   r   r   r   s      @r
   test___class___newzTestSuper.test___class___new   s     
	 	 	 	 	 	 	4 	 	 		! 	! 	! 	! 	!$ 	! 	! 	! 	!
 	j!$$$$$r   c                     d  G fddt                     } G d d|          }|                     |d            t          dd          }|                     |                                |           d S )Nc                       e Zd Z fdZdS ).TestSuper.test___class___delayed.<locals>.Metac                     |d S r:   r   )r   r   r   r   test_namespaces       r
   r   z6TestSuper.test___class___delayed.<locals>.Meta.__new__   s    !*tr   N)r   r   r   r   )r   s   r
   r   r      s.              r   r   c                   .     e Zd Ze fd            Z xZS )+TestSuper.test___class___delayed.<locals>.Ac                       S r:   r   r#   s   r
   r   z-TestSuper.test___class___delayed.<locals>.A.f   r   r   r   r#   s   @r
   r   r      r   r   r   r   r   r   )ri   rh   r   )r	   r   r   r   r   s       @r
   test___class___delayedz TestSuper.test___class___delayed   s    	 	 	 	 	 	 	4 	 	 		! 	! 	! 	! 	!$ 	! 	! 	! 	!
 	ab.))acceeQr   c                     d  G d dt                     } G fdd|          }|                     |           d S )Nc                        e Zd Z fdZ xZS )*TestSuper.test___class___mro.<locals>.Metac                 n     | j         d                      t                                                      S )Nr   )rp   r   mror   s    r
   r   z.TestSuper.test___class___mro.<locals>.Meta.mro   s*    "c"$$$ww{{}}$r   )r   r   r   r   r"   r#   s   @r
   r   r      s8        % % % % % % % % %r   r   c                   "     e Zd Z fdZ xZS )'TestSuper.test___class___mro.<locals>.Ac                       d S r:   r   r   s   r
   r   z)TestSuper.test___class___mro.<locals>.A.f   s    &


r   rU   r   s   @r
   r   r      s>        ' ' ' ' ' ' ' ' ' 'r   r   r   r   r   s      @r
   test___class___mrozTestSuper.test___class___mro   s    
	% 	% 	% 	% 	%4 	% 	% 	%	' 	' 	' 	' 	' 	' 	'$ 	' 	' 	' 	'
 	j!$$$$$r   c                     G fddt                     }d  G d d|          }|                     d           d  G d d|          }d         }|j        j        }|                     t          |          d	           |                     ||d
                    |                     t                    5  |j	         d d d            d S # 1 swxY w Y   d S )Nc                   "     e Zd Z fdZ xZS )=TestSuper.test___classcell___expected_behaviour.<locals>.Metac                 t    |                                 t                                          | |||          S r:   )copyr   r   )r   r   r   r   r   namespace_snapshots       r
   r   zETestSuper.test___classcell___expected_behaviour.<locals>.Meta.__new__   s/    %.^^%5%5"wwsD%CCCr   r   )r   r   s   @r
   r   r      sH        D D D D D D D D D Dr   r   c                       e Zd ZdS )HTestSuper.test___classcell___expected_behaviour.<locals>.WithoutClassRefNr1   r   r   r
   WithoutClassRefr              Dr   r   r   r"   c                        e Zd Z fdZ xZS )ETestSuper.test___classcell___expected_behaviour.<locals>.WithClassRefc                     S r:   r   r   s    r
   r   zGTestSuper.test___classcell___expected_behaviour.<locals>.WithClassRef.f   rv   r   rU   r#   s   @r
   WithClassRefr      rw   r   r      r   )
ri   ro   r   __closure__r@   lenrh   rj   AttributeErrorr"   )r	   r   r   r   
class_cellmethod_closurer   s         @r
   %test___classcell___expected_behaviourz/TestSuper.test___classcell___expected_behaviour   s   	D 	D 	D 	D 	D 	D 	D4 	D 	D 	D "	 	 	 	 	 	 	 	 	*<===
 "	! 	! 	! 	! 	!T 	! 	! 	! 	! (8
%3^,,a000j."3444~.. 	' 	'&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   <CCCc                      G d dt                     } G d d|          }d}|                     t          |          5   G d d|          }d d d            d S # 1 swxY w Y   d S )	Nc                        e Zd Z fdZ xZS )2TestSuper.test___classcell___missing.<locals>.Metac                 x    |                     dd            t                                          | |||          S Nr"   )popr   r   )r   r   r   r   r   s       r
   r   z:TestSuper.test___classcell___missing.<locals>.Meta.__new__   s3    ot444wwsD%CCCr   r   r#   s   @r
   r   r      A        D D D D D D D D Dr   r   c                       e Zd ZdS )=TestSuper.test___classcell___missing.<locals>.WithoutClassRefNr1   r   r   r
   r   r      r   r   r   r   z+__class__ not set.*__classcell__ propagatedc                        e Zd Z fdZ xZS ):TestSuper.test___classcell___missing.<locals>.WithClassRefc                     S r:   r   r   s    r
   r   z<TestSuper.test___classcell___missing.<locals>.WithClassRef.f   	    $$r   rU   r#   s   @r
   r   r      8        % % % % % % % % %r   r   )ri   assertRaisesRegexRuntimeError)r	   r   r   expected_errorr   s        r
   test___classcell___missingz$TestSuper.test___classcell___missing   s   	D 	D 	D 	D 	D4 	D 	D 	D	 	 	 	 	 	 	 	 	 G##L.AA 	% 	%% % % % % % % % %	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s    AA!$A!c           	      6    G d dt                     }d ddt                      fD ]r}|                     |          5  |                     t                    5   G d d||          }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   sd S )	Nc                        e Zd Z fdZ xZS )4TestSuper.test___classcell___overwrite.<locals>.Metac                 V    ||d<   t                                          | |||          S r   )r   r   )r   r   r   r   cellr   s        r
   r   z<TestSuper.test___classcell___overwrite.<locals>.Meta.__new__  s)    -1	/*wwsD%CCCr   r   r#   s   @r
   r   r     r   r   r   r    )bad_cellc                       e Zd ZdS )1TestSuper.test___classcell___overwrite.<locals>.ANr1   r   r   r
   r   r   
  s        r   r   )r   r   )ri   objectsubTestrj   	TypeError)r	   r   r   r   s       r
   test___classcell___overwritez&TestSuper.test___classcell___overwrite   s`   	D 	D 	D 	D 	D4 	D 	D 	D
 q"fhh/ 	 	Hx00  &&y11      d                                	 	s5   BA6*B6A::B=A:>BB	B	c                      G d dt                     }|                     t                    5   G d d|          }d d d            d S # 1 swxY w Y   d S )Nc                        e Zd Z fdZ xZS )5TestSuper.test___classcell___wrong_cell.<locals>.Metac                 r    t                                          | |||          } t          dd|          }| S )Nr   r   )r   r   ri   )r   r   r   r   r   r   s        r
   r   z=TestSuper.test___classcell___wrong_cell.<locals>.Meta.__new__  s4    ggooc4	BBb),,
r   r   r#   s   @r
   r   r     s8                r   r   c                        e Zd Z fdZ xZS )2TestSuper.test___classcell___wrong_cell.<locals>.Ac                     S r:   r   r   s    r
   r   z4TestSuper.test___classcell___wrong_cell.<locals>.A.f  r   r   rU   r#   s   @r
   r   r     r   r   r   r   )ri   rj   r   )r	   r   r   s      r
   test___classcell___wrong_cellz'TestSuper.test___classcell___wrong_cell  s    	 	 	 	 	4 	 	 	 y)) 	% 	%% % % % %d % % % %	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   AAAc                     fd}|                      t          |           fd}|                      t          |d             G d d          }|                      t           |            j                   d S )Nc                  $    t                       d S r:   r   r#   s   r
   r   z.TestSuper.test_obscure_super_errors.<locals>.f  s    GGGGGr   c                 &    ~ t                       d S r:   r   ra   r   s    r
   r   z.TestSuper.test_obscure_super_errors.<locals>.f  s    GGGGGr   c                        e Zd Z fdZ xZS ).TestSuper.test_obscure_super_errors.<locals>.Xc                 &    t                       d S r:   r   r   s    r
   r   z0TestSuper.test_obscure_super_errors.<locals>.X.f$  s    r   rU   r#   s   @r
   r]   r   #  s8                r   r]   )rj   r   r   )r	   r   r]   r   s      r
   test_obscure_super_errorsz#TestSuper.test_obscure_super_errors  s    	 	 	 	 	,***	 	 	 	 	 	,4000	 	 	 	 	 	 	 	
 	,.....r   c                      G d d          fd} |            j         d         }|                     t          j        |           d S )Nc                        e Zd Z fdZ xZS )&TestSuper.test_cell_as_self.<locals>.Xc                 $    t                       d S r:   r   r   s    r
   methz+TestSuper.test_cell_as_self.<locals>.X.meth,  s    r   )r   r   r   r   r"   r#   s   @r
   r]   r   +  s8                r   r]   c                  (                 fd} | S )Nc                       S r:   r   )ks   r
   gz1TestSuper.test_cell_as_self.<locals>.f.<locals>.g1  s    r   r   )r   r   r]   s    @r
   r   z&TestSuper.test_cell_as_self.<locals>.f/  s-    A    Hr   r   )r   rj   r   r   )r	   r   cr]   s      @r
   test_cell_as_selfzTestSuper.test_cell_as_self*  sx    	 	 	 	 	 	 	 		 	 	 	 	
 ACCOA)QVQ/////r   c                     t          t          d          }t          d          D ]#}t                               |t          |           $d S )Ng      ?i  )r   floatrange__init__int)r	   spir   s      r
   test_super_init_leakszTestSuper.test_super_init_leaks7  sL    
 5#t 	' 	'ANN2sA&&&&	' 	'r   c                     |                      t          d          5  t          t          t          t                     d d d            d S # 1 swxY w Y   d S )Nzexpected at mostr   r   r   r  r   s    r
   test_super_argcountzTestSuper.test_super_argcount@  s    ##I/ABB 	! 	!#sC   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   !AAAc                     |                      t          d          5  t          dt                     d d d            d S # 1 swxY w Y   d S )Nzargument 1 must be a typer   r	  r   s    r
   test_super_argtypezTestSuper.test_super_argtypeD  s    ##I/JKK 	 	!SMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A  AA)r   r   r   r;   rA   rC   rE   rH   rJ   rN   rW   rq   rz   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r"   r#   s   @r
   r8   r8   +   s           
* * *+ + ++ + ++ + +- - -I I I	( 	( 	(!( !( !( !( !(F" " "          % % %&     (% % %"' ' '>% % %.  % % %/ / / / /0 0 0' ' ' ' '! ! ! ! !        r   r8   __main__)__doc__unittestr   r   r&   r+   r0   r4   r6   TestCaser8   r   mainr   r   r
   <module>r     s   ? ?        ( ( ( ( ( ( ( (( ( ( ( ( ( ( (( ( ( ( (1 ( ( (	 	 	 	 	 	 	 	       	 	 	 	 	 	 	 	[ [ [ [ [! [ [ [| zHMOOOOO r   