1010import uu
1111import io
1212
13- plaintext = b"The smooth-scaled python crept over the sleeping dog \n "
13+ plaintext = b"The symbols on top of your keyboard are !@#$%^&*()_+|~ \n "
1414
1515encodedtext = b"""\
16- M5&AE('-M;V]T: \" US8V%L960@<'ET:&]N(&-R97!T(&]V97(@=&AE('-L965P
17- (:6YG(&1O9PH """
16+ M5&AE('-Y;6)O;',@;VX@=&]P(&]F('EO=7(@:V5Y8F]A<F0@87)E("% (R0E
17+ *7B8J*"E?*WQ^"@ """
1818
1919# Stolen from io.py
2020class FakeIO (io .TextIOWrapper ):
@@ -44,9 +44,14 @@ def getvalue(self):
4444 return self .buffer .getvalue ().decode (self ._encoding , self ._errors )
4545
4646
47- def encodedtextwrapped (mode , filename ):
48- return (bytes ("begin %03o %s\n " % (mode , filename ), "ascii" ) +
49- encodedtext + b"\n \n end\n " )
47+ def encodedtextwrapped (mode , filename , backtick = False ):
48+ if backtick :
49+ res = (bytes ("begin %03o %s\n " % (mode , filename ), "ascii" ) +
50+ encodedtext .replace (b' ' , b'`' ) + b"\n `\n end\n " )
51+ else :
52+ res = (bytes ("begin %03o %s\n " % (mode , filename ), "ascii" ) +
53+ encodedtext + b"\n \n end\n " )
54+ return res
5055
5156class UUTest (unittest .TestCase ):
5257
@@ -59,20 +64,27 @@ def test_encode(self):
5964 out = io .BytesIO ()
6065 uu .encode (inp , out , "t1" , 0o644 )
6166 self .assertEqual (out .getvalue (), encodedtextwrapped (0o644 , "t1" ))
67+ inp = io .BytesIO (plaintext )
68+ out = io .BytesIO ()
69+ uu .encode (inp , out , "t1" , backtick = True )
70+ self .assertEqual (out .getvalue (), encodedtextwrapped (0o666 , "t1" , True ))
71+ with self .assertRaises (TypeError ):
72+ uu .encode (inp , out , "t1" , 0o644 , True )
6273
6374 def test_decode (self ):
64- inp = io .BytesIO (encodedtextwrapped (0o666 , "t1" ))
65- out = io .BytesIO ()
66- uu .decode (inp , out )
67- self .assertEqual (out .getvalue (), plaintext )
68- inp = io .BytesIO (
69- b"UUencoded files may contain many lines,\n " +
70- b"even some that have 'begin' in them.\n " +
71- encodedtextwrapped (0o666 , "t1" )
72- )
73- out = io .BytesIO ()
74- uu .decode (inp , out )
75- self .assertEqual (out .getvalue (), plaintext )
75+ for backtick in True , False :
76+ inp = io .BytesIO (encodedtextwrapped (0o666 , "t1" , backtick = backtick ))
77+ out = io .BytesIO ()
78+ uu .decode (inp , out )
79+ self .assertEqual (out .getvalue (), plaintext )
80+ inp = io .BytesIO (
81+ b"UUencoded files may contain many lines,\n " +
82+ b"even some that have 'begin' in them.\n " +
83+ encodedtextwrapped (0o666 , "t1" , backtick = backtick )
84+ )
85+ out = io .BytesIO ()
86+ uu .decode (inp , out )
87+ self .assertEqual (out .getvalue (), plaintext )
7688
7789 def test_truncatedinput (self ):
7890 inp = io .BytesIO (b"begin 644 t1\n " + encodedtext )
@@ -94,25 +106,33 @@ def test_missingbegin(self):
94106
95107 def test_garbage_padding (self ):
96108 # Issue #22406
97- encodedtext = (
109+ encodedtext1 = (
98110 b"begin 644 file\n "
99111 # length 1; bits 001100 111111 111111 111111
100112 b"\x21 \x2C \x5F \x5F \x5F \n "
101113 b"\x20 \n "
102114 b"end\n "
103115 )
116+ encodedtext2 = (
117+ b"begin 644 file\n "
118+ # length 1; bits 001100 111111 111111 111111
119+ b"\x21 \x2C \x5F \x5F \x5F \n "
120+ b"\x60 \n "
121+ b"end\n "
122+ )
104123 plaintext = b"\x33 " # 00110011
105124
106- with self .subTest ("uu.decode()" ):
107- inp = io .BytesIO (encodedtext )
108- out = io .BytesIO ()
109- uu .decode (inp , out , quiet = True )
110- self .assertEqual (out .getvalue (), plaintext )
125+ for encodedtext in encodedtext1 , encodedtext2 :
126+ with self .subTest ("uu.decode()" ):
127+ inp = io .BytesIO (encodedtext )
128+ out = io .BytesIO ()
129+ uu .decode (inp , out , quiet = True )
130+ self .assertEqual (out .getvalue (), plaintext )
111131
112- with self .subTest ("uu_codec" ):
113- import codecs
114- decoded = codecs .decode (encodedtext , "uu_codec" )
115- self .assertEqual (decoded , plaintext )
132+ with self .subTest ("uu_codec" ):
133+ import codecs
134+ decoded = codecs .decode (encodedtext , "uu_codec" )
135+ self .assertEqual (decoded , plaintext )
116136
117137class UUStdIOTest (unittest .TestCase ):
118138
@@ -250,11 +270,6 @@ def test_decodetwice(self):
250270 finally :
251271 self ._kill (f )
252272
253- def test_main ():
254- support .run_unittest (UUTest ,
255- UUStdIOTest ,
256- UUFileTest ,
257- )
258273
259274if __name__ == "__main__" :
260- test_main ()
275+ unittest . main ()
0 commit comments