summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2024-07-25 06:57:22 (GMT)
committerGitHub <noreply@github.com>2024-07-25 06:57:22 (GMT)
commit9b4fe9b718f27352ba0c1cf1184f5b90d77d7df4 (patch)
treebf4135378eaf39a3017a74157c7dc4901a15e8e6 /Lib/test
parent5592399313c963c110280a7c98de974889e1d353 (diff)
downloadcpython-9b4fe9b718f27352ba0c1cf1184f5b90d77d7df4.zip
cpython-9b4fe9b718f27352ba0c1cf1184f5b90d77d7df4.tar.gz
cpython-9b4fe9b718f27352ba0c1cf1184f5b90d77d7df4.tar.bz2
gh-122191: Fix test_warnings failure if run with -Werror (GH-122222)
__spec__.loader is now required in the module globals (see gh-86298).
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_warnings/__init__.py36
1 files changed, 23 insertions, 13 deletions
diff --git a/Lib/test/test_warnings/__init__.py b/Lib/test/test_warnings/__init__.py
index 7d04371..95515a4 100644
--- a/Lib/test/test_warnings/__init__.py
+++ b/Lib/test/test_warnings/__init__.py
@@ -1,6 +1,7 @@
from contextlib import contextmanager
import linecache
import os
+import importlib
import inspect
from io import StringIO
import re
@@ -887,37 +888,46 @@ class _WarningsTests(BaseTest, unittest.TestCase):
# warn_explicit() should neither raise a SystemError nor cause an
# assertion failure, in case the return value of get_source() has a
# bad splitlines() method.
- def get_bad_loader(splitlines_ret_val):
+ get_source_called = []
+ def get_module_globals(*, splitlines_ret_val):
+ class BadSource(str):
+ def splitlines(self):
+ return splitlines_ret_val
+
class BadLoader:
def get_source(self, fullname):
- class BadSource(str):
- def splitlines(self):
- return splitlines_ret_val
+ get_source_called.append(splitlines_ret_val)
return BadSource('spam')
- return BadLoader()
+
+ loader = BadLoader()
+ spec = importlib.machinery.ModuleSpec('foobar', loader)
+ return {'__loader__': loader,
+ '__spec__': spec,
+ '__name__': 'foobar'}
+
wmod = self.module
with original_warnings.catch_warnings(module=wmod):
wmod.filterwarnings('default', category=UserWarning)
+ linecache.clearcache()
with support.captured_stderr() as stderr:
wmod.warn_explicit(
'foo', UserWarning, 'bar', 1,
- module_globals={'__loader__': get_bad_loader(42),
- '__name__': 'foobar'})
+ module_globals=get_module_globals(splitlines_ret_val=42))
self.assertIn('UserWarning: foo', stderr.getvalue())
+ self.assertEqual(get_source_called, [42])
- show = wmod._showwarnmsg
- try:
+ linecache.clearcache()
+ with support.swap_attr(wmod, '_showwarnmsg', None):
del wmod._showwarnmsg
with support.captured_stderr() as stderr:
wmod.warn_explicit(
'eggs', UserWarning, 'bar', 1,
- module_globals={'__loader__': get_bad_loader([42]),
- '__name__': 'foobar'})
+ module_globals=get_module_globals(splitlines_ret_val=[42]))
self.assertIn('UserWarning: eggs', stderr.getvalue())
- finally:
- wmod._showwarnmsg = show
+ self.assertEqual(get_source_called, [42, [42]])
+ linecache.clearcache()
@support.cpython_only
def test_issue31411(self):