summaryrefslogtreecommitdiff
path: root/sys/lib/python/test/test_warnings.py
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@localhost>2011-05-03 11:25:13 +0000
committercinap_lenrek <cinap_lenrek@localhost>2011-05-03 11:25:13 +0000
commit458120dd40db6b4df55a4e96b650e16798ef06a0 (patch)
tree8f82685be24fef97e715c6f5ca4c68d34d5074ee /sys/lib/python/test/test_warnings.py
parent3a742c699f6806c1145aea5149bf15de15a0afd7 (diff)
add hg and python
Diffstat (limited to 'sys/lib/python/test/test_warnings.py')
-rw-r--r--sys/lib/python/test/test_warnings.py105
1 files changed, 105 insertions, 0 deletions
diff --git a/sys/lib/python/test/test_warnings.py b/sys/lib/python/test/test_warnings.py
new file mode 100644
index 000000000..a7ccb6b29
--- /dev/null
+++ b/sys/lib/python/test/test_warnings.py
@@ -0,0 +1,105 @@
+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'
+ for category in [DeprecationWarning, FutureWarning,
+ 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_options(self):
+ # Uses the private _setoption() function to test the parsing
+ # of command-line warning arguments
+ self.assertRaises(warnings._OptionError,
+ warnings._setoption, '1:2:3:4:5:6')
+ self.assertRaises(warnings._OptionError,
+ warnings._setoption, 'bogus::Warning')
+ self.assertRaises(warnings._OptionError,
+ warnings._setoption, 'ignore:2::4:-5')
+ warnings._setoption('error::Warning::0')
+ self.assertRaises(UserWarning, warnings.warn, 'convert to error')
+
+
+def test_main(verbose=None):
+ # Obscure hack so that this test passes after reloads or repeated calls
+ # to test_main (regrtest -R).
+ if '__warningregistry__' in globals():
+ del globals()['__warningregistry__']
+ test_support.run_unittest(TestModule)
+
+if __name__ == "__main__":
+ test_main(verbose=True)