U
    n5{iº  ã                   @   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kZzddlZdd	lmZ W n" ek
rœ   er�‚ dZdZY nX edk	rÊG 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)ÚunittestZ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||Ž || _|| _d S ©N)ÚsuperÚ__init__Úcaptured_argsÚcaptured_kwargs)ÚselfÚargsÚkwargs©Ú	__class__© úN/tmp/pip-unpacked-wheel-mnhg7r0q/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ƒ j||Ž d S )NÚcbInQue)ÚgetÚserialÚwin32Z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=   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   B   s    z CollectReceivedProtocol.__init__c                 C   s   | j  |¡ d S r	   )r$   Úappend)r   Údatar   r   r   ÚdataReceivedE   s    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   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Ú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Úrmtreer.   r   r   r   r   ÚtearDowna   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rtsctsNÚtimeoutÚCleanup)r   r*   r0   r+   ÚassertEqualZ_serialr   r   r   Z	EIGHTBITSZPARITY_NONEZ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   é   r:   N)
r;   r*   Ú	connectedr   r0   r+   Ú	transportr<   r   r=   )r   r>   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©r*   ZdeviceNameOrPortNumberr+   r   ó    s   abcds   ABCDr:   )
r   r*   r0   r+   ÚserialReadEventr3   ZserialWriteEventr<   r   r=   )r   r   r>   r   r   r   Úcommon_exerciseHandleAccess„   s    ü


z0Win32SerialPortTests.common_exerciseHandleAccessc                 C   s   | j dd� d S ©NF©r   ©rG   r   r   r   r   Útest_exerciseHandleAccess_1–   s    z0Win32SerialPortTests.test_exerciseHandleAccess_1c                 C   s   | j dd� d S ©NTrI   rJ   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 )NrD   c                 s   s   | ]}t |tƒV  qd S r	   )Ú
isinstanceÚbytes)Ú.0Údr   r   r   Ú	<genexpr>¦   s     zEWin32SerialPortTests.common_serialPortReturnsBytes.<locals>.<genexpr>r:   )r#   r   r0   r+   rF   Ú
assertTrueÚallr$   r<   r   r=   )r   r   r*   r>   r   r   r   Úcommon_serialPortReturnsBytesœ   s    üz2Win32SerialPortTests.common_serialPortReturnsBytesc                 C   s   | j dd� d S rH   ©rU   r   r   r   r   Útest_serialPortReturnsBytes_1©   s    z2Win32SerialPortTests.test_serialPortReturnsBytes_1c                 C   s   | j dd� d S rL   rV   r   r   r   r   Útest_serialPortReturnsBytes_2¬   s    z2Win32SerialPortTests.test_serialPortReturnsBytes_2N)r   r   r   Ú__doc__ÚtestingForcedr   Z	isWindowsÚskipr   r5   r8   r?   rC   rG   rK   rM   rU   rW   rX   r   r   r   r   r(   I   s    r(   )rY   r/   r6   r,   Ztwisted.internet.protocolr   Z%twisted.internet.test.test_serialportr   Ztwisted.python.failurer   Ztwisted.python.runtimer   Ztwisted.trialr   ÚenvironrZ   r   Ztwisted.internetr   ÚImportErrorZSerialr   Z
SerialPortr   r#   ZTestCaser(   r   r   r   r   Ú<module>   s,   

