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   
û