diff --git a/Lib/test/output/test_warnings b/Lib/test/output/test_warnings
deleted file mode 100644
index 8fe6d47..0000000
--- a/Lib/test/output/test_warnings
+++ /dev/null
@@ -1,10 +0,0 @@
-test_warnings
-('ignore', False, 'FutureWarning', False, 0)
-('ignore', True, 'OverflowWarning', True, 0)
-('ignore', True, 'PendingDeprecationWarning', True, 0)
-test_warnings.py:31: UserWarning: hello world
-test_warnings.py:32: UserWarning: hello world
-test_warnings.py:33: DeprecationWarning: hello world
-test_warnings.py:35: UserWarning: hello world
-Caught UserWarning: hello world
-Caught AssertionError: invalid action: 'booh'
diff --git a/Lib/test/test_warnings.py b/Lib/test/test_warnings.py
index 5e8574b..4bfae32 100644
--- a/Lib/test/test_warnings.py
+++ b/Lib/test/test_warnings.py
@@ -1,53 +1,88 @@
 import warnings
 import os
+import unittest
+from test import test_support
 
 # The warnings module isn't easily tested, because it relies on module
-# globals to store configuration information.  We need to extract the
-# current settings to avoid bashing them while running tests.
+# globals to store configuration information.  setUp() and tearDown()
+# preserve the current settings to avoid bashing them while running tests.
 
-_filters = []
-_showwarning = None
+# To capture the warning messages, a replacement for showwarning() is
+# used to save warning information in a global variable.
+
+class WarningMessage:
+    "Holds results of latest showwarning() call"
+    pass
 
 def showwarning(message, category, filename, lineno, file=None):
-    filename = os.path.basename(filename)
-    print "%s:%s: %s: %s" % (filename, lineno, category.__name__, message)
+    msg.message = str(message)
+    msg.category = category.__name__
+    msg.filename = os.path.basename(filename)
+    msg.lineno = lineno
 
-def monkey():
-    global _filters, _showwarning
-    _filters = warnings.filters[:]
-    _showwarning = warnings.showwarning
-    warnings.showwarning = showwarning
+class TestModule(unittest.TestCase):
 
-def unmonkey():
-    warnings.filters = _filters[:]
-    warnings.showwarning = _showwarning
+    def setUp(self):
+        global msg
+        msg = WarningMessage()
+        self._filters = warnings.filters[:]
+        self._showwarning = warnings.showwarning
+        warnings.showwarning = showwarning
+        self.ignored = [w[2].__name__ for w in self._filters
+            if w[0]=='ignore' and w[1] is None and w[3] is None]
 
-def test():
-    for item in warnings.filters:
-        print (item[0], item[1] is None, item[2].__name__, item[3] is None,
-               item[4])
-    hello = "hello world"
-    for i in range(4):
-        warnings.warn(hello)
-    warnings.warn(hello, UserWarning)
-    warnings.warn(hello, DeprecationWarning)
-    for i in range(3):
-        warnings.warn(hello)
-    warnings.filterwarnings("error", "", Warning, "", 0)
-    try:
-        warnings.warn(hello)
-    except Exception, msg:
-        print "Caught", msg.__class__.__name__ + ":", msg
-    else:
-        print "No exception"
-    warnings.resetwarnings()
-    try:
-        warnings.filterwarnings("booh", "", Warning, "", 0)
-    except Exception, msg:
-        print "Caught", msg.__class__.__name__ + ":", msg
-    else:
-        print "No exception"
+    def tearDown(self):
+        warnings.filters = self._filters[:]
+        warnings.showwarning = self._showwarning
 
-monkey()
-test()
-unmonkey()
+    def test_warn_default_category(self):
+        for i in range(4):
+            text = 'multi %d' %i    # Different text on each call
+            warnings.warn(text)
+            self.assertEqual(msg.message, text)
+            self.assertEqual(msg.category, 'UserWarning')
+
+    def test_warn_specific_category(self):
+        text = 'None'
+        for category in [DeprecationWarning, FutureWarning, OverflowWarning,
+                    PendingDeprecationWarning, RuntimeWarning,
+                    SyntaxWarning, UserWarning, Warning]:
+            if category.__name__ in self.ignored:
+                text = 'filtered out' + category.__name__
+                warnings.warn(text, category)
+                self.assertNotEqual(msg.message, text)
+            else:
+                text = 'unfiltered %s' % category.__name__
+                warnings.warn(text, category)
+                self.assertEqual(msg.message, text)
+                self.assertEqual(msg.category, category.__name__)
+
+    def test_filtering(self):
+
+        warnings.filterwarnings("error", "", Warning, "", 0)
+        self.assertRaises(UserWarning, warnings.warn, 'convert to error')
+
+        warnings.resetwarnings()
+        text = 'handle normally'
+        warnings.warn(text)
+        self.assertEqual(msg.message, text)
+        self.assertEqual(msg.category, 'UserWarning')
+
+        warnings.filterwarnings("ignore", "", Warning, "", 0)
+        text = 'filtered out'
+        warnings.warn(text)
+        self.assertNotEqual(msg.message, text)
+
+        warnings.resetwarnings()
+        warnings.filterwarnings("error", "hex*", Warning, "", 0)
+        self.assertRaises(UserWarning, warnings.warn, 'hex/oct')
+        text = 'nonmatching text'
+        warnings.warn(text)
+        self.assertEqual(msg.message, text)
+        self.assertEqual(msg.category, 'UserWarning')
+
+def test_main(verbose=None):
+    test_support.run_unittest(TestModule)
+
+if __name__ == "__main__":
+    test_main(verbose=True)
