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')
