a
    Rîh%  ã                   @   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rèe ¡  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   ú9/opt/python-3.9.24/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rŽt d¡b}t d¡8}d|_|g|_|  |t ¡ ¡ | d¡ W d   ƒ n1 sd0    Y  W d   ƒ qœ1 s‚0    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 s’0    Y  W d   ƒ n1 s°0    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 s€0    Y  W d   ƒ n1 sž0    Y  W d   ƒ n1 s¼0    Y  W d   ƒ n1 sÚ0    Y  W d   ƒ n1 sø0    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 sŠ0    Y  W d   ƒ n1 s¨0    Y  W d   ƒ n1 sÆ0    Y  W d   ƒ n1 sä0    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 s–0    Y  W d   ƒ n1 s´0    Y  W d   ƒ n1 sÒ0    Y  W d   ƒ n1 sð0    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 sÄ0    Y  W d   ƒ n1 sâ0    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