1# helper module for test_runner.Test_TextTestRunner.test_warnings 2 3""" 4This module has a number of tests that raise different kinds of warnings. 5When the tests are run, the warnings are caught and their messages are printed 6to stdout. This module also accepts an arg that is then passed to 7unittest.main to affect the behavior of warnings. 8Test_TextTestRunner.test_warnings executes this script with different 9combinations of warnings args and -W flags and check that the output is correct. 10See #10535. 11""" 12 13import sys 14import unittest 15import warnings 16 17def warnfun(): 18 warnings.warn('rw', RuntimeWarning) 19 20class TestWarnings(unittest.TestCase): 21 # unittest warnings will be printed at most once per type (max one message 22 # for the fail* methods, and one for the assert* methods) 23 def test_assert(self): 24 self.assertEquals(2+2, 4) 25 self.assertEquals(2*2, 4) 26 self.assertEquals(2**2, 4) 27 28 def test_fail(self): 29 self.failUnless(1) 30 self.failUnless(True) 31 32 def test_other_unittest(self): 33 self.assertAlmostEqual(2+2, 4) 34 self.assertNotAlmostEqual(4+4, 2) 35 36 # these warnings are normally silenced, but they are printed in unittest 37 def test_deprecation(self): 38 warnings.warn('dw', DeprecationWarning) 39 warnings.warn('dw', DeprecationWarning) 40 warnings.warn('dw', DeprecationWarning) 41 42 def test_import(self): 43 warnings.warn('iw', ImportWarning) 44 warnings.warn('iw', ImportWarning) 45 warnings.warn('iw', ImportWarning) 46 47 # user warnings should always be printed 48 def test_warning(self): 49 warnings.warn('uw') 50 warnings.warn('uw') 51 warnings.warn('uw') 52 53 # these warnings come from the same place; they will be printed 54 # only once by default or three times if the 'always' filter is used 55 def test_function(self): 56 57 warnfun() 58 warnfun() 59 warnfun() 60 61 62 63if __name__ == '__main__': 64 with warnings.catch_warnings(record=True) as ws: 65 # if an arg is provided pass it to unittest.main as 'warnings' 66 if len(sys.argv) == 2: 67 unittest.main(exit=False, warnings=sys.argv.pop()) 68 else: 69 unittest.main(exit=False) 70 71 # print all the warning messages collected 72 for w in ws: 73 print(w.message) 74