[Python-checkins] python/dist/src/Lib/test test_warnings.py,1.3,1.4
rhettinger@users.sourceforge.net
rhettinger@users.sourceforge.net
Sun, 13 Jul 2003 01:37:42 -0700
Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1:/tmp/cvs-serv26065
Modified Files:
test_warnings.py
Log Message:
Reworked test_warnings.py:
* It ran fine under "python regrtest.py test_warnings" but failed under
"python regrtest.py" presumably because other tests would add to
filtered warnings and not reset them at the end of the test.
* Converted to a unittest format for better control. Renamed
monkey() and unmonkey() to setUp() and tearDown().
* Increased coverage by testing all warnings in __builtin__.
* Increased coverage by testing regex matching of specific messages.
Index: test_warnings.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_warnings.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** test_warnings.py 13 Jul 2003 06:15:11 -0000 1.3
--- test_warnings.py 13 Jul 2003 08:37:39 -0000 1.4
***************
*** 1,53 ****
import warnings
import os
# The warnings module isn't easily tested, because it relies on module
! # globals to store configuration information. We need to extract the
! # current settings to avoid bashing them while running tests.
! _filters = []
! _showwarning = None
def showwarning(message, category, filename, lineno, file=None):
! filename = os.path.basename(filename)
! print "%s:%s: %s: %s" % (filename, lineno, category.__name__, message)
! def monkey():
! global _filters, _showwarning
! _filters = warnings.filters[:]
! _showwarning = warnings.showwarning
! warnings.showwarning = showwarning
! def unmonkey():
! warnings.filters = _filters[:]
! warnings.showwarning = _showwarning
! def test():
! for item in warnings.filters:
! print (item[0], item[1] is None, item[2].__name__, item[3] is None,
! item[4])
! hello = "hello world"
! for i in range(4):
! warnings.warn(hello)
! warnings.warn(hello, UserWarning)
! warnings.warn(hello, DeprecationWarning)
! for i in range(3):
! warnings.warn(hello)
! warnings.filterwarnings("error", "", Warning, "", 0)
! try:
! warnings.warn(hello)
! except Exception, msg:
! print "Caught", msg.__class__.__name__ + ":", msg
! else:
! print "No exception"
! warnings.resetwarnings()
! try:
! warnings.filterwarnings("booh", "", Warning, "", 0)
! except Exception, msg:
! print "Caught", msg.__class__.__name__ + ":", msg
! else:
! print "No exception"
! monkey()
! test()
! unmonkey()
--- 1,88 ----
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, 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)