
    daf$                     J   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*                          yy)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.
    c                     t         t        |   t        j                         |||       || _        || _        |r>t        |t              st        |      }| j                  |       | j                  d       y y )N)encodingerrorsnewliner   )superr   __init__ioBytesIO	_encoding_errors
isinstancestrwriteseek)selfinitial_valuer	   r
   r   	__class__s        '/root/Python-3.12.4/Lib/test/test_uu.pyr   zFakeIO.__init__   sk    fd$RZZ\.6,2-4 	% 	6 "mS1 #M 2JJ}%IIaL	     c                     | j                          | j                  j                         j                  | j                  | j
                        S N)flushbuffergetvaluedecoder   r   r   s    r   r   zFakeIO.getvalue-   s3    

{{##%,,T^^T\\JJr   ) zutf-8strict
)__name__
__module____qualname____doc__r   r   __classcell__)r   s   @r   r   r      s     3:*.Kr   r   c                     |r-t        d| |fz  d      t        j                  dd      z   dz   }|S 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   encodedtextwrappedr5   2   sn    &$)997C""4./1>?
 J &$)997C*+Jr   c                   T    e Zd Zd Zej
                  d        Zd Zd Zd Z	d Z
d Zy)	UUTestc                 &   t        j                  t              }t        j                         }t        j	                  ||d       | j                  |j                         t        dd             t        j                  t              }t        j                         }t        j	                  ||dd       | j                  |j                         t        dd             t        j                  t              }t        j                         }t        j	                  ||dd       | j                  |j                         t        ddd             | j                  t              5  t        j	                  ||ddd       d d d        y # 1 sw Y   y xY w)Nt1    Tr3   )
r   r   	plaintextr   encodeassertEqualr   r5   assertRaises	TypeError)r   inpouts      r   test_encodezUUTest.test_encode=   s   jj#jjl
		#sD!);E4)HIjj#jjl
		#sD%();E4)HIjj#jjl
		#sD4	0);E4)NOy) 	3IIc3eT2	3 	3 	3s   $FFc           	         dD ]  }t        j                  t        dd|            }t        j                         }t        j	                  ||       | j                  |j                         t               t        j                  dt        dd|      z         }t        j                         }t        j	                  ||       | j                  |j                         t                y )N)TFr:   r9   r<   sM   UUencoded files may contain many lines,
even some that have 'begin' in them.
)r   r   r5   r   r    r?   r   r=   )r   r3   rB   rC   s       r   test_decodezUUTest.test_decodeM   s    # 	8H**/thOPC**,CIIc3S\\^Y7**:"5$BCC
 **,CIIc3S\\^Y7	8r   c                 *   t        j                  dt        z         }t        j                         }	 t        j	                  ||       | j                  d       y # t        j                  $ r%}| j                  t        |      d       Y d }~y d }~ww xY w)Ns   begin 644 t1
No exception raisedzTruncated input file)	r   r   r/   r   r    failErrorr?   r   r   rB   rC   es       r   test_truncatedinputzUUTest.test_truncatedinput]   sm    jj*[89jjl	=IIc3II+,xx 	=SV%;<<	=s   'A B-BBc                    t        j                  d      }t        j                         }	 t        j                  ||       | j	                  d       y # t        j
                  $ r%}| j                  t        |      d       Y d }~y d }~ww xY w)Nr   rH   z'No valid begin line found in input file)r   r   r   r    rI   rJ   r?   r   rK   s       r   test_missingbeginzUUTest.test_missingbeginf   si    jjojjl	PIIc3II+,xx 	PSV%NOO	Ps   'A B&BBc                    d}d}d}||fD ]  }| j                  d      5  t        j                  |      }t        j                         }t        j	                  ||d       | j                  |j                         |       d d d        | j                  d      5  dd l}|j	                  |d      }| j                  ||       d d d         y # 1 sw Y   NxY w# 1 sw Y   xY w)	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=   r/   rB   rC   rU   decodeds	            r   test_garbage_paddingzUUTest.test_garbage_paddingo   s     	 	 	'5 
	5Km, <jj-jjl		#s$	/  ;	< j) 5 --Z@  )45 5
	5< <5 5s   A"C)CC	C#	c                     t        j                  t              }t        j                         }d}d}t        j	                  |||       | j                  ||j                                y )Nztest.txt
overflow.txts   test.txt\n\roverflow.txt)r   r   r=   r   r>   assertInr   )r   rB   rC   r2   safefilenames        r   test_newlines_escapedzUUTest.test_newlines_escaped   sI    jj#jjl-4
		#sH%lCLLN3r   c                    d}| j                  t        j                  d      5  t        j                  t	        j
                  |             d d d        t        j                  rc|j                  dd      }| j                  t        j                  d      5  t        j                  t	        j
                  |             d d d        d}| j                  t        j                  d      5  t        j                  t	        j
                  |             d d d        t        j                  rd|j                  dd      }| j                  t        j                  d      5  t        j                  t	        j
                  |             d d d        y y # 1 sw Y   ExY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Ns<   begin 644 ../../../../../../../../tmp/test1
