o
    gf                      @   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rVe   dS dS )    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	 fdd	Zdd Z  ZS )
FakeIO 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__ B/Users/admin/.pyenv/versions/3.10.0/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__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                   @   <   e Z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    q
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_escapedN)	r    r!   r"   r=   r>   rD   rF   rK   rL   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   )rO   rN   rP   r   r   r   r   tearDown   rR   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   rN   rO   rP   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$   rT   )
r   r.   r   rN   rO   rP   r6   r8   r   r5   )r   rP   r   r   r   r>      s   zUUStdIOTest.test_decodeN)r    r!   r"   rQ   rS   r=   r>   r   r   r   r   rM      s
    rM   c                   @   r/   )
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   rQ      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 sw   Y  | |t	d| j d S )Nwbrbr3   )r*   )
openrX   r   r5   rY   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 Nr\   r3   r]   
r^   rX   r   r.   rY   r6   r   r_   r8   r5   r   fr`   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 ra   rb   rc   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 ra   )	r^   rX   r   r.   rY   r6   r   r9   rA   )r   rd   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$  r\   r]   )r^   rX   r   r.   rY   rZ   oschmodstatS_IWRITEr6   r   r8   S_IMODEst_mode)r   Zexpected_moderd   r   r   r   test_decode_mode   s   zUUFileTest.test_decode_modeN)	r    r!   r"   rQ   r=   r>   re   rf   rm   r   r   r   r   rU      s    

rU   __main__)F)ZunittestZtest.supportr   rg   ri   rN   r6   r   r5   r(   TextIOWrapperr   r.   ZTestCaser0   rM   rU   r    mainr   r   r   r   <module>   s$    
	ZM