| """ |
| Tests for uu module. |
| Nick Mathewson |
| """ |
| |
| from test_support import verify, TestFailed, verbose, TESTFN |
| import sys, os |
| import uu |
| from StringIO import StringIO |
| |
| teststr = "The smooth-scaled python crept over the sleeping dog\n" |
| expected = """\ |
| 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, 'w') |
| fin.write(teststr) |
| fin.close() |
| |
| fin = open(tmpIn, 'r') |
| 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, 'r') |
| 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') |