diff options
author | Walter Dörwald <walter@livinglogic.de> | 2003-05-06 08:57:41 (GMT) |
---|---|---|
committer | Walter Dörwald <walter@livinglogic.de> | 2003-05-06 08:57:41 (GMT) |
commit | 411e5a2c294ea6cd065f37b634b66bdc101098b7 (patch) | |
tree | 0aa7f2bf53a5816a3829d01960a682edd210b6cd | |
parent | 3539f6b895814ad79c455f7fe633ce253c77c140 (diff) | |
download | cpython-411e5a2c294ea6cd065f37b634b66bdc101098b7.zip cpython-411e5a2c294ea6cd065f37b634b66bdc101098b7.tar.gz cpython-411e5a2c294ea6cd065f37b634b66bdc101098b7.tar.bz2 |
Port test_uu.py to PyUnit. From SF patch #662807.
-rw-r--r-- | Lib/test/test_uu.py | 309 |
1 files changed, 162 insertions, 147 deletions
diff --git a/Lib/test/test_uu.py b/Lib/test/test_uu.py index bb553a1..26d1a7a 100644 --- a/Lib/test/test_uu.py +++ b/Lib/test/test_uu.py @@ -3,155 +3,170 @@ Tests for uu module. Nick Mathewson """ -from test.test_support import verify, TestFailed, verbose, TESTFN -import sys, os +import unittest +from test import test_support + +import sys, os, uu, cStringIO import uu from StringIO import StringIO -teststr = "The smooth-scaled python crept over the sleeping dog\n" -expected = """\ +plaintext = "The smooth-scaled python crept over the sleeping dog\n" + +encodedtext = """\ M5&AE('-M;V]T:\"US8V%L960@<'ET:&]N(&-R97!T(&]V97(@=&AE('-L965P (:6YG(&1O9PH """ -encoded1 = "begin 666 t1\n"+expected+"\n \nend\n" -if verbose: - print '1. encode file->file' -inp = StringIO(teststr) -out = StringIO() -uu.encode(inp, out, "t1") -verify(out.getvalue() == encoded1) -inp = StringIO(teststr) -out = StringIO() -uu.encode(inp, out, "t1", 0644) -verify(out.getvalue() == "begin 644 t1\n"+expected+"\n \nend\n") - -if verbose: - print '2. decode file->file' -inp = StringIO(encoded1) -out = StringIO() -uu.decode(inp, out) -verify(out.getvalue() == teststr) -inp = StringIO("""UUencoded files may contain many lines, - even some that have 'begin' in them.\n"""+encoded1) -out = StringIO() -uu.decode(inp, out) -verify(out.getvalue() == teststr) - -stdinsave = sys.stdin -stdoutsave = sys.stdout -try: - if verbose: - print '3. encode stdin->stdout' - sys.stdin = StringIO(teststr) - sys.stdout = StringIO() - uu.encode("-", "-", "t1", 0666) - verify(sys.stdout.getvalue() == encoded1) - if verbose: - print >>stdoutsave, '4. decode stdin->stdout' - sys.stdin = StringIO(encoded1) - sys.stdout = StringIO() - uu.decode("-", "-") - verify(sys.stdout.getvalue() == teststr) -finally: - sys.stdin = stdinsave - sys.stdout = stdoutsave - -if verbose: - print '5. encode file->file' -tmpIn = TESTFN + "i" -tmpOut = TESTFN + "o" -try: - fin = open(tmpIn, 'wb') - fin.write(teststr) - fin.close() - - fin = open(tmpIn, 'rb') - fout = open(tmpOut, 'w') - uu.encode(fin, fout, tmpIn, mode=0644) - fin.close() - fout.close() - - fout = open(tmpOut, 'r') - s = fout.read() - fout.close() - verify(s == 'begin 644 ' + tmpIn + '\n' + expected + '\n \nend\n') - - os.unlink(tmpIn) - if verbose: - print '6. decode file-> file' - uu.decode(tmpOut) - fin = open(tmpIn, 'rb') - s = fin.read() - fin.close() - verify(s == teststr) - # XXX is there an xp way to verify the mode? - -finally: - try: - fin.close() - except: - pass - try: - fout.close() - except: - pass - try: - os.unlink(tmpIn) - except: - pass - try: - os.unlink(tmpOut) - except: - pass - -if verbose: - print '7. error: truncated input' -inp = StringIO("begin 644 t1\n"+expected) -out = StringIO() -try: - uu.decode(inp, out) - raise TestFailed("No exception thrown") -except uu.Error, e: - verify(str(e) == 'Truncated input file') - -if verbose: - print '8. error: missing begin' -inp = StringIO("") -out = StringIO() -try: - uu.decode(inp, out) - raise TestFailed("No exception thrown") -except uu.Error, e: - verify(str(e) == 'No valid begin line found in input file') - -# Test to verify that decode() will refuse to overwrite an existing file -outfile = TESTFN + "out" -inp = StringIO('Here is a message to be uuencoded') -out = StringIO() -uu.encode(inp, out, outfile) -out.seek(0) -try: - if verbose: - print '9. decode w/file not exists is okay' - uu.decode(out) - if not os.path.exists(outfile): - raise TestFailed('uudecode w/ out_file=None failed') - fp = open(outfile) - data = fp.read() - fp.close() - if data <> inp.getvalue(): - raise TestFailed('uudecode stored something weird') - # Try to write it again, which should cause a failure - if verbose: - print '10. uudecode w/file exists fails' - out.seek(0) - try: - uu.decode(out) - except uu.Error: - pass - else: - raise TestFailed('expected to get a "file exists" error') -finally: - try: - os.unlink(outfile) - except OSError: - pass + +encodedtextwrapped = "begin %03o %s\n" + encodedtext.replace("%", "%%") + "\n \nend\n" + +class UUTest(unittest.TestCase): + + def test_encode(self): + inp = cStringIO.StringIO(plaintext) + out = cStringIO.StringIO() + uu.encode(inp, out, "t1") + self.assertEqual(out.getvalue(), encodedtextwrapped % (0666, "t1")) + inp = cStringIO.StringIO(plaintext) + out = cStringIO.StringIO() + uu.encode(inp, out, "t1", 0644) + self.assertEqual(out.getvalue(), encodedtextwrapped % (0644, "t1")) + + def test_decode(self): + inp = cStringIO.StringIO(encodedtextwrapped % (0666, "t1")) + out = cStringIO.StringIO() + uu.decode(inp, out) + self.assertEqual(out.getvalue(), plaintext) + inp = cStringIO.StringIO( + "UUencoded files may contain many lines,\n" + + "even some that have 'begin' in them.\n" + + encodedtextwrapped % (0666, "t1") + ) + out = cStringIO.StringIO() + uu.decode(inp, out) + self.assertEqual(out.getvalue(), plaintext) + + def test_truncatedinput(self): + inp = cStringIO.StringIO("begin 644 t1\n" + encodedtext) + out = cStringIO.StringIO() + try: + uu.decode(inp, out) + self.fail("No exception thrown") + except uu.Error, e: + self.assertEqual(str(e), "Truncated input file") + + def test_missingbegin(self): + inp = cStringIO.StringIO("") + out = cStringIO.StringIO() + try: + uu.decode(inp, out) + self.fail("No exception thrown") + except uu.Error, e: + self.assertEqual(str(e), "No valid begin line found in input file") + +class UUStdIOTest(unittest.TestCase): + + def setUp(self): + self.stdin = sys.stdin + self.stdout = sys.stdout + + def tearDown(self): + sys.stdin = self.stdin + sys.stdout = self.stdout + + def test_encode(self): + sys.stdin = cStringIO.StringIO(plaintext) + sys.stdout = cStringIO.StringIO() + uu.encode("-", "-", "t1", 0666) + self.assertEqual( + sys.stdout.getvalue(), + encodedtextwrapped % (0666, "t1") + ) + + def test_decode(self): + sys.stdin = cStringIO.StringIO(encodedtextwrapped % (0666, "t1")) + sys.stdout = cStringIO.StringIO() + uu.decode("-", "-") + self.assertEqual(sys.stdout.getvalue(), plaintext) + +class UUFileTest(unittest.TestCase): + + def _kill(self, f): + # close and remove file + try: + f.close() + except (SystemExit, KeyboardInterrupt): + raise + except: + pass + try: + os.unlink(f.name) + except (SystemExit, KeyboardInterrupt): + raise + except: + pass + + def setUp(self): + self.tmpin = test_support.TESTFN + "i" + self.tmpout = test_support.TESTFN + "o" + + def tearDown(self): + del self.tmpin + del self.tmpout + + def test_encode(self): + try: + fin = open(self.tmpin, 'wb') + fin.write(plaintext) + fin.close() + + fin = open(self.tmpin, 'rb') + fout = open(self.tmpout, 'w') + uu.encode(fin, fout, self.tmpin, mode=0644) + fin.close() + fout.close() + + fout = open(self.tmpout, 'r') + s = fout.read() + fout.close() + self.assertEqual(s, encodedtextwrapped % (0644, self.tmpin)) + finally: + self._kill(fin) + self._kill(fout) + + def test_decode(self): + try: + f = open(self.tmpin, 'wb') + f.write(encodedtextwrapped % (0644, self.tmpout)) + f.close() + + f = open(self.tmpin, 'rb') + uu.decode(f) + f.close() + + f = open(self.tmpout, 'r') + s = f.read() + f.close() + self.assertEqual(s, plaintext) + # XXX is there an xp way to verify the mode? + finally: + self._kill(f) + + def test_decodetwice(self): + # Verify that decode() will refuse to overwrite an existing file + try: + f = cStringIO.StringIO(encodedtextwrapped % (0644, self.tmpout)) + + f = open(self.tmpin, 'rb') + uu.decode(f) + f.close() + + f = open(self.tmpin, 'rb') + self.assertRaises(uu.Error, uu.decode, f) + f.close() + finally: + self._kill(f) + +def test_main(): + test_support.run_unittest(UUTest, UUStdIOTest, UUFileTest) + +if __name__=="__main__": + test_main() |