a
    "h;                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlmZ ejdkrHedd dl	m
Z
 e jZG dd dejZedkr|e  dS )	    N)supportwin32ztest only relevant on win32)write_inputc                   @   s   e Zd Zdd Zdd Zdd Zee	 dd d	kd
dd Z
dd Zdd Zdd Zdd Zedddd Zdd Zedddd Zdd ZdS )WindowsConsoleIOTestsc                 C   s:   |  tttj | tttj | tttj d S )N)
assertTrue
issubclassConIOio	RawIOBaseassertFalseBufferedIOBase
TextIOBaseself r   >/opt/python-3.9.21/usr/lib/python3.9/test/test_winconsoleio.pytest_abc   s    zWindowsConsoleIOTests.test_abcc                 C   sn  |  tdtd t (}| }|  tdt| W d    n1 sF0    Y  ztd}W n tyn   Y n>0 | |  | |	  | 
d|  |  |  ztdd}W n ty   Y n>0 | |  | |	  | 
d|  |  |  ztdd}W n ty,   Y n>0 | |  | |	  | 
d|  |  |  d S )Nznegative file descriptorz&Cannot open (console|non-console file)r      w   )ZassertRaisesRegex
ValueErrorr   tempfileTemporaryFilefilenor   readabler   writableassertEqualclose)r   Ztmpfilefdfr   r   r   test_open_fd   sF    
"z"WindowsConsoleIOTests.test_open_fdc                 C   s  |  tttj td}| |  | |  | 	|
  |  |  td}| |  | |  | 	|
  |  |  tdd}| |  | |  | 	|
  |  |  t d d dk rtddd	d
}| |t |  d S )NCONCONIN$CONOUT$r      
   r   iU  zC:/conrbr   	buffering)ZassertRaisesr   r   sys
executabler   r   r   r   ZassertIsNotNoner   r   getwindowsversionopenassertIsInstancer   r    r   r   r   test_open_nameG   s.    
z$WindowsConsoleIOTests.test_open_nameNr      r   z+test does not work on Windows 7 and earlierc                 C   sH   t dddd}| |t |  t dddd}| |t |  d S )Nz
\\.\conin$r(   r   r)   z//?/conout$wb)r.   r/   r   r   r0   r   r   r   test_conin_conout_namese   s    z-WindowsConsoleIOTests.test_conin_conout_namesc                 C   s   t  }| tj| tj|d}t|dddN}dt	
 d d   k rTdk rfn n| |t n| |t W d    n1 s0    Y  d S )Nr$   r4   r   r)   r2   r%   r&   )r   mkdtempZ
addCleanupr   rmtreeospathjoinr.   r+   r-   r/   r   ZassertNotIsInstance)r   Z	temp_pathZconout_pathr    r   r   r   test_conout_pathp   s    $z&WindowsConsoleIOTests.test_conout_pathc                 C   s@   t dd"}| |dd W d    n1 s20    Y  d S )Nr$   r       r   )r   r   writer0   r   r   r   test_write_empty_data}   s    z+WindowsConsoleIOTests.test_write_empty_datac                 C   sZ   t dd}tj}z0|t_t|jj|d dd t }W |t_n|t_0 | || d S )Nr#   rz
	utf-16-lesurrogatepass)	r.   r+   stdinr   bufferrawencodeinputr   )r   textrB   Z	old_stdinactualr   r   r   assertStdinRoundTrip   s    
z*WindowsConsoleIOTests.assertStdinRoundTripc                 C   s"   |  d |  d |  d d S )NZabc123u   ϼўТλФЙu   A͏B ﬖ̳AA̝rI   r   r   r   r   
test_input   s    

z WindowsConsoleIOTests.test_inputTz%Handling Non-BMP characters is brokenc                 C   s   |  d d S )Nu   􀀀􏿿􏿽rJ   r   r   r   r   test_input_nonbmp   s    z'WindowsConsoleIOTests.test_input_nonbmpc              	   C   s   d d}d d}tddD ]r}tdddd	P}t|| d
}|ds^||}||7 }q@| ||d| W d    q1 s0    Y  qd S )Nu   ϼўТλФЙ
r@   utf-8r      r#   r(   r   r)   r<      
stdin.read({})rE   ranger.   r   endswithreadr   formatr   sourceexpectedZ
read_countrB   rH   br   r   r   test_partial_reads   s    





z(WindowsConsoleIOTests.test_partial_readsc              	   C   s   d d}d d}tddD ]r}tdddd	P}t|| d
}|ds^||}||7 }q@| ||d| W d    q1 s0    Y  qd S )Nu
   􁿿􁀁
r@   rM   r   rN   r#   r(   r   r)   r<   rO   rP   rQ   rV   r   r   r   test_partial_surrogate_reads   s    





z2WindowsConsoleIOTests.test_partial_surrogate_readsc                 C   s   t ddddj}dd}dd}t|| |d	|  }}| |dd	 | | |d	d  | W d    n1 s~0    Y  d S )
Nr#   r(   r   r)   u   Ä
r@      ÄrM   r   )r.   rE   r   rT   readallr   )r   rB   rW   rX   arY   r   r   r   test_ctrl_z   s    


z!WindowsConsoleIOTests.test_ctrl_z)__name__
__module____qualname__r   r!   r1   unittestZskipIfr+   r-   r5   r;   r>   rI   rK   rL   rZ   r[   r_   r   r   r   r   r      s"   /
		



r   __main__)r	   r8   r+   r   rc   testr   platformZSkipTestZ_testconsoler   Z_WindowsConsoleIOr   ZTestCaser   r`   mainr   r   r   r   <module>   s   

 8