mirror of
https://github.com/python/cpython.git
synced 2025-08-23 10:16:01 +00:00
Fix incorrect stacklevel for struct warnings. (Partial backport of r78690).
This commit is contained in:
parent
f6224e799c
commit
e9a5a549e4
2 changed files with 30 additions and 6 deletions
|
@ -2,6 +2,7 @@ import array
|
|||
import unittest
|
||||
import struct
|
||||
import warnings
|
||||
import inspect
|
||||
warnings.filterwarnings("ignore", "struct integer overflow masking is deprecated",
|
||||
DeprecationWarning)
|
||||
|
||||
|
@ -106,6 +107,29 @@ class StructTest(unittest.TestCase):
|
|||
self.assertRaises(struct.error, struct.unpack, 'iii', s)
|
||||
self.assertRaises(struct.error, struct.unpack, 'i', s)
|
||||
|
||||
def test_warnings_stacklevel(self):
|
||||
# Python versions between 2.6 and 2.6.5 were producing
|
||||
# warning messages at the wrong stacklevel.
|
||||
def inner(fn, *args):
|
||||
return inspect.currentframe().f_lineno, fn(*args)
|
||||
|
||||
def check_warning_stacklevel(fn, *args):
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
# "always" to make sure __warningregistry__ isn't affected
|
||||
warnings.simplefilter("always")
|
||||
lineno, result = inner(fn, *args)
|
||||
for warn in w:
|
||||
self.assertEqual(warn.lineno, lineno)
|
||||
|
||||
# out of range warnings
|
||||
check_warning_stacklevel(struct.pack, '<L', -1)
|
||||
check_warning_stacklevel(struct.pack, 'L', -1)
|
||||
check_warning_stacklevel(struct.pack, '<h', 65536)
|
||||
check_warning_stacklevel(struct.pack, '<l', 2**100)
|
||||
|
||||
# float warnings
|
||||
check_warning_stacklevel(struct.pack, 'L', 3.1)
|
||||
|
||||
def test_transitiveness(self):
|
||||
c = 'a'
|
||||
b = 1
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue