
    <e$                     8   d Z ddlZddlmZmZ  ej        d          ZddlZddlZddl	Z	ddl
Z
dZdZ G d de
j                  Zdd
Z G d dej                  Z G d dej                  Z G d dej                  Zedk    r ej                     dS dS )z%
Tests for uu module.
Nick Mathewson
    N)	os_helperwarnings_helperuus7   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                   .     e Zd ZdZ	 	 d fd	Zd Z x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                 B   t          t          |                               t          j                    |||           || _        || _        |rPt          |t                    st          |          }| 	                    |           | 
                    d           d S d S )N)encodingerrorsnewliner   )superr   __init__ioBytesIO	_encoding_errors
isinstancestrwriteseek)selfinitial_valuer   r   r   	__class__s        #/usr/lib/python3.11/test/test_uu.pyr   zFakeIO.__init__   s    fd$$RZ\\.6,2-4 	% 	6 	6 	6 " 	mS11 3 #M 2 2JJ}%%%IIaLLLLL		 	    c                     |                                   | j                                                            | j        | j                  S N)flushbuffergetvaluedecoder   r   r   s    r   r#   zFakeIO.getvalue-   s7    

{##%%,,T^T\JJJr   )r   r	   r
   r   )__name__
__module____qualname____doc__r   r#   __classcell__)r   s   @r   r   r      se          3:*.     K K K K K K Kr   r   Fc                     |r5t          d| |fz  d          t                              dd          z   dz   }n t          d| |fz  d          t          z   dz   }|S )Nzbegin %03o %s
ascii       `s   
`
end
s   
 
end
)bytesencodedtextreplace)modefilenamebacktickress       r   encodedtextwrappedr6   2   sw     ,&$)997CC""4../1>? &$)997CC*+Jr   c                   R    e Zd Zd Zej        d             Zd Zd Zd Z	d Z
d ZdS )	UUTestc                    t          j        t                    }t          j                    }t                              ||d           |                     |                                t          dd                     t          j        t                    }t          j                    }t                              ||dd           |                     |                                t          dd                     t          j        t                    }t          j                    }t                              ||dd           |                     |                                t          ddd                     |                     t                    5  t                              ||ddd           d d d            d S # 1 swxY w Y   d S )Nt1    Tr4   )
r   r   	plaintextr   encodeassertEqualr#   r6   assertRaises	TypeError)r   inpouts      r   test_encodezUUTest.test_encode=   s   j##jll
		#sD!!!);E4)H)HIIIj##jll
		#sD%((();E4)H)HIIIj##jll
		#sD4	000);E4)N)NOOOy)) 	3 	3IIc3eT222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   GG	G	c           	         dD ]}t          j        t          dd|                    }t          j                    }t                              ||           |                     |                                t                     t          j        dt          dd|          z             }t          j                    }t                              ||           |                     |                                t                     d S )N)TFr;   r:   r=   sM   UUencoded files may contain many lines,
even some that have 'begin' in them.
)r   r   r6   r   r$   r@   r#   r>   )r   r4   rC   rD   s       r   test_decodezUUTest.test_decodeM   s    # 	8 	8H*/thOOOPPC*,,CIIc3S\\^^Y777*:"5$BBBC C
 *,,CIIc3S\\^^Y7777	8 	8r   c                 F   t          j        dt          z             }t          j                    }	 t                              ||           |                     d           d S # t          j        $ r.}|                     t          |          d           Y d }~d S d }~ww xY w)Ns   begin 644 t1
