o
    IXîh©#  ã                   @   s²   d Z ddlZddlmZ ddlZddlZddlZddlZddlZdZ	dZ
G dd„ dejƒZdd	d
„ZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZedkrWe ¡  dS dS )z%
Tests for uu module.
Nick Mathewson
é    N)Ú	os_helpers7   The symbols on top of your keyboard are !@#$%^&*()_+|~
sO   M5&AE('-Y;6)O;',@;VX@=&]P(&]F('EO=7(@:V5Y8F]A<F0@87)E("% (R0E
*7B8J*"E?*WQ^"@  c                       s.   e Zd ZdZ		d
‡ fdd„	Zdd	„ Z‡  ZS )ÚFakeIOzText I/O implementation using an in-memory buffer.

    Can be a used as a drop-in replacement for sys.stdin and sys.stdout.
    Ú úutf-8ÚstrictÚ
c                    sZ   t t| ƒjt ¡ |||d || _|| _|r+t|tƒst|ƒ}|  	|¡ |  
d¡ d S d S )N)ÚencodingÚerrorsÚnewliner   )Úsuperr   Ú__init__ÚioÚBytesIOÚ	_encodingÚ_errorsÚ
isinstanceÚstrÚwriteÚseek)ÚselfZinitial_valuer   r	   r
   ©Ú	__class__© ú6/opt/python-3.10.19/usr/lib/python3.10/test/test_uu.pyr      s   ý

üzFakeIO.__init__c                 C   s   |   ¡  | j ¡  | j| j¡S ©N)ÚflushÚbufferÚgetvalueÚdecoder   r   ©r   r   r   r   r   ,   s   zFakeIO.getvalue)r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__classcell__r   r   r   r   r      s    ÿr   Fc                 C   sH   |rt d| |f dƒt dd¡ d }|S t d| |f dƒt d }|S )Nzbegin %03o %s
Úasciió    ó   `s   
`
end
s   
 
end
)ÚbytesÚencodedtextÚreplace)ÚmodeÚfilenameÚbacktickÚresr   r   r   Úencodedtextwrapped1   s   
ÿÿþÿÿr/   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚUUTestc                 C   sì   t  t¡}t  ¡ }t ||d¡ |  | ¡ tddƒ¡ t  t¡}t  ¡ }t ||dd¡ |  | ¡ tddƒ¡ t  t¡}t  ¡ }tj||ddd |  | ¡ tdddƒ¡ |  t	¡ t ||ddd¡ W d   ƒ d S 1 sow   Y  d S )NÚt1é¶  é¤  T©r-   )
r   r   Ú	plaintextÚuuÚencodeÚassertEqualr   r/   ÚassertRaisesÚ	TypeError)r   ÚinpÚoutr   r   r   Útest_encode<   s   


"ÿzUUTest.test_encodec              	   C   s‚   dD ]<}t  tdd|d¡}t  ¡ }t ||¡ |  | ¡ t¡ t  dtdd|d ¡}t  ¡ }t ||¡ |  | ¡ t¡ qd S )N)TFr2   r1   r4   sM   UUencoded files may contain many lines,
even some that have 'begin' in them.
)r   r   r/   r6   r   r8   r   r5   )r   r-   r;   r<   r   r   r   Útest_decodeL   s   þÿôzUUTest.test_decodec              
   C   sl   t  dt ¡}t  ¡ }zt ||¡ |  d¡ W d S  tjy5 } z|  t|ƒd¡ W Y d }~d S d }~ww )Ns   begin 644 t1
úNo exception raisedzTruncated input file)	r   r   r)   r6   r   ÚfailÚErrorr8   r   ©r   r;   r<   Úer   r   r   Útest_truncatedinput[   s   €ÿzUUTest.test_truncatedinputc              
   C   sh   t  d¡}t  ¡ }zt ||¡ |  d¡ W d S  tjy3 } z|  t|ƒd¡ W Y d }~d S d }~ww )Nó    r?   z'No valid begin line found in input file)r   r   r6   r   r@   rA   r8   r   rB   r   r   r   Útest_missingbegind   s   
€ÿzUUTest.test_missingbeginc           	   	   C   sÄ   d}d}d}||fD ]U}|   d¡! t |¡}t ¡ }tj||dd |  | ¡ |¡ W d   ƒ n1 s5w   Y  |   d¡ dd l}| |d¡}|  ||¡ W d   ƒ n1 sZw   Y  q
d S )	Ns   begin 644 file
!,___
 
end
s   begin 644 file
!,___
`
end
ó   3zuu.decode()T)ÚquietÚuu_codecr   )ZsubTestr   r   r6   r   r8   r   Úcodecs)	r   Zencodedtext1Zencodedtext2r5   r)   r;   r<   rJ   Zdecodedr   r   r   Útest_garbage_paddingm   s&   ÿÿ
üý€ùzUUTest.test_garbage_paddingc                 C   s<   t  t¡}t  ¡ }d}d}t |||¡ |  || ¡ ¡ d S )Nztest.txt
overflow.txts   test.txt\n\roverflow.txt)r   r   r5   r6   r7   ZassertInr   )r   r;   r<   r,   Zsafefilenamer   r   r   Útest_newlines_escaped‹   s   
zUUTest.test_newlines_escapedc                 C   s.  d}|   tjd¡ t t |¡¡ W d   ƒ n1 sw   Y  tjrI| dd¡}|   tjd¡ t t |¡¡ W d   ƒ n1 sDw   Y  d}|   tjd¡ t t |¡¡ W d   ƒ n1 sew   Y  tjr•| dd¡}|   tjd¡ t t |¡¡ W d   ƒ d S 1 sŽw   Y  d S d S )Ns<   begin 644 ../../../../../../../../tmp/test1
$86)C"@``
`
end
Z	directoryó   /ó   \s%   begin 644 /tmp/test2
$86)C"@``
`
end
)	ZassertRaisesRegexr6   rA   r   r   r   ÚosÚaltsepr*   )r   Zrelative_badZrelative_bad_bsZabsolute_badZabsolute_bad_bsr   r   r   Útest_no_directory_traversal”   s&   ÿÿÿ"ÿþz"UUTest.test_no_directory_traversalN)
r    r!   r"   r=   r>   rD   rF   rK   rL   rQ   r   r   r   r   r0   :   s    			r0   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚUUStdIOTestc                 C   s   t j| _t j| _d S r   )ÚsysÚstdinÚstdoutr   r   r   r   ÚsetUp²   ó   zUUStdIOTest.setUpc                 C   s   | j t_ | jt_d S r   )rT   rS   rU   r   r   r   r   ÚtearDown¶   rW   zUUStdIOTest.tearDownc                 C   sJ   t t d¡ƒt_t ƒ t_t dddd¡ |  tj 	¡ t
ddƒ d¡¡ d S )Nr%   ú-r1   r2   )r   r5   r   rS   rT   rU   r6   r7   r8   r   r/   r   r   r   r   r=   º   s   ÿzUUStdIOTest.test_encodec                 C   sZ   t tddƒ d¡ƒt_t ƒ t_t dd¡ tj}| jt_| jt_|  | ¡ t	 d¡¡ d S )Nr2   r1   r%   rY   )
r   r/   r   rS   rT   rU   r6   r8   r   r5   )r   rU   r   r   r   r>   Á   s   zUUStdIOTest.test_decodeN)r    r!   r"   rV   rX   r=   r>   r   r   r   r   rR   °   s
    rR   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú
UUFileTestc                 C   s<   t jd | _t jd | _|  t j| j¡ |  t j| j¡ d S )NÚiÚo)r   ZTESTFN_ASCIIÚtmpinÚtmpoutÚ
addCleanupÚunlinkr   r   r   r   rV   Ì   s   zUUFileTest.setUpc              	   C   sN  t | jdƒ}| t¡ W d   ƒ n1 sw   Y  t | jdƒ(}t | jdƒ}tj||| jdd W d   ƒ n1 s=w   Y  W d   ƒ n1 sLw   Y  t | jdƒ}| ¡ }W d   ƒ n1 sfw   Y  |  |t	d| jƒ¡ tj| j| j| jdd t | jdƒ}| ¡ }W d   ƒ n1 s–w   Y  |  |t	d| jƒ¡ d S )NÚwbÚrbr3   )r+   )
Úopenr]   r   r5   r^   r6   r7   Úreadr8   r/   )r   ZfinZfoutÚsr   r   r   r=   Ó   s$   ÿÿ€ÿ
ÿ
ÿzUUFileTest.test_encodec                 C   s¸   t | jdƒ}| td| jƒ¡ W d   ƒ n1 sw   Y  t | jdƒ}t |¡ W d   ƒ n1 s5w   Y  t | jdƒ}| ¡ }W d   ƒ n1 sOw   Y  |  |t	¡ d S ©Nra   r3   rb   ©
rc   r]   r   r/   r^   r6   r   rd   r8   r5   ©r   Úfre   r   r   r   r>   å   s   ÿÿ
ÿzUUFileTest.test_decodec                 C   sŽ   t | jdƒ}| td| jƒ¡ W d   ƒ n1 sw   Y  t | j¡ t | jdƒ}| ¡ }W d   ƒ n1 s:w   Y  |  |t	¡ d S rf   rg   rh   r   r   r   Útest_decode_filenameñ   s   ÿ
ÿzUUFileTest.test_decode_filenamec                 C   s¸   t | jdƒ}| td| jƒ¡ W d   ƒ n1 sw   Y  t | jdƒ}t |¡ W d   ƒ n1 s5w   Y  t | jdƒ}|  tjtj|¡ W d   ƒ d S 1 sUw   Y  d S rf   )	rc   r]   r   r/   r^   r6   r   r9   rA   )r   ri   r   r   r   Útest_decodetwiceû   s   ÿÿ"ÿzUUFileTest.test_decodetwicec                 C   s°   d}t | jdƒ}| t|| jƒ¡ W d   ƒ n1 sw   Y  |  tj| j|tj	B ¡ t | jdƒ}t
 |¡ W d   ƒ n1 sCw   Y  |  t t | j¡j¡|¡ d S )Ni$  ra   rb   )rc   r]   r   r/   r^   r_   rO   ÚchmodÚstatÚS_IWRITEr6   r   r8   ÚS_IMODEÚst_mode)r   Zexpected_moderi   r   r   r   Útest_decode_mode  s   ÿÿþzUUFileTest.test_decode_modeN)	r    r!   r"   rV   r=   r>   rj   rk   rq   r   r   r   r   rZ   Ê   s    

rZ   Ú__main__)F)r#   ZunittestZtest.supportr   rO   rm   rS   r6   r   r5   r)   ÚTextIOWrapperr   r/   ZTestCaser0   rR   rZ   r    Úmainr   r   r   r   Ú<module>   s$    
	vMÿ