diff options
author | Mark Dickinson <dickinsm@gmail.com> | 2010-03-05 14:36:20 (GMT) |
---|---|---|
committer | Mark Dickinson <dickinsm@gmail.com> | 2010-03-05 14:36:20 (GMT) |
commit | 1c0c78c61f440de7187f62ecdd1cc828f0a2e95e (patch) | |
tree | ecd9c92d3e4533795ee8704e00cd4ffe8a9e9fdd /Lib | |
parent | 3bbb67273a8c146a38de91080a37e716e2699622 (diff) | |
download | cpython-1c0c78c61f440de7187f62ecdd1cc828f0a2e95e.zip cpython-1c0c78c61f440de7187f62ecdd1cc828f0a2e95e.tar.gz cpython-1c0c78c61f440de7187f62ecdd1cc828f0a2e95e.tar.bz2 |
Fix incorrect stacklevel for DeprecationWarnings originating from the struct module.
Also clean up related tests in test_struct.
The stacklevel fix should be backported to 2.6 once that branch is unfrozen.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_struct.py | 51 |
1 files changed, 15 insertions, 36 deletions
diff --git a/Lib/test/test_struct.py b/Lib/test/test_struct.py index fc48c11..c315d8a 100644 --- a/Lib/test/test_struct.py +++ b/Lib/test/test_struct.py @@ -23,13 +23,6 @@ except struct.error: else: HAVE_LONG_LONG = True -try: - import _struct -except ImportError: - PY_STRUCT_FLOAT_COERCE = 2 -else: - PY_STRUCT_FLOAT_COERCE = getattr(_struct, '_PY_STRUCT_FLOAT_COERCE', 0) - def string_reverse(s): return "".join(reversed(s)) @@ -39,39 +32,25 @@ def bigendian_to_native(value): else: return string_reverse(value) -def with_warning_restore(func): - @wraps(func) - def decorator(*args, **kw): - with warnings.catch_warnings(): - # We need this function to warn every time, so stick an - # unqualifed 'always' at the head of the filter list - warnings.simplefilter("always") - warnings.filterwarnings("error", category=DeprecationWarning) - return func(*args, **kw) - return decorator - class StructTest(unittest.TestCase): - @with_warning_restore def check_float_coerce(self, format, number): # SF bug 1530559. struct.pack raises TypeError where it used to convert. - if PY_STRUCT_FLOAT_COERCE == 2: - # Test for pre-2.5 struct module - packed = struct.pack(format, number) - floored = struct.unpack(format, packed)[0] - self.assertEqual(floored, int(number), - "did not correcly coerce float to int") - return - try: - struct.pack(format, number) - except struct.error: - if PY_STRUCT_FLOAT_COERCE: - self.fail("expected DeprecationWarning for float coerce") - except DeprecationWarning: - if not PY_STRUCT_FLOAT_COERCE: - self.fail("expected to raise struct.error for float coerce") - else: - self.fail("did not raise error for float coerce") + with warnings.catch_warnings(): + warnings.filterwarnings( + "ignore", + category=DeprecationWarning, + message=".*integer argument expected, got float", + module=__name__) + self.assertEqual(struct.pack(format, number), struct.pack(format, int(number))) + + with warnings.catch_warnings(): + warnings.filterwarnings( + "error", + category=DeprecationWarning, + message=".*integer argument expected, got float", + module="unittest") + self.assertRaises(DeprecationWarning, struct.pack, format, number) def test_isbigendian(self): self.assertEqual((struct.pack('=i', 1)[0] == chr(0)), ISBIGENDIAN) |