| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- # 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()
|