# Python test set -- part 2, opcodes | |
from test.test_support import run_unittest, check_py3k_warnings | |
import unittest | |
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_raise_class_exceptions(self): | |
class AClass: pass | |
class BClass(AClass): pass | |
class CClass: 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 AClass, b | |
except BClass, v: | |
self.assertEqual(v, b) | |
else: self.fail("no exception") | |
try: raise b | |
except AClass, 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, 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) | |
def test_main(): | |
with check_py3k_warnings(("exceptions must derive from BaseException", | |
DeprecationWarning), | |
("catching classes that don't inherit " | |
"from BaseException is not allowed", | |
DeprecationWarning)): | |
run_unittest(OpcodeTest) | |
if __name__ == '__main__': | |
test_main() |