a
    äze;  ã                   @   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   ú,/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 descriptoréÿÿÿÿz&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   iðU  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 s†0    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 s†0    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 s†0    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