| # Python test set -- part 2, opcodes | 
 |  | 
 | import unittest | 
 | from test import ann_module, support | 
 |  | 
 | class OpcodeTest(unittest.TestCase): | 
 |  | 
 |     def test_try_inside_for_loop(self): | 
 |         n = 0 | 
 |         for i in range(10): | 
 |             n = n+i | 
 |             try: 1/0 | 
 |             except NameError: pass | 
 |             except ZeroDivisionError: pass | 
 |             except TypeError: pass | 
 |             try: pass | 
 |             except: pass | 
 |             try: pass | 
 |             finally: pass | 
 |             n = n+i | 
 |         if n != 90: | 
 |             self.fail('try inside for') | 
 |  | 
 |     def test_setup_annotations_line(self): | 
 |         # check that SETUP_ANNOTATIONS does not create spurious line numbers | 
 |         try: | 
 |             with open(ann_module.__file__, encoding="utf-8") as f: | 
 |                 txt = f.read() | 
 |             co = compile(txt, ann_module.__file__, 'exec') | 
 |             self.assertEqual(co.co_firstlineno, 1) | 
 |         except OSError: | 
 |             pass | 
 |  | 
 |     def test_default_annotations_exist(self): | 
 |         class C: pass | 
 |         self.assertEqual(C.__annotations__, {}) | 
 |  | 
 |     def test_use_existing_annotations(self): | 
 |         ns = {'__annotations__': {1: 2}} | 
 |         exec('x: int', ns) | 
 |         self.assertEqual(ns['__annotations__'], {'x': int, 1: 2}) | 
 |  | 
 |     def test_do_not_recreate_annotations(self): | 
 |         # Don't rely on the existence of the '__annotations__' global. | 
 |         with support.swap_item(globals(), '__annotations__', {}): | 
 |             del globals()['__annotations__'] | 
 |             class C: | 
 |                 del __annotations__ | 
 |                 with self.assertRaises(NameError): | 
 |                     x: int | 
 |  | 
 |     def test_raise_class_exceptions(self): | 
 |  | 
 |         class AClass(Exception): pass | 
 |         class BClass(AClass): pass | 
 |         class CClass(Exception): pass | 
 |         class DClass(AClass): | 
 |             def __init__(self, ignore): | 
 |                 pass | 
 |  | 
 |         try: raise AClass() | 
 |         except: pass | 
 |  | 
 |         try: raise AClass() | 
 |         except AClass: pass | 
 |  | 
 |         try: raise BClass() | 
 |         except AClass: pass | 
 |  | 
 |         try: raise BClass() | 
 |         except CClass: self.fail() | 
 |         except: pass | 
 |  | 
 |         a = AClass() | 
 |         b = BClass() | 
 |  | 
 |         try: | 
 |             raise b | 
 |         except AClass as v: | 
 |             self.assertEqual(v, b) | 
 |         else: | 
 |             self.fail("no exception") | 
 |  | 
 |         # not enough arguments | 
 |         ##try:  raise BClass, a | 
 |         ##except TypeError: pass | 
 |         ##else: self.fail("no exception") | 
 |  | 
 |         try:  raise DClass(a) | 
 |         except DClass as v: | 
 |             self.assertIsInstance(v, DClass) | 
 |         else: | 
 |             self.fail("no exception") | 
 |  | 
 |     def test_compare_function_objects(self): | 
 |  | 
 |         f = eval('lambda: None') | 
 |         g = eval('lambda: None') | 
 |         self.assertNotEqual(f, g) | 
 |  | 
 |         f = eval('lambda a: a') | 
 |         g = eval('lambda a: a') | 
 |         self.assertNotEqual(f, g) | 
 |  | 
 |         f = eval('lambda a=1: a') | 
 |         g = eval('lambda a=1: a') | 
 |         self.assertNotEqual(f, g) | 
 |  | 
 |         f = eval('lambda: 0') | 
 |         g = eval('lambda: 1') | 
 |         self.assertNotEqual(f, g) | 
 |  | 
 |         f = eval('lambda: None') | 
 |         g = eval('lambda a: None') | 
 |         self.assertNotEqual(f, g) | 
 |  | 
 |         f = eval('lambda a: None') | 
 |         g = eval('lambda b: None') | 
 |         self.assertNotEqual(f, g) | 
 |  | 
 |         f = eval('lambda a: None') | 
 |         g = eval('lambda a=None: None') | 
 |         self.assertNotEqual(f, g) | 
 |  | 
 |         f = eval('lambda a=0: None') | 
 |         g = eval('lambda a=1: None') | 
 |         self.assertNotEqual(f, g) | 
 |  | 
 |     def test_modulo_of_string_subclasses(self): | 
 |         class MyString(str): | 
 |             def __mod__(self, value): | 
 |                 return 42 | 
 |         self.assertEqual(MyString() % 3, 42) | 
 |  | 
 |  | 
 | if __name__ == '__main__': | 
 |     unittest.main() |