test_opcodes.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. # Python test set -- part 2, opcodes
  2. import unittest
  3. from test import ann_module, support
  4. class OpcodeTest(unittest.TestCase):
  5. def test_try_inside_for_loop(self):
  6. n = 0
  7. for i in range(10):
  8. n = n+i
  9. try: 1/0
  10. except NameError: pass
  11. except ZeroDivisionError: pass
  12. except TypeError: pass
  13. try: pass
  14. except: pass
  15. try: pass
  16. finally: pass
  17. n = n+i
  18. if n != 90:
  19. self.fail('try inside for')
  20. def test_setup_annotations_line(self):
  21. # check that SETUP_ANNOTATIONS does not create spurious line numbers
  22. try:
  23. with open(ann_module.__file__, encoding="utf-8") as f:
  24. txt = f.read()
  25. co = compile(txt, ann_module.__file__, 'exec')
  26. self.assertEqual(co.co_firstlineno, 1)
  27. except OSError:
  28. pass
  29. def test_default_annotations_exist(self):
  30. class C: pass
  31. self.assertEqual(C.__annotations__, {})
  32. def test_use_existing_annotations(self):
  33. ns = {'__annotations__': {1: 2}}
  34. exec('x: int', ns)
  35. self.assertEqual(ns['__annotations__'], {'x': int, 1: 2})
  36. def test_do_not_recreate_annotations(self):
  37. # Don't rely on the existence of the '__annotations__' global.
  38. with support.swap_item(globals(), '__annotations__', {}):
  39. del globals()['__annotations__']
  40. class C:
  41. del __annotations__
  42. with self.assertRaises(NameError):
  43. x: int
  44. def test_raise_class_exceptions(self):
  45. class AClass(Exception): pass
  46. class BClass(AClass): pass
  47. class CClass(Exception): pass
  48. class DClass(AClass):
  49. def __init__(self, ignore):
  50. pass
  51. try: raise AClass()
  52. except: pass
  53. try: raise AClass()
  54. except AClass: pass
  55. try: raise BClass()
  56. except AClass: pass
  57. try: raise BClass()
  58. except CClass: self.fail()
  59. except: pass
  60. a = AClass()
  61. b = BClass()
  62. try:
  63. raise b
  64. except AClass as v:
  65. self.assertEqual(v, b)
  66. else:
  67. self.fail("no exception")
  68. # not enough arguments
  69. ##try: raise BClass, a
  70. ##except TypeError: pass
  71. ##else: self.fail("no exception")
  72. try: raise DClass(a)
  73. except DClass as v:
  74. self.assertIsInstance(v, DClass)
  75. else:
  76. self.fail("no exception")
  77. def test_compare_function_objects(self):
  78. f = eval('lambda: None')
  79. g = eval('lambda: None')
  80. self.assertNotEqual(f, g)
  81. f = eval('lambda a: a')
  82. g = eval('lambda a: a')
  83. self.assertNotEqual(f, g)
  84. f = eval('lambda a=1: a')
  85. g = eval('lambda a=1: a')
  86. self.assertNotEqual(f, g)
  87. f = eval('lambda: 0')
  88. g = eval('lambda: 1')
  89. self.assertNotEqual(f, g)
  90. f = eval('lambda: None')
  91. g = eval('lambda a: None')
  92. self.assertNotEqual(f, g)
  93. f = eval('lambda a: None')
  94. g = eval('lambda b: None')
  95. self.assertNotEqual(f, g)
  96. f = eval('lambda a: None')
  97. g = eval('lambda a=None: None')
  98. self.assertNotEqual(f, g)
  99. f = eval('lambda a=0: None')
  100. g = eval('lambda a=1: None')
  101. self.assertNotEqual(f, g)
  102. def test_modulo_of_string_subclasses(self):
  103. class MyString(str):
  104. def __mod__(self, value):
  105. return 42
  106. self.assertEqual(MyString() % 3, 42)
  107. if __name__ == '__main__':
  108. unittest.main()