o
    gf                      @   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__ 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____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                   @   <   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)TFr3   r2   r5   sM   UUencoded files may contain many lines,
even some that have 'begin' in them.
)r   r   r/   r7   r   r9   r   r6   )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)   r7   r   failErrorr9   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   r7   r   rA   rB   r9   r   rC   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   r7   r   r9   r   codecs)	r   Zencodedtext1Zencodedtext2r6   r)   r<   r=   rK   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   r6   r7   r8   ZassertInr   )r   r<   r=   r,   Zsafefilenamer   r   r   test_newlines_escaped   s   
zUUTest.test_newlines_escapedN)	r    r!   r"   r>   r?   rE   rG   rL   rM   r   r   r   r   r1   :   s    		r1   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   )rP   rO   rQ   r   r   r   r   tearDown   rS   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%   -r2   r3   )r   r6   r   rO   rP   rQ   r7   r8   r9   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 )Nr3   r2   r%   rU   )
r   r/   r   rO   rP   rQ   r7   r9   r   r6   )r   rQ   r   r   r   r?      s   zUUStdIOTest.test_decodeN)r    r!   r"   rR   rT   r>   r?   r   r   r   r   rN      s
    rN   c                   @   r0   )
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   rR      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rbr4   )r+   )
openrY   r   r6   rZ   r7   r8   readr9   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]   r4   r^   
r_   rY   r   r/   rZ   r7   r   r`   r9   r6   r   fra   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 rb   rc   rd   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 rb   )	r_   rY   r   r/   rZ   r7   r   r:   rB   )r   re   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_   rY   r   r/   rZ   r[   oschmodstatS_IWRITEr7   r   r9   S_IMODEst_mode)r   Zexpected_modere   r   r   r   test_decode_mode   s   zUUFileTest.test_decode_modeN)	r    r!   r"   rR   r>   r?   rf   rg   rn   r   r   r   r   rV      s    

rV   __main__)F)r#   ZunittestZtest.supportr   rh   rj   rO   r7   r   r6   r)   TextIOWrapperr   r/   ZTestCaser1   rN   rV   r    mainr   r   r   r   <module>   s$    
	ZM