mirror of
https://github.com/django/django.git
synced 2025-10-23 21:59:11 +00:00
Fixed #14508 - test suite silences warnings.
Utility functions get_warnings_state and save_warnings_state have been added to django.test.utils, and methods to django.test.TestCase for convenience. The implementation is based on the catch_warnings context manager from Python 2.6. git-svn-id: http://code.djangoproject.com/svn/django/trunk@14526 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -26,6 +26,35 @@ class SkippingTestCase(TestCase):
|
||||
self.assertRaises(ValueError, test_func)
|
||||
|
||||
|
||||
class SaveRestoreWarningState(TestCase):
|
||||
|
||||
def test_save_restore_warnings_state(self):
|
||||
"""
|
||||
Ensure save_warnings_state/restore_warnings_state work correctly.
|
||||
"""
|
||||
# In reality this test could be satisfied by many broken implementations
|
||||
# of save_warnings_state/restore_warnings_state (e.g. just
|
||||
# warnings.resetwarnings()) , but it is difficult to test more.
|
||||
import warnings
|
||||
self.save_warnings_state()
|
||||
|
||||
class MyWarning(Warning):
|
||||
pass
|
||||
|
||||
# Add a filter that causes an exception to be thrown, so we can catch it
|
||||
warnings.simplefilter("error", MyWarning)
|
||||
self.assertRaises(Warning, lambda: warnings.warn("warn", MyWarning))
|
||||
|
||||
# Now restore.
|
||||
self.restore_warnings_state()
|
||||
# After restoring, we shouldn't get an exception. But we don't want a
|
||||
# warning printed either, so we have to silence the warning.
|
||||
warnings.simplefilter("ignore", MyWarning)
|
||||
warnings.warn("warn", MyWarning)
|
||||
|
||||
# Remove the filter we just added.
|
||||
self.restore_warnings_state()
|
||||
|
||||
__test__ = {"API_TEST": r"""
|
||||
# Some checks of the doctest output normalizer.
|
||||
# Standard doctests do fairly
|
||||
|
||||
Reference in New Issue
Block a user