ó
[³XMc           @   sõ   d  d l  Z  d  d l Z y d  d l Z Wn e k
 rA d Z n Xd  d l m Z d  d l m Z d  d l	 m
 Z
 m Z d d d „  ƒ  YZ e j e ƒ d e j f d „  ƒ  YZ d	 e j f d
 „  ƒ  YZ e d k rñ d e j _ d e j _ n  d S(   iÿÿÿÿN(   t   unittest(   t
   threadable(   t   defert   reactort
   TestObjectc           B   s&   e  Z d  g Z d Z d Z d „  Z RS(   t   aMethodiÿÿÿÿi   c         C   si   xb t  d ƒ D]T } |  j |  j |  _ |  _ |  j |  j |  _ |  j d k s t d |  j f ‚ q Wd  S(   Ni
   i    s   z == %d, not 0 as expected(   t   xranget   yt   xt   zt   AssertionError(   t   selft   i(    (    s@   /usr/lib/python2.7/dist-packages/twisted/test/test_threadable.pyR      s    (   t   __name__t
   __module__t   synchronizedR   R   R   (    (    (    s@   /usr/lib/python2.7/dist-packages/twisted/test/test_threadable.pyR      s   	t   SynchronizationTestCasec           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s^   t  t d ƒ r8 |  j t j t j ƒ  ƒ t j d ƒ n  t j ƒ  } t j d | j	 d ƒ | S(   sì   
        Reduce the CPython check interval so that thread switches happen much
        more often, hopefully exercising more possible race conditions.  Also,
        delay actual test startup until the reactor has been started.
        t   getcheckintervali   i    N(   t   hasattrt   syst
   addCleanupt   setcheckintervalR   R   t   DeferredR   t	   callLatert   callbackt   None(   R   t   d(    (    s@   /usr/lib/python2.7/dist-packages/twisted/test/test_threadable.pyt   setUp   s    c            sc   g  ‰  t  j d ‡  f d †  ƒ } | j ƒ  | j ƒ  |  j ˆ  d d ƒ |  j t j ƒ  d ƒ d  S(   Nt   targetc              s   ˆ  j  t j ƒ  ƒ S(   N(   t   appendR   t   isInIOThread(    (   t   foreignResult(    s@   /usr/lib/python2.7/dist-packages/twisted/test/test_threadable.pyt   <lambda>3   s    i    s#   Non-IO thread reported as IO threads#   IO thread reported as not IO thread(   t	   threadingt   Threadt   startt   joint   failIft
   failUnlessR   R   (   R   t   t(    (   R   s@   /usr/lib/python2.7/dist-packages/twisted/test/test_threadable.pyt   testIsInIOThread1   s    

c            sž   t  ƒ  ‰ g  ‰  ‡  ‡ f d †  } g  } x= t d ƒ D]/ } t j d | ƒ } | j | ƒ | j ƒ  q4 Wx | D] } | j ƒ  qn Wˆ  rš t j ˆ  ƒ ‚ n  d  S(   Nc             sR   y% x t  d ƒ D] }  ˆ j ƒ  q WWn& t k
 rM } ˆ  j t | ƒ ƒ n Xd  S(   Niè  (   R   R   R
   R   t   str(   R   t   e(   t   errorst   o(    s@   /usr/lib/python2.7/dist-packages/twisted/test/test_threadable.pyt   callMethodLots?   s
    i   R   (	   R   t   rangeR!   R"   R   R#   R$   R    t   FailTest(   R   R-   t   threadsR   R'   (    (   R+   R,   s@   /usr/lib/python2.7/dist-packages/twisted/test/test_threadable.pyt   testThreadedSynchronization:   s    	c         C   s.   t  ƒ  } x t d ƒ D] } | j ƒ  q Wd  S(   Niè  (   R   R   R   (   R   R,   R   (    (    s@   /usr/lib/python2.7/dist-packages/twisted/test/test_threadable.pyt   testUnthreadedSynchronizationR   s    	(   R   R   R   R(   R1   R2   (    (    (    s@   /usr/lib/python2.7/dist-packages/twisted/test/test_threadable.pyR      s   				t   SerializationTestCasec           B   s   e  Z d  „  Z d „  Z RS(   c         C   sP   t  j ƒ  } t | ƒ } t j | ƒ } t j | ƒ } |  j t | | ƒ ƒ d  S(   N(   R   t   XLockt   typet   picklet   dumpst   loadsR&   t
   isinstance(   R   t   lockt   lockTypet
   lockPicklet   newLock(    (    s@   /usr/lib/python2.7/dist-packages/twisted/test/test_threadable.pyt   testPicklingX   s
    c         C   s:   d } t  j | ƒ } t  j | d ƒ } t  j | ƒ } d  S(   Ns6   ctwisted.python.threadable
unpickle_lock
p0
(tp1
Rp2
.i   (   R6   R8   R7   (   R   R<   R:   t	   newPickleR=   (    (    s@   /usr/lib/python2.7/dist-packages/twisted/test/test_threadable.pyt   testUnpickling_   s    (   R   R   R>   R@   (    (    (    s@   /usr/lib/python2.7/dist-packages/twisted/test/test_threadable.pyR3   W   s   	s   Platform lacks thread support(    (   R   R6   R!   t   ImportErrorR   t   twisted.trialR    t   twisted.pythonR   t   twisted.internetR   R   R   t   synchronizet   TestCaseR   R3   R1   t   skipR>   (    (    (    s@   /usr/lib/python2.7/dist-packages/twisted/test/test_threadable.pyt   <module>   s   
: