a
    äzeb#  ã                   @   sª   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r¦e  ¡  dS )é    N)Úsupports7   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	‡ fdd„	Zdd„ Z‡  ZS )
ÚFakeIOÚ úutf-8ÚstrictÚ
c                    sV   t t| ƒjt ¡ |||d || _|| _|rRt|tƒs>t|ƒ}|  	|¡ |  
d¡ d S )N)ÚencodingÚerrorsÚnewliner   )Úsuperr   Ú__init__ÚioÚBytesIOÚ	_encodingÚ_errorsÚ
isinstanceÚstrÚwriteÚseek)ÚselfZinitial_valuer   r	   r
   ©Ú	__class__© ú"/usr/lib/python3.9/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__r   r   Ú__classcell__r   r   r   r   r      s     ÿr   Fc                 C   sF   |r(t d| |f dƒt dd¡ d }n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   ƒ n1 sÜ0    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 ]x}t  tdd|d¡}t  ¡ }t ||¡ |  | ¡ t¡ t  dtdd|d ¡}t  ¡ }t ||¡ |  | ¡ t¡ qd S )N)TFr1   r0   r3   sM   UUencoded files may contain many lines,
even some that have 'begin' in them.
)r   r   r.   r5   r   r7   r   r4   )r   r,   r:   r;   r   r   r   Útest_decodeL   s    þÿzUUTest.test_decodec              
   C   sl   t  dt ¡}t  ¡ }zt ||¡ |  d¡ W n6 tjyf } z|  t|ƒd¡ W Y d }~n
d }~0 0 d S )Ns   begin 644 t1
úNo exception raisedzTruncated input file)	r   r   r(   r5   r   ÚfailÚErrorr7   r   ©r   r:   r;   Úer   r   r   Útest_truncatedinput[   s    zUUTest.test_truncatedinputc              
   C   sh   t  d¡}t  ¡ }zt ||¡ |  d¡ W n6 tjyb } z|  t|ƒd¡ W Y d }~n
d }~0 0 d S )Nó    r>   z'No valid begin line found in input file)r   r   r5   r   r?   r@   r7   r   rA   r   r   r   Útest_missingbegind   s    
zUUTest.test_missingbeginc           	   	   C   sÄ   d}d}d}||fD ]ª}|   d¡B t |¡}t ¡ }tj||dd |  | ¡ |¡ W d   ƒ n1 sj0    Y  |   d¡0 dd l}| |d¡}|  ||¡ W d   ƒ q1 s´0    Y  qd S )	Ns   begin 644 file
!,___
 
end
s   begin 644 file
!,___
`
end
ó   3zuu.decode()T)ÚquietÚuu_codecr   )ZsubTestr   r   r5   r   r7   r   Úcodecs)	r   Zencodedtext1Zencodedtext2r4   r(   r:   r;   rI   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   r4   r5   r6   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 s80    Y  tjr’| dd¡}|   tjd¡  t t |¡¡ W d   ƒ n1 sˆ0    Y  d}|   tjd¡  t t |¡¡ W d   ƒ n1 sÊ0    Y  tjr(| dd¡}|   tjd¡  t t |¡¡ W d   ƒ n1 s0    Y  d S )Ns<   begin 644 ../../../../../../../../tmp/test1
$86)C"@``
`
end
Z	directoryó   /ó   \s%   begin 644 /tmp/test2
$86)C"@``
`
end
)	ZassertRaisesRegexr5   r@   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=   rC   rE   rJ   rK   rP   r   r   r   r   r/   :   s   			r/   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²   s    zUUStdIOTest.setUpc                 C   s   | j t_ | jt_d S r   )rS   rR   rT   r   r   r   r   ÚtearDown¶   s    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$   ú-r0   r1   )r   r4   r   rR   rS   rT   r5   r6   r7   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 )Nr1   r0   r$   rW   )
r   r.   r   rR   rS   rT   r5   r7   r   r4   )r   rT   r   r   r   r=   Á   s    zUUStdIOTest.test_decodeN)r    r!   r"   rU   rV   r<   r=   r   r   r   r   rQ   °   s   rQ   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   rU   Ì   s    zUUFileTest.setUpc              	   C   sP  t | jdƒ}| t¡ W d   ƒ n1 s,0    Y  t | jdƒP}t | jdƒ$}tj||| jdd W d   ƒ n1 sz0    Y  W d   ƒ n1 s˜0    Y  t | jdƒ}| ¡ }W d   ƒ n1 sÌ0    Y  |  |t	d| jƒ¡ tj| j| j| jdd t | jdƒ}| ¡ }W d   ƒ n1 s.0    Y  |  |t	d| jƒ¡ d S )NÚwbÚrbr2   )r*   )
Úopenr[   r   r4   r\   r5   r6   Úreadr7   r.   )r   ZfinZfoutÚsr   r   r   r<   Ò   s    (P&(zUUFileTest.test_encodec                 C   s¸   t | jdƒ"}| td| jƒ¡ W d   ƒ n1 s40    Y  t | jdƒ}t |¡ W d   ƒ n1 sj0    Y  t | jdƒ}| ¡ }W d   ƒ n1 sž0    Y  |  |t	¡ d S ©Nr_   r2   r`   ©
ra   r[   r   r.   r\   r5   r   rb   r7   r4   ©r   Úfrc   r   r   r   r=   ä   s    0(&zUUFileTest.test_decodec                 C   sŽ   t | jdƒ"}| td| jƒ¡ W d   ƒ n1 s40    Y  t | j¡ t | jdƒ}| ¡ }W d   ƒ n1 st0    Y  |  |t	¡ d S rd   re   rf   r   r   r   Útest_decode_filenameð   s    0&zUUFileTest.test_decode_filenamec                 C   s¶   t | jdƒ"}| td| jƒ¡ W d   ƒ n1 s40    Y  t | jdƒ}t |¡ W d   ƒ n1 sj0    Y  t | jdƒ"}|  tjtj|¡ W d   ƒ n1 s¨0    Y  d S rd   )	ra   r[   r   r.   r\   r5   r   r8   r@   )r   rg   r   r   r   Útest_decodetwiceú   s    0(zUUFileTest.test_decodetwicec                 C   s°   d}t | jdƒ"}| t|| jƒ¡ W d   ƒ n1 s80    Y  |  tj| j|tj	B ¡ t | jdƒ}t
 |¡ W d   ƒ n1 s†0    Y  |  t t | j¡j¡|¡ d S )Ni$  r_   r`   )ra   r[   r   r.   r\   r]   rN   ÚchmodÚstatÚS_IWRITEr5   r   r7   ÚS_IMODEÚst_mode)r   Zexpected_moderg   r   r   r   Útest_decode_mode  s    0(þzUUFileTest.test_decode_modeN)	r    r!   r"   rU   r<   r=   rh   ri   ro   r   r   r   r   rX   Ê   s   

rX   Ú__main__)F)ZunittestÚtestr   rN   rk   rR   r5   r   r4   r(   ÚTextIOWrapperr   r.   ZTestCaser/   rQ   rX   r    Úmainr   r   r   r   Ú<module>   s   
	vL