o
    HXh%                     @   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y3   dZ
Y nw zd dlZW n eyE   dZY nw 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rve  dS 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   ;/opt/python-3.10.19/usr/lib/python3.10/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w | |j jdd dD  d S )Nc                 S   s   g | ]}t |qS r   )r   call).0xr   r   r   
<listcomp>!   s    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rQtd:}td}d|_|g|_| |t  |d W d    n1 s2w   Y  W d    d S W d    d S 1 sJw   Y  d S | 	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   P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   sV   t d}d}td}tj||d |j| W d    d S 1 s$w   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(   r/   )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: )r2   r/   )r   r   r7   r
   r   r-   r   )r   r8   r/   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$   r0   r4   r   r   r9   r<   r@   rB   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Y}t d;}t d&}d |_t  |dtjtjB  ||jd ||j W d    n1 s:w   Y  W d    n1 sIw   Y  W d    d S W d    d S 1 saw   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"   
P z&UnixGetpassTest.test_uses_tty_directlyc                 C   s  t d}}t d_ t dJ t d5}t d }d|_g d}t||_t  |dt j| W d    n1 s@w   Y  W d    n1 sOw   Y  W d    n1 s^w   Y  W d    n1 smw   Y  W d    d S W d    d S 1 sw   Y  d S )NrD   rE   rF   termios.tcgetattrtermios.tcsetattr   )   rR   rR   rR   rR   )r   r   r
   listr   rG   assert_called_withANY)r   rK   Z	tcgetattr	tcsetattrZ
fake_attrsr   r   r   test_resets_termioso   s.   
  P z#UnixGetpassTest.test_resets_termiosc                 C   s>  t d}t dr}t d]}t dH t d3}t d}d|_t |_tj|_t  |	d|j W d    n1 sDw   Y  W d    n1 sSw   Y  W d    n1 sbw   Y  W d    n1 sqw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )	NrD   rE   rF   rO   rP   zgetpass.fallback_getpassrQ   z
Password: )
r   r   r
   r   termioserrorside_effectr   rG   r   )r   rK   rL   rM   rV   fallbackr   r   r   -test_falls_back_to_fallback_if_termios_raises{   s>      P z=UnixGetpassTest.test_falls_back_to_fallback_if_termios_raisesc                 C   s  t dy}t d[ t dF t d1 t d d|_t jtd}tj|d |j  W d    n1 s<w   Y  W d    n1 sKw   Y  W d    n1 sZw   Y  W d    n1 siw   Y  W d    d S W d    d S 1 sw   Y  d S )	NrD   rE   rF   rO   rP   rQ   r&   r6   )	r   r   r
   r,   r   r   rG   r.   rT   )r   rK   Zmock_streamr   r   r   test_flushes_stream_after_input   s(     P z/UnixGetpassTest.test_flushes_stream_after_inputc                 C   s  t dr}t jdtdR}t|_t|j_t "}| 	t
j t
  W d    n1 s/w   Y  W d    n1 s>w   Y  |j  | d|  | d|  W d    n1 sbw   Y  W d    d S W d    d S 1 szw   Y  d S )NrD   r5   r&   Warningz	Password:)r   r   r   IOErrorrZ   AttributeErrorfilenor   Zcaptured_stderrZassertWarnsr   ZGetPassWarningrG   r7   r   ZassertIngetvalue)r   Zos_openstdinr3   r   r   r   test_falls_back_to_stdin   s    


Pz(UnixGetpassTest.test_falls_back_to_stdinN)r"   r#   r$   rN   rW   r\   r]   rd   r   r   r   r   rC   ^   s    rC   __main__)r   rH   Zunittestior   r   r   r   rA   r   rX   r   r   r   ZTestCaser   r%   Z
skipUnlessrC   r"   mainr   r   r   r   <module>   s0     
,C