]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/python/contrib/Lib/test/test_uu.py
Inital import
[l4.git] / l4 / pkg / python / contrib / Lib / test / test_uu.py
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 thrown")
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 thrown")
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_decodetwice(self):
165         # Verify that decode() will refuse to overwrite an existing file
166         f = None
167         try:
168             f = cStringIO.StringIO(encodedtextwrapped % (0644, self.tmpout))
169
170             f = open(self.tmpin, 'r')
171             uu.decode(f)
172             f.close()
173
174             f = open(self.tmpin, 'r')
175             self.assertRaises(uu.Error, uu.decode, f)
176             f.close()
177         finally:
178             self._kill(f)
179
180 def test_main():
181     test_support.run_unittest(UUTest, UUStdIOTest, UUFileTest)
182
183 if __name__=="__main__":
184     test_main()