| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  | from contextlib import contextmanager | 
					
						
							| 
									
										
										
										
											2007-12-20 10:09:52 +00:00
										 |  |  | import linecache | 
					
						
							| 
									
										
										
										
											2003-07-13 06:15:11 +00:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2007-12-20 10:09:52 +00:00
										 |  |  | import StringIO | 
					
						
							| 
									
										
										
										
											2007-08-17 20:16:15 +00:00
										 |  |  | import sys | 
					
						
							| 
									
										
										
										
											2003-07-13 08:37:40 +00:00
										 |  |  | import unittest | 
					
						
							|  |  |  | from test import test_support | 
					
						
							| 
									
										
										
										
											2003-07-11 15:37:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-04-03 16:53:43 +00:00
										 |  |  | import warning_tests | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-13 02:42:36 +00:00
										 |  |  | import warnings as original_warnings | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  | sys.modules['_warnings'] = 0 | 
					
						
							| 
									
										
										
										
											2008-04-13 02:42:36 +00:00
										 |  |  | del sys.modules['warnings'] | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | import warnings as py_warnings | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | del sys.modules['_warnings'] | 
					
						
							|  |  |  | del sys.modules['warnings'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import warnings as c_warnings | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-13 02:42:36 +00:00
										 |  |  | sys.modules['warnings'] = original_warnings | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  | @contextmanager | 
					
						
							|  |  |  | def warnings_state(module): | 
					
						
							|  |  |  |     """Use a specific warnings implementation in warning_tests.""" | 
					
						
							|  |  |  |     global __warningregistry__ | 
					
						
							|  |  |  |     for to_clear in (sys, warning_tests): | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             to_clear.__warningregistry__.clear() | 
					
						
							|  |  |  |         except AttributeError: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         __warningregistry__.clear() | 
					
						
							|  |  |  |     except NameError: | 
					
						
							|  |  |  |         pass | 
					
						
							|  |  |  |     original_warnings = warning_tests.warnings | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         warning_tests.warnings = module | 
					
						
							|  |  |  |         yield | 
					
						
							|  |  |  |     finally: | 
					
						
							|  |  |  |         warning_tests.warnings = original_warnings | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-13 02:42:36 +00:00
										 |  |  | class BaseTest(unittest.TestCase): | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-13 02:42:36 +00:00
										 |  |  |     """Basic bookkeeping required for testing.""" | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-07-13 08:37:40 +00:00
										 |  |  |     def setUp(self): | 
					
						
							| 
									
										
										
										
											2008-04-13 02:42:36 +00:00
										 |  |  |         # The __warningregistry__ needs to be in a pristine state for tests | 
					
						
							|  |  |  |         # to work properly. | 
					
						
							|  |  |  |         if '__warningregistry__' in globals(): | 
					
						
							|  |  |  |             del globals()['__warningregistry__'] | 
					
						
							|  |  |  |         if hasattr(warning_tests, '__warningregistry__'): | 
					
						
							|  |  |  |             del warning_tests.__warningregistry__ | 
					
						
							|  |  |  |         if hasattr(sys, '__warningregistry__'): | 
					
						
							|  |  |  |             del sys.__warningregistry__ | 
					
						
							|  |  |  |         # The 'warnings' module must be explicitly set so that the proper | 
					
						
							|  |  |  |         # interaction between _warnings and 'warnings' can be controlled. | 
					
						
							|  |  |  |         sys.modules['warnings'] = self.module | 
					
						
							|  |  |  |         super(BaseTest, self).setUp() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def tearDown(self): | 
					
						
							|  |  |  |         sys.modules['warnings'] = original_warnings | 
					
						
							|  |  |  |         super(BaseTest, self).tearDown() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class FilterTests(object): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     """Testing the filtering functionality.""" | 
					
						
							| 
									
										
										
										
											2003-07-13 08:37:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |     def test_error(self): | 
					
						
							|  |  |  |         with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |             self.module.resetwarnings() | 
					
						
							|  |  |  |             self.module.filterwarnings("error", category=UserWarning) | 
					
						
							|  |  |  |             self.assertRaises(UserWarning, self.module.warn, | 
					
						
							|  |  |  |                                 "FilterTests.test_error") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_ignore(self): | 
					
						
							|  |  |  |         with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |             self.module.resetwarnings() | 
					
						
							|  |  |  |             self.module.filterwarnings("ignore", category=UserWarning) | 
					
						
							|  |  |  |             self.module.warn("FilterTests.test_ignore", UserWarning) | 
					
						
							|  |  |  |             self.assert_(not w.message) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_always(self): | 
					
						
							|  |  |  |         with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |             self.module.resetwarnings() | 
					
						
							|  |  |  |             self.module.filterwarnings("always", category=UserWarning) | 
					
						
							|  |  |  |             message = "FilterTests.test_always" | 
					
						
							|  |  |  |             self.module.warn(message, UserWarning) | 
					
						
							|  |  |  |             self.assert_(message, w.message) | 
					
						
							|  |  |  |             w.message = None  # Reset. | 
					
						
							|  |  |  |             self.module.warn(message, UserWarning) | 
					
						
							|  |  |  |             self.assert_(w.message, message) | 
					
						
							| 
									
										
										
										
											2003-07-13 08:37:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |     def test_default(self): | 
					
						
							|  |  |  |         with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |             self.module.resetwarnings() | 
					
						
							|  |  |  |             self.module.filterwarnings("default", category=UserWarning) | 
					
						
							|  |  |  |             message = UserWarning("FilterTests.test_default") | 
					
						
							|  |  |  |             for x in xrange(2): | 
					
						
							|  |  |  |                 self.module.warn(message, UserWarning) | 
					
						
							|  |  |  |                 if x == 0: | 
					
						
							|  |  |  |                     self.assertEquals(w.message, message) | 
					
						
							|  |  |  |                     w.reset() | 
					
						
							|  |  |  |                 elif x == 1: | 
					
						
							|  |  |  |                     self.assert_(not w.message, "unexpected warning: " + str(w)) | 
					
						
							| 
									
										
										
										
											2007-04-03 18:33:29 +00:00
										 |  |  |                 else: | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |                     raise ValueError("loop variant unhandled") | 
					
						
							| 
									
										
										
										
											2003-07-13 08:37:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |     def test_module(self): | 
					
						
							|  |  |  |         with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |             self.module.resetwarnings() | 
					
						
							|  |  |  |             self.module.filterwarnings("module", category=UserWarning) | 
					
						
							|  |  |  |             message = UserWarning("FilterTests.test_module") | 
					
						
							|  |  |  |             self.module.warn(message, UserWarning) | 
					
						
							|  |  |  |             self.assertEquals(w.message, message) | 
					
						
							|  |  |  |             w.reset() | 
					
						
							|  |  |  |             self.module.warn(message, UserWarning) | 
					
						
							|  |  |  |             self.assert_(not w.message, "unexpected message: " + str(w)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_once(self): | 
					
						
							|  |  |  |         with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |             self.module.resetwarnings() | 
					
						
							|  |  |  |             self.module.filterwarnings("once", category=UserWarning) | 
					
						
							|  |  |  |             message = UserWarning("FilterTests.test_once") | 
					
						
							|  |  |  |             self.module.warn_explicit(message, UserWarning, "test_warnings.py", | 
					
						
							|  |  |  |                                     42) | 
					
						
							|  |  |  |             self.assertEquals(w.message, message) | 
					
						
							|  |  |  |             w.reset() | 
					
						
							|  |  |  |             self.module.warn_explicit(message, UserWarning, "test_warnings.py", | 
					
						
							|  |  |  |                                     13) | 
					
						
							|  |  |  |             self.assert_(not w.message) | 
					
						
							|  |  |  |             self.module.warn_explicit(message, UserWarning, "test_warnings2.py", | 
					
						
							|  |  |  |                                     42) | 
					
						
							|  |  |  |             self.assert_(not w.message) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_inheritance(self): | 
					
						
							|  |  |  |         with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |             self.module.resetwarnings() | 
					
						
							|  |  |  |             self.module.filterwarnings("error", category=Warning) | 
					
						
							|  |  |  |             self.assertRaises(UserWarning, self.module.warn, | 
					
						
							|  |  |  |                                 "FilterTests.test_inheritance", UserWarning) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_ordering(self): | 
					
						
							|  |  |  |         with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |             self.module.resetwarnings() | 
					
						
							|  |  |  |             self.module.filterwarnings("ignore", category=UserWarning) | 
					
						
							|  |  |  |             self.module.filterwarnings("error", category=UserWarning, | 
					
						
							|  |  |  |                                         append=True) | 
					
						
							|  |  |  |             w.reset() | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 self.module.warn("FilterTests.test_ordering", UserWarning) | 
					
						
							|  |  |  |             except UserWarning: | 
					
						
							|  |  |  |                 self.fail("order handling for actions failed") | 
					
						
							|  |  |  |             self.assert_(not w.message) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_filterwarnings(self): | 
					
						
							| 
									
										
										
										
											2007-12-20 10:09:52 +00:00
										 |  |  |         # Test filterwarnings(). | 
					
						
							|  |  |  |         # Implicitly also tests resetwarnings(). | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |         with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |             self.module.filterwarnings("error", "", Warning, "", 0) | 
					
						
							|  |  |  |             self.assertRaises(UserWarning, self.module.warn, 'convert to error') | 
					
						
							| 
									
										
										
										
											2003-07-13 08:37:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |             self.module.resetwarnings() | 
					
						
							| 
									
										
										
										
											2007-04-03 18:33:29 +00:00
										 |  |  |             text = 'handle normally' | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |             self.module.warn(text) | 
					
						
							| 
									
										
										
										
											2007-04-03 18:33:29 +00:00
										 |  |  |             self.assertEqual(str(w.message), text) | 
					
						
							|  |  |  |             self.assert_(w.category is UserWarning) | 
					
						
							| 
									
										
										
										
											2003-07-13 08:37:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |             self.module.filterwarnings("ignore", "", Warning, "", 0) | 
					
						
							| 
									
										
										
										
											2007-04-03 18:33:29 +00:00
										 |  |  |             text = 'filtered out' | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |             self.module.warn(text) | 
					
						
							| 
									
										
										
										
											2007-04-03 18:33:29 +00:00
										 |  |  |             self.assertNotEqual(str(w.message), text) | 
					
						
							| 
									
										
										
										
											2003-07-13 08:37:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |             self.module.resetwarnings() | 
					
						
							|  |  |  |             self.module.filterwarnings("error", "hex*", Warning, "", 0) | 
					
						
							|  |  |  |             self.assertRaises(UserWarning, self.module.warn, 'hex/oct') | 
					
						
							| 
									
										
										
										
											2007-04-03 18:33:29 +00:00
										 |  |  |             text = 'nonmatching text' | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |             self.module.warn(text) | 
					
						
							| 
									
										
										
										
											2007-04-03 18:33:29 +00:00
										 |  |  |             self.assertEqual(str(w.message), text) | 
					
						
							|  |  |  |             self.assert_(w.category is UserWarning) | 
					
						
							| 
									
										
										
										
											2003-07-13 08:37:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-13 02:42:36 +00:00
										 |  |  | class CFilterTests(BaseTest, FilterTests): | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |     module = c_warnings | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-13 02:42:36 +00:00
										 |  |  | class PyFilterTests(BaseTest, FilterTests): | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |     module = py_warnings | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class WarnTests(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     """Test warnings.warn() and warnings.warn_explicit().""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_message(self): | 
					
						
							|  |  |  |         with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |             for i in range(4): | 
					
						
							|  |  |  |                 text = 'multi %d' %i  # Different text on each call. | 
					
						
							|  |  |  |                 self.module.warn(text) | 
					
						
							|  |  |  |                 self.assertEqual(str(w.message), text) | 
					
						
							|  |  |  |                 self.assert_(w.category is UserWarning) | 
					
						
							| 
									
										
										
										
											2006-06-27 11:52:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-04-03 16:53:43 +00:00
										 |  |  |     def test_filename(self): | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |         with warnings_state(self.module): | 
					
						
							|  |  |  |             with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |                 warning_tests.inner("spam1") | 
					
						
							|  |  |  |                 self.assertEqual(os.path.basename(w.filename), "warning_tests.py") | 
					
						
							|  |  |  |                 warning_tests.outer("spam2") | 
					
						
							|  |  |  |                 self.assertEqual(os.path.basename(w.filename), "warning_tests.py") | 
					
						
							| 
									
										
										
										
											2007-04-03 16:53:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_stacklevel(self): | 
					
						
							|  |  |  |         # Test stacklevel argument | 
					
						
							|  |  |  |         # make sure all messages are different, so the warning won't be skipped | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |         with warnings_state(self.module): | 
					
						
							|  |  |  |             with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |                 warning_tests.inner("spam3", stacklevel=1) | 
					
						
							|  |  |  |                 self.assertEqual(os.path.basename(w.filename), "warning_tests.py") | 
					
						
							|  |  |  |                 warning_tests.outer("spam4", stacklevel=1) | 
					
						
							|  |  |  |                 self.assertEqual(os.path.basename(w.filename), "warning_tests.py") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 warning_tests.inner("spam5", stacklevel=2) | 
					
						
							|  |  |  |                 self.assertEqual(os.path.basename(w.filename), "test_warnings.py") | 
					
						
							|  |  |  |                 warning_tests.outer("spam6", stacklevel=2) | 
					
						
							|  |  |  |                 self.assertEqual(os.path.basename(w.filename), "warning_tests.py") | 
					
						
							| 
									
										
										
										
											2008-05-06 04:37:31 +00:00
										 |  |  |                 warning_tests.outer("spam6.5", stacklevel=3) | 
					
						
							|  |  |  |                 self.assertEqual(os.path.basename(w.filename), "test_warnings.py") | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 warning_tests.inner("spam7", stacklevel=9999) | 
					
						
							|  |  |  |                 self.assertEqual(os.path.basename(w.filename), "sys") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-03 03:19:39 +00:00
										 |  |  |     def test_missing_filename_not_main(self): | 
					
						
							|  |  |  |         # If __file__ is not specified and __main__ is not the module name, | 
					
						
							|  |  |  |         # then __file__ should be set to the module name. | 
					
						
							|  |  |  |         filename = warning_tests.__file__ | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             del warning_tests.__file__ | 
					
						
							|  |  |  |             with warnings_state(self.module): | 
					
						
							|  |  |  |                 with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |                     warning_tests.inner("spam8", stacklevel=1) | 
					
						
							|  |  |  |                     self.assertEqual(w.filename, warning_tests.__name__) | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             warning_tests.__file__ = filename | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_missing_filename_main_with_argv(self): | 
					
						
							|  |  |  |         # If __file__ is not specified and the caller is __main__ and sys.argv | 
					
						
							|  |  |  |         # exists, then use sys.argv[0] as the file. | 
					
						
							|  |  |  |         if not hasattr(sys, 'argv'): | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  |         filename = warning_tests.__file__ | 
					
						
							|  |  |  |         module_name = warning_tests.__name__ | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             del warning_tests.__file__ | 
					
						
							|  |  |  |             warning_tests.__name__ = '__main__' | 
					
						
							|  |  |  |             with warnings_state(self.module): | 
					
						
							|  |  |  |                 with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |                     warning_tests.inner('spam9', stacklevel=1) | 
					
						
							|  |  |  |                     self.assertEqual(w.filename, sys.argv[0]) | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             warning_tests.__file__ = filename | 
					
						
							|  |  |  |             warning_tests.__name__ = module_name | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_missing_filename_main_without_argv(self): | 
					
						
							|  |  |  |         # If __file__ is not specified, the caller is __main__, and sys.argv | 
					
						
							|  |  |  |         # is not set, then '__main__' is the file name. | 
					
						
							|  |  |  |         filename = warning_tests.__file__ | 
					
						
							|  |  |  |         module_name = warning_tests.__name__ | 
					
						
							|  |  |  |         argv = sys.argv | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             del warning_tests.__file__ | 
					
						
							|  |  |  |             warning_tests.__name__ = '__main__' | 
					
						
							|  |  |  |             del sys.argv | 
					
						
							|  |  |  |             with warnings_state(self.module): | 
					
						
							|  |  |  |                 with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |                     warning_tests.inner('spam10', stacklevel=1) | 
					
						
							|  |  |  |                     self.assertEqual(w.filename, '__main__') | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             warning_tests.__file__ = filename | 
					
						
							|  |  |  |             warning_tests.__name__ = module_name | 
					
						
							|  |  |  |             sys.argv = argv | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_missing_filename_main_with_argv_empty_string(self): | 
					
						
							|  |  |  |         # If __file__ is not specified, the caller is __main__, and sys.argv[0] | 
					
						
							|  |  |  |         # is the empty string, then '__main__ is the file name. | 
					
						
							|  |  |  |         # Tests issue 2743. | 
					
						
							|  |  |  |         file_name = warning_tests.__file__ | 
					
						
							|  |  |  |         module_name = warning_tests.__name__ | 
					
						
							|  |  |  |         argv = sys.argv | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             del warning_tests.__file__ | 
					
						
							|  |  |  |             warning_tests.__name__ = '__main__' | 
					
						
							|  |  |  |             sys.argv = [''] | 
					
						
							|  |  |  |             with warnings_state(self.module): | 
					
						
							|  |  |  |                 with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |                     warning_tests.inner('spam11', stacklevel=1) | 
					
						
							|  |  |  |                     self.assertEqual(w.filename, '__main__') | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             warning_tests.__file__ = file_name | 
					
						
							|  |  |  |             warning_tests.__name__ = module_name | 
					
						
							|  |  |  |             sys.argv = argv | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-13 02:42:36 +00:00
										 |  |  | class CWarnTests(BaseTest, WarnTests): | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |     module = c_warnings | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-13 02:42:36 +00:00
										 |  |  | class PyWarnTests(BaseTest, WarnTests): | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |     module = py_warnings | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class WCmdLineTests(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_improper_input(self): | 
					
						
							|  |  |  |         # Uses the private _setoption() function to test the parsing | 
					
						
							|  |  |  |         # of command-line warning arguments | 
					
						
							|  |  |  |         with test_support.catch_warning(self.module): | 
					
						
							|  |  |  |             self.assertRaises(self.module._OptionError, | 
					
						
							|  |  |  |                               self.module._setoption, '1:2:3:4:5:6') | 
					
						
							|  |  |  |             self.assertRaises(self.module._OptionError, | 
					
						
							|  |  |  |                               self.module._setoption, 'bogus::Warning') | 
					
						
							|  |  |  |             self.assertRaises(self.module._OptionError, | 
					
						
							|  |  |  |                               self.module._setoption, 'ignore:2::4:-5') | 
					
						
							|  |  |  |             self.module._setoption('error::Warning::0') | 
					
						
							|  |  |  |             self.assertRaises(UserWarning, self.module.warn, 'convert to error') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-13 02:42:36 +00:00
										 |  |  | class CWCmdLineTests(BaseTest, WCmdLineTests): | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |     module = c_warnings | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-13 02:42:36 +00:00
										 |  |  | class PyWCmdLineTests(BaseTest, WCmdLineTests): | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |     module = py_warnings | 
					
						
							| 
									
										
										
										
											2007-04-03 18:33:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-13 02:42:36 +00:00
										 |  |  | class _WarningsTests(BaseTest): | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     """Tests specific to the _warnings module.""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     module = c_warnings | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_filter(self): | 
					
						
							|  |  |  |         # Everything should function even if 'filters' is not in warnings. | 
					
						
							|  |  |  |         with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |             self.module.filterwarnings("error", "", Warning, "", 0) | 
					
						
							|  |  |  |             self.assertRaises(UserWarning, self.module.warn, | 
					
						
							|  |  |  |                                 'convert to error') | 
					
						
							|  |  |  |             del self.module.filters | 
					
						
							|  |  |  |             self.assertRaises(UserWarning, self.module.warn, | 
					
						
							|  |  |  |                                 'convert to error') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_onceregistry(self): | 
					
						
							|  |  |  |         # Replacing or removing the onceregistry should be okay. | 
					
						
							|  |  |  |         global __warningregistry__ | 
					
						
							|  |  |  |         message = UserWarning('onceregistry test') | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             original_registry = self.module.onceregistry | 
					
						
							|  |  |  |             __warningregistry__ = {} | 
					
						
							|  |  |  |             with test_support.catch_warning(self.module) as w: | 
					
						
							|  |  |  |                 self.module.resetwarnings() | 
					
						
							|  |  |  |                 self.module.filterwarnings("once", category=UserWarning) | 
					
						
							|  |  |  |                 self.module.warn_explicit(message, UserWarning, "file", 42) | 
					
						
							|  |  |  |                 self.failUnlessEqual(w.message, message) | 
					
						
							|  |  |  |                 w.reset() | 
					
						
							|  |  |  |                 self.module.warn_explicit(message, UserWarning, "file", 42) | 
					
						
							|  |  |  |                 self.assert_(not w.message) | 
					
						
							|  |  |  |                 # Test the resetting of onceregistry. | 
					
						
							|  |  |  |                 self.module.onceregistry = {} | 
					
						
							|  |  |  |                 __warningregistry__ = {} | 
					
						
							|  |  |  |                 self.module.warn('onceregistry test') | 
					
						
							|  |  |  |                 self.failUnlessEqual(w.message.args, message.args) | 
					
						
							|  |  |  |                 # Removal of onceregistry is okay. | 
					
						
							|  |  |  |                 w.reset() | 
					
						
							|  |  |  |                 del self.module.onceregistry | 
					
						
							|  |  |  |                 __warningregistry__ = {} | 
					
						
							|  |  |  |                 self.module.warn_explicit(message, UserWarning, "file", 42) | 
					
						
							|  |  |  |                 self.failUnless(not w.message) | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             self.module.onceregistry = original_registry | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_showwarning_missing(self): | 
					
						
							|  |  |  |         # Test that showwarning() missing is okay. | 
					
						
							|  |  |  |         text = 'del showwarning test' | 
					
						
							|  |  |  |         with test_support.catch_warning(self.module): | 
					
						
							|  |  |  |             self.module.filterwarnings("always", category=UserWarning) | 
					
						
							|  |  |  |             del self.module.showwarning | 
					
						
							|  |  |  |             with test_support.captured_output('stderr') as stream: | 
					
						
							|  |  |  |                 self.module.warn(text) | 
					
						
							|  |  |  |                 result = stream.getvalue() | 
					
						
							|  |  |  |         self.failUnless(text in result) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-06 22:18:11 +00:00
										 |  |  |     def test_showwarning_not_callable(self): | 
					
						
							|  |  |  |         self.module.filterwarnings("always", category=UserWarning) | 
					
						
							|  |  |  |         old_showwarning = self.module.showwarning | 
					
						
							|  |  |  |         self.module.showwarning = 23 | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             self.assertRaises(TypeError, self.module.warn, "Warning!") | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             self.module.showwarning = old_showwarning | 
					
						
							| 
									
										
										
										
											2008-05-14 07:18:22 +00:00
										 |  |  |             self.module.resetwarnings() | 
					
						
							| 
									
										
										
										
											2008-05-06 22:18:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |     def test_show_warning_output(self): | 
					
						
							|  |  |  |         # With showarning() missing, make sure that output is okay. | 
					
						
							|  |  |  |         text = 'test show_warning' | 
					
						
							|  |  |  |         with test_support.catch_warning(self.module): | 
					
						
							|  |  |  |             self.module.filterwarnings("always", category=UserWarning) | 
					
						
							|  |  |  |             del self.module.showwarning | 
					
						
							|  |  |  |             with test_support.captured_output('stderr') as stream: | 
					
						
							|  |  |  |                 warning_tests.inner(text) | 
					
						
							|  |  |  |                 result = stream.getvalue() | 
					
						
							|  |  |  |         self.failUnlessEqual(result.count('\n'), 2, | 
					
						
							|  |  |  |                              "Too many newlines in %r" % result) | 
					
						
							|  |  |  |         first_line, second_line = result.split('\n', 1) | 
					
						
							|  |  |  |         expected_file = os.path.splitext(warning_tests.__file__)[0] + '.py' | 
					
						
							| 
									
										
										
										
											2008-04-13 17:41:31 +00:00
										 |  |  |         first_line_parts = first_line.rsplit(':', 3) | 
					
						
							| 
									
										
										
										
											2008-04-13 17:09:43 +00:00
										 |  |  |         path, line, warning_class, message = first_line_parts | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |         line = int(line) | 
					
						
							|  |  |  |         self.failUnlessEqual(expected_file, path) | 
					
						
							|  |  |  |         self.failUnlessEqual(warning_class, ' ' + UserWarning.__name__) | 
					
						
							|  |  |  |         self.failUnlessEqual(message, ' ' + text) | 
					
						
							|  |  |  |         expected_line = '  ' + linecache.getline(path, line).strip() + '\n' | 
					
						
							|  |  |  |         assert expected_line | 
					
						
							|  |  |  |         self.failUnlessEqual(second_line, expected_line) | 
					
						
							| 
									
										
										
										
											2007-04-03 16:53:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-22 16:49:14 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-20 10:09:52 +00:00
										 |  |  | class WarningsDisplayTests(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |     """Test the displaying of warnings and the ability to overload functions
 | 
					
						
							|  |  |  |     related to displaying warnings."""
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-20 10:09:52 +00:00
										 |  |  |     def test_formatwarning(self): | 
					
						
							|  |  |  |         message = "msg" | 
					
						
							|  |  |  |         category = Warning | 
					
						
							|  |  |  |         file_name = os.path.splitext(warning_tests.__file__)[0] + '.py' | 
					
						
							|  |  |  |         line_num = 3 | 
					
						
							|  |  |  |         file_line = linecache.getline(file_name, line_num).strip() | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |         format = "%s:%s: %s: %s\n  %s\n" | 
					
						
							|  |  |  |         expect = format % (file_name, line_num, category.__name__, message, | 
					
						
							|  |  |  |                             file_line) | 
					
						
							|  |  |  |         self.failUnlessEqual(expect, self.module.formatwarning(message, | 
					
						
							|  |  |  |                                                 category, file_name, line_num)) | 
					
						
							|  |  |  |         # Test the 'line' argument. | 
					
						
							|  |  |  |         file_line += " for the win!" | 
					
						
							|  |  |  |         expect = format % (file_name, line_num, category.__name__, message, | 
					
						
							|  |  |  |                             file_line) | 
					
						
							|  |  |  |         self.failUnlessEqual(expect, self.module.formatwarning(message, | 
					
						
							|  |  |  |                                     category, file_name, line_num, file_line)) | 
					
						
							| 
									
										
										
										
											2007-12-20 10:09:52 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_showwarning(self): | 
					
						
							|  |  |  |         file_name = os.path.splitext(warning_tests.__file__)[0] + '.py' | 
					
						
							|  |  |  |         line_num = 3 | 
					
						
							|  |  |  |         expected_file_line = linecache.getline(file_name, line_num).strip() | 
					
						
							|  |  |  |         message = 'msg' | 
					
						
							|  |  |  |         category = Warning | 
					
						
							|  |  |  |         file_object = StringIO.StringIO() | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |         expect = self.module.formatwarning(message, category, file_name, | 
					
						
							|  |  |  |                                             line_num) | 
					
						
							|  |  |  |         self.module.showwarning(message, category, file_name, line_num, | 
					
						
							| 
									
										
										
										
											2007-12-20 10:09:52 +00:00
										 |  |  |                                 file_object) | 
					
						
							|  |  |  |         self.failUnlessEqual(file_object.getvalue(), expect) | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |         # Test 'line' argument. | 
					
						
							|  |  |  |         expected_file_line += "for the win!" | 
					
						
							|  |  |  |         expect = self.module.formatwarning(message, category, file_name, | 
					
						
							|  |  |  |                                             line_num, expected_file_line) | 
					
						
							|  |  |  |         file_object = StringIO.StringIO() | 
					
						
							|  |  |  |         self.module.showwarning(message, category, file_name, line_num, | 
					
						
							|  |  |  |                                 file_object, expected_file_line) | 
					
						
							|  |  |  |         self.failUnlessEqual(expect, file_object.getvalue()) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-13 02:42:36 +00:00
										 |  |  | class CWarningsDisplayTests(BaseTest, WarningsDisplayTests): | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |     module = c_warnings | 
					
						
							| 
									
										
										
										
											2007-12-20 10:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-13 02:42:36 +00:00
										 |  |  | class PyWarningsDisplayTests(BaseTest, WarningsDisplayTests): | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |     module = py_warnings | 
					
						
							| 
									
										
										
										
											2007-12-20 10:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-05 05:32:07 +00:00
										 |  |  | class ShowwarningDeprecationTests(BaseTest): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     """Test the deprecation of the old warnings.showwarning() API works.""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def bad_showwarning(message, category, filename, lineno, file=None): | 
					
						
							|  |  |  |         pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_deprecation(self): | 
					
						
							|  |  |  |         # message, category, filename, lineno[, file[, line]] | 
					
						
							|  |  |  |         args = ("message", UserWarning, "file name", 42) | 
					
						
							|  |  |  |         with test_support.catch_warning(self.module): | 
					
						
							|  |  |  |             self.module.filterwarnings("error", category=DeprecationWarning) | 
					
						
							|  |  |  |             self.module.showwarning = self.bad_showwarning | 
					
						
							|  |  |  |             self.assertRaises(DeprecationWarning, self.module.warn_explicit, | 
					
						
							|  |  |  |                                 *args) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CShowwarningDeprecationTests(ShowwarningDeprecationTests): | 
					
						
							|  |  |  |     module = c_warnings | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PyShowwarningDeprecationTests(ShowwarningDeprecationTests): | 
					
						
							|  |  |  |     module = py_warnings | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  | def test_main(): | 
					
						
							| 
									
										
										
										
											2008-04-18 23:31:33 +00:00
										 |  |  |     py_warnings.onceregistry.clear() | 
					
						
							|  |  |  |     c_warnings.onceregistry.clear() | 
					
						
							| 
									
										
										
										
											2008-04-13 02:42:36 +00:00
										 |  |  |     test_support.run_unittest(CFilterTests, | 
					
						
							|  |  |  |                                 PyFilterTests, | 
					
						
							|  |  |  |                                 CWarnTests, | 
					
						
							|  |  |  |                                 PyWarnTests, | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |                                 CWCmdLineTests, PyWCmdLineTests, | 
					
						
							|  |  |  |                                 _WarningsTests, | 
					
						
							|  |  |  |                                 CWarningsDisplayTests, PyWarningsDisplayTests, | 
					
						
							| 
									
										
										
										
											2008-05-05 05:32:07 +00:00
										 |  |  |                                 CShowwarningDeprecationTests, | 
					
						
							|  |  |  |                                 PyShowwarningDeprecationTests, | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |                              ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-07-13 08:37:40 +00:00
										 |  |  | if __name__ == "__main__": | 
					
						
							| 
									
										
										
										
											2008-04-12 23:44:07 +00:00
										 |  |  |     test_main() |