mò
­fIc           @   se  d  k  Z  d  k Z d  k Z d  k Z d  k Z d k l Z d f  d „  ƒ  YZ d f  d „  ƒ  YZ d „  Z	 d „  Z
 d „  Z d	 e i f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e i f d „  ƒ  YZ d f  d „  ƒ  YZ d e f d „  ƒ  YZ d k l Z d e i f d „  ƒ  YZ d e i f d „  ƒ  YZ d Z h  d e <Z d „  Z e d j o e ƒ  n d  S(   N(   s   test_supportt   Cc           B   s   t  Z d „  Z RS(   Nc         C   s   d  S(   N(    (   t   self(    (    t.   /mit/python/lib/python2.4/test/test_weakref.pyt   method   s    (   t   __name__t
   __module__R   (    (    (    R   R    
   s   t   Callablec           B   s   t  Z d  Z d „  Z RS(   Nc         C   s   | |  _ d  S(   N(   t   xR   t   bar(   R   R   (    (    R   t   __call__   s    (   R   R   t   NoneR   R	   (    (    (    R   R      s   c          C   s   d „  }  |  S(   Nc           C   s   d  S(   N(    (    (    (    R   t   f   s    (   R   (   R   (    (    R   t   create_function   s    	c           C   s
   t  ƒ  i S(   N(   R    R   (    (    (    R   t   create_bound_method   s    c           C   s   t  i S(   N(   R    R   (    (    (    R   t   create_unbound_method   s    t   TestBasec           B   s   t  Z d „  Z d „  Z RS(   Nc         C   s   d |  _ d  S(   Ni    (   R   t   cbcalled(   R   (    (    R   t   setUp#   s    c         C   s   |  i d 7_ d  S(   Ni   (   R   R   (   R   t   ref(    (    R   t   callback&   s    (   R   R   R   R   (    (    (    R   R   !   s   	t   ReferencesTestCasec           B   s  t  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d	 „  Z
 d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z  RS(    Nc         C   s]   |  i t ƒ |  i t ƒ |  i t ƒ |  i t ƒ t ƒ  } t i | ƒ } | ~ | d  S(   N(
   R   t   check_basic_refR    R   R   R   t   ot   weakrefR   t   wr(   R   R   R   (    (    R   t   test_basic_ref,   s    	c         C   s8   |  i t ƒ |  i t ƒ |  i t ƒ |  i t ƒ d  S(   N(   R   t   check_basic_callbackR    R   R   R   (   R   (    (    R   t   test_basic_callback;   s    c         C   s…   t  ƒ  } t i | |  i ƒ } t i | |  i ƒ } ~ |  i | ƒ  d  j d ƒ |  i | ƒ  d  j d ƒ |  i |  i
 d j d ƒ d  S(   Ns$   expected reference to be invalidatedi   s-   callback not called the right number of times(   R    R   R   R   R   R   t   ref1t   ref2t   assert_R
   R   (   R   R   R   R   (    (    R   t   test_multiple_callbacksA   s    	c         C   sC   |  d „ } t ƒ  } t i | | ƒ |  _ t i | | ƒ } ~ d  S(   Nc         C   s   | i ƒ  d  S(   N(   R   R   (   t   objectR   (    (    R   R   X   s    (   R   R   R    t   cR   R   R   (   R   R   R!   R   (    (    R   t   test_multiple_selfref_callbacksM   s
    	c         C   s°   t  ƒ  } d | _ t i | |  i ƒ } t i | |  i ƒ } ~ d „  } |  i
 t i | | ƒ |  i
 t i | | ƒ |  i
 t i t t i t  ƒ  ƒ ƒ |  i |  i d j ƒ d  S(   Ni   c         C   s   |  i d  S(   N(   t   proxyR   (   R#   (    (    R   t   checkf   s    i   (   R    R   R   R   R#   R   R   R   R   R$   t   assertRaisest   ReferenceErrort   boolR   R   (   R   R   R   R   R$   (    (    R   t   test_proxy_ref_   s    			"c         C   sT   | ƒ  } t i | ƒ } |  i | ƒ  d  j	 d ƒ | ƒ  } |  i | | j d ƒ d  S(   Ns,   weak reference to live object should be lives-   <ref>() should return original object if live(   t   factoryR   R   R   R   R   R
   t   o2(   R   R)   R   R   R*   (    (    R   R   n   s    		c         C   s`   d |  _ | ƒ  } t i | |  i ƒ } ~ |  i |  i d j d ƒ |  i | ƒ  d  j d ƒ d  S(   Ni    i   s(   callback did not properly set 'cbcalled's3   ref2 should be dead after deleting object reference(	   R   R   R)   R   R   R   R   R   R
   (   R   R)   R   R   (    (    R   R   w   s    		c         C   sÝ   t  ƒ  } t i | ƒ } t i | ƒ } t i | ƒ } |  i | | j d ƒ t  ƒ  } t i | ƒ } t i | ƒ } t i | ƒ } |  i | | j d ƒ |  i t i	 | ƒ d j d ƒ ~ |  i t i	 | ƒ d j d ƒ d  S(   Ns1   reference object w/out callback should be re-usedi   s   wrong weak ref count for objecti   s4   wrong weak ref count for object after deleting proxy(
   R    R   R   R   R   R#   R   R   R   t   getweakrefcount(   R   R   R   R   R#   (    (    R   t   test_ref_reuse   s"    		c         C   sP   t  ƒ  } t i | ƒ } t i | ƒ } t i | ƒ } |  i | | j d ƒ d  S(   Ns4   proxy object w/out callback should have been re-used(	   R    R   R   R#   t   proxy1R   t   proxy2R   R   (   R   R.   R-   R   R   (    (    R   t   test_proxy_reuse—   s    	c         C   s·  t  ƒ  } |  i | t i | ƒ ƒ t i ƒ  } t i | ƒ } |  i	 | d ƒ | i
 d ƒ |  i t | ƒ d ƒ |  i | d ƒ d d g | (|  i t | ƒ d ƒ |  i t | ƒ d ƒ |  i d | j d ƒ d | d <|  i | d d ƒ |  i | d d ƒ t i | ƒ } t i | ƒ } |  i | | ƒ t i t d	 ƒ ƒ } t i | ƒ } |  i | | ƒ |  i | d | d ƒ |  i | d  | d  ƒ |  i | d d !| d d !ƒ d  S(
   Ns(   proxy for empty UserList should be falsei   i   s+   proxy for non-empty UserList should be truei   i   s,   proxy didn't support __contains__() properlyi   i
   (   R    R   R   t   check_proxyR   R#   t   UserListt   Lt   pt   failIft   appendt   assertEqualt   lent
   failUnlesst   L2t   p2t   ranget   L3t   p3(   R   R:   R=   R3   R2   R   R9   R<   (    (    R   t   test_basic_proxyŸ   s2    	
c         C   s   |  i t i ƒ d  S(   N(   R   t   check_shared_without_callbackR   R   (   R   (    (    R   t    test_shared_ref_without_callbackÄ   s    c         C   s   |  i t i ƒ d  S(   N(   R   R?   R   R#   (   R   (    (    R   t"   test_shared_proxy_without_callbackÇ   s    c         C   sæ   t  d ƒ } | | d  ƒ } | | d  ƒ } |  i | | j d ƒ ~ ~ | | ƒ } | | d  ƒ } |  i | | j d ƒ ~ ~ | | ƒ } | | ƒ } |  i | | j d ƒ ~ ~ | | d  ƒ } | | ƒ } |  i | | j d ƒ d  S(   Ni   s%   both callbacks were None in the C APIs&   callbacks were NULL, None in the C APIs%   both callbacks were NULL in the C APIs&   callbacks were None, NULL in the C API(   t   ObjectR   t   makerefR
   t   p1R:   R   R   (   R   RC   R:   RD   R   (    (    R   R?   Ê   s     c         C   s½   t  ƒ  } t i | ƒ } |  i | | ƒ |  i t | ƒ t i	 j d ƒ | d ƒ |  i | i
 d j d ƒ | d d ƒ |  i | i
 d j d ƒ |  i t | ƒ |  i t | d d d ƒ d  S(	   Ns   proxy is not of callable types	   twinkies!s1   call through proxy not passed through to originalR   s   Splat.i   i   i   (   R   R   R   R#   R   R   R0   R   t   typet   CallableProxyTypeR   R%   t	   TypeError(   R   R   R   (    (    R   t   test_callable_proxyÜ   s    	
c         C   sÌ   d | _ |  i | i d j d ƒ d | _ |  i | i d j d ƒ | ` |  i t | d ƒ d ƒ d | _ |  i | i d j d ƒ d | _ |  i | i d j d ƒ | ` |  i t | d ƒ d	 ƒ d  S(
   Ni   s)   proxy does not reflect attribute additioni   s-   proxy does not reflect attribute modificationt   foos(   proxy does not reflect attribute removals4   object does not reflect attribute addition via proxys8   object does not reflect attribute modification via proxys3   object does not reflect attribute removal via proxy(   R   RI   R   R   R#   t   hasattr(   R   R   R#   (    (    R   R0   ñ   s$    				c         C   sI   d f  d „  ƒ  Y} | ƒ  } t i | ƒ } | d =|  i | i d ƒ d  S(   Nt   Fooc           B   s   t  Z d  Z d „  Z RS(   Nc         C   s   | |  _ d  S(   N(   t   accessorR   t   result(   R   RL   (    (    R   t   __delitem__  s    (   R   R   R
   RM   RN   (    (    (    R   RK   	  s   i    (   RK   t   gR   R#   R   R   R6   RM   (   R   RK   RO   R   (    (    R   t   test_proxy_deletion  s
    	c         C   sH   d t  f d „  ƒ  Y} | ƒ  } |  i t t i | ƒ ƒ t | ƒ ƒ d  S(   Nt   Listc           B   s   t  Z RS(   N(   R   R   (    (    (    R   RQ     s    (   t   listRQ   t   lystR   R6   R'   R   R#   (   R   RQ   RS   (    (    R   t   test_proxy_bool  s    	c         C   sÝ   t  ƒ  } t i | ƒ } t i | |  i ƒ } |  i t i	 | ƒ d j d ƒ t i
 | ƒ } t i
 | |  i ƒ } |  i t i	 | ƒ d j d ƒ ~ ~ ~ ~ |  i t i	 | ƒ d j d ƒ |  i t i	 d ƒ d j d ƒ d  S(   Ni   s*   got wrong number of weak reference objectsi   i    sA   weak reference objects not unlinked from referent when discarded.i   s2   got wrong number of weak reference objects for int(   R    R   R   R   R   R   R   R   R   R+   R#   R-   R.   (   R   R.   R-   R   R   R   (    (    R   t   test_getweakrefcount  s    	c         C   sõ   t  ƒ  } t i | |  i ƒ } t i | |  i ƒ } ~ |  i t i	 | ƒ | g j d ƒ t  ƒ  } t i | |  i ƒ } t i | |  i ƒ } ~ |  i t i	 | ƒ | g j d ƒ ~ |  i t i	 | ƒ g  j d ƒ |  i t i	 d ƒ g  j d ƒ d  S(   Ns   list of refs does not matchs   list of refs not clearedi   s#   list of refs does not match for int(
   R    R   R   R   R   R   R   R   R   t   getweakrefs(   R   R   R   R   (    (    R   t   test_getweakrefs-  s"    		c         C   sc   d t  f d „  ƒ  Y} | d ƒ } t i | ƒ } |  i | d d j ƒ |  i d | d j ƒ d  S(   Nt   Fc           B   s   t  Z RS(   N(   R   R   (    (    (    R   RX   E  s   f2.0f1.0f3.0(   t   floatRX   R   R   R#   R3   R   R   (   R   RX   R   R3   (    (    R   t   test_newstyle_number_opsD  s
    c      	      sš   d t  f d „  ƒ  Y‰  h  ‰ ‡ d †  ‰ ‡  ‡ ‡ d †  } y | ƒ  Wn ˆ  j
 o n X|  i d ƒ y | ƒ  Wn ˆ  j
 o n X|  i d ƒ d  S(   Nt
   BogusErrorc           B   s   t  Z RS(   N(   R   R   (    (    (    R   R[   O  s   c            s   ˆ  |  =d  S(   N(   t   datat   k(   R]   (   R\   (    R   t   removeR  s    c             s)   d „  }  d  ˆ t i |  ˆ ƒ <ˆ  ‚ d  S(   Nc           C   s   f  S(   N(    (    (    (    R   t   <lambda>U  s    (   R   R
   R\   R   R   R^   R[   (   R   (   R[   R^   R\   (    R   t   encapsulateT  s    	s   exception not properly restored(   t	   ExceptionR[   R\   R^   R`   R   t   fail(   R   R[   R\   R^   R`   (    (   R[   R\   R^   R   t   test_callbacks_protectedL  s    c            s’   d  k  ‰  d t f d „  ƒ  Y} | ƒ  } t i | ‡  d †  ƒ } ~ ~ | ƒ  } | ƒ  | _ t i | i ‡  d †  ƒ } | ƒ  } | | _ ~ ~ d  S(   NR    c           B   s   t  Z RS(   N(   R   R   (    (    (    R   R    r  s   c            s
   ˆ  i ƒ  S(   N(   t   gct   collect(   t   ignore(   Rd   (    R   R_   v  s    c            s
   ˆ  i ƒ  S(   N(   Rd   Re   (   Rf   (   Rd   (    R   R_   ~  s    (
   Rd   R    R    R!   R   R   R   t   c1t   it   c2(   R   R!   R    Rd   R   Ri   Rg   (    (   Rd   R   t   test_sf_bug_840829e  s    						c         C   sv   d  k  } d t f d „  ƒ  Y} d t f d „  ƒ  Y} | ƒ  } | | _ t i | | i ƒ | _ ~ ~ ~ | i	 ƒ  d  S(   Nt   Jc           B   s   t  Z RS(   N(   R   R   (    (    (    R   Rk     s   t   IIc           B   s   t  Z d „  Z RS(   Nc         C   s   |  i d  S(   N(   R   Rk   (   R   Rf   (    (    R   t	   acallback”  s    (   R   R   Rm   (    (    (    R   Rl   “  s   (
   Rd   R    Rk   Rl   t   IR   R   Rm   R   Re   (   R   Rn   Rk   Rl   Rd   (    (    R   t   test_callback_in_cycle_1  s    				c         C   ss   d  k  } d t f d „  ƒ  Y} d f  d „  ƒ  Y} | ƒ  } | | _ t i | | i ƒ | _ ~ ~ ~ | i	 ƒ  d  S(   NRk   c           B   s   t  Z RS(   N(   R   R   (    (    (    R   Rk   Ä  s   Rl   c           B   s   t  Z d „  Z RS(   Nc         C   s   |  i d  S(   N(   R   Rk   (   R   Rf   (    (    R   Rm   È  s    (   R   R   Rm   (    (    (    R   Rl   Ç  s   (
   Rd   R    Rk   Rl   Rn   R   R   Rm   R   Re   (   R   Rn   Rk   Rl   Rd   (    (    R   t   test_callback_in_cycle_2µ  s    				c         C   sm   d  k  } d f  d „  ƒ  Y} | ƒ  | ƒ  } } | | _ | | _ t i | | i ƒ | _ ~ ~ | i	 ƒ  d  S(   NR    c           B   s   t  Z d „  Z RS(   Nc         C   s   |  i |  i |  i d  S(   N(   R   t   meRg   R   (   R   Rf   (    (    R   t   cbÜ  s    (   R   R   Rr   (    (    (    R   R    Û  s   (
   Rd   R    Rg   Ri   Rq   R   R   Rr   R   Re   (   R   R    Rd   Ri   Rg   (    (    R   t   test_callback_in_cycle_3Ò  s    			c         C   s‰   d  k  } d t f d „  ƒ  Y} d f  d „  ƒ  Y} | ƒ  | ƒ  } } | | _ | | _ t i | | i	 ƒ | _
 ~ ~ ~ ~ | i ƒ  d  S(   NR    c           B   s   t  Z d „  Z RS(   Nc         C   s   |  i |  i |  i d  S(   N(   R   Rq   Rg   R   (   R   Rf   (    (    R   Rr   õ  s    (   R   R   Rr   (    (    (    R   R    ô  s   t   Dc           B   s   t  Z RS(   N(   R   R   (    (    (    R   Rt   ú  s   (   Rd   R    R    Rt   Rg   Ri   Rq   R   R   Rr   R   Re   (   R   R    Rt   Rd   Ri   Rg   (    (    R   t   test_callback_in_cycle_4ê  s    				c            s  d  k  } g  ‰  d t f ‡  d †  ƒ  Y} | d ƒ | d ƒ } } | | _ | | _ t i | | i	 ƒ | _
 t i | | i	 ƒ | _
 ‡  d †  } t i | | ƒ } ~ ~ ~ |  i ˆ  g  ƒ | i ƒ  |  i ˆ  d g ƒ |  i | ƒ  d  ƒ ˆ  2| i ƒ  |  i ˆ  g  ƒ d  S(   NR    c              s   t  Z d „  Z ‡  d †  Z RS(   Nc         C   s   | |  _ d  S(   N(   t   valueR   t	   attribute(   R   Rv   (    (    R   t   __init__  s    c            s   ˆ  i |  i ƒ d  S(   N(   t   alistR5   R   R!   (   R   Rf   (   Ry   (    R   Rm     s    (   R   R   Rx   Rm   (    (   Ry   (    R   R      s   	i   i   c            s   ˆ  i d ƒ d  S(   Ns   C went away(   Ry   R5   (   Rf   (   Ry   (    R   t   C_went_away   s    s   C went away(   Rd   Ry   R    R    Rg   Ri   R!   R   R   Rm   R   Rz   R   R6   Re   R
   (   R   R    Ry   Rd   R   Rz   Ri   Rg   (    (   Ry   R   t#   test_callback_in_cycle_resurrection  s$    				

c   	         s%  d  k  } g  ‰  ‡  d †  } d t f ‡  d †  ƒ  Y} | ƒ  | ƒ  } } | | _ | | _ | i } t
 i | | ƒ | _ t
 i | | i ƒ | _ t
 i | | ƒ } |  i | ƒ  | j ƒ ~ ~ ~ ~ |  i ˆ  g  ƒ | i ƒ  |  i ˆ  d g ƒ |  i | ƒ  d  ƒ ˆ  2| i ƒ  |  i ˆ  g  ƒ d  S(   Nc            s   ˆ  i d ƒ d  S(   Ns   safe_callback called(   Ry   R5   (   Rf   (   Ry   (    R   t   safe_callback9  s    R    c              s   t  Z ‡  d †  Z RS(   Nc            s   ˆ  i d ƒ d  S(   Ns	   cb called(   Ry   R5   (   R   Rf   (   Ry   (    R   Rr   =  s    (   R   R   Rr   (    (   Ry   (    R   R    <  s   s   safe_callback called(   Rd   Ry   R|   R    R    R!   t   dt   otherRr   R   R   R   R   t   external_wrR   R   R6   Re   R
   (	   R   R    R}   Ry   R!   R   Rd   R   R|   (    (   Ry   R   t   test_callbacks_on_callback4  s(    					

c         C   s   |  i t i ƒ d  S(   N(   R   t   check_gc_during_creationR   R   (   R   (    (    R   t   test_gc_during_ref_creationZ  s    c         C   s   |  i t i ƒ d  S(   N(   R   R   R   R#   (   R   (    (    R   t   test_gc_during_proxy_creation]  s    c         C   s¡   t  i ƒ  } t  i d d d ƒ t  i ƒ  d f  d „  ƒ  Y} d „  } | ƒ  } | ƒ  } | | _ | | ƒ | _
 z | ƒ  } t i | | ƒ Wd  t  i | Œ  Xd  S(   Ni   t   Ac           B   s   t  Z RS(   N(   R   R   (    (    (    R   R„   d  s   c          G   s   d  S(   N(    (   t   args(    (    R   R   g  s    (   Rd   t   get_thresholdt
   thresholdst   set_thresholdRe   R„   R   t
   referencedt   aRC   R   R   R   (   R   RC   R„   RŠ   R‰   R   R‡   (    (    R   R   `  s    
					 (!   R   R   R   R   R   R"   R(   R   R   R,   R/   R>   R@   RA   R?   RH   R0   RP   RT   RU   RW   RZ   Rc   Rj   Ro   Rp   Rs   Ru   R{   R€   R‚   Rƒ   R   (    (    (    R   R   *   s>   								
			%												(	(				.	&		t   SubclassableWeakrefTestCasec           B   s,   t  Z d „  Z d „  Z d „  Z d „  Z RS(   Nc            s    d t  i f ‡  d †  ƒ  Y‰  t d ƒ } ˆ  | d d ƒ} |  i | ƒ  | j ƒ |  i | i ƒ |  i	 | i
 d ƒ ~ |  i | ƒ  d  j ƒ |  i | i ƒ d  S(   Nt   MyRefc              s&   t  Z d  d ‡  d † Z ‡  d †  Z RS(   Ni*   c            s&   | |  _  t ˆ  |  ƒ i | | ƒ d  S(   N(   Rv   R   t   superRŒ   Rx   t   obR   (   R   RŽ   R   Rv   (   RŒ   (    R   Rx   ~  s    	c            s   t  |  _ t ˆ  |  ƒ i ƒ  S(   N(   t   TrueR   t   calledR   RŒ   R	   (   R   (   RŒ   (    R   R	     s    	(   R   R   R
   Rx   R	   (    (   RŒ   (    R   RŒ   }  s   RI   Rv   i   (   R   R   RŒ   RB   R   t   mrR   R   R   R6   Rv   R
   (   R   R   RŒ   R‘   (    (   RŒ   R   t   test_subclass_refs|  s    c         C   s  d t  i f d „  ƒ  Y} t d ƒ } | | ƒ } t  i | ƒ } |  i | | j	 ƒ |  i	 t  i
 | ƒ | | g ƒ |  i	 t  i | ƒ d ƒ | | ƒ } |  i	 t  i | ƒ d ƒ t  i
 | ƒ } |  i	 t | ƒ d ƒ |  i | | d j ƒ |  i | | d j ƒ |  i | | d j ƒ d  S(   NRŒ   c           B   s   t  Z RS(   N(   R   R   (    (    (    R   RŒ   Ž  s   i*   i   i   i    i   (   R   R   RŒ   RB   R   t   r1t   r2R   R   R6   RV   R+   t   r3t   refsR7   (   R   R“   R”   R•   R   RŒ   R–   (    (    R   t-   test_subclass_refs_dont_replace_standard_refs  s    c         C   s   d t  i f d „  ƒ  Y} t d ƒ } | | t ƒ } | | t ƒ } |  i
 | | j	 ƒ t  i | ƒ } |  i
 | | j ƒ |  i
 | | j ƒ d  S(   NRŒ   c           B   s   t  Z RS(   N(   R   R   (    (    (    R   RŒ   Ÿ  s   i*   (   R   R   RŒ   RB   R   t   idR“   t   strR”   R   R   RV   R–   (   R   R“   R”   R   RŒ   R–   (    (    R   t*   test_subclass_refs_dont_conflate_callbacksž  s    c         C   s   d t  i f d „  ƒ  Y} t d ƒ } | | d  d d ƒ } |  i | i	 d ƒ |  i | i
 d ƒ |  i | i ƒ  d ƒ |  i t | d ƒ ƒ d  S(   NRŒ   c           B   s)   t  Z d Z d „  Z d „  Z d „  Z RS(   Nt   slot1t   slot2c         C   s   t  i i |  | | ƒ S(   N(   R   R   t   __new__RE   RŽ   R   (   RE   RŽ   R   R›   Rœ   (    (    R   R   ¬  s    c         C   s   | |  _  | |  _ d  S(   N(   R›   R   Rœ   (   R   RŽ   R   R›   Rœ   (    (    R   Rx   ®  s    	c         C   s   |  i |  i S(   N(   R   R›   Rœ   (   R   (    (    R   t   meth±  s    (   s   slot1s   slot2(   R   R   t	   __slots__R   Rx   Rž   (    (    (    R   RŒ   ª  s   		i*   t   abct   deft   abcdeft   __dict__(   R   R   RŒ   RB   R   R
   t   rR   R6   R›   Rœ   Rž   R4   RJ   (   R   R   R¤   RŒ   (    (    R   t   test_subclass_refs_with_slots©  s    	(   R   R   R’   R—   Rš   R¥   (    (    (    R   R‹   z  s   			RB   c           B   s   t  Z d „  Z d „  Z RS(   Nc         C   s   | |  _  d  S(   N(   t   argR   (   R   R¦   (    (    R   Rx   ¼  s    c         C   s   d |  i S(   Ns   <Object %r>(   R   R¦   (   R   (    (    R   t   __repr__¾  s    (   R   R   Rx   R§   (    (    (    R   RB   »  s   	t   MappingTestCasec           B   sÔ   t  Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d	 „  Z
 d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   Ni
   c         C   sb  |  i ƒ  \ } } xN | D]F } |  i t i | ƒ d j d | ƒ |  i | | | i j d ƒ q W| i	 ƒ  } | i ƒ  i	 ƒ  } | i ƒ  | i ƒ  |  i | | j d ƒ ~ ~ |  i t | ƒ |  i j ƒ | d =|  i t | ƒ |  i d j d ƒ ~ ~ |  i t | ƒ d j d ƒ t i ƒ  } |  i t | i d ƒ t ƒ  | d <|  i t | i d ƒ d  S(	   Ni   s&   wrong number of weak references to %r!s#   wrong object returned by weak dict!s/   cloning of weak-valued dictionary did not work!i    s/   deleting object did not cause dictionary updates0   deleting the values did not clear the dictionaryi   (   R   t   make_weak_valued_dictt   dictt   objectsR   R   R   R+   R¦   t   itemst   items1t   copyt   items2t   sortR7   t   COUNTt   WeakValueDictionaryR%   t   KeyErrort   __getitem__R    (   R   R¯   R   R­   R«   Rª   (    (    R   t   test_weak_valuesÆ  s2     

c         C   sX  |  i ƒ  \ } } xN | D]F } |  i t i | ƒ d j d | ƒ |  i | i | | j d ƒ q W| i	 ƒ  } | i ƒ  i	 ƒ  } |  i t | ƒ t | ƒ j d ƒ ~ ~ |  i t | ƒ |  i j ƒ | d =|  i t | ƒ |  i d j d ƒ ~ ~ |  i t | ƒ d j d ƒ t d ƒ } d	 | | <|  i | i | ƒ ƒ |  i | i d
 ƒ ƒ d  S(   Ni   s&   wrong number of weak references to %r!s#   wrong object returned by weak dict!s.   cloning of weak-keyed dictionary did not work!i    s/   deleting object did not cause dictionary updates.   deleting the keys did not clear the dictionaryi*   s$   What is the meaning of the universe?i"   (   R   t   make_weak_keyed_dictRª   R«   R   R   R   R+   R¦   R¬   R­   R®   R¯   t   setR7   R±   RB   t   has_key(   R   R¯   R   R­   R«   Rª   (    (    R   t   test_weak_keysä  s.     
c         C   s#   |  i ƒ  \ } } |  i | ƒ d  S(   N(   R   R¶   Rª   R«   t   check_iters(   R   R«   Rª   (    (    R   t   test_weak_keyed_iters   s    c         C   s#   |  i ƒ  \ } } |  i | ƒ d  S(   N(   R   R©   Rª   R«   Rº   (   R   R«   Rª   (    (    R   t   test_weak_valued_iters  s    c         C   s.  | i ƒ  } x! | i ƒ  D] } | i | ƒ q W|  i t | ƒ d j d ƒ | i ƒ  } x | D] } | i | ƒ q_ W|  i t | ƒ d j d ƒ | i ƒ  } x! | i
 ƒ  D] } | i | ƒ q« W|  i t | ƒ d j d ƒ | i ƒ  } x! | i ƒ  D] } | i | ƒ q÷ W|  i t | ƒ d j d ƒ d  S(   Ni    s#   iteritems() did not touch all itemss!   __iter__() did not touch all keyss!   iterkeys() did not touch all keyss%   itervalues() did not touch all values(   Rª   R¬   t	   iteritemst   itemR^   R   R   R7   t   keysR]   t   iterkeyst   valuest
   itervaluest   v(   R   Rª   R¿   R¬   R¾   RÃ   RÁ   R]   (    (    R   Rº     s*        c         C   s?   t  d ƒ } t i h  | d <ƒ } |  i | | d j ƒ d  S(   Ni   il  (   RB   R   R   t   WeakKeyDictionaryRª   R   R   (   R   Rª   R   (    (    R   t#   test_make_weak_keyed_dict_from_dict"  s    c         C   sN   t  d ƒ } t i h  | d <ƒ } t i | ƒ } |  i | | d j ƒ d  S(   Ni   il  (   RB   R   R   RÄ   Rª   t   dict2R   R   (   R   RÆ   R   Rª   (    (    R   t.   test_make_weak_keyed_dict_from_weak_keyed_dict'  s    c         C   sL   t  i ƒ  } t t t |  i ƒ ƒ } x | D] } | i
 | | <q+ W| | f S(   N(   R   RÄ   Rª   t   mapRB   R;   R   R±   R«   R   R¦   (   R   R   R«   Rª   (    (    R   R¶   -  s     c         C   sL   t  i ƒ  } t t t |  i ƒ ƒ } x | D] } | | | i
 <q+ W| | f S(   N(   R   R²   Rª   RÈ   RB   R;   R   R±   R«   R   R¦   (   R   R   R«   Rª   (    (    R   R©   4  s     c   	      C   sþ   | ƒ  } | | | <| | | <|  i t | ƒ d j ƒ | i	 ƒ  \ } } |  i t | ƒ d j ƒ | | j o |  i | | j ƒ n |  i | | j ƒ | i	 ƒ  \ } } |  i t | ƒ d j ƒ | | j o |  i | | j ƒ n |  i | | j ƒ d  S(   Ni   i   i    (   t   klasst   weakdictt   value1t   key1t   value2t   key2R   R   R7   t   popitemR]   RÃ   (	   R   RÉ   RÌ   RË   RÎ   RÍ   RÊ   RÃ   R]   (    (    R   t   check_popitem;  s    	

c         C   s&   |  i t i d t ƒ  d t ƒ  ƒ d  S(   NRÌ   RÎ   (   R   RÐ   R   R²   R    (   R   (    (    R   t   test_weak_valued_dict_popitemM  s    c         C   s&   |  i t i t ƒ  d t ƒ  d ƒ d  S(   Ns   value 1s   value 2(   R   RÐ   R   RÄ   R    (   R   (    (    R   t   test_weak_keyed_dict_popitemQ  s    c         C   sÿ   |  i | | j	 d ƒ | ƒ  } | i | | ƒ } |  i | | j ƒ |  i | i	 | ƒ ƒ |  i | i
 | ƒ | j ƒ |  i | | | j ƒ | i | | ƒ } |  i | | j ƒ |  i | i	 | ƒ ƒ |  i | i
 | ƒ | j ƒ |  i | | | j ƒ d  S(   Ns9   invalid test -- value parameters must be distinct objects(   R   R   RË   RÍ   RÉ   RÊ   t
   setdefaultt   keyR   R¸   t   get(   R   RÉ   RÔ   RË   RÍ   RÊ   R   (    (    R   t   check_setdefaultU  s    	c         C   s#   |  i t i d t ƒ  t ƒ  ƒ d  S(   NRÔ   (   R   RÖ   R   R²   R    (   R   (    (    R   t    test_weak_valued_dict_setdefaultf  s    c         C   s    |  i t i t ƒ  d d ƒ d  S(   Ns   value 1s   value 2(   R   RÖ   R   RÄ   R    (   R   (    (    R   t   test_weak_keyed_dict_setdefaultj  s    c         C   s  | ƒ  } | i | ƒ |  i t | ƒ t | ƒ j ƒ xo | i ƒ  D]a } |  i | i	 | ƒ d ƒ | i
 | ƒ } |  i | | | j ƒ |  i | | i
 | ƒ j ƒ qB Wxj | i ƒ  D]\ } |  i | i	 | ƒ d ƒ | | } |  i | | | j ƒ |  i | | i
 | ƒ j ƒ q´ Wd  S(   Ns(   mysterious new key appeared in weak dicts%   original key disappeared in weak dict(   RÉ   RÊ   t   updateRª   R   R   R7   R¿   R]   R¸   RÕ   RÃ   (   R   RÉ   Rª   RÊ   R]   RÃ   (    (    R   t   check_updaten  s"    	   
c         C   s>   |  i t i h  d t ƒ  <d t ƒ  <t ƒ  t ƒ  <ƒ d  S(   Ni   RŠ   (   R   RÚ   R   R²   R    (   R   (    (    R   t   test_weak_valued_dict_updateƒ  s    c         C   s;   |  i t i h  t ƒ  d <t ƒ  d <t ƒ  d <ƒ d  S(   Ni   i   i   (   R   RÚ   R   RÄ   R    (   R   (    (    R   t   test_weak_keyed_dict_update‡  s    c         C   s‘   t  i ƒ  } t d ƒ } t d ƒ } d | | <d | | <|  i t | ƒ d j ƒ | | =|  i t | ƒ d j ƒ |  i | i	 ƒ  | g j ƒ d  S(   Nt   1t   2t	   somethingi   i   (
   R   RÄ   R}   RB   t   o1R*   R   R   R7   R¿   (   R   R}   R*   Rà   (    (    R   t   test_weak_keyed_delitem‹  s    

c         C   s—   t  i ƒ  } t d ƒ } t d ƒ } | | d <| | d <|  i t | ƒ d j ƒ | d =|  i t | ƒ d j ƒ |  i | i	 ƒ  d | f g j ƒ d  S(   NRÝ   RÞ   Rß   s   something elsei   i   (
   R   R²   R}   RB   Rà   R*   R   R   R7   R¬   (   R   R}   R*   Rà   (    (    R   t   test_weak_valued_delitem–  s    

c         C   s   t  i ƒ  } t d ƒ } |  i t | i | ƒ |  i t | i	 | ƒ |  i t
 | i d ƒ |  i t
 | i	 d ƒ |  i t
 | i d d ƒ d  S(   NRÝ   i   (   R   RÄ   R}   RB   R   R   R%   R³   RN   R´   RG   t   __setitem__(   R   R}   R   (    (    R   t   test_weak_keyed_bad_delitem¡  s    c   	         sê   t  i ƒ  } t ‰  d t f ‡  ‡ d †  ƒ  Y} g  } t d ƒ D] } | | | ƒ q? ~ ‰ x ˆ D] } | i | | <qb W~ | i ƒ  ‰ ˆ i ƒ  t ‰  d } x ˆ D] } | d 7} | | =q¥ W|  i t | ƒ d ƒ |  i | d ƒ d  S(   NR    c              s)   t  Z d „  Z d „  Z ‡  ‡ d †  Z RS(   Nc         C   s   | |  _ d  S(   N(   Rh   R   Rv   (   R   Rh   (    (    R   Rx   ¸  s    c         C   s   t  |  i ƒ S(   N(   t   hashR   Rv   (   R   (    (    R   t   __hash__º  s    c            s"   ˆ  o ˆ d =n |  i | i j S(   Niÿÿÿÿ(   t   mutatet   objsR   Rv   R~   (   R   R~   (   Rç   Rè   (    R   t   __eq__¼  s    (   R   R   Rx   Ræ   Ré   (    (   Rç   Rè   (    R   R    ·  s   		i   i    i   i   (   R   RÄ   R}   t   FalseRç   R    R    t   _[1]R;   Rh   Rè   R   Rv   R¿   t   reverseR   t   countR   R6   R7   (	   R   Rç   Rë   R    R}   Rh   Rè   R   Rí   (    (   Rç   Rè   R   t!   test_weak_keyed_cascading_deletes¯  s$    - 
	 
(   R   R   R±   Rµ   R¹   R»   R¼   Rº   RÅ   RÇ   R¶   R©   RÐ   RÑ   RÒ   RÖ   R×   RØ   RÚ   RÛ   RÜ   Rá   Râ   Rä   Rî   (    (    (    R   R¨   Â  s.   																					(   s   mapping_testst   WeakValueDictionaryTestCasec           B   sS   t  Z d  Z h  d e d ƒ <d e d ƒ <d e d ƒ <Z e i Z d „  Z RS(   s?   Check that WeakValueDictionary conforms to the mapping protocolRÌ   i   RÎ   i   t   key3i   c         C   s   |  i i ƒ  S(   N(   R   t!   _WeakValueDictionaryTestCase__refR®   (   R   (    (    R   t
   _referenceâ  s    (	   R   R   t   __doc__RB   Rñ   R   R²   t	   type2testRò   (    (    (    R   Rï   Þ  s    3	t   WeakKeyDictionaryTestCasec           B   sS   t  Z d  Z h  e d ƒ d <e d ƒ d <e d ƒ d <Z e i Z d „  Z RS(   s=   Check that WeakKeyDictionary conforms to the mapping protocolRÌ   i   RÎ   i   Rð   i   c         C   s   |  i i ƒ  S(   N(   R   t   _WeakKeyDictionaryTestCase__refR®   (   R   (    (    R   Rò   é  s    (	   R   R   Ró   RB   Rö   R   RÄ   Rô   Rò   (    (    (    R   Rõ   å  s    3	sÃ   Doctest for examples in the library reference: libweakref.tex

>>> 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(ExtendedRef, self).__init__(ob, callback)
...         self.__counter = 0
...         for k, v in annotations.iteritems():
...             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(ExtendedRef, self).__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

t
   libreftestc           C   s.   t  i t t t t ƒ t  i t i t	 ƒ d  S(   N(
   t   test_supportt   run_unittestR   R¨   Rï   Rõ   t   run_doctestt   syst   modulesR   (    (    (    R   t	   test_mainA  s
    	t   __main__(   Rd   Rû   t   unittestR1   R   t   testRø   R    R   R   R   R   t   TestCaseR   R   R‹   RB   R¨   t   mapping_testst   BasicTestMappingProtocolRï   Rõ   R÷   t   __test__Rý   R   (   Rø   R   R÷   Rÿ   Rd   R   RB   R   R1   Rý   Rï   R    Rû   R   R  R‹   R   Rõ   R   R¨   R   R  (    (    R   t   ?   s4   									ÿ ÿ RAÿ S	
