[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)