]> granicus.if.org Git - python/commitdiff
Make test.test_support.catch_warning() take an argument specifying if any
authorBrett Cannon <bcannon@gmail.com>
Thu, 8 May 2008 19:50:51 +0000 (19:50 +0000)
committerBrett Cannon <bcannon@gmail.com>
Thu, 8 May 2008 19:50:51 +0000 (19:50 +0000)
triggered warnings should be captured. This allows the context manager to be
used to just prevent the internal state of the 'warnings' framework and thus
allow triggered warnings to be displayed.

Lib/test/test_support.py

index fe5cf0fd3d5d7383524308083125c7de282e9e27..25494a919ca0312dd6fd311c0bb8fa57c9ec79aa 100644 (file)
@@ -40,7 +40,7 @@ class ResourceDenied(TestSkipped):
 def import_module(name, deprecated=False):
     """Import the module to be tested, raising TestSkipped if it is not
     available."""
-    with catch_warning():
+    with catch_warning(record=False):
         if deprecated:
             warnings.filterwarnings("ignore", ".+ module", DeprecationWarning)
         try:
@@ -395,7 +395,7 @@ class WarningMessage(object):
 
 
 @contextlib.contextmanager
-def catch_warning(module=warnings):
+def catch_warning(module=warnings, record=True):
     """
     Guard the warnings filter from being permanently changed and record the
     data of the last warning that has been issued.
@@ -406,12 +406,13 @@ def catch_warning(module=warnings):
             warnings.warn("foo")
             assert str(w.message) == "foo"
     """
-    warning_obj = WarningMessage()
+    if record:
+        warning_obj = WarningMessage()
+        module.showwarning = warning_obj._showwarning
     original_filters = module.filters[:]
     original_showwarning = module.showwarning
-    module.showwarning = warning_obj._showwarning
     try:
-        yield warning_obj
+        yield warning_obj if record else None
     finally:
         module.showwarning = original_showwarning
         module.filters = original_filters