
    z%iC&                     
   d dl Z d dlZd dlZd dlmZ  G d de      Z G d de      Z G d de      Z G d	 d
e      Z	 G d de
      Z G d de      Z G d de
      Z G d de      Z G d de      Z G d de
      Z G d de j"                        Z G d de j"                        Z G d dej(                        Z G d de      Z G d  d!e      Z G d" d#ej(                        Zed$k(  r ej4                          yy)%    N)DynamicClassAttributec                       e Zd Zy)PropertyBaseN__name__
__module____qualname__     S/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_dynamicclassattribute.pyr   r   	       r   r   c                       e Zd Zy)PropertyGetNr   r
   r   r   r   r      r   r   r   c                       e Zd Zy)PropertySetNr   r
   r   r   r   r      r   r   r   c                       e Zd Zy)PropertyDelNr   r
   r   r   r   r      r   r   r   c                   j    e Zd Zd Zed        Zej                  d        Zej                  d        Zy)	BaseClassc                     d| _         y N   _spamselfs    r   __init__zBaseClass.__init__   s	    
r   c                     	 | j                   S Nr   r   s    r   spamzBaseClass.spam   s    zzr   c                     || _         y r   r   r   values     r   r    zBaseClass.spam   s	    
r   c                     | ` y r   r   r   s    r   r    zBaseClass.spam"   s    Jr   N)r   r   r	   r   r   r    setterdeleterr
   r   r   r   r      sK       
[[  
\\ r   r   c                       e Zd Zej                  d   Zej                  d        Zej                  d        Zej                  d        Zy)SubClassr    c                 .    	 t        | j                        r   )r   r   r   s    r   r    zSubClass.spam*   s    $**%%r   c                 ,    t        | j                        r   )r   r   r"   s     r   r    zSubClass.spam/       $**%%r   c                 ,    t        | j                        r   )r   r   r   s    r   r    zSubClass.spam3   r+   r   N)	r   r   r	   r   __dict__r    getterr%   r&   r
   r   r   r(   r(   &   sX    f%D	[[& & 
[[& & 
\\& &r   r(   c                   *    e Zd ZdZd Z eed      Zy)PropertyDocBase   c                     | j                   S r   r   r   s    r   	_get_spamzPropertyDocBase._get_spam9   s    zzr   spam spam spam)docN)r   r   r	   r   r3   r   r    r
   r   r   r0   r0   7   s    E 0@ADr   r0   c                   N    e Zd Zej                  d   Zej                  d        Zy)PropertyDocSubr    c                     	 | j                   S r   r   r   s    r   r    zPropertyDocSub.spam?   s    8zzr   N)r   r   r	   r0   r-   r    r.   r
   r   r   r7   r7   =   s(    ##F+D	[[ r   r7   c                   N    e Zd Zej                  d   Zej                  d        Zy)PropertySubNewGetterr    c                      	 yr   r
   r   s    r   r    zPropertySubNewGetter.spamF       r   N)r   r   r	   r   r-   r    r.   r
   r   r   r:   r:   D   s(    f%D	[[ r   r:   c                   @    e Zd Zed        Zej
                  d        Zy)PropertyNewGetterc                      	 yNr1   r
   r   s    r   r    zPropertyNewGetter.spamL   s     r   c                      	 y)N   r
   r   s    r   r    zPropertyNewGetter.spamP   r<   r   N)r   r   r	   r   r    r.   r
   r   r   r>   r>   K   s,      
[[ r   r>   c                   :    e Zd Zeej
                  d               Zy) ClassWithAbstractVirtualPropertyc                       y r   r
   r
   r   r   colorz&ClassWithAbstractVirtualProperty.colorV        	r   N)r   r   r	   r   abcabstractmethodrF   r
   r   r   rD   rD   U   s"      r   rD   )	metaclassc                   :    e Zd Zej                  ed               Zy) ClassWithPropertyAbstractVirtualc                       y r   r
   r
   r   r   rF   z&ClassWithPropertyAbstractVirtual.color\   rG   r   N)r   r   r	   rH   rI   r   rF   r
   r   r   rL   rL   [   s"      r   rL   c                   J   e Zd Zd Zd Z ej                  ej                  j                  dk\  d      d        Z
 ej                  ej                  j                  dk\  d      d        Zd Z ej                  ej                  j                  dk\  d      d        Zd	 Zd
 Zy)PropertyTestsc                    t               }| j                  |j                  d       | j                  |j                  d       d|_        | j                  |j                  d       | j                  |j                  d       t	        |d       | j                  t        |d              | j                  t        |d              d|_        | j                  |j                  d       | j                  |j                  d       y )Nr   
   r    r      )r   assertEqualr    r   delattr
assertTruehasattrr   bases     r   !test_property_decorator_baseclassz/PropertyTests.test_property_decorator_baseclassb   s    {A&Q'	B'R(fGD&112GD'223	B'R(r   c                     t               }| j                  t        t        |d       | j                  t        t
        |dd        | j                  t        t        |d       y )Nr    )r(   assertRaisesr   getattrr   setattrr   rT   r   subs     r    test_property_decorator_subclassz.PropertyTests.test_property_decorator_subclassq   sG    j+wV<+wVTB+wV<r      )Docstrings are omitted with -O2 and abovec                 ~    t               }| j                  |j                  j                  d   j                  d       y )Nr    zSubClass.getter)r(   rS   	__class__r-   __doc__r^   s     r   $test_property_decorator_subclass_docz2PropertyTests.test_property_decorator_subclass_docx   s1     j//7??ARSr   c                 ~    t               }| j                  |j                  j                  d   j                  d       y )Nr    zBaseClass.getter)r   rS   rd   r-   re   rW   s     r   %test_property_decorator_baseclass_docz3PropertyTests.test_property_decorator_baseclass_doc~   s1     {008@@BTUr   c                     t               }t               }| j                  |j                  j                  d   j
                  d       | j                  |j                  j                  d   j
                  d       y )Nr    r4   )r0   r7   rS   rd   r-   re   )r   rX   r_   s      r   test_property_decorator_docz)PropertyTests.test_property_decorator_doc   s^     008@@BRS//7??AQRr   c                 h   t               }| j                  |j                  d       | j                  |j                  j                  d   j
                  d       t               }| j                  |j                  d       | j                  |j                  j                  d   j
                  d       y )Nr   r    znew docstringrB   )r:   rS   r    rd   r-   re   r>   )r   newgettersub	newgetters      r   !test_property_getter_doc_overridez/PropertyTests.test_property_getter_doc_override   s     ,-**A.//88@HH/Z%'	+,,55f=EEWr   c                 >   ddg dgddfD ]E   G fddt               }| j                  |j                  d   j                  t	                     G  G d	 d
t               | j                  t              5   G fddt               }d d d        y # 1 sw Y   y xY w)NTFr1    1c                   4    e Zd Zd ZW  e_         ee      Zy)EPropertyTests.test_property___isabstractmethod__descriptor.<locals>.Cc                      y r   r
   r   s    r   foozIPropertyTests.test_property___isabstractmethod__descriptor.<locals>.C.foo       r   Nr   r   r	   ru   __isabstractmethod__r   )vals   r   Crs      s    +.(+C0r   rz   ru   c                       e Zd Zd ZeZy)KPropertyTests.test_property___isabstractmethod__descriptor.<locals>.NotBoolc                     t               r   )
ValueErrorr   s    r   __bool__zTPropertyTests.test_property___isabstractmethod__descriptor.<locals>.NotBool.__bool__   s
     l"r   N)r   r   r	   r   __len__r
   r   r   NotBoolr|      s    #Gr   r   c                   >    e Zd Zd Z W         e_         ee      Zy)rs   c                      y r   r
   r   s    r   ru   zIPropertyTests.test_property___isabstractmethod__descriptor.<locals>.C.foo   rv   r   Nrw   )r   s   r   rz   zEPropertyTests.test_property___isabstractmethod__descriptor.<locals>.C   s    +29(+C0r   )objectassertIsr-   rx   boolr[   r~   )r   rz   r   ry   s     @@r   ,test_property___isabstractmethod__descriptorz:PropertyTests.test_property___isabstractmethod__descriptor   s    %aS"c2 	MC1F 1
 MM!**U+@@$s)L	M	f 	 z* 	11F 1	1 	1 	1s   8BBc                    | j                  t        t               | j                  t        t                G d dt              }| j                  t        |        G d dt              }| j                  t        |        G d dt              }| j                  t              5  |j
                   d d d        | j                   |       j
                  d        G d d	t              }| j                  t              5  |j
                   d d d        | j                   |       j
                  d
       y # 1 sw Y   xY w# 1 sw Y   7xY w)Nc                       e Zd Zy)0PropertyTests.test_abstract_virtual.<locals>.APVNr   r
   r   r   APVr          r   r   c                       e Zd Zy)0PropertyTests.test_abstract_virtual.<locals>.AVPNr   r
   r   r   AVPr      r   r   r   c                   "    e Zd Zed        Zd Zy)2PropertyTests.test_abstract_virtual.<locals>.Okay1c                     | j                   S r   _colorr   s    r   rF   z8PropertyTests.test_abstract_virtual.<locals>.Okay1.color       {{"r   c                     d| _         y )Ncyanr   r   s    r   r   z;PropertyTests.test_abstract_virtual.<locals>.Okay1.__init__   s	    $r   Nr   r   r	   r   rF   r   r
   r   r   Okay1r      s    "# ##%r   r   r   c                   "    e Zd Zed        Zd Zy)2PropertyTests.test_abstract_virtual.<locals>.Okay2c                     | j                   S r   r   r   s    r   rF   z8PropertyTests.test_abstract_virtual.<locals>.Okay2.color   r   r   c                     d| _         y )Nmagentar   r   s    r   r   z;PropertyTests.test_abstract_virtual.<locals>.Okay2.__init__   s	    'r   Nr   r
   r   r   Okay2r      s    "# ##(r   r   r   )r[   	TypeErrorrD   rL   AttributeErrorrF   rS   )r   r   r   r   r   s        r   test_abstract_virtualz#PropertyTests.test_abstract_virtual   s    )%EF)%EF	2 	)S)	2 	)S)	%4 	% ~. 	KK	/	(4 	( ~. 	KK		2	 		 	s   #D4=E 4D= E	N)r   r   r	   rY   r`   unittestskipIfsysflagsoptimizerf   rh   rj   rn   r   r   r
   r   r   rO   rO   a   s    )= X__SYY''1,@BTBT X__SYY''1,@BVBVS X__SYY''1,@BXBX1,3r   rO   c                       e Zd Zy)PropertySubNr   r
   r   r   r   r      s    5r   r   c                       e Zd Z	 dZy)PropertySubSlotsr
   N)r   r   r	   	__slots__r
   r   r   r   r      s
    LIr   r   c                   l   e Zd Z ej                   eed      d      d        Z ej                  ej                  j                  dk\  d      d        Z ej                  ej                  j                  dk\  d      d        Z ej                  ej                  j                  dk\  d      d        Zy	)
