o
    Òó·iþA  ã                   @  s  d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZmZmZmZmZmZmZmZmZ ddlmZmZ dd	lmZmZmZmZ dd
lmZ ddlm Z  G dd„ de ƒZ!G dd„ de ƒZ"G dd„ dƒZ#G dd„ de ƒZ$G dd„ deƒZ%G dd„ de ƒZ&dS )z(
Tests for L{twisted.internet.testing}.
é    )Úannotations)ÚCallable)ÚverifyObject)ÚProtocol)ÚIPv4Address)	ÚIAddressÚ
IConnectorÚ	IConsumerÚIListeningPortÚIPushProducerÚIReactorSSLÚIReactorTCPÚIReactorUNIXÚ
ITransport)ÚClientFactoryÚFactory)ÚMemoryReactorÚNonStreamingProducerÚRaisingMemoryReactorÚStringTransport)ÚnamedAny)ÚTestCasec                   @  sÎ   e Zd ZdZd+dd„Zd+dd„Zd+dd	„Zd+d
d„Zd+dd„Zd+dd„Z	d+dd„Z
d+dd„Zd+dd„Zd+dd„Zd+dd„Zd+dd„Zd+dd„Zd+dd„Zd+d d!„Zd+d"d#„Zd+d$d%„Zd+d&d'„Zd+d(d)„Zd*S ),ÚStringTransportTestsz@
    Tests for L{twisted.internet.testing.StringTransport}.
    ÚreturnÚNonec                 C  s   t ƒ | _d S ©N)r   Ú	transport©Úself© r   úhC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\twisted/internet/test/test_testing.pyÚsetUp+   s   zStringTransportTests.setUpc                 C  s:   |   tt| jƒ¡ |   tt| jƒ¡ |   tt| jƒ¡ dS )zq
        L{StringTransport} instances provide L{ITransport}, L{IPushProducer},
        and L{IConsumer}.
        N)Ú
assertTruer   r   r   r   r	   r   r   r   r    Útest_interfaces.   s   z$StringTransportTests.test_interfacesc                 C  s>   t ƒ }t ƒ }| j ||¡ |  | jj|¡ |  | jj|¡ dS )zz
        L{StringTransport.registerProducer} records the arguments supplied to
        it as instance attributes.
        N)Úobjectr   ÚregisterProducerÚassertIsÚproducerÚ	streaming©r   r'   r(   r   r   r    Útest_registerProducer7   s
   z*StringTransportTests.test_registerProducerc                 C  sL   t ƒ }| j |d¡ |  t| jjt ƒ d¡ |  | jj|¡ |  | jj¡ dS )zy
        L{StringTransport.registerProducer} raises L{RuntimeError} if a
        producer is already registered.
        TFN)	r$   r   r%   ÚassertRaisesÚRuntimeErrorr&   r'   r"   r(   )r   r'   r   r   r    Útest_disallowedRegisterProducerB   s   ÿz4StringTransportTests.test_disallowedRegisterProducerc                 C  sb   t ƒ }t ƒ }| j |d¡ | j ¡  |  | jj¡ | j |d¡ |  | jj|¡ |  | jj¡ dS )z±
        L{StringTransport.unregisterProducer} causes the transport to forget
        about the registered producer and makes it possible to register a new
        one.
        FTN)	r$   r   r%   ÚunregisterProducerÚassertIsNoner'   r&   r"   r(   )r   ZoldProducerZnewProducerr   r   r    Útest_unregisterProducerO   s   
z,StringTransportTests.test_unregisterProducerc                 C  s   |   t| jj¡ dS )z€
        L{StringTransport.unregisterProducer} raises L{RuntimeError} if called
        when no producer is registered.
        N)r+   r,   r   r.   r   r   r   r    Útest_invalidUnregisterProducer^   s   z3StringTransportTests.test_invalidUnregisterProducerc                 C  s   |   | jjd¡ dS )zO
        L{StringTransport.producerState} is initially C{'producing'}.
        Ú	producingN)ÚassertEqualr   ÚproducerStater   r   r   r    Útest_initialProducerStatee   s   z.StringTransportTests.test_initialProducerStatec                 C  ó   | j  ¡  |  | j jd¡ dS )zy
        L{StringTransport.pauseProducing} changes the C{producerState} of the
        transport to C{'paused'}.
        ÚpausedN)r   ÚpauseProducingr3   r4   r   r   r   r    Útest_pauseProducingk   ó   
