o
    b                     @   s   d Z ddlZddl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 ddlmZ dejv ZzddlZdd	lmZ W n eyM   erG dZdZY nw edurdG d
d dejZG dd dejZG dd deZG dd dejZdS )z+
Tests for L{twisted.internet.serialport}.
    N)Protocol)	DoNothing)Failure)platform)unittestTWISTED_FORCE_SERIAL_TESTS)
serialportc                       s,   e Zd Z fddZdd Zdd Z  ZS )RegularFileSerialc                    s"   t  j|i | || _|| _d S N)super__init__captured_argscaptured_kwargs)selfargskwargs	__class__ L/usr/lib/python3/dist-packages/twisted/internet/test/test_win32serialport.pyr   $   s   
zRegularFileSerial.__init__c                 C      d S r
   r   r   r   r   r   _reconfigurePort)      z"RegularFileSerial._reconfigurePortc                 C   r   r
   r   r   r   r   r   _reconfigure_port,   r   z#RegularFileSerial._reconfigure_port)__name__
__module____qualname__r   r   r   __classcell__r   r   r   r   r	   #   s    r	   c                       s(   e Zd ZeZ fddZdd Z  ZS )RegularFileSerialPortc                    s@   | d}d|v r|d= tjj| _|| j_t j|i | d S )NcbInQue)getserialwin32COMSTATcomstatr    r   r   )r   r   r   r    r   r   r   r   2   s   

zRegularFileSerialPort.__init__c                 C   s
   d| j fS )NT)r%   r   r   r   r   _clearCommError=      
z%RegularFileSerialPort._clearCommError)r   r   r   r	   _serialFactoryr   r&   r   r   r   r   r   r   /   s    r   c                   @   s   e Zd Zdd Zdd ZdS )CollectReceivedProtocolc                 C   s
   g | _ d S r
   )received_datar   r   r   r   r   B   r'   z CollectReceivedProtocol.__init__c                 C   s   | j | d S r
   )r*   append)r   datar   r   r   dataReceivedE      z$CollectReceivedProtocol.dataReceivedN)r   r   r   r   r-   r   r   r   r   r)   A   s    r)   c                   @   sz   e Zd ZdZese sdZnesdZdd Z	dd Z
dd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd ZdS )Win32SerialPortTestszB
    Minimal testing for Twisted's Win32 serial port support.
    zThis test must run on Windows.z-Windows serial port support is not available.c                 C   sl   t  | _t | _t | _tj	| jd| _d}t
| jd}|| W d    d S 1 s/w   Y  d S )Nfake_serials   1234wb)r   protocolr   reactortempfilemkdtemp	directoryospathjoinopenwrite)r   r,   fr   r   r   setUpU   s   
"zWin32SerialPortTests.setUpc                 C   s   t | j d S r
   )shutilrmtreer6   r   r   r   r   tearDowna   r.   zWin32SerialPortTests.tearDownc                 C   s   t | j| j| j}| | jf|jj |jj}| d|d  | tj	|d  | tj
|d  | tj|d  | d|d  | d|d  | d	|d
  |ttd d	S )zx
        Test correct positional and keyword arguments have been
        passed to the C{serial.Serial} object.
        i%  baudratebytesizeparitystopbitsr   xonxoffrtsctsNtimeoutCleanup)r   r2   r8   r3   assertEqual_serialr   r   r"   	EIGHTBITSPARITY_NONESTOPBITS_ONEconnectionLostr   	Exception)r   portr   r   r   r   test_serialPortDefaultArgsd   s   z/Win32SerialPortTests.test_serialPortDefaultArgsc                 C   sf   |  d| jj t| j| j| j}|  d|j |  d| jj |  || jj |tt	d dS )z
        Test the port is connected at initialization time, and
        C{Protocol.makeConnection} has been called on the desired protocol.
        r      rH   N)
rI   r2   	connectedr   r8   r3   	transportrN   r   rO   )r   rP   r   r   r   !test_serialPortInitiallyConnectedw   s   z6Win32SerialPortTests.test_serialPortInitiallyConnectedc                 C   sb   t | j| j| j|d}|  |d |d |d |  |  |tt	d d S )Nr2   deviceNameOrPortNumberr3   r        s   abcds   ABCDrH   )
r   r2   r8   r3   serialReadEventr;   serialWriteEventrN   r   rO   )r   r    rP   r   r   r   common_exerciseHandleAccess   s   


z0Win32SerialPortTests.common_exerciseHandleAccessc                 C      | j dd d S NFr    r[   r   r   r   r   test_exerciseHandleAccess_1   r.   z0Win32SerialPortTests.test_exerciseHandleAccess_1c                 C   r\   NTr^   r_   r   r   r   r   test_exerciseHandleAccess_2   r.   z0Win32SerialPortTests.test_exerciseHandleAccess_2c                 C   sR   t  }t|| j| j|d}|  | tdd |jD  |t	t
d d S )NrV   c                 s   s    | ]}t |tV  qd S r
   )
isinstancebytes).0dr   r   r   	<genexpr>   s    zEWin32SerialPortTests.common_serialPortReturnsBytes.<locals>.<genexpr>rH   )r)   r   r8   r3   rY   
assertTrueallr*   rN   r   rO   )r   r    r2   rP   r   r   r   common_serialPortReturnsBytes   s   z2Win32SerialPortTests.common_serialPortReturnsBytesc                 C   r\   r]   rj   r   r   r   r   test_serialPortReturnsBytes_1   r.   z2Win32SerialPortTests.test_serialPortReturnsBytes_1c                 C   r\   ra   rk   r   r   r   r   test_serialPortReturnsBytes_2   r.   z2Win32SerialPortTests.test_serialPortReturnsBytes_2N)r   r   r   __doc__testingForcedr   	isWindowsskipr   r=   r@   rQ   rU   r[   r`   rb   rj   rl   rm   r   r   r   r   r/   I   s"    r/   )rn   r7   r>   r4   twisted.internet.protocolr   %twisted.internet.test.test_serialportr   twisted.python.failurer   twisted.python.runtimer   twisted.trialr   environro   r"   twisted.internetr   ImportErrorSerialr	   
SerialPortr   r)   TestCaser/   r   r   r   r   <module>   s0   
