gh-135801: Add tests for filtering warnings by module (GH-140240)

This commit is contained in:
Serhiy Storchaka 2025-10-17 14:21:39 +03:00 committed by GitHub
parent 67c98ad8ef
commit fbf0843e39
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -241,6 +241,85 @@ def test_once(self):
42)
self.assertEqual(len(w), 0)
def test_filter_module(self):
MS_WINDOWS = (sys.platform == 'win32')
with self.module.catch_warnings(record=True) as w:
self.module.simplefilter('error')
self.module.filterwarnings('always', module=r'package\.module\z')
self.module.warn_explicit('msg', UserWarning, 'filename', 42,
module='package.module')
self.assertEqual(len(w), 1)
with self.assertRaises(UserWarning):
self.module.warn_explicit('msg', UserWarning, '/path/to/package/module', 42)
with self.assertRaises(UserWarning):
self.module.warn_explicit('msg', UserWarning, '/path/to/package/module.py', 42)
with self.module.catch_warnings(record=True) as w:
self.module.simplefilter('error')
self.module.filterwarnings('always', module='package')
self.module.warn_explicit('msg', UserWarning, 'filename', 42,
module='package.module')
self.assertEqual(len(w), 1)
with self.assertRaises(UserWarning):
self.module.warn_explicit('msg', UserWarning, 'filename', 42,
module='other.package.module')
with self.assertRaises(UserWarning):
self.module.warn_explicit('msg', UserWarning, '/path/to/otherpackage/module.py', 42)
with self.module.catch_warnings(record=True) as w:
self.module.simplefilter('error')
self.module.filterwarnings('always', module=r'/path/to/package/module\z')
self.module.warn_explicit('msg', UserWarning, '/path/to/package/module', 42)
self.assertEqual(len(w), 1)
self.module.warn_explicit('msg', UserWarning, '/path/to/package/module.py', 42)
self.assertEqual(len(w), 2)
with self.assertRaises(UserWarning):
self.module.warn_explicit('msg', UserWarning, '/PATH/TO/PACKAGE/MODULE', 42)
if MS_WINDOWS:
if self.module is py_warnings:
self.module.warn_explicit('msg', UserWarning, r'/path/to/package/module.PY', 42)
self.assertEqual(len(w), 3)
with self.assertRaises(UserWarning):
self.module.warn_explicit('msg', UserWarning, r'/path/to/package/module/__init__.py', 42)
with self.assertRaises(UserWarning):
self.module.warn_explicit('msg', UserWarning, r'/path/to/package/module.pyw', 42)
with self.assertRaises(UserWarning):
self.module.warn_explicit('msg', UserWarning, r'\path\to\package\module', 42)
with self.module.catch_warnings(record=True) as w:
self.module.simplefilter('error')
self.module.filterwarnings('always', module=r'/path/to/package/__init__\z')
self.module.warn_explicit('msg', UserWarning, '/path/to/package/__init__.py', 42)
self.assertEqual(len(w), 1)
self.module.warn_explicit('msg', UserWarning, '/path/to/package/__init__', 42)
self.assertEqual(len(w), 2)
if MS_WINDOWS:
with self.module.catch_warnings(record=True) as w:
self.module.simplefilter('error')
self.module.filterwarnings('always', module=r'C:\\path\\to\\package\\module\z')
self.module.warn_explicit('msg', UserWarning, r'C:\path\to\package\module', 42)
self.assertEqual(len(w), 1)
self.module.warn_explicit('msg', UserWarning, r'C:\path\to\package\module.py', 42)
self.assertEqual(len(w), 2)
if self.module is py_warnings:
self.module.warn_explicit('msg', UserWarning, r'C:\path\to\package\module.PY', 42)
self.assertEqual(len(w), 3)
with self.assertRaises(UserWarning):
self.module.warn_explicit('msg', UserWarning, r'C:\path\to\package\module.pyw', 42)
with self.assertRaises(UserWarning):
self.module.warn_explicit('msg', UserWarning, r'C:\PATH\TO\PACKAGE\MODULE', 42)
with self.assertRaises(UserWarning):
self.module.warn_explicit('msg', UserWarning, r'C:/path/to/package/module', 42)
with self.assertRaises(UserWarning):
self.module.warn_explicit('msg', UserWarning, r'C:\path\to\package\module\__init__.py', 42)
with self.module.catch_warnings(record=True) as w:
self.module.simplefilter('error')
self.module.filterwarnings('always', module=r'<unknown>\z')
self.module.warn_explicit('msg', UserWarning, '', 42)
self.assertEqual(len(w), 1)
def test_module_globals(self):
with self.module.catch_warnings(record=True) as w:
self.module.simplefilter("always", UserWarning)