1 | """
|
---|
2 | Tests for uu module.
|
---|
3 | Nick Mathewson
|
---|
4 | """
|
---|
5 |
|
---|
6 | import unittest
|
---|
7 | from test import test_support
|
---|
8 |
|
---|
9 | import sys, os, uu, cStringIO
|
---|
10 | import uu
|
---|
11 |
|
---|
12 | plaintext = "The smooth-scaled python crept over the sleeping dog\n"
|
---|
13 |
|
---|
14 | encodedtext = """\
|
---|
15 | M5&AE('-M;V]T:\"US8V%L960@<'ET:&]N(&-R97!T(&]V97(@=&AE('-L965P
|
---|
16 | (:6YG(&1O9PH """
|
---|
17 |
|
---|
18 | encodedtextwrapped = "begin %03o %s\n" + encodedtext.replace("%", "%%") + "\n \nend\n"
|
---|
19 |
|
---|
20 | class UUTest(unittest.TestCase):
|
---|
21 |
|
---|
22 | def test_encode(self):
|
---|
23 | inp = cStringIO.StringIO(plaintext)
|
---|
24 | out = cStringIO.StringIO()
|
---|
25 | uu.encode(inp, out, "t1")
|
---|
26 | self.assertEqual(out.getvalue(), encodedtextwrapped % (0666, "t1"))
|
---|
27 | inp = cStringIO.StringIO(plaintext)
|
---|
28 | out = cStringIO.StringIO()
|
---|
29 | uu.encode(inp, out, "t1", 0644)
|
---|
30 | self.assertEqual(out.getvalue(), encodedtextwrapped % (0644, "t1"))
|
---|
31 |
|
---|
32 | def test_decode(self):
|
---|
33 | inp = cStringIO.StringIO(encodedtextwrapped % (0666, "t1"))
|
---|
34 | out = cStringIO.StringIO()
|
---|
35 | uu.decode(inp, out)
|
---|
36 | self.assertEqual(out.getvalue(), plaintext)
|
---|
37 | inp = cStringIO.StringIO(
|
---|
38 | "UUencoded files may contain many lines,\n" +
|
---|
39 | "even some that have 'begin' in them.\n" +
|
---|
40 | encodedtextwrapped % (0666, "t1")
|
---|
41 | )
|
---|
42 | out = cStringIO.StringIO()
|
---|
43 | uu.decode(inp, out)
|
---|
44 | self.assertEqual(out.getvalue(), plaintext)
|
---|
45 |
|
---|
46 | def test_truncatedinput(self):
|
---|
47 | inp = cStringIO.StringIO("begin 644 t1\n" + encodedtext)
|
---|
48 | out = cStringIO.StringIO()
|
---|
49 | try:
|
---|
50 | uu.decode(inp, out)
|
---|
51 | self.fail("No exception raised")
|
---|
52 | except uu.Error, e:
|
---|
53 | self.assertEqual(str(e), "Truncated input file")
|
---|
54 |
|
---|
55 | def test_missingbegin(self):
|
---|
56 | inp = cStringIO.StringIO("")
|
---|
57 | out = cStringIO.StringIO()
|
---|
58 | try:
|
---|
59 | uu.decode(inp, out)
|
---|
60 | self.fail("No exception raised")
|
---|
61 | except uu.Error, e:
|
---|
62 | self.assertEqual(str(e), "No valid begin line found in input file")
|
---|
63 |
|
---|
64 | class UUStdIOTest(unittest.TestCase):
|
---|
65 |
|
---|
66 | def setUp(self):
|
---|
67 | self.stdin = sys.stdin
|
---|
68 | self.stdout = sys.stdout
|
---|
69 |
|
---|
70 | def tearDown(self):
|
---|
71 | sys.stdin = self.stdin
|
---|
72 | sys.stdout = self.stdout
|
---|
73 |
|
---|
74 | def test_encode(self):
|
---|
75 | sys.stdin = cStringIO.StringIO(plaintext)
|
---|
76 | sys.stdout = cStringIO.StringIO()
|
---|
77 | uu.encode("-", "-", "t1", 0666)
|
---|
78 | self.assertEqual(
|
---|
79 | sys.stdout.getvalue(),
|
---|
80 | encodedtextwrapped % (0666, "t1")
|
---|
81 | )
|
---|
82 |
|
---|
83 | def test_decode(self):
|
---|
84 | sys.stdin = cStringIO.StringIO(encodedtextwrapped % (0666, "t1"))
|
---|
85 | sys.stdout = cStringIO.StringIO()
|
---|
86 | uu.decode("-", "-")
|
---|
87 | self.assertEqual(sys.stdout.getvalue(), plaintext)
|
---|
88 |
|
---|
89 | class UUFileTest(unittest.TestCase):
|
---|
90 |
|
---|
91 | def _kill(self, f):
|
---|
92 | # close and remove file
|
---|
93 | try:
|
---|
94 | f.close()
|
---|
95 | except (SystemExit, KeyboardInterrupt):
|
---|
96 | raise
|
---|
97 | except:
|
---|
98 | pass
|
---|
99 | try:
|
---|
100 | os.unlink(f.name)
|
---|
101 | except (SystemExit, KeyboardInterrupt):
|
---|
102 | raise
|
---|
103 | except:
|
---|
104 | pass
|
---|
105 |
|
---|
106 | def setUp(self):
|
---|
107 | self.tmpin = test_support.TESTFN + "i"
|
---|
108 | self.tmpout = test_support.TESTFN + "o"
|
---|
109 |
|
---|
110 | def tearDown(self):
|
---|
111 | del self.tmpin
|
---|
112 | del self.tmpout
|
---|
113 |
|
---|
114 | def test_encode(self):
|
---|
115 | fin = fout = None
|
---|
116 | try:
|
---|
117 | test_support.unlink(self.tmpin)
|
---|
118 | fin = open(self.tmpin, 'wb')
|
---|
119 | fin.write(plaintext)
|
---|
120 | fin.close()
|
---|
121 |
|
---|
122 | fin = open(self.tmpin, 'rb')
|
---|
123 | fout = open(self.tmpout, 'w')
|
---|
124 | uu.encode(fin, fout, self.tmpin, mode=0644)
|
---|
125 | fin.close()
|
---|
126 | fout.close()
|
---|
127 |
|
---|
128 | fout = open(self.tmpout, 'r')
|
---|
129 | s = fout.read()
|
---|
130 | fout.close()
|
---|
131 | self.assertEqual(s, encodedtextwrapped % (0644, self.tmpin))
|
---|
132 |
|
---|
133 | # in_file and out_file as filenames
|
---|
134 | uu.encode(self.tmpin, self.tmpout, self.tmpin, mode=0644)
|
---|
135 | fout = open(self.tmpout, 'r')
|
---|
136 | s = fout.read()
|
---|
137 | fout.close()
|
---|
138 | self.assertEqual(s, encodedtextwrapped % (0644, self.tmpin))
|
---|
139 |
|
---|
140 | finally:
|
---|
141 | self._kill(fin)
|
---|
142 | self._kill(fout)
|
---|
143 |
|
---|
144 | def test_decode(self):
|
---|
145 | f = None
|
---|
146 | try:
|
---|
147 | test_support.unlink(self.tmpin)
|
---|
148 | f = open(self.tmpin, 'w')
|
---|
149 | f.write(encodedtextwrapped % (0644, self.tmpout))
|
---|
150 | f.close()
|
---|
151 |
|
---|
152 | f = open(self.tmpin, 'r')
|
---|
153 | uu.decode(f)
|
---|
154 | f.close()
|
---|
155 |
|
---|
156 | f = open(self.tmpout, 'r')
|
---|
157 | s = f.read()
|
---|
158 | f.close()
|
---|
159 | self.assertEqual(s, plaintext)
|
---|
160 | # XXX is there an xp way to verify the mode?
|
---|
161 | finally:
|
---|
162 | self._kill(f)
|
---|
163 |
|
---|
164 | def test_decode_filename(self):
|
---|
165 | f = None
|
---|
166 | try:
|
---|
167 | test_support.unlink(self.tmpin)
|
---|
168 | f = open(self.tmpin, 'w')
|
---|
169 | f.write(encodedtextwrapped % (0644, self.tmpout))
|
---|
170 | f.close()
|
---|
171 |
|
---|
172 | uu.decode(self.tmpin)
|
---|
173 |
|
---|
174 | f = open(self.tmpout, 'r')
|
---|
175 | s = f.read()
|
---|
176 | f.close()
|
---|
177 | self.assertEqual(s, plaintext)
|
---|
178 | finally:
|
---|
179 | self._kill(f)
|
---|
180 |
|
---|
181 | def test_decodetwice(self):
|
---|
182 | # Verify that decode() will refuse to overwrite an existing file
|
---|
183 | f = None
|
---|
184 | try:
|
---|
185 | f = cStringIO.StringIO(encodedtextwrapped % (0644, self.tmpout))
|
---|
186 |
|
---|
187 | f = open(self.tmpin, 'r')
|
---|
188 | uu.decode(f)
|
---|
189 | f.close()
|
---|
190 |
|
---|
191 | f = open(self.tmpin, 'r')
|
---|
192 | self.assertRaises(uu.Error, uu.decode, f)
|
---|
193 | f.close()
|
---|
194 | finally:
|
---|
195 | self._kill(f)
|
---|
196 |
|
---|
197 | def test_main():
|
---|
198 | test_support.run_unittest(UUTest, UUStdIOTest, UUFileTest)
|
---|
199 |
|
---|
200 | if __name__=="__main__":
|
---|
201 | test_main()
|
---|