z(StringTransportTests.test_pauseProducingc                 C  s(   | j  ¡  | j  ¡  |  | j jd¡ dS )z}
        L{StringTransport.resumeProducing} changes the C{producerState} of the
        transport to C{'producing'}.
        r2   N)r   r8   ÚresumeProducingr3   r4   r   r   r   r    Útest_resumeProducings   s   

z)StringTransportTests.test_resumeProducingc                 C  r6   )z{
        L{StringTransport.stopProducing} changes the C{'producerState'} of the
        transport to C{'stopped'}.
        ÚstoppedN)r   ÚstopProducingr3   r4   r   r   r   r    Útest_stopProducing|   r:   z'StringTransportTests.test_stopProducingc                 C  ó   | j  ¡  |  t| j j¡ dS )zu
        L{StringTransport.pauseProducing} raises L{RuntimeError} if the
        transport has been stopped.
        N)r   r>   r+   r,   r8   r   r   r   r    Ú test_stoppedTransportCannotPause„   r:   z5StringTransportTests.test_stoppedTransportCannotPausec                 C  r@   )zv
        L{StringTransport.resumeProducing} raises L{RuntimeError} if the
        transport has been stopped.
        N)r   r>   r+   r,   r;   r   r   r   r    Ú!test_stoppedTransportCannotResumeŒ   r:   z6StringTransportTests.test_stoppedTransportCannotResumec                 C  r@   )zz
        L{StringTransport.pauseProducing} raises L{RuntimeError} if the
        transport is being disconnected.
        N)r   ÚloseConnectionr+   r,   r8   r   r   r   r    Ú&test_disconnectingTransportCannotPause”   r:   z;StringTransportTests.test_disconnectingTransportCannotPausec                 C  r@   )z{
        L{StringTransport.resumeProducing} raises L{RuntimeError} if the
        transport is being disconnected.
        N)r   rC   r+   r,   r;   r   r   r   r    Ú'test_disconnectingTransportCannotResumeœ   r:   z<StringTransportTests.test_disconnectingTransportCannotResumec                 C  s*   |   | jj¡ | j ¡  |  | jj¡ dS )zv
        L{StringTransport.loseConnection} toggles the C{disconnecting} instance
        variable to C{True}.
        N)ÚassertFalser   ZdisconnectingrC   r"   r   r   r   r    Ú$test_loseConnectionSetsDisconnecting¤   s   
z9StringTransportTests.test_loseConnectionSetsDisconnectingc                 C  s   t ƒ }|  t|ƒ ¡ |¡ dS )z�
        If a host address is passed to L{StringTransport.__init__}, that
        value is returned from L{StringTransport.getHost}.
        N)r$   r&   r   ÚgetHost©r   Úaddressr   r   r    Útest_specifiedHostAddress­   s   z.StringTransportTests.test_specifiedHostAddressc                 C  s    t ƒ }|  t|d� ¡ |¡ dS )z�
        If a peer address is passed to L{StringTransport.__init__}, that
        value is returned from L{StringTransport.getPeer}.
        )ZpeerAddressN)r$   r&   r   ÚgetPeerrI   r   r   r    Útest_specifiedPeerAddressµ   s   z.StringTransportTests.test_specifiedPeerAddressc                 C  ó   t ƒ  ¡ }|  |t¡ dS )z•
        If no host address is passed to L{StringTransport.__init__}, an
        L{IPv4Address} is returned from L{StringTransport.getHost}.
        N)r   rH   ÚassertIsInstancer   rI   r   r   r    Útest_defaultHostAddress½   ó   
