o
    HXhi-                     @   sN  d dl Z d dlZd dlmZ G dd d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	Z
G dd d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	ZG dd dejZG dd deZG dd deZG dd dejZG dd  d ZG d!d" d"eejZG d#d$ d$eejZed%kre  dS dS )&    N)supportc                   @      e Zd ZdS )PropertyBaseN__name__
__module____qualname__ r	   r	   </opt/python-3.10.19/usr/lib/python3.10/test/test_property.pyr          r   c                   @   r   )PropertyGetNr   r	   r	   r	   r
   r      r   r   c                   @   r   )PropertySetNr   r	   r	   r	   r
   r      r   r   c                   @   r   )PropertyDelNr   r	   r	   r	   r
   r      r   r   c                   @   s<   e Zd Zdd Zedd Zejdd Zejdd ZdS )	BaseClassc                 C   
   d| _ d S N   _spamselfr	   r	   r
   __init__   s   
zBaseClass.__init__c                 C      	 | j S Nr   r   r	   r	   r
   spam      zBaseClass.spamc                 C   s
   || _ d S r   r   r   valuer	   r	   r
   r         
c                 C   s   | ` d S r   r   r   r	   r	   r
   r   !   s   N)r   r   r   r   propertyr   setterdeleterr	   r	   r	   r
   r      s    

r   c                   @   s8   e Zd Zejjdd Zejdd Zejdd ZdS )SubClassc                 C   s   	 t | jr   )r   r   r   r	   r	   r
   r   '      
zSubClass.spamc                 C   
   t | jr   )r   r   r   r	   r	   r
   r   ,   r   c                 C   r$   r   )r   r   r   r	   r	   r
   r   0   r   N)r   r   r   r   r   getterr    r!   r	   r	   r	   r
   r"   %   s    

r"   c                   @   s$   e Zd ZdZdd ZeeddZdS )PropertyDocBase   c                 C   s   | j S r   r   r   r	   r	   r
   	_get_spam6      zPropertyDocBase._get_spamspam spam spamdocN)r   r   r   r   r(   r   r   r	   r	   r	   r
   r&   4   s    r&   c                   @      e Zd Zejjdd ZdS )PropertyDocSubc                 C   r   r   r   r   r	   r	   r
   r   ;   r   zPropertyDocSub.spamN)r   r   r   r&   r   r%   r	   r	   r	   r
   r.   :       r.   c                   @   r-   )PropertySubNewGetterc                 C      	 dS r   r	   r   r	   r	   r
   r   A      zPropertySubNewGetter.spamN)r   r   r   r   r   r%   r	   r	   r	   r
   r0   @   r/   r0   c                   @   &   e Zd Zedd Zejdd ZdS )PropertyNewGetterc                 C   r1   Nr'   r	   r   r	   r	   r
   r   G   r2   zPropertyNewGetter.spamc                 C   r1   )N   r	   r   r	   r	   r
   r   K   r2   N)r   r   r   r   r   r%   r	   r	   r	   r
   r4   F   
    
r4   c                   @   s  e Zd Zdd Zdd Zeejj	dkddd Z
eejj	dkdd	d
 Zdd Zeejj	dkddd Zdd Zeejj	dkddd Zeejj	dkddd Zejdd Zeejj	dkddd Zeejj	dkddd Zdd Zdd ZdS ) PropertyTestsc                 C   s   t  }| |jd | |jd d|_| |jd | |jd t|d | t|d  | t|d  d|_| |jd | |jd d S )Nr   
   r   r      )r   assertEqualr   r   delattrZ
assertTruehasattrr   baser	   r	   r
   !test_property_decorator_baseclassQ   s   
z/PropertyTests.test_property_decorator_baseclassc                 C   s<   t  }| tt|d | tt|dd  | tt|d d S )Nr   )r"   assertRaisesr   getattrr   setattrr   r<   r   subr	   r	   r
    test_property_decorator_subclass`   s   z.PropertyTests.test_property_decorator_subclass   )Docstrings are omitted with -O2 and abovec                 C      t  }| |jjjd d S )NzSubClass.getter)r"   r;   	__class__r   __doc__rD   r	   r	   r
   $test_property_decorator_subclass_docg      z2PropertyTests.test_property_decorator_subclass_docc                 C   rI   )NzBaseClass.getter)r   r;   rJ   r   rK   r>   r	   r	   r
   %test_property_decorator_baseclass_docm   rM   z3PropertyTests.test_property_decorator_baseclass_docc                 C   s4   t  }t }| |jjjd | |jjjd d S )Nr*   )r&   r.   r;   rJ   r   rK   )r   r?   rE   r	   r	   r
   test_property_decorator_docs   s   z)PropertyTests.test_property_decorator_docc                 C   sP   t  }| |jd | |jjjd t }| |jd | |jjjd d S )Nr   znew docstringr6   )r0   r;   r   rJ   rK   r4   )r   ZnewgettersubZ	newgetterr	   r	   r
   !test_property_getter_doc_overridey   s   z/PropertyTests.test_property_getter_doc_overridec                    s   ddg dgddfD ]G fdddt }| |jjt q	G dd	 d	t  | t G  fd
