1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
import unittest
import test.test_support
class SubclassInstanceTest(unittest.TestCase):
def test_subclass_int(self):
try:
class foo(12): pass
except TypeError:
pass
else:
self.fail("expected TypeError for subclassing an int instance")
class TestStableSubclasses(unittest.TestCase):
def test_subclasses_stable(self):
class C(object):
pass
subclasses = []
for i in range(1024):
name = 'S%s' % i
subclasses.append(type(name, (C,), {}))
self.assertEqual(subclasses, C.__subclasses__())
def test_subclasses_stable_with_gc(self):
class C(object):
pass
subclasses = []
for i in range(1024):
name = 'S%s' % i
subclasses.append(type(name, (C,), {}))
self.assertEqual(subclasses, C.__subclasses__())
# punch some holes in the previous subclasses, verify
# continued stability
for i in range(32):
del subclasses[i * 32] # depends on prev deletion of course...
test.test_support.gc_collect()
self.assertEqual(subclasses, C.__subclasses__())
# add some more subclasses
for i in range(1024, 2048):
name = 'S%s' % i
subclasses.append(type(name, (C,), {}))
self.assertEqual(subclasses, C.__subclasses__())
def test_main():
test.test_support.run_unittest(
SubclassInstanceTest, TestStableSubclasses)
if __name__ == "__main__":
test_main()
|