diff --git a/Lib/test/test_rfc822.py b/Lib/test/test_rfc822.py
index e59d5b3..5427257 100644
--- a/Lib/test/test_rfc822.py
+++ b/Lib/test/test_rfc822.py
@@ -1,144 +1,168 @@
-from test_support import verbose, verify
-import rfc822, sys
+import rfc822
+import sys
+import test_support
+import unittest
+
 try:
     from cStringIO import StringIO
 except ImportError:
     from StringIO import StringIO
 
-def test(msg, results):
-    fp = StringIO()
-    fp.write(msg)
-    fp.seek(0)
-    m = rfc822.Message(fp)
-    i = 0
 
-    for n, a in m.getaddrlist('to') + m.getaddrlist('cc'):
-        if verbose:
-            print 'name:', repr(n), 'addr:', repr(a)
-        try:
-            mn, ma = results[i][0], results[i][1]
-        except IndexError:
-            print 'extra parsed address:', repr(n), repr(a)
-            continue
-        i = i + 1
-        if mn == n and ma == a:
-            if verbose:
-                print '    [matched]'
-        else:
-            if verbose:
-                print '    [no match]'
-            print 'not found:', repr(n), repr(a)
+class MessageTestCase(unittest.TestCase):
+    def create_message(self, msg):
+        return rfc822.Message(StringIO(msg))
 
-    out = m.getdate('date')
-    if out:
-        if verbose:
-            print 'Date:', m.getheader('date')
-        if out == (1999, 1, 13, 23, 57, 35, 0, 0, 0):
-            if verbose:
-                print '    [matched]'
-        else:
-            if verbose:
-                print '    [no match]'
-            print 'Date conversion failed:', out
+    def test_get(self):
+        msg = self.create_message(
+            'To: "last, first" <userid@foo.net>\n\ntest\n')
+        self.assert_(msg.get("to") == '"last, first" <userid@foo.net>')
+        self.assert_(msg.get("TO") == '"last, first" <userid@foo.net>')
+        self.assert_(msg.get("No-Such-Header") == "")
+        self.assert_(msg.get("No-Such-Header", "No-Such-Value")
+                     == "No-Such-Value")
 
-# Note: all test cases must have the same date (in various formats),
-# or no date!
+    def test_setdefault(self):
+        msg = self.create_message(
+            'To: "last, first" <userid@foo.net>\n\ntest\n')
+        self.assert_(not msg.has_key("New-Header"))
+        self.assert_(msg.setdefault("New-Header", "New-Value") == "New-Value")
+        self.assert_(msg.setdefault("New-Header", "Different-Value")
+                     == "New-Value")
+        self.assert_(msg["new-header"] == "New-Value")
 
-test('''Date:    Wed, 13 Jan 1999 23:57:35 -0500
-From:    Guido van Rossum <guido@CNRI.Reston.VA.US>
-To:      "Guido van
-\t : Rossum" <guido@python.org>
-Subject: test2
+        self.assert_(msg.setdefault("Another-Header") == "")
+        self.assert_(msg["another-header"] == "")
 
-test2
-''', [('Guido van\n\t : Rossum', 'guido@python.org')])
+    def check(self, msg, results):
+        """Check addresses and the date."""
+        m = self.create_message(msg)
+        i = 0
+        for n, a in m.getaddrlist('to') + m.getaddrlist('cc'):
+            try:
+                mn, ma = results[i][0], results[i][1]
+            except IndexError:
+                print 'extra parsed address:', repr(n), repr(a)
+                continue
+            i = i + 1
+            if mn == n and ma == a:
+                pass
+            else:
+                print 'not found:', repr(n), repr(a)
 
