gh-119049: Fix incorrect display of warning which is constructed by C API (GH-119063)

The source line was not displayed if the warnings module had not yet
been imported.
This commit is contained in:
Kirill Podoprigora 2024-05-16 23:27:59 +03:00 committed by GitHub
parent 4702b7b5bd
commit 100c7ab00a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 57 additions and 4 deletions

View file

@ -3,11 +3,12 @@ import os
import re
import sys
import unittest
import textwrap
from test import support
from test.support import import_helper
from test.support.os_helper import TESTFN, TESTFN_UNDECODABLE
from test.support.script_helper import assert_python_failure
from test.support.script_helper import assert_python_failure, assert_python_ok
from test.support.testcase import ExceptionIsLikeMixin
from .test_misc import decode_stderr
@ -68,6 +69,47 @@ class Test_Exceptions(unittest.TestCase):
else:
self.assertTrue(False)
def test_warn_with_stacklevel(self):
code = textwrap.dedent('''\
import _testcapi
def foo():
_testcapi.function_set_warning()
foo() # line 6
foo() # line 9
''')
proc = assert_python_ok("-c", code)
warnings = proc.err.splitlines()
self.assertEqual(warnings, [
b'<string>:6: RuntimeWarning: Testing PyErr_WarnEx',
b' foo() # line 6',
b'<string>:9: RuntimeWarning: Testing PyErr_WarnEx',
b' foo() # line 9',
])
def test_warn_during_finalization(self):
code = textwrap.dedent('''\
import _testcapi
class Foo:
def foo(self):
_testcapi.function_set_warning()
def __del__(self):
self.foo()
ref = Foo()
''')
proc = assert_python_ok("-c", code)
warnings = proc.err.splitlines()
# Due to the finalization of the interpreter, the source will be ommited
# because the ``warnings`` module cannot be imported at this time
self.assertEqual(warnings, [
b'<string>:7: RuntimeWarning: Testing PyErr_WarnEx',
])
class Test_FatalError(unittest.TestCase):