Your IP : 216.73.216.213


Current Path : /opt/alt/python34/lib64/python3.4/test/__pycache__/
Upload File :
Current File : //opt/alt/python34/lib64/python3.4/test/__pycache__/test_weakref.cpython-34.pyo

�
g f��@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
dadZGdd�d�Z
Gdd�d�Zdd	�Zd
d�ZGdd
�d
�ZGdd�d�ZGdd�dej�ZGdd�de�ZGdd�de�ZGdd�dej�ZGdd�de�ZddlmZGdd�dej�ZGdd�dej�ZGdd �d ej�Zd!Zied"6Zd#d$�Z e!d%kr�e �ndS)&�N)�support�
script_helperZfoobarc@seZdZdd�ZdS)�CcCsdS)N�)�selfrr�6/opt/alt/python34/lib64/python3.4/test/test_weakref.py�methodszC.methodN)�__name__�
__module__�__qualname__rrrrrrsrc@s"eZdZdZdd�ZdS)�CallableNcCs
||_dS)N)�bar)r�xrrr�__call__szCallable.__call__)r	r
rr
rrrrrrsrcCsdd�}|S)NcSsdS)Nrrrrr�f szcreate_function.<locals>.fr)rrrr�create_functionsrcCs
t�jS)N)rrrrrr�create_bound_method#src@sdeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�ObjectcCs
||_dS)N)�arg)rrrrr�__init__(szObject.__init__cCsd|jS)Nz<Object %r>)r)rrrr�__repr__*szObject.__repr__cCs#t|t�r|j|jkStS)N)�
isinstancerr�NotImplemented)r�otherrrr�__eq__,sz
Object.__eq__cCs#t|t�r|j|jkStS)N)rrrr)rrrrr�__lt__0sz
Object.__lt__cCs
t|j�S)N)�hashr)rrrr�__hash__4szObject.__hash__cCsdS)N�r)rrrr�some_method6szObject.some_methodcCsdS)N�r)rrrr�other_method8szObject.other_methodN)
r	r
rrrrrrrr!rrrrr'src@seZdZdd�ZdS)�RefCyclecCs
||_dS)N)�cycle)rrrrr=szRefCycle.__init__N)r	r
rrrrrrr"<sr"c@s(eZdZdd�Zdd�ZdS)�TestBasecCs
d|_dS)Nr)�cbcalled)rrrr�setUpCszTestBase.setUpcCs|jd7_dS)N�)r%)r�refrrr�callbackFszTestBase.callbackN)r	r
rr&r)rrrrr$Asr$c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&dIdJ�Z'dKdL�Z(dMdN�Z)dOdP�Z*dQdR�Z+dSdT�Z,dUdV�Z-dWdX�Z.dYdZ�Z/d[S)\�ReferencesTestCasecCsZ|jt�|jt�|jt�t�}tj|�}t|�~t|�dS)N)�check_basic_refrrr�weakrefr(�repr)r�o�wrrrr�test_basic_refLs


	
z!ReferencesTestCase.test_basic_refcCs+|jt�|jt�|jt�dS)N)�check_basic_callbackrrr)rrrr�test_basic_callbackZs

z&ReferencesTestCase.test_basic_callbackcCsvt�}tj||j�}tj||j�}~|j|�d�|j|�d�|j|jdd�dS)Nz$expected reference to be invalidated�z-callback not called the right number of times)rr,r(r)�assertIsNone�assertEqualr%)rr.�ref1�ref2rrr�test_multiple_callbacks_s	z*ReferencesTestCase.test_multiple_callbackscCsF|dd�}t�}tj||�|_tj||�}~dS)NcSs|j�dS)N)r()�objectrrrrr)tszDReferencesTestCase.test_multiple_selfref_callbacks.<locals>.callback)rr,r()rr)�cr6rrr�test_multiple_selfref_callbacksis
	z2ReferencesTestCase.test_multiple_selfref_callbackscCs�t�}d|_tj||j�}tj||j�}~dd�}|jt||�|jt||�|jtttjt���|j|j	d�dS)Nr'cSs|jdS)N)r
)�proxyrrr�check�sz0ReferencesTestCase.test_proxy_ref.<locals>.checkr3)
rr
r,r<r)�assertRaises�ReferenceError�boolr5r%)rr.r6r7r=rrr�test_proxy_ref{s		z!ReferencesTestCase.test_proxy_refcCsK|�}tj|�}|j|�d�|�}|j||d�dS)Nz,weak reference to live object should be livez-<ref>() should return original object if live)r,r(�assertIsNotNone�assertIs)r�factoryr.r(�o2rrrr+�s		z"ReferencesTestCase.check_basic_refcCsWd|_|�}tj||j�}~|j|jdd�|j|�d�dS)Nrr'z(callback did not properly set 'cbcalled'z3ref2 should be dead after deleting object reference)r%r,r(r)r5r4)rrDr.r(rrrr1�s		z'ReferencesTestCase.check_basic_callbackcCs�t�}tj|�}tj|�}tj|�}|j||d�t�}tj|�}tj|�}tj|�}|j||d�|jtj|�dd�~|jtj|�dd�dS)Nz1reference object w/out callback should be re-usedr3zwrong weak ref count for objectr'z4wrong weak ref count for object after deleting proxy)rr,r(r<rCr5�getweakrefcount)rr.r6r<r7rrr�test_ref_reuse�s"		z!ReferencesTestCase.test_ref_reusecCsMt�}tj|�}tj|�}tj|�}|j||d�dS)Nz4proxy object w/out callback should have been re-used)rr,r<r(rC)rr.�proxy1r(�proxy2rrr�test_proxy_reuse�s	z#ReferencesTestCase.test_proxy_reusecCs�t�}|j|tj|��tj�}tj|�}|j|d�|jd�|jt	|�d�|j
|d�ddg|dd�<|jt	|�d�|jt	|�d�|jd|d�d|d<|j|dd�|j|dd�tj|�}tj|�}|j||�tjtd	��}tj|�}|j|dd�|dd��|j|dd�|dd��|j|dd�|dd��|j|dd�|dd��dS)
Nz(proxy for empty UserList should be false�r'z+proxy for non-empty UserList should be truer3�z,proxy didn't support __contains__() properlyr �
)
r�check_proxyr,r<�collections�UserList�assertFalse�appendr5�len�
assertTrue�assertIn�range)rr.�L�pZL2�p2ZL3Zp3rrr�test_basic_proxy�s0	

$$$z#ReferencesTestCase.test_basic_proxycCsaGdd�dt�}|�}|jdttj|���|jttj|��d�dS)Nc@s(eZdZdd�Zdd�ZdS)z0ReferencesTestCase.test_proxy_unicode.<locals>.CcSsdS)N�stringr)rrrr�__str__�sz8ReferencesTestCase.test_proxy_unicode.<locals>.C.__str__cSsdS)Nsbytesr)rrrr�	__bytes__�sz:ReferencesTestCase.test_proxy_unicode.<locals>.C.__bytes__N)r	r
rr\r]rrrrr�srr]sbytes)r9rU�dirr,r<r5�bytes)rr�instancerrr�test_proxy_unicode�s	z%ReferencesTestCase.test_proxy_unicodecCsHGdd�d�}|�}tj|�}|jtj|�d�dS)Nc@seZdZdd�ZdS)z.ReferencesTestCase.test_proxy_index.<locals>.CcSsdS)NrMr)rrrr�	__index__�sz8ReferencesTestCase.test_proxy_index.<locals>.C.__index__N)r	r
rrbrrrrr�srrM)r,r<r5�operator�index)rrr.rXrrr�test_proxy_index�s	z#ReferencesTestCase.test_proxy_indexcCs]Gdd�d�}|�}tj|�}|j|dd�|d}|j|d�dS)Nc@s(eZdZdd�Zdd�ZdS)z,ReferencesTestCase.test_proxy_div.<locals>.CcSsdS)N�*r)rrrrr�__floordiv__�sz9ReferencesTestCase.test_proxy_div.<locals>.C.__floordiv__cSsdS)N�r)rrrrr�
__ifloordiv__�sz:ReferencesTestCase.test_proxy_div.<locals>.C.__ifloordiv__N)r	r
rrgrirrrrr�srr rfrh)r,r<r5)rrr.rXrrr�test_proxy_div�s	
z!ReferencesTestCase.test_proxy_divcCs|jtj�dS)N)�check_shared_without_callbackr,r()rrrr� test_shared_ref_without_callback�sz3ReferencesTestCase.test_shared_ref_without_callbackcCs|jtj�dS)N)rkr,r<)rrrr�"test_shared_proxy_without_callbacksz5ReferencesTestCase.test_shared_proxy_without_callbackcCs�td�}||d�}||d�}|j||d�~~||�}||d�}|j||d�~~||�}||�}|j||d�~~||d�}||�}|j||d�dS)Nr'z%both callbacks were None in the C APIz&callbacks were NULL, None in the C APIz%both callbacks were NULL in the C APIz&callbacks were None, NULL in the C API)rrC)r�makerefr.Zp1rYrrrrks z0ReferencesTestCase.check_shared_without_callbackcCs�t�}tj|�}|j||�|jt|�tjd�|d�|j|jdd�|dd�|j|jdd�|j	t
|�|j	t
|ddd�dS)	Nzproxy is not of callable typez	twinkies!z1call through proxy not passed through to originalrzSplat.r'r3rL)rr,r<rNrC�type�CallableProxyTyper5r
r>�	TypeError)rr.r6rrr�test_callable_proxys	

z&ReferencesTestCase.test_callable_proxycCs�d|_|j|jdd�d|_|j|jdd�|`|jt|d�d�d|_|j|jdd�d|_|j|jdd�|`|jt|d�d	�dS)
Nr'z)proxy does not reflect attribute additionr3z-proxy does not reflect attribute modification�fooz(proxy does not reflect attribute removalz4object does not reflect attribute addition via proxyz8object does not reflect attribute modification via proxyz3object does not reflect attribute removal via proxy)rsr5rQ�hasattr)rr.r<rrrrN+s$				zReferencesTestCase.check_proxycCsIGdd�d�}|�}tj|�}|d=|j|jd�dS)Nc@s"eZdZdZdd�ZdS)z3ReferencesTestCase.test_proxy_deletion.<locals>.FooNcSs
||_dS)N)�result)rZaccessorrrr�__delitem__Dsz?ReferencesTestCase.test_proxy_deletion.<locals>.Foo.__delitem__)r	r
rrurvrrrr�FooBsrwr)r,r<r5ru)rrw�grrrr�test_proxy_deletion@s
	z&ReferencesTestCase.test_proxy_deletioncCsHGdd�dt�}|�}|jttj|��t|��dS)Nc@seZdZdS)z0ReferencesTestCase.test_proxy_bool.<locals>.ListN)r	r
rrrrr�ListMsrz)�listr5r@r,r<)rrzZlystrrr�test_proxy_boolKs	z"ReferencesTestCase.test_proxy_boolcCs�t�}tj|�}tj||j�}|jtj|�dd�tj|�}tj||j�}|jtj|�dd�~~~~|jtj|�dd�|jtjd�dd�dS)Nr3z*got wrong number of weak reference objectsrrzAweak reference objects not unlinked from referent when discarded.r'z2got wrong number of weak reference objects for int)rr,r(r)r5rFr<)rr.r6r7rHrIrrr�test_getweakrefcountQs	z'ReferencesTestCase.test_getweakrefcountcCs�t�}tj||j�}tj||j�}~|jtj|�|gd�t�}tj||j�}tj||j�}~|jtj|�|gd�~|jtj|�gd�|jtjd�gd�dS)Nzlist of refs does not matchzlist of refs not clearedr'z#list of refs does not match for int)rr,r(r)r5�getweakrefs)rr.r6r7rrr�test_getweakrefsfs"		z#ReferencesTestCase.test_getweakrefscCs]Gdd�dt�}|d�}tj|�}|j|dd�|jd|d�dS)Nc@seZdZdS)z6ReferencesTestCase.test_newstyle_number_ops.<locals>.FN)r	r
rrrrr�F~sr�g@g�?g@)�floatr,r<r5)rr�rrXrrr�test_newstyle_number_ops}s
z+ReferencesTestCase.test_newstyle_number_opscs�Gdd�dt��i��fdd�����fdd�}y|�Wn�k
reYnX|jd�y|�Wn�k
r�YnX|jd�dS)Nc@seZdZdS)z?ReferencesTestCase.test_callbacks_protected.<locals>.BogusErrorN)r	r
rrrrr�
BogusError�sr�cs�|=dS)Nr)�k)�datarr�remove�sz;ReferencesTestCase.test_callbacks_protected.<locals>.removecs,dd�}d�tj|��<��dS)NcSsfS)Nrrrrr�<lambda>�szRReferencesTestCase.test_callbacks_protected.<locals>.encapsulate.<locals>.<lambda>)r,r()r)r�r�r�rr�encapsulate�sz@ReferencesTestCase.test_callbacks_protected.<locals>.encapsulatezexception not properly restored)�	ExceptionZfail)rr�r)r�r�r�r�test_callbacks_protected�s


