SF patch #440144: Tests and minor bugfix for uu module.
New test_uu.py from Nick Mathewson, fiddled to work on Windows too.
Somebody should check that it still works on non-Windows boxes, though!
diff --git a/Lib/test/test_sundry.py b/Lib/test/test_sundry.py
index b1a339f..f2a4c76 100644
--- a/Lib/test/test_sundry.py
+++ b/Lib/test/test_sundry.py
@@ -96,7 +96,6 @@
# Can't test the "user" module -- if the user has a ~/.pythonrc.py, it
# can screw up all sorts of things (esp. if it prints!).
#import user
-import uu
import webbrowser
import whichdb
import xdrlib
diff --git a/Lib/test/test_uu.py b/Lib/test/test_uu.py
new file mode 100644
index 0000000..503976a
--- /dev/null
+++ b/Lib/test/test_uu.py
@@ -0,0 +1,124 @@
+"""
+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')