$86)C"@``
`
end
	directory   /   \s%   begin 644 /tmp/test2
$86)C"@``
`
end
)	assertRaisesRegexr   rJ   r    r   r   osaltsepr0   )r   relative_badrelative_bad_bsabsolute_badabsolute_bad_bss        r   test_no_directory_traversalz"UUTest.test_no_directory_traversal   sH    ##BHHk: 	0IIbjj./	099*224?O''+> 7		"**_567 ##BHHk: 	0IIbjj./	099*224?O''+> 7		"**_567 7 	0 	07 7	0 	07 7s/   )F)F))F()F4FF%(F14F=N)r%   r&   r'   rD   r   skip_unless_working_chmodrF   rM   rO   rY   r]   ri    r   r   r7   r7   ;   s;    3  ((8 )8=P5<47r   r7   c                   $    e Zd Zd Zd Zd Zd Zy)UUStdIOTestc                 X    t         j                  | _        t         j                  | _        y r   )sysstdinstdoutr!   s    r   setUpzUUStdIOTest.setUp   s    YY
jjr   c                 X    | j                   t        _         | j                  t        _        y r   )rp   ro   rq   r!   s    r   tearDownzUUStdIOTest.tearDown   s    JJ	[[
r   c                 6   t        t        j                  d            t        _        t               t        _        t        j                  dddd       | j                  t        j
                  j                         t        dd      j                  d             y )Nr+   -r9   r:   )r   r=   r    ro   rp   rq   r   r>   r?   r   r5   r!   s    r   rD   zUUStdIOTest.test_encode   sg    9++G45	X

		#sD%(,,.+E48??H	Jr   c                    t        t        dd      j                  d            t        _        t               t        _        t        j                  dd       t        j
                  }| j
                  t        _        | j                  t        _        | j                  |j                         t        j                  d             y )Nr:   r9   r+   rv   )
r   r5   r    ro   rp   rq   r   r?   r   r=   )r   rq   s     r   rF   zUUStdIOTest.test_decode   sy    -eT:AA'JK	X

		#s[[
JJ	*I,<,<W,EFr   N)r%   r&   r'   rr   rt   rD   rF   rk   r   r   rm   rm      s    !!JGr   rm   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
y)
UUFileTestc                    t         j                  dz   | _        t         j                  dz   | _        | j	                  t         j
                  | j                         | j	                  t         j
                  | j                         y )Nio)r   TESTFN_ASCIItmpintmpout
addCleanupunlinkr!   s    r   rr   zUUFileTest.setUp   sV    ,,s2
,,s2	(($**5	(($++6r   c                 n   t        | j                  d      5 }|j                  t               d d d        t        | j                  d      5 }t        | j                  d      5 }t
        j                  ||| j                  d       d d d        d d d        t        | j                  d      5 }|j                         }d d d        | j                  t        d| j                               t
        j                  | j                  | j                  | j                  d       t        | j                  d      5 }|j                         }d d d        | j                  |t        d| j                               y # 1 sw Y   MxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   cxY w)Nwbrbr;   )r1   )
openr~   r   r=   r   r   r>   readr?   r5   )r   finfoutss       r   rD   zUUFileTest.test_encode   sS   $**d# 	!sIIi 	! $**d# 	=sdkk4( =D		#tTZZe	<=	= $++t$ 			A	.udjjAB 			$**dkk4::E	B$++t$ 			A	.udjjAB	! 	!= =	= 	=	 		 	sG   E8F"$FF,F8F+8FF	
FFF(+F4c                    t        | j                  d      5 }|j                  t        d| j                               d d d        t        | j                  d      5 }t
        j                  |       d d d        t        | j                  d      5 }|j                         }d d d        | j                  t               y # 1 sw Y   xY w# 1 sw Y   [xY w# 1 sw Y   8xY wNr   r;   r   
r   r~   r   r5   r   r   r    r   r?   r=   r   fr   s      r   rF   zUUFileTest.test_decode   s    $**d# 	<qGG&udkk:;	< $**d# 	qIIaL	 $++t$ 	A	I&	< 	<	 		 	s#   &B?CC?CCC c                    t        | j                  d      5 }|j                  t        d| j                               d d d        t
        j                  | j                         t        | j                  d      5 }|j                         }d d d        | j                  t               y # 1 sw Y   nxY w# 1 sw Y   ,xY wr   r   r   s      r   test_decode_filenamezUUFileTest.test_decode_filename   s    $**d# 	<qGG&udkk:;	< 			$**$++t$ 	A	I&	< 	<
	 	s   &B*:B6*B36B?c                    t        | j                  d      5 }|j                  t        d| j                               d d d        t        | j                  d      5 }t
        j                  |       d d d        t        | j                  d      5 }| j                  t
        j                  t
        j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   dxY w# 1 sw Y   y xY wr   )	r   r~   r   r5   r   r   r    r@   rJ   )r   r   s     r   test_decodetwicezUUFileTest.test_decodetwice   s     $**d# 	<qGG&udkk:;	<$**d# 	qIIaL	 $**d# 	6qbhh		15	6 	6	< 	<	 		6 	6s#   &CC0C CC C)c                 8   d}t        | j                  d      5 }|j                  t        || j                               d d d        | j                  t        j                  | j                  |t        j                  z         t        | j                  d      5 }t        j                  |       d d d        | j                  t        j                  t        j                  | j                        j                        |       y # 1 sw Y   xY w# 1 sw Y   bxY w)Ni$  r   r   )r   r~   r   r5   r   r   rc   chmodstatS_IWRITEr   r    r?   S_IMODEst_mode)r   expected_moder   s      r   test_decode_modezUUFileTest.test_decode_mode  s     $**d# 	DqGG&}dkkBC	D 	$++}t}}/LM$**d# 	qIIaL	 	LL-556	
	D 	D	 	s   &DDDDN)r%   r&   r'   rr   rD   r   rj   rF   r   r   r   rk   r   r   ry   ry      su    7C& ((	' )	' ((' )' ((6 )6 ((
 )
r   ry   __main__)F)r(   unittesttest.supportr   r   import_deprecatedr   rc   r   ro   r   r=   r/   TextIOWrapperr   r5   TestCaser7   rm   ry   r%   mainrk   r   r   <module>r      s   
  3&_&&t, 	  
 	G	
KR K6t7X t7nG(## G4O
"" O
d ZHMMO r   