z+ReferencesTestCase.test_callbacks_protectedcs�ddl�Gdd�dt�}|�}tj|�fdd��}~~|�}|�|_tj|j�fdd��}|�}||_~~dS)Nrc@seZdZdS)z0ReferencesTestCase.test_sf_bug_840829.<locals>.CN)r	r
rrrrrr�srcs
�j�S)N)�collect)�ignore)�gcrrr��sz7ReferencesTestCase.test_sf_bug_840829.<locals>.<lambda>cs
�j�S)N)r�)r�)r�rrr��s)r�r9r,r(�i�c1)rrr:r/r��c2r)r�r�test_sf_bug_840829�s		!			z%ReferencesTestCase.test_sf_bug_840829cCsyddl}Gdd�dt�}Gdd�dt�}|�}||_tj||j�|_~~~|j�dS)Nrc@seZdZdS)z6ReferencesTestCase.test_callback_in_cycle_1.<locals>.JN)r	r
rrrrr�J�sr�c@seZdZdd�ZdS)z7ReferencesTestCase.test_callback_in_cycle_1.<locals>.IIcSs|jdS)N)r�)rr�rrr�	acallback�szAReferencesTestCase.test_callback_in_cycle_1.<locals>.II.acallbackN)r	r
rr�rrrr�II�sr�)r�r9r�r,r(r�r/r�)rr�r�r��Irrr�test_callback_in_cycle_1�s			z+ReferencesTestCase.test_callback_in_cycle_1cCsvddl}Gdd�dt�}Gdd�d�}|�}||_tj||j�|_~~~|j�dS)Nrc@seZdZdS)z6ReferencesTestCase.test_callback_in_cycle_2.<locals>.JN)r	r
rrrrrr��sr�c@seZdZdd�ZdS)z7ReferencesTestCase.test_callback_in_cycle_2.<locals>.IIcSs|jdS)N)r�)rr�rrrr�szAReferencesTestCase.test_callback_in_cycle_2.<locals>.II.acallbackN)r	r
rr�rrrrr�sr�)r�r9r�r,r(r�r/r�)rr�r�r�r�rrr�test_callback_in_cycle_2�s			z+ReferencesTestCase.test_callback_in_cycle_2cCspddl}Gdd�d�}|�|�}}||_||_tj||j�|_~~|j�dS)Nrc@seZdZdd�ZdS)z6ReferencesTestCase.test_callback_in_cycle_3.<locals>.CcSs|j|j|jdS)N)�mer�r/)rr�rrr�cbsz9ReferencesTestCase.test_callback_in_cycle_3.<locals>.C.cbN)r	r
rr�rrrrrsr)r�r�r�r,r(r�r/r�)rr�rr�r�rrr�test_callback_in_cycle_3s		z+ReferencesTestCase.test_callback_in_cycle_3cCs�ddl}Gdd�dt�}Gdd�d�}|�|�}}||_||_tj||j�|_~~~~|j�dS)Nrc@seZdZdd�ZdS)z6ReferencesTestCase.test_callback_in_cycle_4.<locals>.CcSs|j|j|jdS)N)r�r�r/)rr�rrrr�.sz9ReferencesTestCase.test_callback_in_cycle_4.<locals>.C.cbN)r	r
rr�rrrrr-src@seZdZdS)z6ReferencesTestCase.test_callback_in_cycle_4.<locals>.DN)r	r
rrrrr�D3sr�)	r�r9r�r�r,r(r�r/r�)rr�rr�r�r�rrr�test_callback_in_cycle_4#s			z+ReferencesTestCase.test_callback_in_cycle_4cs3ddl}g�G�fdd�dt�}|d�|d�}}||_||_tj||j�|_tj||j�|_�fdd�}tj||�}~~~|j�g�|j�t	t
d�s|j�d	g�|j|�d�n�dd�=|j�|j�g�dS)
Nrcs.eZdZdd�Z�fdd�ZdS)zAReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.CcSs
||_dS)N)Z	attribute)r�valuerrrrMszJReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C.__init__cs�j|j�dS)N)rRr:)rr�)�alistrrr�PszKReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C.acallbackN)r	r
rrr�r)r�rrrLsrr'r3cs�jd�dS)NzC went away)rR)r�)r�rr�C_went_awayYszKReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C_went_awayZ	getcountszC went away)r�r9r:r,r(r�r/r5r�rt�sys)rr�rr�r�r�r/r)r�r�#test_callback_in_cycle_resurrection?s&			


z6ReferencesTestCase.test_callback_in_cycle_resurrectioncs7ddl}g��fdd�}G�fdd�dt�}|�|�}}||_||_|j}tj||�|_tj||j�|_tj||�}|j|�|�~~~~|j�g�|j	�|j�dg�|j|�d��dd�=|j	�|j�g�dS)Nrcs�jd�dS)Nzsafe_callback called)rR)r�)r�rr�
safe_callbacksszDReferencesTestCase.test_callbacks_on_callback.<locals>.safe_callbackcs"eZdZ�fdd�ZdS)z8ReferencesTestCase.test_callbacks_on_callback.<locals>.Ccs�jd�dS)Nz	cb called)rR)rr�)r�rrr�wsz;ReferencesTestCase.test_callbacks_on_callback.<locals>.C.cbN)r	r
rr�r)r�rrrvsrzsafe_callback called)
r�r9rr�r,r(r/rCr5r�)rr�r�rr:�dr)Zexternal_wrr)r�r�test_callbacks_on_callbackns(				


z-ReferencesTestCase.test_callbacks_on_callbackcCs|jtj�dS)N)�check_gc_during_creationr,r()rrrr�test_gc_during_ref_creation�sz.ReferencesTestCase.test_gc_during_ref_creationcCs|jtj�dS)N)r�r,r<)rrrr�test_gc_during_proxy_creation�sz0ReferencesTestCase.test_gc_during_proxy_creationcCs�tj�}tjddd�tj�Gdd�d�}dd�}|�}|�}||_||�|_z|�}tj||�Wdtj|�XdS)Nr'c@seZdZdS)z6ReferencesTestCase.check_gc_during_creation.<locals>.AN)r	r
rrrrr�A�sr�cWsdS)Nr)�argsrrrr)�sz=ReferencesTestCase.check_gc_during_creation.<locals>.callback)r��
get_threshold�
set_thresholdr��ar/r,r()rrnZ
thresholdsr�r)Z
referencedr�rrrr��s
				z+ReferencesTestCase.check_gc_during_creationcCs#Gdd�dt�}|�}dS)Nc@seZdZdd�ZdS)z>ReferencesTestCase.test_ref_created_during_del.<locals>.TargetcSstj|�adS)N)r,r(�ref_from_del)rrrr�__del__�szFReferencesTestCase.test_ref_created_during_del.<locals>.Target.__del__N)r	r