ddt }|jj W d    d S 1 sGw   Y  d S )NTFr'    1c                       s"   e Zd Zdd Z e_eeZdS )EPropertyTests.test_property___isabstractmethod__descriptor.<locals>.Cc                 S      d S r   r	   r   r	   r	   r
   foo      IPropertyTests.test_property___isabstractmethod__descriptor.<locals>.C.fooNr   r   r   rU   __isabstractmethod__r   r	   )valr	   r
   C   s    r[   c                   @   s   e Zd Zdd ZeZdS )zKPropertyTests.test_property___isabstractmethod__descriptor.<locals>.NotBoolc                 S   s   t  r   )
ValueErrorr   r	   r	   r
   __bool__   r)   zTPropertyTests.test_property___isabstractmethod__descriptor.<locals>.NotBool.__bool__N)r   r   r   r]   __len__r	   r	   r	   r
   NotBool   s    r_   c                       s$   e Zd Zdd Z  e_eeZdS )rS   c                 S   rT   r   r	   r   r	   r	   r
   rU      rV   rW   NrX   r	   )r_   r	   r
   r[      s    )objectZassertIsrU   rY   boolrA   r\   )r   r[   r	   )r_   rZ   r
   ,test_property___isabstractmethod__descriptor   s   
"z:PropertyTests.test_property___isabstractmethod__descriptorc                 C   s0   t dd}| |jd d|_| |jd d S )NZbasicr+   Zextended)r   r;   rK   )r   pr	   r	   r
   "test_property_builtin_doc_writable   s   
