/SiRFLive/PythonStdLib/test/test_warnings.py
https://bitbucket.org/x893/sirflive · Python · 89 lines · 67 code · 16 blank · 6 comment · 9 complexity · f88653b6ca7af51779810f1c41ce5012 MD5 · raw file
- import warnings
- import os
- import unittest
- from test import test_support
-
- # The warnings module isn't easily tested, because it relies on module
- # globals to store configuration information. setUp() and tearDown()
- # preserve the current settings to avoid bashing them while running tests.
-
- # To capture the warning messages, a replacement for showwarning() is
- # used to save warning information in a global variable.
-
- class WarningMessage:
- "Holds results of latest showwarning() call"
- pass
-
- def showwarning(message, category, filename, lineno, file=None):
- msg.message = str(message)
- msg.category = category.__name__
- msg.filename = os.path.basename(filename)
- msg.lineno = lineno
-
- class TestModule(unittest.TestCase):
-
- def setUp(self):
- global msg
- msg = WarningMessage()
- self._filters = warnings.filters[:]
- self._showwarning = warnings.showwarning
- warnings.showwarning = showwarning
- self.ignored = [w[2].__name__ for w in self._filters
- if w[0]=='ignore' and w[1] is None and w[3] is None]
-
- def tearDown(self):
- warnings.filters = self._filters[:]
- warnings.showwarning = self._showwarning
-
- def test_warn_default_category(self):
- for i in range(4):
- text = 'multi %d' %i # Different text on each call
- warnings.warn(text)
- self.assertEqual(msg.message, text)
- self.assertEqual(msg.category, 'UserWarning')
-
- def test_warn_specific_category(self):
- text = 'None'
- # XXX OverflowWarning should go away for Python 2.5.
- for category in [DeprecationWarning, FutureWarning, OverflowWarning,
- PendingDeprecationWarning, RuntimeWarning,
- SyntaxWarning, UserWarning, Warning]:
- if category.__name__ in self.ignored:
- text = 'filtered out' + category.__name__
- warnings.warn(text, category)
- self.assertNotEqual(msg.message, text)
- else:
- text = 'unfiltered %s' % category.__name__
- warnings.warn(text, category)
- self.assertEqual(msg.message, text)
- self.assertEqual(msg.category, category.__name__)
-
- def test_filtering(self):
-
- warnings.filterwarnings("error", "", Warning, "", 0)
- self.assertRaises(UserWarning, warnings.warn, 'convert to error')
-
- warnings.resetwarnings()
- text = 'handle normally'
- warnings.warn(text)
- self.assertEqual(msg.message, text)
- self.assertEqual(msg.category, 'UserWarning')
-
- warnings.filterwarnings("ignore", "", Warning, "", 0)
- text = 'filtered out'
- warnings.warn(text)
- self.assertNotEqual(msg.message, text)
-
- warnings.resetwarnings()
- warnings.filterwarnings("error", "hex*", Warning, "", 0)
- self.assertRaises(UserWarning, warnings.warn, 'hex/oct')
- text = 'nonmatching text'
- warnings.warn(text)
- self.assertEqual(msg.message, text)
- self.assertEqual(msg.category, 'UserWarning')
-
- def test_main(verbose=None):
- test_support.run_unittest(TestModule)
-
- if __name__ == "__main__":
- test_main(verbose=True)