-test('''From: Barry <bwarsaw@python.org
-To: guido@python.org (Guido: the Barbarian)
-Subject: nonsense
-Date: Wednesday, January 13 1999 23:57:35 -0500
-
-test''', [('Guido: the Barbarian', 'guido@python.org'),
-          ])
-
-test('''From: Barry <bwarsaw@python.org
-To: guido@python.org (Guido: the Barbarian)
-Cc: "Guido: the Madman" <guido@python.org>
-Date:  13-Jan-1999 23:57:35 EST
-
-test''', [('Guido: the Barbarian', 'guido@python.org'),
-          ('Guido: the Madman', 'guido@python.org')
-          ])
-
-test('''To: "The monster with
-     the very long name: Guido" <guido@python.org>
-Date:    Wed, 13 Jan 1999 23:57:35 -0500
-
-test''', [('The monster with\n     the very long name: Guido',
-           'guido@python.org')])
-
-test('''To: "Amit J. Patel" <amitp@Theory.Stanford.EDU>
-CC: Mike Fletcher <mfletch@vrtelecom.com>,
-        "'string-sig@python.org'" <string-sig@python.org>
-Cc: fooz@bat.com, bart@toof.com
-Cc: goit@lip.com
-Date:    Wed, 13 Jan 1999 23:57:35 -0500
-
-test''', [('Amit J. Patel', 'amitp@Theory.Stanford.EDU'),
-          ('Mike Fletcher', 'mfletch@vrtelecom.com'),
-          ("'string-sig@python.org'", 'string-sig@python.org'),
-          ('', 'fooz@bat.com'),
-          ('', 'bart@toof.com'),
-          ('', 'goit@lip.com'),
-          ])
-
-# This one is just twisted.  I don't know what the proper result should be,
-# but it shouldn't be to infloop, which is what used to happen!
-test('''To: <[smtp:dd47@mail.xxx.edu]_at_hmhq@hdq-mdm1-imgout.companay.com>
-Date:    Wed, 13 Jan 1999 23:57:35 -0500
-
-test''', [('', ''),
-          ('', 'dd47@mail.xxx.edu'),
-          ('', '_at_hmhq@hdq-mdm1-imgout.companay.com')
-          ])
-
-# This exercises the old commas-in-a-full-name bug, which should be doing the
-# right thing in recent versions of the module.
-test('''To: "last, first" <userid@foo.net>
-
-test''', [('last, first', 'userid@foo.net'),
-          ])
-
-test('''To: (Comment stuff) "Quoted name"@somewhere.com
-
-test''', [('Comment stuff', '"Quoted name"@somewhere.com'),
-          ])
-
-test('''To: :
-Cc: goit@lip.com
-Date:    Wed, 13 Jan 1999 23:57:35 -0500
-
-test''', [('', 'goit@lip.com')])
+        out = m.getdate('date')
+        if out:
+            self.assertEqual(out,
+                             (1999, 1, 13, 23, 57, 35, 0, 0, 0),
+                             "date conversion failed")
 
 
-test('''To: guido@[132.151.1.21]
+    # Note: all test cases must have the same date (in various formats),
+    # or no date!
 
-foo''', [('', 'guido@[132.151.1.21]')])
+    def test_basic(self):
+        self.check(
+            'Date:    Wed, 13 Jan 1999 23:57:35 -0500\n'
+            'From:    Guido van Rossum <guido@CNRI.Reston.VA.US>\n'
+            'To:      "Guido van\n'
+            '\t : Rossum" <guido@python.org>\n'
+            'Subject: test2\n'
+            '\n'
+            'test2\n',
+            [('Guido van\n\t : Rossum', 'guido@python.org')])
+
+        self.check(
+            'From: Barry <bwarsaw@python.org\n'
+            'To: guido@python.org (Guido: the Barbarian)\n'
+            'Subject: nonsense\n'
+            'Date: Wednesday, January 13 1999 23:57:35 -0500\n'
+            '\n'
+            'test',
+            [('Guido: the Barbarian', 'guido@python.org')])
+
+        self.check(
+            'From: Barry <bwarsaw@python.org\n'
+            'To: guido@python.org (Guido: the Barbarian)\n'
+            'Cc: "Guido: the Madman" <guido@python.org>\n'
+            'Date:  13-Jan-1999 23:57:35 EST\n'
+            '\n'
+            'test',
+            [('Guido: the Barbarian', 'guido@python.org'),
+             ('Guido: the Madman', 'guido@python.org')
+             ])
+
+        self.check(
+            'To: "The monster with\n'
+            '     the very long name: Guido" <guido@python.org>\n'
+            'Date:    Wed, 13 Jan 1999 23:57:35 -0500\n'
+            '\n'
+            'test',
+            [('The monster with\n     the very long name: Guido',
+              'guido@python.org')])
+
+        self.check(
+            'To: "Amit J. Patel" <amitp@Theory.Stanford.EDU>\n'
+            'CC: Mike Fletcher <mfletch@vrtelecom.com>,\n'
+            '        "\'string-sig@python.org\'" <string-sig@python.org>\n'
+            'Cc: fooz@bat.com, bart@toof.com\n'
+            'Cc: goit@lip.com\n'
+            'Date:    Wed, 13 Jan 1999 23:57:35 -0500\n'
+            '\n'
+            'test',
+            [('Amit J. Patel', 'amitp@Theory.Stanford.EDU'),
+             ('Mike Fletcher', 'mfletch@vrtelecom.com'),
+             ("'string-sig@python.org'", 'string-sig@python.org'),
+             ('', 'fooz@bat.com'),
+             ('', 'bart@toof.com'),
+             ('', 'goit@lip.com'),
+             ])
+
+    def test_twisted(self):
+        # This one is just twisted.  I don't know what the proper
+        # result should be, but it shouldn't be to infloop, which is
+        # what used to happen!
+        self.check(
+            'To: <[smtp:dd47@mail.xxx.edu]_at_hmhq@hdq-mdm1-imgout.companay.com>\n'
+            'Date:    Wed, 13 Jan 1999 23:57:35 -0500\n'
+            '\n'
+            'test',
+            [('', ''),
+             ('', 'dd47@mail.xxx.edu'),
+             ('', '_at_hmhq@hdq-mdm1-imgout.companay.com'),
+             ])
+
+    def test_commas_in_full_name(self):
+        # This exercises the old commas-in-a-full-name bug, which
+        # should be doing the right thing in recent versions of the
+        # module.
+        self.check(
+            'To: "last, first" <userid@foo.net>\n'
+            '\n'
+            'test',
+            [('last, first', 'userid@foo.net')])
+
+    def test_quoted_name(self):
+        self.check(
+            'To: (Comment stuff) "Quoted name"@somewhere.com\n'
+            '\n'
+            'test',
+            [('Comment stuff', '"Quoted name"@somewhere.com')])
+
+    def test_bogus_to_header(self):
+        self.check(
+            'To: :\n'
+            'Cc: goit@lip.com\n'
+            'Date:    Wed, 13 Jan 1999 23:57:35 -0500\n'
+            '\n'
+            'test',
+            [('', 'goit@lip.com')])
+
+    def test_addr_ipquad(self):
+        self.check(
+            'To: guido@[132.151.1.21]\n'
+            '\n'
+            'foo',
+            [('', 'guido@[132.151.1.21]')])
 
 
-msg = rfc822.Message(StringIO('''To: "last, first" <userid@foo.net>
-
-test
-'''))
-verify(msg.get("to") == '"last, first" <userid@foo.net>')
-verify(msg.get("TO") == '"last, first" <userid@foo.net>')
-verify(msg.get("No-Such-Header") is None)
-verify(msg.get("No-Such-Header", "No-Such-Value") == "No-Such-Value")
-
-verify(not msg.has_key("New-Header"))
-verify(msg.setdefault("New-Header", "New-Value") == "New-Value")
-verify(msg.setdefault("New-Header", "Different-Value") == "New-Value")
-verify(msg["new-header"] == "New-Value")
-
-verify(msg.setdefault("Another-Header") == "")
-verify(msg["another-header"] == "")
+test_support.run_unittest(MessageTestCase)
