o
    IXhG                     @   s   d Z 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r&e	dddl
mZ ejZG dd dejZed	krBe  dS dS )
zTests for WindowsConsoleIO
    N)	os_helper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.10.19/usr/lib/python3.10/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 s#w   Y  ztd}W n	 ty7   Y nw | |  | |	  | 
d|  |  |  ztdd}W n	 tyf   Y nw | |  | |	  | 
d|  |  |  ztdd}W n
 ty   Y d S w | |  | |	  | 
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   sN   
z"WindowsConsoleIOTests.test_open_fdc                 C   s  |  tttj td}| |  | |  | 	|
  |  |  td}| |  | |  | 	|
  |  |  tdd}| |  | |  | 	|
  |  |  t d d dk rtddd	d
}| |t |  d S 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   s0   
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0}dt	
 d d   k r*dk r3n n| |t n| |t W d    d S W d    d S 1 sLw   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   sB   t dd}| |dd W d    d S 1 sw   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}z|t_t|jj|d dd t }W |t_n|t_w | || 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      d d}d d}tddD ]=}tdddd	,}t|| d
}|ds3||}||7 }|dr%| ||d| W d    n1 sGw   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   rM   )Nu
   􁿿􁀁
r@   rN   r   rO   r#   r(   r   r)   r<   rP   rQ   rR   rW   r   r   r   test_partial_surrogate_reads   s   





z2WindowsConsoleIOTests.test_partial_surrogate_readsc                 C   s   t dddd6}dd}dd}t|| |d	| }}| |dd	 | | |d	d  | W d    d S 1 s@w   Y  d S )
Nr#   r(   r   r)   u   Ä
r@      ÄrN   r   )r.   rE   r   rU   readallr   )r   rB   rX   rY   arZ   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   r[   r\   r`   r   r   r   r   r      s$    /
	
	


r   __main__)__doc__r	   r8   r+   r   rd   Ztest.supportr   platformZSkipTestZ_testconsoler   Z_WindowsConsoleIOr   ZTestCaser   ra   mainr   r   r   r   <module>   s     

 8