mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
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:
parent
4702b7b5bd
commit
100c7ab00a
4 changed files with 57 additions and 4 deletions
|
@ -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):
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue