diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py index 69b4d90a1cb..2212fce9912 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -457,11 +457,11 @@ def _filterwarnings(filters, quiet=False): if not seen and not quiet: # This filter caught nothing missing.append((msg, cat.__name__)) - for exc in reraise: - raise AssertionError("unhandled warning %r" % exc) - for filter in missing: - raise AssertionError("filter (%r, %s) did not caught any warning" % - filter) + if reraise: + raise AssertionError("unhandled warning %r" % reraise[0]) + if missing: + raise AssertionError("filter (%r, %s) did not catch any warning" % + missing[0]) @contextlib.contextmanager @@ -473,14 +473,19 @@ def check_warnings(*filters, **kwargs): Optional argument: - if 'quiet' is True, it does not fail if a filter catches nothing - (default False) + (default True without argument, + default False if some filters are defined) Without argument, it defaults to: - check_warnings(("", Warning), quiet=False) + check_warnings(("", Warning), quiet=True) """ + quiet = kwargs.get('quiet') if not filters: filters = (("", Warning),) - return _filterwarnings(filters, kwargs.get('quiet')) + # Preserve backward compatibility + if quiet is None: + quiet = True + return _filterwarnings(filters, quiet) @contextlib.contextmanager diff --git a/Lib/test/test_warnings.py b/Lib/test/test_warnings.py index fab80867007..b1e2010fbcd 100644 --- a/Lib/test/test_warnings.py +++ b/Lib/test/test_warnings.py @@ -600,19 +600,33 @@ class CatchWarningTests(BaseTest): def test_check_warnings(self): # Explicit tests for the test_support convenience wrapper wmod = self.module - if wmod is sys.modules['warnings']: - with test_support.check_warnings() as w: - self.assertEqual(w.warnings, []) - wmod.simplefilter("always") - wmod.warn("foo") - self.assertEqual(str(w.message), "foo") - wmod.warn("bar") - self.assertEqual(str(w.message), "bar") - self.assertEqual(str(w.warnings[0].message), "foo") - self.assertEqual(str(w.warnings[1].message), "bar") - w.reset() - self.assertEqual(w.warnings, []) + if wmod is not sys.modules['warnings']: + return + with test_support.check_warnings(quiet=False) as w: + self.assertEqual(w.warnings, []) + wmod.simplefilter("always") + wmod.warn("foo") + self.assertEqual(str(w.message), "foo") + wmod.warn("bar") + self.assertEqual(str(w.message), "bar") + self.assertEqual(str(w.warnings[0].message), "foo") + self.assertEqual(str(w.warnings[1].message), "bar") + w.reset() + self.assertEqual(w.warnings, []) + with test_support.check_warnings(): + # defaults to quiet=True without argument + pass + with test_support.check_warnings(('foo', UserWarning)): + wmod.warn("foo") + + with self.assertRaises(AssertionError): + with test_support.check_warnings(('', RuntimeWarning)): + # defaults to quiet=False with argument + pass + with self.assertRaises(AssertionError): + with test_support.check_warnings(('foo', RuntimeWarning)): + wmod.warn("foo") class CCatchWarningTests(CatchWarningTests):