U
    
W[                     @   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 zddlmZ ddlZW n ek
r   dZdZY nX edk	rG 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)unittest)Protocol)Failure)platform)	DoNothing)
serialportc                       s,   e Zd Z fddZdd Zdd Z  ZS )RegularFileSerialc                    s"   t t| j|| || _|| _d S N)superr   __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   s   d S r	   r   r   r   r   r   _reconfigurePort!   s    z"RegularFileSerial._reconfigurePortc                 C   s   d S r	   r   r   r   r   r   _reconfigure_port$   s    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|kr|d= tjj| _|| j_tt| j|| d S )NcbInQue)	getserialZwin32ZCOMSTATcomstatr   r
   r   r   )r   r   r   r   r   r   r   r   +   s    

zRegularFileSerialPort.__init__c                 C   s
   d| j fS )NT)r    r   r   r   r   _clearCommError6   s    z%RegularFileSerialPort._clearCommError)r   r   r   r   Z_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   ;   s    z CollectReceivedProtocol.__init__c                 C   s   | j | d S r	   )r#   append)r   datar   r   r   dataReceived>   s    z$CollectReceivedProtocol.dataReceivedN)r   r   r   r   r&   r   r   r   r   r"   :   s   r"   c                   @   sv   e Zd ZdZ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   sV   t  | _t | _t | _tj	| jd| _d}t
| jd}|| W 5 Q R X d S )NZfake_serials   1234wb)r   protocolr   reactortempfileZmkdtemp	directoryospathjoinopenwrite)r   r%   fr   r   r   setUpM   s    
zWin32SerialPortTests.setUpc                 C   s   t | j d S r	   )shutilZrmtreer,   r   r   r   r   tearDownY   s    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%  ZbaudrateZbytesizeZparityZstopbitsr   ZxonxoffZrtsctsNZtimeoutCleanup)r   r)   r.   r*   assertEqualZ_serialr   r   r   Z	EIGHTBITSZPARITY_NONEZSTOPBITS_ONEconnectionLostr   	Exception)r   portr   r   r   r   test_serialPortDefaultArgs\   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      r6   N)
r7   r)   Z	connectedr   r.   r*   Z	transportr8   r   r9   )r   r:   r   r   r   !test_serialPortInitiallyConnectedo   s    z6Win32SerialPortTests.test_serialPortInitiallyConnectedc                 C   sb   t | j| j| j|d}|  |d |d |d |  |  |tt	d d S )Nr)   ZdeviceNameOrPortNumberr*   r       s   abcds   ABCDr6   )
r   r)   r.   r*   serialReadEventr1   ZserialWriteEventr8   r   r9   )r   r   r:   r   r   r   common_exerciseHandleAccess|   s    


z0Win32SerialPortTests.common_exerciseHandleAccessc                 C   s   | j dd d S NFr   rA   r   r   r   r   test_exerciseHandleAccess_1   s    z0Win32SerialPortTests.test_exerciseHandleAccess_1c                 C   s   | j dd d S NTrC   rD   r   r   r   r   test_exerciseHandleAccess_2   s    z0Win32SerialPortTests.test_exerciseHandleAccess_2c                 C   sR   t  }t|| j| j|d}|  | tdd |jD  |t	t
d d S )Nr>   c                 s   s   | ]}t |tV  qd S r	   )
isinstancebytes).0dr   r   r   	<genexpr>   s    zEWin32SerialPortTests.common_serialPortReturnsBytes.<locals>.<genexpr>r6   )r"   r   r.   r*   r@   Z
assertTrueallr#   r8   r   r9   )r   r   r)   r:   r   r   r   common_serialPortReturnsBytes   s    
z2Win32SerialPortTests.common_serialPortReturnsBytesc                 C   s   | j dd d S rB   rN   r   r   r   r   test_serialPortReturnsBytes_1   s    z2Win32SerialPortTests.test_serialPortReturnsBytes_1c                 C   s   | j dd d S rF   rO   r   r   r   r   test_serialPortReturnsBytes_2   s    z2Win32SerialPortTests.test_serialPortReturnsBytes_2N)r   r   r   __doc__r   Z	isWindowsskipr   r3   r5   r;   r=   rA   rE   rG   rN   rP   rQ   r   r   r   r   r'   B   s   r'   )rR   r-   r4   r+   Ztwisted.trialr   Ztwisted.internet.protocolr   Ztwisted.python.failurer   Ztwisted.python.runtimer   Z%twisted.internet.test.test_serialportr   Ztwisted.internetr   r   ImportErrorZSerialr   Z
SerialPortr   r"   ZTestCaser'   r   r   r   r   <module>   s&   