PropertySubclassTestsre   z9__doc__ is already present, __slots__ will have no effectc                 V    	  G d dt               }t        d      # t        $ r Y y w xY w)Nc                   B    e Zd Zed        Z edej                         y)FPropertySubclassTests.test_slots_docstring_copy_exception.<locals>.Fooc                      	 yr@   r
   r   s    r   r    zKPropertySubclassTests.test_slots_docstring_copy_exception.<locals>.Foo.spam   s    Or   
N)r   r   r	   r   r    printre   r
   r   r   Foor      s$    ! " d4<<(r   r   zAttributeError not raised)r   	Exceptionr   r   r   s     r   #test_slots_docstring_copy_exceptionz9PropertySubclassTests.test_slots_docstring_copy_exception   s5    
	9)f ) 788  		s    	((ra   rb   c                 t     G d dt               }| j                  |j                  d   j                  d       y )Nc                       e Zd Zed        Zy)6PropertySubclassTests.test_docstring_copy.<locals>.Fooc                      	 yr@   r
   r   s    r   r    z;PropertySubclassTests.test_docstring_copy.<locals>.Foo.spam   s    Dr   Nr   r   r	   r   r    r
   r   r   r   r           r   r   r    .spam wrapped in DynamicClassAttribute subclassr   rS   r-   re   r   s     r   test_docstring_copyz)PropertySubclassTests.test_docstring_copy   s3    	& 	
 	LL ((<	>r   c                     G d dt                       }| j                  |j                  d       d|_        | j                  |j                  d       | j                  j                  d   j                  d        G fdd      } |       }| j                  |j                  d       d	|_        | j                  |j                  d
       | j                  |j                  d   j                  d       y )Nc                   F    e Zd Zd Zed        Zej                  d        Zy)OPropertySubclassTests.test_property_setter_copies_getter_docstring.<locals>.Fooc                     d| _         y r@   r   r   s    r   r   zXPropertySubclassTests.test_property_setter_copies_getter_docstring.<locals>.Foo.__init__   s    Q
