test_opcodes.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. # Python test set -- part 2, opcodes
  2. from test.test_support import run_unittest, check_py3k_warnings
  3. import unittest
  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_raise_class_exceptions(self):
  21. class AClass: pass
  22. class BClass(AClass): pass
  23. class CClass: pass
  24. class DClass(AClass):
  25. def __init__(self, ignore):
  26. pass
  27. try: raise AClass()
  28. except: pass
  29. try: raise AClass()
  30. except AClass: pass
  31. try: raise BClass()
  32. except AClass: pass
  33. try: raise BClass()
  34. except CClass: self.fail()
  35. except: pass
  36. a = AClass()
  37. b = BClass()
  38. try: raise AClass, b
  39. except BClass, v:
  40. self.assertEqual(v, b)
  41. else: self.fail("no exception")
  42. try: raise b
  43. except AClass, v:
  44. self.assertEqual(v, b)
  45. else:
  46. self.fail("no exception")
  47. # not enough arguments
  48. try: raise BClass, a
  49. except TypeError: pass
  50. else: self.fail("no exception")
  51. try: raise DClass, a
  52. except DClass, v:
  53. self.assertIsInstance(v, DClass)
  54. else:
  55. self.fail("no exception")
  56. def test_compare_function_objects(self):
  57. f = eval('lambda: None')
  58. g = eval('lambda: None')
  59. self.assertNotEqual(f, g)
  60. f = eval('lambda a: a')
  61. g = eval('lambda a: a')
  62. self.assertNotEqual(f, g)
  63. f = eval('lambda a=1: a')
  64. g = eval('lambda a=1: a')
  65. self.assertNotEqual(f, g)
  66. f = eval('lambda: 0')
  67. g = eval('lambda: 1')
  68. self.assertNotEqual(f, g)
  69. f = eval('lambda: None')
  70. g = eval('lambda a: None')
  71. self.assertNotEqual(f, g)
  72. f = eval('lambda a: None')
  73. g = eval('lambda b: None')
  74. self.assertNotEqual(f, g)
  75. f = eval('lambda a: None')
  76. g = eval('lambda a=None: None')
  77. self.assertNotEqual(f, g)
  78. f = eval('lambda a=0: None')
  79. g = eval('lambda a=1: None')
  80. self.assertNotEqual(f, g)
  81. def test_modulo_of_string_subclasses(self):
  82. class MyString(str):
  83. def __mod__(self, value):
  84. return 42
  85. self.assertEqual(MyString() % 3, 42)
  86. def test_main():
  87. with check_py3k_warnings(("exceptions must derive from BaseException",
  88. DeprecationWarning),
  89. ("catching classes that don't inherit "
  90. "from BaseException is not allowed",
  91. DeprecationWarning)):
  92. run_unittest(OpcodeTest)
  93. if __name__ == '__main__':
  94. test_main()