ó
L]c           @   s  d  d l  Z  d  d l Z y d  d l m Z Wn e k
 rE d Z n Xd  d l Z d  d l m Z d  d l m	 Z	 d  d l
 Z
 d  d l m Z m Z m Z m Z d  d l m Z m Z m Z m Z d Z e rù e e ƒ Z e e ƒ Z e e ƒ e Z n  d „  Z d	 e f d
 „  ƒ  YZ d S(   iÿÿÿÿN(   t   getrefcount(   t   pprint(   t   TestCase(   t   BaseZMQTestCaset   SkipTestt	   skip_pypyt   PYPY(   t   unicodet   bytest   bt   ut   xc         C   sB   x; t  d ƒ D]- } t |  ƒ | d k r- d St j d ƒ q Wd S(   s³   wait for refcount on an object to drop to an expected value
    
    Necessary because of the zero-copy gc thread,
    which can take some time to receive its DECREF message.
    i2   i   Ngš™™™™™©?(   t   ranget   grct   timet   sleep(   t   objt   rct   i(    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   await_gc   s    t	   TestFramec           B   sÝ   e  Z e d  „  ƒ Z d „  Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 d „  Z e d	 „  ƒ Z d
 „  Z d „  Z d „  Z e d „  ƒ Z d „  Z d „  Z d „  Z e d „  ƒ Z d „  Z RS(   c         C   s–   x t  d d ƒ D]~ } d | t } |  j t | ƒ d ƒ t j | d t ƒ} |  j t | ƒ d ƒ ~ t | d ƒ |  j t | ƒ d ƒ ~ q Wd S(   s/   Message above 30 bytes are never copied by 0MQ.i   i   i   t   copyi   N(   R   R   t   assertEqualR   t   zmqt   Framet   FalseR   (   t   selfR   t   st   m(    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_above_30-   s    c         C   s`   xY t  d ƒ D]K } d | t } t j | ƒ } t | ƒ } t | ƒ } |  j | | ƒ q Wd S(   s+   Test the str representations of the Frames.i   i   N(   R   R   R   R   t   strR	   R   (   R   R   R   R   t   m_strt   m_str_b(    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_str:   s    c         C   s‰   x‚ t  d d ƒ D]q } d | t } t j | ƒ } | j } |  j | | j ƒ t sk |  j | | k	 ƒ n  |  j | | j k ƒ q Wd S(   s   Test the Frame.bytes property.i   i   i   N(   R   R   R   R   R   R   R   t   assert_(   R   R   R   R   R	   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt
   test_bytesC   s    	c         C   s…   t  d ƒ } |  j t t j | ƒ x\ t d ƒ D]N } d | t  d ƒ } t j | j d ƒ ƒ } |  j | t | j	 d ƒ ƒ q/ Wd S(   s/   Test the unicode representations of the Frames.t   asdfi   i   s   Â§t   utf8N(
   R
   t   assertRaisest	   TypeErrorR   R   R   t   encodeR   R   R   (   R   R   R   R   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_unicodeP   s    c         C   sT   xM t  d ƒ D]? } d | t } t j | ƒ } |  j t | ƒ t | ƒ ƒ q Wd S(   s   Test the len of the Frames.i   i   N(   R   R   R   R   R   t   len(   R   R   R   R   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_lenY   s    c         C   s£  xœt  d d ƒ D]‹} d | t } d } |  j t | ƒ | ƒ t j | d t ƒ} | d 7} |  j t | ƒ | ƒ t j | ƒ } | d 7} |  j t | ƒ | ƒ | j } | t	 7} |  j t | ƒ | ƒ |  j | t
 t | ƒ ƒ ƒ |  j | t | ƒ ƒ |  j | | j ƒ ~ | d 8} |  j t | ƒ | ƒ | t	 8} ~ |  j t | ƒ | ƒ ~ | d 8} t | | ƒ |  j t | ƒ | ƒ |  j | d ƒ ~ q Wd S(   s-   Run through a ref counting cycle with a copy.i   i   i   R   i   N(   R   R   R   R   R   R   R   R   t   buffert   view_rcR	   R   R   R   (   R   R   R   R   R   t   m2t   buf(    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_lifecycle1`   s8    

	



c         C   s¶  x¯t  d d ƒ D]ž} d | t } d } |  j t | ƒ | ƒ t j | d t ƒ} | d 7} |  j t | ƒ | ƒ t j | ƒ } | d 7} |  j t | ƒ | ƒ | j } | t	 7} |  j t | ƒ | ƒ |  j | t
 t | ƒ ƒ ƒ |  j | t | ƒ ƒ |  j | | j ƒ |  j | | j ƒ ~ |  j t | ƒ | ƒ ~ | t	 8} | d 8} |  j t | ƒ | ƒ ~ | d 8} t | | ƒ |  j t | ƒ | ƒ |  j | d ƒ ~ q Wd S(   s7   Run through a different ref counting cycle with a copy.i   i   i   R   i   N(   R   R   R   R   R   R   R   R   R,   R-   R	   R   R   R   (   R   R   R   R   R   R.   R/   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_lifecycle2„   s:    

	



c         C   s•   t  j d d t d t ƒ} |  j | j j ƒ t  j | ƒ } |  j | j ƒ ~ x. t d ƒ D]  } | j rp Pn  t	 j
 d ƒ q] W|  j | j ƒ d  S(   NR$   R   t   tracki
   gš™™™™™¹?(   R   R   R   t   Truet   assertFalset   trackert   donet   MessageTrackerR   R   R   t
   assertTrue(   R   R   t   pmR   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_tracker¨   s    	c         C   sd   t  j d d t ƒ} |  j | j d  ƒ t j | ƒ } |  j | j d  ƒ |  j t t  j	 | ƒ d  S(   NR$   R2   (
   R   R   R   R   R5   t   NoneR   R&   t
   ValueErrorR7   (   R   R   R.   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_no_trackerµ   s
    c         C   sí   t  j d d t d t ƒ} t  j d d t d t ƒ} t  j | | ƒ } |  j | j j ƒ |  j | j ƒ |  j t  j	 | j
 d ƒ ~ t j d ƒ |  j t  j	 | j
 d ƒ |  j | j ƒ ~ |  j | j
 ƒ  d  k ƒ |  j | j ƒ d  S(   NR$   R   R2   t   whodagš™™™™™¹?(   R   R   R   R3   R7   R4   R5   R6   R&   t   NotDonet   waitR   R   R8   R;   (   R   R   R.   t   mt(    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_multi_tracker¼   s    c         C   s%   t  d ƒ } t j t | ƒ ƒ } d S(   s   test using a buffer as inputs8   Â§Â§Â¶â€¢ÂªÂºËœÂµÂ¬Ëšâ€¦âˆ†Ë™Ã¥ÃŸâˆ‚Â©Å“âˆ‘Â´â€ â‰ˆÃ§âˆšN(   R	   R   R   t
   memoryview(   R   t   insR   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_buffer_inÍ   s    c         C   s3   |  j  t t j d ƒ |  j  t t j t ƒ  ƒ d S(   s   test using a bad objecti   N(   R&   R'   R   R   t   object(   R   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_bad_buffer_inÒ   s    c         C   sm   t  d ƒ } t j | ƒ } | j } |  j t | t ƒ ƒ |  j | | j k ƒ |  j | j | j k ƒ d S(   s   receiving buffered outputs8   Â§Â§Â¶â€¢ÂªÂºËœÂµÂ¬Ëšâ€¦âˆ†Ë™Ã¥ÃŸâˆ‚Â©Å“âˆ‘Â´â€ â‰ˆÃ§âˆšN(   R	   R   R   R,   R8   t
   isinstanceRC   R"   (   R   RD   R   t   outb(    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_buffer_out×   s    	c         C   sÜ   t  j d k  r t d ƒ ‚ n  t d ƒ } t | ƒ } t j | ƒ } | j } |  j | j	 d ƒ |  j | j
 | f ƒ |  j | j ƒ  | ƒ t | ƒ } |  j | j	 d ƒ |  j | j
 | f ƒ |  j | j ƒ  | ƒ d S(   s   memoryview shape infoi   s!   only test memoryviews on Python 3s8   Â§Â§Â¶â€¢ÂªÂºËœÂµÂ¬Ëšâ€¦âˆ†Ë™Ã¥ÃŸâˆ‚Â©Å“âˆ‘Â´â€ â‰ˆÃ§âˆši   N(   i   (   t   syst   version_infoR   R	   R*   R   R   R,   R   t   ndimt   shapet   tobytesRC   (   R   t   datat   nt   ft   view1t   view2(    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_memoryview_shapeà   s    	c         C   s\  |  j  t j t j ƒ \ } } d } t j | ƒ } |  j | | j ƒ | j | d t ƒt j	 d ƒ |  j | | j ƒ | j | d t ƒt j	 d ƒ |  j | | j ƒ | j | d t
 ƒt j	 d ƒ |  j | | j ƒ | j | d t
 ƒt j	 d ƒ |  j | | j ƒ x0 t d ƒ D]" } | j ƒ  } |  j | | ƒ qW|  j | | j ƒ d S(   s9   ensure that a message remains intact after multiple sendst   messageR   gš™™™™™¹?i   N(   t   create_bound_pairR   t   PAIRR   R   R   t   sendR   R   R   R3   R   t   recv(   R   t   aR	   R   R   R   t   r(    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_multisendñ   s(    c         C   s£   t  j d  \ } } | d k p4 | d k o4 | d k sF t d ƒ ‚ n  d } t | ƒ } t j | ƒ } | j } | j ƒ  } |  j | | ƒ |  j | j	 | ƒ d S(   s   test messages from memoryviewi   i   i   s!   memoryviews only in python >= 2.7t   carrotjuiceN(
   RK   RL   R   RC   R   R   R,   RO   R   R   (   R   t   majort   minorR   t   vR   R/   t   s2(    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_memoryview	  s    $	c         C   s
  d d } |  j  t j t j ƒ \ } } xÛ t d ƒ D]Í } | j | d t ƒ| j d t ƒ } | j } | j } ~ xŠ t d ƒ D]| } d d | d } | j | d t ƒ| j d t ƒ }	 | j	 ƒ  }
 |  j
 |
 | ƒ |  j
 | | ƒ |  j
 |	 j | ƒ q‚ Wq5 Wd	 S(
   s$   check for clobbering message bufferss    i@   i    R   i   s   ÿi(   i
   N(   RW   R   RX   R   RY   R   RZ   R   R,   RO   R   (   R   t   nullt   sat   sbR   R   t   mbR/   t   ffR.   R	   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_noncopying_recv  s     
		c         C   s  y  d d l  } d d l m } Wn t k
 r? t d ƒ ‚ n Xt j d k  r^ t d ƒ ‚ n  | j j } g  t	 d ƒ D] } | d d ƒ ^ qw } |  j
 t j t j ƒ \ } } t t d	 d
 g } x?t	 d t | ƒ d ƒ D]$} | |  }	 xv | D]n }
 | j |	 d |
 ƒ} | j | d t ƒ| j d t ƒ } | j | | j ƒ j | j ƒ } | | | ƒ qó W| j |	 d d t f d t f d g ƒ} d | d <d | d <d | d <| j | d t ƒ| j d t ƒ } | j | | j ƒ j | j ƒ } | | | ƒ qÜ Wd S(   s%   test non-copying numpy array messagesiÿÿÿÿN(   t   assert_array_equals   requires numpyi   i   s/   requires new-style buffer interface (py >= 2.7)i   s   >i4t   Bi   t   dtypeR   R[   R	   t   ct   a32i   g    eÍÍAs   hello there(   i   i   (   Rm   Rn   (   t   numpyt   numpy.testingRj   t   ImportErrorR   RK   RL   t   randomt   randintR   RW   R   RX   t   intt   floatR*   t   emptyRY   R   RZ   t
   frombufferRl   t   reshapeRN   (   R   Ro   Rj   t   randR   t   shapesR[   R	   t   dtypesRN   t   dtt   At   msgRk   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_buffer_numpy,  s6    ( 
!*


!c         C   s  t  j d ƒ } |  j | j ƒ |  j t  j t  j ƒ \ } } | j d d g ƒ |  j | d t ƒ} |  j	 | j ƒ t  j
 ƒ  d d k r® t r® |  j	 | j t  j ƒ ƒ n  |  j | d t ƒ} |  j | j ƒ t  j
 ƒ  d d k rt r|  j | j t  j ƒ ƒ n  d S(   s   test Frame.more attributet   hellot   hit   thereR   i    i   N(   R   R   R4   t   moreRW   RX   t   send_multipartRZ   R   R8   t   zmq_version_infoR   t   gett   MORE(   R   t   frameRe   Rf   (    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   test_frame_moreN  s    (   t   __name__t
   __module__R   R   R!   R#   R)   R+   R0   R1   R:   R=   RB   RE   RG   RJ   RU   R]   Rc   Ri   R   R‰   (    (    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyR   +   s&   						$$								"(   R   RK   R    R   Rq   R;   R   R   t   unittestR   R   t	   zmq.testsR   R   R   R   t   zmq.utils.strtypesR   R   R	   R
   R   t   rc0RC   Ra   R-   R   R   (    (    (    s5   lib/python2.7/site-packages/zmq/tests/test_message.pyt   <module>   s$   
""	