rr�rrrr�Target�sr�)r9)rr��wrrr�test_ref_created_during_del�sz.ReferencesTestCase.test_ref_created_during_delcCs?tjt�}|jt|jddddd�tj�dS)Nr)r,r(r�r>rqrr�r�)r�rrrr�	test_init�s"zReferencesTestCase.test_initcCsxGdd�dt�}g}tjt�tj||j�}d}tj�|j|�d�|j||g�dS)Nc@seZdZdS)z*ReferencesTestCase.test_classes.<locals>.AN)r	r
rrrrrr��sr�)r9r,r(�intrRr�r�r5)rr��lr�rrr�test_classes�s

zReferencesTestCase.test_classesc	Cs�td�}td�}td�}tj|�}tj|�}tj|�}tj|�}|j||k�|j||k�|j||k�|j||k�|j||k�|j||k�~~~tj�x*|||fD]}|j|�d�q�W|j||k�|j||k�|j||k�|j||k�|j||k||k�|j||k||k	�dS)Nr'r3)	rr,r(rTrQr�r�rCr5)	rr�y�zr��br:r�r�rrr�
test_equality�s.	
z ReferencesTestCase.test_equalitycCs�tjtjtjtjg}td�}td�}tj|�}tj|�}x$|D]}|jt	|||�q[W~~t
j�x$|D]}|jt	|||�q�WdS)Nr')rc�lt�gt�le�gerr,r(r>rqr�r�)rZopsrr�r�r��oprrr�
test_ordering�s


z ReferencesTestCase.test_orderingcCs�td�}td�}tj|�}tj|�}|jt|�td��~~tj�|jt|�td��|jtt|�dS)Nrf)	rr,r(r5rr�r�r>rq)rrr�r�r�rrr�test_hashings
zReferencesTestCase.test_hashingcCskGdd�d�}tj�}|d�}}x(td�D]}||�||<}q<W~tj�dS)Nc@seZdZdd�ZdS)z1ReferencesTestCase.test_trashcan_16602.<locals>.CcsD|s
dStj|���fdd�}tj||�|_dS)Ncs
��}dS)Nr)�wparentr.)�wselfrrr�szFReferencesTestCase.test_trashcan_16602.<locals>.C.__init__.<locals>.cb)r,r(r�)r�parentr�r)r�rrs
z:ReferencesTestCase.test_trashcan_16602.<locals>.C.__init__N)r	r
rrrrrrrsr�d)r,�WeakKeyDictionaryrVr�r�)rrr��rootr:�nrrr�test_trashcan_16602s	z&ReferencesTestCase.test_trashcan_16602cCs`td�}dd�}tj||�}|j|j|�tj|�}|j|j�dS)Nr'cSsdS)Nr)r(rrrr�)sz<ReferencesTestCase.test_callback_attribute.<locals>.<lambda>)rr,r(rC�__callback__r4)rrr)r6r7rrr�test_callback_attribute'sz*ReferencesTestCase.test_callback_attributecCsRtd�}tj||j�}|j|j�~tj�|j|j�dS)Nr')	rr,r(r)rBr�r�
gc_collectr4)rrr(rrr�&test_callback_attribute_after_deletion0s
z9ReferencesTestCase.test_callback_attribute_after_deletionc	CsStd�}dd�}tj||�}|jt��dd�|_WdQXdS)Nr'cSsdS)Nr)r(rrrr�:sz@ReferencesTestCase.test_set_callback_attribute.<locals>.<lambda>cSsdS)Nr)r(rrrr�=s)rr,r(r>�AttributeErrorr�)rrr)r6rrr�test_set_callback_attribute8s
z.ReferencesTestCase.test_set_callback_attributecCsKGdd�dt�}|d�}tj|dd��}~tj�dS)Nc@seZdZdd�ZdS)z;ReferencesTestCase.test_callback_gcs.<locals>.ObjectWithDelcSsdS)Nr)rrrrr�AszCReferencesTestCase.test_callback_gcs.<locals>.ObjectWithDel.__del__N)r	r
rr�rrrr�
ObjectWithDel@sr�r'cSs
tj�S)N)rr�)r(rrrr�Csz6ReferencesTestCase.test_callback_gcs.<locals>.<lambda>)rr,r(rr�)rr�rr6rrr�test_callback_gcs?s
z$ReferencesTestCase.test_callback_gcsN)0r	r
rr0r2r8r;rAr+r1rGrJrZrarerjrlrmrkrrrNryr|r}rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr*JsZ
	
((/&!	r*c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�SubclassableWeakrefTestCasecCs�Gdd�dtj�}td�}||dd�}|j|�|�|j|j�|j|jd�~|j|��|j|j�dS)Ncs:eZdZdd�fdd�Z�fdd�Z�S)z=SubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRefNrfcs ||_t�j||�dS)N)r��superr)r�obr)r�)�	__class__rrrLs	zFSubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRef.__init__csd|_t�j�S)NT)�calledr�r)r)r�rrrOs	zFSubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRef.__call__)r	r
rrrrr)r�r�MyRefKsr�rsr��)	r,r(rrCrTr�r5r�r4)rr�r.Zmrrrr�test_subclass_refsJsz.SubclassableWeakrefTestCase.test_subclass_refscCsGdd�dtj�}td�}||�}tj|�}|j||�|jtj|�||g�|jtj|�d�||�}|jtj|�d�tj|�}|jt|�d�|j||d�|j	||dd��|j	||dd��dS)Nc@seZdZdS)zXSubclassableWeakrefTestCase.test_subclass_refs_dont_replace_standard_refs.<locals>.MyRefN)r	r
rrrrrr�\sr�rfr3rLrr')
r,r(r�assertIsNotr5r~rFrSrCrU)rr�r.�r1�r2Zr3�refsrrr�-test_subclass_refs_dont_replace_standard_refs[szISubclassableWeakrefTestCase.test_subclass_refs_dont_replace_standard_refscCs�Gdd�dtj�}td�}||t�}||t�}|j||�tj|�}|j||�|j||�dS)Nc@seZdZdS)zUSubclassableWeakrefTestCase.test_subclass_refs_dont_conflate_callbacks.<locals>.MyRefN)r	r
rrrrrr�msr�rf)r,r(r�id�strr�r~rU)rr�r.r�r�r�rrr�*test_subclass_refs_dont_conflate_callbackslszFSubclassableWeakrefTestCase.test_subclass_refs_dont_conflate_callbackscCs�Gdd�dtj�}td�}||ddd�}|j|jd�|j|jd�|j|j�d�|jt|d��dS)Nc@s:eZdZd
Zdd�Zdd�Zdd�Zd	S)zHSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef�slot1�slot2cSstjj|||�S)N)r,r(�__new__)ror�r)r�r�rrrr�zszPSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.__new__cSs||_||_dS)N)r�r�)rr�r)r�r�rrrr|s	zQSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.__init__cSs|j|jS)N)r�r�)rrrr�methszMSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.methN)zslot1zslot2)r	r
r�	__slots__r�rr�rrrrr�xsr�rf�abc�defZabcdef�__dict__)	r,r(rr5r�r�r�rQrt)rr�r.r�rrr�test_subclass_refs_with_slotsws	z9SubclassableWeakrefTestCase.test_subclass_refs_with_slotscs�Gdd�dtj�}�fdd�}t�}|||�}||_~~�j�jd�t�}|||�}|||�}||_||_~~~�j�jd�dS)Nc@seZdZdS)zHSubclassableWeakrefTestCase.test_subclass_refs_with_cycle.<locals>.MyRefN)r	r
rrrrrr��sr�cs�jd7_dS)Nr')r%)r�)rrrr)�szKSubclassableWeakrefTestCase.test_subclass_refs_with_cycle.<locals>.callbackr)r,r(rr.r5r%r�)rr�r)r.r�r�r)rr�test_subclass_refs_with_cycle�s"					z9SubclassableWeakrefTestCase.test_subclass_refs_with_cycleN)r	r
rr�r�r�r�r�rrrrr�Hs
r�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	j
d
d��Zdd�Zdd�Z
dS)�WeakMethodTestCasecCsGdd�dt�}|S)z3Return an Object subclass overriding `some_method`.c@seZdZdd�ZdS)z'WeakMethodTestCase._subclass.<locals>.CcSsdS)N�r)rrrrr�sz3WeakMethodTestCase._subclass.<locals>.C.some_methodN)r	r
rrrrrrr�sr)r)rrrrr�	_subclass�szWeakMethodTestCase._subclasscCs�td�}tj|j�}|j|tj�|j|�t|j��|j|�j|�|j|�j	|jj	�|j
|��d�dS)Nr'r)rr,�
WeakMethodrZassertIsInstance�
ReferenceTyperorC�__self__�__func__r5)rr.r�rrr�
test_alive�szWeakMethodTestCase.test_alivecCsBtd�}tj|j�}~tj�|j|�d�dS)Nr')rr,r�rr�r�rC)rr.r�rrr�test_object_dead�s

z#WeakMethodTestCase.test_object_deadcCsQ|j�}|d�}tj|j�}|`tj�|j|�d�dS)Nr')r�r,r�rr�r�rC)rrr.r�rrr�test_method_dead�s
z#WeakMethodTestCase.test_method_deadcs�|j�}g��fdd�}|d�}tj|j|�}~tj�|j�|g�tj|_tj�|j�|g�dS)Ncs�j|�dS)N)rR)r)�callsrrr��sz=WeakMethodTestCase.test_callback_when_object_dead.<locals>.cbr')r�r,r�rr�r�r5r)rrr�r.r�r)r�r�test_callback_when_object_dead�s