z0PropertyTests.test_property_builtin_doc_writablec                 C   sH   G dd dt }| }| |jjjd d|jj_| |jjjd d S )Nc                   @      e Zd Zedd ZdS )zOPropertyTests.test_property_decorator_doc_writable.<locals>.PropertyWritableDocc                 S   r1   Neggsr	   r   r	   r	   r
   r      r2   zTPropertyTests.test_property_decorator_doc_writable.<locals>.PropertyWritableDoc.spamN)r   r   r   r   r   r	   r	   r	   r
   PropertyWritableDoc   s    rh   ZEggsZSpam)r`   r;   rJ   r   rK   )r   rh   rE   r	   r	   r
   $test_property_decorator_doc_writable   s
   
z2PropertyTests.test_property_decorator_doc_writablec                 C   sX   t td}tdddd}| }tdD ]
}|dddd q| j| | ddd	 d S )
Ngettotalrefcountfgetfsetfdelr,   d   r   r9   )Zdelta)r   Zget_attributesysr   ranger   ZassertAlmostEqual)r   rj   Z	fake_propZrefs_beforeir	   r	   r
   test_refleaks_in___init__   s   z'PropertyTests.test_refleaks_in___init__c                 C       G dd d}|  |jd d S )Nc                   @   s   e Zd Zeedd ZdS )z,PropertyTests.test_class_property.<locals>.Ac                 S   s
   d| j  S )NzA doc for %r)r   clsr	   r	   r
   rK      s   
z4PropertyTests.test_class_property.<locals>.A.__doc__Nr   r   r   classmethodr   rK   r	   r	   r	   r
   A   s    rx   zA doc for 'A'r;   rK   r   rx   r	   r	   r
   test_class_property   s   z!PropertyTests.test_class_propertyc                 C   rs   )Nc                   @   s   e Zd Z	 eedd ZdS )z5PropertyTests.test_class_property_override.<locals>.Ac                 S      dS )NSecondr	   rt   r	   r	   r
   rK      s   z=PropertyTests.test_class_property_override.<locals>.A.__doc__Nrv   r	   r	   r	   r
   rx      s
    rx   r}   ry   rz   r	   r	   r
   test_class_property_override   s   z*PropertyTests.test_class_property_overridec              	   C   sX   t  }dD ]$}| td| d |jdg|   W d    n1 s$w   Y  qd S )N)r   r'      z3^__set_name__\(\) takes 2 positional arguments but z were given$r   )r   assertRaisesRegex	TypeError__set_name__)r   rc   rq   r	   r	   r
   %test_property_set_name_incorrect_args   s   
z3PropertyTests.test_property_set_name_incorrect_argsc                 C   sF   G dd dt }G dd d}t |}||d |dd }d S )Nc                   @   s   e Zd Zdd ZdS )zEPropertyTests.test_property_setname_on_property_subclass.<locals>.proc                 _   r|   )NZabcdefr	   )typargskwargsr	   r	   r
   __new__   rV   zMPropertyTests.test_property_setname_on_property_subclass.<locals>.pro.__new__N)r   r   r   r   r	   r	   r	   r
   pro   s    r   c                   @   r   )zCPropertyTests.test_property_setname_on_property_subclass.<locals>.ANr   r	   r	   r	   r
   rx      r   rx   r'   c                 S   r|   r5   r	   r   r	   r	   r
   <lambda>   s    zJPropertyTests.test_property_setname_on_property_subclass.<locals>.<lambda>)r   r   r   r%   )r   r   rx   rc   Znpr	   r	   r
   *test_property_setname_on_property_subclass   s
   
z8PropertyTests.test_property_setname_on_property_subclassN)r   r   r   r@   rF   unittestskipIfro   flagsoptimizerL   rN   rO   rP   rb   rd   ri   r   Zrefcount_testrr   r{   r~   r   r   r	   r	   r	   r
   r8   P   sJ    







	
r8   c                   @   r   )PropertySubNr   r	   r	   r	   r
   r      r   r   c                   @   s   e Zd Z	 dZdS )PropertySubSlotsr	   N)r   r   r   	__slots__r	   r	   r	   r
   r      s    r   c                   @   sh   e Zd Zdd Zeejjdkddd Z	eejjdkddd Z
eejjdkdd	d
 ZdS )PropertySubclassTestsc                 C   s0   zG dd dt }W td ty   Y d S w )Nc                   @   re   )zFPropertySubclassTests.test_slots_docstring_copy_exception.<locals>.Fooc                 S   r1   r5   r	   r   r	   r	   r
   r      r2   zKPropertySubclassTests.test_slots_docstring_copy_exception.<locals>.Foo.spamN)r   r   r   r   r   r	   r	   r	   r
   Foo       r   zAttributeError not raised)r`   AttributeError	Exceptionr   r   r	   r	   r
   #test_slots_docstring_copy_exception   s   z9PropertySubclassTests.test_slots_docstring_copy_exceptionrG   rH   c                 C   s$   G dd dt }| |jjd d S )Nc                   @   re   )z6PropertySubclassTests.test_docstring_copy.<locals>.Fooc                 S   r1   r5   r	   r   r	   r	   r
   r     r2   z;PropertySubclassTests.test_docstring_copy.<locals>.Foo.spamNr   r   r   r   r   r	   r	   r	   r
   r     r   r   !spam wrapped in property subclassr`   r;   r   rK   r   r	   r	   r
   test_docstring_copy  s
   z)PropertySubclassTests.test_docstring_copyc                    s   G dd dt    }| |jd d|_| |jd |  jjd G  fddd }| }| |jd d|_| |jd	 | |jjd d S )
Nc                   @   s.   e Zd Zdd Zedd Zejdd ZdS )zOPropertySubclassTests.test_property_setter_copies_getter_docstring.<locals>.Fooc                 S   r   r5   r   r   r	   r	   r
   r     s   
 zXPropertySubclassTests.test_property_setter_copies_getter_docstring.<locals>.Foo.__init__c                 S   r   r   r   r   r	   r	   r
   r     r   zTPropertySubclassTests.test_property_setter_copies_getter_docstring.<locals>.Foo.spamc                 S   s   	 || _ d S r   r   r   r	   r	   r
   r     r#   N)r   r   r   r   r   r   r    r	   r	   r	   r
   r     s    
r   r'   rG   r   c                          e Zd Z jjdd ZdS )zRPropertySubclassTests.test_property_setter_copies_getter_docstring.<locals>.FooSubc                 S   s   	 d| _ d S rf   r   r   r	   r	   r
   r   "  r#   zWPropertySubclassTests.test_property_setter_copies_getter_docstring.<locals>.FooSub.spamN)r   r   r   r   r    r	   r   r	   r
   FooSub!  r/   r      rg   r   )r   rU   r   Zfoosubr	   r   r
   ,test_property_setter_copies_getter_docstring  s$   
zBPropertySubclassTests.test_property_setter_copies_getter_docstringc                    sX   G dd dt }| |jjd G dd dt  G  fddd }| |jjd d S )Nc                   @   r3   )zIPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.Fooc                 S   r1   r5   r	   r   r	   r	   r
   r   3  r2   zNPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.Foo.spamc                 S   r1   NrG   r	   r   r	   r	   r
   r   7  r2   N)r   r   r   r   r   r%   r	   r	   r	   r
   r   2  r7   r   za new docstringc                   @   re   )zMPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.FooBasec                 S   r1   r5   r	   r   r	   r	   r
   r   =  r2   zRPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.FooBase.spamNr   r	   r	   r	   r
   FooBase<  r   r   c                       r   )zJPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.Foo2c                 S   r1   r   r	   r   r	   r	   r
   r   B  r2   zOPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.Foo2.spamN)r   r   r   r   r%   r	   r   r	   r
   Foo2A  r/   r   r   )r   r   r   r	   r   r
   &test_property_new_getter_new_docstring.  s
   	z<PropertySubclassTests.test_property_new_getter_new_docstringN)r   r   r   r   r   r   ro   r   r   r   r   r   r	   r	   r	   r
   r      s    


r   c                   @   sD   e Zd ZdZdZdZdd Zedd Zdd Z	dd	 Z
d
d ZdS )_PropertyUnreachableAttributeNc                 C   s   | j |S r   )
msg_formatformat)r   msgr	   r	   r
   _format_exc_msgN  s   z-_PropertyUnreachableAttribute._format_exc_msgc                 C   s   |   | _d S r   )ru   objrt   r	   r	   r
   
setUpClassQ  s   z(_PropertyUnreachableAttribute.setUpClassc                 C   s@   |  t| d | jj W d    d S 1 sw   Y  d S )Nzunreadable attributer   r   r   r   rU   r   r	   r	   r
   test_get_propertyU     
"z/_PropertyUnreachableAttribute.test_get_propertyc                 C   s@   |  t| d d | j_W d    d S 1 sw   Y  d S )Nzcan't set attributer   r   r	   r	   r
   test_set_propertyY  r   z/_PropertyUnreachableAttribute.test_set_propertyc                 C   s>   |  t| d | j`W d    d S 1 sw   Y  d S )Nzcan't delete attributer   r   r	   r	   r
   test_del_property]  s   "z/_PropertyUnreachableAttribute.test_del_property)r   r   r   r   r   ru   r   rw   r   r   r   r   r	   r	   r	   r
   r   I  s    
r   c                   @   s   e Zd ZdZG dd dZdS )$PropertyUnreachableAttributeWithNamez
^{} 'foo'$c                   @   s   e Zd Ze ZdS )z(PropertyUnreachableAttributeWithName.clsN)r   r   r   r   rU   r	   r	   r	   r
   ru   e  s    
ru   N)r   r   r   r   ru   r	   r	   r	   r
   r   b  s    r   c                   @   s&   e Zd ZdZG dd dZe e_dS )"PropertyUnreachableAttributeNoNamez^{}$c                   @   r   )z&PropertyUnreachableAttributeNoName.clsNr   r	   r	   r	   r
   ru   l  r   ru   N)r   r   r   r   ru   r   rU   r	   r	   r	   r
   r   i  s    r   __main__)ro   r   testr   r   r   r   r   r   r`   r   r"   r&   r.   r0   r4   ZTestCaser8   r   r   r   r   r   r   r   r   mainr	   r	   r	   r
   <module>   s0   
 V	