ó
[³XMc           @   sŽ   d  Z  e Z d d l Z d d l m Z d d l m Z d d l m	 Z	 d d l
 m Z m Z d e	 f d „  ƒ  YZ e ƒ  j e j ƒ  ƒ d S(	   s0   
Tests for implementations of L{IReactorFDSet}.
iÿÿÿÿN(   t   IReactorFDSet(   t   FileDescriptor(   t   ReactorBuilder(   t   EINPROGRESSt   EWOULDBLOCKt   ReactorFDSetTestsBuilderc           B   sq   e  Z d  Z e g Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 „  Z RS(   s>   
    Builder defining tests relating to L{IReactorFDSet}.
    c         C   s  t  j  ƒ  } | j d ƒ | j d ƒ |  j | j ƒ t  j  ƒ  } |  j | j ƒ | j t ƒ y! | j d | j ƒ  d f ƒ WnR t  j	 k
 rµ } |  j
 | j d t t f ƒ n  t k
 rÔ } |  j d ƒ n X| j ƒ  \ } } |  j | j ƒ | | f S(   sL   
        Return the two sockets which make up a new TCP connection.
        s	   127.0.0.1i    i   sB   Connect should have succeeded or raised EINPROGRESS or EWOULDBLOCK(   s	   127.0.0.1i    (   t   sockett   bindt   listent
   addCleanupt   closet   setblockingt   Falset   connectt   getsocknamet   errort   assertInt   argsR   R   t	   Exceptiont   failt   accept(   t   selft   serverSockett   clientt   et   servert   addr(    (    sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyt   _connectedPair   s     ! c         C   sC   |  j  ƒ  } |  j ƒ  \ } } t | ƒ } | j | _ | | | f S(   N(   t   buildReactorR   R   t   fileno(   R   t   reactorR   R   t   fd(    (    sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyt   _simpleSetup3   s
    c            s[   |  j  ƒ  \ ‰ ‰  } ‡  ‡ f d †  } | ˆ  _ ˆ j ˆ  ƒ | j d ƒ |  j ˆ ƒ d S(   s©   
        C{reactor.addReader()} accepts an L{IReadDescriptor} provider and calls
        its C{doRead} method when there may be data available on its C{fileno}.
        c              s   ˆ j  ˆ  ƒ ˆ j ƒ  d  S(   N(   t   removeReadert   stop(    (   R   R   (    sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyt   removeAndStopE   s    t   xN(   R    t   doReadt	   addReadert   sendallt
   runReactor(   R   R   R#   (    (   R   R   sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyt   test_addReader>   s    	c            s   ˆ  j  ƒ  \ } } } ‡  f d †  } | | _ | j | ƒ | j | ƒ | j d ƒ | j d | j d | j ƒ ˆ  j | ƒ d S(   sÈ   
        L{reactor.removeReader()} accepts an L{IReadDescriptor} provider
        previously passed to C{reactor.addReader()} and causes it to no longer
        be monitored for input events.
        c              s   ˆ  j  d ƒ d  S(   Ns   doRead should not be called(   R   (    (   R   (    sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyR   Y   s    R$   i    N(   R    R%   R&   R!   R'   t	   callLaterR"   R(   (   R   R   R   R   R   (    (   R   sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyt   test_removeReaderQ   s    	c            sN   |  j  ƒ  \ ‰ ‰  } ‡  ‡ f d †  } | ˆ  _ ˆ j ˆ  ƒ |  j ˆ ƒ d S(   s³   
        C{reactor.addWriter()} accepts an L{IWriteDescriptor} provider and
        calls its C{doWrite} method when it may be possible to write to its
        C{fileno}.
        c              s   ˆ j  ˆ  ƒ ˆ j ƒ  d  S(   N(   t   removeWriterR"   (    (   R   R   (    sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyR#   q   s    N(   R    t   doWritet	   addWriterR(   (   R   R   R#   (    (   R   R   sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyt   test_addWriteri   s
    	c         C   så   |  j  ƒ  } t | d | d ƒ } t | d | ƒ } t | d | ƒ } |  j ƒ  \ } } |  j | | ƒ  ƒ |  j | | ƒ  ƒ | | ƒ |  j | | ƒ  ƒ |  j | | ƒ  ƒ | | ƒ |  j | | ƒ  ƒ |  j | | ƒ  ƒ d S(   s=   
        Helper for getReaders and getWriters tests.
        t   gett   st   addt   removeN(   R   t   getattrR   t   assertNotInR   (   R   t   kindR   R0   R2   R3   R   R   (    (    sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyt
   _getFDTest{   s    

c         C   s   |  j  d ƒ d S(   s¡   
        L{IReactorFDSet.getReaders} reflects the additions and removals made
        with L{IReactorFDSet.addReader} and L{IReactorFDSet.removeReader}.
        t   ReaderN(   R7   (   R   (    (    sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyt   test_getReaders’   s    c            st   ˆ  j  ƒ  \ } } } ‡  f d †  } | | _ | j | ƒ | j | ƒ | j d | j d | j ƒ ˆ  j | ƒ d S(   sÊ   
        L{reactor.removeWriter()} accepts an L{IWriteDescriptor} provider
        previously passed to C{reactor.addWriter()} and causes it to no longer
        be monitored for outputability.
        c              s   ˆ  j  d ƒ d  S(   Ns   doWrite should not be called(   R   (    (   R   (    sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyR   ¢   s    i    N(   R    R-   R.   R,   R*   R"   R(   (   R   R   R   R   R   (    (   R   sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyt   test_removeWriterš   s    	c         C   s   |  j  d ƒ d S(   s¡   
        L{IReactorFDSet.getWriters} reflects the additions and removals made
        with L{IReactorFDSet.addWriter} and L{IReactorFDSet.removeWriter}.
        t   WriterN(   R7   (   R   (    (    sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyt   test_getWriters±   s    c            s¸   ˆ  j  ƒ  } ˆ  j ƒ  \ } } } ‡  f d †  | _ ‡  f d †  | _ | j d ƒ | j | ƒ | j | ƒ | j ƒ  } | j d | j d | j	 ƒ ˆ  j
 | ƒ ˆ  j | | g ƒ d S(   s¯   
        C{reactor.removeAll()} removes all registered L{IReadDescriptor}
        providers and all registered L{IWriteDescriptor} providers and returns
        them.
        c              s   ˆ  j  d ƒ S(   Ns   doRead should not be called(   R   (    (   R   (    sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyt   <lambda>Ã   s    c              s   ˆ  j  d ƒ S(   Ns   doWrite should not be called(   R   (    (   R   (    sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyR=   Ä   s    R$   i    N(   R   R    R%   R-   R'   R&   R.   t	   removeAllR*   R"   R(   t   assertEqual(   R   R   R   R   t   removed(    (   R   sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyt   test_removeAll¹   s    (   t   __name__t
   __module__t   __doc__R    t   requiredInterfacesR   R    R)   R+   R/   R7   R9   R:   R<   RA   (    (    (    sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyR      s   										(   RD   t   typet   __metaclass__R   t   twisted.internet.interfacesR    t   twisted.internet.abstractR   t#   twisted.internet.test.reactormixinsR   t   twisted.internet.tcpR   R   R   t   globalst   updatet   makeTestCaseClasses(    (    (    sD   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_fdset.pyt   <module>   s   Â