z1WeakMethodTestCase.test_callback_when_object_deadcs�|j�}g��fdd�}|d�}tj|j|�}|`tj�|j�|g�~tj�|j�|g�dS)Ncs�j|�dS)N)rR)r)r�rrr��sz=WeakMethodTestCase.test_callback_when_method_dead.<locals>.cbr')r�r,r�rr�r�r5)rrr�r.r�r)r�r�test_callback_when_method_dead�s

z1WeakMethodTestCase.test_callback_when_method_deadcCsVtd�}dd�}tj|j|�}tj|�}~|j|�d�dS)Nr'cSsdS)Nr)�_rrrr��sz-WeakMethodTestCase.test_no_cycles.<locals>.cb)rr,r�rr(rC)rr.r�r�r/rrr�test_no_cycles�sz!WeakMethodTestCase.test_no_cyclescs��fdd�}�fdd�}td�}td�}tj|j�}tj|j�}tj|j�}tj|j�}|||�|||�|||�|||�|||�|||�td�}	tj|	j�}
tj|	j�}|||
�|||�|||
�|||�~~~	tj�|||||
|f}xW|D]O}
xF|D]>}�j|
|k|
|k��j|
|k|
|k	�quWqhWdS)Ncs*�j||k��j||k�dS)N)rTrQ)r�r�)rrr�_eq�sz-WeakMethodTestCase.test_equality.<locals>._eqcs*�j||k��j||k�dS)N)rTrQ)r�r�)rrr�_ne�sz-WeakMethodTestCase.test_equality.<locals>._ner'r3)rr,r�rr!r�r�r5)rr�r�rr�r�r�r:r�r��err��qr�r)rrr��s8









	


z WeakMethodTestCase.test_equalitycCs�td�}td�}tj|j�}tj|j�}tj|j�}|jt|�t|��t|�}~~tj�|jt|�|�|jt|�|�|j	t
t|�dS)Nr')rr,r�rr!r5rr�r�r>rq)rrr�r�r�r:Zharrrr�!s
zWeakMethodTestCase.test_hashingN)r	r
rr�r�r�r�r�r�rZcpython_onlyr�r�r�rrrrr��s	&r�c@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Z d<d=�Z!d>d?�Z"d@dA�Z#dBdC�Z$dDdE�Z%dFdG�Z&dHdI�Z'dJS)K�MappingTestCaserMc	s�d}dd�t|�D�}|�fdd�|D��}|j�}yt|�Wntk
rlYnX~tj�t|�}~tj�t|�}|j|d�|j|d�dS)	N�cSsg|]}t��qSr)r")�.0r�rrr�
<listcomp>;s	z4MappingTestCase.check_len_cycles.<locals>.<listcomp>c3s|]}�|�VqdS)Nr)rr.)�consrr�	<genexpr><sz3MappingTestCase.check_len_cycles.<locals>.<genexpr>rr')rr')	rV�items�next�
StopIterationr�r�rSrUr5)	r�	dict_typer�Nr�dct�it�n1�n2r)rr�check_len_cycles9s 


z MappingTestCase.check_len_cyclescCs|jtjdd��dS)NcSs
|dfS)Nr'r)r�rrrr�Nsz<MappingTestCase.test_weak_keyed_len_cycles.<locals>.<lambda>)rr,r�)rrrr�test_weak_keyed_len_cyclesMsz*MappingTestCase.test_weak_keyed_len_cyclescCs|jtjdd��dS)NcSs
d|fS)Nr'r)r�rrrr�Qsz=MappingTestCase.test_weak_valued_len_cycles.<locals>.<lambda>)rr,�WeakValueDictionary)rrrr�test_weak_valued_len_cyclesPsz+MappingTestCase.test_weak_valued_len_cyclesc
s"|jtjtj��xtdd�D]�}d}tjd�tj|||�dd�t|�D�}|�fdd�|D��}~|j�}yt|�Wntk
r�YnXt	|�}~t	|�}	|j
|d�|j||�|j
|	d�|j|	|�q)WdS)	Nr'r�rrcSsg|]}t��qSr)r")rr�rrrrZs	z2MappingTestCase.check_len_race.<locals>.<listcomp>c3s|]}�|�VqdS)Nr)rr.)rrrr[sz1MappingTestCase.check_len_race.<locals>.<genexpr>)Z
addCleanupr�r�r�rVr�rrrrSZassertGreaterEqualZassertLessEqual)
rrrZthr	rr
rrr
r)rr�check_len_raceSs(

zMappingTestCase.check_len_racecCs|jtjdd��dS)NcSs
|dfS)Nr'r)r�rrrr�lsz:MappingTestCase.test_weak_keyed_len_race.<locals>.<lambda>)rr,r�)rrrr�test_weak_keyed_len_raceksz(MappingTestCase.test_weak_keyed_len_racecCs|jtjdd��dS)NcSs
d|fS)Nr'r)r�rrrr�osz;MappingTestCase.test_weak_valued_len_race.<locals>.<lambda>)rr,r)rrrr�test_weak_valued_len_racensz)MappingTestCase.test_weak_valued_len_racecCsU|j�\}}xA|D]9}|jtj|�d�|j|||jd�qWt|j��}t|j�j��}|j	�|j	�|j||d�~~|jt
|�|j�|d=|jt
|�|jdd�~~|jt
|�dd�tj�}|j
t|jd�t�|d<|j
t|jd�dS)Nr'z#wrong object returned by weak dict!z/cloning of weak-valued dictionary did not work!rz/deleting object did not cause dictionary updatez0deleting the values did not clear the dictionaryr3)�make_weak_valued_dictr5r,rFrCrr{r�copy�sortrS�COUNTrr>�KeyError�__getitem__r)r�dict�objectsr.�items1�items2rrr�test_weak_valuesqs.



z MappingTestCase.test_weak_valuescCs9|j�\}}xH|D]@}|jtj|�dd|�|j|j||d�qW|j�}|j�j�}|jt|�t|�d�~~|jt	|�|j
�|d=|jt	|�|j
dd�~~|jt	|�dd�td�}d	||<|j||�|j
d
|�dS)Nr'z&wrong number of weak references to %r!z#wrong object returned by weak dict!z.cloning of weak-keyed dictionary did not work!rz/deleting object did not cause dictionary updatez.deleting the keys did not clear the dictionaryrfz$What is the meaning of the universe?�")�make_weak_keyed_dictr5r,rFrCrrr�setrSrrrU�assertNotIn)rrrr.rrrrr�test_weak_keys�s,

zMappingTestCase.test_weak_keyscCsy|j�\}}|j|�|j�}|jt|�t|��t|�}x[|D]S}|�}|j||�|j||�|j|j||�|j|�qZW|jt|�d�t|�}|jtt|j���t|��xa|j�D]S}|�}|j||�|j||�|j|j||�|j|�qW|jt|�d�dS)Nr)	r!�check_iters�keyrefsr5rSr{rUrr�)rrrr��objects2r/r�rrr�test_weak_keyed_iters�s*

	(	z%MappingTestCase.test_weak_keyed_iterscCss|j�\}}|j|�|j�}|jt|�t|��t|�}xX|D]P}|�}|j|||j�|j|j||jj�|j|�qZW|jt|�d�t|�}|jtt|j���t|��x^|j�D]P}|�}|j|||j�|j|j||jj�|j|�qW|jt|�d�dS)Nr)	rr%�	valuerefsr5rSr{rr��
itervaluerefs)rrrr�r'r/r�rrr�test_weak_valued_iters�s&

	(	z&MappingTestCase.test_weak_valued_iterscCst|j��}x!|j�D]}|j|�qW|j|d�t|j��}x|D]}|j|�q_W|j|d�t|j��}x!|j�D]}|j|�q�W|j|d�t|j��}x!|j�D]}|j|�q�W|j|d�dS)Nzitems() did not touch all itemsz!__iter__() did not touch all keysz!iterkeys() did not touch all keysz%itervalues() did not touch all values)r{rr�rQ�keys�values)rrr�itemr,r�r-�vrrrr%�s"
	zMappingTestCase.check_iterscCs�t|�}tt||���}t|�|d=tj�|jtt|��t|�t|�dg�~|jt|�|d�dS)Nr'���)	rS�iter�getattrrr�r�rUr{r5)rrrZ	iter_namer�rrrr�"check_weak_destroy_while_iterating�s

2z2MappingTestCase.check_weak_destroy_while_iteratingc'CsZ|��\}}|j||�WdQX|��#\}}|jt|j|�WdQX|j||�|��#\}}|jt|j|�WdQX|j||�|��\}}|||<WdQX|j|||�tj|�}|��\}}|j|�WdQX|j||�|��\}}|j�WdQX|jt	|�d�dS)Nr)
r#r>rrv�popr5r�update�clearrS)rr�testcontextr�r/Zddictrrr�-check_weak_destroy_and_mutate_while_iteratings$z=MappingTestCase.check_weak_destroy_and_mutate_while_iteratingc"Cs�td�}|��Ut|�}|j�|jt|�|d�|||<|jt|�|�WdQX|��R|jt|�|d�|jt|j���|jt|�|d�WdQX|��L|jt|�|d�|t|j��=|jt|�|d�WdQX|��C|jt|�|d�|j�|jt|�|d�WdQX|��%|j�|jt|�d�WdQX|jt|�d�dS)	Ni@�r'r3rLrr r�r)rrS�popitemr5r4rr,r6)rrr7r.r�rrr�&check_weak_del_and_len_while_iteratings.



 
 

 

z6MappingTestCase.check_weak_del_and_len_while_iteratingcs�|j�\��|j��d�|j��d�|j��d�|j��d�|j�\��tj��fdd��}|j�|�|j�\��|j�|�dS)Nr,rr-r&c
3sbzJt�j��}t|��j�j}tj�t|�|fVWdd}tj�XdS)N)r1rrr4rr�r�r)rr/)rrrrr7Ds

zKMappingTestCase.test_weak_keys_destroy_while_iterating.<locals>.testcontext)r!r3�
contextlib�contextmanagerr8r:)rr7r)rrr�&test_weak_keys_destroy_while_iterating<sz6MappingTestCase.test_weak_keys_destroy_while_iteratingcs�|j�\��|j��d�|j��d�|j��d�|j��d�|j��d�|j�\��tj��fdd��}|j�|�|j�\��|j�|�dS)Nr,rr-r*r)c
3sbzJt�j��}t|��j�j}tj�|t|�fVWdd}tj�XdS)N)r1rrr4rr�r�r)rr�)rrrrr7_s

zMMappingTestCase.test_weak_values_destroy_while_iterating.<locals>.testcontext)rr3r;r<r8r:)rr7r)rrr�(test_weak_values_destroy_while_iteratingVsz8MappingTestCase.test_weak_values_destroy_while_iteratingcCs:td�}tjid|6�}|j||d�dS)NrLil)rr,r�r5)rr.rrrr�#test_make_weak_keyed_dict_from_dictosz3MappingTestCase.test_make_weak_keyed_dict_from_dictcCsItd�}tjid|6�}tj|�}|j||d�dS)NrLil)rr,r�r5)rr.r�dict2rrr�.test_make_weak_keyed_dict_from_weak_keyed_dicttsz>MappingTestCase.test_make_weak_keyed_dict_from_weak_keyed_dictcCsRtj�}tttt|j���}x|D]}|j||<q1W||fS)N)r,r�r{�maprrVrr)rrrr.rrrr!zs

z$MappingTestCase.make_weak_keyed_dictcCs:td�}tji|d6�}|j|d|�dS)NrLil)rr,rr5)rr.rrrr�$test_make_weak_valued_dict_from_dict�sz4MappingTestCase.test_make_weak_valued_dict_from_dictcCsItd�}tji|d6�}tj|�}|j|d|�dS)NrLil)rr,rr5)rr.rr@rrr�0test_make_weak_valued_dict_from_weak_valued_dict�sz@MappingTestCase.test_make_weak_valued_dict_from_weak_valued_dictcCs�|jttjj�|jttjii�|jttjff�td�}xWdD]O}tji||6�}|jt|j��|g�|j|||�q[WdS)NrLrrr�iterable)zselfzdictzotherziterable)	r>rqr,rrrr5r{r,)rr.�kwr�rrr�test_make_weak_valued_dict_misc�s
z/MappingTestCase.test_make_weak_valued_dict_misccCsRtj�}tttt|j���}x|D]}|||j<q1W||fS)N)r,rr{rBrrVrr)rrrr.rrrr�s

z%MappingTestCase.make_weak_valued_dictc	Cs�|�}|||<|||<|jt|�d�|j�\}}|jt|�d�||krz|j||�n|j||�|j�\}}|jt|�d�||kr�|j||�n|j||�dS)Nr3r'r)r5rSr9rC)	r�klass�key1�value1�key2�value2�weakdictr�r/rrr�
check_popitem�s	

zMappingTestCase.check_popitemcCs&|jtjdt�dt��dS)NrIrK)rNr,rr)rrrr�test_weak_valued_dict_popitem�sz-MappingTestCase.test_weak_valued_dict_popitemcCs&|jtjt�dt�d�dS)Nzvalue 1zvalue 2)rNr,r�r)rrrr�test_weak_keyed_dict_popitem�sz,MappingTestCase.test_weak_keyed_dict_popitemcCs�|j||d�|�}|j||�}|j||�|j||�|j|j|�|�|j|||�|j||�}|j||�|j||�|j|j|�|�|j|||�dS)Nz9invalid test -- value parameters must be distinct objects)r��
setdefaultrCrU�get)rrH�keyrJrLrMr.rrr�check_setdefault�s	z MappingTestCase.check_setdefaultcCs#|jtjdt�t��dS)NrS)rTr,rr)rrrr� test_weak_valued_dict_setdefault�sz0MappingTestCase.test_weak_valued_dict_setdefaultcCs |jtjt�dd�dS)Nzvalue 1zvalue 2)rTr,r�r)rrrr�test_weak_keyed_dict_setdefault�sz/MappingTestCase.test_weak_keyed_dict_setdefaultcCs�|�}|j|�|jt|�t|��xc|j�D]U}|j||d�|j|�}|j|||�|j||j|��q?Wx^|j�D]P}|j||d�||}|j|||�|j||j|��q�WdS)Nz(mysterious new key appeared in weak dictz%original key disappeared in weak dict)r5r5rSr,rUrRrC)rrHrrMr�r/rrr�check_update�s	

zMappingTestCase.check_updatecCs|jtjit�d6t�d6t�t�6�|jttjj�tj�}|jt|jii�|jt|jff�|jt|j	��g�t
d�}xadD]Y}tj�}|ji||6�|jt|j	��|g�|j|||�q�WdS)	Nr'r�rLrrrrE)zselfzdictzotherziterable)rWr,rrr>rqr5r5r{r,r)rr�r.rFrrr�test_weak_valued_dict_update�s(
z,MappingTestCase.test_weak_valued_dict_updatecCs5|jtjidt�6dt�6dt�6�dS)Nr'r3rL)rWr,r�r)rrrr�test_weak_keyed_dict_update�sz+MappingTestCase.test_weak_keyed_dict_updatecCs�tj�}td�}td�}d||<d||<|jt|�d�||=|jt|�d�|jt|j��|g�dS)N�1�2�	somethingr3r')r,r�rr5rSr{r,)rr��o1rErrr�test_weak_keyed_delitem�s

z'MappingTestCase.test_weak_keyed_delitemcCs�tj�}td�}td�}||d<||d<|jt|�d�|d=|jt|�d�|jt|j��d|fg�dS)NrZr[r\zsomething elser3r')r,rrr5rSr{r)rr�r]rErrr�test_weak_valued_delitems

z(MappingTestCase.test_weak_valued_delitemcCs�tj�}td�}|jt|j|�|jt|j|�|jt|jd�|jt|jd�|jt|jdd�dS)NrZ�
)	r,r�rr>rrvrrq�__setitem__)rr�r.rrr�test_weak_keyed_bad_delitemsz+MappingTestCase.test_weak_keyed_bad_delitemcs�tj�}d�G��fdd�dt���fdd�td�D��x�D]}|j||<qWW~t|j����j�d�d}x�D]}|d	7}||=q�W|jt	|�d�|j|d
�dS)NFcs=eZdZdd�Zdd�Z��fdd�ZdS)z<MappingTestCase.test_weak_keyed_cascading_deletes.<locals>.CcSs
||_dS)N)r�)rr�rrrr'szEMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__init__cSs
t|j�S)N)rr�)rrrrr)szEMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__hash__cs �r�d=n|j|jkS)Nr'r0)r�)rr)�mutate�objsrrr+s
zCMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__eq__N)r	r
rrrrr)rcrdrrr&srcsg|]}�|��qSrr)rr�)rrrr2s	zEMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.<listcomp>rTrr'r3)
r,r�r9rVr�r{r,�reverser5rS)rr�r.�countr)rrcrdr�!test_weak_keyed_cascading_deletess 

	

z1MappingTestCase.test_weak_keyed_cascading_deletesN)(r	r
rrrrrrrrrr$r(r+r%r3r8r:r=r>r?rAr!rCrDrGrrNrOrPrTrUrVrWrXrYr^r_rbrgrrrrr�5sJ
r�)�
mapping_testsc@sXeZdZdZied�d6ed�d6ed�d6ZejZdd	�Z	d
S)�WeakValueDictionaryTestCasez?Check that WeakValueDictionary conforms to the mapping protocolr'rIr3rKrL�key3cCs
|jj�S)N)�!_WeakValueDictionaryTestCase__refr)rrrr�
_referenceQsz&WeakValueDictionaryTestCase._referenceN)
r	r
r�__doc__rrkr,r�	type2testrlrrrrriMs-	ric@sXeZdZdZided�6ded�6ded�6ZejZdd	�Z	d
S)�WeakKeyDictionaryTestCasez=Check that WeakKeyDictionary conforms to the mapping protocolr'rIr3rKrLrjcCs
|jj�S)N)�_WeakKeyDictionaryTestCase__refr)rrrrrlXsz$WeakKeyDictionaryTestCase._referenceN)
r	r
rrmrrpr,r�rnrlrrrrroTs-	roc@sqeZdZGdd�d�Zdd�Zdd�Zdd�Zd	d
�Zedd��Z	d
d�Z
dS)�FinalizeTestCasec@seZdZdS)zFinalizeTestCase.AN)r	r
rrrrrr�^sr�cCs#tjjdkrtj�ndS)NZcpython)r��implementation�namerr�)rrrr�_collect_if_necessaryasz&FinalizeTestCase._collect_if_necessaryc	s��fdd�}|j�}g�tj||dddd�}|j|jd�|j|j�||didd6f�|j|�d�|j|�d�|j|�d�|j|j�d�|j|j�d�|j|jd	�|j�dg�g�tj||ddd�}|j|j�||d
if�|j|j�||dif�|j|�d�|j|�d�|j|j�d�|j|j�d�|j|jd	�|j�g�g�tj||d
ddddd�}~|j�|j|�d�|j|�d�|j|j�d�|j|j�d�|j|jd	�|j�dg�dS)Ncs!�j|||�|||S)N)rR)rr�r�)�resrr�addgsz+FinalizeTestCase.test_finalize.<locals>.add�C�+r��YT��Frr�)rwrx)rwrxry)rwrxry)r�r,�finalizer5�alive�peek�detachrt)rrvr�rr)rur�
test_finalizefsB)""$
zFinalizeTestCase.test_finalizec	Cs�|j�}g}tj||jd�}tj||jd�}tj||jd�}tj||jd�}tj||jd�}~~|j|j�|j|j�|j|j�|j|j��|j|j�|�|jd�|�|j|j�|jd�|�|jd�~|j�|j|j�|jd	�|�dddddddd	g}|j	||�dS)
N�f1�f2�f3�f4�f5r��Brr�)
r�r,r{rRrTr|r~rQrtr5)	rr�rur�r�r�r�r�Zexpectedrrr�
test_order�s6




zFinalizeTestCase.test_ordercs�Gdd�dtj�}|j�}g��fdd�}|||�}tj|�}tj|�}~~|j|��|j|��~|j�|j|��|j|��|j�dg�dS)Nc@seZdZdS)z4FinalizeTestCase.test_all_freed.<locals>.MyFinalizerN)r	r
rrrrr�MyFinalizer�sr�cs�jd�dS)N�{)rRr)rurrr)�sz1FinalizeTestCase.test_all_freed.<locals>.callbackr�)r,r{r�r(rBrtr4r5)rr�r�r)rZwr_callbackZwr_fr)rur�test_all_freed�s
zFinalizeTestCase.test_all_freedcsy�fdd�}tj�tdt�}tj�tdt�}tj�|�}tj�tdt�}d|_dS)Ncs+tj�td�}td�dddS)N�g1zf3 errorr'r)r,r{�print)r�)�clsrr�error�s
z,FinalizeTestCase.run_in_child.<locals>.errorr�r�r�F)r,r{r��_global_var�atexit)r�r�r�r�r�r�r)r�r�run_in_child�s	zFinalizeTestCase.run_in_childcCsmdd}tjd|�\}}}|jd�j�}|j|ddddg�|jd	|k�dS)
Nz/from test.test_weakref import FinalizeTestCase;zFinalizeTestCase.run_in_child()z-c�asciiz	f4 foobarzf3 errorr�z	f1 foobarsZeroDivisionError)rZassert_python_ok�decode�
splitlinesr5rT)r�prog�rc�out�errrrr�test_atexit�szFinalizeTestCase.test_atexitN)r	r
rr�rtrr�r��classmethodr�r�rrrrrq\s)'rqa� Doctest for examples in the library reference: weakref.rst

>>> import weakref
>>> class Dict(dict):
...     pass
...
>>> obj = Dict(red=1, green=2, blue=3)   # this object is weak referencable
>>> r = weakref.ref(obj)
>>> print(r() is obj)
True

>>> import weakref
>>> class Object:
...     pass
...
>>> o = Object()
>>> r = weakref.ref(o)
>>> o2 = r()
>>> o is o2
True
>>> del o, o2
>>> print(r())
None

>>> import weakref
>>> class ExtendedRef(weakref.ref):
...     def __init__(self, ob, callback=None, **annotations):
...         super().__init__(ob, callback)
...         self.__counter = 0
...         for k, v in annotations.items():
...             setattr(self, k, v)
...     def __call__(self):
...         '''Return a pair containing the referent and the number of
...         times the reference has been called.
...         '''
...         ob = super().__call__()
...         if ob is not None:
...             self.__counter += 1
...             ob = (ob, self.__counter)
...         return ob
...
>>> class A:   # not in docs from here, just testing the ExtendedRef
...     pass
...
>>> a = A()
>>> r = ExtendedRef(a, foo=1, bar="baz")
>>> r.foo
1
>>> r.bar
'baz'
>>> r()[1]
1
>>> r()[1]
2
>>> r()[0] is a
True


>>> import weakref
>>> _id2obj_dict = weakref.WeakValueDictionary()
>>> def remember(obj):
...     oid = id(obj)
...     _id2obj_dict[oid] = obj
...     return oid
...
>>> def id2obj(oid):
...     return _id2obj_dict[oid]
...
>>> a = A()             # from here, just testing
>>> a_id = remember(a)
>>> id2obj(a_id) is a
True
>>> del a
>>> try:
...     id2obj(a_id)
... except KeyError:
...     print('OK')
... else:
...     print('WeakValueDictionary error')
OK

�
libreftestcCs7tjttttttt�tj	t
jt�dS)N)
rZrun_unittestr*r�r�riror�rqZrun_doctestr��modulesr	rrrr�	test_mainAsr��__main__)"r�r�ZunittestrOr,rcr;rZtestrrr�r�rrrrrr"ZTestCaser$r*r�r�r�rhZBasicTestMappingProtocolrirorqr�Z__test__r�r	rrrr�<module>sF	���g����