14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport __builtin__ 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport exceptions 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport warnings 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test.test_support import run_unittest, check_warnings 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport os 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport sys 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom platform import system as platform_system 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmDEPRECATION_WARNINGS = ["BaseException.message has been deprecated"] 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif sys.py3kwarning: 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm DEPRECATION_WARNINGS.extend( 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ["exceptions must derive from BaseException", 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "catching classes that don't inherit from BaseException is not allowed", 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "__get(item|slice)__ not supported for exception classes"]) 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm_deprecations = [(msg, DeprecationWarning) for msg in DEPRECATION_WARNINGS] 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Silence Py3k and other deprecation warnings 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef ignore_deprecation_warnings(func): 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Ignore the known DeprecationWarnings.""" 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def wrapper(*args, **kw): 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with check_warnings(*_deprecations, quiet=True): 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return func(*args, **kw) 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return wrapper 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass ExceptionClassTests(unittest.TestCase): 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests for anything relating to exception objects themselves (e.g., 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm inheritance hierarchy)""" 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_builtins_new_style(self): 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(issubclass(Exception, object)) 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @ignore_deprecation_warnings 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def verify_instance_interface(self, ins): 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for attr in ("args", "message", "__str__", "__repr__", "__getitem__"): 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(hasattr(ins, attr), 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "%s missing %s attribute" % 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (ins.__class__.__name__, attr)) 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_inheritance(self): 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Make sure the inheritance hierarchy matches the documentation 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exc_set = set(x for x in dir(exceptions) if not x.startswith('_')) 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm inheritance_tree = open(os.path.join(os.path.split(__file__)[0], 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'exception_hierarchy.txt')) 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm superclass_name = inheritance_tree.readline().rstrip() 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm last_exc = getattr(__builtin__, superclass_name) 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except AttributeError: 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail("base class %s not a built-in" % superclass_name) 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn(superclass_name, exc_set) 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exc_set.discard(superclass_name) 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm superclasses = [] # Loop will insert base exception 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm last_depth = 0 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for exc_line in inheritance_tree: 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exc_line = exc_line.rstrip() 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm depth = exc_line.rindex('-') 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exc_name = exc_line[depth+2:] # Slice past space 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if '(' in exc_name: 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm paren_index = exc_name.index('(') 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm platform_name = exc_name[paren_index+1:-1] 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exc_name = exc_name[:paren_index-1] # Slice off space 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if platform_system() != platform_name: 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exc_set.discard(exc_name) 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm continue 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if '[' in exc_name: 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm left_bracket = exc_name.index('[') 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exc_name = exc_name[:left_bracket-1] # cover space 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exc = getattr(__builtin__, exc_name) 744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except AttributeError: 754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail("%s not a built-in exception" % exc_name) 764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if last_depth < depth: 774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm superclasses.append((last_depth, last_exc)) 784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif last_depth > depth: 794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm while superclasses[-1][0] >= depth: 804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm superclasses.pop() 814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(issubclass(exc, superclasses[-1][1]), 824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "%s is not a subclass of %s" % (exc.__name__, 834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm superclasses[-1][1].__name__)) 844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: # Some exceptions require arguments; just skip them 854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.verify_instance_interface(exc()) 864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except TypeError: 874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn(exc_name, exc_set) 894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exc_set.discard(exc_name) 904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm last_exc = exc 914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm last_depth = depth 924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm finally: 934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm inheritance_tree.close() 944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(exc_set), 0, "%s not accounted for" % exc_set) 954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm interface_tests = ("length", "args", "message", "str", "unicode", "repr", 974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "indexing") 984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def interface_test_driver(self, results): 1004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for test_name, (given, expected) in zip(self.interface_tests, results): 1014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(given, expected, "%s: %s != %s" % (test_name, 1024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm given, expected)) 1034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @ignore_deprecation_warnings 1054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_interface_single_arg(self): 1064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Make sure interface works properly when given a single argument 1074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm arg = "spam" 1084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exc = Exception(arg) 1094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm results = ([len(exc.args), 1], [exc.args[0], arg], [exc.message, arg], 1104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [str(exc), str(arg)], [unicode(exc), unicode(arg)], 1114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [repr(exc), exc.__class__.__name__ + repr(exc.args)], 1124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [exc[0], arg]) 1134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.interface_test_driver(results) 1144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @ignore_deprecation_warnings 1164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_interface_multi_arg(self): 1174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Make sure interface correct when multiple arguments given 1184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm arg_count = 3 1194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm args = tuple(range(arg_count)) 1204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exc = Exception(*args) 1214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm results = ([len(exc.args), arg_count], [exc.args, args], 1224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [exc.message, ''], [str(exc), str(args)], 1234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [unicode(exc), unicode(args)], 1244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [repr(exc), exc.__class__.__name__ + repr(exc.args)], 1254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [exc[-1], args[-1]]) 1264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.interface_test_driver(results) 1274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @ignore_deprecation_warnings 1294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_interface_no_arg(self): 1304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Make sure that with no args that interface is correct 1314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exc = Exception() 1324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm results = ([len(exc.args), 0], [exc.args, tuple()], 1334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [exc.message, ''], 1344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [str(exc), ''], [unicode(exc), u''], 1354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [repr(exc), exc.__class__.__name__ + '()'], [True, True]) 1364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.interface_test_driver(results) 1374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_message_deprecation(self): 1404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # As of Python 2.6, BaseException.message is deprecated. 1414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with check_warnings(("", DeprecationWarning)): 1424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm BaseException().message 1434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass UsageTests(unittest.TestCase): 1464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Test usage of exceptions""" 1484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def raise_fails(self, object_): 1504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Make sure that raising 'object_' triggers a TypeError.""" 1514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise object_ 1534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except TypeError: 1544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return # What is expected. 1554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail("TypeError expected for raising %s" % type(object_)) 1564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def catch_fails(self, object_): 1584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Catching 'object_' should raise a TypeError.""" 1594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise StandardError 1624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except object_: 1634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 1644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except TypeError: 1654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 1664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except StandardError: 1674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail("TypeError expected when catching %s" % type(object_)) 1684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise StandardError 1724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except (object_,): 1734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 1744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except TypeError: 1754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return 1764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except StandardError: 1774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail("TypeError expected when catching %s as specified in a " 1784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "tuple" % type(object_)) 1794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @ignore_deprecation_warnings 1814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_raise_classic(self): 1824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Raising a classic class is okay (for now). 1834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class ClassicClass: 1844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 1854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise ClassicClass 1874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except ClassicClass: 1884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 1894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except: 1904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail("unable to raise classic class") 1914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise ClassicClass() 1934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except ClassicClass: 1944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 1954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except: 1964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail("unable to raise classic class instance") 1974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_raise_new_style_non_exception(self): 1994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # You cannot raise a new-style class that does not inherit from 2004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # BaseException; the ability was not possible until BaseException's 2014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # introduction so no need to support new-style objects that do not 2024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # inherit from it. 2034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class NewStyleClass(object): 2044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 2054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.raise_fails(NewStyleClass) 2064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.raise_fails(NewStyleClass()) 2074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_raise_string(self): 2094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Raising a string raises TypeError. 2104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.raise_fails("spam") 2114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_catch_string(self): 2134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Catching a string should trigger a DeprecationWarning. 2144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with warnings.catch_warnings(): 2154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm warnings.resetwarnings() 2164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm warnings.filterwarnings("error") 2174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm str_exc = "spam" 2184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with self.assertRaises(DeprecationWarning): 2194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 2204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise StandardError 2214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except str_exc: 2224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 2234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Make sure that even if the string exception is listed in a tuple 2254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # that a warning is raised. 2264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with self.assertRaises(DeprecationWarning): 2274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 2284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise StandardError 2294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except (AssertionError, str_exc): 2304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 2314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test_main(): 2344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm run_unittest(ExceptionClassTests, UsageTests) 2354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == '__main__': 2394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_main() 240