r   c                     	 | j                   S r   r   r   s    r   r    zTPropertySubclassTests.test_property_setter_copies_getter_docstring.<locals>.Foo.spam   s    Dzz!r   c                     	 || _         y r   r   r"   s     r   r    zTPropertySubclassTests.test_property_setter_copies_getter_docstring.<locals>.Foo.spam   s    /"
r   N)r   r   r	   r   r   r    r%   r
   r   r   r   r      s/    ." " [[# #r   r   r1   ra   r    r   c                   R    e Zd ZW  j                  d   Zej
                  d        Zy)RPropertySubclassTests.test_property_setter_copies_getter_docstring.<locals>.FooSubr    c                     	 d| _         y )Neggsr   r"   s     r   r    zWPropertySubclassTests.test_property_setter_copies_getter_docstring.<locals>.FooSub.spam  s    /#
r   N)r   r   r	   r-   r    r%   )r   s   r   FooSubr      s'    <<'D[[$ $r   r      r   )r   rS   r    r-   re   )r   ru   r   foosubr   s       @r   ,test_property_setter_copies_getter_docstringzBPropertySubclassTests.test_property_setter_copies_getter_docstring   s    		#& 		# e1%1%LL ((<	>	$S 	$ a(f-OOF#++<	>r   c                      G d dt               }| j                  |j                  d   j                  d        G d dt                G fdd      }| j                  |j                  d   j                  d       y )	Nc                   @    e Zd Zed        Zej
                  d        Zy)IPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.Fooc                      	 yr@   r
   r   s    r   r    zNPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.Foo.spam      !r   c                      	 yNra   r
   r   s    r   r    zNPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.Foo.spam      %r   N)r   r   r	   r   r    r.   r
   r   r   r   r     s,      [[ r   r   r    za new docstringc                       e Zd Zed        Zy)MPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.FooBasec                      	 yr@   r
   r   s    r   r    zRPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.FooBase.spam  r   r   Nr   r
   r   r   FooBaser     r   r   r   c                   R    e Zd ZW  j                  d   Zej
                  d        Zy)JPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.Foo2r    c                      	 yr   r
   r   s    r   r    zOPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.Foo2.spam#  r   r   N)r   r   r	   r-   r    r.   )r   s   r   Foo2r   !  s)    ##F+D[[ r   r   r   )r   r   r   r   s      @r   &test_property_new_getter_new_docstringz<PropertySubclassTests.test_property_new_getter_new_docstring  sk    	& 	 	f-557HI	f 	
	7 	 	f-557HIr   N)r   r   r	   r   r   rV   r   r   r   r   r   r   r   r   r
   r   r   r   r      s    X__W-y9GI9I9 X__SYY''1,@B>B> X__SYY''1,@B>B>@ X__SYY''1,@BJBJr   r   __main__)rH   r   r   typesr   r   r   r   r   r   r   r   r(   r0   r7   r:   r>   ABCMetarD   rL   TestCaserO   r   r   r   r   mainr
   r   r   <module>r      s    
  '	9 		, 		, 		, 	 "&y &"Bf B_ 9    c3H%% c3N6' 6, XJH-- XJx zHMMO r   