No exception raisedzTruncated input file)	r   r   r0   r   r$   failErrorr@   r   r   rC   rD   es       r   test_truncatedinputzUUTest.test_truncatedinput]   s    j*[899jll	=IIc3II+,,,,,x 	= 	= 	=SVV%;<<<<<<<<<	=s   0A# #B 2#BB c                 6   t          j        d          }t          j                    }	 t                              ||           |                     d           d S # t          j        $ r.}|                     t          |          d           Y d }~d S d }~ww xY w)Nr   rI   z'No valid begin line found in input file)r   r   r   r$   rJ   rK   r@   r   rL   s       r   test_missingbeginzUUTest.test_missingbeginf   s    joojll	PIIc3II+,,,,,x 	P 	P 	PSVV%NOOOOOOOOO	Ps   0A B*#BBc                    d}d}d}||fD ]}|                      d          5  t          j        |          }t          j                    }t                              ||d           |                     |                                |           d d d            n# 1 swxY w Y   |                      d          5  dd l}|                    |d          }|                     ||           d d d            n# 1 swxY w Y   d S )	Ns   begin 644 file
!,___
 
end
s   begin 644 file
!,___
`
end
   3zuu.decode()T)quietuu_codecr   )subTestr   r   r   r$   r@   r#   codecs)	r   encodedtext1encodedtext2r>   r0   rC   rD   rV   decodeds	            r   test_garbage_paddingzUUTest.test_garbage_paddingo   s    	 	 	'5 
	5 
	5Km,, < <j--jll		#s$	///  ;;;	< < < < < < < < < < < < < < < j)) 5 5 --Z@@  )4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5
	5 
	5s$   A-BB	"B	;1C88C<	?C<	c                     t          j        t                    }t          j                    }d}d}t                              |||           |                     ||                                           d S )Nztest.txt
overflow.txts   test.txt\n\roverflow.txt)r   r   r>   r   r?   assertInr#   )r   rC   rD   r3   safefilenames        r   test_newlines_escapedzUUTest.test_newlines_escaped   s^    j##jll-4
		#sH%%%lCLLNN33333r   c                    d}|                      t          j        d          5  t                              t	          j        |                     d d d            n# 1 swxY w Y   t          j        rz|                    dd          }|                      t          j        d          5  t                              t	          j        |                     d d d            n# 1 swxY w Y   d}|                      t          j        d          5  t                              t	          j        |                     d d d            n# 1 swxY w Y   t          j        r}|                    dd          }|                      t          j        d          5  t                              t	          j        |                     d d d            d S # 1 swxY w Y   d S d S )Ns<   begin 644 ../../../../../../../../tmp/test1
$86)C"@``
`
end
	directory   /   \s%   begin 644 /tmp/test2
$86)C"@``
`
end
)	assertRaisesRegexr   rK   r$   r   r   osaltsepr1   )r   relative_badrelative_bad_bsabsolute_badabsolute_bad_bss        r   test_no_directory_traversalz"UUTest.test_no_directory_traversal   s    ##BHk:: 	0 	0IIbj..///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	09 	7*224??O''+>> 7 7		"*_556667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ##BHk:: 	0 	0IIbj..///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	09 	7*224??O''+>> 7 7		"*_556667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7	7 	7sG   -AA #A )-C""C&)C&-EEE-GGGN)r&   r'   r(   rE   r   skip_unless_working_chmodrG   rN   rP   rZ   r^   rj    r   r   r8   r8   ;   s        3 3 3  (8 8 )(8= = =P P P5 5 5<4 4 47 7 7 7 7r   r8   c                   &    e Zd Zd Zd Zd Zd ZdS )UUStdIOTestc                 J    t           j        | _        t           j        | _        d S r    )sysstdinstdoutr%   s    r   setUpzUUStdIOTest.setUp   s    Y
jr   c                 J    | j         t          _         | j        t          _        d S r    )rq   rp   rr   r%   s    r   tearDownzUUStdIOTest.tearDown   s    J	[


r   c                 x   t          t                              d                    t          _        t                      t          _        t                              dddd           |                     t          j        	                                t          dd                              d                     d S )Nr,   -r:   r;   )r   r>   r$   rp   rq   rr   r   r?   r@   r#   r6   r%   s    r   rE   zUUStdIOTest.test_encode   s    9++G4455	XX

		#sD%(((,,..+E488??HH	J 	J 	J 	J 	Jr   c                    t          t          dd                              d                    t          _        t                      t          _        t                              dd           t          j        }| j        t          _        | j        t          _        |                     |                                t                              d                     d S )Nr;   r:   r,   rw   )
r   r6   r$   rp   rq   rr   r   r@   r#   r>   )r   rr   s     r   rG   zUUStdIOTest.test_decode   s    -eT::AA'JJKK	XX

		#s[
J	**I,<,<W,E,EFFFFFr   N)r&   r'   r(   rs   ru   rE   rG   rl   r   r   rn   rn      sX        ! ! !! ! !J J JG G G G Gr   rn   c                       e Zd Zd Zd Zej        d             Zej        d             Zej        d             Z	ej        d             Z
dS )
UUFileTestc                     t           j        dz   | _        t           j        dz   | _        |                     t           j        | j                   |                     t           j        | j                   d S )Nio)r   TESTFN_ASCIItmpintmpout
addCleanupunlinkr%   s    r   rs   zUUFileTest.setUp   sX    ,s2
,s2	($*555	($+66666r   c                    t          | j        d          5 }|                    t                     d d d            n# 1 swxY w Y   t          | j        d          5 }t          | j        d          5 }t
                              ||| j        d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          | j        d          5 }|                                }d d d            n# 1 swxY w Y   |                     |t          d| j                             t
                              | j        | j        | j        d           t          | j        d          5 }|                                }d d d            n# 1 swxY w Y   |                     |t          d| j                             d S )Nwbrbr<   )r2   )
openr   r   r>   r   r   r?   readr@   r6   )r   finfoutss       r   rE   zUUFileTest.test_encode   s   $*d## 	!sIIi   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! $*d## 	=sdk4(( =D		#tTZe	<<<= = = = = = = = = = = = = = =	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= $+t$$ 			A	 	 	 	 	 	 	 	 	 	 	 	 	 	 	.udjAABBB 			$*dk4:E	BBB$+t$$ 			A	 	 	 	 	 	 	 	 	 	 	 	 	 	 	.udjAABBBBBsi   =AAB:3$B#B:#B'	'B:*B'	+B::B>B>C;;C?C?1FFFc                    t          | j        d          5 }|                    t          d| j                             d d d            n# 1 swxY w Y   t          | j        d          5 }t
                              |           d d d            n# 1 swxY w Y   t          | j        d          5 }|                                }d d d            n# 1 swxY w Y   |                     |t                     d S Nr   r<   r   
r   r   r   r6   r   r   r$   r   r@   r>   r   fr   s      r   rG   zUUFileTest.test_decode   s   $*d## 	<qGG&udk::;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< $*d## 	qIIaLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $+t$$ 	A	 	 	 	 	 	 	 	 	 	 	 	 	 	 	I&&&&&s5   )AAA+BBB2CCCc                    t          | j        d          5 }|                    t          d| j                             d d d            n# 1 swxY w Y   t
                              | j                   t          | j        d          5 }|                                }d d d            n# 1 swxY w Y   |                     |t                     d S r   r   r   s      r   test_decode_filenamezUUFileTest.test_decode_filename   s(   $*d## 	<qGG&udk::;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 			$*$+t$$ 	A	 	 	 	 	 	 	 	 	 	 	 	 	 	 	I&&&&&s#   )AAA
B++B/2B/c                    t          | j        d          5 }|                    t          d| j                             d d d            n# 1 swxY w Y   t          | j        d          5 }t
                              |           d d d            n# 1 swxY w Y   t          | j        d          5 }|                     t
          j        t
          j        |           d d d            d S # 1 swxY w Y   d S r   )	r   r   r   r6   r   r   r$   rA   rK   )r   r   s     r   test_decodetwicezUUFileTest.test_decodetwice   s    $*d## 	<qGG&udk::;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<$*d## 	qIIaLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $*d## 	6qbh	1555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s5   )AAA+BBB2,C++C/2C/c                 0   d}t          | j        d          5 }|                    t          || j                             d d d            n# 1 swxY w Y   |                     t          j        | j        |t          j	        z             t          | j        d          5 }t                              |           d d d            n# 1 swxY w Y   |                     t          j        t          j        | j                  j                  |           d S )Ni$  r   r   )r   r   r   r6   r   r   rd   chmodstatS_IWRITEr   r$   r@   S_IMODEst_mode)r   expected_moder   s      r   test_decode_modezUUFileTest.test_decode_mode  su    $*d## 	DqGG&}dkBBCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	$+}t}/LMMM$*d## 	qIIaLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	L--566	
 	
 	
 	
 	
s#   )AAA CCCN)r&   r'   r(   rs   rE   r   rk   rG   r   r   r   rl   r   r   rz   rz      s        7 7 7C C C& (	' 	' )(	' (' ' )(' (6 6 )(6 (
 
 )(
 
 
r   rz   __main__)F)r)   unittesttest.supportr   r   import_deprecatedr   rd   r   rp   r   r>   r0   TextIOWrapperr   r6   TestCaser8   rn   rz   r&   mainrl   r   r   <module>r      s   
  3 3 3 3 3 3 3 3&_&t,, 				  



 				G	
K K K K KR K K K6   t7 t7 t7 t7 t7X t7 t7 t7nG G G G G(# G G G4O
 O
 O
 O
 O
" O
 O
 O
d ZHMOOOOO r   