From bfb997d6a5a7fa79a67d63355390337d4e796b6c Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Thu, 8 May 2008 19:50:51 +0000 Subject: [PATCH] Make test.test_support.catch_warning() take an argument specifying if any 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 | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py index fe5cf0fd3d5..25494a919ca 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -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