a
    ze%                     @   s   d dl Z d dlZd dlZd dlmZmZmZ d dlmZ d dlm	Z	 zd dl
Z
W n eyf   dZ
Y n0 zd dlZW n ey   dZY n0 edG dd dejZG dd	 d	ejZee
d
G dd dejZedkre  dS )    N)BytesIOStringIOTextIOWrapper)mock)supportz
os.environc                   @   s$   e Zd Zdd Zdd Zdd ZdS )GetpassGetuserTestc                 C   s    d}||j _| |t  d S )N	some_name)getreturn_valueassertEqualgetpassgetuser)selfenvironexpected_name r   '/usr/lib/python3.9/test/test_getpass.py%test_username_takes_username_from_env   s    z8GetpassGetuserTest.test_username_takes_username_from_envc                 C   sF   d |j _zt  W n ty&   Y n0 | |j jdd dD  d S )Nc                 S   s   g | ]}t |qS r   )r   call).0xr   r   r   
<listcomp>!       zMGetpassGetuserTest.test_username_priorities_of_env_values.<locals>.<listcomp>)ZLOGNAMEZUSERZLNAMEUSERNAME)r	   r
   r   r   ImportErrorr   Zcall_args_list)r   r   r   r   r   &test_username_priorities_of_env_values   s    z9GetpassGetuserTest.test_username_priorities_of_env_valuesc              	   C   s   d}d |j _trtdb}td8}d|_|g|_| |t  |d W d    n1 sd0    Y  W d    q1 s0    Y  n| 	t
tj d S )Nr   z	os.getuidzpwd.getpwuid*   )r	   r
   pwdr   patchr   r   r   assert_called_once_withassertRaisesr   )r   r   r   uidZgetpwr   r   r   test_username_falls_back_to_pwd#   s    Hz2GetpassGetuserTest.test_username_falls_back_to_pwdN)__name__
__module____qualname__r   r   r"   r   r   r   r   r      s   
r   c                   @   sP   e Zd Zdd Zdd Zeddd Zeddd	 Zd
d Z	dd Z
dS )GetpassRawinputTestc                 C   s2   t jtd}td}tjd||d |j  d S )Nspecinput_stringsome_promptinput)r   Mockr   r   
_raw_inputflushr   )r   streamr,   r   r   r    test_flushes_stream_after_prompt4   s    z4GetpassRawinputTest.test_flushes_stream_after_promptc                 C   sT   t d}d}td*}tj||d |j| W d    n1 sF0    Y  d S )Nr)   r*   z
sys.stderrr+   )r   r   r   r   r.   writer   )r   r,   promptstderrr   r   r   test_uses_stderr_as_default;   s
    z/GetpassRawinputTest.test_uses_stderr_as_default	sys.stdinc                 C   s$   d|j _tjt d |j   d S )Nr)   r0   )readliner
   r   r.   r   r   )r   
mock_inputr   r   r    test_uses_stdin_as_default_inputB   s    z4GetpassRawinputTest.test_uses_stdin_as_default_inputc                 C   s2   t t dd}d|j_tjd|d |j  d S )Nascii)encodingu   HasÅ‚o: )r3   r0   )r   r   r8   r
   r   r.   r   )r   r9   r0   r   r   r   #test_uses_stdin_as_different_localeH   s    z7GetpassRawinputTest.test_uses_stdin_as_different_localec                 C   s   t d}| jttj|d d S )N r+   )r   r    EOFErrorr   r.   r   r,   r   r   r   test_raises_on_empty_inputP   s    z.GetpassRawinputTest.test_raises_on_empty_inputc                 C   s    t d}| dtj|d d S )Nztest
testr+   )r   r   r   r.   r@   r   r   r   test_trims_trailing_newlineT   s    z/GetpassRawinputTest.test_trims_trailing_newlineN)r#   r$   r%   r1   r5   r   r   r:   r=   rA   rC   r   r   r   r   r&   2   s   

r&   z!tests require system with termiosc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )UnixGetpassTestc              
   C   s   t d}t dv}t dL}d |_t  |dtjtjB  ||jd ||j W d    n1 st0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nos.open	io.FileIOio.TextIOWrapperz/dev/ttyzw+)	r   r   r
   r   unix_getpassr   osO_RDWRO_NOCTTY)r   openfileiotextior   r   r   test_uses_tty_directlya   s    
z&UnixGetpassTest.test_uses_tty_directlyc                 C   s  t d}t d t d t dj}t d@}d|_g d}t||_t  |dt j| W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )NrE   rF   rG   termios.tcgetattrtermios.tcsetattr   )   rS   rS   rS   rS   )r   r   r
   listr   rH   assert_called_withANY)r   rL   Z	tcgetattr	tcsetattrZ
fake_attrsr   r   r   test_resets_termioso   s     
z#UnixGetpassTest.test_resets_termiosc                 C   s2  t d}t d}t d}t d t df}t d<}d|_t |_tj|_t  |	d|j W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s$0    Y  d S )	NrE   rF   rG   rP   rQ   zgetpass.fallback_getpassrR   z
Password: )
r   r   r
   r   termioserrorside_effectr   rH   r   )r   rL   rM   rN   rW   fallbackr   r   r   -test_falls_back_to_fallback_if_termios_raises{   s,    z=UnixGetpassTest.test_falls_back_to_fallback_if_termios_raisesc                 C   s   t d}t d t d t db t d8 d|_t jtd}tj|d |j  W d    n1 sx0    Y  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )	NrE   rF   rG   rP   rQ   rR   r'   r7   )	r   r   r
   r-   r   r   rH   r/   rU   )r   rL   Zmock_streamr   r   r   test_flushes_stream_after_input   s    z/UnixGetpassTest.test_flushes_stream_after_inputc                 C   s   t d}t jdtd}t|_t|j_t D}| 	t
j t
  W d    n1 s^0    Y  W d    n1 s|0    Y  |j  | d|  | d|  W d    n1 s0    Y  W d    n1 s0    Y  d S )NrE   r6   r'   Warningz	Password:)r   r   r   IOErrorr[   AttributeErrorfilenor   Zcaptured_stderrZassertWarnsr   ZGetPassWarningrH   r8   r   ZassertIngetvalue)r   Zos_openstdinr4   r   r   r   test_falls_back_to_stdin   s    
D
z(UnixGetpassTest.test_falls_back_to_stdinN)r#   r$   r%   rO   rX   r]   r^   re   r   r   r   r   rD   ^   s
   rD   __main__)r   rI   Zunittestior   r   r   r   rB   r   rY   r   r   r   ZTestCaser   r&   Z
skipUnlessrD   r#   mainr   r   r   r   <module>   s(   

 ,
C