Make test.test_support.catch_warnings more robust as discussed on python-dev. Also add explicit tests for it to test_warnings. (forward port of r64910 from trunk)
diff --git a/Lib/test/test_struct.py b/Lib/test/test_struct.py
index bce8fdc..6dc0e8d 100644
--- a/Lib/test/test_struct.py
+++ b/Lib/test/test_struct.py
@@ -35,12 +35,9 @@
@wraps(func)
def decorator(*args, **kw):
with catch_warning():
- # Grrr, we need this function to warn every time. Without removing
- # the warningregistry, running test_tarfile then test_struct would fail
- # on 64-bit platforms.
- globals = func.__globals__
- if '__warningregistry__' in globals:
- del globals['__warningregistry__']
+ # 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
@@ -53,7 +50,7 @@
pass
except DeprecationWarning:
if not PY_STRUCT_OVERFLOW_MASKING:
- raise TestFailed("%s%s expected to raise struct.error" % (
+ raise TestFailed("%s%s expected to raise DeprecationWarning" % (
func.__name__, args))
else:
raise TestFailed("%s%s did not raise error" % (