z,StringTransportTests.test_defaultHostAddressc                 C  rN   )z•
        If no peer address is passed to L{StringTransport.__init__}, an
        L{IPv4Address} is returned from L{StringTransport.getPeer}.
        N)r   rL   rO   r   rI   r   r   r    Útest_defaultPeerAddressÅ   rQ   z,StringTransportTests.test_defaultPeerAddressN©r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r#   r*   r-   r0   r1   r5   r9   r<   r?   rA   rB   rD   rE   rG   rK   rM   rP   rR   r   r   r   r    r   &   s*    


	






	





	

r   c                   @  sL   e Zd ZdZddd„Zddd„Zddd	„Zdd
d„Zddd„Zddd„Z	dS )ÚReactorTestszA
    Tests for L{MemoryReactor} and L{RaisingMemoryReactor}.
    r   r   c                 C  ó(   t ƒ }tt|ƒ tt|ƒ tt|ƒ dS )zt
        L{MemoryReactor} provides all of the attributes described by the
        interfaces it advertises.
        N)r   r   r   r   r   )r   ÚmemoryReactorr   r   r    Útest_memoryReactorProvidesÓ   ó   

z'ReactorTests.test_memoryReactorProvidesc                 C  rY   )z{
        L{RaisingMemoryReactor} provides all of the attributes described by the
        interfaces it advertises.
        N)r   r   r   r   r   )r   ZraisingReactorr   r   r    Útest_raisingReactorProvidesÝ   r\   z(ReactorTests.test_raisingReactorProvidesc                 C  s¢   t ƒ }| ddtƒ ¡| ddtƒ d¡fD ]}tt|ƒ | ¡ }tt|ƒ |  |j	d¡ |  |j
d¡ q| dtƒ ¡}tt|ƒ | ¡ }tt|ƒ |  |jd¡ dS )a  
        L{MemoryReactor.connectTCP}, L{MemoryReactor.connectSSL}, and
        L{MemoryReactor.connectUNIX} will return an L{IConnector} whose
        C{getDestination} method returns an L{IAddress} with attributes which
        reflect the values passed.
        ztest.example.comi�   Ns
   /fake/path)r   Z
connectTCPr   Z
connectSSLr   r   ZgetDestinationr   r3   ÚhostÚportZconnectUNIXÚname)r   rZ   Z	connectorrJ   r   r   r    Útest_connectDestinationç   s   þ



z$ReactorTests.test_connectDestinationc                 C  sž   t ƒ }| dtƒ ¡| dtƒ d¡fD ]}tt|ƒ | ¡ }tt|ƒ |  |j	d¡ |  |j
d¡ q| dtƒ ¡}tt|ƒ | ¡ }tt|ƒ |  |jd¡ dS )a–  
        L{MemoryReactor.listenTCP}, L{MemoryReactor.listenSSL} and
        L{MemoryReactor.listenUNIX} will return an L{IListeningPort} whose
        C{getHost} method returns an L{IAddress}; C{listenTCP} and C{listenSSL}
        will have a default host of C{'0.0.0.0'}, and a port that reflects the
        value passed, and C{listenUNIX} will have a name that reflects the path
        passed.
        i2   Nz0.0.0.0s   /path/to/socket)r   Z	listenTCPr   Z	listenSSLr   r
   rH   r   r3   r^   r_   Z
listenUNIXr`   )r   rZ   r_   rJ   r   r   r    Útest_listenDefaultHostþ   s   	þ



z#ReactorTests.test_listenDefaultHostc                 C  óP   t ƒ }tƒ }| |¡ | |¡ |  | ¡ |g¡ | |¡ |  | ¡ g ¡ dS )z>
        Adding, removing, and listing readers works.
        N)r$   r   Z	addReaderr3   Z
getReadersZremoveReader)r   ÚreaderÚreactorr   r   r    Útest_readers  ó   


zReactorTests.test_readersc                 C  rc   )z>
        Adding, removing, and listing writers works.
        N)r$   r   Z	addWriterr3   Z
getWritersZremoveWriter)r   Úwriterre   r   r   r    Útest_writers'  rg   zReactorTests.test_writersNrS   )
rT   rU   rV   rW   r[   r]   ra   rb   rf   ri   r   r   r   r    rX   Î   s    






rX   c                   @  s8   e Zd ZdZddd„Zdd
d„Zddd„Zddd„ZdS )ÚTestConsumerzP
    A very basic test consumer for use with the NonStreamingProducerTests.
    r   r   c                 C  s   g | _ d | _d | _d S r   )Úwritesr'   ÚproducerStreamingr   r   r   r    Ú__init__=  s   
zTestConsumer.__init__r'   r$   r(   Úboolc                 C  s   || _ || _dS )z×
        Registers a single producer with this consumer. Just keeps track of it.

        @param producer: The producer to register.
        @param streaming: Whether the producer is a streaming one or not.
        N©r'   rl   r)   r   r   r    r%   B  s   
zTestConsumer.registerProducerc                 C  s   d| _ d| _dS )zC
        Forget the producer we had previously registered.
        Nro   r   r   r   r    r.   L  s   
zTestConsumer.unregisterProducerÚdataÚbytesc                 C  s   | j  |¡ dS )zz
        Some data was written to the consumer: stores it for later use.

        @param data: The data to write.
        N)rk   Úappend)r   rp   r   r   r    ÚwriteS  s   zTestConsumer.writeNrS   )r'   r$   r(   rn   r   r   )rp   rq   r   r   )rT   rU   rV   rW   rm   r%   r.   rs   r   r   r   r    rj   8  s    



rj   c                   @  s$   e Zd ZdZd	dd„Zd	dd„ZdS )
ÚNonStreamingProducerTestszF
    Tests for the L{NonStreamingProducer} to validate behaviour.
    r   r   c                 C  s¤   t ƒ }t|ƒ}| |d¡ |  |j|¡ |  |j|¡ |  |j¡ tdƒD ]}| 	¡  q%g d¢}|  
|j¡ |  
|j¡ |  
|j¡ |  |j|¡ |  t|j	¡ dS )z�
        When the L{NonStreamingProducer} has resumeProducing called 10 times,
        it writes the counter each time and then fails.
        Fé
   )
ó   0ó   1ó   2ó   3ó   4ó   5ó   6ó   7ó   8ó   9N)rj   r   r%   r&   r'   ÚconsumerrF   rl   Úranger;   r/   r3   rk   r+   r,   )r   r€   r'   Ú_ZexpectedWritesr   r   r    Útest_producesOnly10Timesa  s   
z2NonStreamingProducerTests.test_producesOnly10Timesc                 C  s4   t ƒ }t|ƒ}| |d¡ | ¡  |  t|j¡ dS )zb
        When the L{NonStreamingProducer} is paused, it raises a
        L{RuntimeError}.
        FN)rj   r   r%   r;   r+   r,   r8   )r   r€   r'   r   r   r    Útest_cannotPauseProduction{  s
   z4NonStreamingProducerTests.test_cannotPauseProductionNrS   )rT   rU   rV   rW   rƒ   r„   r   r   r   r    rt   \  s    
rt   c                   @  s   e Zd Zeddd„ƒZ dS )Ú_SupportsNamer   Ústrc                 C  s   d S r   r   r   r   r   r    rT   ‹  s   z_SupportsName.__name__N)r   r†   )rT   rU   rV   Úpropertyr   r   r   r    r…   Š  s    r…   c                   @  s¦   e Zd ZdZd'dd	„Zd(d
d„Zd(dd„Zd(dd„Zd(dd„Zd(dd„Z	d(dd„Z
d(dd„Zd(dd„Zd(dd„Zd(dd„Zd(dd„Zd(d d!„Zd(d"d#„Zd(d$d%„Zd&S ))ÚDeprecationTestsz8
    Deprecations in L{twisted.test.proto_helpers}.
    ÚtestúCallable[..., object]Úobjr…   r   r   c                 C  sd   d|j › �}|  |g¡}|  t|d d ¡ |  dt|ƒ¡ |  ||d d ¡ |  |t|ƒ¡ d S )Nztwisted.internet.testing.r   Úcategoryé   Úmessage)rT   ZflushWarningsr3   ÚDeprecationWarningÚlenZassertInr&   r   )r   r‰   r‹   Únew_pathÚwarningsr   r   r    Úhelper•  s   zDeprecationTests.helperc                 C  ó   ddl m} |  | j|¡ d S )Nr   )ÚAccumulatingProtocol)Útwisted.test.proto_helpersr•   r“   Útest_accumulatingProtocol)r   r•   r   r   r    r—   �  ó   z*DeprecationTests.test_accumulatingProtocolc                 C  r”   )Nr   )ÚLineSendingProtocol)r–   r™   r“   Útest_lineSendingProtocol)r   r™   r   r   r    rš   ¢  r˜   z)DeprecationTests.test_lineSendingProtocolc                 C  r”   )Nr   )ÚFakeDatagramTransport)r–   r›   r“   Útest_fakeDatagramTransport)r   r›   r   r   r    rœ   §  r˜   z+DeprecationTests.test_fakeDatagramTransportc                 C  r”   )Nr   )r   )r–   r   r“   Útest_stringTransport)r   r   r   r   r    r�   ¬  r˜   z%DeprecationTests.test_stringTransportc                 C  r”   )Nr   )Ú StringTransportWithDisconnection)r–   rž   r“   Ú%test_stringTransportWithDisconnection)r   rž   r   r   r    rŸ   ±  s   ÿz6DeprecationTests.test_stringTransportWithDisconnectionc                 C  r”   )Nr   )ÚStringIOWithoutClosing)r–   r    r“   Útest_stringIOWithoutClosing)r   r    r   r   r    r¡   ¸  r˜   z,DeprecationTests.test_stringIOWithoutClosingc                 C  r”   )Nr   )Ú_FakeConnector)r–   r¢   r“   Útest__fakeConnector)r   r¢   r   r   r    r£   ½  r˜   z$DeprecationTests.test__fakeConnectorc                 C  r”   )Nr   )Ú	_FakePort)r–   r¤   r“   Útest__fakePort)r   r¤   r   r   r    r¥   Â  r˜   zDeprecationTests.test__fakePortc                 C  r”   )Nr   )r   )r–   r   r“   Útest_memoryReactor)r   r   r   r   r    r¦   Ç  r˜   z#DeprecationTests.test_memoryReactorc                 C  r”   )Nr   )ÚMemoryReactorClock)r–   r§   r“   Útest_memoryReactorClock)r   r§   r   r   r    r¨   Ì  r˜   z(DeprecationTests.test_memoryReactorClockc                 C  r”   )Nr   )r   )r–   r   r“   Útest_raisingMemoryReactor)r   r   r   r   r    r©   Ñ  r˜   z*DeprecationTests.test_raisingMemoryReactorc                 C  r”   )Nr   )r   )r–   r   r“   Útest_nonStreamingProducer)r   r   r   r   r    rª   Ö  r˜   z*DeprecationTests.test_nonStreamingProducerc                 C  r”   )Nr   )ÚwaitUntilAllDisconnected)r–   r«   r“   Útest_waitUntilAllDisconnected)r   r«   r   r   r    r¬   Û  r˜   z.DeprecationTests.test_waitUntilAllDisconnectedc                 C  r”   )Nr   )ÚEventLoggingObserver)r–   r­   r“   Útest_eventLoggingObserver)r   r­   r   r   r    r®   à  r˜   z*DeprecationTests.test_eventLoggingObserverN)r‰   rŠ   r‹   r…   r   r   rS   )rT   rU   rV   rW   r“   r—   rš   rœ   r�   rŸ   r¡   r£   r¥   r¦   r¨   r©   rª   r¬   r®   r   r   r   r    rˆ   �  s"    













rˆ   N)'rW   Ú
__future__r   Útypingr   Zzope.interface.verifyr   Ztyping_extensionsr   Ztwisted.internet.addressr   Ztwisted.internet.interfacesr   r   r	   r
   r   r   r   r   r   Ztwisted.internet.protocolr   r   Ztwisted.internet.testingr   r   r   r   Ztwisted.python.reflectr   Ztwisted.trial.unittestr   r   rX   rj   rt   r…   rˆ   r   r   r   r    Ú<module>   s$   , )j$.